<?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>206361</bug_id>
          
          <creation_ts>2020-01-16 10:13:16 -0800</creation_ts>
          <short_desc>Reland bytecode checkpoints since bugs have been fixed</short_desc>
          <delta_ts>2020-01-17 00:43:36 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Keith Miller">keith_miller</reporter>
          <assigned_to name="Keith Miller">keith_miller</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>pmatos</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1607523</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-01-16 10:13:16 -0800</bug_when>
    <thetext>Reland bytecode checkpoints since bugs have been fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607527</commentid>
    <comment_count>1</comment_count>
      <attachid>387929</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-01-16 10:15:37 -0800</bug_when>
    <thetext>Created attachment 387929
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607541</commentid>
    <comment_count>2</comment_count>
      <attachid>387929</attachid>
    <who name="Caio Lima">ticaiolima</who>
    <bug_when>2020-01-16 10:51:25 -0800</bug_when>
    <thetext>Comment on attachment 387929
Patch

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

&gt; Source/JavaScriptCore/interpreter/CallFrame.h:55
&gt; +#else

Now we use PC base register on 32-bits, we don&apos;t need this constructor anymore. Could you remove this IFDEF?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607544</commentid>
    <comment_count>3</comment_count>
      <attachid>387929</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-01-16 11:01:25 -0800</bug_when>
    <thetext>Comment on attachment 387929
Patch

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

&gt;&gt; Source/JavaScriptCore/interpreter/CallFrame.h:55
&gt;&gt; +#else
&gt; 
&gt; Now we use PC base register on 32-bits, we don&apos;t need this constructor anymore. Could you remove this IFDEF?

Whoops, will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607546</commentid>
    <comment_count>4</comment_count>
      <attachid>387932</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-01-16 11:09:08 -0800</bug_when>
    <thetext>Created attachment 387932
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607561</commentid>
    <comment_count>5</comment_count>
      <attachid>387932</attachid>
    <who name="Caio Lima">ticaiolima</who>
    <bug_when>2020-01-16 11:32:11 -0800</bug_when>
    <thetext>Comment on attachment 387932
Patch

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

r- because I&apos;ve found a bug.

&gt; Source/JavaScriptCore/jit/SpecializedThunkJIT.h:58
&gt; +            VirtualRegister src = virtualRegisterForArgument(argument);

Look that this can cause some troubles on existing code. `CallFrame::argumentOffset` returns the value based on `CallFrameSlot::firstArgument + argument`, however virtualRegisterForArgument uses `argument + CallFrame::thisArgumentOffset();`, making the results off by one. For example, this can cause issues on code generated by `stringCharLoad`, because the assembly generated by `jit.loadJSStringArgument(SpecializedThunkJIT::ThisArgument, SpecializedThunkJIT::regT0);` won&apos;t access `thisArgument` correctly (The reason is because `SpecializedThunkJIT::ThisArgument == -1`). We don&apos;t get crashes on 64-bits for `charCodeAt` because it always fallback to slow path (I suspect we can observe performance regressions for this issue).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607617</commentid>
    <comment_count>6</comment_count>
      <attachid>387932</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-01-16 13:18:51 -0800</bug_when>
    <thetext>Comment on attachment 387932
Patch

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

&gt;&gt; Source/JavaScriptCore/jit/SpecializedThunkJIT.h:58
&gt;&gt; +            VirtualRegister src = virtualRegisterForArgument(argument);
&gt; 
&gt; Look that this can cause some troubles on existing code. `CallFrame::argumentOffset` returns the value based on `CallFrameSlot::firstArgument + argument`, however virtualRegisterForArgument uses `argument + CallFrame::thisArgumentOffset();`, making the results off by one. For example, this can cause issues on code generated by `stringCharLoad`, because the assembly generated by `jit.loadJSStringArgument(SpecializedThunkJIT::ThisArgument, SpecializedThunkJIT::regT0);` won&apos;t access `thisArgument` correctly (The reason is because `SpecializedThunkJIT::ThisArgument == -1`). We don&apos;t get crashes on 64-bits for `charCodeAt` because it always fallback to slow path (I suspect we can observe performance regressions for this issue).

Nice catch. I&apos;m gonna rename virtualRegisterForArgument to virtualRegisterForArgumentIncludingThis so we don&apos;t make the same mistake again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607637</commentid>
    <comment_count>7</comment_count>
      <attachid>387953</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-01-16 13:41:58 -0800</bug_when>
    <thetext>Created attachment 387953
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607714</commentid>
    <comment_count>8</comment_count>
      <attachid>387972</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-01-16 15:47:53 -0800</bug_when>
    <thetext>Created attachment 387972
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607846</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-16 20:08:36 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 387972:

editing/spelling/spellcheck-attribute.html bug 206178 (authors: g.czajkowski@samsung.com, mark.lam@apple.com, and rniwa@webkit.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607847</commentid>
    <comment_count>10</comment_count>
      <attachid>387972</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-16 20:09:44 -0800</bug_when>
    <thetext>Comment on attachment 387972
Patch

Clearing flags on attachment: 387972

Committed r254735: &lt;https://trac.webkit.org/changeset/254735&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607848</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-16 20:09:46 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607849</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-01-16 20:10:14 -0800</bug_when>
    <thetext>&lt;rdar://problem/58669583&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607914</commentid>
    <comment_count>13</comment_count>
    <who name="Paulo Matos">pmatos</who>
    <bug_when>2020-01-17 00:43:36 -0800</bug_when>
    <thetext>This badly breaks 32bit testing: https://build.webkit.org/builders/JSCOnly%20Linux%20ARMv7%20Thumb2%20Release/builds/10571

I will open a bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387929</attachid>
            <date>2020-01-16 10:15:37 -0800</date>
            <delta_ts>2020-01-16 11:08:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206361-20200116101531.patch</filename>
            <type>text/plain</type>
            <size>668239</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0Njg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
Yzk2MTU1NTE0NDZmOWU5NTYyYWIxOTNkMWYyOGVhNjI5ZGFiMDA0Li5iNDY4MTI2ODdkNGFhOTJj
MmY2YTgzNDJlMWZiZTgwNDIzNWM4NDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3ODAgQEAKKzIwMjAtMDEtMTYgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmVsYW5kIGJ5dGVjb2RlIGNoZWNrcG9pbnRzIHNpbmNlIGJ1Z3Mg
aGF2ZSBiZWVuIGZpeGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDYzNjEKKworICAgICAgICBVbnJldmlld2VkLCByZWxhbmQuCisKKyAgICAgICAg
VGhpcyB3YXRjaCBidWdzIGhhdmUgYmVlbiBmaXhlZCBieSBodHRwczovL3RyYWMud2Via2l0Lm9y
Zy9jaGFuZ2VzZXQvMjU0Njc0CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQ29kZVJlZi5oOgorICAgICAgICAqIGFzc2VtYmxlci9Qcm9iZUZyYW1lLmg6Cisg
ICAgICAgIChKU0M6OlByb2JlOjpGcmFtZTo6b3BlcmFuZCk6CisgICAgICAgIChKU0M6OlByb2Jl
OjpGcmFtZTo6c2V0T3BlcmFuZCk6CisgICAgICAgICogYjMvdGVzdGIzLmg6CisgICAgICAgIChw
b3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyk6CisgICAgICAgIChmbG9hdGluZ1BvaW50T3Bl
cmFuZHMpOgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlND
OjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nh
c2VTbmlwcGV0UGFyYW1zLmNwcDoKKyAgICAgICAgKEpTQzo6U2xvd1BhdGhDYWxsR2VuZXJhdG9y
V2l0aEFyZ3VtZW50czo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29k
ZUR1bXBlci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlRHVtcGVyQmFzZTo6ZHVtcFZhbHVl
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpyZWdpc3Rlck5hbWUgY29u
c3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUR1bXBlcjxCbG9jaz46OmNvbnN0YW50TmFtZSBj
b25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkJ5dGVjb2RlRHVtcGVyOjpjb25zdGFudE5hbWUg
Y29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmg6CisgICAgICAgICog
Ynl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6
OmR1bXAgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlSW5kZXguaDoKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6Qnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlSW5kZXg6Om9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6
OmNoZWNrcG9pbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojphc0JpdHMg
Y29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4OjpoYXNoIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlSW5kZXg6OnBhY2spOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojpm
cm9tQml0cyk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiOgorICAgICAgICAq
IGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHA6CisgICAgICAgIChKU0M6OmVu
dW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwpOgorICAgICAgICAoSlNDOjp0bXBMaXZlbmVzc0ZvckNo
ZWNrcG9pbnQpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5o
OgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZlKToKKyAgICAgICAgKEpT
Qzo6dmlydHVhbFJlZ2lzdGVyVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZSk6CisgICAgICAgIChK
U0M6OnZpcnR1YWxSZWdpc3RlcklzTGl2ZSk6CisgICAgICAgIChKU0M6Om9wZXJhbmRJc0Fsd2F5
c0xpdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2
ZUlzTGl2ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Om9wZXJhbmRJc0xpdmUpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJ5dGVjb2Rl
SW5kZXhGb3JFeGl0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjplbnN1cmVDYXRj
aExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXhTbG93KToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjp1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5l
c3MpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6Om51bVRtcHMgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzS25vd25O
b3RJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzVGVtcG9yYXJ5UmVnaXN0
ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvbnN0YW50UmVnaXN0ZXIpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmdldENvbnN0YW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6cmVwbGFjZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjppc1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBi
eXRlY29kZS9Db2RlT3JpZ2luLmg6CisgICAgICAgICogYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2
ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6OnZpcnR1YWxSZWdp
c3RlcklzTGl2ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkZ1bGxCeXRlY29kZUxpdmVuZXNzOjpv
cGVyYW5kSXNMaXZlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVD
YWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpJbmxpbmVDYWxsRnJh
bWUpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OnNldFRtcE9mZnNldCk6CisgICAg
ICAgIChKU0M6OkNvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6Q29kZU9yaWdpbjo6aW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQgY29u
c3QpOgorICAgICAgICAoSlNDOjpyZW1hcE9wZXJhbmQpOgorICAgICAgICAoSlNDOjp1bm1hcE9w
ZXJhbmQpOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjp3YWxrVXBJbmxpbmVTdGFjayk6IERl
bGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaDoKKyAg
ICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6OkxhenlPcGVyYW5kVmFsdWVQ
cm9maWxlS2V5KToKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6Omhh
c2ggY29uc3QpOgorICAgICAgICAoSlNDOjpMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleTo6b3Bl
cmFuZCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZS5jcHA6CisgICAgICAgIChKU0M6Ok1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZy
b21MYXp5T3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGU6OmVtaXRSZXBvcnRWYWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6Ok1ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGU6OnJlcG9ydFZhbHVlKToKKyAgICAgICAgKiBieXRlY29kZS9NZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlLmg6CisgICAgICAgICogYnl0ZWNvZGUvT3BlcmFuZHMuaDoK
KyAgICAgICAgKEpTQzo6T3BlcmFuZDo6T3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6
OnRtcCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmtpbmQgY29uc3QpOgorICAgICAgICAoSlND
OjpPcGVyYW5kOjp2YWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OnZpcnR1YWxS
ZWdpc3RlciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmFzQml0cyBjb25zdCk6Cisg
ICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzVG1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFu
ZDo6aXNBcmd1bWVudCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzTG9jYWwgY29u
c3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjppc0hlYWRlciBjb25zdCk6CisgICAgICAgIChK
U0M6Ok9wZXJhbmQ6OmlzQ29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjp0
b0FyZ3VtZW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6dG9Mb2NhbCBjb25zdCk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoSlND
OjpPcGVyYW5kOjppc1ZhbGlkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6ZnJvbUJp
dHMpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6T3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpP
cGVyYW5kczo6bnVtYmVyT2ZMb2NhbHMgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6
bnVtYmVyT2ZUbXBzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnRtcEluZGV4IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmFyZ3VtZW50SW5kZXggY29uc3QpOgorICAg
ICAgICAoSlNDOjpPcGVyYW5kczo6bG9jYWxJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzOjp0bXApOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6dG1wIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6T3BlcmFuZHM6OmFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmFy
Z3VtZW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmxvY2FsKToKKyAgICAgICAg
KEpTQzo6T3BlcmFuZHM6OmxvY2FsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnNp
emVGb3IgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXRGb3IpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kczo6YXRGb3IgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6ZW5z
dXJlTG9jYWxzKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmVuc3VyZVRtcHMpOgorICAgICAg
ICAoSlNDOjpPcGVyYW5kczo6Z2V0Rm9yT3BlcmFuZEluZGV4KToKKyAgICAgICAgKEpTQzo6T3Bl
cmFuZHM6OmdldEZvck9wZXJhbmRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRz
OjpvcGVyYW5kSW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmFuZCk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
T3BlcmFuZHM6Omhhc09wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2V0
T3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdCBjb25zdCk6CisgICAgICAgIChK
U0M6Ok9wZXJhbmRzOjphdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYXRvcltdIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhdG9yW10pOgorICAgICAgICAoSlND
OjpPcGVyYW5kczo6b3BlcmFuZEZvckluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFu
ZHM6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6aXNBcmd1bWVu
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjppc0xvY2FsIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnZpcnR1YWxSZWdpc3RlckZvcklu
ZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnNldE9wZXJhbmRG
aXJzdFRpbWUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5o
OgorICAgICAgICAoSlNDOjpPcGVyYW5kOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3Bl
cmFuZHM8VD46OmR1bXBJbkNvbnRleHQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczxU
Pjo6ZHVtcCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3Bw
OgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2spOgor
ICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjpoYXNDaGVja3BvaW50cyBjb25zdCk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjpzZXRIYXNDaGVja3BvaW50cyk6CisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrOjpjb25zdGFudFJlZ2lzdGVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6OmdldENvbnN0YW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2s6OmlzQ29uc3RhbnRSZWdpc3RlckluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBieXRlY29kZS9WYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyOjpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXJCdWZmZXIpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJC
dWZmZXI6On5WYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIpOgorICAgICAgICAo
SlNDOjpWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyOjpWYWx1ZVByb2ZpbGVBbmRPcGVyYW5k
QnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1
ZmZlcjo6flZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyOjpmb3JFYWNoKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcDoKKyAgICAgICAgKEpTQzo6VmFsdWVS
ZWNvdmVyeTo6cmVjb3ZlciBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvVmFsdWVSZWNvdmVy
eS5oOgorICAgICAgICAqIGJ5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oOgorICAgICAgICAoSlND
Ojp2aXJ0dWFsUmVnaXN0ZXJJc0xvY2FsKToKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVy
SXNBcmd1bWVudCk6CisgICAgICAgIChKU0M6OlZpcnR1YWxSZWdpc3Rlcjo6VmlydHVhbFJlZ2lz
dGVyKToKKyAgICAgICAgKEpTQzo6VmlydHVhbFJlZ2lzdGVyOjppc1ZhbGlkIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6VmlydHVhbFJlZ2lzdGVyOjppc0xvY2FsIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6VmlydHVhbFJlZ2lzdGVyOjppc0FyZ3VtZW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Vmly
dHVhbFJlZ2lzdGVyOjppc0NvbnN0YW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6VmlydHVhbFJl
Z2lzdGVyOjp0b0NvbnN0YW50SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpvcGVyYW5kSXNM
b2NhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Om9wZXJhbmRJc0FyZ3VtZW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZU5leHRQYXJhbWV0ZXIpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZVBhcmFtZXRlcnMpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVxdWFsaXR5T3BJbXBsKToKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsVmFyYXJncyk6CisgICAgICAgICog
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjpzZXRVc2VzQ2hlY2twb2ludHMpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9S
ZWdpc3RlcklELmg6CisgICAgICAgIChKU0M6OlJlZ2lzdGVySUQ6OnNldEluZGV4KToKKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RIZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dEhlYXA6OlBheWxvYWQ6OmR1bXBBc09wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0SGVhcDo6ZHVtcCBjb25zdCk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SGVh
cC5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6UGF5bG9hZDo6UGF5bG9hZCk6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpBYnN0cmFjdEhlYXApOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6b3BlcmFuZCBjb25zdCk6CisgICAgICAgICogZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAg
ICAgICAgKiBkZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oOgorICAgICAgICAoSlNDOjpERkc6OkFy
Z3VtZW50UG9zaXRpb246OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNFbGltaW5h
dGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjphcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KToKKyAgICAgICAg
KEpTQzo6REZHOjplbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgpOgorICAgICAgICAq
IGRmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuaDoKKyAgICAgICAgKiBkZmcvREZHQXRUYWlsQWJz
dHJhY3RTdGF0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6Om9w
ZXJhbmQpOgorICAgICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6cHJ1bmVCeUxpdmVuZXNzKToKKyAgICAgICAgKiBk
ZmcvREZHQXZhaWxhYmlsaXR5TWFwLmg6CisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5
TWFwOjpjbG9zZVN0YXJ0aW5nV2l0aExvY2FsKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6QmFzaWNCbG9jayk6CisgICAg
ICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6ZW5zdXJlVG1wcyk6CisgICAgICAgICogZGZnL0RG
R0Jhc2ljQmxvY2suaDoKKyAgICAgICAgKiBkZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQpOgorICAgICAgICAq
IGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OkJ5dGVDb2RlUGFyc2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6ZW5zdXJlVG1wcyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnByb2dy
ZXNzVG9OZXh0Q2hlY2twb2ludCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
Om5ld1ZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OmdldERpcmVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldCk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNldERpcmVjdCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24p
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRMb2NhbE9yVG1wKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0TG9jYWxPclRtcCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNldEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6ZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JMb2NhbCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZpbmRBcmd1bWVudFBvc2l0aW9uKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Zmx1c2hJbXBsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Zmx1c2hGb3JUZXJtaW5hbEltcGwpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OmZsdXNoRGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6YWRkRmx1c2hPclBoYW50b21Mb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OnBoYW50b21Mb2NhbERpcmVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmZsdXNoRm9yVGVybWluYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjphZGRUb0dyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
SW5saW5lU3RhY2tFbnRyeTo6cmVtYXBPcGVyYW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6RGVsYXllZFNldExvY2FsOjpEZWxheWVkU2V0TG9jYWwpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpEZWxheWVkU2V0TG9jYWw6OmV4ZWN1dGUp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVRhcmdldGFibGVC
bG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVW50YXJn
ZXRhYmxlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVS
ZWN1cnNpdmVUYWlsQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Omlu
bGluZUNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJh
cmdzSW5saW5pbmcpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJ
bmxpbmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJ
bmxpbmVTdGFja0VudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFy
c2UpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRMb2NhbCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNldExvY2FsKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNG
QVBoYXNlOjppbmplY3RPU1IpOgorICAgICAgICAqIGRmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDUFNSZXRocmVhZGluZ1BoYXNlOjpydW4pOgorICAg
ICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUdldExvY2Fs
KToKKyAgICAgICAgKEpTQzo6REZHOjpDUFNSZXRocmVhZGluZ1BoYXNlOjpjYW5vbmljYWxpemVG
bHVzaE9yUGhhbnRvbUxvY2FsRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDUFNSZXRocmVhZGlu
Z1BoYXNlOjpjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsKToKKyAgICAgICAgKEpTQzo6
REZHOjpDUFNSZXRocmVhZGluZ1BoYXNlOjpjYW5vbmljYWxpemVTZXQpOgorICAgICAgICAoSlND
OjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2spOgor
ICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OnByb3BhZ2F0ZVBoaXMpOgor
ICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OnBoaVN0YWNrRm9yKToKKyAg
ICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAgICog
ZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAg
ICAgICAgKiBkZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
YWRkQnl0ZWNvZGVMaXZlbmVzcyk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkNvbW1vbkRhdGE6OmFkZENvZGVPcmlnaW4pOgorICAgICAgICAo
SlNDOjpERkc6OkNvbW1vbkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgpOgorICAgICAgICAo
SlNDOjpERkc6OkNvbW1vbkRhdGE6Omxhc3RDYWxsU2l0ZSBjb25zdCk6CisgICAgICAgICogZGZn
L0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFu
dEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlSW1wbCk6CisgICAgICAgICogZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9k
ZSk6CisgICAgICAgICogZGZnL0RGR0ZvckFsbEtpbGxzLmg6CisgICAgICAgIChKU0M6OkRGRzo6
Zm9yQWxsS2lsbGVkT3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxlZE5v
ZGVzQXROb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxzSW5CbG9jayk6
CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXBCbG9ja0hlYWRlcik6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbCk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
Ojpsb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjptZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6bG9jYWxzTGl2ZUluQnl0ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdH
cmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmb3JBbGxMb2NhbHNBbmRUbXBzTGl2
ZUluQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmb3JBbGxMaXZlSW5CeXRl
Y29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmZvckFsbExvY2Fsc0xpdmVJbkJ5dGVj
b2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpJblBsYWNlQWJzdHJh
Y3RTdGF0ZSk6CisgICAgICAgICogZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6Om9wZXJhbmQpOgorICAgICAgICAq
IGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6
OmxpbmtPU1JFeGl0cyk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZU9T
UkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpKSVRDb21waWxlcjo6ZW1pdFN0b3JlQ2FsbFNpdGVJbmRleCk6CisgICAgICAgICogZGZn
L0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkxpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2U6OmlzVmFsaWRGbHVzaExv
Y2F0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlv
blBoYXNlOjpoYW5kbGVCbG9ja0ZvclRyeUNhdGNoKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZl
Q2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlOjpuZXdWYXJpYWJsZUFjY2Vzc0RhdGEpOgor
ICAgICAgICAqIGRmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcv
REZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OlN0YWNrQWNjZXNzRGF0YTo6U3RhY2tBY2Nl
c3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcmd1bWVudHNDaGlsZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6YXJndW1lbnRzQ2hpbGQpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6Om9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1VubGlua2Vk
T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dW5saW5rZWRPcGVyYW5kKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNMb2FkVmFyYXJnc0RhdGEpOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6OmxvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpo
YXNVbmxpbmtlZExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp1bmxp
bmtlZExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAg
ICAgKiBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZTo6cnVuKToKKyAgICAgICAgKEpT
Qzo6REZHOjpMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKToKKyAg
ICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVP
U1JFbnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkpOgorICAg
ICAgICAqIGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZn
L0RGR09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmVtaXRSZXN0b3Jl
QXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhpdCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6anNWYWx1ZUZvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRG
Rzo6cmVzdG9yZUNhbGxlZVNhdmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpz
YXZlQ2FsbGVlU2F2ZXNGb3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlc3RvcmVD
YWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6c2F2ZU9yQ29weUNhbGxlZVNh
dmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVEaXJlY3RBcmd1bWVu
dHNEdXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVDbG9uZWRB
cmd1bWVudHNEdXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjplbWl0UmVz
dG9yZUFyZ3VtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6ZXhl
Y3V0ZU9TUkV4aXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5saW5lZENh
bGxGcmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEFuZEp1bXBUb1Rh
cmdldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6cHJpbnRPU1JFeGl0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0
QmFzZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjppc0V4aXRpbmdUb0NoZWNr
cG9pbnRIYW5kbGVyIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAgIChK
U0M6OkRGRzo6cmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyk6CisgICAgICAgIChKU0M6OkRGRzo6YWRq
dXN0QW5kSnVtcFRvVGFyZ2V0KToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR09wSW5mby5oOgorICAgICAgICAoSlND
OjpERkc6Ok9wSW5mbzo6T3BJbmZvKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6
CisgICAgICAgICogZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHA6CisgICAgICAgICog
ZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVj
aXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6cmVhZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJl
Y2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OndyaXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpQ
cmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6ZGVmKToKKyAgICAgICAgKEpTQzo6REZHOjpQ
cmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6Y2FsbElmQXBwcm9wcmlhdGUpOgorICAgICAg
ICAqIGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlByZWRpY3Rpb25JbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQdXRTdGFja1Np
bmtpbmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpydW4pOgorICAgICAgICAq
IGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0
ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhcmFyZ3NMZW5ndGgpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRm9yd2FyZFZhcmFyZ3MpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6cmVjb3JkU2V0TG9jYWwpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAg
ICAgKiBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Rh
Y2tMYXlvdXRQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpTdGFja0xheW91dFBoYXNl
Ojphc3NpZ24pOgorICAgICAgICAqIGRmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTdHJlbmd0aFJlZHVjdGlvblBoYXNlOjpoYW5kbGVOb2RlKToK
KyAgICAgICAgKiBkZmcvREZHVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpvc3JFeGl0
VGh1bmtHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdUaHVua3MuaDoKKyAg
ICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpU
eXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjpkaXNhYmxlSG9pc3RpbmdBY3Jvc3NPU1JFbnRyaWVzKToK
KyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAqIGRmZy9ERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRh
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNj
ZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpzaG91bGRV
c2VEb3VibGVGb3JtYXRBY2NvcmRpbmdUb1ZvdGUpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlh
YmxlQWNjZXNzRGF0YTo6dGFsbHlWb3Rlc0ZvclNob3VsZFVzZURvdWJsZUZvcm1hdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpjb3VsZFJlcHJlc2VudEludDUySW1w
bCk6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oOgorICAgICAgICAoSlND
OjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6b3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6
VmFyaWFibGVBY2Nlc3NEYXRhOjpsb2NhbCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1Zh
cmlhYmxlRXZlbnQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OmR1bXAg
Y29uc3QpOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50Lmg6CisgICAgICAgIChKU0M6
OkRGRzo6VmFyaWFibGVFdmVudDo6c3BpbGwpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxl
RXZlbnQ6OnNldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50Ojptb3ZI
aW50KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpzcGlsbFJlZ2lzdGVyIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpvcGVyYW5kIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpieXRlY29kZVJlZ2lzdGVyIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudFN0cmVhbTo6bG9nRXZlbnQpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0IGNvbnN0KToKKyAg
ICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oOgorICAgICAgICAoSlNDOjpERkc6
OlZhcmlhYmxlRXZlbnRTdHJlYW06OmFwcGVuZEFuZExvZyk6CisgICAgICAgICogZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAg
ICogZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Rm9y
T1NSRW50cnlKSVRDb2RlOjpGb3JPU1JFbnRyeUpJVENvZGUpOgorICAgICAgICAqIGZ0bC9GVExM
b3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjps
b3dlcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2Rl
KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUV4dHJhY3RP
U1JFbnRyeUxvY2FsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29t
cGlsZUdldFN0YWNrKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29t
cGlsZUdldENhbGxlZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNv
bXBpbGVTZXRDYWxsZWUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlU2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlVmFyYXJnc0xlbmd0aCk6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVMb2FkVmFyYXJncyk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVGb3J3YXJkVmFyYXJncyk6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmdldFNwcmVhZExlbmd0aEZyb21Jbmxp
bmVDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6Y29tcGlsZUxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZSk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmdldEFyZ3VtZW50c0xlbmd0aCk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmdldEN1cnJlbnRDYWxsZWUpOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjYWxsUHJlZmxpZ2h0KToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YXBwZW5kT1NSRXhpdERlc2NyaXB0b3IpOgor
ICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpidWlsZEV4aXRBcmd1bWVudHMp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphZGRyZXNzRm9yKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6cGF5bG9hZEZvcik6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OnRhZ0Zvcik6CisgICAgICAgICogZnRsL0ZU
TE9TUkVudHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpwcmVwYXJlT1NSRW50cnkpOgorICAg
ICAgICAqIGZ0bC9GVExPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0RGVz
Y3JpcHRvcjo6T1NSRXhpdERlc2NyaXB0b3IpOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Lmg6
CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6Y29tcGlsZVN0dWIpOgorICAgICAgICAqIGZ0bC9GVExPcGVyYXRpb25zLmNwcDoKKyAgICAg
ICAgKEpTQzo6RlRMOjpvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKToKKyAgICAgICAg
KiBmdGwvRlRMT3V0cHV0LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OnNlbGVjdCk6
CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5oOgorICAgICAgICAqIGZ0bC9GVExTZWxlY3RQcmVk
aWN0YWJpbGl0eS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZv
ck9TUkVudHJ5SklUQ29kZS5jcHAuCisgICAgICAgICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oOgor
ICAgICAgICAoSlNDOjpGVEw6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGdlbmVyYXRvci9D
aGVja3BvaW50cy5yYjogQWRkZWQuCisgICAgICAgICogZ2VuZXJhdG9yL09wY29kZS5yYjoKKyAg
ICAgICAgKiBnZW5lcmF0b3IvU2VjdGlvbi5yYjoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgor
ICAgICAgICAoSlNDOjpIZWFwOjpnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMpOgorICAgICAgICAq
IGludGVycHJldGVyL0NhbGxGcmFtZS5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2Fs
bFNpdGVBc1Jhd0JpdHMgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuc2FmZUNh
bGxTaXRlQXNSYXdCaXRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpjYWxsU2l0
ZUluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjp1bnNhZmVDYWxsU2l0ZUlu
ZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpzZXRDdXJyZW50VlBDKToKKyAg
ICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpieXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjpjb2RlT3JpZ2luKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoK
KyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Q2FsbFNpdGVJbmRleCk6CisgICAgICAgIChK
U0M6OkNhbGxTaXRlSW5kZXg6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSlNDOjpD
YWxsU2l0ZUluZGV4OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJ
bmRleDo6Yml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6OmZyb21CaXRz
KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Ynl0ZWNvZGVJbmRleCBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkRpc3Bvc2FibGVDYWxsU2l0ZUluZGV4OjpEaXNwb3NhYmxlQ2FsbFNpdGVJ
bmRleCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbGVlIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6Q2FsbEZyYW1lOjp1bnNhZmVDYWxsZWUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWU6OmFkZHJlc3NPZkNvZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFt
ZTo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWU6Om9mZnNldEZvcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0QXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldFJldHVyblBD
KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6OkNhbGxGcmFtZTo6cik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5jaGVja2VkUik6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUgY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmpzQ2FsbGVlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Q2FsbEZyYW1lOjpjb2RlQmxvY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
OnVuc2FmZUNvZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0Q2Fs
bGVlKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpzZXRDb2RlQmxvY2spOgorICAgICAgICAq
IGludGVycHJldGVyL0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmguCisgICAgICAgICogaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpldmFsKToKKyAgICAgICAgKEpTQzo6
c2l6ZU9mVmFyYXJncyk6CisgICAgICAgIChKU0M6OmxvYWRWYXJhcmdzKToKKyAgICAgICAgKEpT
Qzo6c2V0dXBWYXJhcmdzRnJhbWUpOgorICAgICAgICAoSlNDOjpVbndpbmRGdW5jdG9yOjpvcGVy
YXRvcigpIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKToK
KyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QpOgorICAgICAgICAq
IGludGVycHJldGVyL0ludGVycHJldGVyLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tW
aXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpyZWFkSW5saW5lZEZyYW1l
KToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2Vt
Ymx5SGVscGVyczo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIpOgorICAgICAgICAoSlND
OjpBc3NlbWJseUhlbHBlcnM6OmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyMzIpOgorICAgICAg
ICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyNjQpOgor
ICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcik6
CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVy
QmVmb3JlUHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRQdXRQ
YXlsb2FkVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkFz
c2VtYmx5SGVscGVyczo6ZW1pdFB1dFRhZ1RvQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJvbG9ndWUp
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IpOgorICAgICAgICAo
SlNDOjpBc3NlbWJseUhlbHBlcnM6OnRhZ0Zvcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6cGF5bG9hZEZvcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y2FsbGVl
RnJhbWVTbG90KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVBcmd1bWVu
dFNsb3QpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhbGxlZUZyYW1lVGFnU2xv
dCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y2FsbGVlRnJhbWVQYXlsb2FkU2xv
dCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y2FsbGVlRnJhbWVDYWxsZXJGcmFt
ZSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YXJndW1lbnRDb3VudCk6CisgICAg
ICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1l
U2h1ZmZsZXI6OkNhbGxGcmFtZVNodWZmbGVyKToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1lU2h1
ZmZsZXIuaDoKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OnNldENhbGxlZUpTVmFs
dWVSZWdzKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmFzc3VtZUNhbGxlZUlz
Q2VsbCk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRBcml0aG1ldGlj
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Vuc2lnbmVkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wSW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlVW5zaWdu
ZWRBbmRKdW1wKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1
bXBJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luYyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfbW9kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9iaXRub3QpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNG
YXN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TWF0aElDU2xvdyk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9kaXYpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0UHV0Q2FsbFJlc3VsdCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGls
ZVNldHVwRnJhbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAg
ICAqIGppdC9KSVRFeGNlcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1Vud2luZCk6
CisgICAgICAgICogaml0L0pJVElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SklUOjppc09wZXJh
bmRDb25zdGFudERvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5k
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVz
dWx0KToKKyAgICAgICAgKEpTQzo6SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rU2xvd0Nh
c2VJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFy
KToKKyAgICAgICAgKEpTQzo6SklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmdldE9wZXJhbmRDb25zdGFudERvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdEluaXRSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWRUYWcpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRMb2FkUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dEdldCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdExvYWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRMb2FkMik6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWREb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRMb2FkSW50MzJUb0RvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFN0b3JlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmVJbnQzMik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFN0b3JlQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFN0b3JlQm9vbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFN0b3JlRG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENv
bnN0YW50SW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVycyk6CisgICAgICAgICog
aml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbW92KToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VuZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9uZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9p
c19lbXB0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9pc19udW1iZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5
cGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3JldCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19wcmlt
aXRpdmUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfbm90KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2pmYWxzZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXFfbnVsbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pu
dW5kZWZpbmVkX29yX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9wdHIp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfamVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2p0cnVlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX25lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVx
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93KToKKyAgICAgICAgKEpTQzo6SklU
Ojpjb21waWxlT3BTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wU3RyaWN0
RXFKdW1wKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX251bWJlcik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1lcmljKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RvX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19vYmplY3QpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZ2V0X3BhcmVudF9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0
Y2hfaW1tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9jaGFyKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXFfbnVsbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnRlcik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9nZXRfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fdGhpcyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9jaGVja190ZHopOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2VxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9uZXEpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX25ld19yZWdleHApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXROZXdGdW5jQ29t
bW9uKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24pOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX25ld19hcnJheV93aXRoX3NpemUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFz
X3N0cnVjdHVyZV9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfaW5k
ZXhlZF9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4
ZWRfcHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFt
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFt
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9hcmd1bWVudF9jb3VudCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9nZXRfcmVzdF9sZW5ndGgpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3Vt
ZW50KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFB1dEJ5VmFsV2l0aENhY2hlZElkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9w
dXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9k
ZWxfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2dldF9ieV9pZF9kaXJlY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF9kaXJlY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9wdXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5fYnlfaWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0UmVzb2x2ZUNsb3N1cmUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmVzb2x2
ZV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2sp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9nZXRfZnJvbV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2JhbFZh
cmlhYmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVj
dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENsb3N1cmVWYXIpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2dldF9mcm9tX2FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9f
YXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0V3JpdGVCYXJyaWVyKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRJbnRUeXBlZEFycmF5UHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRGbG9hdFR5
cGVkQXJyYXlQdXRCeVZhbCk6CisgICAgICAgICogaml0L0pTSW50ZXJmYWNlSklULmg6CisgICAg
ICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEpTQ2VsbCk6CisgICAgICAgIChKU0M6
OkpTSW50ZXJmYWNlSklUOjplbWl0SnVtcElmTm90SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SlNJ
bnRlcmZhY2VKSVQ6OmVtaXRMb2FkSW50MzIpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJ
VDo6ZW1pdExvYWREb3VibGUpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdEdl
dEZyb21DYWxsRnJhbWVIZWFkZXJQdHIpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6
ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6
OmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIpOgorICAgICAgICAqIGppdC9TZXR1cFZhcmFy
Z3NGcmFtZS5jcHA6CisgICAgICAgIChKU0M6OmVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNl
KToKKyAgICAgICAgKiBqaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oOgorICAgICAgICAoSlNDOjpT
cGVjaWFsaXplZFRodW5rSklUOjpsb2FkRG91YmxlQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpT
cGVjaWFsaXplZFRodW5rSklUOjpsb2FkQ2VsbEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6U3Bl
Y2lhbGl6ZWRUaHVua0pJVDo6bG9hZEludDMyQXJndW1lbnQpOgorICAgICAgICAqIGppdC9UaHVu
a0dlbmVyYXRvcnMuY3BwOgorICAgICAgICAoSlNDOjphYnNUaHVua0dlbmVyYXRvcik6CisgICAg
ICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6Z2V0
Tm9uQ29uc3RhbnRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldE9wZXJhbmQpOgor
ICAgICAgICAoSlNDOjpMTEludDo6Z2VuZXJpY0NhbGwpOgorICAgICAgICAoSlNDOjpMTEludDo6
dmFyYXJnc1NldHVwKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmNvbW1vbkNhbGxFdmFsKToKKyAg
ICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKEpTQzo6
TExJbnQ6OmhhbmRsZVZhcmFyZ3NDaGVja3BvaW50KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmRp
c3BhdGNoVG9OZXh0SW5zdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpMTEludDo6c2xvd19wYXRo
X2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwpOgorICAgICAgICAoSlNDOjpM
TEludDo6c2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQpOgorICAgICAgICAoSlNDOjpMTElu
dDo6bGxpbnRfdGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IpOgorICAgICAgICAqIGxsaW50L0xM
SW50U2xvd1BhdGhzLmg6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206
CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAg
KiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQXJn
TGlzdC5oOgorICAgICAgICAoSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6ZmlsbCk6CisgICAg
ICAgICogcnVudGltZS9DYWNoZWRUeXBlcy5jcHA6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVC
bG9jazo6aGFzQ2hlY2twb2ludHMgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVC
bG9jazo6VW5saW5rZWRDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s8
Q29kZUJsb2NrVHlwZT46OmVuY29kZSk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0
aHMuY3BwOgorICAgICAgICAoSlNDOjpTTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogcnVudGlt
ZS9Db25zdHJ1Y3REYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0KToKKyAgICAgICAg
KiBydW50aW1lL0NvbnN0cnVjdERhdGEuaDoKKyAgICAgICAgKiBydW50aW1lL0RpcmVjdEFyZ3Vt
ZW50cy5jcHA6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRz
KToKKyAgICAgICAgKiBydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oOgorICAgICAgICAqIHJ1bnRp
bWUvR2VuZXJpY0FyZ3VtZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUvR2VuZXJpY0FyZ3VtZW50
c0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Y29weVRv
QXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlND
OjpKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5o
OgorICAgICAgICAqIHJ1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwOgorICAgICAgICAo
SlNDOjpKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRzKToKKyAgICAgICAgKiBy
dW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5Lmg6CisgICAgICAgICogcnVudGltZS9KU0xvY2su
Y3BwOgorICAgICAgICAoSlNDOjpKU0xvY2s6OndpbGxSZWxlYXNlTG9jayk6CisgICAgICAgICog
cnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6Ok1vZHVs
ZVByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5j
cHA6CisgICAgICAgIChKU0M6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMpOgorICAgICAgICAq
IHJ1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6U2NvcGVkQXJndW1l
bnRzOjpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvU2NvcGVkQXJndW1lbnRz
Lmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpzY2FuU2lk
ZVN0YXRlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Vk06OmFkZENoZWNrcG9pbnRPU1JTaWRlU3Rh
dGUpOgorICAgICAgICAoSlNDOjpWTTo6ZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06Omhhc0NoZWNrcG9pbnRPU1JT
aWRlU3RhdGUgY29uc3QpOgorICAgICAgICAqIHRvb2xzL1ZNSW5zcGVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6Vk1JbnNwZWN0b3I6OmR1bXBSZWdpc3RlcnMpOgorICAgICAgICAqIHdhc20vV2Fz
bUZ1bmN0aW9uQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uQ29kZUJs
b2NrOjpnZXRDb25zdGFudCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uQ29k
ZUJsb2NrOjpnZXRDb25zdGFudFR5cGUgY29uc3QpOgorICAgICAgICAqIHdhc20vV2FzbUxMSW50
R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OnNldFVz
ZXNDaGVja3BvaW50cyBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHA6
CisgICAgICAgIChKU0M6Oldhc206Om9wZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9uKToKKyAgICAg
ICAgKiB3YXNtL1dhc21TbG93UGF0aHMuY3BwOgorCiAyMDIwLTAxLTE2ICBNYXJrIExhbSAgPG1h
cmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBvcGVyYXRpb25Ub09iamVjdCgpIHNob3VsZCBj
aGVjayBmb3IgYSBudWxsIGVycm9yTWVzc2FnZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggNzNmNDlhYThjMzEwNTBkZTI1Yjc4
MjI1MThmYThiMTI1YzhjYTU2Yi4uN2JjNGUyNTNiNGRiMDVmOGVjMDM3ZDBkMTk0ZDcxMDAxYTc1
Yzc5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAyMC0wMS0xNiAgS2VpdGggTWlsbGVyICA8a2Vp
dGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZWxhbmQgYnl0ZWNvZGUgY2hlY2twb2lu
dHMgc2luY2UgYnVncyBoYXZlIGJlZW4gZml4ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjM2MQorCisgICAgICAgIFVucmV2aWV3ZWQsIHJlbGFu
ZC4KKworICAgICAgICBUaGlzIHdhdGNoIGJ1Z3MgaGF2ZSBiZWVuIGZpeGVkIGJ5IGh0dHBzOi8v
dHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8yNTQ2NzQKKworICAgICAgICAqIFdURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9CaXRtYXAuaDoKKyAgICAgICAgKFdU
Rjo6V29yZFR5cGU+OjppbnZlcnQpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46Om9wZXJhdG9y
KToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+OjpvcGVyYXRvciBjb25zdCBjb25zdCk6CisgICAg
ICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9FbnVtQ2xhc3NPcGVyYXRv
ck92ZXJsb2Fkcy5oOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvRmFzdEJpdFZlY3Rvci5oOgorICAg
ICAgICAoV1RGOjpGYXN0Qml0UmVmZXJlbmNlOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAg
ICAgKFdURjo6RmFzdEJpdFJlZmVyZW5jZTo6b3BlcmF0b3J8PSk6CisgICAgICAgIChXVEY6OkZh
c3RCaXRSZWZlcmVuY2U6Om9wZXJhdG9yJj0pOgorICAgICAgICAoV1RGOjpGYXN0Qml0VmVjdG9y
OjpmaWxsKToKKyAgICAgICAgKFdURjo6RmFzdEJpdFZlY3Rvcjo6Z3Jvdyk6CisgICAgICAgICog
d3RmL1VuYWxpZ25lZEFjY2Vzcy5oOgorICAgICAgICAoV1RGOjp1bmFsaWduZWRMb2FkKToKKyAg
ICAgICAgKFdURjo6dW5hbGlnbmVkU3RvcmUpOgorCiAyMDIwLTAxLTE2ICBQZXIgQXJuZSBWb2xs
YW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luXSBGaXggQXBwbGVXaW4gYnVp
bGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBiOTE3YmM1ODkwNjk3NWEz
NDdlZWYxYTdjNWE2YmYwNWE5YzU0YjZiLi45MWU0MjdjMzBjNTExNjNlZGQ5ZjEwNmQ0MmY5NWUw
OWQwMmJlOWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC01MjYsNiAr
NTI2LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAg
ICBieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCiAgICAgYnl0ZWNvZGUvT3Bjb2Rl
LmgKICAgICBieXRlY29kZS9PcGNvZGVTaXplLmgKKyAgICBieXRlY29kZS9PcGVyYW5kcy5oCiAg
ICAgYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uaAogICAgIGJ5dGVjb2RlL1B1dEJ5SWRGbGFn
cy5oCiAgICAgYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAppbmRleCBmOGMxYjRh
ZTU1NmI1MzRjMmFiMTAxYWMzOTBiYTcxMWI0NWNiYWVhLi45ZWFkNjUzZmFhYWIxODkzZWI5MmRk
MDJlOTc1Nzk2NmRmYTk5YWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVy
aXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
RGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdApAQCAtNjQsNiArNjQsNyBAQCAkKFBST0pF
Q1RfRElSKS9kaXNhc3NlbWJsZXIvdWRpczg2L29wdGFibGUueG1sCiAkKFBST0pFQ1RfRElSKS9k
aXNhc3NlbWJsZXIvdWRpczg2L3VkX2l0YWIucHkKICQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9B
cmd1bWVudC5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9yL0Fzc2VydGlvbi5yYgorJChQUk9K
RUNUX0RJUikvZ2VuZXJhdG9yL0NoZWNrcG9pbnRzLnJiCiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0
b3IvRFNMLnJiCiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvRml0cy5yYgogJChQUk9KRUNUX0RJ
UikvZ2VuZXJhdG9yL0dlbmVyYXRlZEZpbGUucmIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggMzk0MGYxZDM0YzM0ZDlhMDNiNTFkY2I1Y2M5NTkyNGE1YzcxYjlkOC4uNjZmOTM1ZGRi
MTkyOWVjYTMyZDZmY2UxMTJiMzkxMTY2MTI3NzM5YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTkzMSw2ICs5MzEsOCBAQAogCQk1MzMzQkJEQjIxMTBGN0QyMDA3NjE4RUMgLyog
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4Njg4MEYxQjE0MzI4QkI5MDBCMDhENDIgLyogREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAgKi87IH07CiAJCTUzMzNCQkRDMjExMEY3RDkwMDc2MThFQyAvKiBERkdT
cGVjdWxhdGl2ZUpJVC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NkVDOURDMjEzMjhERjgyMDAyQjJBRDcgLyogREZHU3BlY3VsYXRpdmVKSVQuY3Bw
ICovOyB9OwogCQk1MzMzQkJERDIxMTBGN0UxMDA3NjE4RUMgLyogREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Njg4
MEY0QzE0MzUzQjIxMDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgKi87IH07CisJ
CTUzMzhFMkE3MjM5NkVGRkIwMEM2MUJBRCAvKiBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMzOEUyQTYy
Mzk2RUZFQzAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTMzOEVCQTMyM0FCMDRC
ODAwMzgyNjYyIC8qIEZUTFNlbGVjdFByZWRpY3RhYmlsaXR5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzM4RUJBMjIzQUIwNEEzMDAzODI2NjIgLyog
RlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaCAqLzsgfTsKIAkJNTM0MUZDNzIxREFDMzQzQzAwRTdF
NEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDFGQzcxMURBQzM0M0MwMEU3RTRENyAvKiBCM1dhc21C
b3VuZHNDaGVja1ZhbHVlLmggKi87IH07CiAJCTUzNDYzODcxMUU3MENGM0QwMEYxMkFDMSAvKiBK
U1J1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTM0NjM4NzAxRTcwQ0YzRDAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTM0NjM4NzUxRTcw
RERFQzAwRjEyQUMxIC8qIFByb21pc2VUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0NjM4NzQxRTcwRERFQzAwRjEyQUMxIC8qIFByb21pc2VU
aW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC0zNjAxLDYgKzM2MDMsOCBAQAogCQk1MzE4MDQ1RDIyRUFBRjBGMDA0QTczNDIgLyogQjNFeHRy
YWN0VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNFeHRyYWN0VmFsdWUuY3BwOyBwYXRo
ID0gYjMvQjNFeHRyYWN0VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MzFENEUxOTFGNTlDREQyMDBFQzgzNkMgLyogdGVzdGFwaS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSB0ZXN0YXBpLmNwcDsgcGF0aCA9IEFQSS90ZXN0cy90ZXN0YXBpLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTMyNjMxQjMyMTg3NzdBNTAwN0I4MTkxIC8qIEphdmFTY3JpcHRD
b3JlLm1vZHVsZW1hcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9ICJzb3VyY2Vjb2RlLm1vZHVsZS1tYXAiOyBwYXRoID0g
SmF2YVNjcmlwdENvcmUubW9kdWxlbWFwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MzM4RTJBNjIzOTZFRkVDMDBDNjFCQUQgLyogQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2hlY2twb2ludE9TUkV4aXRTaWRlU3Rh
dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMzOEVCQTIyM0FCMDRBMzAwMzgy
NjYyIC8qIEZUTFNlbGVjdFByZWRpY3RhYmlsaXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEZUTFNlbGVjdFByZWRpY3RhYmlsaXR5Lmg7IHBhdGggPSBmdGwvRlRMU2VsZWN0
UHJlZGljdGFiaWxpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMzQjE1REUx
REM3RjQ2MzAwNEQ1MDBBIC8qIFdhc21PcHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2FzbU9wcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzQxRkM2RjFE
QUMzM0U1MDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcDsgcGF0
aCA9IGIzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MzQxRkM3MTFEQUMzNDNDMDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1dhc21Cb3VuZHNDaGVja1Zh
bHVlLmg7IHBhdGggPSBiMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0zNjE1LDYgKzM2MTksOSBAQAogCQk1MzRDNDU3QTFCQzcwM0RDMDA3
NDc2QTcgLyogVHlwZWRBcnJheUNvbnN0cnVjdG9yLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5q
YXZhc2NyaXB0OyBwYXRoID0gVHlwZWRBcnJheUNvbnN0cnVjdG9yLmpzOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MzRDNDU3QjFCQzcyNDExMDA3NDc2QTcgLyogSlNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlw
ZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MzRDNDU3RDFCQzcyNTQ5MDA3NDc2QTcgLyogSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzNEQ5QkY4MjM2
M0M1NUQwMDU0NTI0RCAvKiBTZXRJdGVyYXRvclByb3RvdHlwZS5qcyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFNldEl0ZXJhdG9yUHJvdG90eXBlLmpzOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1MzREOUJGOTIzNjNDNTVEMDA1NDUyNEQgLyogSXRlcmF0
b3JIZWxwZXJzLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gSXRl
cmF0b3JIZWxwZXJzLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzREOUJGQTIz
NjNDNTVEMDA1NDUyNEQgLyogTWFwSXRlcmF0b3JQcm90b3R5cGUuanMgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBNYXBJdGVyYXRvclByb3RvdHlwZS5qczsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0RTAzNEQxRTRENEIxNjAwMjEzRjY0IC8qIEFjY2Vz
c0Nhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNzQ2FzZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzRFMDM0RjFFNEQ5NUVEMDAyMTNGNjQgLyog
QWNjZXNzQ2FzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nl
c3NDYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0RTAzNTMxRTUzQkQy
OTAwMjEzRjY0IC8qIEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNTUzNCw2ICs1NTQxLDcgQEAKIAkJCQkwRjQ4NTMyNjE4N0RG
REVDMDA4M0I2ODcgLyogRlRMUmVjb3ZlcnlPcGNvZGUuaCAqLywKIAkJCQkwRkNFRkFBOTE4MDRD
MTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuY3BwICovLAogCQkJCTBGQ0VGQUFBMTgwNEMx
M0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5oICovLAorCQkJCTUzMzhFQkEyMjNBQjA0QTMw
MDM4MjY2MiAvKiBGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oICovLAogCQkJCTBGMjVGMUFBMTgx
NjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwuY3BwICovLAogCQkJCTBGMjVGMUFCMTgx
NjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwuaCAqLywKIAkJCQkwRjI1RjFBQzE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCAqLywKQEAgLTU5NjAsNiArNTk2
OCw3IEBACiAJCQkJMTQyOUQ4REMwRUQyMjA1QjAwQjg5NjE5IC8qIENhbGxGcmFtZS5oICovLAog
CQkJCUE3Rjg2OUVDMEY5NUMyRUMwMDU1ODY5NyAvKiBDYWxsRnJhbWVDbG9zdXJlLmggKi8sCiAJ
CQkJRkVBM0JCQTcyMTJCNjU1ODAwRTkzQUQxIC8qIENhbGxGcmFtZUlubGluZXMuaCAqLywKKwkJ
CQk1MzM4RTJBNjIzOTZFRkVDMDBDNjFCQUQgLyogQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUu
aCAqLywKIAkJCQkxNDI5RDg1QjBFRDIxOEU5MDBCODk2MTkgLyogQ0xvb3BTdGFjay5jcHAgKi8s
CiAJCQkJMTRENzkyNjQwREFBMDNGQjAwMUE5RjA1IC8qIENMb29wU3RhY2suaCAqLywKIAkJCQlB
N0MxRUFFQjE3OTg3QUI2MDAyOTlEQjIgLyogQ0xvb3BTdGFja0lubGluZXMuaCAqLywKQEAgLTg2
MDAsNyArODYwOSw5IEBACiAJCQkJQTUyNzA0ODUxRDAyN0M4ODAwMzU0QzM3IC8qIEdsb2JhbE9w
ZXJhdGlvbnMuanMgKi8sCiAJCQkJRTM1RTAzNjExQjdBQjQ4NTAwNzNBRDJBIC8qIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbk9iamVjdC5qcyAqLywKIAkJCQlFMzNGNTA4ODFCODQ0QTFBMDA0MTM4
NTYgLyogSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IuanMgKi8sCisJCQkJNTM0RDlCRjkyMzYz
QzU1RDAwNTQ1MjREIC8qIEl0ZXJhdG9ySGVscGVycy5qcyAqLywKIAkJCQk3Q0Y5QkM1QjFCNjVE
OUEzMDA5REIxRUYgLyogSXRlcmF0b3JQcm90b3R5cGUuanMgKi8sCisJCQkJNTM0RDlCRkEyMzYz
QzU1RDAwNTQ1MjREIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBlLmpzICovLAogCQkJCTcwMzU1ODdD
MUM0MTg0MTkwMDRCRDdCRiAvKiBNYXBQcm90b3R5cGUuanMgKi8sCiAJCQkJRTMwNjc3OTcxQjhC
QzZGNTAwM0Y4N0YwIC8qIE1vZHVsZUxvYWRlci5qcyAqLywKIAkJCQlBNTI3MDQ4NjFEMDI3Qzg4
MDAzNTRDMzcgLyogTnVtYmVyQ29uc3RydWN0b3IuanMgKi8sCkBAIC04NjExLDYgKzg2MjIsNyBA
QAogCQkJCTdDRjlCQzVGMUI2NUQ5QjEwMDlEQjFFRiAvKiBSZWZsZWN0T2JqZWN0LmpzICovLAog
CQkJCTY1NDc4ODQyMUM5MzdEMkMwMDA3ODFBMCAvKiBSZWdFeHBQcm90b3R5cGUuanMgKi8sCiAJ
CQkJODQ5MjVBOUMyMkIzMENDODAwRDFERkZGIC8qIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yUHJvdG90
eXBlLmpzICovLAorCQkJCTUzNEQ5QkY4MjM2M0M1NUQwMDU0NTI0RCAvKiBTZXRJdGVyYXRvclBy
b3RvdHlwZS5qcyAqLywKIAkJCQk3MDM1NTg3RDFDNDE4NDE5MDA0QkQ3QkYgLyogU2V0UHJvdG90
eXBlLmpzICovLAogCQkJCTdDRjlCQzYwMUI2NUQ5QjEwMDlEQjFFRiAvKiBTdHJpbmdDb25zdHJ1
Y3Rvci5qcyAqLywKIAkJCQk3Q0Y5QkM2MTFCNjVEOUIxMDA5REIxRUYgLyogU3RyaW5nSXRlcmF0
b3JQcm90b3R5cGUuanMgKi8sCkBAIC05MTEzLDYgKzkxMjUsNyBAQAogCQkJCUZFMUJEMDIxMUU3
MjAyNzkwMDEzNEJDOSAvKiBDZWxsUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVDMTYw
MzIyMzM5RTlGOTAwQTA0Q0I4IC8qIENlbGxTaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFD
M0REQTFCQkNFMDlFMDBFNTIzRTQgLyogQ2VsbFN0YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
MzM4RTJBNzIzOTZFRkZCMDBDNjFCQUQgLyogQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDNkFBQUU1MEUxRjQyNjUwMEFEODdEOCAvKiBDbGFzc0luZm8u
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDI2MUFBOTA5NTYwMEQzM0IzMyAvKiBDbG9uZWRB
cmd1bWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVFMEUxNkY1Q0QwMEIzNDQ2MCAv
KiBDTG9vcFN0YWNrLmggaW4gSGVhZGVycyAqLywKQEAgLTk0NTgsNiArOTQ3MSw3IEBACiAJCQkJ
MEY5RDRDMTExQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDg1MzJBMTg3REZERUMwMDgzQjY4NyAvKiBGVExSZWNv
dmVyeU9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDRUZBQUMxODA0QzEzRTAwNDcyQ0U0
IC8qIEZUTFNhdmVSZXN0b3JlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzM4RUJBMzIzQUIwNEI4
MDAzODI2NjIgLyogRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMjVGMUIyMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMjVGMUI0MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXku
aCBpbiBIZWFkZXJzICovLAogCQkJCUUzMjJFNUE3MURBNjQ0QTgwMDZFNzcwOSAvKiBGVExTbmlw
cGV0UGFyYW1zLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCmluZGV4IDU2ZDhhMDdkYmZj
ZGVmZGVjNzYwODlhMTNkZmI1MDExYjY0YjI1ZDMuLjY4ODQwODNlMGZjMTc2YTIxM2NkNjY4Mjc2
NGIyZjRlYjMwYzZmNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaApAQCAtMjM5LDEzICsyMzksNiBAQCBwdWJs
aWM6CiAgICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7CiAgICAgfQog
Ci0gICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KLSAgICBleHBsaWNpdCBSZXR1cm5BZGRyZXNzUHRy
KEZ1bmN0aW9uUHRyPHRhZz4gZnVuY3Rpb24pCi0gICAgICAgIDogbV92YWx1ZSh1bnRhZ0NvZGVQ
dHI8dGFnPihmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSkKLSAgICB7Ci0gICAgICAgIEFT
U0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7Ci0gICAgfQotCiAgICAgY29uc3Qgdm9p
ZCogdmFsdWUoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdmFsdWU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlRnJhbWUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJvYmVGcmFtZS5oCmluZGV4IGNhYjM2OGRjN2Nk
MGYzYjRmODViNzY5Yjc4OGQ0MGQ2M2VhNTYzNzcuLjQyMjlhMGQwOTk3YTRiMGY1ODNhY2FlYTNh
MGYxNjU3MjlmNDZlMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvUHJvYmVGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJv
YmVGcmFtZS5oCkBAIC00NiwxNCArNDYsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZ2V0
PFQ+KENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1lbnQpICogc2l6ZW9mKFJlZ2lzdGVy
KSk7CiAgICAgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQgPSBKU1ZhbHVlPgotICAgIFQgb3Bl
cmFuZChpbnQgb3BlcmFuZCkKKyAgICBUIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CiAgICAgewotICAgICAgICByZXR1cm4gZ2V0PFQ+KHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rl
cj4ob3BlcmFuZCkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICAgICAgcmV0dXJu
IGdldDxUPihvcGVyYW5kLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAgfQogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQgPSBKU1ZhbHVlPgotICAgIFQgb3BlcmFuZChpbnQgb3BlcmFu
ZCwgcHRyZGlmZl90IG9mZnNldCkKKyAgICBUIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIHB0cmRpZmZfdCBvZmZzZXQpCiAgICAgewotICAgICAgICByZXR1cm4gZ2V0PFQ+KHN0YXRp
Y19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0
ZXIpICsgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGdldDxUPihvcGVyYW5kLm9mZnNldCgpICog
c2l6ZW9mKFJlZ2lzdGVyKSArIG9mZnNldCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KQEAgLTYyLDE0ICs2MiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzZXQ8VD4o
Q2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVudCkgKiBzaXplb2YoUmVnaXN0ZXIpLCB2
YWx1ZSk7CiAgICAgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZXRPcGVy
YW5kKGludCBvcGVyYW5kLCBUIHZhbHVlKQorICAgIHZvaWQgc2V0T3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgVCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHNldDxUPihzdGF0aWNfY2Fz
dDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSwg
dmFsdWUpOworICAgICAgICBzZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rl
ciksIHZhbHVlKTsKICAgICB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIHNl
dE9wZXJhbmQoaW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQsIFQgdmFsdWUpCisgICAgdm9p
ZCBzZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0LCBU
IHZhbHVlKQogICAgIHsKLSAgICAgICAgc2V0PFQ+KHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rl
cj4ob3BlcmFuZCkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgb2Zmc2V0LCB2YWx1ZSk7
CisgICAgICAgIHNldDxUPihvcGVyYW5kLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIG9m
ZnNldCwgdmFsdWUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQgPSBKU1ZhbHVl
PgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCmluZGV4IDM1ZDAxNzU2ZDUzMmE3MWVjMDdmZTQw
M2VmN2E1MjUwYjVmYzZmNjEuLjQxYmM5NjFhMTUzMDg1ZmJhODU1MDY1YzM5YjZjNmRhNmZiMmE4
MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKQEAgLTI2MywyMCArMjYzLDIwIEBAIGlu
bGluZSB2b2lkIGNoZWNrRG9lc05vdFVzZUluc3RydWN0aW9uKENvbXBpbGF0aW9uJiBjb21waWxh
dGlvbiwgY29uc3QgY2hhciogdGV4CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci1zdHJ1
Y3QgT3BlcmFuZCB7CitzdHJ1Y3QgQjNPcGVyYW5kIHsKICAgICBjb25zdCBjaGFyKiBuYW1lOwog
ICAgIFR5cGUgdmFsdWU7CiB9OwogCi10eXBlZGVmIE9wZXJhbmQ8aW50NjRfdD4gSW50NjRPcGVy
YW5kOwotdHlwZWRlZiBPcGVyYW5kPGludDMyX3Q+IEludDMyT3BlcmFuZDsKLXR5cGVkZWYgT3Bl
cmFuZDxpbnQxNl90PiBJbnQxNk9wZXJhbmQ7Ci10eXBlZGVmIE9wZXJhbmQ8aW50OF90PiBJbnQ4
T3BlcmFuZDsKK3R5cGVkZWYgQjNPcGVyYW5kPGludDY0X3Q+IEludDY0T3BlcmFuZDsKK3R5cGVk
ZWYgQjNPcGVyYW5kPGludDMyX3Q+IEludDMyT3BlcmFuZDsKK3R5cGVkZWYgQjNPcGVyYW5kPGlu
dDE2X3Q+IEludDE2T3BlcmFuZDsKK3R5cGVkZWYgQjNPcGVyYW5kPGludDhfdD4gSW50OE9wZXJh
bmQ7CiAKLSNkZWZpbmUgTUFLRV9PUEVSQU5EKHZhbHVlKSBPcGVyYW5kPGRlY2x0eXBlKHZhbHVl
KT4geyAjdmFsdWUsIHZhbHVlIH0KKyNkZWZpbmUgTUFLRV9PUEVSQU5EKHZhbHVlKSBCM09wZXJh
bmQ8ZGVjbHR5cGUodmFsdWUpPiB7ICN2YWx1ZSwgdmFsdWUgfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGbG9hdFR5cGU+Ci12b2lkIHBvcHVsYXRlV2l0aEludGVyZXN0aW5nVmFsdWVzKFZlY3RvcjxP
cGVyYW5kPEZsb2F0VHlwZT4+JiBvcGVyYW5kcykKK3ZvaWQgcG9wdWxhdGVXaXRoSW50ZXJlc3Rp
bmdWYWx1ZXMoVmVjdG9yPEIzT3BlcmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMpCiB7CiAgICAg
b3BlcmFuZHMuYXBwZW5kKHsgIjAuIiwgc3RhdGljX2Nhc3Q8RmxvYXRUeXBlPigwLikgfSk7CiAg
ICAgb3BlcmFuZHMuYXBwZW5kKHsgIi0wLiIsIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oLTAuKSB9
KTsKQEAgLTMwMiw5ICszMDIsOSBAQCB2b2lkIHBvcHVsYXRlV2l0aEludGVyZXN0aW5nVmFsdWVz
KFZlY3RvcjxPcGVyYW5kPEZsb2F0VHlwZT4+JiBvcGVyYW5kcykKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgRmxvYXRUeXBlPgotVmVjdG9yPE9wZXJhbmQ8RmxvYXRUeXBlPj4gZmxvYXRpbmdQb2lu
dE9wZXJhbmRzKCkKK1ZlY3RvcjxCM09wZXJhbmQ8RmxvYXRUeXBlPj4gZmxvYXRpbmdQb2ludE9w
ZXJhbmRzKCkKIHsKLSAgICBWZWN0b3I8T3BlcmFuZDxGbG9hdFR5cGU+PiBvcGVyYW5kczsKKyAg
ICBWZWN0b3I8QjNPcGVyYW5kPEZsb2F0VHlwZT4+IG9wZXJhbmRzOwogICAgIHBvcHVsYXRlV2l0
aEludGVyZXN0aW5nVmFsdWVzKG9wZXJhbmRzKTsKICAgICByZXR1cm4gb3BlcmFuZHM7CiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCmluZGV4IGM4
YjUyYjg4MjZhZTk4MjI4ZWU4NDQ0OTZiMWVlN2E4ZTlhN2QzM2EuLjcxZGE4NmRmZWJkZjI1ODhm
ZTJlMDE3YWU3YTVjOWE2ZmRiNGRhZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKQEAgLTE1MjAsNyArMTUyMCw3IEBAIHZvaWQgQWNjZXNzQ2Fz
ZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAKICAgICAgICAg
aml0LnN0b3JlMzIoCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0
ZS5jYWxsU2l0ZUluZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmdPck9yaWdpbmFsKCkuYml0cygpKSwK
LSAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdp
c3Rlcj4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7CisgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcykpOwogCiAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyIHx8IG1fdHlw
ZSA9PSBTZXR0ZXIpIHsKICAgICAgICAgICAgIGF1dG8mIGFjY2VzcyA9IHRoaXMtPmFzPEdldHRl
clNldHRlckFjY2Vzc0Nhc2U+KCk7CkBAIC0xODA5LDcgKzE4MDksNyBAQCB2b2lkIEFjY2Vzc0Nh
c2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogICAgICAgICAg
ICAgICAgIGppdC5zdG9yZTMyKAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmNhbGxTaXRlSW5kZXhG
b3JFeGNlcHRpb25IYW5kbGluZ09yT3JpZ2luYWwoKS5iaXRzKCkpLAotICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpOworICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcykpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGppdC5t
YWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICAgICAgICAgICAgICAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZVNuaXBwZXRQYXJh
bXMuY3BwCmluZGV4IGIxZDQwNGExNDViZDIxNDFiM2EwYTljNDMxOTE4YTU4ZjlhZjE4OWYuLjY5
YjVlZTEwNmIyZTgxNzU1Nzc3OTcxYmUyNzE0YzRhMWE5OGNiYmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1z
LmNwcApAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgaml0LnN0b3JlMzIoCiAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0ZS5jYWxsU2l0ZUluZGV4
Rm9yRXhjZXB0aW9uSGFuZGxpbmdPck9yaWdpbmFsKCkuYml0cygpKSwKLSAgICAgICAgICAgIEND
YWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7CisgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykp
OwogCiAgICAgICAgIGppdC5tYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAKaW5kZXggNjA1
OGZiMDYyMDM5NDZjNGNkNTZlZjZhOTgzODc5ZDJkNmM4MWZiNi4uODM2NTExNWY0MjE3OTFhNWM2
NjQ4M2E1YTc5MDVjYWU1YzBlZTNlMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgQnl0ZWNv
ZGVEdW1wZXJCYXNlOjpwcmludExvY2F0aW9uQW5kT3AoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNl
dCBsb2NhdGlvbiwKIAogdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OmR1bXBWYWx1ZShWaXJ0dWFs
UmVnaXN0ZXIgcmVnKQogewotICAgIG1fb3V0LnByaW50ZigiJXMiLCByZWdpc3Rlck5hbWUocmVn
Lm9mZnNldCgpKS5kYXRhKCkpOworICAgIG1fb3V0LnByaW50ZigiJXMiLCByZWdpc3Rlck5hbWUo
cmVnKS5kYXRhKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUcmFpdHM+CkBAIC04MywxMiAr
ODMsMTIgQEAgdGVtcGxhdGUgdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OmR1bXBWYWx1ZShHZW5l
cmljQm91bmRMYWJlbDxXYXNtOjpHZW5lcmF0b3JUcmEKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNT
RU1CTFkpCiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgotQ1N0cmluZyBCeXRlY29kZUR1bXBlcjxC
bG9jaz46OnJlZ2lzdGVyTmFtZShpbnQgcikgY29uc3QKK0NTdHJpbmcgQnl0ZWNvZGVEdW1wZXI8
QmxvY2s+OjpyZWdpc3Rlck5hbWUoVmlydHVhbFJlZ2lzdGVyIHIpIGNvbnN0CiB7Ci0gICAgaWYg
KGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHIpKQorICAgIGlmIChyLmlzQ29uc3RhbnQoKSkKICAg
ICAgICAgcmV0dXJuIGNvbnN0YW50TmFtZShyKTsKIAotICAgIHJldHVybiB0b0NTdHJpbmcoVmly
dHVhbFJlZ2lzdGVyKHIpKTsKKyAgICByZXR1cm4gdG9DU3RyaW5nKHIpOwogfQogCiB0ZW1wbGF0
ZSA8Y2xhc3MgQmxvY2s+CkBAIC05OCwxMCArOTgsMTAgQEAgaW50IEJ5dGVjb2RlRHVtcGVyPEJs
b2NrPjo6b3V0T2ZMaW5lSnVtcE9mZnNldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IG9mZnNl
dCkKIH0KIAogdGVtcGxhdGU8Y2xhc3MgQmxvY2s+Ci1DU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJs
b2NrPjo6Y29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3QKK0NTdHJpbmcgQnl0ZWNvZGVEdW1w
ZXI8QmxvY2s+Ojpjb25zdGFudE5hbWUoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKIHsKLSAg
ICBhdXRvIHZhbHVlID0gYmxvY2soKS0+Z2V0Q29uc3RhbnQoaW5kZXgpOwotICAgIHJldHVybiB0
b0NTdHJpbmcodmFsdWUsICIoIiwgVmlydHVhbFJlZ2lzdGVyKGluZGV4KSwgIikiKTsKKyAgICBh
dXRvIHZhbHVlID0gYmxvY2soKS0+Z2V0Q29uc3RhbnQocmVnKTsKKyAgICByZXR1cm4gdG9DU3Ry
aW5nKHZhbHVlLCAiKCIsIHJlZywgIikiKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgQmxvY2s+CkBA
IC0zMzUsNyArMzM1LDcgQEAgdm9pZCBCeXRlY29kZUR1bXBlcjo6ZHVtcENvbnN0YW50cygpCiAg
ICAgfQogfQogCi1DU3RyaW5nIEJ5dGVjb2RlRHVtcGVyOjpjb25zdGFudE5hbWUoaW50IGluZGV4
KSBjb25zdAorQ1N0cmluZyBCeXRlY29kZUR1bXBlcjo6Y29uc3RhbnROYW1lKFZpcnR1YWxSZWdp
c3RlciBpbmRleCkgY29uc3QKIHsKICAgICBGdW5jdGlvbkNvZGVCbG9jayogYmxvY2sgPSB0aGlz
LT5ibG9jaygpOwogICAgIGF1dG8gdmFsdWUgPSBmb3JtYXRDb25zdGFudChibG9jay0+Z2V0Q29u
c3RhbnRUeXBlKGluZGV4KSwgYmxvY2stPmdldENvbnN0YW50KGluZGV4KSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCmluZGV4IDBkNzE2NzUw
Mzk0YjE1ZDRlYjVlODdjNWE4ODI1MTA3NWVmZTAzZWUuLmVkYjExMjkyMWFmNzUzZTYzZDg2MTM3
MmZiZGUwZWVmODlmY2ExNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUR1bXBlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUR1bXBlci5oCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1
bXBWYWx1ZShUIHYpIHsgbV9vdXQucHJpbnQodik7IH0KIAogcHJvdGVjdGVkOgotICAgIHZpcnR1
YWwgQ1N0cmluZyByZWdpc3Rlck5hbWUoaW50KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBDU3Ry
aW5nIHJlZ2lzdGVyTmFtZShWaXJ0dWFsUmVnaXN0ZXIpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFs
IGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQpIGNvbnN0
ID0gMDsKIAogICAgIEJ5dGVjb2RlRHVtcGVyQmFzZShQcmludFN0cmVhbSYgb3V0KQpAQCAtOTEs
MTEgKzkxLDExIEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgZHVtcEJ5dGVjb2RlKGNvbnN0IElu
c3RydWN0aW9uU3RyZWFtOjpSZWYmIGl0LCBjb25zdCBJQ1N0YXR1c01hcCYpOwogCi0gICAgQ1N0
cmluZyByZWdpc3Rlck5hbWUoaW50IHIpIGNvbnN0IG92ZXJyaWRlOworICAgIENTdHJpbmcgcmVn
aXN0ZXJOYW1lKFZpcnR1YWxSZWdpc3RlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgaW50IG91dE9m
TGluZUp1bXBPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZzZXQpIGNvbnN0IG92
ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgQ1N0cmluZyBjb25zdGFudE5hbWUoaW50
IGluZGV4KSBjb25zdDsKKyAgICB2aXJ0dWFsIENTdHJpbmcgY29uc3RhbnROYW1lKFZpcnR1YWxS
ZWdpc3RlcikgY29uc3Q7CiAKICAgICBCbG9jayogbV9ibG9jazsKIH07CkBAIC0xMzUsNyArMTM1
LDcgQEAgcHJpdmF0ZToKICAgICB1c2luZyBKU0M6OkJ5dGVjb2RlRHVtcGVyPEZ1bmN0aW9uQ29k
ZUJsb2NrPjo6Qnl0ZWNvZGVEdW1wZXI7CiAKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKLSAg
ICBDU3RyaW5nIGNvbnN0YW50TmFtZShpbnQgaW5kZXgpIGNvbnN0IG92ZXJyaWRlOworICAgIENT
dHJpbmcgY29uc3RhbnROYW1lKFZpcnR1YWxSZWdpc3RlciBpbmRleCkgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgQ1N0cmluZyBmb3JtYXRDb25zdGFudChUeXBlLCB1aW50NjRfdCkgY29uc3Q7CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRl
eC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5jcHAK
aW5kZXggMTVkNjFiYTkwNDAxYTcxMTdkYzBmOWYyNmUxOTEzN2ViMmMzMTU5Yi4uYTJjMWY0MTVi
MTk3ZDQ2YmQ2ODE0YTIwMTExYzg3YzUwODcyMjI0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmNwcApAQCAtMjUsNiArMjUsNyBAQAogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVJbmRleC5oIgorCiAjaW5jbHVk
ZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzIsNiArMzMsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKIHZvaWQgQnl0ZWNvZGVJbmRleDo6ZHVtcChXVEY6OlByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KCJiYyMiLCBvZmZzZXQoKSk7CisgICAg
aWYgKGNoZWNrcG9pbnQoKSkKKyAgICAgICAgb3V0LnByaW50KCJjcCMiLCBjaGVja3BvaW50KCkp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCmluZGV4IDUyOTVjMjliMTIyODEzMWY3MmFjMjA3MzFjMWQz
YmNlOTM1MTU4ZGYuLjEwZmJhNDQwNThlYzlkZmVkMjU0ODA5YTZkNzgzMzdkMDExYTRiNjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaApAQCAt
MjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5o
PgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogY2xhc3Mg
UHJpbnRTdHJlYW07CkBAIC0zNywyNCArMzgsMzMgQEAgY2xhc3MgQnl0ZWNvZGVJbmRleCB7CiBw
dWJsaWM6CiAgICAgQnl0ZWNvZGVJbmRleCgpID0gZGVmYXVsdDsKICAgICBCeXRlY29kZUluZGV4
KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKLSAgICAgICAgOiBtX29mZnNldChkZWxl
dGVkVmFsdWUoKS5hc0JpdHMoKSkKKyAgICAgICAgOiBtX3BhY2tlZEJpdHMoZGVsZXRlZFZhbHVl
KCkuYXNCaXRzKCkpCiAgICAgewogICAgIH0KLSAgICBleHBsaWNpdCBCeXRlY29kZUluZGV4KHVp
bnQzMl90IGJ5dGVjb2RlT2Zmc2V0KQotICAgICAgICA6IG1fb2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0
KQotICAgIHsgfQogCi0gICAgdWludDMyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZz
ZXQ7IH0KLSAgICB1aW50MzJfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQor
ICAgIGV4cGxpY2l0IEJ5dGVjb2RlSW5kZXgodWludDMyX3QgYnl0ZWNvZGVPZmZzZXQsIHVpbnQ4
X3QgY2hlY2twb2ludCA9IDApCisgICAgICAgIDogbV9wYWNrZWRCaXRzKHBhY2soYnl0ZWNvZGVP
ZmZzZXQsIGNoZWNrcG9pbnQpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCp0aGlzKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IG51bWJlck9mQ2hlY2twb2ludHMgPSA0
OworICAgIHN0YXRpY19hc3NlcnQoaGFzT25lQml0U2V0KG51bWJlck9mQ2hlY2twb2ludHMpLCAi
bnVtYmVyT2ZDaGVja3BvaW50cyBzaG91bGQgYmUgYSBwb3dlciBvZiAyIik7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1aW50MzJfdCBjaGVja3BvaW50TWFzayA9IG51bWJlck9mQ2hlY2twb2ludHMg
LSAxOworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgY2hlY2twb2ludFNoaWZ0ID0gV1RG
OjpnZXRNU0JTZXRDb25zdGV4cHIobnVtYmVyT2ZDaGVja3BvaW50cyk7CisKKyAgICB1aW50MzJf
dCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3BhY2tlZEJpdHMgPj4gY2hlY2twb2ludFNoaWZ0
OyB9CisgICAgdWludDhfdCBjaGVja3BvaW50KCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRz
ICYgY2hlY2twb2ludE1hc2s7IH0KKyAgICB1aW50MzJfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVy
biBtX3BhY2tlZEJpdHM7IH0KIAotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBX
VEY6OmludEhhc2gobV9vZmZzZXQpOyB9CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0
dXJuIFdURjo6aW50SGFzaChtX3BhY2tlZEJpdHMpOyB9CiAgICAgc3RhdGljIEJ5dGVjb2RlSW5k
ZXggZGVsZXRlZFZhbHVlKCkgeyByZXR1cm4gZnJvbUJpdHMoaW52YWxpZE9mZnNldCAtIDEpOyB9
CiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlz
ID09IGRlbGV0ZWRWYWx1ZSgpOyB9CiAKICAgICBzdGF0aWMgQnl0ZWNvZGVJbmRleCBmcm9tQml0
cyh1aW50MzJfdCBiaXRzKTsKIAogICAgIC8vIENvbXBhcmlzb24gb3BlcmF0b3JzLgotICAgIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX29mZnNldCAhPSBpbnZhbGlk
T2Zmc2V0ICYmIG1fb2Zmc2V0ICE9IGRlbGV0ZWRWYWx1ZSgpLm9mZnNldCgpOyB9CisgICAgZXhw
bGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyAhPSBpbnZh
bGlkT2Zmc2V0ICYmIG1fcGFja2VkQml0cyAhPSBkZWxldGVkVmFsdWUoKS5vZmZzZXQoKTsgfQog
ICAgIGJvb2wgb3BlcmF0b3IgPT0oY29uc3QgQnl0ZWNvZGVJbmRleCYgb3RoZXIpIGNvbnN0IHsg
cmV0dXJuIGFzQml0cygpID09IG90aGVyLmFzQml0cygpOyB9CiAgICAgYm9vbCBvcGVyYXRvciAh
PShjb25zdCBCeXRlY29kZUluZGV4JiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7IH0KIApAQCAtNjksMTMgKzc5LDIyIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1aW50MzJfdCBpbnZhbGlkT2Zmc2V0ID0gc3RkOjpudW1lcmljX2xpbWl0
czx1aW50MzJfdD46Om1heCgpOwogCi0gICAgdWludDMyX3QgbV9vZmZzZXQgeyBpbnZhbGlkT2Zm
c2V0IH07CisgICAgc3RhdGljIHVpbnQzMl90IHBhY2sodWludDMyX3QgYnl0ZWNvZGVJbmRleCwg
dWludDhfdCBjaGVja3BvaW50KTsKKworICAgIHVpbnQzMl90IG1fcGFja2VkQml0cyB7IGludmFs
aWRPZmZzZXQgfTsKIH07CiAKK2lubGluZSB1aW50MzJfdCBCeXRlY29kZUluZGV4OjpwYWNrKHVp
bnQzMl90IGJ5dGVjb2RlSW5kZXgsIHVpbnQ4X3QgY2hlY2twb2ludCkKK3sKKyAgICBBU1NFUlQo
Y2hlY2twb2ludCA8IG51bWJlck9mQ2hlY2twb2ludHMpOworICAgIEFTU0VSVCgoYnl0ZWNvZGVJ
bmRleCA8PCBjaGVja3BvaW50U2hpZnQpID4+IGNoZWNrcG9pbnRTaGlmdCA9PSBieXRlY29kZUlu
ZGV4KTsKKyAgICByZXR1cm4gYnl0ZWNvZGVJbmRleCA8PCBjaGVja3BvaW50U2hpZnQgfCBjaGVj
a3BvaW50OworfQorCiBpbmxpbmUgQnl0ZWNvZGVJbmRleCBCeXRlY29kZUluZGV4Ojpmcm9tQml0
cyh1aW50MzJfdCBiaXRzKQogewogICAgIEJ5dGVjb2RlSW5kZXggcmVzdWx0OwotICAgIHJlc3Vs
dC5tX29mZnNldCA9IGJpdHM7CisgICAgcmVzdWx0Lm1fcGFja2VkQml0cyA9IGJpdHM7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGlzdC5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpc3QucmIKaW5kZXggODYyY2NkOGNjZmQ0MGJmMGVlYjczNDI1ZWY2ZDI4YjQ3OTY4
MDg5Yy4uMzQ4MzQ3YzZiNGNkNzU0NjgwYzEyNmEwZjcyNzUzNmYxYmUzN2M0ZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCkBAIC01OSw3ICs1
OSw3IEBAIHR5cGVzIFsKICAgICA6V2F0Y2hwb2ludFNldCwKIAogICAgIDpWYWx1ZVByb2ZpbGUs
Ci0gICAgOlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIsCisgICAgOlZhbHVlUHJvZmlsZUFu
ZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciwKICAgICA6VW5hcnlBcml0aFByb2ZpbGUsCiAgICAgOkJp
bmFyeUFyaXRoUHJvZmlsZSwKICAgICA6QXJyYXlQcm9maWxlLApAQCAtNzk2LDYgKzc5NiwxMyBA
QCBvcCA6Y2FsbF92YXJhcmdzLAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmls
ZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgfSwK
KyAgICB0bXBzOiB7CisgICAgICAgIGFyZ0NvdW50SW5jbHVkaW5nVGhpczogdW5zaWduZWQsCisg
ICAgfSwKKyAgICBjaGVja3BvaW50czogeworICAgICAgICBkZXRlcm1pbmluZ0FyZ0NvdW50OiBu
aWwsCisgICAgICAgIG1ha2VDYWxsOiBuaWwsCiAgICAgfQogCiBvcCA6dGFpbF9jYWxsX3ZhcmFy
Z3MsCkBAIC04MTAsNiArODE3LDEzIEBAIG9wIDp0YWlsX2NhbGxfdmFyYXJncywKICAgICBtZXRh
ZGF0YTogewogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJv
ZmlsZTogVmFsdWVQcm9maWxlLAorICAgIH0sCisgICAgdG1wczogeworICAgICAgICBhcmdDb3Vu
dEluY2x1ZGluZ1RoaXM6IHVuc2lnbmVkCisgICAgfSwKKyAgICBjaGVja3BvaW50czogeworICAg
ICAgICBkZXRlcm1pbmluZ0FyZ0NvdW50OiBuaWwsCisgICAgICAgIG1ha2VDYWxsOiBuaWwsCiAg
ICAgfQogCiBvcCA6dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzLApAQCAtODUwLDYgKzg2NCwx
MyBAQCBvcCA6Y29uc3RydWN0X3ZhcmFyZ3MsCiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgYXJy
YXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwK
KyAgICB9LAorICAgIHRtcHM6IHsKKyAgICAgICAgYXJnQ291bnRJbmNsdWRpbmdUaGlzOiB1bnNp
Z25lZAorICAgIH0sCisgICAgY2hlY2twb2ludHM6IHsKKyAgICAgICAgZGV0ZXJtaW5pbmdBcmdD
b3VudDogbmlsLAorICAgICAgICBtYWtlQ2FsbDogbmlsLAogICAgIH0KIAogb3AgOnJldCwKQEAg
LTEwMDMsNyArMTAyNCw3IEBAIG9wIDpjYXRjaCwKICAgICAgICAgdGhyb3duVmFsdWU6IFZpcnR1
YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGJ1ZmZlcjogVmFs
dWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlci4qLAorICAgICAgICBidWZmZXI6IFZhbHVlUHJvZmls
ZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlci4qLAogICAgIH0KIAogb3AgOnRocm93LApAQCAtMTI0
OSw2ICsxMjcwLDggQEAgb3AgOmxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmUKIG9wIDpsbGlu
dF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmUKIG9wIDpsbGludF9pbnRlcm5hbF9mdW5jdGlv
bl9jYWxsX3RyYW1wb2xpbmUKIG9wIDpsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3Rf
dHJhbXBvbGluZQorb3AgOmNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJh
bXBvbGluZQorb3AgOmNoZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBvbGluZQogb3AgOmhhbmRsZVVu
Y2F1Z2h0RXhjZXB0aW9uCiBvcCA6b3BfY2FsbF9yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF9jb25z
dHJ1Y3RfcmV0dXJuX2xvY2F0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCmluZGV4IDkxOGUxZDIx
MzRhNjBiNmNmZjEwMTE0M2FiNTU0MzNiOGI0M2Y0NDAuLjc5NzVmZWYzYzg4MTQzMTgxNTdhNTlk
YmU4YmU1NTQ4Mzg4ZmUzNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCkBAIC0yMDEsNCArMjAx
LDM5IEBAIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpkdW1wUmVzdWx0cyhDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKICAgICB9CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEVudW1UeXBlMSwg
dHlwZW5hbWUgRW51bVR5cGUyPgorY29uc3RleHByIGJvb2wgZW51bVZhbHVlc0VxdWFsQXNJbnRl
Z3JhbChFbnVtVHlwZTEgdjEsIEVudW1UeXBlMiB2MikKK3sKKyAgICB1c2luZyBJbnRUeXBlMSA9
IHR5cGVuYW1lIHN0ZDo6dW5kZXJseWluZ190eXBlPEVudW1UeXBlMT46OnR5cGU7CisgICAgdXNp
bmcgSW50VHlwZTIgPSB0eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxFbnVtVHlwZTI+Ojp0
eXBlOworICAgIGlmIGNvbnN0ZXhwciAoc2l6ZW9mKEludFR5cGUxKSA+IHNpemVvZihJbnRUeXBl
MikpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnRUeXBlMT4odjEpID09IHN0YXRpY19j
YXN0PEludFR5cGUxPih2Mik7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SW50VHlwZTI+KHYxKSA9PSBzdGF0aWNfY2FzdDxJbnRUeXBlMj4odjIpOworfQorCitCaXRtYXA8
bWF4TnVtQ2hlY2twb2ludFRtcHM+IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludChjb25zdCBDb2Rl
QmxvY2smIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQoreworICAgIEJp
dG1hcDxtYXhOdW1DaGVja3BvaW50VG1wcz4gcmVzdWx0OworICAgIHVpbnQ4X3QgY2hlY2twb2lu
dCA9IGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpOworCisgICAgaWYgKCFjaGVja3BvaW50KQor
ICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgc3dpdGNoIChjb2RlQmxvY2suaW5zdHJ1Y3Rp
b25zKCkuYXQoYnl0ZWNvZGVJbmRleCktPm9wY29kZUlEKCkpIHsKKyAgICBjYXNlIG9wX2NhbGxf
dmFyYXJnczoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3BfY29u
c3RydWN0X3ZhcmFyZ3M6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChlbnVtVmFsdWVzRXF1YWxB
c0ludGVncmFsKE9wQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsLCBPcFRhaWxDYWxsVmFyYXJnczo6bWFr
ZUNhbGwpICYmIGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6YXJnQ291
bnRJbmNsdWRpbmdUaGlzLCBPcFRhaWxDYWxsVmFyYXJnczo6YXJnQ291bnRJbmNsdWRpbmdUaGlz
KSk7CisgICAgICAgIHN0YXRpY19hc3NlcnQoZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChPcENh
bGxWYXJhcmdzOjptYWtlQ2FsbCwgT3BDb25zdHJ1Y3RWYXJhcmdzOjptYWtlQ2FsbCkgJiYgZW51
bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChPcENhbGxWYXJhcmdzOjphcmdDb3VudEluY2x1ZGluZ1Ro
aXMsIE9wQ29uc3RydWN0VmFyYXJnczo6YXJnQ291bnRJbmNsdWRpbmdUaGlzKSk7CisgICAgICAg
IGlmIChjaGVja3BvaW50ID09IE9wQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsKQorICAgICAgICAgICAg
cmVzdWx0LnNldChPcENhbGxWYXJhcmdzOjphcmdDb3VudEluY2x1ZGluZ1RoaXMpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgKaW5kZXggNzM3OWIzYzliYzcyMzI1OTEwOWM2MWU3YWRh
NTMzZDllN2QyZjJjOS4uM2U1ZWRjMGE2OGFlNDRkZjY1MTVjZGJmZDRiNDI3ZWY2OWVlZjE4MCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXMuaApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkJ5dGVjb2Rl
QmFzaWNCbG9jay5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlR3JhcGguaCIKICNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKKyNpbmNsdWRlIDx3dGYvQml0bWFwLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RCaXRW
ZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC05Nyw2ICs5OCw4IEBAIHByaXZhdGU6CiAg
ICAgQnl0ZWNvZGVHcmFwaCBtX2dyYXBoOwogfTsKIAorQml0bWFwPG1heE51bUNoZWNrcG9pbnRU
bXBzPiB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoY29uc3QgQ29kZUJsb2NrJiwgQnl0ZWNvZGVJ
bmRleCk7CisKIGlubGluZSBib29sIG9wZXJhbmRJc0Fsd2F5c0xpdmUoaW50IG9wZXJhbmQpOwog
aW5saW5lIGJvb2wgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUoY29uc3QgRmFzdEJp
dFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCk7CiBpbmxpbmUgYm9vbCBvcGVyYW5kSXNMaXZlKGNv
bnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50IG9wZXJhbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXNJbmxpbmVzLmgKaW5kZXggM2QxMmUxOTVjNjk5ZWZiZjk2MzZhMmI5NzRlNzk0NGNkYWVkNzJj
MC4uZGU2Y2E4ZGM5MTA5Yjc4OTY3ZjEwNTUwMDlkYTMwZTg5OTg0ODI4MiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lu
bGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzSW5saW5lcy5oCkBAIC0zMywyMiArMzMsMjIgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKLWlubGluZSBib29sIG9wZXJhbmRJc0Fsd2F5c0xpdmUoaW50IG9wZXJhbmQpCitpbmxp
bmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJJc0Fsd2F5c0xpdmUoVmlydHVhbFJlZ2lzdGVyIHJlZykK
IHsKLSAgICByZXR1cm4gIVZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS5pc0xvY2FsKCk7CisgICAg
cmV0dXJuICFyZWcuaXNMb2NhbCgpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYW5kVGhhdElzTm90
QWx3YXlzTGl2ZUlzTGl2ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKQor
aW5saW5lIGJvb2wgdmlydHVhbFJlZ2lzdGVyVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShjb25z
dCBGYXN0Qml0VmVjdG9yJiBvdXQsIFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgdW5zaWdu
ZWQgbG9jYWwgPSBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpOworICAgIHVuc2ln
bmVkIGxvY2FsID0gcmVnLnRvTG9jYWwoKTsKICAgICBpZiAobG9jYWwgPj0gb3V0Lm51bUJpdHMo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBvdXRbbG9jYWxdOwogfQogCi1p
bmxpbmUgYm9vbCBvcGVyYW5kSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50IG9w
ZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJJc0xpdmUoY29uc3QgRmFzdEJpdFZl
Y3RvciYgb3V0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKIHsKLSAgICByZXR1cm4gb3BlcmFu
ZElzQWx3YXlzTGl2ZShvcGVyYW5kKSB8fCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2
ZShvdXQsIG9wZXJhbmQpOworICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0Fsd2F5c0xpdmUo
b3BlcmFuZCkgfHwgdmlydHVhbFJlZ2lzdGVyVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShvdXQs
IG9wZXJhbmQpOwogfQogCiBpbmxpbmUgYm9vbCBpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKaW5kZXggM2YzMmZlODdlNGMwYWMyNzIyZDY5NGI0MWYxOWJlYzRkN2Q1
OTdkMi4uNzhlYjRmN2QxODEwNTAxZGI4YzBlMDMyYTk4ZmY2NzVhNGY0OTk5OCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTM4LDYgKzM4LDcg
QEAKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJCeXRlY29kZVVzZURl
Zi5oIgogI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCisjaW5jbHVkZSAiQ2hlY2twb2ludE9T
UkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiQ29kZUJsb2NrU2V0LmgiCiAjaW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgiCkBAIC00MDks
NyArNDEwLDcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0
RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIoY2xvbmVkU3ltYm9sVGFibGUtPm1fbG9jayk7CiAgICAgICAgICAg
ICBjbG9uZWRTeW1ib2xUYWJsZS0+cHJlcGFyZUZvclR5cGVQcm9maWxpbmcobG9ja2VyKTsKICAg
ICAgICAgfQotICAgICAgICByZXBsYWNlQ29uc3RhbnQodW5saW5rZWRNb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrLT5tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNl
dCgpLCBjbG9uZWRTeW1ib2xUYWJsZSk7CisgICAgICAgIHJlcGxhY2VDb25zdGFudChWaXJ0dWFs
UmVnaXN0ZXIodW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLT5tb2R1bGVFbnZpcm9ubWVu
dFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCgpKSwgY2xvbmVkU3ltYm9sVGFibGUp
OwogICAgIH0KIAogICAgIGJvb2wgc2hvdWxkVXBkYXRlRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hl
ID0gbV91bmxpbmtlZENvZGUtPndhc0NvbXBpbGVkV2l0aFR5cGVQcm9maWxlck9wY29kZXMoKSB8
fCBtX3VubGlua2VkQ29kZS0+d2FzQ29tcGlsZWRXaXRoQ29udHJvbEZsb3dQcm9maWxlck9wY29k
ZXMoKTsKQEAgLTY0Myw3ICs2NDQsNyBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAg
ICAgICAgaWYgKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IExvY2FsQ2xv
c3VyZVZhcikgewogICAgICAgICAgICAgICAgIC8vIE9ubHkgZG8gd2F0Y2hpbmcgaWYgdGhlIHBy
b3BlcnR5IHdlJ3JlIHB1dHRpbmcgdG8gaXMgbm90IGFub255bW91cy4KICAgICAgICAgICAgICAg
ICBpZiAoYnl0ZWNvZGUubV92YXIgIT0gVUlOVF9NQVgpIHsKLSAgICAgICAgICAgICAgICAgICAg
U3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29uc3Rh
bnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZU9yU2NvcGVEZXB0aC5zeW1ib2xUYWJsZSgpLm9mZnNl
dCgpKSk7CisgICAgICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpz
Q2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3ltYm9sVGFibGVPclNj
b3BlRGVwdGguc3ltYm9sVGFibGUoKSkpOwogICAgICAgICAgICAgICAgICAgICBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOwogICAgICAgICAgICAg
ICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwog
ICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ZXIgPSBzeW1ib2xUYWJsZS0+ZmluZChsb2NrZXIs
IGlkZW50LmltcGwoKSk7CkBAIC03MTEsOCArNzEyLDcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxp
bmsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNh
c2UgUHJvZmlsZVR5cGVCeXRlY29kZUxvY2FsbHlSZXNvbHZlZDogewotICAgICAgICAgICAgICAg
IGludCBzeW1ib2xUYWJsZUluZGV4ID0gYnl0ZWNvZGUubV9zeW1ib2xUYWJsZU9yU2NvcGVEZXB0
aC5zeW1ib2xUYWJsZSgpLm9mZnNldCgpOwotICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBz
eW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50KHN5bWJvbFRhYmxl
SW5kZXgpKTsKKyAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nh
c3Q8U3ltYm9sVGFibGUqPihnZXRDb25zdGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlT3JTY29w
ZURlcHRoLnN5bWJvbFRhYmxlKCkpKTsKICAgICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCA9IGlkZW50aWZpZXIoYnl0ZWNvZGUubV9pZGVudGlmaWVyKTsKICAgICAgICAgICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAg
ICAgICAgICAgICAgIC8vIElmIG91ciBwYXJlbnQgc2NvcGUgd2FzIGNyZWF0ZWQgd2hpbGUgcHJv
ZmlsaW5nIHdhcyBkaXNhYmxlZCwgaXQgd2lsbCBub3QgaGF2ZSBwcmVwYXJlZCBmb3IgcHJvZmls
aW5nIHlldC4KQEAgLTEwODgsNiArMTA4OCwxNSBAQCBzdGF0aWMgYm9vbCBzaG91bGRNYXJrVHJh
bnNpdGlvbihWTSYgdm0sIERGRzo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24mIHRyYW5zaXRpbwog
ICAgIAogICAgIHJldHVybiB0cnVlOwogfQorCitCeXRlY29kZUluZGV4IENvZGVCbG9jazo6Ynl0
ZWNvZGVJbmRleEZvckV4aXQoQnl0ZWNvZGVJbmRleCBleGl0SW5kZXgpIGNvbnN0Cit7CisgICAg
aWYgKGV4aXRJbmRleC5jaGVja3BvaW50KCkpIHsKKyAgICAgICAgY29uc3QgYXV0byYgaW5zdHJ1
Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5hdChleGl0SW5kZXgpOworICAgICAgICBleGl0SW5kZXgg
PSBpbnN0cnVjdGlvbi5uZXh0KCkuaW5kZXgoKTsKKyAgICB9CisgICAgcmV0dXJuIGV4aXRJbmRl
eDsKK30KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogdm9pZCBDb2RlQmxvY2s6OnByb3Bh
Z2F0ZVRyYW5zaXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQpAQCAtMTgxNiwxMCArMTgyNSwxMCBAQCB2b2lkIENvZGVCbG9jazo6ZW5zdXJlQ2F0
Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZUluZGV4U2xvdyhjb25zdCBPcENhdGNoJgog
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1ldGVycygpOyArK2kpCiAgICAgICAgIGxp
dmVPcGVyYW5kcy5hcHBlbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpOwogCi0gICAg
YXV0byBwcm9maWxlcyA9IG1ha2VVbmlxdWU8VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcj4o
bGl2ZU9wZXJhbmRzLnNpemUoKSk7CisgICAgYXV0byBwcm9maWxlcyA9IG1ha2VVbmlxdWU8VmFs
dWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyPihsaXZlT3BlcmFuZHMuc2l6ZSgpKTsK
ICAgICBSRUxFQVNFX0FTU0VSVChwcm9maWxlcy0+bV9zaXplID09IGxpdmVPcGVyYW5kcy5zaXpl
KCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9maWxlcy0+bV9zaXplOyArK2kp
Ci0gICAgICAgIHByb2ZpbGVzLT5tX2J1ZmZlci5nZXQoKVtpXS5tX29wZXJhbmQgPSBsaXZlT3Bl
cmFuZHNbaV0ub2Zmc2V0KCk7CisgICAgICAgIHByb2ZpbGVzLT5tX2J1ZmZlci5nZXQoKVtpXS5t
X29wZXJhbmQgPSBsaXZlT3BlcmFuZHNbaV07CiAKICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNz
YXJ5KCk7CiAKQEAgLTI3MTgsNyArMjcyNyw3IEBAIHZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxW
YWx1ZVByb2ZpbGVQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3ModW5zaWduZWQmIG51bWJlCiAK
ICAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7CiAgICAgICAgIGZv
ciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmlsZXMpIHsKLSAg
ICAgICAgICAgIHByb2ZpbGVCdWNrZXQtPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVy
YW5kJiBwcm9maWxlKSB7CisgICAgICAgICAgICBwcm9maWxlQnVja2V0LT5mb3JFYWNoKFsmXSAo
VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgICAgICAg
ICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKICAgICAgICAgICAg
IH0pOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgKaW5kZXggMGY5YmJlYWMyNzYxYTYzZWQ0MDk4ZTIyNWFlOGJlNDY3OGM3ZWNhNy4uNjhmZDAx
ZmQ5MTRjNWU0MTllYjg4MzkyNzlmNTdhZjYwYzRkNjYwYiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaApAQCAtMTYzLDYgKzE2Myw3IEBAIHB1YmxpYzoKICAg
ICBpbnQgbnVtQ2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxsZWVMb2NhbHM7
IH0KIAogICAgIGludCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CisgICAg
aW50IG51bVRtcHMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+aGFzQ2hlY2twb2lu
dHMoKSAqIG1heE51bUNoZWNrcG9pbnRUbXBzOyB9CiAKICAgICBpbnQqIGFkZHJlc3NPZk51bVBh
cmFtZXRlcnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29k
ZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpOyB9CkBAIC0yMzEsMjAgKzIzMiwyMCBAQCBwdWJsaWM6
CiAgICAgYm9vbCBoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0OwogICAgIGJv
b2wgaW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKCk7CiAKLSAgICBpbmxpbmUgYm9vbCBpc0tub3du
Tm90SW1tZWRpYXRlKGludCBpbmRleCkKKyAgICBpbmxpbmUgYm9vbCBpc0tub3duTm90SW1tZWRp
YXRlKFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewotICAgICAgICBpZiAoaW5kZXggPT0gdGhp
c1JlZ2lzdGVyKCkub2Zmc2V0KCkgJiYgIWlzU3RyaWN0TW9kZSgpKQorICAgICAgICBpZiAocmVn
ID09IHRoaXNSZWdpc3RlcigpICYmICFpc1N0cmljdE1vZGUoKSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogCi0gICAgICAgIGlmIChpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpCi0g
ICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnQoaW5kZXgpLmlzQ2VsbCgpOworICAgICAgICBp
ZiAocmVnLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFudChyZWcp
LmlzQ2VsbCgpOwogCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBBTFdBWVNf
SU5MSU5FIGJvb2wgaXNUZW1wb3JhcnlSZWdpc3RlckluZGV4KGludCBpbmRleCkKKyAgICBBTFdB
WVNfSU5MSU5FIGJvb2wgaXNUZW1wb3JhcnlSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGluZGV4ID49IG1fbnVtVmFyczsKKyAgICAgICAgcmV0dXJu
IHJlZy5vZmZzZXQoKSA+PSBtX251bVZhcnM7CiAgICAgfQogCiAgICAgSGFuZGxlckluZm8qIGhh
bmRsZXJGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgsIFJlcXVpcmVkSGFuZGxlciA9IFJl
cXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7CkBAIC01ODMsMTAgKzU4NCw5IEBAIHB1YmxpYzoK
ICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3Rh
bnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9Ci0gICAgV3JpdGVC
YXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKGludCBpbmRleCkgeyByZXR1cm4gbV9j
b25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQot
ICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW50
IGluZGV4KSB7IHJldHVybiBpbmRleCA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQot
ICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChpbnQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleF0uZ2V0KCk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
biBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uW2luZGV4IC0gRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXhdOyB9CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFu
dFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3Rl
cnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBn
ZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50
UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KKyAgICBBTFdBWVNfSU5M
SU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbltyZWcudG9Db25zdGFudEluZGV4KCldOyB9CiAKICAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rp
b25EZWNsc1tpbmRleF0uZ2V0KCk7IH0KICAgICBpbnQgbnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkg
eyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsgfQpAQCAtNzc2LDYgKzc3Niw3IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgc2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0
aW9uUmVzdWx0KENvbXBpbGF0aW9uUmVzdWx0KTsKICAgICAKKyAgICBCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXhGb3JFeGl0KEJ5dGVjb2RlSW5kZXgpIGNvbnN0OwogICAgIHVpbnQzMl90IG9z
ckV4aXRDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9vc3JFeGl0Q291bnRlcjsgfQogCiAgICAg
dm9pZCBjb3VudE9TUkV4aXQoKSB7IG1fb3NyRXhpdENvdW50ZXIrKzsgfQpAQCAtODc2LDcgKzg3
Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hK
dW1wVGFibGVzOwogICAgICAgICBWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRj
aEp1bXBUYWJsZXM7CiAKLSAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZVByb2Zp
bGVBbmRPcGVyYW5kQnVmZmVyPj4gbV9jYXRjaFByb2ZpbGVzOworICAgICAgICBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcj4+IG1fY2F0
Y2hQcm9maWxlczsKIAogICAgICAgICBEaXJlY3RFdmFsQ29kZUNhY2hlIG1fZGlyZWN0RXZhbENv
ZGVDYWNoZTsKICAgICB9OwpAQCAtOTQzLDEwICs5NDQsMTAgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgc2V0Q29uc3RhbnRSZWdpc3RlcnMoY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3du
Pj4mIGNvbnN0YW50cywgY29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNv
bnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiwgU2NyaXB0RXhlY3V0YWJsZSogdG9wTGV2
ZWxFeGVjdXRhYmxlKTsKIAotICAgIHZvaWQgcmVwbGFjZUNvbnN0YW50KGludCBpbmRleCwgSlNW
YWx1ZSB2YWx1ZSkKKyAgICB2b2lkIHJlcGxhY2VDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVn
LCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzQ29uc3RhbnRSZWdpc3Rl
ckluZGV4KGluZGV4KSAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4IC0gRmlyc3RDb25zdGFu
dFJlZ2lzdGVySW5kZXgpIDwgbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkpOwotICAgICAgICBt
X2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdLnNl
dCgqbV92bSwgdGhpcywgdmFsdWUpOworICAgICAgICBBU1NFUlQocmVnLmlzQ29uc3RhbnQoKSAm
JiBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlZy50b0NvbnN0YW50SW5kZXgoKSkgPCBtX2NvbnN0YW50
UmVnaXN0ZXJzLnNpemUoKSk7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29u
c3RhbnRJbmRleCgpXS5zZXQoKm1fdm0sIHRoaXMsIHZhbHVlKTsKICAgICB9CiAKICAgICBib29s
IHNob3VsZFZpc2l0U3Ryb25nbHkoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAppbmRleCAyMTA2ODEzZjBhMWVh
YTUxMzRkMGYzOWJkNzUxYzczMThlYmMwNDMxLi5mOTgyOWEyODZmOGFhYmY0ZDMzMmZmZjFlNzFl
YTNjODNmOWJjNjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZU9yaWdpbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3Jp
Z2luLmgKQEAgLTE2MCw3ICsxNjAsOSBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgYXBwcm94aW1h
dGVIYXNoKElubGluZUNhbGxGcmFtZSogdGVybWluYWwgPSBudWxscHRyKSBjb25zdDsKIAogICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KLSAgICB2b2lkIHdhbGtVcElubGluZVN0YWNr
KGNvbnN0IEZ1bmN0aW9uJik7CisgICAgdm9pZCB3YWxrVXBJbmxpbmVTdGFjayhjb25zdCBGdW5j
dGlvbiYpIGNvbnN0OworCisgICAgaW5saW5lIGJvb2wgaW5saW5lU3RhY2tDb250YWluc0FjdGl2
ZUNoZWNrcG9pbnQoKSBjb25zdDsKICAgICAKICAgICAvLyBHZXQgdGhlIGlubGluZSBzdGFjay4g
VGhpcyBpcyBzbG93LCBhbmQgaXMgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZyBvbmx5LgogICAgIFZl
Y3RvcjxDb2RlT3JpZ2luPiBpbmxpbmVTdGFjaygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaAppbmRleCBlNGE1
NzViMDNhN2QxYjU5OWFkMGQ1NmNlZGRkYWY0YmEwNTAyZjNhLi40N2M2NTdjOGRmOTAzODNhZjY1
ZWI1YzNiOGE4YjA1OTRkMGM0ZGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaApAQCAtMjYsMTIgKzI2LDE2IEBACiAj
cHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgorI2lu
Y2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczsKK2NsYXNzIENv
ZGVCbG9jazsKIAorLy8gTm90ZTogRnVsbCBieXRlY29kZSBsaXZlbmVzcyBkb2VzIG5vdCB0cmFj
ayBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpdmVuZXNzIG9mIHRlbXBzLgorLy8gSWYgeW91
IHdhbnQgdG1wIGxpdmVuZXNzIGZvciBhIGNoZWNrcG9pbnQgYXNrIHRtcExpdmVuZXNzRm9yQ2hl
Y2twb2ludC4KIGNsYXNzIEZ1bGxCeXRlY29kZUxpdmVuZXNzIHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTQ3LDE1ICs1MSwxNSBAQCBwdWJsaWM6CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgb3Bl
cmFuZElzTGl2ZShpbnQgb3BlcmFuZCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBMaXZl
bmVzc0NhbGN1bGF0aW9uUG9pbnQgcG9pbnQpIGNvbnN0CisgICAgYm9vbCB2aXJ0dWFsUmVnaXN0
ZXJJc0xpdmUoVmlydHVhbFJlZ2lzdGVyIHJlZywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
LCBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQgcG9pbnQpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gb3BlcmFuZElzQWx3YXlzTGl2ZShvcGVyYW5kKSB8fCBvcGVyYW5kVGhhdElzTm90QWx3
YXlzTGl2ZUlzTGl2ZShnZXRMaXZlbmVzcyhieXRlY29kZUluZGV4LCBwb2ludCksIG9wZXJhbmQp
OworICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZlKHJlZykgfHwgdmly
dHVhbFJlZ2lzdGVyVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShnZXRMaXZlbmVzcyhieXRlY29k
ZUluZGV4LCBwb2ludCksIHJlZyk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOwogICAgIAotICAgIC8vIEZJWE1FOiBVc2Ug
RmFzdEJpdFZlY3RvcidzIHZpZXcgbWVjaGFuc2ltIHRvIG1ha2UgdGhlbSBjb21wYWN0LgorICAg
IC8vIEZJWE1FOiBVc2UgRmFzdEJpdFZlY3RvcidzIHZpZXcgbWVjaGFuaXNtIHRvIG1ha2UgdGhl
bSBjb21wYWN0LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMDQ0Mjc8UGFzdGU+CiAgICAgVmVjdG9yPEZhc3RCaXRWZWN0b3IsIDAsIFVuc2FmZVZlY3Rv
ck92ZXJmbG93PiBtX2JlZm9yZVVzZVZlY3RvcjsKICAgICBWZWN0b3I8RmFzdEJpdFZlY3Rvciwg
MCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fYWZ0ZXJVc2VWZWN0b3I7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgKaW5kZXggOTc1MDhiYmYw
YzQ1Y2I5N2E0Nzg1MTU5NzA0MTcxZGRmNmRkMWRhMy4uZTI5ZjM4NGQxZDA2NzJmZWVhMDcxMjA1
YmNhYTI4MWE2NDliMjIyOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0lubGluZUNhbGxGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbmxpbmVDYWxsRnJhbWUuaApAQCAtMTc5LDcgKzE3OSw4IEBAIHN0cnVjdCBJbmxpbmVDYWxs
RnJhbWUgewogICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+IGJhc2VsaW5lQ29kZUJsb2NrOwog
ICAgIENvZGVPcmlnaW4gZGlyZWN0Q2FsbGVyOwogCi0gICAgdW5zaWduZWQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgeyAwIH07IC8vIERvIG5vdCBpbmNsdWRlIGZpeHVwcy4KKyAgICB1bnNp
Z25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA6IDIyOyAvLyBEbyBub3QgaW5jbHVkZSBm
aXh1cHMuCisgICAgdW5zaWduZWQgdG1wT2Zmc2V0IDogMTA7CiAgICAgc2lnbmVkIHN0YWNrT2Zm
c2V0IDogMjg7CiAgICAgdW5zaWduZWQga2luZCA6IDM7IC8vIHJlYWwgdHlwZSBpcyBLaW5kCiAg
ICAgYm9vbCBpc0Nsb3N1cmVDYWxsIDogMTsgLy8gSWYgZmFsc2UgdGhlbiB3ZSBrbm93IHRoYXQg
Y2FsbGVlL3Njb3BlIGFyZSBjb25zdGFudHMgYW5kIHRoZSBERkcgd29uJ3QgdHJlYXQgdGhlbSBh
cyB2YXJpYWJsZXMsIGkuZS4gdGhleSBoYXZlIHRvIGJlIHJlY292ZXJlZCBtYW51YWxseS4KQEAg
LTE5MSw3ICsxOTIsOSBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICAvLyBJbmxpbmVD
YWxsRnJhbWUncyBmaWVsZHMuIFRoaXMgY29uc3RydWN0b3IgaXMgaGVyZSBqdXN0IHRvIHJlZHVj
ZSBjb25mdXNpb24gaWYKICAgICAvLyB3ZSBmb3Jnb3QgdG8gaW5pdGlhbGl6ZSBleHBsaWNpdGx5
LgogICAgIElubGluZUNhbGxGcmFtZSgpCi0gICAgICAgIDogc3RhY2tPZmZzZXQoMCkKKyAgICAg
ICAgOiBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygwKQorICAgICAgICAsIHRtcE9mZnNldCgw
KQorICAgICAgICAsIHN0YWNrT2Zmc2V0KDApCiAgICAgICAgICwga2luZChDYWxsKQogICAgICAg
ICAsIGlzQ2xvc3VyZUNhbGwoZmFsc2UpCiAgICAgewpAQCAtMjE5LDYgKzIyMiwxMiBAQCBzdHJ1
Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGljX2Nhc3Q8
c2lnbmVkPihzdGFja09mZnNldCkgPT0gb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIHNldFRt
cE9mZnNldCh1bnNpZ25lZCBvZmZzZXQpCisgICAgeworICAgICAgICB0bXBPZmZzZXQgPSBvZmZz
ZXQ7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bXBPZmZz
ZXQpID09IG9mZnNldCk7CisgICAgfQorCiAgICAgcHRyZGlmZl90IGNhbGxlckZyYW1lT2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gc3RhY2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgQ2FsbEZy
YW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpOyB9CiAgICAgcHRyZGlmZl90IHJldHVyblBDT2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gc3RhY2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgQ2FsbEZy
YW1lOjpyZXR1cm5QQ09mZnNldCgpOyB9CiAKQEAgLTI0Nyw5ICsyNTYsOSBAQCBpbmxpbmUgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGNv
bnN0IENvZGVPcmlnaQogICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9jazsKIH0KIAotLy8gVGhp
cyBmdW5jdGlvbiBpcyBkZWZpbmVkIGhlcmUgYW5kIG5vdCBpbiBDb2RlT3JpZ2luIGJlY2F1c2Ug
aXQgbmVlZHMgYWNjZXNzIHRvIHRoZSBkaXJlY3RDYWxsZXIgZmllbGQgaW4gSW5saW5lQ2FsbEZy
YW1lCisvLyBUaGVzZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGhlcmUgYW5kIG5vdCBpbiBDb2RlT3Jp
Z2luIGJlY2F1c2UgaXQgbmVlZHMgYWNjZXNzIHRvIHRoZSBkaXJlY3RDYWxsZXIgZmllbGQgaW4g
SW5saW5lQ2FsbEZyYW1lCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+Ci1pbmxpbmUgdm9p
ZCBDb2RlT3JpZ2luOjp3YWxrVXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlvbiYgZnVuY3Rpb24p
CitpbmxpbmUgdm9pZCBDb2RlT3JpZ2luOjp3YWxrVXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlv
biYgZnVuY3Rpb24pIGNvbnN0CiB7CiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gKnRoaXM7
CiAgICAgd2hpbGUgKHRydWUpIHsKQEAgLTI2MSwxMSArMjcwLDM4IEBAIGlubGluZSB2b2lkIENv
ZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikKICAg
ICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgVmlydHVhbFJlZ2lzdGVyIHJlbWFwT3BlcmFuZChJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK2lubGlu
ZSBib29sIENvZGVPcmlnaW46OmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50KCkg
Y29uc3QKK3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgIHdhbGtVcElubGluZVN0YWNr
KFsmXSAoQ29kZU9yaWdpbiBvcmlnaW4pIHsKKyAgICAgICAgaWYgKG9yaWdpbi5ieXRlY29kZUlu
ZGV4KCkuY2hlY2twb2ludCgpKQorICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICB9KTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitBTFdBWVNfSU5MSU5FIE9wZXJhbmQgcmVtYXBPcGVy
YW5kKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpCit7
CisgICAgaWYgKGlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgcmV0dXJuIG9wZXJhbmQuaXNUbXAo
KSA/IE9wZXJhbmQ6OnRtcChvcGVyYW5kLnZhbHVlKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9m
ZnNldCkgOiBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldDsKKyAgICByZXR1cm4gb3BlcmFuZDsKK30KKworQUxXQVlTX0lOTElORSBPcGVyYW5k
IHJlbWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJl
Z2lzdGVyIHJlZykKK3sKKyAgICByZXR1cm4gcmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwg
T3BlcmFuZChyZWcpKTsKK30KKworQUxXQVlTX0lOTElORSBPcGVyYW5kIHVubWFwT3BlcmFuZChJ
bmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZCBvcGVyYW5kKQogewogICAg
IGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIocmVn
Lm9mZnNldCgpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCk7Ci0gICAgcmV0dXJuIHJl
ZzsKKyAgICAgICAgcmV0dXJuIG9wZXJhbmQuaXNUbXAoKSA/IE9wZXJhbmQ6OnRtcChvcGVyYW5k
LnZhbHVlKCkgLSBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCkgOiBPcGVyYW5kKG9wZXJhbmQu
dmlydHVhbFJlZ2lzdGVyKCkgLSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKKyAgICBy
ZXR1cm4gb3BlcmFuZDsKK30KKworQUxXQVlTX0lOTElORSBPcGVyYW5kIHVubWFwT3BlcmFuZChJ
bmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK3sK
KyAgICByZXR1cm4gdW5tYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZChyZWcpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCmluZGV4IGJmYjk0YjM1ZmNk
NjM5YTRhMWYxZDAwYzhhYmIxNDVlYjFjNjRhNTkuLjgxZjVhMGM0ODljNGVmNmRkY2JhNmUxYjQ2
MmQ3MmQ5ZTk4NjQ2ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbmN1cnJlbnRKU0xvY2suaCIKKyNpbmNsdWRlICJPcGVy
YW5kcy5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdp
c3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC00OSw3ICs1MCw3IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgfQogICAgIAotICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBP
cGVyYW5kIG9wZXJhbmQpCiAgICAgICAgIDogbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgp
CiAgICAgICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCiAgICAgewpAQCAtNjksNyArNzAsNyBAQCBw
dWJsaWM6CiAgICAgCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gbV9ieXRlY29kZUluZGV4Lmhhc2goKSArIG1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICAg
ICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleC5oYXNoKCkgKyBtX29wZXJhbmQudmFsdWUoKSArIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihtX29wZXJhbmQua2luZCgpKTsKICAgICB9CiAgICAgCiAgICAg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KCkgY29uc3QKQEAgLTc4LDcgKzc5LDcgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4OwogICAgIH0KIAotICAgIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKCkgY29uc3QKKyAgICBPcGVyYW5kIG9wZXJhbmQoKSBjb25zdAog
ICAgIHsKICAgICAgICAgQVNTRVJUKCEhKnRoaXMpOwogICAgICAgICByZXR1cm4gbV9vcGVyYW5k
OwpAQCAtOTAsNyArOTEsNyBAQCBwdWJsaWM6CiAgICAgfQogcHJpdmF0ZTogCiAgICAgQnl0ZWNv
ZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsK
KyAgICBPcGVyYW5kIG1fb3BlcmFuZDsKIH07CiAKIHN0cnVjdCBMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZUtleUhhc2ggewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCmluZGV4IDJiNjlmMzZj
N2ZiZGExMDU1Nzg5ZGZmZGU2N2YzOTZmODZlMmI1MDMuLjcwMWMzMzA4OWI5NTZmNzk3ODZlYzg3
YWEyYzY5YThiYzA2NzA0NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKQEAgLTQy
LDcgKzQyLDcgQEAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBNZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlOjpmcm9tTGF6eU9wZXJhbmQoCiAgICAgcmVzdWx0Lm1fa2luZCA9IExhenlP
cGVyYW5kOwogICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLmNvZGVCbG9jayA9IGNvZGVCbG9jazsK
ICAgICByZXN1bHQudS5sYXp5T3BlcmFuZC5ieXRlY29kZU9mZnNldCA9IGtleS5ieXRlY29kZUlu
ZGV4KCk7Ci0gICAgcmVzdWx0LnUubGF6eU9wZXJhbmQub3BlcmFuZCA9IGtleS5vcGVyYW5kKCku
b2Zmc2V0KCk7CisgICAgcmVzdWx0LnUubGF6eU9wZXJhbmQub3BlcmFuZCA9IGtleS5vcGVyYW5k
KCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNTcsNyArNTcsNyBAQCB2b2lkIE1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmVtaXRSZXBvcnRWYWx1ZShDQ2FsbEhlbHBlcnMmIGpp
dCwgSlNWYWx1ZVJlZwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgTGF6eU9w
ZXJhbmQ6IHsKLSAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9w
ZXJhbmQuYnl0ZWNvZGVPZmZzZXQsIFZpcnR1YWxSZWdpc3Rlcih1LmxhenlPcGVyYW5kLm9wZXJh
bmQpKTsKKyAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJh
bmQuYnl0ZWNvZGVPZmZzZXQsIHUubGF6eU9wZXJhbmQub3BlcmFuZCk7CiAgICAgICAgIAogICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHUubGF6eU9wZXJhbmQuY29kZUJsb2NrLT5t
X2xvY2spOwogICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9CkBAIC05
MSw3ICs5MSw3IEBAIHZvaWQgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6cmVwb3J0VmFs
dWUoSlNWYWx1ZSB2YWx1ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBMYXp5T3BlcmFu
ZDogewotICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkodS5sYXp5T3BlcmFu
ZC5ieXRlY29kZU9mZnNldCwgVmlydHVhbFJlZ2lzdGVyKHUubGF6eU9wZXJhbmQub3BlcmFuZCkp
OworICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkodS5sYXp5T3BlcmFuZC5i
eXRlY29kZU9mZnNldCwgdS5sYXp5T3BlcmFuZC5vcGVyYW5kKTsKIAogICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKHUubGF6eU9wZXJhbmQuY29kZUJsb2NrLT5tX2xvY2spOwogICAg
ICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGUuaAppbmRleCA1N2I0YjE3NzJmMDRmYmRmMzM2ODUwNTQzNjU3YzE1ZDljNDFkYjRlLi5l
OGI2NWVhZDQ2ZTQ3NTA1MzVjZDBhOWRiZjgwYWUzOWIwYjRhMWNiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlLmgKQEAgLTEwNyw3ICsxMDcsNyBAQCBwcml2YXRlOgogICAgICAgICBzdHJ1Y3Qg
ewogICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2s7CiAgICAgICAgICAgICBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlT2Zmc2V0OwotICAgICAgICAgICAgaW50IG9wZXJhbmQ7CisgICAgICAg
ICAgICBPcGVyYW5kIG9wZXJhbmQ7CiAgICAgICAgIH0gbGF6eU9wZXJhbmQ7CiAgICAgfSB1Owog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKaW5kZXggZjI5ZmY5
Zjk3MzZhZWIzNzM0NTk0NDZkYzc0Y2QxMjAyNzU2MjU3Ni4uZDQ3YTY4ZjY0MDM4ZTNiMWRjNTU3
YTQ0ZDcwODUwNDAyNzQyMGJmZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL09wZXJhbmRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09w
ZXJhbmRzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNSwxMTEgKzM1LDIyNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IE9wZXJhbmRWYWx1ZVRyYWl0czsKIAotZW51bSBPcGVyYW5k
S2luZCB7IEFyZ3VtZW50T3BlcmFuZCwgTG9jYWxPcGVyYW5kIH07Citjb25zdGV4cHIgdW5zaWdu
ZWQgbWF4TnVtQ2hlY2twb2ludFRtcHMgPSA0OworCisvLyBBIE9wZXJhbmRLaW5kOjpUbXAgaXMg
b25lIHRoYXQgZXhpc3RzIGZvciBleGl0aW5nIHRvIGEgY2hlY2twb2ludCBidXQgZG9lcyBub3Qg
ZXhpc3QgYmV0d2VlbiBieXRlY29kZXMuCitlbnVtIGNsYXNzIE9wZXJhbmRLaW5kIHsgQXJndW1l
bnQsIExvY2FsLCBUbXAgfTsKKworY2xhc3MgT3BlcmFuZCB7CitwdWJsaWM6CisgICAgT3BlcmFu
ZCgpID0gZGVmYXVsdDsKKyAgICBPcGVyYW5kKGNvbnN0IE9wZXJhbmQmKSA9IGRlZmF1bHQ7CisK
KyAgICBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICA6IG1fa2luZChv
cGVyYW5kLmlzTG9jYWwoKSA/IE9wZXJhbmRLaW5kOjpMb2NhbCA6IE9wZXJhbmRLaW5kOjpBcmd1
bWVudCkKKyAgICAgICAgLCBtX29wZXJhbmQob3BlcmFuZC5vZmZzZXQoKSkKKyAgICB7IH0KKwor
ICAgIE9wZXJhbmQoT3BlcmFuZEtpbmQga2luZCwgaW50IG9wZXJhbmQpCisgICAgICAgIDogbV9r
aW5kKGtpbmQpCisgICAgICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCisgICAgeyAKKyAgICAgICAg
QVNTRVJUKGtpbmQgPT0gT3BlcmFuZEtpbmQ6OlRtcCB8fCBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFu
ZCkuaXNMb2NhbCgpID09IChraW5kID09IE9wZXJhbmRLaW5kOjpMb2NhbCkpOworICAgIH0KKyAg
ICBzdGF0aWMgT3BlcmFuZCB0bXAodWludDMyX3QgaW5kZXgpIHsgcmV0dXJuIE9wZXJhbmQoT3Bl
cmFuZEtpbmQ6OlRtcCwgaW5kZXgpOyB9CisKKyAgICBPcGVyYW5kS2luZCBraW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9raW5kOyB9CisgICAgaW50IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVy
YW5kOyB9CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcigpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQobV9raW5kICE9IE9wZXJhbmRLaW5kOjpUbXApOworICAgICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG1fb3BlcmFuZCk7CisgICAgfQorICAgIHVpbnQ2NF90IGFz
Qml0cygpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oKnRoaXMpOyB9Cisg
ICAgc3RhdGljIE9wZXJhbmQgZnJvbUJpdHModWludDY0X3QgdmFsdWUpOworCisgICAgYm9vbCBp
c1RtcCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBPcGVyYW5kS2luZDo6VG1wOyB9CisgICAg
Ym9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IE9wZXJhbmRLaW5kOjpB
cmd1bWVudDsgfQorICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBP
cGVyYW5kS2luZDo6TG9jYWwgJiYgdmlydHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgpOyB9CisgICAg
Ym9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBPcGVyYW5kS2luZDo6VG1w
ICYmIHZpcnR1YWxSZWdpc3RlcigpLmlzSGVhZGVyKCk7IH0KKyAgICBib29sIGlzQ29uc3RhbnQo
KSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gT3BlcmFuZEtpbmQ6OlRtcCAmJiB2aXJ0dWFsUmVn
aXN0ZXIoKS5pc0NvbnN0YW50KCk7IH0KKworICAgIGludCB0b0FyZ3VtZW50KCkgY29uc3QgeyBB
U1NFUlQoaXNBcmd1bWVudCgpKTsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpLnRvQXJndW1lbnQo
KTsgfQorICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNMb2NhbCgpKTsgcmV0dXJu
IHZpcnR1YWxSZWdpc3RlcigpLnRvTG9jYWwoKTsgfQorCisgICAgaW5saW5lIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0OworCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPcGVyYW5kJikg
Y29uc3Q7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBPcGVyYW5kS2luZCBtX2tpbmQgeyBPcGVyYW5kS2luZDo6QXJndW1lbnQgfTsKKyAgICBp
bnQgbV9vcGVyYW5kIHsgVmlydHVhbFJlZ2lzdGVyOjppbnZhbGlkVmlydHVhbFJlZ2lzdGVyIH07
Cit9OworCitBTFdBWVNfSU5MSU5FIGJvb2wgT3BlcmFuZDo6b3BlcmF0b3I9PShjb25zdCBPcGVy
YW5kJiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoa2luZCgpICE9IG90aGVyLmtpbmQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpc1RtcCgpKQorICAgICAgICByZXR1cm4gdmFs
dWUoKSA9PSBvdGhlci52YWx1ZSgpOworICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXIoKSA9PSBv
dGhlci52aXJ0dWFsUmVnaXN0ZXIoKTsKK30KKworaW5saW5lIGJvb2wgT3BlcmFuZDo6aXNWYWxp
ZCgpIGNvbnN0Cit7CisgICAgaWYgKGlzVG1wKCkpCisgICAgICAgIHJldHVybiB2YWx1ZSgpID49
IDA7CisgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpLmlzVmFsaWQoKTsKK30KKworaW5saW5l
IE9wZXJhbmQgT3BlcmFuZDo6ZnJvbUJpdHModWludDY0X3QgdmFsdWUpCit7CisgICAgT3BlcmFu
ZCByZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8T3BlcmFuZD4odmFsdWUpOworICAgIEFTU0VSVChyZXN1
bHQuaXNWYWxpZCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWNfYXNzZXJ0KHNp
emVvZihPcGVyYW5kKSA9PSBzaXplb2YodWludDY0X3QpLCAiT3BlcmFuZDo6YXNCaXRzKCkgcmVs
aWVzIG9uIHRoaXMuIik7CiAKIGVudW0gT3BlcmFuZHNMaWtlVGFnIHsgT3BlcmFuZHNMaWtlIH07
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjbGFzcyBPcGVyYW5kcyB7CiBwdWJsaWM6Ci0gICAg
T3BlcmFuZHMoKQotICAgICAgICA6IG1fbnVtQXJndW1lbnRzKDApIHsgfQotICAgIAotICAgIGV4
cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMpCisg
ICAgdXNpbmcgU3RvcmFnZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBi
b29sPiwgRmFzdEJpdFZlY3RvciwgVmVjdG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93Pj47
CisgICAgdXNpbmcgUmVmVHlwZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxU
LCBib29sPiwgRmFzdEJpdFJlZmVyZW5jZSwgVCY+OworICAgIHVzaW5nIENvbnN0UmVmVHlwZSA9
IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgYm9vbCwgY29uc3Qg
VCY+OworCisgICAgT3BlcmFuZHMoKSA9IGRlZmF1bHQ7CisKKyAgICBleHBsaWNpdCBPcGVyYW5k
cyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcykK
ICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCisgICAgICAgICwgbV9udW1M
b2NhbHMobnVtTG9jYWxzKQogICAgIHsKLSAgICAgICAgaWYgKFdURjo6VmVjdG9yVHJhaXRzPFQ+
OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7Ci0gICAgICAgICAgICBtX3ZhbHVlcy5yZXNpemUobnVt
QXJndW1lbnRzICsgbnVtTG9jYWxzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1f
dmFsdWVzLmZpbGwoVCgpLCBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMpOwotICAgICAgICB9Cisg
ICAgICAgIHNpemVfdCBzaXplID0gbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtVG1wczsK
KyAgICAgICAgbV92YWx1ZXMuZ3JvdyhzaXplKTsKKyAgICAgICAgaWYgKCFXVEY6OlZlY3RvclRy
YWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikKKyAgICAgICAgICAgIG1fdmFsdWVzLmZpbGwo
VCgpKTsKICAgICB9CiAKLSAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRz
LCBzaXplX3QgbnVtTG9jYWxzLCBjb25zdCBUJiBpbml0aWFsVmFsdWUpCisgICAgZXhwbGljaXQg
T3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51
bVRtcHMsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhu
dW1Bcmd1bWVudHMpCisgICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQogICAgIHsKLSAg
ICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUsIG51bUFyZ3VtZW50cyArIG51bUxvY2Fs
cyk7CisgICAgICAgIG1fdmFsdWVzLmdyb3cobnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVt
VG1wcyk7CisgICAgICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKICAgICB9CiAgICAg
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBleHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5k
c0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhlcikKKyAgICBleHBsaWNpdCBPcGVyYW5k
cyhPcGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhlciwgY29uc3QgVCYgaW5p
dGlhbFZhbHVlID0gVCgpKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG90aGVyLm51bWJlck9m
QXJndW1lbnRzKCkpCisgICAgICAgICwgbV9udW1Mb2NhbHMob3RoZXIubnVtYmVyT2ZMb2NhbHMo
KSkKICAgICB7Ci0gICAgICAgIG1fdmFsdWVzLmZpbGwoVCgpLCBvdGhlci5udW1iZXJPZkFyZ3Vt
ZW50cygpICsgb3RoZXIubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIG1fdmFsdWVzLmdyb3co
b3RoZXIuc2l6ZSgpKTsKKyAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAg
IH0KLSAgICAKKwogICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJu
IG1fbnVtQXJndW1lbnRzOyB9Ci0gICAgc2l6ZV90IG51bWJlck9mTG9jYWxzKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbV9udW1Bcmd1bWVudHM7IH0KLSAgICAKKyAgICBzaXpl
X3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQorICAgIHNp
emVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBudW1i
ZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorCisgICAgc2l6ZV90IHRtcElu
ZGV4KHNpemVfdCBpZHgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVy
T2ZUbXBzKCkpOworICAgICAgICByZXR1cm4gaWR4ICsgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51
bWJlck9mTG9jYWxzKCk7CisgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBp
ZHgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoaWR4IDwgbV9udW1Bcmd1bWVudHMpOwor
ICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgICAgIHJldHVy
biBpZHg7CiAgICAgfQogICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVfdCBpZHgpIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9udW1Bcmd1bWVudHMgKyBpZHg7CisgICAgICAg
IEFTU0VSVChpZHggPCBudW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgcmV0dXJuIG51bWJlck9m
QXJndW1lbnRzKCkgKyBpZHg7CiAgICAgfQorCisgICAgUmVmVHlwZSB0bXAoc2l6ZV90IGlkeCkg
eyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KKyAgICBDb25zdFJlZlR5cGUgdG1w
KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW3RtcEluZGV4KGlkeCldOyB9CiAg
ICAgCi0gICAgVCYgYXJndW1lbnQoc2l6ZV90IGlkeCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOwotICAgIH0KLSAgICBjb25zdCBUJiBhcmd1bWVu
dChzaXplX3QgaWR4KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWVzW2FyZ3Vt
ZW50SW5kZXgoaWR4KV07Ci0gICAgfQorICAgIFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkg
eyByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRleChpZHgpXTsgfQorICAgIENvbnN0UmVmVHlw
ZSBhcmd1bWVudChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1thcmd1bWVudElu
ZGV4KGlkeCldOyB9CiAgICAgCi0gICAgVCYgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92
YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQotICAgIGNvbnN0IFQmIGxvY2FsKHNpemVfdCBpZHgp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KKyAgICBSZWZUeXBl
IGxvY2FsKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07IH0K
KyAgICBDb25zdFJlZlR5cGUgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZXNbbG9jYWxJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlm
IChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCisgICAgICAgIHN3aXRjaCAob3BlcmFu
ZEtpbmQpIHsKKyAgICAgICAgY2FzZSBPcGVyYW5kS2luZDo6VG1wOgorICAgICAgICAgICAgcmV0
dXJuIG51bWJlck9mVG1wcygpOworICAgICAgICBjYXNlIE9wZXJhbmRLaW5kOjpBcmd1bWVudDoK
ICAgICAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpOwotICAgICAgICByZXR1cm4g
bnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgY2FzZSBPcGVyYW5kS2luZDo6TG9jYWw6CisgICAg
ICAgICAgICByZXR1cm4gbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgfQorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAg
dGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+Ci0gICAgVCYgYXRGb3Ioc2l6ZV90IGlk
eCkKKyAgICBSZWZUeXBlIGF0Rm9yKHNpemVfdCBpZHgpCiAgICAgewotICAgICAgICBpZiAob3Bl
cmFuZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kKQorICAgICAgICBzd2l0Y2ggKG9wZXJhbmRLaW5k
KSB7CisgICAgICAgIGNhc2UgT3BlcmFuZEtpbmQ6OlRtcDoKKyAgICAgICAgICAgIHJldHVybiB0
bXAoaWR4KTsKKyAgICAgICAgY2FzZSBPcGVyYW5kS2luZDo6QXJndW1lbnQ6CiAgICAgICAgICAg
ICByZXR1cm4gYXJndW1lbnQoaWR4KTsKLSAgICAgICAgcmV0dXJuIGxvY2FsKGlkeCk7CisgICAg
ICAgIGNhc2UgT3BlcmFuZEtpbmQ6OkxvY2FsOgorICAgICAgICAgICAgcmV0dXJuIGxvY2FsKGlk
eCk7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIHRtcCgwKTsKICAgICB9CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3Bl
cmFuZEtpbmQ+Ci0gICAgY29uc3QgVCYgYXRGb3Ioc2l6ZV90IGlkeCkgY29uc3QKKyAgICBDb25z
dFJlZlR5cGUgYXRGb3Ioc2l6ZV90IGlkeCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVy
YW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCisgICAgICAgIHN3aXRjaCAob3BlcmFuZEtpbmQp
IHsKKyAgICAgICAgY2FzZSBPcGVyYW5kS2luZDo6VG1wOgorICAgICAgICAgICAgcmV0dXJuIHRt
cChpZHgpOworICAgICAgICBjYXNlIE9wZXJhbmRLaW5kOjpBcmd1bWVudDoKICAgICAgICAgICAg
IHJldHVybiBhcmd1bWVudChpZHgpOwotICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAg
ICAgY2FzZSBPcGVyYW5kS2luZDo6TG9jYWw6CisgICAgICAgICAgICByZXR1cm4gbG9jYWwoaWR4
KTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gdG1wKDApOwogICAgIH0KLSAgICAKLSAgICB2b2lkIGVuc3VyZUxvY2Fscyhz
aXplX3Qgc2l6ZSkKKworICAgIHZvaWQgZW5zdXJlTG9jYWxzKHNpemVfdCBzaXplLCBjb25zdCBU
JiBlbnN1cmVkVmFsdWUgPSBUKCkpCiAgICAgewotICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1f
dmFsdWVzLnNpemUoKTsKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBtX251bUFyZ3VtZW50cyAr
IHNpemU7Ci0gICAgICAgIGlmIChuZXdTaXplIDw9IG9sZFNpemUpCisgICAgICAgIGlmIChzaXpl
IDw9IG51bWJlck9mTG9jYWxzKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAgICAgc2l6
ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXpl
OworICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAg
ICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92YWx1ZXMu
Z3JvdyhuZXdTaXplKTsKLSAgICAgICAgaWYgKCFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJ
bml0aWFsaXphdGlvbikgewotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkg
PCBtX3ZhbHVlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBtX3ZhbHVlc1tpXSA9IFQo
KTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvbGROdW1UbXBzOyArK2kpCisgICAg
ICAgICAgICBtX3ZhbHVlc1tuZXdTaXplIC0gMSAtIGldID0gbV92YWx1ZXNbdG1wSW5kZXgob2xk
TnVtVG1wcyAtIDEgLSBpKV07CisKKyAgICAgICAgbV9udW1Mb2NhbHMgPSBzaXplOworICAgICAg
ICBpZiAoZW5zdXJlZFZhbHVlICE9IFQoKSB8fCAhV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRz
SW5pdGlhbGl6YXRpb24pIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZSAtIG9sZE51bUxvY2FsczsgKytpKQorICAgICAgICAgICAgICAgIG1fdmFsdWVzW2xvY2FsSW5k
ZXgob2xkTnVtTG9jYWxzICsgaSldID0gZW5zdXJlZFZhbHVlOwogICAgICAgICB9CiAgICAgfQog
Ci0gICAgdm9pZCBlbnN1cmVMb2NhbHMoc2l6ZV90IHNpemUsIGNvbnN0IFQmIGVuc3VyZWRWYWx1
ZSkKKyAgICB2b2lkIGVuc3VyZVRtcHMoc2l6ZV90IHNpemUsIGNvbnN0IFQmIGVuc3VyZWRWYWx1
ZSA9IFQoKSkKICAgICB7Ci0gICAgICAgIHNpemVfdCBvbGRTaXplID0gbV92YWx1ZXMuc2l6ZSgp
OwotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG1fbnVtQXJndW1lbnRzICsgc2l6ZTsKLSAgICAg
ICAgaWYgKG5ld1NpemUgPD0gb2xkU2l6ZSkKKyAgICAgICAgaWYgKHNpemUgPD0gbnVtYmVyT2ZU
bXBzKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBt
X3ZhbHVlcy5zaXplKCk7CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVu
dHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBzaXplOwogICAgICAgICBtX3ZhbHVlcy5ncm93KG5l
d1NpemUpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG1fdmFsdWVzLnNp
emUoKTsgKytpKQotICAgICAgICAgICAgbV92YWx1ZXNbaV0gPSBlbnN1cmVkVmFsdWU7CisKKyAg
ICAgICAgaWYgKGVuc3VyZWRWYWx1ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+Ojpu
ZWVkc0luaXRpYWxpemF0aW9uKSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6
ZTsgaSA8IG5ld1NpemU7ICsraSkKKyAgICAgICAgICAgICAgICBtX3ZhbHVlc1tpXSA9IGVuc3Vy
ZWRWYWx1ZTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIHNldExvY2FsKHNpemVf
dCBpZHgsIGNvbnN0IFQmIHZhbHVlKQpAQCAtMTY0LDg0ICsyODAsNzYgQEAgcHVibGljOgogICAg
ICAgICBBU1NFUlQoaWR4ID49IG51bWJlck9mTG9jYWxzKCkgfHwgbG9jYWwoaWR4KSA9PSBUKCkp
OwogICAgICAgICBzZXRMb2NhbChpZHgsIHZhbHVlKTsKICAgICB9Ci0gICAgCi0gICAgc2l6ZV90
IG9wZXJhbmRJbmRleChpbnQgb3BlcmFuZCkgY29uc3QKKworICAgIFJlZlR5cGUgZ2V0Rm9yT3Bl
cmFuZEluZGV4KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAg
Q29uc3RSZWZUeXBlIGdldEZvck9wZXJhbmRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+Z2V0Rm9yT3BlcmFuZEluZGV4KGluZGV4
KTsgfQorCisgICAgc2l6ZV90IG9wZXJhbmRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKLSAg
ICAgICAgICAgIHJldHVybiBhcmd1bWVudEluZGV4KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50
b0FyZ3VtZW50KCkpOwotICAgICAgICByZXR1cm4gbG9jYWxJbmRleChWaXJ0dWFsUmVnaXN0ZXIo
b3BlcmFuZCkudG9Mb2NhbCgpKTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50b0FyZ3VtZW50KCkpOwor
ICAgICAgICByZXR1cm4gbG9jYWxJbmRleChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogICAg
IAotICAgIHNpemVfdCBvcGVyYW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
cikgY29uc3QKKyAgICBzaXplX3Qgb3BlcmFuZEluZGV4KE9wZXJhbmQgb3ApIGNvbnN0CiAgICAg
ewotICAgICAgICByZXR1cm4gb3BlcmFuZEluZGV4KHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSk7
CisgICAgICAgIGlmICghb3AuaXNUbXAoKSkKKyAgICAgICAgICAgIHJldHVybiBvcGVyYW5kSW5k
ZXgob3AudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICByZXR1cm4gdG1wSW5kZXgob3AudmFs
dWUoKSk7CiAgICAgfQogICAgIAotICAgIFQmIG9wZXJhbmQoaW50IG9wZXJhbmQpCisgICAgUmVm
VHlwZSBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgaWYg
KG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQotICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50
KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0FyZ3VtZW50KCkpOwotICAgICAgICByZXR1cm4g
bG9jYWwoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKSk7CisgICAgICAgIGlmIChv
cGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChvcGVyYW5k
LnRvQXJndW1lbnQoKSk7CisgICAgICAgIHJldHVybiBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7
CiAgICAgfQogCi0gICAgVCYgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
KQorICAgIFJlZlR5cGUgb3BlcmFuZChPcGVyYW5kIG9wKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IG9wZXJhbmQodmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpKTsKKyAgICAgICAgaWYgKCFvcC5pc1Rt
cCgpKQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhbmQob3AudmlydHVhbFJlZ2lzdGVyKCkpOwor
ICAgICAgICByZXR1cm4gdG1wKG9wLnZhbHVlKCkpOwogICAgIH0KIAotICAgIGNvbnN0IFQmIG9w
ZXJhbmQoaW50IG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29uc3QgVCY+KGNv
bnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKSk7IH0KLSAgICBjb25z
dCBUJiBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdCB7IHJldHVybiBjb25z
dF9jYXN0PGNvbnN0IFQmPihjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcyktPm9wZXJhbmQob3Bl
cmFuZCkpOyB9CisgICAgQ29uc3RSZWZUeXBlIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChv
cGVyYW5kKTsgfQorICAgIENvbnN0UmVmVHlwZSBvcGVyYW5kKE9wZXJhbmQgb3BlcmFuZCkgY29u
c3QgeyByZXR1cm4gY29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQp
OyB9CiAgICAgCi0gICAgYm9vbCBoYXNPcGVyYW5kKGludCBvcGVyYW5kKSBjb25zdAorICAgIGJv
b2wgaGFzT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKKyAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxzaXplX3Q+KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCkpIDwg
bnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3Bl
cmFuZC50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9Ci0gICAgYm9vbCBoYXNP
cGVyYW5kKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CisgICAgYm9vbCBoYXNPcGVyYW5kKE9w
ZXJhbmQgb3ApIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gaGFzT3BlcmFuZChyZWcub2Zm
c2V0KCkpOworICAgICAgICBpZiAob3AuaXNUbXAoKSkgeworICAgICAgICAgICAgQVNTRVJUKG9w
LnZhbHVlKCkgPj0gMCk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90Pihv
cC52YWx1ZSgpKSA8IG51bWJlck9mVG1wcygpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBo
YXNPcGVyYW5kKG9wLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBz
ZXRPcGVyYW5kKGludCBvcGVyYW5kLCBjb25zdCBUJiB2YWx1ZSkKKyAgICB2b2lkIHNldE9wZXJh
bmQoT3BlcmFuZCBvcGVyYW5kLCBjb25zdCBUJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIHRoaXMt
Pm9wZXJhbmQob3BlcmFuZCkgPSB2YWx1ZTsKICAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRPcGVy
YW5kKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIGNvbnN0IFQmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgc2V0T3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCksIHZhbHVlKTsK
LSAgICB9CiAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUo
KTsgfQotICAgIGNvbnN0IFQmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZXNbaW5kZXhdOyB9Ci0gICAgVCYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tp
bmRleF07IH0KLSAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gYXQoaW5kZXgpOyB9Ci0gICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIHsgcmV0
dXJuIGF0KGluZGV4KTsgfQotCi0gICAgYm9vbCBpc0FyZ3VtZW50KHNpemVfdCBpbmRleCkgY29u
c3QgeyByZXR1cm4gaW5kZXggPCBtX251bUFyZ3VtZW50czsgfQotICAgIGJvb2wgaXNMb2NhbChz
aXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuICFpc0FyZ3VtZW50KGluZGV4KTsgfQotICAgIGlu
dCBvcGVyYW5kRm9ySW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAorICAgIENvbnN0UmVmVHlwZSBh
dChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIFJl
ZlR5cGUgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBD
b25zdFJlZlR5cGUgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGlu
ZGV4KTsgfQorICAgIFJlZlR5cGUgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGF0
KGluZGV4KTsgfQorCisgICAgT3BlcmFuZCBvcGVyYW5kRm9ySW5kZXgoc2l6ZV90IGluZGV4KSBj
b25zdAogICAgIHsKICAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSkKLSAg
ICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCkub2Zmc2V0
KCk7Ci0gICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG51bWJl
ck9mQXJndW1lbnRzKCkpLm9mZnNldCgpOwotICAgIH0KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZ2lzdGVyRm9ySW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kRm9ySW5kZXgoaW5kZXgpKTsKKyAgICAgICAg
ICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCk7CisgICAgICAgIGVs
c2UgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpCisg
ICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJP
ZkFyZ3VtZW50cygpKTsKKyAgICAgICAgcmV0dXJuIE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1i
ZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkpOwogICAgIH0KLSAgICAKLSAgICB2
b2lkIHNldE9wZXJhbmRGaXJzdFRpbWUoaW50IG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7Ci0gICAgICAgICAg
ICBzZXRBcmd1bWVudEZpcnN0VGltZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Bcmd1bWVu
dCgpLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIHNldExvY2FsRmlyc3RUaW1lKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2Fs
KCksIHZhbHVlKTsKLSAgICB9Ci0gICAgCisKICAgICB2b2lkIGZpbGwoVCB2YWx1ZSkKICAgICB7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YWx1ZXMuc2l6ZSgpOyArK2kpCkBA
IC0yNTcsNiArMzY1LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG51bWJlck9m
QXJndW1lbnRzKCkgPT0gb3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgICAgIEFTU0VS
VChudW1iZXJPZkxvY2FscygpID09IG90aGVyLm51bWJlck9mTG9jYWxzKCkpOworICAgICAgICBB
U1NFUlQobnVtYmVyT2ZUbXBzKCkgPT0gb3RoZXIubnVtYmVyT2ZUbXBzKCkpOwogICAgICAgICAK
ICAgICAgICAgcmV0dXJuIG1fdmFsdWVzID09IG90aGVyLm1fdmFsdWVzOwogICAgIH0KQEAgLTI2
NSw5ICszNzQsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdDsKICAgICAKIHByaXZhdGU6Ci0gICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9m
IG1fdmFsdWVzIGFyZSBhcmd1bWVudHMsIHRoZSByZXN0IGFyZSBsb2NhbHMuCi0gICAgVmVjdG9y
PFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3ZhbHVlczsKLSAgICB1bnNpZ25lZCBtX251
bUFyZ3VtZW50czsKKyAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1ZXMg
YXJlIGFyZ3VtZW50cywgdGhlIG5leHQgbV9udW1Mb2NhbHMgYXJlIGxvY2FscywgYW5kIHRoZSBy
ZXN0IGFyZSB0bXBzLgorICAgIFN0b3JhZ2UgbV92YWx1ZXM7CisgICAgdW5zaWduZWQgbV9udW1B
cmd1bWVudHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1Mb2NhbHMgeyAwIH07CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PcGVyYW5kc0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
cGVyYW5kc0lubGluZXMuaAppbmRleCA2NWZlZGRhMDczMGE4MzkxZjgzMTU2M2RiZGViODE2YWY5
MjU2NmZkLi4wYjFjYzFmMmQxOTdhZDA4MzY1YThmNzg1NjFmZGY2N2E3ZDllZGRkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCkBAIC0z
MCw2ICszMCwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAoraW5saW5lIHZvaWQgT3BlcmFuZDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmIChpc1RtcCgpKQorICAgICAg
ICBvdXQucHJpbnQoInRtcCIsIHZhbHVlKCkpOworICAgIGVsc2UKKyAgICAgICAgb3V0LnByaW50
KHZpcnR1YWxSZWdpc3RlcigpKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQgT3Bl
cmFuZHM8VD46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNv
bnRleHQpIGNvbnN0CiB7CkBAIC00NCw2ICs1MiwxMSBAQCB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgImxvYyIsIGxv
Y2FsSW5kZXgsICI6IiwgaW5Db250ZXh0KGxvY2FsKGxvY2FsSW5kZXgpLCBjb250ZXh0KSk7CiAg
ICAgfQorICAgIGZvciAoc2l6ZV90IHRtcEluZGV4ID0gMDsgdG1wSW5kZXggPCBudW1iZXJPZlRt
cHMoKTsgKyt0bXBJbmRleCkgeworICAgICAgICBpZiAoIXRtcCh0bXBJbmRleCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwgdG1wSW5kZXgs
ICI6IiwgaW5Db250ZXh0KHRtcCh0bXBJbmRleCksIGNvbnRleHQpKTsKKyAgICB9CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC02MCw2ICs3MywxMSBAQCB2b2lkIE9wZXJhbmRzPFQ+Ojpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCAibG9jIiwgbG9jYWxJbmRleCwgIjoiLCBsb2NhbChsb2NhbElu
ZGV4KSk7CiAgICAgfQorICAgIGZvciAoc2l6ZV90IHRtcEluZGV4ID0gMDsgdG1wSW5kZXggPCBu
dW1iZXJPZlRtcHMoKTsgKyt0bXBJbmRleCkgeworICAgICAgICBpZiAoIXRtcCh0bXBJbmRleCkp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwg
dG1wSW5kZXgsICI6IiwgdG1wKHRtcEluZGV4KSk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suY3BwCmluZGV4IDIwOTkzZTIxMmQyY2Q2OGI0MWFmY2JkMGRmYjY4NjAzMmQxY2Rk
YjMuLmRkYjQxMjExOTFmYWY3YjQyMTUzMWU4ZTJlMDUyMDI1YTYxMjdlMzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcApA
QCAtNzIsNiArNzIsNyBAQCBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2soVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZQogICAgICwgbV9jb2RlVHlw
ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZVR5cGUpKQogICAgICwgbV9kaWRPcHRpbWl6ZShz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oTWl4ZWRUcmlTdGF0ZSkpCiAgICAgLCBtX2FnZSgwKQorICAg
ICwgbV9oYXNDaGVja3BvaW50cyhmYWxzZSkKICAgICAsIG1fcGFyc2VNb2RlKGluZm8ucGFyc2VN
b2RlKCkpCiAgICAgLCBtX2NvZGVHZW5lcmF0aW9uTW9kZShjb2RlR2VuZXJhdGlvbk1vZGUpCiAg
ICAgLCBtX21ldGFkYXRhKFVubGlua2VkTWV0YWRhdGFUYWJsZTo6Y3JlYXRlKCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCmluZGV4
IDNkOWZiM2M1N2Q1ZjNkNGUyYWVkY2IxZTM1NjdhNzRiOGM3MTNjMmIuLjMxOTIxNzA5YWM4MzA2
YmY0ZGU0ZDk3Mzk5MmUxNGEwZDAzMGRhZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCkBAIC0xNDEsNiArMTQxLDkgQEAgcHVi
bGljOgogICAgIGJvb2wgaGFzRXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25J
bmZvLnNpemUoKTsgfQogICAgIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiYgZXhw
cmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25JbmZvOyB9CiAKKyAgICBib29sIGhh
c0NoZWNrcG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDaGVja3BvaW50czsgfQorICAgIHZv
aWQgc2V0SGFzQ2hlY2twb2ludHMoKSB7IG1faGFzQ2hlY2twb2ludHMgPSB0cnVlOyB9CisKICAg
ICAvLyBTcGVjaWFsIHJlZ2lzdGVycwogICAgIHZvaWQgc2V0VGhpc1JlZ2lzdGVyKFZpcnR1YWxS
ZWdpc3RlciB0aGlzUmVnaXN0ZXIpIHsgbV90aGlzUmVnaXN0ZXIgPSB0aGlzUmVnaXN0ZXI7IH0K
ICAgICB2b2lkIHNldFNjb3BlUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIp
IHsgbV9zY29wZVJlZ2lzdGVyID0gc2NvcGVSZWdpc3RlcjsgfQpAQCAtMTk4LDkgKzIwMSw4IEBA
IHB1YmxpYzoKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+
PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9Ci0g
ICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKGludCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4XTsgfQotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc0NvbnN0YW50UmVn
aXN0ZXJJbmRleChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluZGV4ID49IEZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4OyB9Ci0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50
KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5nZXQoKTsgfQorICAgIGNvbnN0IFdyaXRlQmFycmll
cjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7
IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KKyAg
ICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykg
Y29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCld
LmdldCgpOyB9CiAgICAgY29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNv
bnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRzU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkNvbnN0YW50
SWRlbnRpZmllclNldHMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+
bV9jb25zdGFudElkZW50aWZpZXJTZXRzLnNpemUoKSA6IDA7IH0KQEAgLTQyNiw2ICs0MjgsNyBA
QCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fZGlkT3B0aW1pemUgOiAyOwogICAgIHVuc2lnbmVk
IG1fYWdlIDogMzsKICAgICBzdGF0aWNfYXNzZXJ0KCgoMVUgPDwgMykgLSAxKSA+PSBtYXhBZ2Up
OworICAgIGJvb2wgbV9oYXNDaGVja3BvaW50cyA6IDE7CiBwdWJsaWM6CiAgICAgQ29uY3VycmVu
dEpTTG9jayBtX2xvY2s7CiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZhbHVlUHJvZmlsZS5oCmluZGV4IGRmYTA3NzY0YTZhYjAyMTlkNzhhZDdhYmVmZWE2YTNi
N2M4MTdiZWIuLjkwZjkzZGQxYzkxMTFjZTNiY2FmYjBhYjNiMDNkOGI3ZGJiZjlmZGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKQEAgLTE3Niwy
OCArMTc2LDI4IEBAIGlubGluZSBCeXRlY29kZUluZGV4IGdldFJhcmVDYXNlUHJvZmlsZUJ5dGVj
b2RlSW5kZXgoUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByCiAgICAgcmV0dXJuIHJhcmVDYXNl
UHJvZmlsZS0+bV9ieXRlY29kZUluZGV4OwogfQogCi1zdHJ1Y3QgVmFsdWVQcm9maWxlQW5kT3Bl
cmFuZCA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgewotICAgIGludCBtX29wZXJhbmQ7CitzdHJ1Y3Qg
VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmlsZSB7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKIH07CiAKLXN0cnVjdCBWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kQnVmZmVyIHsKK3N0cnVjdCBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJC
dWZmZXIgewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKIAotICAgIFZhbHVl
UHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIodW5zaWduZWQgc2l6ZSkKKyAgICBWYWx1ZVByb2ZpbGVB
bmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIodW5zaWduZWQgc2l6ZSkKICAgICAgICAgOiBtX3NpemUo
c2l6ZSkKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBWYWx1ZVByb2ZpbGUgaGFzIG1vcmUgc3R1
ZmYgdGhhbiB3ZSBuZWVkLiBXZSBjb3VsZCBvcHRpbWl6ZSB0aGVzZSB2YWx1ZSBwcm9maWxlcwog
ICAgICAgICAvLyB0byBiZSBtb3JlIHNwYWNlIGVmZmljaWVudC4KICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTQxMwotICAgICAgICBtX2J1ZmZl
ciA9IE1hbGxvY1B0cjxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kLCBWTU1hbGxvYz46Om1hbGxvYyht
X3NpemUgKiBzaXplb2YoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCkpOworICAgICAgICBtX2J1ZmZl
ciA9IE1hbGxvY1B0cjxWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIsIFZNTWFsbG9jPjo6
bWFsbG9jKG1fc2l6ZSAqIHNpemVvZihWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIpKTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKQotICAgICAgICAg
ICAgbmV3ICgmbV9idWZmZXIuZ2V0KClbaV0pIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQoKTsKKyAg
ICAgICAgICAgIG5ldyAoJm1fYnVmZmVyLmdldCgpW2ldKSBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFs
UmVnaXN0ZXIoKTsKICAgICB9CiAKLSAgICB+VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcigp
CisgICAgflZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcigpCiAgICAgewogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zaXplOyArK2kpCi0gICAgICAgICAgICBt
X2J1ZmZlci5nZXQoKVtpXS5+VmFsdWVQcm9maWxlQW5kT3BlcmFuZCgpOworICAgICAgICAgICAg
bV9idWZmZXIuZ2V0KClbaV0uflZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlcigpOwogICAg
IH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KQEAgLTIwOCw3ICsyMDgsNyBA
QCBzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciB7CiAgICAgfQogCiAgICAgdW5z
aWduZWQgbV9zaXplOwotICAgIE1hbGxvY1B0cjxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kLCBWTU1h
bGxvYz4gbV9idWZmZXI7CisgICAgTWFsbG9jUHRyPFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdp
c3RlciwgVk1NYWxsb2M+IG1fYnVmZmVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5jcHAKaW5kZXgg
YzVjYTRkZTFlNGIzNjExMjE0YzM1YWIxZWEzMmRjMWNiZjQ1ZjNlOS4uYjEzOTQ3ZjBlMThkZjA2
M2E4OGIzZjIyN2NkY2RiZmVmZmVkYzMwOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcApAQCAtMzUsMjIgKzM1LDIyIEBAIEpTVmFsdWUg
VmFsdWVSZWNvdmVyeTo6cmVjb3ZlcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkgY29uc3QKIHsKICAg
ICBzd2l0Y2ggKHRlY2huaXF1ZSgpKSB7CiAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6Ci0g
ICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLmpz
VmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSku
anNWYWx1ZSgpOwogICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIHJl
dHVybiBqc051bWJlcihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVu
Ym94ZWRJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0
dWFsUmVnaXN0ZXIoKSkudW5ib3hlZEludDMyKCkpOwogICAgIGNhc2UgSW50NTJEaXNwbGFjZWRJ
bkpTU3RhY2s6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihjYWxsRnJhbWUtPnIodmlydHVhbFJl
Z2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94ZWRJbnQ1MigpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVt
YmVyKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZEludDUyKCkpOwogICAg
IGNhc2UgU3RyaWN0SW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIHJldHVybiBqc051
bWJlcihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94ZWRTdHJp
Y3RJbnQ1MigpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0dWFs
UmVnaXN0ZXIoKSkudW5ib3hlZFN0cmljdEludDUyKCkpOwogICAgIGNhc2UgRG91YmxlRGlzcGxh
Y2VkSW5KU1N0YWNrOgotICAgICAgICByZXR1cm4ganNOdW1iZXIocHVyaWZ5TmFOKGNhbGxGcmFt
ZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZERvdWJsZSgpKSk7CisgICAg
ICAgIHJldHVybiBqc051bWJlcihwdXJpZnlOYU4oY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3Rl
cigpKS51bmJveGVkRG91YmxlKCkpKTsKICAgICBjYXNlIENlbGxEaXNwbGFjZWRJbkpTU3RhY2s6
Ci0gICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkp
LnVuYm94ZWRDZWxsKCk7CisgICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lz
dGVyKCkpLnVuYm94ZWRDZWxsKCk7CiAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5KU1N0YWNr
OgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVh
bFJlZ2lzdGVyKCkub2Zmc2V0KCkpLmpzVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIGNhbGxGcmFt
ZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkuanNWYWx1ZSgpOwogI2Vsc2UKLSAgICAgICAgcmV0dXJu
IGpzQm9vbGVhbihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94
ZWRCb29sZWFuKCkpOworICAgICAgICByZXR1cm4ganNCb29sZWFuKGNhbGxGcmFtZS0+cih2aXJ0
dWFsUmVnaXN0ZXIoKSkudW5ib3hlZEJvb2xlYW4oKSk7CiAjZW5kaWYKICAgICBjYXNlIENvbnN0
YW50OgogICAgICAgICByZXR1cm4gY29uc3RhbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCmluZGV4IGQ4ZjE4YzNmZTg1NTk0ZjMyYTI5M2Fm
ZDg5MDkyMjM2MTM2MmVhNjMuLjVlNDNiYzcyYmJjYzRmZjk3YTY4ZjgzZGE4MzA5NGU1OGRhM2Iz
MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292
ZXJ5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3Zlcnku
aApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmly
dHVhbFJlZ2lzdGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJl
Z2lzdGVyLmgKaW5kZXggMzYxOTUyOTQyZDJiODZiYWIxMmY2Y2NjN2NjMWJhMDIxZjVhZDA0OC4u
ZmQxNzAwNzE3YzNiZmYzYmFmMGMzYjAwMzE3NmZlNjY1OTI0ZGY0YiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaApAQCAtMzEsMTIgKzMx
LDEyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgYm9vbCBvcGVyYW5kSXNMb2NhbChp
bnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3RlcklzTG9jYWwoaW50IG9wZXJh
bmQpCiB7CiAgICAgcmV0dXJuIG9wZXJhbmQgPCAwOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYW5k
SXNBcmd1bWVudChpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3RlcklzQXJn
dW1lbnQoaW50IG9wZXJhbmQpCiB7CiAgICAgcmV0dXJuIG9wZXJhbmQgPj0gMDsKIH0KQEAgLTQ5
LDI1ICs0OSwzMiBAQCBwdWJsaWM6CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXJGb3JMb2NhbChpbnQpOwogICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoaW50LCBpbnQpOwogCisgICAgc3RhdGljIGNvbnN0ZXhwciBp
bnQgaW52YWxpZFZpcnR1YWxSZWdpc3RlciA9IDB4M2ZmZmZmZmY7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBpbnQgZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggPSBGaXJzdENvbnN0YW50UmVnaXN0
ZXJJbmRleDsKKwogICAgIFZpcnR1YWxSZWdpc3RlcihSZWdpc3RlcklEKik7CiAgICAgVmlydHVh
bFJlZ2lzdGVyKFJlZlB0cjxSZWdpc3RlcklEPik7CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIoKQot
ICAgICAgICA6IG1fdmlydHVhbFJlZ2lzdGVyKHNfaW52YWxpZFZpcnR1YWxSZWdpc3RlcikKKyAg
ICAgICAgOiBtX3ZpcnR1YWxSZWdpc3RlcihpbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQogICAgIHsg
fQogCiAgICAgZXhwbGljaXQgVmlydHVhbFJlZ2lzdGVyKGludCB2aXJ0dWFsUmVnaXN0ZXIpCiAg
ICAgICAgIDogbV92aXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKQogICAgIHsgfQogCi0g
ICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gKG1fdmlydHVhbFJlZ2lzdGVyICE9IHNf
aW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7IH0KLSAgICBib29sIGlzTG9jYWwoKSBjb25zdCB7IHJl
dHVybiBvcGVyYW5kSXNMb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KLSAgICBib29sIGlzQXJn
dW1lbnQoKSBjb25zdCB7IHJldHVybiBvcGVyYW5kSXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KKyAgICBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdCBzbG90KQorICAgICAgICA6
IG1fdmlydHVhbFJlZ2lzdGVyKHN0YXRpY19jYXN0PGludD4oc2xvdCkpCisgICAgeyB9CisKKyAg
ICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAobV92aXJ0dWFsUmVnaXN0ZXIgIT0gaW52
YWxpZFZpcnR1YWxSZWdpc3Rlcik7IH0KKyAgICBib29sIGlzTG9jYWwoKSBjb25zdCB7IHJldHVy
biB2aXJ0dWFsUmVnaXN0ZXJJc0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIGJvb2wg
aXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzQXJndW1lbnQobV92
aXJ0dWFsUmVnaXN0ZXIpOyB9CiAgICAgYm9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1f
dmlydHVhbFJlZ2lzdGVyID49IDAgJiYgbV92aXJ0dWFsUmVnaXN0ZXIgPCBDYWxsRnJhbWVTbG90
Ojp0aGlzQXJndW1lbnQ7IH0KLSAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBt
X3ZpcnR1YWxSZWdpc3RlciA+PSBzX2ZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9CisgICAg
Ym9vbCBpc0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gZmly
c3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KICAgICBpbnQgdG9Mb2NhbCgpIGNvbnN0IHsgQVNT
RVJUKGlzTG9jYWwoKSk7IHJldHVybiBvcGVyYW5kVG9Mb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7
IH0KICAgICBpbnQgdG9Bcmd1bWVudCgpIGNvbnN0IHsgQVNTRVJUKGlzQXJndW1lbnQoKSk7IHJl
dHVybiBvcGVyYW5kVG9Bcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KLSAgICBpbnQgdG9D
b25zdGFudEluZGV4KCkgY29uc3QgeyBBU1NFUlQoaXNDb25zdGFudCgpKTsgcmV0dXJuIG1fdmly
dHVhbFJlZ2lzdGVyIC0gc19maXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQorICAgIGludCB0
b0NvbnN0YW50SW5kZXgoKSBjb25zdCB7IEFTU0VSVChpc0NvbnN0YW50KCkpOyByZXR1cm4gbV92
aXJ0dWFsUmVnaXN0ZXIgLSBmaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGludCBv
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlcjsgfQogICAgIGludCBvZmZz
ZXRJbkJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgKiBzaXplb2YoUmVn
aXN0ZXIpOyB9CiAKQEAgLTEwNiw5ICsxMTMsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBjb25zdGV4cHIg
aW50IHNfaW52YWxpZFZpcnR1YWxSZWdpc3RlciA9IDB4M2ZmZmZmZmY7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBpbnQgc19maXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCA9IEZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4OwotCiAgICAgc3RhdGljIGludCBsb2NhbFRvT3BlcmFuZChpbnQgbG9jYWwp
IHsgcmV0dXJuIC0xIC0gbG9jYWw7IH0KICAgICBzdGF0aWMgaW50IG9wZXJhbmRUb0xvY2FsKGlu
dCBvcGVyYW5kKSB7IHJldHVybiAtMSAtIG9wZXJhbmQ7IH0KICAgICBzdGF0aWMgaW50IG9wZXJh
bmRUb0FyZ3VtZW50KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5kIC0gQ2FsbEZyYW1lOjp0
aGlzQXJndW1lbnRPZmZzZXQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCA5MTAxZDEwZGQ4ZWM0
ZmMyMjlhN2Y4YTA5MTY4YzdjODQ1ZTI2OTExLi41YzBhOTgxMzI1YTVlNTc1YmExOGU1ZTgzZDQy
ZTY0ODNkZDZjNDI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtMTE4OSw3ICsxMTg5LDcgQEAgUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVOZXh0UGFyYW1ldGVyKCkKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQobV9jb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKSk7CiAgICAgbV9wYXJhbWV0ZXJzLmdyb3cobV9wYXJhbWV0
ZXJzLnNpemUoKSArIDEpOwogICAgIGF1dG8mIHBhcmFtZXRlciA9IHJlZ2lzdGVyRm9yKHJlZyk7
Ci0gICAgcGFyYW1ldGVyLnNldEluZGV4KHJlZy5vZmZzZXQoKSk7CisgICAgcGFyYW1ldGVyLnNl
dEluZGV4KHJlZyk7CiAgICAgbV9jb2RlQmxvY2stPmFkZFBhcmFtZXRlcigpOwogICAgIHJldHVy
biAmcGFyYW1ldGVyOwogfQpAQCAtMTE5OCw3ICsxMTk4LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVy
YXRvcjo6aW5pdGlhbGl6ZVBhcmFtZXRlcnMoRnVuY3Rpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJz
KQogewogICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29kZSBibG9jayBrbm93cyBhYm91dCBhbGwgb2Yg
b3VyIHBhcmFtZXRlcnMsIGFuZCBtYWtlIHN1cmUgdGhhdCBwYXJhbWV0ZXJzCiAgICAgLy8gbmVl
ZGluZyBkZXN0cnVjdHVyaW5nIGFyZSBub3RlZC4KLSAgICBtX3RoaXNSZWdpc3Rlci5zZXRJbmRl
eChpbml0aWFsaXplTmV4dFBhcmFtZXRlcigpLT5pbmRleCgpKTsgLy8gdGhpcworICAgIG1fdGhp
c1JlZ2lzdGVyLnNldEluZGV4KFZpcnR1YWxSZWdpc3Rlcihpbml0aWFsaXplTmV4dFBhcmFtZXRl
cigpLT5pbmRleCgpKSk7IC8vIHRoaXMKIAogICAgIGJvb2wgbm9uU2ltcGxlQXJndW1lbnRzID0g
ZmFsc2U7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyAr
K2kpIHsKQEAgLTE2MzksMTEgKzE2MzksMTEgQEAgYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dEVxdWFsaXR5T3BJbXBsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjMSwgUmUKIAog
ICAgIGlmIChtX2xhc3RJbnN0cnVjdGlvbi0+aXM8T3BUeXBlb2Y+KCkpIHsKICAgICAgICAgYXV0
byBvcCA9IG1fbGFzdEluc3RydWN0aW9uLT5hczxPcFR5cGVvZj4oKTsKLSAgICAgICAgaWYgKHNy
YzEtPmluZGV4KCkgPT0gb3AubV9kc3Qub2Zmc2V0KCkKKyAgICAgICAgaWYgKHNyYzEtPnZpcnR1
YWxSZWdpc3RlcigpID09IG9wLm1fZHN0CiAgICAgICAgICAgICAmJiBzcmMxLT5pc1RlbXBvcmFy
eSgpCi0gICAgICAgICAgICAmJiBtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgo
c3JjMi0+aW5kZXgoKSkKLSAgICAgICAgICAgICYmIG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lz
dGVyKHNyYzItPmluZGV4KCkpLmdldCgpLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgICAgIGNvbnN0
IFN0cmluZyYgdmFsdWUgPSBhc1N0cmluZyhtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3Rlcihz
cmMyLT5pbmRleCgpKS5nZXQoKSktPnRyeUdldFZhbHVlKCk7CisgICAgICAgICAgICAmJiBzcmMy
LT52aXJ0dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50KCkKKyAgICAgICAgICAgICYmIG1fY29kZUJs
b2NrLT5jb25zdGFudFJlZ2lzdGVyKHNyYzItPnZpcnR1YWxSZWdpc3RlcigpKS5nZXQoKS5pc1N0
cmluZygpKSB7CisgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXNTdHJpbmcobV9j
b2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+dmlydHVhbFJlZ2lzdGVyKCkpLmdldCgp
KS0+dHJ5R2V0VmFsdWUoKTsKICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAidW5kZWZpbmVkIikg
ewogICAgICAgICAgICAgICAgIHJld2luZCgpOwogICAgICAgICAgICAgICAgIE9wSXNVbmRlZmlu
ZWQ6OmVtaXQodGhpcywgZHN0LCBvcC5tX3ZhbHVlKTsKQEAgLTMyOTAsNiArMzI5MCw4IEBAIFJl
Z2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbFZhcmFyZ3MoUmVnaXN0ZXJJRCog
ZHN0LCBSZWdpc3RlcklEKiBmdW5jCiAgICAgLy8gRW1pdCBjYWxsLgogICAgIEFTU0VSVChkc3Qg
IT0gaWdub3JlZFJlc3VsdCgpKTsKICAgICBWYXJhcmdzT3A6OmVtaXQodGhpcywgZHN0LCBmdW5j
LCB0aGlzUmVnaXN0ZXIsIGFyZ3VtZW50cyA/IGFyZ3VtZW50cyA6IFZpcnR1YWxSZWdpc3Rlcigw
KSwgZmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICBpZiAoVmFyYXJn
c09wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCisgICAgICAg
IEFTU0VSVChtX2NvZGVCbG9jay0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgcmV0dXJuIGRzdDsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5oCmluZGV4IGM5ZTRmNjk2MTZmZWQ3M2Y0MTk4OTEwZDdiNGU5ZDM4ZTMz
NTVhNmYuLjQyYzYzMDI2MGVlNmViOGRiNjE2MzM4MmY2MGY2N2M1ZTg0MGY3ZjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmgKQEAgLTEwMTksNiArMTAxOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29s
IHNob3VsZEVtaXRDb250cm9sRmxvd1Byb2ZpbGVySG9va3MoKSBjb25zdCB7IHJldHVybiBtX2Nv
ZGVHZW5lcmF0aW9uTW9kZS5jb250YWlucyhDb2RlR2VuZXJhdGlvbk1vZGU6OkNvbnRyb2xGbG93
UHJvZmlsZXIpOyB9CiAgICAgICAgIAogICAgICAgICBib29sIGlzU3RyaWN0TW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKTsgfQorICAgICAgICB2b2lkIHNl
dFVzZXNDaGVja3BvaW50cygpIHsgbV9jb2RlQmxvY2stPnNldEhhc0NoZWNrcG9pbnRzKCk7IH0K
IAogICAgICAgICBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9j
b2RlQmxvY2stPnBhcnNlTW9kZSgpOyB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9SZWdpc3RlcklELmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL1JlZ2lzdGVySUQuaAppbmRleCBkYTNmZTEyODAwOTBmNDBlNzNm
ODFkMjEyMGRmY2Q1ZWY5MGQzY2VlLi43M2I0MzIwNjM4YzM0OGY5NTU0YWFlOWEzYTMyMDIzMjgz
YmRiM2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL1Jl
Z2lzdGVySUQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL1JlZ2lz
dGVySUQuaApAQCAtNjksMTIgKzY5LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAg
ICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldEluZGV4KGludCBpbmRleCkKKyAgICAgICAgdm9p
ZCBzZXRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgpCiAgICAgICAgIHsKICNpZiBBU1NFUlRf
RU5BQkxFRAogICAgICAgICAgICAgbV9kaWRTZXRJbmRleCA9IHRydWU7CiAjZW5kaWYKLSAgICAg
ICAgICAgIG1fdmlydHVhbFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKGluZGV4KTsKKyAgICAg
ICAgICAgIG1fdmlydHVhbFJlZ2lzdGVyID0gaW5kZXg7CiAgICAgICAgIH0KIAogICAgICAgICB2
b2lkIHNldFRlbXBvcmFyeSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SGVhcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SGVhcC5jcHAKaW5kZXggYjgzZmVlMGQzYzA5ZDE0OTdhYTdlYTFkZTNlMDQ5MDYyZjIyNmMx
NC4uZTY0MDcxYjFhYTBlMzQ4OTQ0MzQzOWZmMjhmY2EyNTFiNjJiOTY1YyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmNwcApAQCAtNDAsNiArNDAsMTQg
QEAgdm9pZCBBYnN0cmFjdEhlYXA6OlBheWxvYWQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKICAgICAgICAgb3V0LnByaW50KHZhbHVlKCkpOwogfQogCit2b2lkIEFic3RyYWN0SGVhcDo6
UGF5bG9hZDo6ZHVtcEFzT3BlcmFuZChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlm
IChpc1RvcCgpKQorICAgICAgICBvdXQucHJpbnQoIlRPUCIpOworICAgIGVsc2UKKyAgICAgICAg
b3V0LnByaW50KE9wZXJhbmQ6OmZyb21CaXRzKHZhbHVlKCkpKTsKK30KKwogdm9pZCBBYnN0cmFj
dEhlYXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQoa2lu
ZCgpKTsKQEAgLTQ5LDYgKzU3LDEzIEBAIHZvaWQgQWJzdHJhY3RIZWFwOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIG91dC5wcmludCgiKCIsIERPTUpJVDo6SGVhcFJhbmdl
Ojpmcm9tUmF3KHBheWxvYWQoKS52YWx1ZTMyKCkpLCAiKSIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQorICAgIGlmIChraW5kKCkgPT0gU3RhY2spIHsKKyAgICAgICAgb3V0LnByaW50KCIoIik7
CisgICAgICAgIHBheWxvYWQoKS5kdW1wQXNPcGVyYW5kKG91dCk7CisgICAgICAgIG91dC5wcmlu
dCgiKSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgb3V0LnByaW50KCIoIiwgcGF5
bG9hZCgpLCAiKSIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SGVhcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEhlYXAuaAppbmRleCBiZjk5Mzc3OTcwNDcwMmQ4ZDViMjBiNmMyZjZmNzM5NWFmZTZiODY4Li4z
YzRjZTNkNWQwMmRjM2E4MWYzYWE0MjRjZmMzZmQxYzQ0N2M1MjkwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBF
TkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkRPTUpJVEhlYXBSYW5nZS5oIgorI2luY2x1ZGUg
Ik9wZXJhbmRzSW5saW5lcy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CkBAIC0xMjMs
MTAgKzEyNCwxNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAsIG1fdmFsdWUoYml0d2lzZV9jYXN0
PGludHB0cl90Pihwb2ludGVyKSkKICAgICAgICAgewogICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorCisgICAgICAgIFBheWxvYWQo
T3BlcmFuZCBvcGVyYW5kKQogICAgICAgICAgICAgOiBtX2lzVG9wKGZhbHNlKQotICAgICAgICAg
ICAgLCBtX3ZhbHVlKG9wZXJhbmQub2Zmc2V0KCkpCisgICAgICAgICAgICAsIG1fdmFsdWUob3Bl
cmFuZC5hc0JpdHMoKSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgUGF5bG9hZChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgICAgIDogUGF5bG9hZChPcGVyYW5kKG9w
ZXJhbmQpKQogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xODMsNiArMTg5LDcg
QEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKyAgICAgICAgdm9pZCBkdW1wQXNPcGVyYW5kKFByaW50U3RyZWFtJikg
Y29uc3Q7CiAgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIGJvb2wgbV9pc1RvcDsKQEAg
LTIwNCw2ICsyMTEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQoa2luZCAhPSBJ
bnZhbGlkQWJzdHJhY3RIZWFwICYmIGtpbmQgIT0gV29ybGQgJiYga2luZCAhPSBIZWFwICYmIGtp
bmQgIT0gU2lkZVN0YXRlKTsKICAgICAgICAgbV92YWx1ZSA9IGVuY29kZShraW5kLCBwYXlsb2Fk
KTsKKyAgICAgICAgQVNTRVJUKHRoaXMtPmtpbmQoKSA9PSBraW5kICYmIHRoaXMtPnBheWxvYWQo
KSA9PSBwYXlsb2FkKTsKICAgICB9CiAgICAgCiAgICAgQWJzdHJhY3RIZWFwKFdURjo6SGFzaFRh
YmxlRGVsZXRlZFZhbHVlVHlwZSkKQEAgLTIxOSw2ICsyMjcsMTEgQEAgcHVibGljOgogICAgICAg
ICBBU1NFUlQoa2luZCgpICE9IFdvcmxkICYmIGtpbmQoKSAhPSBJbnZhbGlkQWJzdHJhY3RIZWFw
KTsKICAgICAgICAgcmV0dXJuIHBheWxvYWRJbXBsKCk7CiAgICAgfQorICAgIE9wZXJhbmQgb3Bl
cmFuZCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNrICYmICFw
YXlsb2FkKCkuaXNUb3AoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjpmcm9tQml0cyhwYXls
b2FkKCkudmFsdWUoKSk7CisgICAgfQogICAgIAogICAgIEFic3RyYWN0SGVhcCBzdXBlcnR5cGUo
KSBjb25zdAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAppbmRleCBjMjZjMjRhZmViZTFjZjdlZGUx
YTA3ODQwZDBjNjZkOTc0NjY4MDAzLi41YmIyNzhkMmNmNzJlNDcxNWJkOGZjYzI0MDg2ZjU2Y2Rl
MWQ1ODYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCkBAIC0zODgsNyArMzg4LDcgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWdu
ZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3Bl
cmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkub2Zmc2V0KCkpOworICAgICAgICBBYnN0
cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+b3Bl
cmFuZCgpKTsKICAgICAgICAgLy8gVGhlIHZhbHVlIGluIHRoZSBsb2NhbCBzaG91bGQgYWxyZWFk
eSBiZSBjaGVja2VkLgogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZhbHVlLmlz
VHlwZSh0eXBlRmlsdGVyRm9yKHZhcmlhYmxlQWNjZXNzRGF0YS0+Zmx1c2hGb3JtYXQoKSkpKTsK
ICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkpCkBAIC0zOTksNyArMzk5LDcgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWdu
ZWQgY2xvYmJlckxpbWkKICAgICAgICAgCiAgICAgY2FzZSBHZXRTdGFjazogewogICAgICAgICBT
dGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAg
QWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChkYXRhLT5sb2NhbCk7CisgICAg
ICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCk7
CiAgICAgICAgIC8vIFRoZSB2YWx1ZSBpbiB0aGUgbG9jYWwgc2hvdWxkIGFscmVhZHkgYmUgY2hl
Y2tlZC4KICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YWx1ZS5pc1R5cGUodHlw
ZUZpbHRlckZvcihkYXRhLT5mb3JtYXQpKSk7CiAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKQpA
QCAtNDA5LDEyICs0MDksMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICB9CiAgICAg
ICAgIAogICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUt
PmxvY2FsKCkpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIG1fc3RhdGUub3Bl
cmFuZChub2RlLT5vcGVyYW5kKCkpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRTdGFjazogewotICAgICAgICBt
X3N0YXRlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSA9IGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nl
c3NEYXRhKCktPm9wZXJhbmQpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgCkBAIC00MzYsNyArNDM2LDcgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xv
YmJlckxpbWkKICAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBo
YXMgYmVlbiBzZXQuIFNldEFyZ3VtZW50RGVmaW5pdGVseS9TZXRBcmd1bWVudE1heWJlIG1lYW5z
CiAgICAgICAgIC8vIHRoYXQgc29tZW9uZSBzZXQgdGhlIGFyZ3VtZW50IHZhbHVlcyBvdXQtb2Yt
YmFuZCwgYW5kIGN1cnJlbnRseSB0aGlzIGFsd2F5cyBtZWFucyBzZXR0aW5nIHRvIGEKICAgICAg
ICAgLy8gbm9uLWNsZWFyIHZhbHVlLgotICAgICAgICBBU1NFUlQoIW1fc3RhdGUub3BlcmFuZChu
b2RlLT5sb2NhbCgpKS5pc0NsZWFyKCkpOworICAgICAgICBBU1NFUlQoIW1fc3RhdGUub3BlcmFu
ZChub2RlLT5vcGVyYW5kKCkpLmlzQ2xlYXIoKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2Fz
ZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czogewpAQCAtNDY1LDYgKzQ2NSwxMiBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0
cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBjYXNl
IFZhcmFyZ3NMZW5ndGg6IHsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgIHNldFR5
cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICB9CisK
ICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAgICAg
ICAgLy8gRklYTUU6IEZvcndhcmRWYXJhcmdzIHNob3VsZCBjaGVjayBpZiB0aGUgY291bnQgYmVj
b21lcyBrbm93biwgYW5kIGlmIGl0IGRvZXMsIGl0IHNob3VsZCB0dXJuCkBAIC00ODMsNyArNDg5
LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0
ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBk
YXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgIG1fc3RhdGUub3BlcmFuZChk
YXRhLT5jb3VudCkuc2V0Tm9uQ2VsbFR5cGUoU3BlY0ludDMyT25seSk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0IC0gMTsgaS0tOykKLSAgICAgICAgICAgIG1fc3RhdGUu
b3BlcmFuZChkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpLm1ha2VIZWFwVG9wKCk7CisgICAgICAg
ICAgICBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+c3RhcnQgKyBpKS5tYWtlSGVhcFRvcCgpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAKQEAgLTIzNjUsNyArMjM3MSw3IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNs
b2JiZXJMaW1pCiAgICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVudEluZGV4OwogICAgICAgICAg
ICAgaWYgKGFyZ3VtZW50SW5kZXhDaGVja2VkLnNhZmVHZXQoYXJndW1lbnRJbmRleCkgIT0gQ2hl
Y2tlZFN0YXRlOjpEaWRPdmVyZmxvdykgewogICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50SW5kZXggPCBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoYXJndW1lbnRJbmRleCA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIHNldEZvck5vZGUobm9kZSwgbV9zdGF0ZS5vcGVyYW5kKAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50SW5k
ZXggKyAxKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fc3RhdGUuc2V0U2hvdWxkVHJ5Q29uc3RhbnRGb2xkaW5nKHRydWUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaAppbmRleCBk
NzMyNDdiOTNjNWRjNzg2YjYxN2FhNWFhZGMyYjBmNjE1Mjg2YjVmLi44OWMwOGZhMDgwY2VhMzJm
ZDljNTkxZjMwZjFlN2RkNDZmMWQxMjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaApAQCAtMTIwLDcgKzEyMCw3IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXplKCk7
ICsraSkgewogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFy
aWFibGVzW2ldLT5maW5kKCk7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9
IHZhcmlhYmxlLT5sb2NhbCgpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gdmFyaWFi
bGUtPm9wZXJhbmQoKTsKIAogICAgICAgICAgICAgaWYgKGkpCiAgICAgICAgICAgICAgICAgb3V0
LnByaW50KCIgIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
Z3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAppbmRleCA3MTNlNzk5OWE3YmZjYTIxZGRj
ZWE4ZTM0NjI2MGYzNDMxZTRkOTQyLi4xZmUyMGZlZjdkNTVmZTE3N2VmZTM5YzRlNjlhZmMzNjZm
OGM0MTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50
c0VsaW1pbmF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKQEAgLTM1OCw5ICszNTgsMTIgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBW
YXJhcmdzTGVuZ3RoOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAg
ICAgIGNhc2UgTG9hZFZhcmFyZ3M6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5sb2Fk
VmFyYXJnc0RhdGEoKS0+b2Zmc2V0ICYmIChub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBOZXdBcnJh
eVdpdGhTcHJlYWQgfHwgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gU3ByZWFkIHx8IG5vZGUtPmNo
aWxkMSgpLT5vcCgpID09IE5ld0FycmF5QnVmZmVyKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGVzY2FwZShub2RlLT5jaGlsZDEoKSwgbm9kZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5sb2FkVmFyYXJnc0RhdGEoKS0+b2Zmc2V0ICYmIChub2RlLT5hcmd1bWVudHNDaGlsZCgp
LT5vcCgpID09IE5ld0FycmF5V2l0aFNwcmVhZCB8fCBub2RlLT5hcmd1bWVudHNDaGlsZCgpLT5v
cCgpID09IFNwcmVhZCB8fCBub2RlLT5hcmd1bWVudHNDaGlsZCgpLT5vcCgpID09IE5ld0FycmF5
QnVmZmVyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZShub2RlLT5hcmd1bWVudHND
aGlsZCgpLCBub2RlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CkBAIC00OTMsMTAgKzQ5
NiwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgh
aGVhcC5wYXlsb2FkKCkuaXNUb3AoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVnKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBoZWFwLm9wZXJhbmQoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFRoZSByZWdpc3RlciBtYXkgbm90IHBvaW50IHRvIGFuIGFyZ3VtZW50IG9y
IGxvY2FsLCBmb3IgZXhhbXBsZSBpZiB3ZSBhcmUgbG9va2luZyBhdCBTZXRBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVnLmlzSGVhZGVy
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvYmJlcmVkQnlUaGlzQmxvY2sub3Bl
cmFuZChyZWcpID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3BlcmFuZC5p
c0hlYWRlcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJlZEJ5VGhpc0Js
b2NrLm9wZXJhbmQob3BlcmFuZCkgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9LAogICAg
ICAgICAgICAgICAgICAgICBOb09wQ2xvYmJlcml6ZSgpKTsKICAgICAgICAgICAgIH0KQEAgLTU2
MCwxNiArNTYzLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5s
aW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNh
bGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aXNDbG9iYmVyZWRCeUJsb2NrIHw9IGNsb2JiZXJlZEJ5VGhpc0Jsb2NrLm9wZXJhbmQoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcykpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghaXNDbG9iYmVyZWRCeUJsb2NrIHx8IGlubGluZUNhbGxGcmFtZS0+
aXNDbG9zdXJlQ2FsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Nsb2Ji
ZXJlZEJ5QmxvY2sgfD0gY2xvYmJlcmVkQnlUaGlzQmxvY2sub3BlcmFuZCgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBD
YWxsRnJhbWVTbG90OjpjYWxsZWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJh
bWVTbG90OjpjYWxsZWUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQ2xvYmJlcmVkQnlCbG9jaykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7ICsraSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgLSAxKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVnID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkgKwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZTo6YXJndW1lbnRPZmZz
ZXQoaSk7CkBAIC02MjcsNyArNjMwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgTm9PcENsb2JiZXJpemUoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWyZdIChBYnN0cmFjdEhlYXAgaGVhcCkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYXAua2luZCgpID09IFN0YWNrICYmICFo
ZWFwLnBheWxvYWQoKS5pc1RvcCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoaW5saW5lQ2FsbEZyYW1lLCBW
aXJ0dWFsUmVnaXN0ZXIoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKSkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3Qo
aW5saW5lQ2FsbEZyYW1lLCBoZWFwLm9wZXJhbmQoKSkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CkBAIC04MDYsNyArODA5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzYWZlVG9HZXRTdGFjayA9IGlu
ZGV4ID49IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOwogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWZlVG9H
ZXRTdGFjayAmPSBpbmRleCA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgLSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVUb0dldFN0YWNrICY9
IGluZGV4IDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgLSAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVUb0dldFN0YWNrICY9CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluZGV4IDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVC
bG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpIC0gMTsKQEAgLTg0NSw5ICs4NDgsMjMgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHlPbihyZXN1bHQp
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgVmFy
YXJnc0xlbmd0aDogeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBub2Rl
LT5hcmd1bWVudHNDaGlsZCgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Vs
aW1pbmF0ZWRBbGxvY2F0aW9uKGNhbmRpZGF0ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgICAgICAgICAvLyBWYXJhcmdzTGVuZ3RoIGNhbiBleGl0LCBz
byBpdCBiZXR0ZXIgYmUgZXhpdE9LLgorICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG5vZGUsIG5vZGUtPm9yaWdpbi5leGl0T0spOworICAgICAgICAgICAgICAgICAgICBO
b2RlT3JpZ2luIG9yaWdpbiA9IG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKHRydWUpOworCisKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHlPbihlbWl0Q29kZVRvR2V0
QXJndW1lbnRzQXJyYXlMZW5ndGgoaW5zZXJ0aW9uU2V0LCBjYW5kaWRhdGUsIG5vZGVJbmRleCwg
b3JpZ2luLCAvKiBhZGRUaGlzID0gKi8gdHJ1ZSkpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdz
OiB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+YXJn
dW1lbnRzQ2hpbGQoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFbGltaW5h
dGVkQWxsb2NhdGlvbihjYW5kaWRhdGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIApAQCAtODYyLDEwICs4NzksMTAgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqc051bWJlcihhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcykpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgS2lsbFN0
YWNrLCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEtPmNvdW50Lm9mZnNldCgpKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmFyZ3NEYXRhLT5jb3VudCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgbm9kZS0+b3Jp
Z2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
T3BJbmZvKHZhcmFyZ3NEYXRhLT5jb3VudC5vZmZzZXQoKSksIEVkZ2UoYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXNOb2RlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZh
cmFyZ3NEYXRhLT5jb3VudCksIEVkZ2UoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNOb2RlKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBQdXRTdGFjaywgbm9k
ZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgT3BJbmZvKG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHZhcmFyZ3NEYXRhLT5jb3Vu
dCwgRmx1c2hlZEludDMyKSksCkBAIC04NzQsMTQgKzg5MSwxNSBAQCBwcml2YXRlOgogCiAgICAg
ICAgICAgICAgICAgICAgIGF1dG8gc3RvcmVWYWx1ZSA9IFsmXSAoTm9kZSogdmFsdWUsIHVuc2ln
bmVkIHN0b3JlSW5kZXgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciByZWcgPSB2YXJhcmdzRGF0YS0+c3RhcnQgKyBzdG9yZUluZGV4OworICAgICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKHJlZy5pc0xvY2FsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
U3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZChyZWcsIEZsdXNoZWRKU1ZhbHVlKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9u
ZSwgS2lsbFN0YWNrLCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwgT3BJbmZv
KHJlZy5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwg
U3BlY05vbmUsIEtpbGxTdGFjaywgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCks
IE9wSW5mbyhyZWcpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNl
cnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUs
IE1vdkhpbnQsIG5vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE9wSW5mbyhyZWcub2Zmc2V0KCkpLCBFZGdlKHZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHJlZyksIEVkZ2UodmFsdWUpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5v
cmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP
cEluZm8oZGF0YSksIEVkZ2UodmFsdWUpKTsKQEAgLTkzNSw3ICs5NTMsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoY2FuZGlkYXRlLT5vcCgpID09
IFBoYW50b21DcmVhdGVSZXN0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBjYW5kaWRhdGUtPm51bWJlck9mQXJndW1l
bnRzVG9Ta2lwKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5l
Q2FsbEZyYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZy
YW1lQXJndW1lbnRDb3VudCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgLSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmcmFt
ZUFyZ3VtZW50Q291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoZnJhbWVBcmd1bWVudENvdW50ID49IG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZyYW1lQXJndW1l
bnRDb3VudCAtIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKQEAgLTk4Myw3ICsxMDAxLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjYW5kaWRhdGUtPm9wKCkgPT0g
UGhhbnRvbUNyZWF0ZVJlc3QpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBjYW5kaWRhdGUtPm51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNhbmRpZGF0ZS0+b3JpZ2luLnNlbWFudGlj
LmlubGluZUNhbGxGcmFtZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgZnJhbWVBcmd1bWVudENvdW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBmcmFtZUFyZ3VtZW50Q291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsb2FkSW5kZXggPSBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcDsgbG9hZEluZGV4IDwgZnJhbWVBcmd1bWVudENvdW50OyArK2xv
YWRJbmRleCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChsb2FkSW5kZXggKyAx
KSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0YWNr
QWNjZXNzRGF0YS5hZGQocmVnLCBGbHVzaGVkSlNWYWx1ZSk7CkBAIC0xMDE5LDkgKzEwMzcsNyBA
QCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSA9IGNhbmRpZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkp
IHsKLQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5s
aW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPiB2YXJhcmdzRGF0YS0+b2Zmc2V0KQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAt
PSB2YXJhcmdzRGF0YS0+b2Zmc2V0OwpAQCAtMTAzMCw3ICsxMDQ2LDYgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyA+PSAxKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyA8PSB2YXJhcmdzRGF0YS0+bGltaXQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0b3JlQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbm9kZSwgdmFyYXJnc0RhdGEtPmxpbWl0IC0gMSA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5
TWluaW11bSwgdmFyYXJnc0RhdGEtPmxpbWl0LCB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11
bSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0
aWxpdGllcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxp
dGllcy5jcHAKaW5kZXggZmYxZDU2ODBmYWUwYTIwMDE0ZDFmMWUxM2RjM2U0OGQ4YzU0MzMxZC4u
MWZkYzMwOTk0ODhmYTk5NmVmYTJjYzBhNjk4MzU4YzBhNDkxNWM2YiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcApAQCAtMzIs
MTEgKzMyLDE1IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotYm9vbCBh
cmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQorYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpCiB7CisgICAg
aWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmlydHVh
bFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgaWYgKCFpbmxp
bmVDYWxsRnJhbWUpCiAgICAgICAgIHJldHVybiAocmVnLmlzQXJndW1lbnQoKSAmJiByZWcudG9B
cmd1bWVudCgpKSB8fCByZWcuaXNIZWFkZXIoKTsKLSAgICAKKwogICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUtPmlzQ2xvc3VyZUNhbGwKICAgICAgICAgJiYgcmVnID09IFZpcnR1YWxSZWdpc3Rlcihp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CkBAIC00NiwxOSArNTAsMTkgQEAgYm9vbCBhcmd1bWVudHNJbnZv
bHZlU3RhY2tTbG90KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVn
aXN0ZXIKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgLy8gV2UgZG8gbm90IGluY2x1
ZGUgZml4dXBzIGhlcmUgc2luY2UgaXQgaXMgbm90IHJlbGF0ZWQgdG8gfGFyZ3VtZW50c3wsIHJl
c3QgcGFyYW1ldGVycywgYW5kIHZhcmFyZ3MuCi0gICAgdW5zaWduZWQgbnVtQXJndW1lbnRzID0g
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7CisgICAgdW5z
aWduZWQgbnVtQXJndW1lbnRzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YXJndW1lbnRTdGFydCA9CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0KSArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCk7CiAgICAgcmV0dXJu
IHJlZyA+PSBhcmd1bWVudFN0YXJ0ICYmIHJlZyA8IGFyZ3VtZW50U3RhcnQgKyBudW1Bcmd1bWVu
dHM7CiB9CiAKLWJvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChOb2RlKiBjYW5kaWRhdGUs
IFZpcnR1YWxSZWdpc3RlciByZWcpCitib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoTm9k
ZSogY2FuZGlkYXRlLCBPcGVyYW5kIG9wZXJhbmQpCiB7Ci0gICAgcmV0dXJuIGFyZ3VtZW50c0lu
dm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
KCksIHJlZyk7CisgICAgcmV0dXJuIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRl
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCksIG9wZXJhbmQpOwogfQogCiBOb2Rl
KiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCi0gICAgSW5zZXJ0aW9uU2V0JiBp
bnNlcnRpb25TZXQsIE5vZGUqIGFyZ3VtZW50cywgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3Jp
Z2luIG9yaWdpbikKKyAgICBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCwgTm9kZSogYXJndW1l
bnRzLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBib29sIGFkZFRoaXMp
CiB7CiAgICAgR3JhcGgmIGdyYXBoID0gaW5zZXJ0aW9uU2V0LmdyYXBoKCk7CiAKQEAgLTY5LDEx
ICs3MywxNCBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAgICAg
ICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBOZXdBcnJheUJ1ZmZlcgogICAgICAgICB8fCBhcmd1
bWVudHMtPm9wKCkgPT0gUGhhbnRvbURpcmVjdEFyZ3VtZW50cyB8fCBhcmd1bWVudHMtPm9wKCkg
PT0gUGhhbnRvbUNsb25lZEFyZ3VtZW50cwogICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0g
UGhhbnRvbUNyZWF0ZVJlc3QgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1
ZmZlcgotICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNw
cmVhZCwKKyAgICAgICAgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhT
cHJlYWQgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21TcHJlYWQsCiAgICAgICAgIGFyZ3Vt
ZW50cy0+b3AoKSk7CiAKKyAgICBpZiAoYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21TcHJlYWQp
CisgICAgICAgIHJldHVybiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoaW5zZXJ0
aW9uU2V0LCBhcmd1bWVudHMtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZUluZGV4LCBvcmlnaW4sIGFk
ZFRoaXMpOworCiAgICAgaWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRo
U3ByZWFkKSB7Ci0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mTm9uU3ByZWFkQXJndW1lbnRzID0g
MDsKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25TcHJlYWRBcmd1bWVudHMgPSBhZGRUaGlz
OwogICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IGFyZ3VtZW50cy0+Yml0VmVjdG9yKCk7
CiAgICAgICAgIE5vZGUqIGN1cnJlbnRTdW0gPSBudWxscHRyOwogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYXJndW1lbnRzLT5udW1DaGlsZHJlbigpOyBpKyspIHsKQEAgLTEwMyw3
ICsxMTAsNyBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAKICAg
ICBpZiAoYXJndW1lbnRzLT5vcCgpID09IE5ld0FycmF5QnVmZmVyIHx8IGFyZ3VtZW50cy0+b3Ao
KSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIpIHsKICAgICAgICAgcmV0dXJuIGluc2VydGlvblNl
dC5pbnNlcnRDb25zdGFudCgKLSAgICAgICAgICAgIG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJl
cihhcmd1bWVudHMtPmNhc3RPcGVyYW5kPEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oKS0+bGVuZ3Ro
KCkpKTsKKyAgICAgICAgICAgIG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihhcmd1bWVudHMt
PmNhc3RPcGVyYW5kPEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oKS0+bGVuZ3RoKCkgKyBhZGRUaGlz
KSk7CiAgICAgfQogICAgIAogICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0g
YXJndW1lbnRzLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CkBAIC0xMTMsNyAr
MTIwLDcgQEAgTm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAogICAgICAg
ICBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGFyZ3VtZW50cy0+bnVtYmVyT2ZBcmd1bWVudHNU
b1NraXAoKTsKICAgICAKICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJh
bWUtPmlzVmFyYXJncygpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50c1NpemUgPSBpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsKKyAgICAgICAgdW5z
aWduZWQgYXJndW1lbnRzU2l6ZSA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgLSAhYWRkVGhpczsKICAgICAgICAgaWYgKGFyZ3VtZW50c1NpemUgPj0gbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXApCiAgICAgICAgICAgICBhcmd1bWVudHNTaXplIC09IG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwOwogICAgICAgICBlbHNlCkBAIC0xMjksMTQgKzEzNiwxNCBAQCBOb2Rl
KiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAgICAgICAgIG5vZGVJbmRleCwg
U3BlY0ludDMyT25seSwgQXJpdGhTdWIsIG9yaWdpbiwgT3BJbmZvKEFyaXRoOjpVbmNoZWNrZWQp
LAogICAgICAgICBFZGdlKGFyZ3VtZW50Q291bnQsIEludDMyVXNlKSwKICAgICAgICAgaW5zZXJ0
aW9uU2V0Lmluc2VydENvbnN0YW50Rm9yVXNlKAotICAgICAgICAgICAgbm9kZUluZGV4LCBvcmln
aW4sIGpzTnVtYmVyKDEgKyBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCksIEludDMyVXNlKSk7Cisg
ICAgICAgICAgICBub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIobnVtYmVyT2ZBcmd1bWVudHNU
b1NraXAgKyAhYWRkVGhpcyksIEludDMyVXNlKSk7CiAKICAgICBpZiAobnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXApIHsKICAgICAgICAgLy8gVGhlIGFib3ZlIHN1YnRyYWN0aW9uIG1heSBwcm9kdWNl
IGEgbmVnYXRpdmUgbnVtYmVyIGlmIHRoaXMgbnVtYmVyIGlzIG5vbi16ZXJvLiBXZSBjb3JyZWN0
IHRoYXQgaGVyZS4KICAgICAgICAgcmVzdWx0ID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAg
ICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNJbnQzMk9ubHksIEFyaXRoTWF4LCBvcmlnaW4sIAog
ICAgICAgICAgICAgRWRnZShyZXN1bHQsIEludDMyVXNlKSwgCi0gICAgICAgICAgICBpbnNlcnRp
b25TZXQuaW5zZXJ0Q29uc3RhbnRGb3JVc2Uobm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKDAp
LCBJbnQzMlVzZSkpOworICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50Rm9y
VXNlKG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYWRk
VGhpcykpLCBJbnQzMlVzZSkpOwogICAgICAgICByZXN1bHQtPnNldFJlc3VsdChOb2RlUmVzdWx0
SW50MzIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcmd1bWVudHNVdGlsaXRpZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJn
dW1lbnRzVXRpbGl0aWVzLmgKaW5kZXggOWE3NzE4ZmJiZjU0N2IyZjZhZTEwMWRhZjM3NGEwNmEy
YzNkZGYxMi4uNzRmOTM5ZTgxNjIyZDQwMjQ2ZTIzNTVkNTA5OGE5ZWQyYTg1MjEwZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oCkBA
IC0zMSwxMSArMzEsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1i
b29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJl
Z2lzdGVyKTsKLWJvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChOb2RlKiBjYW5kaWRhdGUs
IFZpcnR1YWxSZWdpc3Rlcik7Citib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoSW5saW5l
Q2FsbEZyYW1lKiwgT3BlcmFuZCk7Citib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoTm9k
ZSogY2FuZGlkYXRlLCBPcGVyYW5kKTsKIAogTm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0Fy
cmF5TGVuZ3RoKAotICAgIEluc2VydGlvblNldCYsIE5vZGUqIGFyZ3VtZW50cywgdW5zaWduZWQg
bm9kZUluZGV4LCBOb2RlT3JpZ2luKTsKKyAgICBJbnNlcnRpb25TZXQmLCBOb2RlKiBhcmd1bWVu
dHMsIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiwgYm9vbCBhZGRUaGlzID0gZmFsc2Up
OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgKaW5kZXggOTZkYWMzOWE0NDRmZmJk
M2NlNTQzZjU3ZjM2Y2Q2MWRlY2MyOGJkNC4uODk3YzcwZGZmYmEwNjZiNjQ5Y2FmZGNjMWVmMDkz
Mzc2ODEwNGQxMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRh
aWxBYnN0cmFjdFN0YXRlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRh
aWxBYnN0cmFjdFN0YXRlLmgKQEAgLTEzOSw4ICsxMzksNyBAQCBwdWJsaWM6CiAgICAgCiAgICAg
dW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrLT52YWx1
ZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgfQogICAgIHVuc2lnbmVkIG51bWJlck9mTG9j
YWxzKCkgY29uc3QgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm51bWJlck9mTG9jYWxz
KCk7IH0KLSAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKGludCBvcGVyYW5kKSB7IHJldHVybiBt
X2Jsb2NrLT52YWx1ZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsgfQotICAgIEFic3RyYWN0VmFs
dWUmIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIG1fYmxvY2stPnZh
bHVlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOyB9CisgICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFu
ZChPcGVyYW5kIG9wZXJhbmQpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5vcGVyYW5k
KG9wZXJhbmQpOyB9CiAgICAgQWJzdHJhY3RWYWx1ZSYgbG9jYWwoc2l6ZV90IGluZGV4KSB7IHJl
dHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwubG9jYWwoaW5kZXgpOyB9CiAgICAgQWJzdHJhY3RW
YWx1ZSYgYXJndW1lbnQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRh
aWwuYXJndW1lbnQoaW5kZXgpOyB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAKaW5kZXggNzc0M2U3ZDAxZjFjYWQ3ODFkODRhYjAz
ZDNjMDljNzdmODAyOWJhNS4uYzJiNTVhYTVjNGE1MjI5YjFiMWE0NDMxYzE4N2FkZWY0NmMzZGIy
NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlN
YXAuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFw
LmNwcApAQCAtNjUsMTAgKzY1LDEwIEBAIHZvaWQgQXZhaWxhYmlsaXR5TWFwOjpwcnVuZUhlYXAo
KQogCiB2b2lkIEF2YWlsYWJpbGl0eU1hcDo6cHJ1bmVCeUxpdmVuZXNzKEdyYXBoJiBncmFwaCwg
Q29kZU9yaWdpbiB3aGVyZSkKIHsKLSAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGxvY2Fsc0Nv
cHkobV9sb2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwgbV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMo
KSwgQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpKTsKKyAgICBPcGVyYW5kczxBdmFpbGFiaWxp
dHk+IGxvY2Fsc0NvcHkoT3BlcmFuZHNMaWtlLCBtX2xvY2FscywgQXZhaWxhYmlsaXR5Ojp1bmF2
YWlsYWJsZSgpKTsKICAgICBncmFwaC5mb3JBbGxMaXZlSW5CeXRlY29kZSgKICAgICAgICAgd2hl
cmUsCi0gICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgeworICAgICAgICBbJl0gKE9w
ZXJhbmQgcmVnKSB7CiAgICAgICAgICAgICBsb2NhbHNDb3B5Lm9wZXJhbmQocmVnKSA9IG1fbG9j
YWxzLm9wZXJhbmQocmVnKTsKICAgICAgICAgfSk7CiAgICAgbV9sb2NhbHMgPSBXVEZNb3ZlKGxv
Y2Fsc0NvcHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFp
bGFiaWxpdHlNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5
TWFwLmgKaW5kZXggNTM1NTI1NjAyM2RkY2YyODBkYzU5NWIzM2E3YzdmZGVjNTRlNjRmMC4uODBj
MTJiZjE4MDI1YTU2MTA1OTZkYTI0ZTIzYzAyNWYyYWJlNGYyMCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5oCkBAIC02Niw5ICs2Niw5IEBAIHN0
cnVjdCBBdmFpbGFiaWxpdHlNYXAgewogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBIYXNGdW5jdG9yLCB0eXBlbmFtZSBBZGRGdW5jdG9yPgotICAgIHZvaWQgY2xvc2VTdGFydGlu
Z1dpdGhMb2NhbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBjb25zdCBIYXNGdW5jdG9yJiBoYXMsIGNv
bnN0IEFkZEZ1bmN0b3ImIGFkZCkKKyAgICB2b2lkIGNsb3NlU3RhcnRpbmdXaXRoTG9jYWwoT3Bl
cmFuZCBvcCwgY29uc3QgSGFzRnVuY3RvciYgaGFzLCBjb25zdCBBZGRGdW5jdG9yJiBhZGQpCiAg
ICAgewotICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gbV9sb2NhbHMub3BlcmFu
ZChyZWcpOworICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gbV9sb2NhbHMub3Bl
cmFuZChvcCk7CiAgICAgICAgIGlmICghYXZhaWxhYmlsaXR5Lmhhc05vZGUoKSkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jhc2ljQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNp
Y0Jsb2NrLmNwcAppbmRleCBjOGQxZDE3ZDZkOWM3NTUwYzRiMWJlNTBmMGVkOWY3MjYxNzZmMjIz
Li5lNDhlMGMyNGYwMzk3ZjUxMTdkY2ZhNzIxODI0N2U3MjlkNjVjOTNjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKQEAgLTM0LDcgKzM0LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBERUZJTkVfQUxMT0NBVE9SX1dJVEhfSEVB
UF9JREVOVElGSUVSKEJhc2ljQmxvY2spOwogCi1CYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBu
dW1Mb2NhbHMsIGZsb2F0IGV4ZWN1dGlvbkNvdW50KQorQmFzaWNCbG9jazo6QmFzaWNCbG9jayhC
eXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWdu
ZWQgbnVtTG9jYWxzLCB1bnNpZ25lZCBudW1UbXBzLCBmbG9hdCBleGVjdXRpb25Db3VudCkKICAg
ICA6IGJ5dGVjb2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKICAgICAsIGluZGV4KE5vQmxvY2spCiAg
ICAgLCBjZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdEhlYWQoU3RydWN0dXJlc0FyZVdhdGNoZWQp
CkBAIC01MCwxMSArNTAsMTEgQEAgQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4
IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWcKICAgICAsIGlzTGlu
a2VkKGZhbHNlKQogI2VuZGlmCiAgICAgLCBpc1JlYWNoYWJsZShmYWxzZSkKLSAgICAsIHZhcmlh
Ymxlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKLSAgICAsIHZhcmlhYmxlc0F0VGFp
bChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKLSAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVu
dHMsIG51bUxvY2FscykKLSAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2Fs
cykKLSAgICAsIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51
bUxvY2FscywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKQorICAgICwgdmFyaWFibGVzQXRIZWFk
KG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQorICAgICwgdmFyaWFibGVzQXRUYWls
KG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQorICAgICwgdmFsdWVzQXRIZWFkKG51
bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQorICAgICwgdmFsdWVzQXRUYWlsKG51bUFy
Z3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQorICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFs
dWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzLCBBYnN0cmFjdFZhbHVl
OjpmdWxsVG9wKCkpCiAgICAgLCBleGVjdXRpb25Db3VudChleGVjdXRpb25Db3VudCkKIHsKIH0K
QEAgLTcyLDYgKzcyLDE1IEBAIHZvaWQgQmFzaWNCbG9jazo6ZW5zdXJlTG9jYWxzKHVuc2lnbmVk
IG5ld051bUxvY2FscykKICAgICBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQuZW5zdXJl
TG9jYWxzKG5ld051bUxvY2FscywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKTsKIH0KIAordm9p
ZCBCYXNpY0Jsb2NrOjplbnN1cmVUbXBzKHVuc2lnbmVkIG5ld051bVRtcHMpCit7CisgICAgdmFy
aWFibGVzQXRIZWFkLmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAgdmFyaWFibGVzQXRUYWls
LmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAgdmFsdWVzQXRIZWFkLmVuc3VyZVRtcHMobmV3
TnVtVG1wcyk7CisgICAgdmFsdWVzQXRUYWlsLmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAg
aW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkLmVuc3VyZVRtcHMobmV3TnVtVG1wcywgQWJz
dHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKTsKK30KKwogdm9pZCBCYXNpY0Jsb2NrOjpyZXBsYWNlVGVy
bWluYWwoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogewogICAgIE5vZGVBbmRJbmRleCByZXN1
bHQgPSBmaW5kVGVybWluYWwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFzaWNCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Js
b2NrLmgKaW5kZXggZDQ1NzE3NWU4YjcxNTIzNWZjNzlkZDEyMjkwYzllZmQ5NzVlYjdjYi4uZDJj
NWFlOWMxM2YzYjRlNzc5Zjk4YTE0YzE3MDM3ZDk4Zjk2ZDlhYSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKQEAgLTQ5LDExICs0OSwxMiBAQCBERUNMQVJFX0FM
TE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihCYXNpY0Jsb2NrKTsKIHN0cnVjdCBCYXNpY0Js
b2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2NrPiB7CiAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1Rf
QUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKEJhc2ljQmxvY2spOwogICAgIEJhc2ljQmxv
Y2soCi0gICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJn
dW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMsCisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMsIHVuc2ln
bmVkIG51bVRtcHMsCiAgICAgICAgIGZsb2F0IGV4ZWN1dGlvbkNvdW50KTsKICAgICB+QmFzaWNC
bG9jaygpOwogICAgIAogICAgIHZvaWQgZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxvY2Fs
cyk7CisgICAgdm9pZCBlbnN1cmVUbXBzKHVuc2lnbmVkIG5ld051bVRtcHMpOwogICAgIAogICAg
IHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ub2Rlcy5zaXplKCk7IH0KICAgICBib29s
IGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhc2l6ZSgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwCmluZGV4IDc1MDhlMjE5ZGM3
YzU4M2RiOWVhOGZjZTY0Njg1ODk5OWUwNDYwZjkuLjAwOGNmNTIyNjk1N2M5YTgzNTg1YzVlNWUy
YzEyNWYyZjhjZTRiMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QmxvY2tJbnNlcnRpb25TZXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QmxvY2tJbnNlcnRpb25TZXQuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHZvaWQgQmxvY2tJbnNlcnRp
b25TZXQ6Omluc2VydChzaXplX3QgaW5kZXgsIFJlZjxCYXNpY0Jsb2NrPiYmIGJsb2NrKQogCiBC
YXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHNpemVfdCBpbmRleCwgZmxvYXQg
ZXhlY3V0aW9uQ291bnQpCiB7Ci0gICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYo
Km5ldyBCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXgoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFi
bGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZkxvY2FscygpLCBleGVjdXRpb25Db3VudCkpOworICAgIFJlZjxCYXNp
Y0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCks
IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLCBt
X2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSwgbV9ncmFw
aC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mVG1wcygpLCBleGVjdXRpb25Db3Vu
dCkpOwogICAgIGJsb2NrLT5pc1JlYWNoYWJsZSA9IHRydWU7CiAgICAgYXV0byogcmVzdWx0ID0g
YmxvY2sucHRyKCk7CiAgICAgaW5zZXJ0KGluZGV4LCBXVEZNb3ZlKGJsb2NrKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IDdlZmZh
ZDA3ZjIyNDI1OGYwN2EyZTA0ZjZhYmZlZTA2MGIyZmFkNTAuLjkzYmUwZWRiMWE3MjJlNzM4NTIy
Y2VhNmMwM2U3NGY5M2QzY2QyNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC0xMTMsNiArMTEzLDcgQEAgcHVibGljOgogICAgICAg
ICAsIG1fY29uc3RhbnRPbmUoZ3JhcGguZnJlZXplKGpzTnVtYmVyKDEpKSkKICAgICAgICAgLCBt
X251bUFyZ3VtZW50cyhtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKQogICAgICAgICAsIG1f
bnVtTG9jYWxzKG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkKKyAgICAgICAgLCBtX251
bVRtcHMobV9jb2RlQmxvY2stPm51bVRtcHMoKSkKICAgICAgICAgLCBtX3BhcmFtZXRlclNsb3Rz
KDApCiAgICAgICAgICwgbV9udW1QYXNzZWRWYXJBcmdzKDApCiAgICAgICAgICwgbV9pbmxpbmVT
dGFja1RvcCgwKQpAQCAtMTQxLDYgKzE0MiwxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9n
cmFwaC5ibG9jayhpKS0+ZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7CiAgICAgfQogCisgICAg
dm9pZCBlbnN1cmVUbXBzKHVuc2lnbmVkIG5ld051bVRtcHMpCisgICAgeworICAgICAgICBWRVJC
T1NFX0xPRygiICAgZW5zdXJlVG1wczogdHJ5aW5nIHRvIHJhaXNlIG1fbnVtVG1wcyBmcm9tICIs
IG1fbnVtVG1wcywgIiB0byAiLCBuZXdOdW1UbXBzLCAiXG4iKTsKKyAgICAgICAgaWYgKG5ld051
bVRtcHMgPD0gbV9udW1UbXBzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX251bVRt
cHMgPSBuZXdOdW1UbXBzOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ3JhcGgu
bnVtQmxvY2tzKCk7ICsraSkKKyAgICAgICAgICAgIG1fZ3JhcGguYmxvY2soaSktPmVuc3VyZVRt
cHMobmV3TnVtVG1wcyk7CisgICAgfQorCisKICAgICAvLyBIZWxwZXIgZm9yIG1pbiBhbmQgbWF4
LgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+CiAgICAgYm9vbCBoYW5kbGVN
aW5NYXgoVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9m
ZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBjb25zdCBDaGVja3NGdW5jdG9y
JiBpbnNlcnRDaGVja3MpOwpAQCAtMjcyLDcgKzI4NCwxNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
bGlua0Jsb2NrKEJhc2ljQmxvY2sqLCBWZWN0b3I8QmFzaWNCbG9jayo+JiBwb3NzaWJsZVRhcmdl
dHMpOwogICAgIHZvaWQgbGlua0Jsb2NrcyhWZWN0b3I8QmFzaWNCbG9jayo+JiB1bmxpbmtlZEJs
b2NrcywgVmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKTsKICAgICAKLSAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICB2b2lkIHByb2dyZXNzVG9OZXh0Q2hlY2twb2ludCgpCisgICAgeworICAg
ICAgICBtX2N1cnJlbnRJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgub2Zmc2V0
KCksIG1fY3VycmVudEluZGV4LmNoZWNrcG9pbnQoKSArIDEpOworICAgICAgICAvLyBBdCB0aGlz
IHBvaW50LCBpdCdzIGFnYWluIE9LIHRvIE9TUiBleGl0LgorICAgICAgICBtX2V4aXRPSyA9IHRy
dWU7CisgICAgICAgIGFkZFRvR3JhcGgoRXhpdE9LKTsKKworICAgICAgICBwcm9jZXNzU2V0TG9j
YWxRdWV1ZSgpOworICAgIH0KKworICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFibGVB
Y2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghb3BlcmFu
ZC5pc0NvbnN0YW50KCkpOwogICAgICAgICAKQEAgLTI4MSwxNiArMzAzLDE0IEBAIHByaXZhdGU6
CiAgICAgfQogICAgIAogICAgIC8vIEdldC9TZXQgdGhlIG9wZXJhbmRzL3Jlc3VsdCBvZiBhIGJ5
dGVjb2RlIGluc3RydWN0aW9uLgotICAgIE5vZGUqIGdldERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICBOb2RlKiBnZXREaXJlY3QoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CiAKLSAgICAgICAgLy8gSXMgdGhp
cyBhbiBhcmd1bWVudD8KICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQotICAgICAg
ICAgICAgcmV0dXJuIGdldEFyZ3VtZW50KG9wZXJhbmQpOworICAgICAgICAgICAgcmV0dXJuIGdl
dEFyZ3VtZW50KG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogCi0gICAgICAgIC8vIE11c3Qg
YmUgYSBsb2NhbC4KLSAgICAgICAgcmV0dXJuIGdldExvY2FsKG9wZXJhbmQpOworICAgICAgICBy
ZXR1cm4gZ2V0TG9jYWxPclRtcChvcGVyYW5kKTsKICAgICB9CiAKICAgICBOb2RlKiBnZXQoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCkBAIC0zMDAsOCArMzIwLDggQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIHVuc2lnbmVkIG9sZFNpemUgPSBtX2NvbnN0YW50cy5zaXplKCk7CiAgICAgICAgICAg
ICBpZiAoY29uc3RhbnRJbmRleCA+PSBvbGRTaXplIHx8ICFtX2NvbnN0YW50c1tjb25zdGFudElu
ZGV4XSkgewogICAgICAgICAgICAgICAgIGNvbnN0IENvZGVCbG9jayYgY29kZUJsb2NrID0gKm1f
aW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrOwotICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBjb2RlQmxvY2suZ2V0Q29uc3RhbnQob3BlcmFuZC5vZmZzZXQoKSk7Ci0gICAgICAgICAg
ICAgICAgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiA9
IGNvZGVCbG9jay5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihvcGVyYW5kLm9mZnNl
dCgpKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gY29kZUJsb2NrLmdldENvbnN0
YW50KG9wZXJhbmQpOworICAgICAgICAgICAgICAgIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBz
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBjb2RlQmxvY2suY29uc3RhbnRTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24ob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50SW5kZXgg
Pj0gb2xkU2l6ZSkgewogICAgICAgICAgICAgICAgICAgICBtX2NvbnN0YW50cy5ncm93KGNvbnN0
YW50SW5kZXggKyAxKTsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xk
U2l6ZTsgaSA8IG1fY29uc3RhbnRzLnNpemUoKTsgKytpKQpAQCAtMzYwLDkgKzM4MCwxMCBAQCBw
cml2YXRlOgogICAgICAgICAvLyBpbml0aWFsaXppbmcgbG9jYWxzIGF0IHRoZSB0b3Agb2YgYSBm
dW5jdGlvbi4KICAgICAgICAgSW1tZWRpYXRlTmFrZWRTZXQKICAgICB9OwotICAgIE5vZGUqIHNl
dERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0
TW9kZSA9IE5vcm1hbFNldCkKKworICAgIE5vZGUqIHNldERpcmVjdChPcGVyYW5kIG9wZXJhbmQs
IE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAgewotICAgICAg
ICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhvcGVyYW5kLm9mZnNldCgpKSwgdmFsdWUpOwor
ICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhvcGVyYW5kKSwgdmFsdWUpOwogCiAg
ICAgICAgIC8vIFdlIGNhbid0IGV4aXQgYW55bW9yZSBiZWNhdXNlIG91ciBPU1IgZXhpdCBzdGF0
ZSBoYXMgY2hhbmdlZC4KICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsKQEAgLTM3Niw3ICszOTcs
NyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgcmV0dXJuIGRlbGF5ZWQuZXhlY3V0ZSh0
aGlzKTsKICAgICB9Ci0gICAgCisKICAgICB2b2lkIHByb2Nlc3NTZXRMb2NhbFF1ZXVlKCkKICAg
ICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NldExvY2FsUXVldWUuc2l6
ZSgpOyArK2kpCkBAIC0zOTQsMTggKzQxNSwxNyBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQo
bm9kZS0+b3AoKSA9PSBHZXRMb2NhbCk7CiAgICAgICAgIEFTU0VSVChub2RlLT5vcmlnaW4uc2Vt
YW50aWMuYnl0ZWNvZGVJbmRleCgpID09IG1fY3VycmVudEluZGV4KTsKICAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1f
bG9jayk7Ci0gICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleShtX2N1cnJlbnRJ
bmRleCwgbm9kZS0+bG9jYWwoKSk7CisgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5
IGtleShtX2N1cnJlbnRJbmRleCwgbm9kZS0+b3BlcmFuZCgpKTsKICAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgcHJlZGljdGlvbiA9IG1faW5saW5lU3RhY2tUb3AtPm1fbGF6eU9wZXJhbmRzLnByZWRp
Y3Rpb24obG9ja2VyLCBrZXkpOwogICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
cHJlZGljdChwcmVkaWN0aW9uKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCiAgICAg
Ly8gVXNlZCBpbiBpbXBsZW1lbnRpbmcgZ2V0L3NldCwgYWJvdmUsIHdoZXJlIHRoZSBvcGVyYW5k
IGlzIGEgbG9jYWwgdmFyaWFibGUuCi0gICAgTm9kZSogZ2V0TG9jYWwoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCisgICAgTm9kZSogZ2V0TG9jYWxPclRtcChPcGVyYW5kIG9wZXJhbmQpCiAgICAg
ewotICAgICAgICB1bnNpZ25lZCBsb2NhbCA9IG9wZXJhbmQudG9Mb2NhbCgpOwotCi0gICAgICAg
IE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2Fs
KTsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNUbXAoKSB8fCBvcGVyYW5kLmlzTG9jYWwoKSk7
CisgICAgICAgIE5vZGUqJiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5v
cGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgLy8gVGhpcyBoYXMgdHdvIGdvYWxz
OiAxKSBsaW5rIHRvZ2V0aGVyIHZhcmlhYmxlIGFjY2VzcyBkYXRhcywgYW5kIDIpCiAgICAgICAg
IC8vIHRyeSB0byBhdm9pZCBjcmVhdGluZyByZWR1bmRhbnQgR2V0TG9jYWxzLiAoMSkgaXMgcmVx
dWlyZWQgZm9yCkBAIC00MzAsMjAgKzQ1MCwyNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgdmFy
aWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CiAgICAgICAgIAogICAgICAg
ICBub2RlID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2Fs
LCBPcEluZm8odmFyaWFibGUpKSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNB
dFRhaWwubG9jYWwobG9jYWwpID0gbm9kZTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQot
ICAgIE5vZGUqIHNldExvY2FsKGNvbnN0IENvZGVPcmlnaW4mIHNlbWFudGljT3JpZ2luLCBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1h
bFNldCkKKyAgICBOb2RlKiBzZXRMb2NhbE9yVG1wKGNvbnN0IENvZGVPcmlnaW4mIHNlbWFudGlj
T3JpZ2luLCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBO
b3JtYWxTZXQpCiAgICAgeworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8IG9wZXJh
bmQuaXNMb2NhbCgpKTsKICAgICAgICAgU2V0Rm9yU2NvcGU8Q29kZU9yaWdpbj4gb3JpZ2luQ2hh
bmdlKG1fY3VycmVudFNlbWFudGljT3JpZ2luLCBzZW1hbnRpY09yaWdpbik7CiAKLSAgICAgICAg
dW5zaWduZWQgbG9jYWwgPSBvcGVyYW5kLnRvTG9jYWwoKTsKLSAgICAgICAgCi0gICAgICAgIGlm
IChzZXRNb2RlICE9IEltbWVkaWF0ZU5ha2VkU2V0KSB7Ci0gICAgICAgICAgICBBcmd1bWVudFBv
c2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uID0gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JMb2NhbChv
cGVyYW5kKTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSAmJiBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4ob3BlcmFuZC52YWx1ZSgpKSA+PSBtX251bVRtcHMpIHsKKyAgICAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG4oKmlubGluZUNhbGxG
cmFtZSgpKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiQmFkIG9wZXJhbmQ6ICIsIG9wZXJhbmQs
ICIgYnV0IGN1cnJlbnQgbnVtYmVyIG9mIHRtcHMgaXM6ICIsIG1fbnVtVG1wcywgIiBjb2RlIGJs
b2NrIGhhczogIiwgbV9wcm9maWxlZEJsb2NrLT5udW1UbXBzKCksICIgdG1wcy4iKTsKKyAgICAg
ICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2V0TW9kZSAhPSBJbW1l
ZGlhdGVOYWtlZFNldCAmJiAhb3BlcmFuZC5pc1RtcCgpKSB7CisgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgIEFy
Z3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24gPSBmaW5kQXJndW1lbnRQb3NpdGlvbkZv
ckxvY2FsKHJlZyk7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRQb3NpdGlvbikKICAgICAgICAg
ICAgICAgICBmbHVzaERpcmVjdChvcGVyYW5kLCBhcmd1bWVudFBvc2l0aW9uKTsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKG1fZ3JhcGgubmVlZHNTY29wZVJlZ2lzdGVyKCkgJiYgb3BlcmFuZCA9PSBt
X2NvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpKQorICAgICAgICAgICAgZWxzZSBpZiAobV9ncmFw
aC5uZWVkc1Njb3BlUmVnaXN0ZXIoKSAmJiByZWcgPT0gbV9jb2RlQmxvY2stPnNjb3BlUmVnaXN0
ZXIoKSkKICAgICAgICAgICAgICAgICBmbHVzaChvcGVyYW5kKTsKICAgICAgICAgfQogCkBAIC00
NTMsNyArNDc5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJn
ZUNoZWNrQXJyYXlIb2lzdGluZ0ZhaWxlZCgKICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3At
Pm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUoc2VtYW50aWNPcmlnaW4uYnl0ZWNvZGVJbmRleCgp
LCBCYWRJbmRleGluZ1R5cGUpKTsKICAgICAgICAgTm9kZSogbm9kZSA9IGFkZFRvR3JhcGgoU2V0
TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCB2YWx1ZSk7Ci0gICAgICAgIG1fY3Vy
cmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwpID0gbm9kZTsKKyAgICAgICAg
bV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0gbm9kZTsK
ICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCkBAIC00ODUsMjAgKzUxMSwyMSBAQCBwcml2
YXRlOgogICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFy
Z3VtZW50KSA9IG5vZGU7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KLSAgICBOb2RlKiBz
ZXRBcmd1bWVudChjb25zdCBDb2RlT3JpZ2luJiBzZW1hbnRpY09yaWdpbiwgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisg
ICAgTm9kZSogc2V0QXJndW1lbnQoY29uc3QgQ29kZU9yaWdpbiYgc2VtYW50aWNPcmlnaW4sIE9w
ZXJhbmQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkK
ICAgICB7CiAgICAgICAgIFNldEZvclNjb3BlPENvZGVPcmlnaW4+IG9yaWdpbkNoYW5nZShtX2N1
cnJlbnRTZW1hbnRpY09yaWdpbiwgc2VtYW50aWNPcmlnaW4pOwogCi0gICAgICAgIHVuc2lnbmVk
IGFyZ3VtZW50ID0gb3BlcmFuZC50b0FyZ3VtZW50KCk7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciByZWcgPSBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICB1bnNpZ25lZCBhcmd1
bWVudCA9IHJlZy50b0FyZ3VtZW50KCk7CiAgICAgICAgIEFTU0VSVChhcmd1bWVudCA8IG1fbnVt
QXJndW1lbnRzKTsKICAgICAgICAgCi0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOworICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNz
RGF0YShyZWcpOwogCiAgICAgICAgIC8vIEFsd2F5cyBmbHVzaCBhcmd1bWVudHMsIGV4Y2VwdCBm
b3IgJ3RoaXMnLiBJZiAndGhpcycgaXMgY3JlYXRlZCBieSB1cywKICAgICAgICAgLy8gdGhlbiBt
YWtlIHN1cmUgdGhhdCBpdCdzIG5ldmVyIHVuYm94ZWQuCiAgICAgICAgIGlmIChhcmd1bWVudCB8
fCBtX2dyYXBoLm5lZWRzRmx1c2hlZFRoaXMoKSkgewogICAgICAgICAgICAgaWYgKHNldE1vZGUg
IT0gSW1tZWRpYXRlTmFrZWRTZXQpCi0gICAgICAgICAgICAgICAgZmx1c2hEaXJlY3Qob3BlcmFu
ZCk7CisgICAgICAgICAgICAgICAgZmx1c2hEaXJlY3QocmVnKTsKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgaWYgKCFhcmd1bWVudCAmJiBtX2NvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25L
aW5kKCkgPT0gQ29kZUZvckNvbnN0cnVjdCkKQEAgLTUzNCwxNCArNTYxLDE2IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZC5vZmZz
ZXQoKSAtIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvQXJndW1lbnQoKTsKICAgICAg
ICAgICAgIHJldHVybiBzdGFjay0+bV9hcmd1bWVudFBvc2l0aW9uc1thcmd1bWVudF07CiAgICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0K
ICAgICAKLSAgICBBcmd1bWVudFBvc2l0aW9uKiBmaW5kQXJndW1lbnRQb3NpdGlvbihWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBBcmd1bWVudFBvc2l0aW9uKiBmaW5kQXJndW1lbnRQb3Np
dGlvbihPcGVyYW5kIG9wZXJhbmQpCiAgICAgeworICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgp
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJn
dW1lbnQoKSkKICAgICAgICAgICAgIHJldHVybiBmaW5kQXJndW1lbnRQb3NpdGlvbkZvckFyZ3Vt
ZW50KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsKLSAgICAgICAgcmV0dXJuIGZpbmRBcmd1bWVudFBv
c2l0aW9uRm9yTG9jYWwob3BlcmFuZCk7CisgICAgICAgIHJldHVybiBmaW5kQXJndW1lbnRQb3Np
dGlvbkZvckxvY2FsKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEFkZEZsdXNoRGlyZWN0RnVuYz4KQEAgLTU1Miw5ICs1ODEsOSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgQVNTRVJUKCFtX2dyYXBoLmhhc0RlYnVnZ2VyRW5hYmxlZCgp
KTsKICAgICAgICAgICAgIG51bUFyZ3VtZW50cyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRz
V2l0aEZpeHVwLnNpemUoKTsKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xv
c3VyZUNhbGwpCi0gICAgICAgICAgICAgICAgYWRkRmx1c2hEaXJlY3QoaW5saW5lQ2FsbEZyYW1l
LCByZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSkpOworICAgICAgICAgICAgICAgIGFkZEZsdXNoRGlyZWN0KGlubGluZUNh
bGxGcmFtZSwgcmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKSk7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKLSAg
ICAgICAgICAgICAgICBhZGRGbHVzaERpcmVjdChpbmxpbmVDYWxsRnJhbWUsIHJlbWFwT3BlcmFu
ZChpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcykpKTsKKyAgICAgICAgICAgICAgICBhZGRGbHVzaERpcmVjdChp
bmxpbmVDYWxsRnJhbWUsIHJlbWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgbnVtQXJndW1lbnRzID0gbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVD
YWxsRnJhbWUpLT5udW1QYXJhbWV0ZXJzKCk7CiAKQEAgLTU3Nyw2ICs2MDYsNyBAQCBwcml2YXRl
OgogCiAgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2dyYXBoLmJhc2Vs
aW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICAgICAgRnVsbEJ5
dGVjb2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9IG1fZ3JhcGgubGl2ZW5lc3NGb3IoY29kZUJs
b2NrKTsKKyAgICAgICAgICAgICAgICAvLyBOb3RlOiBXZSBkb24ndCBuZWVkIHRvIGhhbmRsZSB0
bXBzIGhlcmUgYmVjYXVzZSB0bXBzIGFyZSBub3QgcmVxdWlyZWQgdG8gYmUgZmx1c2hlZCB0byB0
aGUgc3RhY2suCiAgICAgICAgICAgICAgICAgY29uc3QgYXV0byYgbGl2ZW5lc3NBdEJ5dGVjb2Rl
ID0gZnVsbExpdmVuZXNzLmdldExpdmVuZXNzKGJ5dGVjb2RlSW5kZXgsIG1fZ3JhcGguYXBwcm9w
cmlhdGVMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQob3JpZ2luLCBpc0NhbGxlck9yaWdpbikpOwog
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9jYWwgPSBjb2RlQmxvY2stPm51bUNhbGxl
ZUxvY2FscygpOyBsb2NhbC0tOykgewogICAgICAgICAgICAgICAgICAgICBpZiAobGl2ZW5lc3NB
dEJ5dGVjb2RlW2xvY2FsXSkKQEAgLTU4NiwyNyArNjE2LDI3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICB9KTsKICAgICB9CiAKLSAgICB2b2lkIGZsdXNoKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgIHZvaWQgZmx1c2goT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgZmx1c2hE
aXJlY3QobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKG9wZXJhbmQpKTsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBmbHVzaERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2
b2lkIGZsdXNoRGlyZWN0KE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIGZsdXNoRGly
ZWN0KG9wZXJhbmQsIGZpbmRBcmd1bWVudFBvc2l0aW9uKG9wZXJhbmQpKTsKICAgICB9CiAKLSAg
ICB2b2lkIGZsdXNoRGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBBcmd1bWVudFBvc2l0
aW9uKiBhcmd1bWVudFBvc2l0aW9uKQorICAgIHZvaWQgZmx1c2hEaXJlY3QoT3BlcmFuZCBvcGVy
YW5kLCBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uKQogICAgIHsKICAgICAgICAg
YWRkRmx1c2hPclBoYW50b21Mb2NhbDxGbHVzaD4ob3BlcmFuZCwgYXJndW1lbnRQb3NpdGlvbik7
CiAgICAgfQogCiAgICAgdGVtcGxhdGU8Tm9kZVR5cGUgbm9kZVR5cGU+Ci0gICAgdm9pZCBhZGRG
bHVzaE9yUGhhbnRvbUxvY2FsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBBcmd1bWVudFBvc2l0
aW9uKiBhcmd1bWVudFBvc2l0aW9uKQorICAgIHZvaWQgYWRkRmx1c2hPclBoYW50b21Mb2NhbChP
cGVyYW5kIG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24pCiAgICAg
ewogICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKICAgICAgICAgCi0gICAg
ICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQo
b3BlcmFuZCk7CisgICAgICAgIE5vZGUqJiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZTsKICAgICAgICAgCkBAIC02MTYsMjYgKzY0NiwyNSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7
CiAgICAgICAgIAogICAgICAgICBub2RlID0gYWRkVG9HcmFwaChub2RlVHlwZSwgT3BJbmZvKHZh
cmlhYmxlKSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFu
ZChvcGVyYW5kKSA9IG5vZGU7CiAgICAgICAgIGlmIChhcmd1bWVudFBvc2l0aW9uKQogICAgICAg
ICAgICAgYXJndW1lbnRQb3NpdGlvbi0+YWRkVmFyaWFibGUodmFyaWFibGUpOwogICAgIH0KIAot
ICAgIHZvaWQgcGhhbnRvbUxvY2FsRGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
IHZvaWQgcGhhbnRvbUxvY2FsRGlyZWN0KE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAg
IGFkZEZsdXNoT3JQaGFudG9tTG9jYWw8UGhhbnRvbUxvY2FsPihvcGVyYW5kLCBmaW5kQXJndW1l
bnRQb3NpdGlvbihvcGVyYW5kKSk7CiAgICAgfQogCiAgICAgdm9pZCBmbHVzaChJbmxpbmVTdGFj
a0VudHJ5KiBpbmxpbmVTdGFja0VudHJ5KQogICAgIHsKLSAgICAgICAgYXV0byBhZGRGbHVzaERp
cmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIHJlZykgeyBmbHVz
aERpcmVjdChyZWcpOyB9OworICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxp
bmVDYWxsRnJhbWUqLCBPcGVyYW5kIG9wZXJhbmQpIHsgZmx1c2hEaXJlY3Qob3BlcmFuZCk7IH07
CiAgICAgICAgIGZsdXNoSW1wbChpbmxpbmVTdGFja0VudHJ5LT5tX2lubGluZUNhbGxGcmFtZSwg
YWRkRmx1c2hEaXJlY3QpOwogICAgIH0KIAogICAgIHZvaWQgZmx1c2hGb3JUZXJtaW5hbCgpCiAg
ICAgewotICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUq
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IGZsdXNoRGlyZWN0KHJlZyk7IH07Ci0gICAgICAgIGF1
dG8gYWRkUGhhbnRvbUxvY2FsRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqLCBWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSB7IHBoYW50b21Mb2NhbERpcmVjdChyZWcpOyB9OworICAgICAgICBhdXRv
IGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqLCBPcGVyYW5kIG9wZXJhbmQp
IHsgZmx1c2hEaXJlY3Qob3BlcmFuZCk7IH07CisgICAgICAgIGF1dG8gYWRkUGhhbnRvbUxvY2Fs
RGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqLCBPcGVyYW5kIG9wZXJhbmQpIHsgcGhhbnRv
bUxvY2FsRGlyZWN0KG9wZXJhbmQpOyB9OwogICAgICAgICBmbHVzaEZvclRlcm1pbmFsSW1wbChj
dXJyZW50Q29kZU9yaWdpbigpLCBhZGRGbHVzaERpcmVjdCwgYWRkUGhhbnRvbUxvY2FsRGlyZWN0
KTsKICAgICB9CiAKQEAgLTc2Myw2ICs3OTIsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEVk
Z2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBFZGdlKGNoaWxkMykpOwogICAgICAgICByZXR1cm4g
YWRkVG9HcmFwaChyZXN1bHQpOwogICAgIH0KKyAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVUeXBl
IG9wLCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUqIGNoaWxkMSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChvcCA9PSBNb3ZIaW50KTsKKyAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgob3AsIE9wSW5mbyhv
cGVyYW5kLmtpbmQoKSksIE9wSW5mbyhvcGVyYW5kLnZhbHVlKCkpLCBjaGlsZDEpOworICAgIH0K
ICAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBPcEluZm8gaW5mbzEsIE9wSW5mbyBp
bmZvMiwgRWRnZSBjaGlsZDEsIEVkZ2UgY2hpbGQyID0gRWRnZSgpLCBFZGdlIGNoaWxkMyA9IEVk
Z2UoKSkKICAgICB7CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKQEAg
LTEwOTMsOCArMTEyNywxMCBAQCBwcml2YXRlOgogCiAgICAgLy8gVGhlIG51bWJlciBvZiBhcmd1
bWVudHMgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4KICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50
czsKLSAgICAvLyBUaGUgbnVtYmVyIG9mIGxvY2FscyAodmFycyArIHRlbXBvcmFyaWVzKSB1c2Vk
IGluIHRoZSBmdW5jdGlvbi4KKyAgICAvLyBUaGUgbnVtYmVyIG9mIGxvY2FscyAodmFycyArIHRl
bXBvcmFyaWVzKSB1c2VkIGJ5IHRoZSBieXRlY29kZSBmb3IgdGhlIGZ1bmN0aW9uLgogICAgIHVu
c2lnbmVkIG1fbnVtTG9jYWxzOworICAgIC8vIFRoZSBtYXggbnVtYmVyIG9mIHRlbXBzIHVzZWQg
Zm9yIGZvcndhcmRpbmcgZGF0YSB0byBhbiBPU1IgZXhpdCBjaGVja3BvaW50LgorICAgIHVuc2ln
bmVkIG1fbnVtVG1wczsKICAgICAvLyBUaGUgbnVtYmVyIG9mIHNsb3RzIChpbiB1bml0cyBvZiBz
aXplb2YoUmVnaXN0ZXIpKSB0aGF0IHdlIG5lZWQgdG8KICAgICAvLyBwcmVhbGxvY2F0ZSBmb3Ig
YXJndW1lbnRzIHRvIG91dGdvaW5nIGNhbGxzIGZyb20gdGhpcyBmcmFtZS4gVGhpcwogICAgIC8v
IG51bWJlciBpbmNsdWRlcyB0aGUgQ2FsbEZyYW1lIHNsb3RzIHRoYXQgd2UgaW5pdGlhbGl6ZSBm
b3IgdGhlIGNhbGxlZQpAQCAtMTE2MSwxNCArMTE5NywxNyBAQCBwcml2YXRlOgogICAgICAgICAK
ICAgICAgICAgfklubGluZVN0YWNrRW50cnkoKTsKICAgICAgICAgCi0gICAgICAgIFZpcnR1YWxS
ZWdpc3RlciByZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0CisgICAg
ICAgIE9wZXJhbmQgcmVtYXBPcGVyYW5kKE9wZXJhbmQgb3BlcmFuZCkgY29uc3QKICAgICAgICAg
ewogICAgICAgICAgICAgaWYgKCFtX2lubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gb3BlcmFuZDsKKworICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gT3BlcmFuZDo6dG1wKG9wZXJhbmQudmFsdWUoKSArIG1faW5saW5l
Q2FsbEZyYW1lLT50bXBPZmZzZXQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQo
IW9wZXJhbmQuaXNDb25zdGFudCgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghb3BlcmFuZC52aXJ0
dWFsUmVnaXN0ZXIoKS5pc0NvbnN0YW50KCkpOwogCi0gICAgICAgICAgICByZXR1cm4gVmlydHVh
bFJlZ2lzdGVyKG9wZXJhbmQub2Zmc2V0KCkgKyBtX2lubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkgKyBtX2lu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CiAgICAgICAgIH0KICAgICB9OwogICAgIApAQCAt
MTE3NywxMyArMTIxNiw4IEBAIHByaXZhdGU6CiAgICAgSUNTdGF0dXNDb250ZXh0U3RhY2sgbV9p
Y0NvbnRleHRTdGFjazsKICAgICAKICAgICBzdHJ1Y3QgRGVsYXllZFNldExvY2FsIHsKLSAgICAg
ICAgQ29kZU9yaWdpbiBtX29yaWdpbjsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFu
ZDsKLSAgICAgICAgTm9kZSogbV92YWx1ZTsKLSAgICAgICAgU2V0TW9kZSBtX3NldE1vZGU7Ci0g
ICAgICAgIAogICAgICAgICBEZWxheWVkU2V0TG9jYWwoKSB7IH0KLSAgICAgICAgRGVsYXllZFNl
dExvY2FsKGNvbnN0IENvZGVPcmlnaW4mIG9yaWdpbiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQs
IE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUpCisgICAgICAgIERlbGF5ZWRTZXRMb2NhbChj
b25zdCBDb2RlT3JpZ2luJiBvcmlnaW4sIE9wZXJhbmQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNl
dE1vZGUgc2V0TW9kZSkKICAgICAgICAgICAgIDogbV9vcmlnaW4ob3JpZ2luKQogICAgICAgICAg
ICAgLCBtX29wZXJhbmQob3BlcmFuZCkKICAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKQEAg
LTExOTYsOCArMTIzMCwxMyBAQCBwcml2YXRlOgogICAgICAgICB7CiAgICAgICAgICAgICBpZiAo
bV9vcGVyYW5kLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VyLT5z
ZXRBcmd1bWVudChtX29yaWdpbiwgbV9vcGVyYW5kLCBtX3ZhbHVlLCBtX3NldE1vZGUpOwotICAg
ICAgICAgICAgcmV0dXJuIHBhcnNlci0+c2V0TG9jYWwobV9vcmlnaW4sIG1fb3BlcmFuZCwgbV92
YWx1ZSwgbV9zZXRNb2RlKTsKKyAgICAgICAgICAgIHJldHVybiBwYXJzZXItPnNldExvY2FsT3JU
bXAobV9vcmlnaW4sIG1fb3BlcmFuZCwgbV92YWx1ZSwgbV9zZXRNb2RlKTsKICAgICAgICAgfQor
CisgICAgICAgIENvZGVPcmlnaW4gbV9vcmlnaW47CisgICAgICAgIE9wZXJhbmQgbV9vcGVyYW5k
OworICAgICAgICBOb2RlKiBtX3ZhbHVlIHsgbnVsbHB0ciB9OworICAgICAgICBTZXRNb2RlIG1f
c2V0TW9kZTsKICAgICB9OwogICAgIAogICAgIFZlY3RvcjxEZWxheWVkU2V0TG9jYWwsIDI+IG1f
c2V0TG9jYWxRdWV1ZTsKQEAgLTEyMTAsNyArMTI0OSw3IEBAIHByaXZhdGU6CiBCYXNpY0Jsb2Nr
KiBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVUYXJnZXRhYmxlQmxvY2soQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4KQogewogICAgIEFTU0VSVChieXRlY29kZUluZGV4KTsKLSAgICBSZWY8QmFz
aWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soYnl0ZWNvZGVJbmRleCwg
bV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCAxKSk7CisgICAgUmVmPEJhc2ljQmxvY2s+IGJs
b2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKGJ5dGVjb2RlSW5kZXgsIG1fbnVtQXJndW1l
bnRzLCBtX251bUxvY2FscywgbV9udW1UbXBzLCAxKSk7CiAgICAgQmFzaWNCbG9jayogYmxvY2tQ
dHIgPSBibG9jay5wdHIoKTsKICAgICAvLyBtX2Jsb2NrTGlua2luZ1RhcmdldHMgbXVzdCBhbHdh
eXMgYmUgc29ydGVkIGluIGluY3JlYXNpbmcgb3JkZXIgb2YgYnl0ZWNvZGVCZWdpbgogICAgIGlm
IChtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuc2l6ZSgpKQpAQCAtMTIy
Miw3ICsxMjYxLDcgQEAgQmFzaWNCbG9jayogQnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVGFyZ2V0
YWJsZUJsb2NrKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIAogQmFzaWNCbG9jayogQnl0
ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVW50YXJnZXRhYmxlQmxvY2soKQogewotICAgIFJlZjxCYXNp
Y0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCks
IG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2FscywgMSkpOworICAgIFJlZjxCYXNpY0Jsb2NrPiBi
bG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCksIG1fbnVtQXJn
dW1lbnRzLCBtX251bUxvY2FscywgbV9udW1UbXBzLCAxKSk7CiAgICAgQmFzaWNCbG9jayogYmxv
Y2tQdHIgPSBibG9jay5wdHIoKTsKICAgICBtX2dyYXBoLmFwcGVuZEJsb2NrKFdURk1vdmUoYmxv
Y2spKTsKICAgICByZXR1cm4gYmxvY2tQdHI7CkBAIC0xNDI1LDcgKzE0NjQsNyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVSZWN1cnNpdmVUYWlsQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9k
ZSwgQ2FsbFZhcmlhbnQgYwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzICE9IHN0YXRpY19jYXN0PGludD4oY2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcykpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAvLyBJZiB0aGUg
dGFyZ2V0IElubGluZUNhbGxGcmFtZSBpcyBWYXJhcmdzLCB3ZSBkbyBub3Qga25vdyBob3cgbWFu
eSBhcmd1bWVudHMgYXJlIGFjdHVhbGx5IGZpbGxlZCBieSBMb2FkVmFyYXJncy4gVmFyYXJncyBJ
bmxpbmVDYWxsRnJhbWUncwotICAgICAgICAgICAgLy8gYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgaXMgbWF4aW11bSBudW1iZXIgb2YgcG90ZW50aWFsbHkgZmlsbGVkIGFyZ3VtZW50cyBieSBM
b2FkVmFyYXJncy4gV2UgImNvbnRpbnVlIiB0byB0aGUgdXBwZXIgZnJhbWUgd2hpY2ggbWF5IGJl
CisgICAgICAgICAgICAvLyBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyBpcyBtYXhpbXVtIG51
bWJlciBvZiBwb3RlbnRpYWxseSBmaWxsZWQgYXJndW1lbnRzIGJ5IHhrTG9hZFZhcmFyZ3MuIFdl
ICJjb250aW51ZSIgdG8gdGhlIHVwcGVyIGZyYW1lIHdoaWNoIG1heSBiZQogICAgICAgICAgICAg
Ly8gYSBnb29kIHRhcmdldCB0byBqdW1wIGludG8uCiAgICAgICAgICAgICBpZiAoY2FsbEZyYW1l
LT5pc1ZhcmFyZ3MoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE0NTEsNyArMTQ5
MCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVJlY3Vyc2l2ZVRhaWxDYWxsKE5vZGUq
IGNhbGxUYXJnZXROb2RlLCBDYWxsVmFyaWFudCBjCiAgICAgICAgIC8vIFdlIG11c3Qgc2V0IHRo
ZSBjYWxsZWUgdG8gdGhlIHJpZ2h0IHZhbHVlCiAgICAgICAgIGlmIChzdGFja0VudHJ5LT5tX2lu
bGluZUNhbGxGcmFtZSkgewogICAgICAgICAgICAgaWYgKHN0YWNrRW50cnktPm1faW5saW5lQ2Fs
bEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgICAgIHNldERpcmVjdChzdGFja0Vu
dHJ5LT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkp
LCBjYWxsVGFyZ2V0Tm9kZSwgTm9ybWFsU2V0KTsKKyAgICAgICAgICAgICAgICBzZXREaXJlY3Qo
cmVtYXBPcGVyYW5kKHN0YWNrRW50cnktPm1faW5saW5lQ2FsbEZyYW1lLCBDYWxsRnJhbWVTbG90
OjpjYWxsZWUpLCBjYWxsVGFyZ2V0Tm9kZSwgTm9ybWFsU2V0KTsKICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICBhZGRUb0dyYXBoKFNldENhbGxlZSwgY2FsbFRhcmdldE5vZGUpOwogCkBAIC0x
NjE2LDE2ICsxNjU1LDE4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSog
Y2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIENhCiAgICAgQVNTRVJUKCEo
bnVtYmVyT2ZTdGFja1BhZGRpbmdTbG90cyAlIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkpKTsK
ICAgICBpbnQgcmVnaXN0ZXJPZmZzZXRBZnRlckZpeHVwID0gcmVnaXN0ZXJPZmZzZXQgLSBudW1i
ZXJPZlN0YWNrUGFkZGluZ1Nsb3RzOwogICAgIAotICAgIGludCBpbmxpbmVDYWxsRnJhbWVTdGFy
dCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0
ZXJPZmZzZXRBZnRlckZpeHVwKSkub2Zmc2V0KCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJl
Z2lzdGVyczsKKyAgICBPcGVyYW5kIGlubGluZUNhbGxGcmFtZVN0YXJ0ID0gVmlydHVhbFJlZ2lz
dGVyKG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0
ZXJPZmZzZXRBZnRlckZpeHVwKSkudmFsdWUoKSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVn
aXN0ZXJzKTsKICAgICAKICAgICBlbnN1cmVMb2NhbHMoCi0gICAgICAgIFZpcnR1YWxSZWdpc3Rl
cihpbmxpbmVDYWxsRnJhbWVTdGFydCkudG9Mb2NhbCgpICsgMSArCisgICAgICAgIGlubGluZUNh
bGxGcmFtZVN0YXJ0LnRvTG9jYWwoKSArIDEgKwogICAgICAgICBDYWxsRnJhbWU6OmhlYWRlclNp
emVJblJlZ2lzdGVycyArIGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpOwogICAgIAorICAg
IGVuc3VyZVRtcHMoKG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lID8gbV9pbmxp
bmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCA6IDApICsgbV9pbmxpbmVT
dGFja1RvcC0+bV9jb2RlQmxvY2stPm51bVRtcHMoKSArIGNvZGVCbG9jay0+bnVtVG1wcygpKTsK
KwogICAgIHNpemVfdCBhcmd1bWVudFBvc2l0aW9uU3RhcnQgPSBtX2dyYXBoLm1fYXJndW1lbnRQ
b3NpdGlvbnMuc2l6ZSgpOwogCiAgICAgaWYgKHJlc3VsdC5pc1ZhbGlkKCkpCi0gICAgICAgIHJl
c3VsdCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChyZXN1bHQpOworICAgICAgICBy
ZXN1bHQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQocmVzdWx0KS52aXJ0dWFsUmVn
aXN0ZXIoKTsKIAogICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogY2FsbGVlVmFyaWFibGUgPSBudWxs
cHRyOwogICAgIGlmIChjYWxsZWUuaXNDbG9zdXJlQ2FsbCgpKSB7CkBAIC0xNjM4LDcgKzE2Nzks
NyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2Rl
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYQogCiAgICAgSW5saW5lU3RhY2tFbnRyeSogY2Fs
bGVyU3RhY2tUb3AgPSBtX2lubGluZVN0YWNrVG9wOwogICAgIElubGluZVN0YWNrRW50cnkgaW5s
aW5lU3RhY2tFbnRyeSh0aGlzLCBjb2RlQmxvY2ssIGNvZGVCbG9jaywgY2FsbGVlLmZ1bmN0aW9u
KCksIHJlc3VsdCwKLSAgICAgICAgKFZpcnR1YWxSZWdpc3RlcilpbmxpbmVDYWxsRnJhbWVTdGFy
dCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGtpbmQsIGNvbnRpbnVhdGlvbkJsb2NrKTsK
KyAgICAgICAgaW5saW5lQ2FsbEZyYW1lU3RhcnQudmlydHVhbFJlZ2lzdGVyKCksIGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzLCBraW5kLCBjb250aW51YXRpb25CbG9jayk7CiAKICAgICAvLyBU
aGlzIGlzIHdoZXJlIHRoZSBhY3R1YWwgaW5saW5pbmcgcmVhbGx5IGhhcHBlbnMuCiAgICAgQnl0
ZWNvZGVJbmRleCBvbGRJbmRleCA9IG1fY3VycmVudEluZGV4OwpAQCAtMTY3Myw5ICsxNzE0LDkg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQ2EKICAgICAgICAgLy8gSG93ZXZlciwgd2hlbiB3ZSBi
ZWdpbiBleGVjdXRpbmcgdGhlIGNhbGxlZSwgd2UgbmVlZCBPU1IgZXhpdCB0byBiZSBhd2FyZSBv
ZiB3aGVyZSBpdCBjYW4gcmVjb3ZlciB0aGUgYXJndW1lbnRzIHRvIHRoZSBzZXR0ZXIsIGxvYzkg
YW5kIGxvYzEwLiBUaGUgTW92SGludHMgaW4gdGhlIGlubGluZWQKICAgICAgICAgLy8gY2FsbGVl
IG1ha2UgaXQgc28gdGhhdCBpZiB3ZSBleGl0IGF0IDxIRVJFPiwgd2UgY2FuIHJlY292ZXIgbG9j
OSBhbmQgbG9jMTAuCiAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpczsgKytpbmRleCkgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIGFyZ3VtZW50VG9HZXQgPSBjYWxsZXJTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KGluZGV4LCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAg
T3BlcmFuZCBhcmd1bWVudFRvR2V0ID0gY2FsbGVyU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAg
ICAgIE5vZGUqIHZhbHVlID0gZ2V0RGlyZWN0KGFyZ3VtZW50VG9HZXQpOwotICAgICAgICAgICAg
YWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb0dldC5vZmZzZXQoKSksIHZhbHVl
KTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9HZXQp
LCB2YWx1ZSk7CiAgICAgICAgICAgICBtX3NldExvY2FsUXVldWUuYXBwZW5kKERlbGF5ZWRTZXRM
b2NhbCB7IGN1cnJlbnRDb2RlT3JpZ2luKCksIGFyZ3VtZW50VG9HZXQsIHZhbHVlLCBJbW1lZGlh
dGVOYWtlZFNldCB9KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTE3MTksMTYgKzE3
NjAsMTYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0
Tm9kZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQ2EKICAgICAgICAgLy8gSW4gc3VjaCBjYXNl
cywgd2UgZG8gbm90IG5lZWQgdG8gbW92ZSBmcmFtZXMuCiAgICAgICAgIGlmIChyZWdpc3Rlck9m
ZnNldEFmdGVyRml4dXAgIT0gcmVnaXN0ZXJPZmZzZXQpIHsKICAgICAgICAgICAgIGZvciAoaW50
IGluZGV4ID0gMDsgaW5kZXggPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgKytpbmRleCkg
ewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudFRvR2V0ID0gY2FsbGVy
U3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCwg
cmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIGFyZ3VtZW50VG9HZXQg
PSBjYWxsZXJTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGluZGV4LCByZWdpc3Rlck9mZnNldCkpOwogICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0g
Z2V0RGlyZWN0KGFyZ3VtZW50VG9HZXQpOwotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBhcmd1bWVudFRvU2V0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KGluZGV4KSk7Ci0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChN
b3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb1NldC5vZmZzZXQoKSksIHZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBPcGVyYW5kIGFyZ3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9w
ZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgpKTsKKyAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhhcmd1bWVudFRvU2V0KSwgdmFsdWUpOwogICAg
ICAgICAgICAgICAgIG1fc2V0TG9jYWxRdWV1ZS5hcHBlbmQoRGVsYXllZFNldExvY2FsIHsgY3Vy
cmVudENvZGVPcmlnaW4oKSwgYXJndW1lbnRUb1NldCwgdmFsdWUsIEltbWVkaWF0ZU5ha2VkU2V0
IH0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGZvciAoaW50IGluZGV4ID0g
MDsgaW5kZXggPCBhcml0eUZpeHVwQ291bnQ7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBhcmd1bWVudFRvU2V0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5k
KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsg
aW5kZXgpKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50
VG9TZXQub2Zmc2V0KCkpLCB1bmRlZmluZWQpOworICAgICAgICAgICAgT3BlcmFuZCBhcmd1bWVu
dFRvU2V0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgaW5kZXgpKTsKKyAgICAgICAg
ICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9TZXQpLCB1bmRlZmluZWQp
OwogICAgICAgICAgICAgbV9zZXRMb2NhbFF1ZXVlLmFwcGVuZChEZWxheWVkU2V0TG9jYWwgeyBj
dXJyZW50Q29kZU9yaWdpbigpLCBhcmd1bWVudFRvU2V0LCB1bmRlZmluZWQsIEltbWVkaWF0ZU5h
a2VkU2V0IH0pOwogICAgICAgICB9CiAKQEAgLTE4OTUsMTIgKzE5MzYsMTIgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0lubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBW
aXJ0dWFsUmVnaXN0ZXIKICAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxWYXJpYW50LCBj
YWxsVGFyZ2V0Tm9kZSwgdGhpc0FyZ3VtZW50KTsKICAgICAgICAgCiAgICAgICAgIGludCByZW1h
cHBlZFJlZ2lzdGVyT2Zmc2V0ID0KLSAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVy
YW5kKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCkpLm9mZnNldCgpOworICAgICAgICBt
X2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zm
c2V0KSkudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7CiAgICAgICAgIAogICAgICAgICBlbnN1
cmVMb2NhbHMoVmlydHVhbFJlZ2lzdGVyKHJlbWFwcGVkUmVnaXN0ZXJPZmZzZXQpLnRvTG9jYWwo
KSk7CiAgICAgICAgIAogICAgICAgICBpbnQgYXJndW1lbnRTdGFydCA9IHJlZ2lzdGVyT2Zmc2V0
ICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnM7Ci0gICAgICAgIGludCByZW1hcHBl
ZEFyZ3VtZW50U3RhcnQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJl
Z2lzdGVyKGFyZ3VtZW50U3RhcnQpKS5vZmZzZXQoKTsKKyAgICAgICAgaW50IHJlbWFwcGVkQXJn
dW1lbnRTdGFydCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIoYXJndW1lbnRTdGFydCkpLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpOwogICAgICAgICAK
ICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX2xvYWRWYXJhcmdzRGF0
YS5hZGQoKTsKICAgICAgICAgZGF0YS0+c3RhcnQgPSBWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRB
cmd1bWVudFN0YXJ0ICsgMSk7CkBAIC0xOTA4LDExICsxOTQ5LDI0IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZVZhcmFyZ3NJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVh
bFJlZ2lzdGVyCiAgICAgICAgIGRhdGEtPm9mZnNldCA9IGFyZ3VtZW50c09mZnNldDsKICAgICAg
ICAgZGF0YS0+bGltaXQgPSBtYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKICAgICAgICAg
ZGF0YS0+bWFuZGF0b3J5TWluaW11bSA9IG1hbmRhdG9yeU1pbmltdW07Ci0gICAgICAgIAotICAg
ICAgICBpZiAoY2FsbE9wID09IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MpCi0gICAgICAgICAgICBh
ZGRUb0dyYXBoKEZvcndhcmRWYXJhcmdzLCBPcEluZm8oZGF0YSkpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBhZGRUb0dyYXBoKExvYWRWYXJhcmdzLCBPcEluZm8oZGF0YSksIGdldChhcmd1
bWVudHNBcmd1bWVudCkpOworCisgICAgICAgIGlmIChjYWxsT3AgPT0gVGFpbENhbGxGb3J3YXJk
VmFyYXJncykgeworICAgICAgICAgICAgTm9kZSogYXJndW1lbnRDb3VudDsKKyAgICAgICAgICAg
IGlmICghaW5saW5lQ2FsbEZyYW1lKCkpCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9
IGFkZFRvR3JhcGgoR2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOworICAgICAgICAgICAg
ZWxzZSBpZiAoaW5saW5lQ2FsbEZyYW1lKCktPmlzVmFyYXJncygpKQorICAgICAgICAgICAgICAg
IGFyZ3VtZW50Q291bnQgPSBnZXREaXJlY3QocmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSgp
LCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworICAgICAgICAg
ICAgZWxzZSAKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50ID0gYWRkVG9HcmFwaChKU0Nv
bnN0YW50LCBPcEluZm8obV9ncmFwaC5mcmVlemUoanNOdW1iZXIoaW5saW5lQ2FsbEZyYW1lKCkt
PmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgo
Rm9yd2FyZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSwgYXJndW1lbnRDb3VudCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBOb2RlKiBhcmd1bWVudHMgPSBnZXQoYXJndW1lbnRzQXJndW1l
bnQpOworICAgICAgICAgICAgYXV0byBhcmdDb3VudFRtcCA9IG1faW5saW5lU3RhY2tUb3AtPnJl
bWFwT3BlcmFuZChPcGVyYW5kOjp0bXAoT3BDYWxsVmFyYXJnczo6YXJnQ291bnRJbmNsdWRpbmdU
aGlzKSk7CisgICAgICAgICAgICBzZXREaXJlY3QoYXJnQ291bnRUbXAsIGFkZFRvR3JhcGgoVmFy
YXJnc0xlbmd0aCwgT3BJbmZvKGRhdGEpLCBhcmd1bWVudHMpKTsKKyAgICAgICAgICAgIHByb2dy
ZXNzVG9OZXh0Q2hlY2twb2ludCgpOworCisgICAgICAgICAgICBhZGRUb0dyYXBoKExvYWRWYXJh
cmdzLCBPcEluZm8oZGF0YSksIGdldExvY2FsT3JUbXAoYXJnQ291bnRUbXApLCBhcmd1bWVudHMp
OworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBMb2FkVmFyYXJncyBtYXkgT1NSIGV4
aXQuIEhlbmNlLCB3ZSBuZWVkIHRvIGtlZXAgYWxpdmUgY2FsbFRhcmdldE5vZGUsIHRoaXNBcmd1
bWVudAogICAgICAgICAvLyBhbmQgYXJndW1lbnRzQXJndW1lbnQgZm9yIHRoZSBiYXNlbGluZSBK
SVQuIEhvd2V2ZXIsIHdlIG9ubHkgbmVlZCBhIFBoYW50b20gZm9yCkBAIC0xOTI0LDE0ICsxOTc4
LDE0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NJbmxpbmluZyhOb2RlKiBj
YWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyCiAgICAgICAgIC8vIFNTQS4gRm9ydHVuYXRl
bHksIHdlIGFsc28gaGF2ZSBvdGhlciByZWFzb25zIGZvciBub3QgaW5zZXJ0aW5nIGNvbnRyb2wg
ZmxvdwogICAgICAgICAvLyBiZWZvcmUgU1NBLgogICAgICAgICAKLSAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiBjb3VudFZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxS
ZWdpc3RlcihyZW1hcHBlZFJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBjb3VudFZh
cmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKGRhdGEtPmNvdW50KTsKICAgICAgICAgLy8g
VGhpcyBpcyBwcmV0dHkgbGFtZSwgYnV0IGl0IHdpbGwgZm9yY2UgdGhlIGNvdW50IHRvIGJlIGZs
dXNoZWQgYXMgYW4gaW50LiBUaGlzIGRvZXNuJ3QKICAgICAgICAgLy8gbWF0dGVyIHZlcnkgbXVj
aCwgc2luY2Ugb3VyIHVzZSBvZiBhIFNldEFyZ3VtZW50RGVmaW5pdGVseSBhbmQgRmx1c2hlcyBm
b3IgdGhpcyBsb2NhbCBzbG90IGlzCiAgICAgICAgIC8vIG1vc3RseSBqdXN0IGEgZm9ybWFsaXR5
LgogICAgICAgICBjb3VudFZhcmlhYmxlLT5wcmVkaWN0KFNwZWNJbnQzMk9ubHkpOwogICAgICAg
ICBjb3VudFZhcmlhYmxlLT5tZXJnZUlzUHJvZml0YWJsZVRvVW5ib3godHJ1ZSk7CiAgICAgICAg
IE5vZGUqIHNldEFyZ3VtZW50Q291bnQgPSBhZGRUb0dyYXBoKFNldEFyZ3VtZW50RGVmaW5pdGVs
eSwgT3BJbmZvKGNvdW50VmFyaWFibGUpKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5zZXRPcGVyYW5kKGNvdW50VmFyaWFibGUtPmxvY2FsKCksIHNldEFyZ3VtZW50
Q291bnQpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJh
bmQoY291bnRWYXJpYWJsZS0+b3BlcmFuZCgpLCBzZXRBcmd1bWVudENvdW50KTsKICAgICAgICAg
CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFydCksIGdldCh0aGlzQXJn
dW1lbnQpLCBJbW1lZGlhdGVOYWtlZFNldCk7CiAgICAgICAgIHVuc2lnbmVkIG51bVNldEFyZ3Vt
ZW50cyA9IDA7CkBAIC0xOTU1LDcgKzIwMDksNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3Rlcgog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBOb2RlKiBzZXRBcmd1bWVu
dCA9IGFkZFRvR3JhcGgobnVtU2V0QXJndW1lbnRzID49IG1hbmRhdG9yeU1pbmltdW0gPyBTZXRB
cmd1bWVudE1heWJlIDogU2V0QXJndW1lbnREZWZpbml0ZWx5LCBPcEluZm8odmFyaWFibGUpKTsK
LSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZCh2
YXJpYWJsZS0+bG9jYWwoKSwgc2V0QXJndW1lbnQpOworICAgICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCksIHNldEFy
Z3VtZW50KTsKICAgICAgICAgICAgICsrbnVtU2V0QXJndW1lbnRzOwogICAgICAgICB9CiAgICAg
fTsKQEAgLTIwNTUsNyArMjEwOSw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpDYWxsT3B0aW1pemF0aW9u
UmVzdWx0IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZygKICAgICAvLyB5ZXQuCiAgICAg
VkVSQk9TRV9MT0coIlJlZ2lzdGVyIG9mZnNldDogIiwgcmVnaXN0ZXJPZmZzZXQpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBjYWxsZWVSZWcocmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpOwotICAgIGNhbGxlZVJlZyA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChj
YWxsZWVSZWcpOworICAgIGNhbGxlZVJlZyA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFu
ZChjYWxsZWVSZWcpLnZpcnR1YWxSZWdpc3RlcigpOwogICAgIFZFUkJPU0VfTE9HKCJDYWxsZWUg
aXMgZ29pbmcgdG8gYmUgIiwgY2FsbGVlUmVnLCAiXG4iKTsKICAgICBzZXREaXJlY3QoY2FsbGVl
UmVnLCBjYWxsVGFyZ2V0Tm9kZSwgSW1tZWRpYXRlU2V0V2l0aEZsdXNoKTsKIApAQCAtNTE1OCw3
ICs1MjEyLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1p
dCkKICAgICAgICAgY2FzZSBvcF9uZXdfcmVnZXhwOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsKICAgICAgICAgICAg
IEFTU0VSVChieXRlY29kZS5tX3JlZ2V4cC5pc0NvbnN0YW50KCkpOwotICAgICAgICAgICAgRnJv
emVuVmFsdWUqIGZyb3plblJlZ0V4cCA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3Rh
Y2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX3JlZ2V4cC5vZmZzZXQo
KSkpOworICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plblJlZ0V4cCA9IG1fZ3JhcGguZnJl
ZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRl
Y29kZS5tX3JlZ2V4cCkpOwogICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dy
YXBoKE5ld1JlZ2V4cCwgT3BJbmZvKGZyb3plblJlZ0V4cCksIGpzQ29uc3RhbnQoanNOdW1iZXIo
MCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXdfcmVnZXhwKTsKICAgICAgICAg
fQpAQCAtNjIzOSw3ICs2MjkzLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZCBsaW1pdCkKIAogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3VycmVudEJs
b2NrLT5zaXplKCkgfHwgKG1fZ3JhcGguY29tcGlsYXRpb24oKSAmJiBtX2N1cnJlbnRCbG9jay0+
c2l6ZSgpID09IDEgJiYgbV9jdXJyZW50QmxvY2stPmF0KDApLT5vcCgpID09IENvdW50RXhlY3V0
aW9uKSk7CiAKLSAgICAgICAgICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZl
ciA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9idWZmZXI7CisgICAgICAgICAgICBW
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1l
dGFkYXRhKGNvZGVCbG9jaykubV9idWZmZXI7CiAKICAgICAgICAgICAgIGlmICghYnVmZmVyKSB7
CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2F0Y2gpOyAvLyBUaGlzIGNhdGNoIGhh
cyB5ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1h
aW4gdGhyZWFkLgpAQCAtNjI1Niw3ICs2MzEwLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9j
ay0+bV9sb2NrKTsKIAotICAgICAgICAgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBidWZmZXItPmZv
ckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAg
ICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQocHJvZmlsZS5tX29wZXJh
bmQpOwogICAgICAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gcHJv
ZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpKQpAQCAtNjI4NCwxNCArNjMzOCwxNCBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgbV9l
eGl0T0sgPSBmYWxzZTsgCiAKICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzID0g
MDsKLSAgICAgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJh
bmQmIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKHByb2ZpbGUubV9vcGVyYW5kKTsKICAgICAgICAgICAgICAgICBp
ZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgICAgICBBU1NFUlQob3BlcmFuZC5pc0xvY2FsKCkpOwogICAgICAgICAgICAgICAg
IE5vZGUqIHZhbHVlID0gYWRkVG9HcmFwaChFeHRyYWN0Q2F0Y2hMb2NhbCwgT3BJbmZvKG51bWJl
ck9mTG9jYWxzKSwgT3BJbmZvKGxvY2FsUHJlZGljdGlvbnNbbnVtYmVyT2ZMb2NhbHNdKSk7CiAg
ICAgICAgICAgICAgICAgKytudW1iZXJPZkxvY2FsczsKLSAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKE1vdkhpbnQsIE9wSW5mbyhwcm9maWxlLm1fb3BlcmFuZCksIHZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhvcGVyYW5kKSwgdmFsdWUpOwogICAg
ICAgICAgICAgICAgIGxvY2Fsc1RvU2V0LnVuY2hlY2tlZEFwcGVuZChzdGQ6Om1ha2VfcGFpcihv
cGVyYW5kLCB2YWx1ZSkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAobnVtYmVy
T2ZMb2NhbHMpCkBAIC02NDE5LDcgKzY0NzMsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3Bfam5l
cV9wdHI6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSm5lcVB0cj4oKTsKLSAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW5Qb2ludGVy
ID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdl
dENvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIub2Zmc2V0KCkpKTsKKyAgICAgICAg
ICAgIEZyb3plblZhbHVlKiBmcm96ZW5Qb2ludGVyID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9p
bmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lh
bFBvaW50ZXIpKTsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRh
cmdldChieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0g
Z2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgICAgICAgICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRh
KGNvZGVCbG9jaykubV9oYXNKdW1wZWQpIHsKQEAgLTY4ODcsOCArNjk0MSw4IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgIGNhc2Ugb3Bf
Y3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50PigpOwog
ICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlLm1fc3ltYm9sVGFibGUuaXNDb25zdGFudCgpICYm
IGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlLmlzQ29uc3RhbnQoKSk7Ci0gICAgICAgICAgICBGcm96
ZW5WYWx1ZSogc3ltYm9sVGFibGUgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNr
VG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZS5vZmZz
ZXQoKSkpOwotICAgICAgICAgICAgRnJvemVuVmFsdWUqIGluaXRpYWxWYWx1ZSA9IG1fZ3JhcGgu
ZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChi
eXRlY29kZS5tX2luaXRpYWxWYWx1ZS5vZmZzZXQoKSkpOworICAgICAgICAgICAgRnJvemVuVmFs
dWUqIHN5bWJvbFRhYmxlID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+
bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3ltYm9sVGFibGUpKTsKKyAgICAg
ICAgICAgIEZyb3plblZhbHVlKiBpbml0aWFsVmFsdWUgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyht
X2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9pbml0
aWFsVmFsdWUpKTsKICAgICAgICAgICAgIE5vZGUqIHNjb3BlID0gZ2V0KGJ5dGVjb2RlLm1fc2Nv
cGUpOwogICAgICAgICAgICAgTm9kZSogbGV4aWNhbEVudmlyb25tZW50ID0gYWRkVG9HcmFwaChD
cmVhdGVBY3RpdmF0aW9uLCBPcEluZm8oc3ltYm9sVGFibGUpLCBPcEluZm8oaW5pdGlhbFZhbHVl
KSwgc2NvcGUpOwogICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBsZXhpY2FsRW52aXJv
bm1lbnQpOwpAQCAtNjkxOCw3ICs2OTcyLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIC8vIGxvYWRzIGZyb20gdGhlIHNjb3Bl
IHJlZ2lzdGVyIGxhdGVyLCBhcyB0aGF0IHdvdWxkIHByZXZlbnQgdGhlIERGRyBmcm9tIHRyYWNr
aW5nIHRoZQogICAgICAgICAgICAgLy8gYnl0ZWNvZGUtbGV2ZWwgbGl2ZW5lc3Mgb2YgdGhlIHNj
b3BlIHJlZ2lzdGVyLgogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKLSAgICAgICAgICAgIE5vZGUqIGNhbGxlZSA9IGdldChW
aXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgICAgICBOb2Rl
KiBjYWxsZWUgPSBnZXQoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKICAgICAgICAgICAgIE5vZGUq
IHJlc3VsdDsKICAgICAgICAgICAgIGlmIChKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGNhbGxlZS0+
ZHluYW1pY0Nhc3RDb25zdGFudDxKU0Z1bmN0aW9uKj4oKm1fdm0pKQogICAgICAgICAgICAgICAg
IHJlc3VsdCA9IHdlYWtKU0NvbnN0YW50KGZ1bmN0aW9uLT5zY29wZSgpKTsKQEAgLTczNDMsOCAr
NzM5NywxMCBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tF
bnRyeSgKICAgICAgICAgLy8gVGhlIG93bmVyIGlzIHRoZSBtYWNoaW5lIGNvZGUgYmxvY2ssIGFu
ZCB3ZSBhbHJlYWR5IGhhdmUgYSBiYXJyaWVyIG9uIHRoYXQgd2hlbiB0aGUKICAgICAgICAgLy8g
cGxhbiBmaW5pc2hlcy4KICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJs
b2NrLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSk7
CisgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5zZXRUbXBPZmZzZXQoKG1fY2FsbGVyLT5tX2lu
bGluZUNhbGxGcmFtZSA/IG1fY2FsbGVyLT5tX2lubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0IDog
MCkgKyBtX2NhbGxlci0+bV9jb2RlQmxvY2stPm51bVRtcHMoKSk7CiAgICAgICAgIG1faW5saW5l
Q2FsbEZyYW1lLT5zZXRTdGFja09mZnNldChpbmxpbmVDYWxsRnJhbWVTdGFydC5vZmZzZXQoKSAt
IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKTsKICAgICAgICAgbV9pbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXM7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyA9PSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAg
ICAgIGlmIChjYWxsZWUpIHsKICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVS
ZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGNhbGxlZSk7CiAgICAgICAgICAgICBt
X2lubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCA9IGZhbHNlOwpAQCAtNzcwNiw3ICs3NzYy
LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICAgICAgICAgICAgICBO
b2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CiAKICAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YShtX2dyYXBoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG5v
ZGUtPm9wZXJhbmQoKSkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKIAogICAgICAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBGb3JjZU9TUkV4aXQpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKQEAgLTc3MjYsMjQgKzc3ODIsMjQgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHN1Y2Nlc3Nvci0+cHJlZGVjZXNzb3JzLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBhdXRvIGluc2VydExpdmVuZXNzUHJlc2Vydmlu
Z09wID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgTm9kZVR5cGUgb3As
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5z
ZXJ0TGl2ZW5lc3NQcmVzZXJ2aW5nT3AgPSBbJl0gKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lLCBOb2RlVHlwZSBvcCwgT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbWFwcGluZy5vcGVyYW5kKG9w
ZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJsZSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9w
ZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChvcGVy
YW5kKSA9IHZhcmlhYmxlOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnQgPSBvcGVyYW5kIC0gKGlubGlu
ZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnQgPSB1bm1hcE9wZXJhbmQoaW5saW5lQ2Fs
bEZyYW1lLCBvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudC5p
c0FyZ3VtZW50KCkgJiYgIWFyZ3VtZW50LmlzSGVhZGVyKCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBWZWN0b3I8QXJndW1lbnRQb3NpdGlvbio+JiBhcmd1bWVudHMgPSBt
X2lubGluZUNhbGxGcmFtZVRvQXJndW1lbnRQb3NpdGlvbnMuZ2V0KGlubGluZUNhbGxGcmFtZSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzW2FyZ3VtZW50LnRvQXJndW1l
bnQoKV0tPmFkZFZhcmlhYmxlKHZhcmlhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRl
eCwgU3BlY05vbmUsIG9wLCBvcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSkpOwogICAgICAgICAgICAg
ICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZd
IChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0TGl2ZW5lc3NQcmVzZXJ2aW5nT3AoaW5saW5lQ2FsbEZy
YW1lLCBGbHVzaCwgb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAg
ICAgICAgICAgIGF1dG8gYWRkUGhhbnRvbUxvY2FsRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgYXV0byBhZGRQaGFudG9tTG9jYWxEaXJlY3QgPSBbJl0gKElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGluc2VydExpdmVuZXNzUHJlc2VydmluZ09wKGlubGluZUNhbGxGcmFtZSwgUGhh
bnRvbUxvY2FsLCBvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAg
ICAgICAgICAgZmx1c2hGb3JUZXJtaW5hbEltcGwob3JpZ2luLnNlbWFudGljLCBhZGRGbHVzaERp
cmVjdCwgYWRkUGhhbnRvbUxvY2FsRGlyZWN0KTsKQEAgLTc4MDgsNiArNzg2NCw3IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICAgICAgQVNTRVJUKGJsb2NrLT52YXJpYWJsZXNB
dFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKSA9PSBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNB
dEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgfQogCisgICAgbV9ncmFwaC5tX3RtcHMg
PSBtX251bVRtcHM7CiAgICAgbV9ncmFwaC5tX2xvY2FsVmFycyA9IG1fbnVtTG9jYWxzOwogICAg
IG1fZ3JhcGgubV9wYXJhbWV0ZXJTbG90cyA9IG1fcGFyYW1ldGVyU2xvdHM7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCmluZGV4IGEyNDAxNDkyMTM4MzZiNjFl
NzVjMmI4ODc2NTM0NzNlMjBlZDViMTEuLjRiZGI3YmFkNGRjOTA4OTgwNDg4OGYzNmEwYWRhMmYy
MjM4ODM2NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhh
c2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCkBA
IC0xNzAsMjIgKzE3MCwyMiBAQCBwcml2YXRlOgogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxz
ZTsKICAgICAgICAgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxl
VmFsdWVzID0gbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcygpOwogICAgICAgICBmb3Ig
KHNpemVfdCBpID0gbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAg
IGludCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAg
ICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRl
eChpKTsKICAgICAgICAgICAgIE9wdGlvbmFsPEpTVmFsdWU+IHZhbHVlID0gbXVzdEhhbmRsZVZh
bHVlc1tpXTsKICAgICAgICAgICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgICAgICAgICBpZiAo
bV92ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBOb3QgbGl2ZSBpbiBi
eXRlY29kZTogIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCAiXG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgTm90IGxpdmUgaW4gYnl0ZWNvZGU6ICIsIG9wZXJhbmQsICJc
biIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChvcGVyYW5kKTsK
ICAgICAgICAgICAgIGlmICghbm9kZSkgewogICAgICAgICAgICAgICAgIGlmIChtX3ZlcmJvc2Up
Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIE5vdCBsaXZlOiAiLCBWaXJ0dWFsUmVn
aXN0ZXIob3BlcmFuZCksICJcbiIpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBO
b3QgbGl2ZTogIiwgb3BlcmFuZCwgIlxuIik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChtX3ZlcmJvc2UpCi0g
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgV2lkZW5pbmcgIiwgVmlydHVhbFJlZ2lzdGVyKG9w
ZXJhbmQpLCAiIHdpdGggIiwgdmFsdWUudmFsdWUoKSwgIlxuIik7CisgICAgICAgICAgICAgICAg
ZGF0YUxvZygiICAgV2lkZW5pbmcgIiwgb3BlcmFuZCwgIiB3aXRoICIsIHZhbHVlLnZhbHVlKCks
ICJcbiIpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiB0YXJnZXQg
PSBibG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICBjaGFu
Z2VkIHw9IHRhcmdldC5tZXJnZU9TUkVudHJ5VmFsdWUobV9ncmFwaCwgdmFsdWUudmFsdWUoKSwg
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCksIG5vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAKaW5kZXggZDk4ZmQ0YWY0
NDBmMDdjYmMxNmI2N2Q2MDJiYTY0MjZhZjBmMjM4Mi4uODczZmEwNDMwNThhMGZkMThlNGRmMTIz
M2RlNmY5Njc2YTJiZGUwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCkBAIC01NCw4ICs1NCw5IEBAIHB1YmxpYzoKICAg
ICAgICAgbV9ncmFwaC5jbGVhclJlcGxhY2VtZW50cygpOwogICAgICAgICBjYW5vbmljYWxpemVM
b2NhbHNJbkJsb2NrcygpOwogICAgICAgICBzcGVjaWFsQ2FzZUFyZ3VtZW50cygpOwotICAgICAg
ICBwcm9wYWdhdGVQaGlzPExvY2FsT3BlcmFuZD4oKTsKLSAgICAgICAgcHJvcGFnYXRlUGhpczxB
cmd1bWVudE9wZXJhbmQ+KCk7CisgICAgICAgIHByb3BhZ2F0ZVBoaXM8T3BlcmFuZEtpbmQ6Okxv
Y2FsPigpOworICAgICAgICBwcm9wYWdhdGVQaGlzPE9wZXJhbmRLaW5kOjpBcmd1bWVudD4oKTsK
KyAgICAgICAgcHJvcGFnYXRlUGhpczxPcGVyYW5kS2luZDo6VG1wPigpOwogICAgICAgICBjb21w
dXRlSXNGbHVzaGVkKCk7CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLm1fZm9ybSA9IFRocmVh
ZGVkQ1BTOwpAQCAtMjExLDEwICsyMTIsMjAgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNhbm9uaWNh
bGl6ZUdldExvY2FsKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIGlmICh2
YXJpYWJsZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkpCi0gICAgICAgICAgICBjYW5vbmljYWxpemVH
ZXRMb2NhbEZvcjxBcmd1bWVudE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9j
YWwoKS50b0FyZ3VtZW50KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYW5vbmljYWxp
emVHZXRMb2NhbEZvcjxMb2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9j
YWwoKS50b0xvY2FsKCkpOworICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT5vcGVyYW5kKCkua2lu
ZCgpKSB7CisgICAgICAgIGNhc2UgT3BlcmFuZEtpbmQ6OkFyZ3VtZW50OiB7CisgICAgICAgICAg
ICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxPcGVyYW5kS2luZDo6QXJndW1lbnQ+KG5vZGUsIHZh
cmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgpLnRvQXJndW1lbnQoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE9wZXJhbmRLaW5kOjpMb2NhbDogeworICAg
ICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8T3BlcmFuZEtpbmQ6OkxvY2FsPihub2Rl
LCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS50b0xvY2FsKCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBPcGVyYW5kS2luZDo6VG1wOiB7CisgICAg
ICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxPcGVyYW5kS2luZDo6VG1wPihub2RlLCB2
YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS52YWx1ZSgpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8Tm9kZVR5
cGUgbm9kZVR5cGUsIE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgpAQCAtMjI5LDYgKzI0MCw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIEZsdXNoOgogICAgICAgICAgICAgY2FzZSBQaGFu
dG9tTG9jYWw6CiAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgICAgIEFT
U0VSVChvdGhlck5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICAgICAgb3RoZXJO
b2RlID0gb3RoZXJOb2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjcwLDE1ICsyODIsMjUgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWwoTm9kZSogbm9kZSkKICAgICB7
CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkK
LSAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUs
IEFyZ3VtZW50T3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5sb2NhbCgpLnRvQXJn
dW1lbnQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQ
aGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIExvY2FsT3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZh
cmlhYmxlLT5sb2NhbCgpLnRvTG9jYWwoKSk7CisgICAgICAgIHN3aXRjaCAodmFyaWFibGUtPm9w
ZXJhbmQoKS5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBPcGVyYW5kS2luZDo6QXJndW1lbnQ6IHsK
KyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUs
IE9wZXJhbmRLaW5kOjpBcmd1bWVudD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5k
KCkudG9Bcmd1bWVudCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2UgT3BlcmFuZEtpbmQ6OkxvY2FsOiB7CisgICAgICAgICAgICBjYW5vbmljYWxpemVGbHVz
aE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBPcGVyYW5kS2luZDo6TG9jYWw+KG5vZGUsIHZh
cmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE9wZXJhbmRLaW5kOjpUbXA6IHsKKyAgICAgICAg
ICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIE9wZXJhbmRL
aW5kOjpUbXA+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgpLnZhbHVlKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KICAgICAKICAg
ICB2b2lkIGNhbm9uaWNhbGl6ZVNldChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgbV9ibG9j
ay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQobm9kZS0+bG9jYWwoKSwgbm9kZSk7CisgICAg
ICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSwg
bm9kZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY2Fub25pY2FsaXplTG9jYWxzSW5CbG9jaygp
CkBAIC0yODcsOCArMzA5LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgQVNTRVJUKG1fYmxvY2stPmlzUmVhY2hhYmxlKTsKICAgICAgICAgCi0gICAgICAgIGNsZWFy
VmFyaWFibGVzPEFyZ3VtZW50T3BlcmFuZD4oKTsKLSAgICAgICAgY2xlYXJWYXJpYWJsZXM8TG9j
YWxPcGVyYW5kPigpOworICAgICAgICBjbGVhclZhcmlhYmxlczxPcGVyYW5kS2luZDo6QXJndW1l
bnQ+KCk7CisgICAgICAgIGNsZWFyVmFyaWFibGVzPE9wZXJhbmRLaW5kOjpMb2NhbD4oKTsKKyAg
ICAgICAgY2xlYXJWYXJpYWJsZXM8T3BlcmFuZEtpbmQ6OlRtcD4oKTsKICAgICAgICAgCiAgICAg
ICAgIC8vIEFzc3VtZXMgdGhhdCBhbGwgcGhpIHJlZmVyZW5jZXMgaGF2ZSBiZWVuIHJlbW92ZWQu
IEFzc3VtZXMgdGhhdCB0aGluZ3MgdGhhdAogICAgICAgICAvLyBzaG91bGQgYmUgbGl2ZSBoYXZl
IGEgbm9uLXplcm8gcmVmIGNvdW50LCBidXQgZG9lc24ndCBhc3N1bWUgdGhhdCB0aGUgcmVmCkBA
IC0zODgsNyArNDExLDcgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVy
YW5kS2luZD4KICAgICB2b2lkIHByb3BhZ2F0ZVBoaXMoKQogICAgIHsKLSAgICAgICAgVmVjdG9y
PFBoaVN0YWNrRW50cnksIDEyOD4mIHBoaVN0YWNrID0gb3BlcmFuZEtpbmQgPT0gQXJndW1lbnRP
cGVyYW5kID8gbV9hcmd1bWVudFBoaVN0YWNrIDogbV9sb2NhbFBoaVN0YWNrOworICAgICAgICBW
ZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiYgcGhpU3RhY2sgPSBwaGlTdGFja0ZvcjxvcGVyYW5k
S2luZD4oKTsKICAgICAgICAgCiAgICAgICAgIC8vIEVuc3VyZSB0aGF0IGF0dGVtcHRzIHRvIHVz
ZSB0aGlzIGZhaWwgaW5zdGFudGx5LgogICAgICAgICBtX2Jsb2NrID0gMDsKQEAgLTQ2Niw5ICs0
ODksMTIgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4K
ICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiYgcGhpU3RhY2tGb3IoKQogICAgIHsKLSAg
ICAgICAgaWYgKG9wZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCkKLSAgICAgICAgICAgIHJl
dHVybiBtX2FyZ3VtZW50UGhpU3RhY2s7Ci0gICAgICAgIHJldHVybiBtX2xvY2FsUGhpU3RhY2s7
CisgICAgICAgIHN3aXRjaCAob3BlcmFuZEtpbmQpIHsKKyAgICAgICAgY2FzZSBPcGVyYW5kS2lu
ZDo6QXJndW1lbnQ6IHJldHVybiBtX2FyZ3VtZW50UGhpU3RhY2s7CisgICAgICAgIGNhc2UgT3Bl
cmFuZEtpbmQ6OkxvY2FsOiByZXR1cm4gbV9sb2NhbFBoaVN0YWNrOworICAgICAgICBjYXNlIE9w
ZXJhbmRLaW5kOjpUbXA6IHJldHVybiBtX3RtcFBoaVN0YWNrOworICAgICAgICB9CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29t
cHV0ZUlzRmx1c2hlZCgpCkBAIC01MjEsNiArNTQ3LDcgQEAgcHJpdmF0ZToKICAgICBCYXNpY0Js
b2NrKiBtX2Jsb2NrOwogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+IG1fYXJndW1lbnRQ
aGlTdGFjazsKICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiBtX2xvY2FsUGhpU3RhY2s7
CisgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4gbV90bXBQaGlTdGFjazsKICAgICBWZWN0
b3I8Tm9kZSosIDEyOD4gbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0OwogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAppbmRleCAyMzgxYzZiOGY4ZjRiYTc2MzRi
YjY2YjEyMzk0NzFiNWE2MTY2N2NlLi40Y2NlMTc0ODgzZTIwNDEwZDYyMjNhNmY0MTcyZWRkZTY5
OGFhZWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcApAQCAt
MTQ3LDggKzE0Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IFN0YWNrOiB7CiAgICAgICAgICAgICBBU1NFUlQoIWhlYXAucGF5bG9hZCgpLmlzVG9wKCkpOwot
ICAgICAgICAgICAgQVNTRVJUKGhlYXAucGF5bG9hZCgpLnZhbHVlKCkgPT0gaGVhcC5wYXlsb2Fk
KCkudmFsdWUzMigpKTsKLSAgICAgICAgICAgIG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAucmVtb3Zl
KGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7CisgICAgICAgICAgICBtX2Fic3RyYWN0SGVhcFN0
YWNrTWFwLnJlbW92ZShoZWFwLnBheWxvYWQoKS52YWx1ZSgpKTsKICAgICAgICAgICAgIGlmIChj
bG9iYmVyQ29uc2VydmF0aXZlbHkpCiAgICAgICAgICAgICAgICAgbV9mYWxsYmFja1N0YWNrTWFw
LmNsZWFyKCk7CiAgICAgICAgICAgICBlbHNlCkBAIC0xNzIsNyArMTcxLDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIGlmICghY2xvYmJlckNvbnNlcnZhdGl2ZWx5KQogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBpZiAocGFpci5rZXkuaGVhcCgpLmtpbmQo
KSA9PSBTdGFjaykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9hYnN0
cmFjdEhlYXBTdGFja01hcC5maW5kKHBhaXIua2V5LmhlYXAoKS5wYXlsb2FkKCkudmFsdWUzMigp
KTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fYWJzdHJhY3RIZWFwU3Rh
Y2tNYXAuZmluZChwYWlyLmtleS5oZWFwKCkucGF5bG9hZCgpLnZhbHVlKCkpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoaXRlcmF0b3IgIT0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5lbmQoKSAm
JiBpdGVyYXRvci0+dmFsdWUtPmtleSA9PSBwYWlyLmtleSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0y
MjYsOCArMjI1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEFic3RyYWN0SGVhcCBhYnN0cmFj
dEhlYXAgPSBsb2NhdGlvbi5oZWFwKCk7CiAgICAgICAgICAgICBpZiAoYWJzdHJhY3RIZWFwLnBh
eWxvYWQoKS5pc1RvcCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBhZGQobV9mYWxsYmFja1N0
YWNrTWFwLCBsb2NhdGlvbiwgbm9kZSk7Ci0gICAgICAgICAgICBBU1NFUlQoYWJzdHJhY3RIZWFw
LnBheWxvYWQoKS52YWx1ZSgpID09IGFic3RyYWN0SGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKTsK
LSAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5hZGQo
YWJzdHJhY3RIZWFwLnBheWxvYWQoKS52YWx1ZTMyKCksIG51bGxwdHIpOworICAgICAgICAgICAg
YXV0byBhZGRSZXN1bHQgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmFkZChhYnN0cmFjdEhlYXAu
cGF5bG9hZCgpLnZhbHVlKCksIG51bGxwdHIpOwogICAgICAgICAgICAgaWYgKGFkZFJlc3VsdC5p
c05ld0VudHJ5KSB7CiAgICAgICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5y
ZXNldChuZXcgSW1wdXJlRGF0YVNsb3Qge2xvY2F0aW9uLCBub2RlLCAwfSk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yNDksOCArMjQ3LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgY2FzZSBTaWRlU3RhdGU6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICBjYXNlIFN0YWNrOiB7Ci0gICAgICAgICAgICBBU1NFUlQobG9jYXRpb24u
aGVhcCgpLnBheWxvYWQoKS52YWx1ZSgpID09IGxvY2F0aW9uLmhlYXAoKS5wYXlsb2FkKCkudmFs
dWUzMigpKTsKLSAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Fic3RyYWN0SGVhcFN0YWNr
TWFwLmZpbmQobG9jYXRpb24uaGVhcCgpLnBheWxvYWQoKS52YWx1ZTMyKCkpOworICAgICAgICAg
ICAgYXV0byBpdGVyYXRvciA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZmluZChsb2NhdGlvbi5o
ZWFwKCkucGF5bG9hZCgpLnZhbHVlKCkpOwogICAgICAgICAgICAgaWYgKGl0ZXJhdG9yICE9IG1f
YWJzdHJhY3RIZWFwU3RhY2tNYXAuZW5kKCkKICAgICAgICAgICAgICAgICAmJiBpdGVyYXRvci0+
dmFsdWUtPmtleSA9PSBsb2NhdGlvbikKICAgICAgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3It
PnZhbHVlLT52YWx1ZTsKQEAgLTI5OCw3ICsyOTUsNyBAQCBwcml2YXRlOgogICAgIC8vIGEgZHVw
bGljYXRlIGluIHRoZSBwYXN0IGFuZCBub3cgb25seSBsaXZlIGluIG1fZmFsbGJhY2tTdGFja01h
cC4KICAgICAvLwogICAgIC8vIE9idmlvdXNseSwgVE9QIGFsd2F5cyBnb2VzIGludG8gbV9mYWxs
YmFja1N0YWNrTWFwIHNpbmNlIGl0IGRvZXMgbm90IGhhdmUgYSB1bmlxdWUgdmFsdWUuCi0gICAg
SGFzaE1hcDxpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8SW1wdXJlRGF0YVNsb3Q+LCBEZWZhdWx0
SGFzaDxpbnQzMl90Pjo6SGFzaCwgV1RGOjpTaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8aW50
MzJfdD4+IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXA7CisgICAgSGFzaE1hcDxpbnQ2NF90LCBzdGQ6
OnVuaXF1ZV9wdHI8SW1wdXJlRGF0YVNsb3Q+LCBEZWZhdWx0SGFzaDxpbnQ2NF90Pjo6SGFzaCwg
V1RGOjpTaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8aW50NjRfdD4+IG1fYWJzdHJhY3RIZWFw
U3RhY2tNYXA7CiAgICAgTWFwIG1fZmFsbGJhY2tTdGFja01hcDsKIAogICAgIE1hcCBtX2hlYXBN
YXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGll
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKaW5k
ZXggYjE4MjMxN2I5ZmY4NDE2YTU5NzQxNjFlM2RjMmI4YTU3M2Y1YWU4ZC4uY2U1ZjZhYWE2ODgy
NzNkOWJlNzBlZDQ4YWIxOWY1NjI2MWNkZmFjNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcApAQCAtMzA4LDYgKzMwOCw4IEBAIENhcGFiaWxpdHlM
ZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJs
b2NrLCBjb25zdCBJCiAgICAgY2FzZSBsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmU6
CiAgICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmU6CiAgICAg
Y2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBj
YXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZToKKyAg
ICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBvbGluZToKICAgICBjYXNlIGhhbmRsZVVu
Y2F1Z2h0RXhjZXB0aW9uOgogICAgIGNhc2Ugb3BfY2FsbF9yZXR1cm5fbG9jYXRpb246CiAgICAg
Y2FzZSBvcF9jb25zdHJ1Y3RfcmV0dXJuX2xvY2F0aW9uOgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Nsb2JiZXJpemUuaAppbmRleCBiZmIxZDE0NjE1NWM0YzdlMmJhOThlOTFiM2I5YjNi
Mjg0ZmJjMDM0Li4zNjJjNDc4OWRhNzY3MzM2NTZiNjM3MTcxMmJkNmU0OTk2ZDg1NmUyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaApAQCAtMTExLDkgKzExMSw5
IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRG
dW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgLy8gc2NhbiB3b3VsZCByZWFkLiBUaGF0
J3Mgd2hhdCB0aGlzIGRvZXMuCiAgICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsgaW5saW5lQ2Fs
bEZyYW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlci5p
bmxpbmVDYWxsRnJhbWUoKSkgewogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1
cmVDYWxsKQotICAgICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICAgICAgICAg
IHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICAgICAgICAgaWYgKGlu
bGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCi0gICAgICAgICAgICByZWFkKEFic3RyYWN0SGVh
cChTdGFjaywgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisgICAgICAgICAgICByZWFkKEFic3RyYWN0SGVh
cChTdGFjaywgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKICAgICB9CiAKICAg
ICAvLyBXZSBkb24ndCB3YW50IHRvIHNwZWNpZmljYWxseSBhY2NvdW50IHdoaWNoIG5vZGVzIGNh
biByZWFkIGZyb20gdGhlIHNjb3BlCkBAIC00NDEsNyArNDQxLDcgQEAgdm9pZCBjbG9iYmVyaXpl
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0
IFdyaXRlRnUKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBLaWxsU3RhY2s6Ci0gICAgICAg
IHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7CisgICAg
ICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgCiAgICAgY2FzZSBNb3ZIaW50OgpAQCAtNDk3LDcg
KzQ5Nyw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0
IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJldHVybjsKIAogICAg
IGNhc2UgRmx1c2g6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2Nh
bCgpKSk7CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5vcGVyYW5kKCkp
KTsKICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAgcmV0dXJuOwogCkBAIC03NjUs
MTIgKzc2NSwxMiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBj
b25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZXR1cm47CiAg
ICAgICAgIAogICAgIGNhc2UgR2V0Q2FsbGVlOgotICAgICAgICByZWFkKEFic3RyYWN0SGVhcChT
dGFjaywgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24o
U3RhY2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSksIExh
enlOb2RlKG5vZGUpKTsKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRp
b24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSkpKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAKICAg
ICBjYXNlIFNldENhbGxlZToKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBDYWxs
RnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBW
aXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogICAgICAgICByZXR1cm47
CiAgICAgICAgIAogICAgIGNhc2UgR2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM6IHsKQEAg
LTc4MSw3ICs3ODEsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
LCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgIH0KIAogICAgIGNh
c2UgU2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM6Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0
SGVhcChTdGFjaywgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsK
KyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7CiAgICAgICAgIHJldHVybjsK
IAogICAgIGNhc2UgR2V0UmVzdExlbmd0aDoKQEAgLTc4OSwzNiArNzg5LDQyIEBAIHZvaWQgY2xv
YmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFk
LCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRM
b2NhbDoKLSAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKTsK
LSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBu
b2RlLT5sb2NhbCgpKSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAgcmVhZChBYnN0cmFjdEhl
YXAoU3RhY2ssIG5vZGUtPm9wZXJhbmQoKSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0
YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPm9wZXJhbmQoKSkpLCBMYXp5Tm9kZShu
b2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBTZXRMb2NhbDoKLSAg
ICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSk7Ci0gICAgICAg
IGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9j
YWwoKSkpLCBMYXp5Tm9kZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKKyAgICAgICAgd3JpdGUo
QWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5vcGVyYW5kKCkpKTsKKyAgICAgICAgZGVmKEhlYXBM
b2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5vcGVyYW5kKCkpKSwg
TGF6eU5vZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCiAgICAgY2FzZSBHZXRTdGFjazogewotICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChTdGFj
aywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKTsKKyAgICAgICAgQWJzdHJhY3RIZWFw
IGhlYXAoU3RhY2ssIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKTsKICAgICAgICAg
cmVhZChoZWFwKTsKICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgaGVhcCksIExh
enlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBQdXRTdGFjazogewotICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChTdGFjaywgbm9kZS0+c3Rh
Y2tBY2Nlc3NEYXRhKCktPmxvY2FsKTsKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoU3RhY2ss
IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKTsKICAgICAgICAgd3JpdGUoaGVhcCk7
CiAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIGhlYXApLCBMYXp5Tm9kZShub2Rl
LT5jaGlsZDEoKS5ub2RlKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCisg
ICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICB3
cml0ZShIZWFwKTsKKyAgICAgICAgcmV0dXJuOyAgCisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFy
YXJnczogewogICAgICAgICByZWFkKFdvcmxkKTsKICAgICAgICAgd3JpdGUoSGVhcCk7CiAgICAg
ICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAg
ICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPmNvdW50Lm9mZnNldCgpKSk7Cisg
ICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+Y291bnQpKTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTspCi0gICAgICAgICAgICB3cml0ZShB
YnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgc3RhdGljX2Nhc3Q8aW50
PihpKSkpOworICAgICAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFy
dCArIHN0YXRpY19jYXN0PGludD4oaSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAg
ICAgCkBAIC04MjcsOSArODMzLDkgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAg
cmVhZChTdGFjayk7CiAgICAgICAgIAogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBu
b2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNr
LCBkYXRhLT5jb3VudC5vZmZzZXQoKSkpOworICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3Rh
Y2ssIGRhdGEtPmNvdW50KSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0
OyBpLS07KQotICAgICAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFy
dC5vZmZzZXQoKSArIHN0YXRpY19jYXN0PGludD4oaSkpKTsKKyAgICAgICAgICAgIHdyaXRlKEFi
c3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3RhcnQgKyBzdGF0aWNfY2FzdDxpbnQ+KGkpKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAKaW5kZXggOTU4NjZhN2Y5MWE3MTQ0MmRh
MWM0ZjdlNDcwMGQwOWNkMmFjMzBmMy4uMTU3NDZjMDU0ZjBkZjMzYmEzMmQzOWZhZmUwMmRiYmQ3
ZDI5MTRjYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5l
ZExpdmVuZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVk
TGl2ZW5lc3MuY3BwCkBAIC0zOSw3ICszOSw3IEBAIHN0YXRpYyB2b2lkIGFkZEJ5dGVjb2RlTGl2
ZW5lc3MoR3JhcGgmIGdyYXBoLCBBdmFpbGFiaWxpdHlNYXAmIGF2YWlsYWJpbGl0eU1hcCwKIHsK
ICAgICBncmFwaC5mb3JBbGxMaXZlSW5CeXRlY29kZSgKICAgICAgICAgbm9kZS0+b3JpZ2luLmZv
ckV4aXQsCi0gICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgeworICAgICAgICBbJl0g
KE9wZXJhbmQgcmVnKSB7CiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAuY2xvc2VTdGFydGlu
Z1dpdGhMb2NhbCgKICAgICAgICAgICAgICAgICByZWcsCiAgICAgICAgICAgICAgICAgWyZdIChO
b2RlKiBub2RlKSAtPiBib29sIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uRGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1v
bkRhdGEuY3BwCmluZGV4IGI0ZmM4ZDQ5ZTYwNzJlYzFhYmRkM2ZmNmJkMjUzMDAyMjU5MTgyNjIu
LjA3MTJjY2IzYmU5OTI4ZWVhODYyM2U0ZDcyOGQ4YjQ3MjdmMTcyODEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcApAQCAtNTYsNyArNTYsNyBAQCBDYWxs
U2l0ZUluZGV4IENvbW1vbkRhdGE6OmFkZENvZGVPcmlnaW4oQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
KQogICAgICAgICBjb2RlT3JpZ2lucy5hcHBlbmQoY29kZU9yaWdpbik7CiAgICAgdW5zaWduZWQg
aW5kZXggPSBjb2RlT3JpZ2lucy5zaXplKCkgLSAxOwogICAgIEFTU0VSVChjb2RlT3JpZ2luc1tp
bmRleF0gPT0gY29kZU9yaWdpbik7Ci0gICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJ
bmRleChpbmRleCkpOworICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KGluZGV4KTsKIH0KIAogQ2Fs
bFNpdGVJbmRleCBDb21tb25EYXRhOjphZGRVbmlxdWVDYWxsU2l0ZUluZGV4KENvZGVPcmlnaW4g
Y29kZU9yaWdpbikKQEAgLTY0LDEzICs2NCwxMyBAQCBDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6
OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIGNvZGVP
cmlnaW5zLmFwcGVuZChjb2RlT3JpZ2luKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGNvZGVPcmln
aW5zLnNpemUoKSAtIDE7CiAgICAgQVNTRVJUKGNvZGVPcmlnaW5zW2luZGV4XSA9PSBjb2RlT3Jp
Z2luKTsKLSAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGluZGV4KSk7Cisg
ICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoaW5kZXgpOwogfQogCiBDYWxsU2l0ZUluZGV4IENvbW1v
bkRhdGE6Omxhc3RDYWxsU2l0ZSgpIGNvbnN0CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoY29kZU9y
aWdpbnMuc2l6ZSgpKTsKLSAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGNv
ZGVPcmlnaW5zLnNpemUoKSAtIDEpKTsKKyAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChjb2RlT3Jp
Z2lucy5zaXplKCkgLSAxKTsKIH0KIAogRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggQ29tbW9uRGF0
YTo6YWRkRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmNwcAppbmRleCBkMzdkMjk4YmE4OWM2YzMxZGVmZTYzNzE5MTY5YzcyOTA2MDY5Mzk5Li42ZDQ0
N2QzYThiYTEzMTI2YzJkMThjMDFlOWEzZTQwZGQxZmE2YTViIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcApAQCAtMzgz
LDcgKzM4Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gR2V0TXlBcmd1bWVudEJ5
VmFsIGluIHN1Y2ggc3RhdGljYWxseS1vdXQtb2YtYm91bmRzIGFjY2Vzc2VzOyB3ZSBqdXN0IGxv
c2UgQ0ZBIHVubGVzcwogICAgICAgICAgICAgICAgIC8vIEdDU0UgcmVtb3ZlcyB0aGUgYWNjZXNz
IGVudGlyZWx5LgogICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgLSAxKQorICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgLSAxKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBtX3N0YXRlLm51
bWJlck9mQXJndW1lbnRzKCkgLSAxKQpAQCAtNDA0LDcgKzQwNCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCArIDEp
LCBGbHVzaGVkSlNWYWx1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+
aXNWYXJhcmdzKCkgJiYgaW5kZXggPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzIC0gMSkgeworICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYg
IWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkgJiYgaW5kZXggPCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpKSB7
CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldFN0YWNrKGRhdGEpOwogICAg
ICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKaW5kZXggYTU4Mzk5
MzQyYWFhOWViNWE5NTkwZDQ4NjU5ZDQ5MjQ3NTY4YmZlZi4uMWYzMGRmZjYxNzljMGMzM2VlZjUx
OTMyMjI3Yzc1OTY2NzVhYmZhZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEb2VzR0MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dD
LmNwcApAQCAtMjk3LDYgKzI5Nyw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZSkKICAgICBjYXNlIEluQnlWYWw6CiAgICAgY2FzZSBJbnN0YW5jZU9mOgogICAgIGNhc2Ug
SW5zdGFuY2VPZkN1c3RvbToKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgY2FzZSBMb2Fk
VmFyYXJnczoKICAgICBjYXNlIE51bWJlclRvU3RyaW5nV2l0aFJhZGl4OgogICAgIGNhc2UgTnVt
YmVyVG9TdHJpbmdXaXRoVmFsaWRSYWRpeENvbnN0YW50OgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEcml2ZXIuY3BwCmluZGV4IDE3YjM3MDc1OGMwNTM4NzAzYjdkNzllZTYyMjcyZDQ3OTk5
OGI1MzkuLjQ1ZmJjNDM5ZDUzYmE5NTBlN2E4ZDg5YWM5ZWMxOTcyYmEwOTM5YjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKQEAgLTkwLDcgKzkwLDYgQEAgc3RhdGlj
IENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFu
eSBzdHVicyB0aGF0IHRoZSBERkcgaXMgZ29pbmcgdG8gdXNlIGFyZSBpbml0aWFsaXplZC4gV2Ug
d2FudCB0bwogICAgIC8vIG1ha2Ugc3VyZSB0aGF0IGFsbCBKSVQgY29kZSBnZW5lcmF0aW9uIGRv
ZXMgZmluYWxpemF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KICAgICB2bS5nZXRDVElTdHViKGFy
aXR5Rml4dXBHZW5lcmF0b3IpOwotICAgIHZtLmdldENUSVN0dWIob3NyRXhpdFRodW5rR2VuZXJh
dG9yKTsKICAgICB2bS5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3Ip
OwogICAgIHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJh
dG9yKTsKICAgICB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKaW5kZXggMzc0ZDUyNjA5YzNl
YzY2NmI1Y2M2MzA3NjcwMTRlZGI0NTBmNGZkOC4uOTIyZDM1YmJmYWYwYmIxZGQ5MGIwOTAzYTVm
MmNkZTQ5YWI4NmJiMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCkBAIC0yNDM5LDYgKzI0MzksMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2Fz
ZSBMb2FkVmFyYXJnczogeworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAjaWYgQVNTRVJU
X0VOQUJMRUQKICAgICAgICAgLy8gSGF2ZSB0aGVzZSBuby1vcCBjYXNlcyBoZXJlIHRvIGVuc3Vy
ZSB0aGF0IG5vYm9keSBmb3JnZXRzIHRvIGFkZCBoYW5kbGVycyBmb3IgbmV3IG9wY29kZXMuCiAg
ICAgICAgIGNhc2UgU2V0QXJndW1lbnREZWZpbml0ZWx5OgpAQCAtMjQ3MSw4ICsyNDc3LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKICAgICAgICAg
Y2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2Fy
ZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgotICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgotICAgICAg
ICBjYXNlIEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAg
ICAgIGNhc2UgUHJvZmlsZUNvbnRyb2xGbG93OgogICAgICAgICBjYXNlIE5ld09iamVjdDoKICAg
ICAgICAgY2FzZSBOZXdQcm9taXNlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGb3JBbGxLaWxscy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JB
bGxLaWxscy5oCmluZGV4IDBiZjFjM2ZiYmFjNGE2NjI5OGNmOTI5ZmVmNTBhNjBkY2ZkZTI4Yjku
LmJmNDM1MGM0Y2QxN2UzZDUwMDY2MzhmNTVhYWMzNWE1NjUyOTk0YTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmgKQEAgLTMyLDYgKzMyLDEwIEBACiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorbmFtZXNwYWNlIEZvckFsbEtpbGxzSW50
ZXJuYWwgeworY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworfQorCiAvLyBVdGlsaXRp
ZXMgZm9yIGZpbmRpbmcgdGhlIGxhc3QgcG9pbnRzIHdoZXJlIGEgbm9kZSBpcyBsaXZlIGluIERG
RyBTU0EuIFRoaXMgYWNjb3VudHMgZm9yIGxpdmVuZXNzIGR1ZQogLy8gdG8gT1NSIGV4aXQuIFRo
aXMgaXMgdXN1YWxseSB1c2VkIGZvciBlbnVtZXJhdGluZyBvdmVyIGFsbCBvZiB0aGUgcHJvZ3Jh
bSBwb2ludHMgd2hlcmUgYSBub2RlIGlzIGxpdmUsCiAvLyBieSBleHBsb3JpbmcgYWxsIGJsb2Nr
cyB3aGVyZSB0aGUgbm9kZSBpcyBsaXZlIGF0IHRhaWwgYW5kIHRoZW4gZXhwbG9yaW5nIGFsbCBw
cm9ncmFtIHBvaW50cyB3aGVyZSB0aGUKQEAgLTUzLDEzICs1NywxMyBAQCB2b2lkIGZvckFsbEtp
bGxlZE9wZXJhbmRzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZUJlZm9yZSwgTm9kZSogbm9kZUFm
dGVyLCBjb25zdAogICAgIAogICAgIENvZGVPcmlnaW4gYWZ0ZXIgPSBub2RlQWZ0ZXItPm9yaWdp
bi5mb3JFeGl0OwogICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciBhbHJlYWR5Tm90ZWQ7CisgICAg
T3BlcmFuZCBhbHJlYWR5Tm90ZWQ7CiAgICAgLy8gSWYgd2UgTW92SGludCBzb21ldGhpbmcgdGhh
dCBpcyBsaXZlIGF0IHRoZSB0aW1lLCB0aGVuIHdlIGtpbGwgdGhlIG9sZCB2YWx1ZS4KICAgICBp
ZiAobm9kZUFmdGVyLT5jb250YWluc01vdkhpbnQoKSkgewotICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVnID0gbm9kZUFmdGVyLT51bmxpbmtlZExvY2FsKCk7Ci0gICAgICAgIGlmIChncmFwaC5p
c0xpdmVJbkJ5dGVjb2RlKHJlZywgYWZ0ZXIpKSB7Ci0gICAgICAgICAgICBmdW5jdG9yKHJlZyk7
Ci0gICAgICAgICAgICBhbHJlYWR5Tm90ZWQgPSByZWc7CisgICAgICAgIE9wZXJhbmQgb3BlcmFu
ZCA9IG5vZGVBZnRlci0+dW5saW5rZWRPcGVyYW5kKCk7CisgICAgICAgIGlmIChncmFwaC5pc0xp
dmVJbkJ5dGVjb2RlKG9wZXJhbmQsIGFmdGVyKSkgeworICAgICAgICAgICAgZnVuY3RvcihvcGVy
YW5kKTsKKyAgICAgICAgICAgIGFscmVhZHlOb3RlZCA9IG9wZXJhbmQ7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgCkBAIC03MCwyOSArNzQsNDggQEAgdm9pZCBmb3JBbGxLaWxsZWRPcGVyYW5kcyhH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGVCZWZvcmUsIE5vZGUqIG5vZGVBZnRlciwgY29uc3QKICAg
ICAvLyBvdGhlciBsb29wLCBiZWxvdy4KICAgICBhdXRvKiBiZWZvcmVJbmxpbmVDYWxsRnJhbWUg
PSBiZWZvcmUuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgaWYgKGJlZm9yZUlubGluZUNhbGxGcmFt
ZSA9PSBhZnRlci5pbmxpbmVDYWxsRnJhbWUoKSkgewotICAgICAgICBpbnQgc3RhY2tPZmZzZXQg
PSBiZWZvcmVJbmxpbmVDYWxsRnJhbWUgPyBiZWZvcmVJbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0IDogMDsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBncmFwaC5iYXNlbGluZUNv
ZGVCbG9ja0ZvcihiZWZvcmVJbmxpbmVDYWxsRnJhbWUpOworICAgICAgICBpZiAoYWZ0ZXIuYnl0
ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSkgeworICAgICAgICAgICAgQVNTRVJUKGJlZm9yZS5i
eXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpICE9IGFmdGVyLmJ5dGVjb2RlSW5kZXgoKS5jaGVj
a3BvaW50KCkpOworICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShiZWZvcmUuYnl0ZWNv
ZGVJbmRleCgpLm9mZnNldCgpID09IGFmdGVyLmJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKSwgIldo
ZW4gdGhlIERGRyBkb2VzIGNvZGUgbW90aW9uIGl0IHNob3VsZCBjaGFuZ2UgdGhlIGZvckV4aXQg
b3JpZ2luIHRvIG1hdGNoIHRoZSBzdXJyb3VuZGluZyBieXRlY29kZXMuIik7CisKKyAgICAgICAg
ICAgIGF1dG8gbGl2ZUJlZm9yZSA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2Nr
LCBiZWZvcmUuYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAgIGF1dG8gbGl2ZUFmdGVyID0g
dG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50KCpjb2RlQmxvY2ssIGFmdGVyLmJ5dGVjb2RlSW5kZXgo
KSk7CisgICAgICAgICAgICBsaXZlQWZ0ZXIuaW52ZXJ0KCk7CisgICAgICAgICAgICBsaXZlQmVm
b3JlLmZpbHRlcihsaXZlQWZ0ZXIpOworCisgICAgICAgICAgICBsaXZlQmVmb3JlLmZvckVhY2hT
ZXRCaXQoWyZdIChzaXplX3QgdG1wKSB7CisgICAgICAgICAgICAgICAgZnVuY3RvcihyZW1hcE9w
ZXJhbmQoYmVmb3JlSW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kOjp0bXAodG1wKSkpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAvLyBObyBsb2NhbHMgY2FuIGRpZSBhdCBhIGNoZWNrcG9p
bnQuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBGdWxsQnl0ZWNv
ZGVMaXZlbmVzcyYgZnVsbExpdmVuZXNzID0gZ3JhcGgubGl2ZW5lc3NGb3IoY29kZUJsb2NrKTsK
ICAgICAgICAgY29uc3QgRmFzdEJpdFZlY3RvciYgbGl2ZUJlZm9yZSA9IGZ1bGxMaXZlbmVzcy5n
ZXRMaXZlbmVzcyhiZWZvcmUuYnl0ZWNvZGVJbmRleCgpLCBMaXZlbmVzc0NhbGN1bGF0aW9uUG9p
bnQ6OkJlZm9yZVVzZSk7CiAgICAgICAgIGNvbnN0IEZhc3RCaXRWZWN0b3ImIGxpdmVBZnRlciA9
IGZ1bGxMaXZlbmVzcy5nZXRMaXZlbmVzcyhhZnRlci5ieXRlY29kZUluZGV4KCksIExpdmVuZXNz
Q2FsY3VsYXRpb25Qb2ludDo6QmVmb3JlVXNlKTsKICAgICAgICAgCiAgICAgICAgIChsaXZlQmVm
b3JlICYgfmxpdmVBZnRlcikuZm9yRWFjaFNldEJpdCgKICAgICAgICAgICAgIFsmXSAoc2l6ZV90
IHJlbGF0aXZlTG9jYWwpIHsKLSAgICAgICAgICAgICAgICBmdW5jdG9yKHZpcnR1YWxSZWdpc3Rl
ckZvckxvY2FsKHJlbGF0aXZlTG9jYWwpICsgc3RhY2tPZmZzZXQpOworICAgICAgICAgICAgICAg
IGZ1bmN0b3IocmVtYXBPcGVyYW5kKGJlZm9yZUlubGluZUNhbGxGcmFtZSwgdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwocmVsYXRpdmVMb2NhbCkpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIAorCisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghYWZ0ZXIuYnl0
ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSwgIlRyYW5zaXRpb25pbmcgYWNyb3NzIGEgY2hlY2tw
b2ludCBidXQgYmVmb3JlIGFuZCBhZnRlciBkb24ndCBzaGFyZSBhbiBpbmxpbmVDYWxsRnJhbWUu
Iik7CisKICAgICAvLyBEZXRlY3Qga2lsbHMgdGhlIHN1cGVyIGNvbnNlcnZhdGl2ZSB3YXk6IGl0
IGlzIGtpbGxlZCBpZiBpdCB3YXMgbGl2ZSBiZWZvcmUgYW5kIGRlYWQgYWZ0ZXIuCi0gICAgQml0
VmVjdG9yIGxpdmVBZnRlciA9IGdyYXBoLmxvY2Fsc0xpdmVJbkJ5dGVjb2RlKGFmdGVyKTsKLSAg
ICBncmFwaC5mb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZSgKKyAgICBCaXRWZWN0b3IgbGl2ZUFm
dGVyID0gZ3JhcGgubG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKGFmdGVyKTsKKyAgICB1bnNp
Z25lZCBudW1Mb2NhbHMgPSBncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9m
TG9jYWxzKCk7CisgICAgZ3JhcGguZm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKAog
ICAgICAgICBiZWZvcmUsCi0gICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgewotICAg
ICAgICAgICAgaWYgKHJlZyA9PSBhbHJlYWR5Tm90ZWQpCisgICAgICAgIFsmXSAoT3BlcmFuZCBv
cGVyYW5kKSB7CisgICAgICAgICAgICBpZiAob3BlcmFuZCA9PSBhbHJlYWR5Tm90ZWQpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgaWYgKGxpdmVBZnRlci5nZXQocmVnLnRv
TG9jYWwoKSkpCisgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBvcGVyYW5kLmlzVG1wKCkg
PyBudW1Mb2NhbHMgKyBvcGVyYW5kLnZhbHVlKCkgOiBvcGVyYW5kLnRvTG9jYWwoKTsKKyAgICAg
ICAgICAgIGlmIChsaXZlQWZ0ZXIuZ2V0KG9mZnNldCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgZnVuY3RvcihyZWcpOworICAgICAgICAgICAgZnVuY3RvcihvcGVyYW5k
KTsKICAgICAgICAgfSk7CiB9CiAgICAgCkBAIC0xMDUsNyArMTI4LDggQEAgdm9pZCBmb3JBbGxL
aWxsZWROb2Rlc0F0Tm9kZUluZGV4KAogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc2Vl
bkluQ2xvc3VyZUZsYWcgPSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2FsbGVk
RnVuY3RvckZsYWcgPSAyOwogICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPiBmbGFnczsKLSAg
ICAKKworICAgIEFTU0VSVChub2RlSW5kZXgpOwogICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQo
bm9kZUluZGV4KTsKICAgICAKICAgICBncmFwaC5kb1RvQ2hpbGRyZW4oCkBAIC0xMjAsMTUgKzE0
NCwxMyBAQCB2b2lkIGZvckFsbEtpbGxlZE5vZGVzQXROb2RlSW5kZXgoCiAgICAgICAgICAgICB9
CiAgICAgICAgIH0pOwogCi0gICAgTm9kZSogYmVmb3JlID0gbnVsbHB0cjsKLSAgICBpZiAobm9k
ZUluZGV4KQotICAgICAgICBiZWZvcmUgPSBibG9jay0+YXQobm9kZUluZGV4IC0gMSk7CisgICAg
Tm9kZSogYmVmb3JlID0gYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpOwogCiAgICAgZm9yQWxsS2ls
bGVkT3BlcmFuZHMoCiAgICAgICAgIGdyYXBoLCBiZWZvcmUsIG5vZGUsCi0gICAgICAgIFsmXSAo
VmlydHVhbFJlZ2lzdGVyIHJlZykgeworICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewog
ICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwLmNsb3NlU3RhcnRpbmdXaXRoTG9jYWwoCi0gICAg
ICAgICAgICAgICAgcmVnLAorICAgICAgICAgICAgICAgIG9wZXJhbmQsCiAgICAgICAgICAgICAg
ICAgWyZdIChOb2RlKiBub2RlKSAtPiBib29sIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZsYWdzLmdldChub2RlKSAmIHNlZW5JbkNsb3N1cmVGbGFnOwogICAgICAgICAgICAgICAgIH0s
CkBAIC0xNTksNiArMTgxLDcgQEAgdm9pZCBmb3JBbGxLaWxsc0luQmxvY2soCiAgICAgLy8gU3Rh
cnQgYXQgdGhlIHNlY29uZCBub2RlLCBiZWNhdXNlIHRoZSBmdW5jdG9yIGlzIGV4cGVjdGVkIHRv
IG9ubHkgaW5zcGVjdCBub2RlcyBmcm9tIHRoZSBzdGFydCBvZgogICAgIC8vIHRoZSBibG9jayB1
cCB0byBub2RlSW5kZXggKGV4Y2x1c2l2ZSksIHNvIGlmIG5vZGVJbmRleCBpcyB6ZXJvIHRoZW4g
dGhlIGZ1bmN0b3IgaGFzIG5vdGhpbmcgdG8gZG8uCiAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5k
ZXggPSAxOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAg
ICBkYXRhTG9nTG5JZihGb3JBbGxLaWxsc0ludGVybmFsOjp2ZXJib3NlLCAibG9jYWwgYXZhaWxh
YmlsaXR5IGF0IGluZGV4OiAiLCBub2RlSW5kZXgsICIgIiwgbG9jYWxBdmFpbGFiaWxpdHkubV9h
dmFpbGFiaWxpdHkpOwogICAgICAgICBmb3JBbGxLaWxsZWROb2Rlc0F0Tm9kZUluZGV4KAogICAg
ICAgICAgICAgZ3JhcGgsIGxvY2FsQXZhaWxhYmlsaXR5Lm1fYXZhaWxhYmlsaXR5LCBibG9jaywg
bm9kZUluZGV4LAogICAgICAgICAgICAgWyZdIChOb2RlKiBub2RlKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCmluZGV4IGU1MTM1NWM1NTFiNDhjMjY2ZjllM2FiNzU2OGJh
MTBiN2Q4MjRlYzIuLmI5Zjg1NzI5NWVmYWY3NTI2MTRiNDRmNzU5ZjQ4OThhNGZiYzcyNWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCkBAIC0zMDgsOCArMzA4LDggQEAg
dm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXhTdHIs
IE5vZGUqIG5vZGUsIER1bXBDb250ZXgKICAgICBpZiAobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NE
YXRhKCp0aGlzKSkgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNz
RGF0YSA9IG5vZGUtPnRyeUdldFZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICBpZiAodmFy
aWFibGVBY2Nlc3NEYXRhKSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9
IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKTsKLSAgICAgICAgICAgIG91dC5wcmludChjb21t
YSwgdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLCAiKCIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1
bXAoKnRoaXMsIHZhcmlhYmxlQWNjZXNzRGF0YSksICIpIik7CisgICAgICAgICAgICBPcGVyYW5k
IG9wZXJhbmQgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKTsKKyAgICAgICAgICAgIG91
dC5wcmludChjb21tYSwgdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCksICIoIiwgVmFyaWFi
bGVBY2Nlc3NEYXRhRHVtcCgqdGhpcywgdmFyaWFibGVBY2Nlc3NEYXRhKSwgIikiKTsKICAgICAg
ICAgICAgIG9wZXJhbmQgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1hY2hpbmVMb2NhbCgpOwogICAg
ICAgICAgICAgaWYgKG9wZXJhbmQuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgIm1hY2hpbmU6Iiwgb3BlcmFuZCk7CkBAIC0zMTcsMTMgKzMxNywxMyBAQCB2b2lk
IEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeFN0ciwgTm9k
ZSogbm9kZSwgRHVtcENvbnRleAogICAgIH0KICAgICBpZiAobm9kZS0+aGFzU3RhY2tBY2Nlc3NE
YXRhKCkpIHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nl
c3NEYXRhKCk7Ci0gICAgICAgIG91dC5wcmludChjb21tYSwgZGF0YS0+bG9jYWwpOworICAgICAg
ICBvdXQucHJpbnQoY29tbWEsIGRhdGEtPm9wZXJhbmQpOwogICAgICAgICBpZiAoZGF0YS0+bWFj
aGluZUxvY2FsLmlzVmFsaWQoKSkKICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgIm1hY2hp
bmU6IiwgZGF0YS0+bWFjaGluZUxvY2FsKTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBkYXRh
LT5mb3JtYXQpOwogICAgIH0KLSAgICBpZiAobm9kZS0+aGFzVW5saW5rZWRMb2NhbCgpKSAKLSAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCBub2RlLT51bmxpbmtlZExvY2FsKCkpOworICAgIGlmIChu
b2RlLT5oYXNVbmxpbmtlZE9wZXJhbmQoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBub2Rl
LT51bmxpbmtlZE9wZXJhbmQoKSk7CiAgICAgaWYgKG5vZGUtPmhhc1ZlY3Rvckxlbmd0aEhpbnQo
KSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidmVjdG9yTGVuZ3RoSGludCA9ICIsIG5vZGUt
PnZlY3Rvckxlbmd0aEhpbnQoKSk7CiAgICAgaWYgKG5vZGUtPmhhc0xhenlKU1ZhbHVlKCkpCkBA
IC01MTUsOSArNTE1LDEwIEBAIHZvaWQgR3JhcGg6OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVh
bSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXhTdHIsIEJhc2ljQmxvY2sqCiAgICAgICAgIG91dC5w
cmludChwcmVmaXgsICIgIFBoaSBOb2RlczoiKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBibG9jay0+cGhpcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgTm9kZSogcGhpTm9k
ZSA9IGJsb2NrLT5waGlzW2ldOworICAgICAgICAgICAgQVNTRVJUKHBoaU5vZGUtPm9wKCkgPT0g
UGhpKTsKICAgICAgICAgICAgIGlmICghcGhpTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSAmJiBwaGlO
b2RlRHVtcE1vZGUgPT0gRHVtcExpdmVQaGlzT25seSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIG91dC5wcmludCgiIEAiLCBwaGlOb2RlLT5pbmRleCgpLCAiPCIsIHBo
aU5vZGUtPmxvY2FsKCksICIsIiwgcGhpTm9kZS0+cmVmQ291bnQoKSwgIj4tPigiKTsKKyAgICAg
ICAgICAgIG91dC5wcmludCgiIEAiLCBwaGlOb2RlLT5pbmRleCgpLCAiPCIsIHBoaU5vZGUtPm9w
ZXJhbmQoKSwgIiwiLCBwaGlOb2RlLT5yZWZDb3VudCgpLCAiPi0+KCIpOwogICAgICAgICAgICAg
aWYgKHBoaU5vZGUtPmNoaWxkMSgpKSB7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJAIiwg
cGhpTm9kZS0+Y2hpbGQxKCktPmluZGV4KCkpOwogICAgICAgICAgICAgICAgIGlmIChwaGlOb2Rl
LT5jaGlsZDIoKSkgewpAQCAtODg0LDcgKzg4NSw3IEBAIHZvaWQgR3JhcGg6OnN1YnN0aXR1dGVH
ZXRMb2NhbChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxvY2ssIFZh
CiAgICAgICAgIGJvb2wgc2hvdWxkQ29udGludWUgPSB0cnVlOwogICAgICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgaWYgKG5v
ZGUtPmxvY2FsKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKQorICAgICAgICAgICAg
aWYgKG5vZGUtPm9wZXJhbmQoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSkKICAg
ICAgICAgICAgICAgICBzaG91bGRDb250aW51ZSA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KQEAgLTg5Myw5ICs4OTQsOSBAQCB2b2lkIEdyYXBoOjpzdWJzdGl0dXRlR2V0
TG9jYWwoQmFzaWNCbG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJbkJsb2NrLCBWYQog
ICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IHZhcmlhYmxlQWNj
ZXNzRGF0YSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHN1YnN0aXR1
dGUoYmxvY2ssIGluZGV4SW5CbG9jaywgbm9kZSwgbmV3R2V0TG9jYWwpOwotICAgICAgICAgICAg
Tm9kZSogb2xkVGFpbE5vZGUgPSBibG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmxvY2FsKCkpOworICAgICAgICAgICAgTm9kZSogb2xkVGFpbE5vZGUgPSBi
bG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQo
KSk7CiAgICAgICAgICAgICBpZiAob2xkVGFpbE5vZGUgPT0gbm9kZSkKLSAgICAgICAgICAgICAg
ICBibG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2Fs
KCkpID0gbmV3R2V0TG9jYWw7CisgICAgICAgICAgICAgICAgYmxvY2sudmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCkpID0gbmV3R2V0TG9jYWw7CiAg
ICAgICAgICAgICBzaG91bGRDb250aW51ZSA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KQEAgLTExMzMsMzYgKzExMzQsNTYgQEAgQnl0ZWNvZGVLaWxscyYgR3JhcGg6Omtp
bGxzRm9yKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogICAgIHJldHVybiBraWxs
c0ZvcihiYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpKTsKIH0KIAotYm9vbCBH
cmFwaDo6aXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQ29kZU9yaWdp
biBjb2RlT3JpZ2luKQorYm9vbCBHcmFwaDo6aXNMaXZlSW5CeXRlY29kZShPcGVyYW5kIG9wZXJh
bmQsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKIHsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
dmVyYm9zZSA9IGZhbHNlOwogICAgIAogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9n
KCJDaGVja2luZyBvZiBvcGVyYW5kIGlzIGxpdmU6ICIsIG9wZXJhbmQsICJcbiIpOwogICAgIGJv
b2wgaXNDYWxsZXJPcmlnaW4gPSBmYWxzZTsKKwogICAgIENvZGVPcmlnaW4qIGNvZGVPcmlnaW5Q
dHIgPSAmY29kZU9yaWdpbjsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciByZWcgPSBWaXJ0dWFsUmVnaXN0ZXIoCi0gICAgICAgICAgICBvcGVyYW5kLm9mZnNldCgpIC0g
Y29kZU9yaWdpblB0ci0+c3RhY2tPZmZzZXQoKSk7CisgICAgYXV0byogaW5saW5lQ2FsbEZyYW1l
ID0gY29kZU9yaWdpblB0ci0+aW5saW5lQ2FsbEZyYW1lKCk7CisgICAgLy8gV2UgbmVlZCB0byBo
YW5kbGUgdGFpbCBjYWxsZXJzIGJlY2F1c2Ugd2UgbWF5IGRlY2lkZSB0byBleGl0IHRvIHRoZQor
ICAgIC8vIHRoZSByZXR1cm4gYnl0ZWNvZGUgZm9sbG93aW5nIHRoZSB0YWlsIGNhbGwuCisgICAg
Zm9yICg7IGNvZGVPcmlnaW5QdHI7IGNvZGVPcmlnaW5QdHIgPSBpbmxpbmVDYWxsRnJhbWUgPyAm
aW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIgOiBudWxscHRyKSB7CisgICAgICAgIGlubGlu
ZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW5QdHItPmlubGluZUNhbGxGcmFtZSgpOworICAgICAgICBp
ZiAob3BlcmFuZC5pc1RtcCgpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCB0bXBPZmZzZXQgPSBp
bmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCA6IDA7CisgICAgICAg
ICAgICB1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob3BlcmFu
ZC52YWx1ZSgpKTsKKworICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmQudmFsdWUoKSA+PSAwKTsK
KyAgICAgICAgICAgIC8vIFRoaXMgdG1wIHNob3VsZCBoYXZlIGJlbG9uZ2VkIHRvIHNvbWVvbmUg
d2UgaW5saW5lZC4KKyAgICAgICAgICAgIGlmIChvcGVyYW5kSW5kZXggPiB0bXBPZmZzZXQgKyBt
YXhOdW1DaGVja3BvaW50VG1wcykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5s
aW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgIGlmICghY29kZUJsb2NrLT5udW1UbXBzKCkgfHwg
b3BlcmFuZEluZGV4IDwgdG1wT2Zmc2V0KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICBhdXRvIGJpdE1hcCA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJs
b2NrLCBjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgcmV0dXJu
IGJpdE1hcC5nZXQob3BlcmFuZEluZGV4IC0gdG1wT2Zmc2V0KTsKKyAgICAgICAgfQorCisgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpIC0gY29k
ZU9yaWdpblB0ci0+c3RhY2tPZmZzZXQoKTsKICAgICAgICAgCiAgICAgICAgIGlmICh2ZXJib3Nl
KQogICAgICAgICAgICAgZGF0YUxvZygicmVnID0gIiwgcmVnLCAiXG4iKTsKIAotICAgICAgICBh
dXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luUHRyLT5pbmxpbmVDYWxsRnJhbWUoKTsK
LSAgICAgICAgaWYgKG9wZXJhbmQub2Zmc2V0KCkgPCBjb2RlT3JpZ2luUHRyLT5zdGFja09mZnNl
dCgpICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpIHsKKyAgICAgICAgaWYgKG9w
ZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkgPCBjb2RlT3JpZ2luUHRyLT5zdGFja09m
ZnNldCgpICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpIHsKICAgICAgICAgICAg
IGlmIChyZWcuaXNBcmd1bWVudCgpKSB7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cmVnLm9mZnNldCgpIDwgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpOwogCiAKICAg
ICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsCi0gICAgICAg
ICAgICAgICAgICAgICYmIHJlZy5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUpIHsK
KyAgICAgICAgICAgICAgICAgICAgJiYgcmVnID09IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgewog
ICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIkxvb2tzIGxpa2UgYSBjYWxsZWUuXG4iKTsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpCi0gICAgICAgICAgICAg
ICAgICAgICYmIHJlZy5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcykgeworICAgICAgICAgICAgICAgICAgICAmJiByZWcgPT0gQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpIHsKICAgICAgICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJMb29rcyBsaWtlIHRo
ZSBhcmd1bWVudCBjb3VudC5cbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTExNzYsNDIgKzExOTcsMzkgQEAgYm9vbCBHcmFwaDo6aXNMaXZlSW5CeXRlY29kZShWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgICAgICAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJh
bWUpOwogICAgICAgICAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9IGxp
dmVuZXNzRm9yKGNvZGVCbG9jayk7CiAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXggPSBjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgICAgICByZXR1
cm4gZnVsbExpdmVuZXNzLm9wZXJhbmRJc0xpdmUocmVnLm9mZnNldCgpLCBieXRlY29kZUluZGV4
LCBhcHByb3ByaWF0ZUxpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCgqY29kZU9yaWdpblB0ciwgaXND
YWxsZXJPcmlnaW4pKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1l
KSB7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJS
YW4gb3V0IG9mIHN0YWNrLCByZXR1cm5pbmcgdHJ1ZS5cbiIpOwotICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICByZXR1cm4gZnVsbExpdmVuZXNzLnZpcnR1YWxSZWdpc3Rlcklz
TGl2ZShyZWcsIGJ5dGVjb2RlSW5kZXgsIGFwcHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxhdGlvblBv
aW50KCpjb2RlT3JpZ2luUHRyLCBpc0NhbGxlck9yaWdpbikpOwogICAgICAgICB9CiAKICAgICAg
ICAgLy8gQXJndW1lbnRzIGFyZSBhbHdheXMgbGl2ZS4gVGhpcyB3b3VsZCBiZSByZWR1bmRhbnQg
aWYgaXQgd2Fzbid0IGZvciBvdXIKICAgICAgICAgLy8gb3BfY2FsbF92YXJhcmdzIGlubGluaW5n
LgotICAgICAgICBpZiAocmVnLmlzQXJndW1lbnQoKQorICAgICAgICBpZiAoaW5saW5lQ2FsbEZy
YW1lICYmIHJlZy5pc0FyZ3VtZW50KCkKICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PHNpemVf
dD4ocmVnLnRvQXJndW1lbnQoKSkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1dpdGhGaXh1
cC5zaXplKCkpIHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRh
dGFMb2coIkFyZ3VtZW50IGlzIGxpdmUuXG4iKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CiAKLSAgICAgICAgLy8gV2UgbmVlZCB0byBoYW5kbGUgdGFpbCBjYWxsZXJzIGJl
Y2F1c2Ugd2UgbWF5IGRlY2lkZSB0byBleGl0IHRvIHRoZQotICAgICAgICAvLyB0aGUgcmV0dXJu
IGJ5dGVjb2RlIGZvbGxvd2luZyB0aGUgdGFpbCBjYWxsLgotICAgICAgICBjb2RlT3JpZ2luUHRy
ID0gJmlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyOwogICAgICAgICBpc0NhbGxlck9yaWdp
biA9IHRydWU7CiAgICAgfQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisKKyAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiUmFuIG91dCBvZiBzdGFjaywgcmV0dXJu
aW5nIHRydWUuXG4iKTsKKyAgICByZXR1cm4gdHJ1ZTsgICAgCiB9CiAKLUJpdFZlY3RvciBHcmFw
aDo6bG9jYWxzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQorQml0VmVjdG9y
IEdyYXBoOjpsb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
KQogewogICAgIEJpdFZlY3RvciByZXN1bHQ7Ci0gICAgcmVzdWx0LmVuc3VyZVNpemUoYmxvY2so
MCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKLSAgICBmb3JBbGxMb2NhbHNM
aXZlSW5CeXRlY29kZSgKKyAgICB1bnNpZ25lZCBudW1Mb2NhbHMgPSBibG9jaygwKS0+dmFyaWFi
bGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7CisgICAgcmVzdWx0LmVuc3VyZVNpemUobnVtTG9j
YWxzICsgYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZlRtcHMoKSk7CisgICAgZm9y
QWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKAogICAgICAgICBjb2RlT3JpZ2luLAotICAg
ICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKLSAgICAgICAgICAgIEFTU0VSVChyZWcu
aXNMb2NhbCgpKTsKLSAgICAgICAgICAgIHJlc3VsdC5xdWlja1NldChyZWcudG9Mb2NhbCgpKTsK
KyAgICAgICAgWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG9m
ZnNldCA9IG9wZXJhbmQuaXNUbXAoKSA/IG51bUxvY2FscyArIG9wZXJhbmQudmFsdWUoKSA6IG9w
ZXJhbmQudG9Mb2NhbCgpOworICAgICAgICAgICAgcmVzdWx0LnF1aWNrU2V0KG9mZnNldCk7CiAg
ICAgICAgIH0pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xNjM1LDggKzE2NTMsOCBAQCBN
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIEdyYXBoOjptZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlRm9yKE5vZGUqIGN1cnJlbgogCiAgICAgZm9yIChOb2RlKiBub2RlID0gb3BlcmFuZE5v
ZGU7IG5vZGU7KSB7CiAgICAgICAgIGlmIChub2RlLT5hY2Nlc3Nlc1N0YWNrKCp0aGlzKSkgewot
ICAgICAgICAgICAgaWYgKG1fZm9ybSAhPSBTU0EgJiYgbm9kZS0+bG9jYWwoKS5pc0FyZ3VtZW50
KCkpIHsKLSAgICAgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBub2RlLT5sb2NhbCgpLnRvQXJn
dW1lbnQoKTsKKyAgICAgICAgICAgIGlmIChtX2Zvcm0gIT0gU1NBICYmIG5vZGUtPm9wZXJhbmQo
KS5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBub2RlLT5v
cGVyYW5kKCkudG9Bcmd1bWVudCgpOwogICAgICAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50Tm9k
ZSA9IG1fcm9vdFRvQXJndW1lbnRzLmZpbmQoYmxvY2soMCkpLT52YWx1ZVthcmd1bWVudF07CiAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYXRjaCBTZXRBcmd1bWVudERlZmlu
aXRlbHkgbm9kZXMgYXQgb3RoZXIgZW50cnlwb2ludHMgYXMgd2VsbDoKICAgICAgICAgICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1ODQxCkBAIC0x
NjU2LDcgKzE2NzQsNyBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIEdyYXBoOjptZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKE5vZGUqIGN1cnJlbgogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZnJvbUxhenlPcGVyYW5k
KAogICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywKICAgICAgICAgICAgICAg
ICAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCksIG5vZGUtPmxv
Y2FsKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50
aWMuYnl0ZWNvZGVJbmRleCgpLCBub2RlLT5vcGVyYW5kKCkpKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAppbmRleCBl
YzRmMjJiZWU1NWYxYjI5MDQyYmZiMjNlMTI2NGZhMjAzY2FkZGU3Li5kNDMzZDg1ZDk3ODlhNWJl
OWI1Y2U2ODM4ZDliMWUyMzQxYTdhNGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCkBAIC04NDAsMTMgKzg0MCwxMyBAQCBwdWJsaWM6CiAgICAgLy8gUXVpY2tseSBxdWVyeSBp
ZiBhIHNpbmdsZSBsb2NhbCBpcyBsaXZlIGF0IHRoZSBnaXZlbiBwb2ludC4gVGhpcyBpcyBmYXN0
ZXIgdGhhbiBjYWxsaW5nCiAgICAgLy8gZm9yQWxsTGl2ZUluQnl0ZWNvZGUoKSBpZiB5b3Ugd2ls
bCBvbmx5IHF1ZXJ5IG9uZSBsb2NhbC4gQnV0LCBpZiB5b3Ugd2FudCB0byBrbm93IGFsbCBvZiB0
aGUKICAgICAvLyBsb2NhbHMgbGl2ZSwgdGhlbiBjYWxsaW5nIHRoaXMgZm9yIGVhY2ggbG9jYWwg
aXMgbXVjaCBzbG93ZXIgdGhhbiBmb3JBbGxMaXZlSW5CeXRlY29kZSgpLgotICAgIGJvb2wgaXNM
aXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIsIENvZGVPcmlnaW4pOworICAgIGJvb2wgaXNM
aXZlSW5CeXRlY29kZShPcGVyYW5kLCBDb2RlT3JpZ2luKTsKICAgICAKLSAgICAvLyBRdWlja2x5
IGdldCBhbGwgb2YgdGhlIG5vbi1hcmd1bWVudCBsb2NhbHMgbGl2ZSBhdCB0aGUgZ2l2ZW4gcG9p
bnQuIFRoaXMgZG9lc24ndCBnaXZlIHlvdQorICAgIC8vIFF1aWNrbHkgZ2V0IGFsbCBvZiB0aGUg
bm9uLWFyZ3VtZW50IGxvY2FscyBhbmQgdG1wcyBsaXZlIGF0IHRoZSBnaXZlbiBwb2ludC4gVGhp
cyBkb2Vzbid0IGdpdmUgeW91CiAgICAgLy8gYW55IGFyZ3VtZW50cyBiZWNhdXNlIHRob3NlIGFy
ZSBhbGwgcHJlc3VtZWQgbGl2ZS4gWW91IGNhbiBjYWxsIGZvckFsbExpdmVJbkJ5dGVjb2RlKCkg
dG8KICAgICAvLyBhbHNvIGdldCB0aGUgYXJndW1lbnRzLiBUaGlzIGlzIG11Y2ggZmFzdGVyIHRo
YW4gY2FsbGluZyBpc0xpdmVJbkJ5dGVjb2RlKCkgZm9yIGVhY2ggbG9jYWwuCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2Rl
KENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB2b2lk
IGZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewogICAgICAgICAvLyBTdXBwb3J0IGZvciBu
b3QgcmVkdW5kYW50bHkgcmVwb3J0aW5nIGFyZ3VtZW50cy4gTmVjZXNzYXJ5IGJlY2F1c2UgaW4g
Y2FzZSBvZiBhIHZhcmFyZ3MKICAgICAgICAgLy8gY2FsbCwgb25seSB0aGUgY2FsbGVlIGtub3dz
IHRoYXQgYXJndW1lbnRzIGFyZSBsaXZlIHdoaWxlIGluIHRoZSBjYXNlIG9mIGEgbm9uLXZhcmFy
Z3MKQEAgLTg4MSw2ICs4ODEsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmIChsaXZl
bmVzc0F0Qnl0ZWNvZGVbcmVsYXRpdmVMb2NhbF0pCiAgICAgICAgICAgICAgICAgICAgIGZ1bmN0
b3IocmVnKTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvZGVPcmlnaW5QdHIt
PmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
Y29kZUJsb2NrLT5udW1UbXBzKCkpOworICAgICAgICAgICAgICAgIGF1dG8gbGl2ZVRtcHMgPSB0
bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgY29kZU9yaWdpblB0ci0+Ynl0ZWNv
ZGVJbmRleCgpKTsKKyAgICAgICAgICAgICAgICBsaXZlVG1wcy5mb3JFYWNoU2V0Qml0KFsmXSAo
c2l6ZV90IHRtcCkgeworICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHJlbWFwT3BlcmFuZChp
bmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQ6OnRtcCh0bXApKSk7CisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghaW5saW5lQ2Fs
bEZyYW1lKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTA0LDkgKzkxMiw5IEBAIHB1Ymxp
YzoKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBHZXQgYSBCaXRWZWN0b3Igb2YgYWxs
IG9mIHRoZSBub24tYXJndW1lbnQgbG9jYWxzIGxpdmUgcmlnaHQgbm93LiBUaGlzIGlzIG1vc3Rs
eSB1c2VmdWwgaWYKKyAgICAvLyBHZXQgYSBCaXRWZWN0b3Igb2YgYWxsIG9mIHRoZSBsb2NhbHMg
YW5kIHRtcHMgbGl2ZSByaWdodCBub3cuIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCBpZgogICAgIC8v
IHlvdSB3YW50IHRvIGNvbXBhcmUgdHdvIHNldHMgb2YgbGl2ZSBsb2NhbHMgZnJvbSB0d28gZGlm
ZmVyZW50IENvZGVPcmlnaW5zLgotICAgIEJpdFZlY3RvciBsb2NhbHNMaXZlSW5CeXRlY29kZShD
b2RlT3JpZ2luKTsKKyAgICBCaXRWZWN0b3IgbG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKENv
ZGVPcmlnaW4pOwogCiAgICAgTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50IGFwcHJvcHJpYXRlTGl2
ZW5lc3NDYWxjdWxhdGlvblBvaW50KENvZGVPcmlnaW4gb3JpZ2luLCBib29sIGlzQ2FsbGVyT3Jp
Z2luKQogICAgIHsKQEAgLTkzOCwxMiArOTQ2LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludDo6QmVmb3JlVXNlOwogICAgIH0KICAgICAKLSAgICAv
LyBUZWxscyB5b3UgYWxsIG9mIHRoZSBhcmd1bWVudHMgYW5kIGxvY2FscyBsaXZlIGF0IHRoZSBn
aXZlbiBDb2RlT3JpZ2luLiBUaGlzIGlzIGEgc21hbGwKLSAgICAvLyBleHRlbnNpb24gdG8gZm9y
QWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoKSwgc2luY2UgYWxsIGFyZ3VtZW50cyBhcmUgYWx3YXlz
IHByZXN1bWVkIGxpdmUuCisgICAgLy8gVGVsbHMgeW91IGFsbCBvZiB0aGUgb3BlcmFuZHMgbGl2
ZSBhdCB0aGUgZ2l2ZW4gQ29kZU9yaWdpbi4gVGhpcyBpcyBhIHNtYWxsCisgICAgLy8gZXh0ZW5z
aW9uIHRvIGZvckFsbExvY2Fsc09yVG1wc0xpdmVJbkJ5dGVjb2RlKCksIHNpbmNlIGFsbCBhcmd1
bWVudHMgYXJlIGFsd2F5cyBwcmVzdW1lZCBsaXZlLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+CiAgICAgdm9pZCBmb3JBbGxMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewotICAgICAgICBmb3JBbGxMb2NhbHNM
aXZlSW5CeXRlY29kZShjb2RlT3JpZ2luLCBmdW5jdG9yKTsKKyAgICAgICAgZm9yQWxsTG9jYWxz
QW5kVG1wc0xpdmVJbkJ5dGVjb2RlKGNvZGVPcmlnaW4sIGZ1bmN0b3IpOwogICAgICAgICAKICAg
ICAgICAgLy8gUmVwb3J0IGFsbCBhcmd1bWVudHMgYXMgYmVpbmcgbGl2ZS4KICAgICAgICAgZm9y
ICh1bnNpZ25lZCBhcmd1bWVudCA9IGJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZB
cmd1bWVudHMoKTsgYXJndW1lbnQtLTspCkBAIC0xMTE0LDYgKzExMjIsNyBAQCBwdWJsaWM6CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEJhY2t3YXJkc0NGRz4gbV9iYWNrd2FyZHNDRkc7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPEJhY2t3YXJkc0RvbWluYXRvcnM+IG1fYmFja3dhcmRzRG9taW5hdG9yczsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXM+IG1fY29udHJv
bEVxdWl2YWxlbmNlQW5hbHlzaXM7CisgICAgdW5zaWduZWQgbV90bXBzOwogICAgIHVuc2lnbmVk
IG1fbG9jYWxWYXJzOwogICAgIHVuc2lnbmVkIG1fbmV4dE1hY2hpbmVMb2NhbDsKICAgICB1bnNp
Z25lZCBtX3BhcmFtZXRlclNsb3RzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAppbmRleCA5OWFlZmZjZGMwNWExMWM0NWIw
NTc0MTI1MGY0ZDJhZWI0ZTIyOGNkLi4yMDJkMjI1MDUzZmE5ZGZiZTVjMjNjNjRiY2Y4YmUzODRl
M2U3NjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VB
YnN0cmFjdFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxh
Y2VBYnN0cmFjdFN0YXRlLmNwcApAQCAtNDUsOCArNDUsOCBAQCBzdGF0aWMgY29uc3RleHByIGJv
b2wgdmVyYm9zZSA9IGZhbHNlOwogSW5QbGFjZUFic3RyYWN0U3RhdGU6OkluUGxhY2VBYnN0cmFj
dFN0YXRlKEdyYXBoJiBncmFwaCkKICAgICA6IG1fZ3JhcGgoZ3JhcGgpCiAgICAgLCBtX2Fic3Ry
YWN0VmFsdWVzKCpncmFwaC5tX2Fic3RyYWN0VmFsdWVzQ2FjaGUpCi0gICAgLCBtX3ZhcmlhYmxl
cyhtX2dyYXBoLm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIGdyYXBoLm1fbG9jYWxWYXJz
KQotICAgICwgbV9ibG9jaygwKQorICAgICwgbV92YXJpYWJsZXMoT3BlcmFuZHNMaWtlLCBncmFw
aC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQorICAgICwgbV9ibG9jayhudWxscHRyKQogewog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0
cmFjdFN0YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFj
dFN0YXRlLmgKaW5kZXggYmY1ZWFkMThlYzE2NDdlZTE2NzY2ODgzNTc0MDFmYTdmZWM3MTI5OS4u
MTg2NWU2YTFlZmZjM2RhYWVmZTU4NGNhODYyYzQ5YmMzNjg1ODUwMCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaApAQCAtMTY3
LDEzICsxNjcsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZmFzdEZvcndhcmQobV92YXJp
YWJsZXNbaW5kZXhdKTsKICAgICB9CiAKLSAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKGludCBv
cGVyYW5kKQorICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoT3BlcmFuZCBvcGVyYW5kKQogICAg
IHsKICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQXQobV92YXJpYWJsZXMub3BlcmFuZEluZGV4KG9w
ZXJhbmQpKTsKICAgICB9CiAgICAgCi0gICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkgeyByZXR1cm4gdGhpcy0+b3BlcmFuZChvcGVyYW5kLm9mZnNldCgp
KTsgfQotICAgIAogICAgIEFic3RyYWN0VmFsdWUmIGxvY2FsKHNpemVfdCBpbmRleCkKICAgICB7
CiAgICAgICAgIHJldHVybiB2YXJpYWJsZUF0KG1fdmFyaWFibGVzLmxvY2FsSW5kZXgoaW5kZXgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKaW5kZXgg
NzBlZWY4ODZiNGE4ZmUyOTQzZjQ2YmFlNzZlYzZiNjM3MGU0NTJkNS4uYzU1NDRiYmM1Yzk4MDU2
NjlmOWU3ZjZmZjgwYjlhYzE5NmY0ZGYwOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAKQEAgLTg1LDggKzg1LDYgQEAgdm9pZCBKSVRDb21waWxlcjo6
bGlua09TUkV4aXRzKCkKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRUaHVuayA9IHZtKCkuZ2V0Q1RJU3R1Yihv
c3JFeGl0VGh1bmtHZW5lcmF0b3IpOwotICAgIGF1dG8gb3NyRXhpdFRodW5rTGFiZWwgPSBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4ob3NyRXhpdFRodW5rLmNvZGUoKSk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faml0Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsraSkg
ewogICAgICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9leGl0Q29tcGlsYXRp
b25JbmZvW2ldOwogICAgICAgICBKdW1wTGlzdCYgZmFpbHVyZUp1bXBzID0gaW5mby5tX2ZhaWx1
cmVKdW1wczsKQEAgLTk3LDEzICs5NSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0
cygpCiAKICAgICAgICAgaml0QXNzZXJ0SGFzVmFsaWRDYWxsRnJhbWUoKTsKICAgICAgICAgc3Rv
cmUzMihUcnVzdGVkSW1tMzIoaSksICZ2bSgpLm9zckV4aXRJbmRleCk7Ci0gICAgICAgIGlmIChP
cHRpb25zOjp1c2VQcm9iZU9TUkV4aXQoKSkgewotICAgICAgICAgICAgSnVtcCB0YXJnZXQgPSBq
dW1wKCk7Ci0gICAgICAgICAgICBhZGRMaW5rVGFzayhbdGFyZ2V0LCBvc3JFeGl0VGh1bmtMYWJl
bF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
LmxpbmsodGFyZ2V0LCBvc3JFeGl0VGh1bmtMYWJlbCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBpbmZvLm1fcGF0Y2hhYmxlSnVtcCA9IHBhdGNoYWJsZUp1
bXAoKTsKKyAgICAgICAgaW5mby5tX3BhdGNoYWJsZUp1bXAgPSBwYXRjaGFibGVKdW1wKCk7CiAg
ICAgfQogfQogCkBAIC01OTUsMTEgKzU4NywxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjpub3RpY2VP
U1JFbnRyeShCYXNpY0Jsb2NrJiBiYXNpY0Jsb2NrLCBKSVRDb21waWxlcjo6TGFiZWwgYmxvYwog
ICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpICE9IHZh
cmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkgeworCisgICAgICAgICAgICBBU1NFUlQoIXZhcmlhYmxl
LT5vcGVyYW5kKCkuaXNUbXAoKSk7CisgICAgICAgICAgICBpZiAodmFyaWFibGUtPm9wZXJhbmQo
KS52aXJ0dWFsUmVnaXN0ZXIoKSAhPSB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpIHsKICAgICAg
ICAgICAgICAgICBlbnRyeS0+bV9yZXNodWZmbGluZ3MuYXBwZW5kKAogICAgICAgICAgICAgICAg
ICAgICBPU1JFbnRyeVJlc2h1ZmZsaW5nKAotICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFi
bGUtPmxvY2FsKCkub2Zmc2V0KCksIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKS5vZmZzZXQoKSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVn
aXN0ZXIoKS5vZmZzZXQoKSwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLm9mZnNldCgpKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmgKaW5kZXggZDFiZDdkYTlkZmZkYzM2YzI2MGU2MzVjYjYwMGE5YjJm
MTkxOWQzNS4uNDg4MDg3NGMyODVhYjdkNDQ3ZWI4OTNhNmU4YjRiYmYwMTA3MzFkNCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaApAQCAtMTM1LDcgKzEzNSw3
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZW1pdFN0b3JlQ2FsbFNpdGVJbmRleChDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlKQogICAgIHsKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNp
dGUuYml0cygpKSwgdGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7CisgICAgICAgIHN0b3JlMzIoVHJ1
c3RlZEltbTMyKGNhbGxTaXRlLmJpdHMoKSksIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcykpOwogICAgIH0KIAogICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZy
b20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBo
YXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQ
cmVzZXJ2YXRpb25QaGFzZS5jcHAKaW5kZXggNDJmNjhhZGEzMjQ3OGExMTcxY2VhZDBmOTNlMDhh
YzI1Y2E2MzEzNC4uNWMzNWU1MzVlNWRkNjYxZDMxZGQ1MTMwZDdjMTJiYWNiYWRiMmMwZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVBy
ZXNlcnZhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xp
dmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwCkBAIC02Myw3ICs2Myw3IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYm9vbCBpc1ZhbGlkRmx1
c2hMb2NhdGlvbihCYXNpY0Jsb2NrKiBzdGFydGluZ0Jsb2NrLCB1bnNpZ25lZCBpbmRleCwgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgYm9vbCBpc1ZhbGlkRmx1c2hMb2NhdGlvbihCYXNp
Y0Jsb2NrKiBzdGFydGluZ0Jsb2NrLCB1bnNpZ25lZCBpbmRleCwgT3BlcmFuZCBvcGVyYW5kKQog
ICAgIHsKICAgICAgICAgLy8gVGhpcyBjb2RlIGlzIG5vdCBtZWFudCB0byBiZSBmYXN0LiBXZSBq
dXN0IHVzZSBpdCBmb3IgYXNzZXJ0aW9ucy4gSWYgd2UgZ290IGxpdmVuZXNzIHdyb25nLAogICAg
ICAgICAvLyB0aGlzIGZ1bmN0aW9uIHdvdWxkIHJldHVybiBmYWxzZSBmb3IgYSBGbHVzaCB0aGF0
IHdlIGluc2VydC4KQEAgLTgxLDcgKzgxLDcgQEAgcHVibGljOgogICAgICAgICBhdXRvIGZsdXNo
SXNEZWZpbml0ZWx5SW52YWxpZCA9IFsmXSAoQmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIGlu
ZGV4KSB7CiAgICAgICAgICAgICBib29sIGFsbEdvb2QgPSBmYWxzZTsKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGluZGV4OyBpLS07ICkgewotICAgICAgICAgICAgICAgIGlmIChibG9j
ay0+YXQoaSktPmFjY2Vzc2VzU3RhY2sobV9ncmFwaCkgJiYgYmxvY2stPmF0KGkpLT5sb2NhbCgp
ID09IG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYmxvY2stPmF0KGkpLT5hY2Nlc3Nl
c1N0YWNrKG1fZ3JhcGgpICYmIGJsb2NrLT5hdChpKS0+b3BlcmFuZCgpID09IG9wZXJhbmQpIHsK
ICAgICAgICAgICAgICAgICAgICAgYWxsR29vZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTExNSw4ICsxMTUsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBoYW5kbGVCbG9ja0ZvclRyeUNhdGNoKEJhc2ljQmxvY2sqIGJsb2NrLCBJbnNlcnRp
b25TZXQmIGluc2VydGlvblNldCkKICAgICB7CiAgICAgICAgIEhhbmRsZXJJbmZvKiBjdXJyZW50
RXhjZXB0aW9uSGFuZGxlciA9IG51bGxwdHI7Ci0gICAgICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUF0
Q2F0Y2hIZWFkOwotICAgICAgICBsaXZlQXRDYXRjaEhlYWQucmVzaXplKG1fZ3JhcGguYmxvY2so
MCktPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgT3BlcmFuZHM8
Ym9vbD4gbGl2ZUF0Q2F0Y2hIZWFkKDAsIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0VGFp
bC5udW1iZXJPZkxvY2FscygpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdFRhaWwubnVt
YmVyT2ZUbXBzKCkpOwogCiAgICAgICAgIEhhbmRsZXJJbmZvKiBjYWNoZWRIYW5kbGVyUmVzdWx0
OwogICAgICAgICBDb2RlT3JpZ2luIGNhY2hlZENvZGVPcmlnaW47CkBAIC0xMzMsMTEgKzEzMiwx
MSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUgPSBvcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgICAgICAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxG
cmFtZSk7CiAgICAgICAgICAgICAgICAgaWYgKEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gY29kZUJs
b2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4VG9DaGVjaykpIHsKLSAg
ICAgICAgICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLmNsZWFyQWxsKCk7CisgICAgICAgICAg
ICAgICAgICAgIGxpdmVBdENhdGNoSGVhZC5maWxsKGZhbHNlKTsKIAogICAgICAgICAgICAgICAg
ICAgICBCeXRlY29kZUluZGV4IGNhdGNoQnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoaGFu
ZGxlci0+dGFyZ2V0KTsKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5mb3JBbGxMb2NhbHNM
aXZlSW5CeXRlY29kZShDb2RlT3JpZ2luKGNhdGNoQnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZy
YW1lKSwgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgbGl2ZUF0Q2F0Y2hIZWFkW29wZXJhbmQudG9Mb2NhbCgpXSA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGguZm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKENv
ZGVPcmlnaW4oY2F0Y2hCeXRlY29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUpLCBbJl0gKE9wZXJh
bmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLm9w
ZXJhbmQob3BlcmFuZCkgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9KTsKIAogICAgICAg
ICAgICAgICAgICAgICBjYWNoZWRIYW5kbGVyUmVzdWx0ID0gaGFuZGxlcjsKQEAgLTE1NiwxMiAr
MTU1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBjYWNoZWRIYW5kbGVyUmVzdWx0
OwogICAgICAgICB9OwogCi0gICAgICAgIE9wZXJhbmRzPFZhcmlhYmxlQWNjZXNzRGF0YSo+IGN1
cnJlbnRCbG9ja0FjY2Vzc0RhdGEoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3Vt
ZW50cygpLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCksIG51bGxwdHIp
OworICAgICAgICBPcGVyYW5kczxWYXJpYWJsZUFjY2Vzc0RhdGEqPiBjdXJyZW50QmxvY2tBY2Nl
c3NEYXRhKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbCwgbnVsbHB0cik7CiAK
ICAgICAgICAgYXV0byBmbHVzaEV2ZXJ5dGhpbmcgPSBbJl0gKE5vZGVPcmlnaW4gb3JpZ2luLCB1
bnNpZ25lZCBpbmRleCkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY3VycmVudEV4Y2Vw
dGlvbkhhbmRsZXIpOwotICAgICAgICAgICAgYXV0byBmbHVzaCA9IFsmXSAoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICBpZiAoKG9wZXJhbmQuaXNMb2NhbCgpICYm
IGxpdmVBdENhdGNoSGVhZFtvcGVyYW5kLnRvTG9jYWwoKV0pIHx8IG9wZXJhbmQuaXNBcmd1bWVu
dCgpKSB7CisgICAgICAgICAgICBhdXRvIGZsdXNoID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsK
KyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkgfHwgbGl2ZUF0Q2F0Y2hI
ZWFkLm9wZXJhbmQob3BlcmFuZCkpIHsKIAogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXNW
YWxpZEZsdXNoTG9jYXRpb24oYmxvY2ssIGluZGV4LCBvcGVyYW5kKSk7CiAKQEAgLTE3OCw2ICsx
NzcsOCBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9jYWwgPSAwOyBs
b2NhbCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgbG9jYWwrKykK
ICAgICAgICAgICAgICAgICBmbHVzaCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChsb2NhbCkpOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB0bXAgPSAwOyB0bXAgPCBibG9jay0+dmFyaWFibGVz
QXRUYWlsLm51bWJlck9mVG1wcygpOyArK3RtcCkKKyAgICAgICAgICAgICAgICBmbHVzaChPcGVy
YW5kOjp0bXAodG1wKSk7CiAgICAgICAgICAgICBmbHVzaChWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZy
YW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSkpOwogICAgICAgICB9OwogCkBAIC0xOTIsOSArMTkz
LDggQEAgcHVibGljOgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoY3VycmVudEV4
Y2VwdGlvbkhhbmRsZXIgJiYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgfHwgbm9kZS0+b3AoKSA9
PSBTZXRBcmd1bWVudERlZmluaXRlbHkgfHwgbm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudE1heWJl
KSkgewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gbm9kZS0+bG9j
YWwoKTsKLSAgICAgICAgICAgICAgICBpZiAoKG9wZXJhbmQuaXNMb2NhbCgpICYmIGxpdmVBdENh
dGNoSGVhZFtvcGVyYW5kLnRvTG9jYWwoKV0pIHx8IG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7Ci0K
KyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBub2RlLT5vcGVyYW5kKCk7CisgICAg
ICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpIHx8IGxpdmVBdENhdGNoSGVhZC5v
cGVyYW5kKG9wZXJhbmQpKSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpc1ZhbGlkRmx1
c2hMb2NhdGlvbihibG9jaywgbm9kZUluZGV4LCBvcGVyYW5kKSk7CiAKICAgICAgICAgICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBjdXJyZW50Qmxv
Y2tBY2Nlc3NEYXRhLm9wZXJhbmQob3BlcmFuZCk7CkBAIC0yMDcsNyArMjA3LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAobm9kZS0+YWNjZXNzZXNTdGFjayht
X2dyYXBoKSkKLSAgICAgICAgICAgICAgICBjdXJyZW50QmxvY2tBY2Nlc3NEYXRhLm9wZXJhbmQo
bm9kZS0+bG9jYWwoKSkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAg
ICAgICBjdXJyZW50QmxvY2tBY2Nlc3NEYXRhLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGN1cnJl
bnRFeGNlcHRpb25IYW5kbGVyKSB7CkBAIC0yMTYsNyArMjE2LDcgQEAgcHVibGljOgogICAgICAg
ICB9CiAgICAgfQogCi0gICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBuZXdWYXJpYWJsZUFjY2Vzc0Rh
dGEoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBuZXdW
YXJpYWJsZUFjY2Vzc0RhdGEoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgQVNTRVJU
KCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAKaW5kZXggNzNhM2Q3NWI3
NjBiNTJiOTY3NjM3MTMzZDZhMGZlZmIwMGViZWQ4Ny4uZmZmOTZiZmNmNjI5ZWI0ZDA1MmU3YjE0
MjdiMmI2N2IwNTRjMWEwMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCkBAIC04NSw3ICs4NSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIG1fc3RhdGUuZmlsbChFcG9jaCgpKTsKICAgICAgICAgbV9ncmFwaC5mb3JBbGxMaXZl
SW5CeXRlY29kZSgKICAgICAgICAgICAgIGJsb2NrLT50ZXJtaW5hbCgpLT5vcmlnaW4uZm9yRXhp
dCwKLSAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgeworICAgICAgICAgICAg
WyZdIChPcGVyYW5kIHJlZykgewogICAgICAgICAgICAgICAgIG1fc3RhdGUub3BlcmFuZChyZWcp
ID0gY3VycmVudEVwb2NoOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIApAQCAtOTksNyArOTks
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5k
ZXgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBNb3ZIaW50
KSB7Ci0gICAgICAgICAgICAgICAgRXBvY2ggbG9jYWxFcG9jaCA9IG1fc3RhdGUub3BlcmFuZChu
b2RlLT51bmxpbmtlZExvY2FsKCkpOworICAgICAgICAgICAgICAgIEVwb2NoIGxvY2FsRXBvY2gg
PSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpOwogICAgICAgICAgICAg
ICAgIGlmIChERkdNb3ZIaW50UmVtb3ZhbFBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIiAgICBBdCAiLCBub2RlLCAiOiBjdXJyZW50ID0gIiwgY3Vy
cmVudEVwb2NoLCAiLCBsb2NhbCA9ICIsIGxvY2FsRXBvY2gsICJcbiIpOwogICAgICAgICAgICAg
ICAgIGlmICghbG9jYWxFcG9jaCB8fCBsb2NhbEVwb2NoID09IGN1cnJlbnRFcG9jaCkgewpAQCAt
MTA3LDcgKzEwNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
MSgpID0gRWRnZSgpOwogICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+dW5s
aW5rZWRMb2NhbCgpKSA9IEVwb2NoKCk7CisgICAgICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5k
KG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSA9IEVwb2NoKCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGlmIChtYXlFeGl0KG1fZ3JhcGgsIG5vZGUpICE9IERvZXNO
b3RFeGl0KQpAQCAtMTE2LDE1ICsxMTYsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChu
b2RlSW5kZXgpIHsKICAgICAgICAgICAgICAgICBmb3JBbGxLaWxsZWRPcGVyYW5kcygKICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaCwgYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpLCBub2RlLAot
ICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAgICAgICAg
ICAgICAgICAgICAgWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgYSBiaXQgc2xvcHB5IC0gaXQgbWlnaHQgY2xhaW0gdG8g
a2lsbCBhIGxvY2FsIGV2ZW4gaWYKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0J3Mgc3Rp
bGwgbGl2ZSBhZnRlci4gV2UgbmVlZCB0byBwcm90ZWN0IGFnYWluc3QgdGhhdC4KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghIW1fc3RhdGUub3BlcmFuZChyZWcpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCEhbV9zdGF0ZS5vcGVyYW5kKG9wZXJhbmQpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKERGR01vdkhpbnRSZW1vdmFsUGhhc2VJbnRlcm5hbDo6dmVy
Ym9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgS2lsbGVkIG9w
ZXJhbmQgYXQgIiwgbm9kZSwgIjogIiwgcmVnLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fc3RhdGUub3BlcmFuZChyZWcpID0gY3VycmVudEVwb2NoOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIiAgICBLaWxsZWQgb3BlcmFuZCBhdCAiLCBub2RlLCAiOiAi
LCBvcGVyYW5kLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUub3BlcmFu
ZChvcGVyYW5kKSA9IGN1cnJlbnRFcG9jaDsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKaW5kZXgg
NGJmZDNlNWE1MjEwMDUxMWE5ZTcyMzA4MzQ1YmRiOWMwYTA2ZmI3Ni4uNTE3YWYxMDAzYWZjZTZk
MzVmNzE0NWRiYjY5NTFmMThjYzIyM2I2OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgKQEAgLTI1MSwxMyArMjUxLDEzIEBAIHN0cnVjdCBTdGFja0FjY2Vzc0RhdGEgewogICAgIHsK
ICAgICB9CiAgICAgCi0gICAgU3RhY2tBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBsb2NhbCwg
Rmx1c2hGb3JtYXQgZm9ybWF0KQotICAgICAgICA6IGxvY2FsKGxvY2FsKQorICAgIFN0YWNrQWNj
ZXNzRGF0YShPcGVyYW5kIG9wZXJhbmQsIEZsdXNoRm9ybWF0IGZvcm1hdCkKKyAgICAgICAgOiBv
cGVyYW5kKG9wZXJhbmQpCiAgICAgICAgICwgZm9ybWF0KGZvcm1hdCkKICAgICB7CiAgICAgfQog
ICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbDsKKyAgICBPcGVyYW5kIG9wZXJhbmQ7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVMb2NhbDsKICAgICBGbHVzaEZvcm1hdCBmb3JtYXQ7
CiAgICAgCkBAIC05MTUsNiArOTE1LDcgQEAgcHVibGljOgogICAgICAgICBzd2l0Y2ggKG9wKCkp
IHsKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgICAgIGNhc2UgR2V0TXlB
cmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CisgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAg
ICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKICAg
ICAgICAgY2FzZSBDYWxsVmFyYXJnczoKQEAgLTkzNiw5ICs5MzcsMTEgQEAgcHVibGljOgogICAg
ICAgICBzd2l0Y2ggKG9wKCkpIHsKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAg
ICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CisgICAgICAgIGNhc2Ug
VmFyYXJnc0xlbmd0aDoKKyAgICAgICAgICAgIHJldHVybiBjaGlsZDEoKTsKICAgICAgICAgY2Fz
ZSBMb2FkVmFyYXJnczoKICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKLSAgICAgICAgICAg
IHJldHVybiBjaGlsZDEoKTsKKyAgICAgICAgICAgIHJldHVybiBjaGlsZDIoKTsKICAgICAgICAg
Y2FzZSBDYWxsVmFyYXJnczoKICAgICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAg
ICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKQEAgLTk4Niw5ICs5ODksOSBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBtX29wSW5mby5hczxWYXJpYWJsZUFjY2Vzc0RhdGEqPigpLT5maW5kKCk7
CiAgICAgfQogICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCgpCisgICAgT3BlcmFuZCBv
cGVyYW5kKCkKICAgICB7Ci0gICAgICAgIHJldHVybiB2YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bG9j
YWwoKTsKKyAgICAgICAgcmV0dXJuIHZhcmlhYmxlQWNjZXNzRGF0YSgpLT5vcGVyYW5kKCk7CiAg
ICAgfQogICAgIAogICAgIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lTG9jYWwoKQpAQCAtOTk2LDcg
Kzk5OSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQWNjZXNzRGF0YSgpLT5t
YWNoaW5lTG9jYWwoKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBoYXNVbmxpbmtlZExvY2FsKCkK
KyAgICBib29sIGhhc1VubGlua2VkT3BlcmFuZCgpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG9w
KCkpIHsKICAgICAgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKQEAgLTEwMDksMTAgKzEw
MTIsMTAgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIFZpcnR1YWxSZWdp
c3RlciB1bmxpbmtlZExvY2FsKCkKKyAgICBPcGVyYW5kIHVubGlua2VkT3BlcmFuZCgpCiAgICAg
ewotICAgICAgICBBU1NFUlQoaGFzVW5saW5rZWRMb2NhbCgpKTsKLSAgICAgICAgcmV0dXJuIFZp
cnR1YWxSZWdpc3RlcihtX29wSW5mby5hczxpbnQzMl90PigpKTsKKyAgICAgICAgQVNTRVJUKGhh
c1VubGlua2VkT3BlcmFuZCgpKTsKKyAgICAgICAgcmV0dXJuIE9wZXJhbmQ6OmZyb21CaXRzKG1f
b3BJbmZvLmFzPHVpbnQ2NF90PigpKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBoYXNTdGFja0Fj
Y2Vzc0RhdGEoKQpAQCAtMTM2Myw3ICsxMzY2LDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wg
aGFzTG9hZFZhcmFyZ3NEYXRhKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcCgpID09IExvYWRW
YXJhcmdzIHx8IG9wKCkgPT0gRm9yd2FyZFZhcmFyZ3M7CisgICAgICAgIHJldHVybiBvcCgpID09
IExvYWRWYXJhcmdzIHx8IG9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MgfHwgb3AoKSA9PSBWYXJhcmdz
TGVuZ3RoOwogICAgIH0KICAgICAKICAgICBMb2FkVmFyYXJnc0RhdGEqIGxvYWRWYXJhcmdzRGF0
YSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKaW5kZXggYzA0N2M2ZTcx
ODI1OWFhOTVmNWQxM2FhYTg3MGY4MTcxNDYxY2NlYi4uN2M2ZDFiMmFmYzVhZmY0NzQ3NjgxMDNh
NWUxM2QzYTIyMjZjYTZmYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aApAQCAtNzQsNiArNzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAg
bWFjcm8oR2V0TG9jYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBt
YWNybyhTZXRMb2NhbCwgMCkgXAogICAgIFwKKyAgICAvKiBUaGVzZSBhcmUgdXNlZCBpbiBTU0Eg
Zm9ybSB0byByZXByZXNlbnQgdG8gdHJhY2sgKi9cCiAgICAgbWFjcm8oUHV0U3RhY2ssIE5vZGVN
dXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhLaWxsU3RhY2ssIE5vZGVNdXN0R2VuZXJhdGUpIFwK
ICAgICBtYWNybyhHZXRTdGFjaywgTm9kZVJlc3VsdEpTKSBcCkBAIC0yMDIsNiArMjAzLDcgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEdldEJ5VmFsV2l0aFRo
aXMsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhHZXRNeUFy
Z3VtZW50QnlWYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNy
byhHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kcywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RH
ZW5lcmF0ZSkgXAorICAgIG1hY3JvKFZhcmFyZ3NMZW5ndGgsIE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlUmVzdWx0SW50MzIpIFwKICAgICBtYWNybyhMb2FkVmFyYXJncywgTm9kZU11c3RHZW5lcmF0
ZSkgXAogICAgIG1hY3JvKEZvcndhcmRWYXJhcmdzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAg
bWFjcm8oUHV0QnlWYWxEaXJlY3QsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykg
XApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZh
aWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKaW5kZXggNzliYzc5NjgzMTEzMGMwMzdkNTQ3MGMw
ZTc5ZDViMGQ5OTU2MjYzZi4uZDBhOTQwNmYwMjAyMzM1ZmIyMDk0ZmFjOWI0MTcxNzI4NTI5NTcw
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCkBAIC0zNSwxMSArMzUsOSBAQAogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotbmFt
ZXNwYWNlIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2VJbnRlcm5hbCB7Ci1zdGF0aWMg
Y29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotfQogCiBjbGFzcyBPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlIDogcHVibGljIFBoYXNlIHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgdmVyYm9zZSA9IGZhbHNlOwogcHVibGljOgogICAgIE9TUkF2YWlsYWJpbGl0eUFuYWx5c2lz
UGhhc2UoR3JhcGgmIGdyYXBoKQogICAgICAgICA6IFBoYXNlKGdyYXBoLCAiT1NSIGF2YWlsYWJp
bGl0eSBhbmFseXNpcyIpCkBAIC03NSw4ICs3Myw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGRh
dGFMb2coIkxpdmU6ICIpOwogICAgICAgICAgICAgbV9ncmFwaC5mb3JBbGxMaXZlSW5CeXRlY29k
ZSgKICAgICAgICAgICAgICAgICBibG9jay0+YXQoMCktPm9yaWdpbi5mb3JFeGl0LAotICAgICAg
ICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgewotICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKHJlZywgIiAiKTsKKyAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFu
ZCkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKG9wZXJhbmQsICIgIik7CiAgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICBkYXRhTG9nTG4oIiIpOwogICAgICAgICB9OwpAQCAt
OTEsNyArODksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgaWYgKERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkg
eworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2dMbigiQmVmb3JlIGNoYW5naW5nIEJsb2NrICMiLCBibG9jay0+aW5kZXgpOwogICAgICAg
ICAgICAgICAgICAgICBkdW1wQXZhaWxhYmlsaXR5KGJsb2NrKTsKICAgICAgICAgICAgICAgICB9
CkBAIC0xMDYsNyArMTA0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGJsb2NrLT5zc2Et
PmF2YWlsYWJpbGl0eUF0VGFpbCA9IGNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHk7CiAgICAgICAg
ICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAKLSAgICAgICAgICAgICAgICBpZiAoREZHT1NSQXZh
aWxhYmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJBZnRlciBj
aGFuZ2luZyBCbG9jayAjIiwgYmxvY2stPmluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgZHVt
cEF2YWlsYWJpbGl0eShibG9jayk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTIwLDcgKzExOCw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0g
YmxvY2stPnN1Y2Nlc3NvcihzdWNjZXNzb3JJbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIHN1
Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQucHJ1bmVCeUxpdmVuZXNzKAogICAgICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgc3VjY2Vzc29yLT5hdCgwKS0+b3JpZ2luLmZvckV4
aXQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQ
aGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3Nl
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkFmdGVyIHBydW5pbmcgQmxv
Y2sgIyIsIHN1Y2Nlc3Nvci0+aW5kZXgpOwogICAgICAgICAgICAgICAgICAgICAgICAgZHVtcEF2
YWlsYWJpbGl0eShzdWNjZXNzb3IpOwogICAgICAgICAgICAgICAgICAgICAgICAgZHVtcEJ5dGVj
b2RlTGl2ZW5lc3NBdEhlYWQoc3VjY2Vzc29yKTsKQEAgLTIwOCwyOCArMjA2LDI4IEBAIHZvaWQg
TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZShOb2RlKiBub2RlKQog
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgIGNhc2UgUHV0U3RhY2s6IHsKICAgICAgICAg
U3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAg
IG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+bG9jYWwpLnNldEZsdXNoKGRh
dGEtPmZsdXNoZWRBdCgpKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFu
ZChkYXRhLT5vcGVyYW5kKS5zZXRGbHVzaChkYXRhLT5mbHVzaGVkQXQoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBLaWxsU3RhY2s6IHsKLSAgICAgICAgbV9h
dmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpLnNldEZs
dXNoKEZsdXNoZWRBdChDb25mbGljdGluZ0ZsdXNoKSk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5
Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpLnNldEZsdXNoKEZsdXNo
ZWRBdChDb25mbGljdGluZ0ZsdXNoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNh
c2UgR2V0U3RhY2s6IHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3Rh
Y2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQo
ZGF0YS0+bG9jYWwpID0gQXZhaWxhYmlsaXR5KG5vZGUsIGRhdGEtPmZsdXNoZWRBdCgpKTsKKyAg
ICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5vcGVyYW5kKSA9IEF2
YWlsYWJpbGl0eShub2RlLCBkYXRhLT5mbHVzaGVkQXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAogICAgIGNhc2UgTW92SGludDogewotICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fs
cy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkuc2V0Tm9kZShub2RlLT5jaGlsZDEoKS5u
b2RlKCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVu
bGlua2VkT3BlcmFuZCgpKS5zZXROb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgWm9tYmllSGludDogewotICAgICAgICBtX2F2YWls
YWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkuc2V0Tm9kZVVu
YXZhaWxhYmxlKCk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9k
ZS0+dW5saW5rZWRPcGVyYW5kKCkpLnNldE5vZGVVbmF2YWlsYWJsZSgpOwogICAgICAgICBicmVh
azsKICAgICB9CiAKQEAgLTI0MiwxNSArMjQwLDE4IEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxp
dHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZShOb2RlKiBub2RlKQogICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwogICAgIH0KLSAgICAgICAgCisKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIEZv
cndhcmRWYXJhcmdzOiB7CiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxv
YWRWYXJhcmdzRGF0YSgpOwotICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5k
KGRhdGEtPmNvdW50KSA9Ci0gICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNo
ZWRJbnQzMiwgZGF0YS0+bWFjaGluZUNvdW50KSk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1f
bG9jYWxzLm9wZXJhbmQoZGF0YS0+Y291bnQpID0gQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVz
aGVkSW50MzIsIGRhdGEtPm1hY2hpbmVDb3VudCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBkYXRhLT5saW1pdDsgaS0tOykgewotICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2Nh
bHMub3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKSkgPQot
ICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIFZp
cnR1YWxSZWdpc3RlcihkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCkgKyBpKSkpOworICAgICAg
ICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5zdGFydCArIGkpID0K
KyAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCBk
YXRhLT5tYWNoaW5lU3RhcnQgKyBpKSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAg
fQpAQCAtMjcyLDIwICsyNzMsMjAgQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0
b3I6OmV4ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICAvLyBSZWNvcmQgaG93IHRvIHJlYWQgZWFjaCBh
cmd1bWVudCBhbmQgdGhlIGFyZ3VtZW50IGNvdW50LgogICAgICAgICAgICAgQXZhaWxhYmlsaXR5
IGFyZ3VtZW50Q291bnQgPQotICAgICAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxz
Lm9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKKyAgICAgICAgICAgICAgICBtX2F2YWlsYWJpbGl0
eS5tX2xvY2Fscy5vcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3Rl
ZEhlYXBMb2NhdGlvbihBcmd1bWVudENvdW50UExvYywgbm9kZSksIGFyZ3VtZW50Q291bnQpOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1
cmVDYWxsKSB7CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgY2FsbGVlID0gbV9hdmFpbGFiaWxp
dHkubV9sb2NhbHMub3BlcmFuZCgKLSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSkpOwogICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3Rl
ZEhlYXBMb2NhdGlvbihBcmd1bWVudHNDYWxsZWVQTG9jLCBub2RlKSwgY2FsbGVlKTsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXA7IGkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
IC0gMTsgKytpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bWJlck9mQXJndW1lbnRz
VG9Ta2lwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsgKytpKSB7CiAgICAgICAgICAgICBBdmFpbGFiaWxp
dHkgYXJndW1lbnQgPSBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKAotICAgICAgICAg
ICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50
T2Zmc2V0KGkpKTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoaSkpKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3RlZEhl
YXBMb2NhdGlvbihBcmd1bWVudFBMb2MsIG5vZGUsIGkpLCBhcmd1bWVudCk7CiAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKaW5kZXggNDQ5NzMwODM5
Yzk0NDUwNzI1NzFhNWIwYzdjOTRiODQzZTg5MGRjNy4uZWU1ZjdmM2Q2OGUyZWEwZWIxZGRlZjEz
OWZmOTM5YjZhZDg5ZDkzOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFbnRyeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRy
eS5jcHAKQEAgLTMyMiw3ICszMjIsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjbwogICAgIAog
ICAgIC8vIDcpIEZpeCB0aGUgY2FsbCBmcmFtZSB0byBoYXZlIHRoZSByaWdodCBjb2RlIGJsb2Nr
LgogICAgIAotICAgICpiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKio+KHBpdm90IC0gMSAtIENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jaykgPSBjb2RlQmxvY2s7CisgICAgKmJpdHdpc2VfY2FzdDxDb2Rl
QmxvY2sqKj4ocGl2b3QgLSAoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICsgMSkpID0gY29kZUJs
b2NrOwogICAgIAogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAgIGRhdGFM
b2dGKCIgICAgT1NSIHJldHVybmluZyBkYXRhIGJ1ZmZlciAlcC5cbiIsIHNjcmF0Y2gpOwpAQCAt
MzgyLDEwICszODIsMTAgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWc+IHByZXBhcmVDYXRjaE9TUkVudHJ5KFZNJiB2bSwgQ2FsbEYKIAogICAgIGF1dG8gaW5z
dHJ1Y3Rpb24gPSBiYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoY2FsbEZyYW1l
LT5ieXRlY29kZUluZGV4KCkpOwogICAgIEFTU0VSVChpbnN0cnVjdGlvbi0+aXM8T3BDYXRjaD4o
KSk7Ci0gICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2F0Y2g+KCkubWV0YWRhdGEoYmFzZWxpbmVDb2RlQmxvY2spLm1fYnVmZmVyOwor
ICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wQ2F0Y2g+KCkubWV0YWRhdGEoYmFzZWxpbmVDb2RlQmxvY2spLm1fYnVmZmVy
OwogICAgIEpTVmFsdWUqIGRhdGFCdWZmZXIgPSByZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihk
ZmdDb21tb24tPmNhdGNoT1NSRW50cnlCdWZmZXItPmRhdGFCdWZmZXIoKSk7CiAgICAgdW5zaWdu
ZWQgaW5kZXggPSAwOwotICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9w
ZXJhbmQmIHByb2ZpbGUpIHsKKyAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVB
bmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgaWYgKCFWaXJ0dWFsUmVnaXN0
ZXIocHJvZmlsZS5tX29wZXJhbmQpLmlzTG9jYWwoKSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgZGF0YUJ1ZmZlcltpbmRleF0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIocHJvZmlsZS5t
X29wZXJhbmQpLmpzVmFsdWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKaW5kZXggZGM3NmJjYmFl
ZDQxZWVlMDYzZGZkYmVhODQ1MDY2NTUzZDBjYjRkNi4uNjA5Njg2NjNiNjRjMmI2ODU0ZTQ2MTYx
Zjk0OTk0NjU3ZTFhZWZkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKQEAgLTEwMiwxMCArMTAy
LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUg
PSBwcmV2aW91c0hlYWQtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgbG9jYWxz
W2xvY2FsXSA9IG5ld1Jvb3QtPmFwcGVuZE5vZGUoCiAgICAgICAgICAgICAgICAgbV9ncmFwaCwg
dmFyaWFibGUtPnByZWRpY3Rpb24oKSwgRXh0cmFjdE9TUkVudHJ5TG9jYWwsIG9yaWdpbiwKLSAg
ICAgICAgICAgICAgICBPcEluZm8odmFyaWFibGUtPmxvY2FsKCkub2Zmc2V0KCkpKTsKKyAgICAg
ICAgICAgICAgICBPcEluZm8odmFyaWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSkp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBuZXdSb290LT5hcHBlbmROb2RlKAotICAgICAg
ICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBNb3ZIaW50LCBvcmlnaW4sIE9wSW5mbyh2YXJp
YWJsZS0+bG9jYWwoKS5vZmZzZXQoKSksCisgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05v
bmUsIE1vdkhpbnQsIG9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlLT5vcGVyYW5kKCkudmlydHVhbFJl
Z2lzdGVyKCkpLAogICAgICAgICAgICAgICAgIEVkZ2UobG9jYWxzW2xvY2FsXSkpOwogICAgICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCmluZGV4IDFiOGUy
NzhlNGQ1ZWUxMmRhMDk2YzBlOTAxYThjZjQ5M2RmYjJmYzYuLjIzOWRmNTJhODI5MmEyYjM1Y2U2
Zjc3MjU2OGZlN2NjOWM2ZDNhODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0LmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQXNzZW1ibHlIZWxwZXJzLmgi
CiAjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhp
dFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkRG
R0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHTWF5RXhpdC5oIgpAQCAtNDcsODk1ICs0OCw2IEBACiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotLy8gUHJvYmUgYmFzZWQgT1NSIEV4
aXQuCi0KLXVzaW5nIENQVVN0YXRlID0gUHJvYmU6OkNQVVN0YXRlOwotdXNpbmcgQ29udGV4dCA9
IFByb2JlOjpDb250ZXh0OwotdXNpbmcgRnJhbWUgPSBQcm9iZTo6RnJhbWU7Ci0KLXN0YXRpYyB2
b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoUHJvYmU6OkNvbnRleHQmLCBDb2RlQmxvY2sqIGJh
c2VsaW5lQ29kZUJsb2NrLCBjb25zdCBPU1JFeGl0QmFzZSYpOwotc3RhdGljIHZvaWQgYWRqdXN0
QW5kSnVtcFRvVGFyZ2V0KFByb2JlOjpDb250ZXh0JiwgVk0mLCBDb2RlQmxvY2sqLCBDb2RlQmxv
Y2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBPU1JFeGl0Jik7Ci1zdGF0aWMgdm9pZCBwcmludE9TUkV4
aXQoQ29udGV4dCYsIHVpbnQzMl90IG9zckV4aXRJbmRleCwgY29uc3QgT1NSRXhpdCYpOwotCi1z
dGF0aWMgSlNWYWx1ZSBqc1ZhbHVlRm9yKENQVVN0YXRlJiBjcHUsIEpTVmFsdWVTb3VyY2Ugc291
cmNlKQotewotICAgIGlmIChzb3VyY2UuaXNBZGRyZXNzKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQ7Ci0gICAgICAgIHN0ZDo6bWVtY3B5KCZyZXN1bHQsIGNwdS5ncHI8dWludDhfdCo+KHNv
dXJjZS5iYXNlKCkpICsgc291cmNlLm9mZnNldCgpLCBzaXplb2YoSlNWYWx1ZSkpOwotICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHJldHVybiBK
U1ZhbHVlOjpkZWNvZGUoY3B1LmdwcjxFbmNvZGVkSlNWYWx1ZT4oc291cmNlLmdwcigpKSk7Ci0j
ZWxzZQotICAgIGlmIChzb3VyY2UuaGFzS25vd25UYWcoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWUoc291cmNlLnRhZygpLCBjcHUuZ3ByPGludDMyX3Q+KHNvdXJjZS5wYXlsb2FkR1BSKCkpKTsK
LSAgICByZXR1cm4gSlNWYWx1ZShjcHUuZ3ByPGludDMyX3Q+KHNvdXJjZS50YWdHUFIoKSksIGNw
dS5ncHI8aW50MzJfdD4oc291cmNlLnBheWxvYWRHUFIoKSkpOwotI2VuZGlmCi19Ci0KLSNpZiBO
VU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKLQotLy8gQmFzZWQgb24gQXNzZW1i
bHlIZWxwZXJzOjplbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCkuCi1zdGF0aWMgdm9pZCByZXN0
b3JlQ2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2sp
Ci17Ci0gICAgQVNTRVJUKGNvZGVCbG9jayk7Ci0KLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0
TGlzdCogY2FsbGVlU2F2ZXMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAg
ICBSZWdpc3RlclNldCBkb250UmVzdG9yZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVy
U2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdpc3RlclNldDo6YWxsRlBScygpKTsKLSAgICB1bnNp
Z25lZCByZWdpc3RlckNvdW50ID0gY2FsbGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIFVDUFVSZWdp
c3RlciogcGh5c2ljYWxTdGFja0ZyYW1lID0gY29udGV4dC5mcDxVQ1BVUmVnaXN0ZXIqPigpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAg
ICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGNhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAg
aWYgKGRvbnRSZXN0b3JlUmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgLy8gVGhlIGNhbGxlZSBzYXZlZCB2YWx1ZXMgY29tZSBmcm9tIHRo
ZSBvcmlnaW5hbCBzdGFjaywgbm90IHRoZSByZWNvdmVyZWQgc3RhY2suCi0gICAgICAgIC8vIEhl
bmNlLCB3ZSByZWFkIHRoZSB2YWx1ZXMgZGlyZWN0bHkgZnJvbSB0aGUgcGh5c2ljYWwgc3RhY2sg
bWVtb3J5IGluc3RlYWQgb2YKLSAgICAgICAgLy8gZ29pbmcgdGhyb3VnaCBjb250ZXh0LnN0YWNr
KCkuCi0gICAgICAgIEFTU0VSVCghKGVudHJ5Lm9mZnNldCgpICUgc2l6ZW9mKFVDUFVSZWdpc3Rl
cikpKTsKLSAgICAgICAgY29udGV4dC5ncHIoZW50cnkucmVnKCkuZ3ByKCkpID0gcGh5c2ljYWxT
dGFja0ZyYW1lW2VudHJ5Lm9mZnNldCgpIC8gc2l6ZW9mKFVDUFVSZWdpc3RlcildOwotICAgIH0K
LX0KLQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjplbWl0U2F2ZUNhbGxlZVNhdmVzRm9y
KCkuCi1zdGF0aWMgdm9pZCBzYXZlQ2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYgY29udGV4dCwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAgYXV0byYgc3RhY2sgPSBjb250ZXh0LnN0YWNrKCk7
Ci0gICAgQVNTRVJUKGNvZGVCbG9jayk7Ci0KLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlz
dCogY2FsbGVlU2F2ZXMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBS
ZWdpc3RlclNldCBkb250U2F2ZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0Ojpz
dGFja1JlZ2lzdGVycygpLCBSZWdpc3RlclNldDo6YWxsRlBScygpKTsKLSAgICB1bnNpZ25lZCBy
ZWdpc3RlckNvdW50ID0gY2FsbGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNl
dCBlbnRyeSA9IGNhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRTYXZlUmVnaXN0
ZXJzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgc3Rh
Y2suc2V0KGNvbnRleHQuZnAoKSwgZW50cnkub2Zmc2V0KCksIGNvbnRleHQuZ3ByPFVDUFVSZWdp
c3Rlcj4oZW50cnkucmVnKCkuZ3ByKCkpKTsKLSAgICB9Ci19Ci0KLS8vIEJhc2VkIG9uIEFzc2Vt
Ymx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKCkuCi1zdGF0aWMgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIoQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBWTSYgdm0gPSAqY29u
dGV4dC5hcmc8Vk0qPigpOwotCi0gICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNh
dmVzID0gUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwotICAgIFJl
Z2lzdGVyU2V0IGRvbnRSZXN0b3JlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0
ZXJzKCk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGFsbENhbGxlZVNhdmVzLT5zaXpl
KCk7Ci0KLSAgICBWTUVudHJ5UmVjb3JkKiBlbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQodm0u
dG9wRW50cnlGcmFtZSk7Ci0gICAgVUNQVVJlZ2lzdGVyKiBjYWxsZWVTYXZlQnVmZmVyID0gcmVp
bnRlcnByZXRfY2FzdDxVQ1BVUmVnaXN0ZXIqPihlbnRyeVJlY29yZC0+Y2FsbGVlU2F2ZVJlZ2lz
dGVyc0J1ZmZlcik7Ci0KLSAgICAvLyBSZXN0b3JlIGFsbCBjYWxsZWUgc2F2ZXMuCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewotICAgICAgICBSZWdp
c3RlckF0T2Zmc2V0IGVudHJ5ID0gYWxsQ2FsbGVlU2F2ZXMtPmF0KGkpOwotICAgICAgICBpZiAo
ZG9udFJlc3RvcmVSZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBzaXplX3QgdWludHB0ck9mZnNldCA9IGVudHJ5Lm9mZnNldCgpIC8gc2l6
ZW9mKFVDUFVSZWdpc3Rlcik7Ci0gICAgICAgIGlmIChlbnRyeS5yZWcoKS5pc0dQUigpKQotICAg
ICAgICAgICAgY29udGV4dC5ncHIoZW50cnkucmVnKCkuZ3ByKCkpID0gY2FsbGVlU2F2ZUJ1ZmZl
clt1aW50cHRyT2Zmc2V0XTsKLSAgICAgICAgZWxzZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICAgICAgICAgIGNvbnRleHQuZnByKGVudHJ5LnJlZygpLmZwcigpKSA9IGJpdHdpc2VfY2FzdDxk
b3VibGU+KGNhbGxlZVNhdmVCdWZmZXJbdWludHB0ck9mZnNldF0pOwotI2Vsc2UKLSAgICAgICAg
ICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTkzMjc1PiBzdXBwb3J0IGNhbGxl
ZS1zYXZlZCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgb24gMzItYml0IGFyY2hpdGVjdHVyZXMK
LSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVl
U2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCkuCi1zdGF0aWMgdm9pZCBjb3B5
Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQmIGNvbnRl
eHQpCi17Ci0gICAgVk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLSAgICBhdXRvJiBzdGFj
ayA9IGNvbnRleHQuc3RhY2soKTsKLQotICAgIFZNRW50cnlSZWNvcmQqIGVudHJ5UmVjb3JkID0g
dm1FbnRyeVJlY29yZCh2bS50b3BFbnRyeUZyYW1lKTsKLSAgICB2b2lkKiBjYWxsZWVTYXZlQnVm
ZmVyID0gZW50cnlSZWNvcmQtPmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXI7Ci0KLSAgICBSZWdp
c3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6dm1DYWxsZWVT
YXZlUmVnaXN0ZXJPZmZzZXRzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udENvcHlSZWdpc3RlcnMg
PSBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNv
dW50ID0gYWxsQ2FsbGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRy
eSA9IGFsbENhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRDb3B5UmVnaXN0ZXJz
LmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGVu
dHJ5LnJlZygpLmlzR1BSKCkpCi0gICAgICAgICAgICBzdGFjay5zZXQoY2FsbGVlU2F2ZUJ1ZmZl
ciwgZW50cnkub2Zmc2V0KCksIGNvbnRleHQuZ3ByPFVDUFVSZWdpc3Rlcj4oZW50cnkucmVnKCku
Z3ByKCkpKTsKLSAgICAgICAgZWxzZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAg
IHN0YWNrLnNldChjYWxsZWVTYXZlQnVmZmVyLCBlbnRyeS5vZmZzZXQoKSwgY29udGV4dC5mcHI8
VUNQVVJlZ2lzdGVyPihlbnRyeS5yZWcoKS5mcHIoKSkpOwotI2Vsc2UKLSAgICAgICAgICAgIC8v
IEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTkzMjc1PiBzdXBwb3J0IGNhbGxlZS1zYXZl
ZCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgb24gMzItYml0IGFyY2hpdGVjdHVyZXMKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjplbWl0U2F2ZU9yQ29weUNh
bGxlZVNhdmVzRm9yKCkuCi1zdGF0aWMgdm9pZCBzYXZlT3JDb3B5Q2FsbGVlU2F2ZXNGb3IoQ29u
dGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFZpcnR1YWxSZWdpc3RlciBvZmZz
ZXRWaXJ0dWFsUmVnaXN0ZXIsIGJvb2wgd2FzQ2FsbGVkVmlhVGFpbENhbGwpCi17Ci0gICAgRnJh
bWUgZnJhbWUoY29udGV4dC5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOwotICAgIEFTU0VSVChjb2Rl
QmxvY2spOwotCi0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVzID0g
Y29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udFNh
dmVSZWdpc3RlcnMgPSBSZWdpc3RlclNldChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSwg
UmVnaXN0ZXJTZXQ6OmFsbEZQUnMoKSk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGNh
bGxlZVNhdmVzLT5zaXplKCk7Ci0KLSAgICBSZWdpc3RlclNldCBiYXNlbGluZUNhbGxlZVNhdmVz
ID0gUmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0KLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAg
IFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBjYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgIGlm
IChkb250U2F2ZVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgdWludHB0cl90IHNhdmVkUmVnaXN0ZXJWYWx1ZTsKLQotICAgICAgICBp
ZiAod2FzQ2FsbGVkVmlhVGFpbENhbGwgJiYgYmFzZWxpbmVDYWxsZWVTYXZlcy5nZXQoZW50cnku
cmVnKCkpKQotICAgICAgICAgICAgc2F2ZWRSZWdpc3RlclZhbHVlID0gZnJhbWUuZ2V0PHVpbnRw
dHJfdD4oZW50cnkub2Zmc2V0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzYXZlZFJl
Z2lzdGVyVmFsdWUgPSBjb250ZXh0LmdwcihlbnRyeS5yZWcoKS5ncHIoKSk7Ci0KLSAgICAgICAg
ZnJhbWUuc2V0KG9mZnNldFZpcnR1YWxSZWdpc3Rlci5vZmZzZXRJbkJ5dGVzKCkgKyBlbnRyeS5v
ZmZzZXQoKSwgc2F2ZWRSZWdpc3RlclZhbHVlKTsKLSAgICB9Ci19Ci0jZWxzZSAvLyBub3QgTlVN
QkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCi0KLXN0YXRpYyB2b2lkIHJlc3RvcmVD
YWxsZWVTYXZlc0ZvcihDb250ZXh0JiwgQ29kZUJsb2NrKikgeyB9Ci1zdGF0aWMgdm9pZCBzYXZl
Q2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYsIENvZGVCbG9jayopIHsgfQotc3RhdGljIHZvaWQgcmVz
dG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQm
KSB7IH0KLXN0YXRpYyB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIoQ29udGV4dCYpIHsgfQotc3RhdGljIHZvaWQgc2F2ZU9yQ29weUNhbGxlZVNhdmVz
Rm9yKENvbnRleHQmLCBDb2RlQmxvY2sqLCBWaXJ0dWFsUmVnaXN0ZXIsIGJvb2wpIHsgfQotCi0j
ZW5kaWYgLy8gTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCi0KLXN0YXRpYyBK
U0NlbGwqIGNyZWF0ZURpcmVjdEFyZ3VtZW50c0R1cmluZ0V4aXQoQ29udGV4dCYgY29udGV4dCwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBK
U0Z1bmN0aW9uKiBjYWxsZWUsIGludDMyX3QgYXJndW1lbnRDb3VudCkKLXsKLSAgICBWTSYgdm0g
PSAqY29udGV4dC5hcmc8Vk0qPigpOwotCi0gICAgQVNTRVJUKHZtLmhlYXAuaXNEZWZlcnJlZCgp
KTsKLQotICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIGNvZGVCbG9jayA9IGJhc2Vs
aW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7Ci0KLSAgICB1
bnNpZ25lZCBsZW5ndGggPSBhcmd1bWVudENvdW50IC0gMTsKLSAgICB1bnNpZ25lZCBjYXBhY2l0
eSA9IHN0ZDo6bWF4KGxlbmd0aCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpIC0gMSkpOwotICAgIERpcmVjdEFyZ3VtZW50cyogcmVzdWx0ID0gRGlyZWN0
QXJndW1lbnRzOjpjcmVhdGUoCi0gICAgICAgIHZtLCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LT5kaXJlY3RBcmd1bWVudHNTdHJ1Y3R1cmUoKSwgbGVuZ3RoLCBjYXBhY2l0eSk7Ci0KLSAgICBy
ZXN1bHQtPnNldENhbGxlZSh2bSwgY2FsbGVlKTsKLQotICAgIHZvaWQqIGZyYW1lQmFzZSA9IGNv
bnRleHQuZnA8UmVnaXN0ZXIqPigpICsgKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgOiAwKTsKLSAgICBGcmFtZSBmcmFtZShmcmFtZUJhc2UsIGNvbnRleHQu
c3RhY2soKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQotICAgICAgICBy
ZXN1bHQtPnNldEluZGV4UXVpY2tseSh2bSwgaSwgZnJhbWUuYXJndW1lbnQoaSkpOwotCi0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIEpTQ2VsbCogY3JlYXRlQ2xvbmVkQXJndW1lbnRz
RHVyaW5nRXhpdChDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEpTRnVuY3Rpb24qIGNhbGxlZSwgaW50MzJfdCBh
cmd1bWVudENvdW50KQotewotICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7Ci0KLSAg
ICBBU1NFUlQodm0uaGVhcC5pc0RlZmVycmVkKCkpOwotCi0gICAgaWYgKGlubGluZUNhbGxGcmFt
ZSkKLSAgICAgICAgY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJh
bWUoaW5saW5lQ2FsbEZyYW1lKTsKLQotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFyZ3Vt
ZW50Q291bnQgLSAxOwotICAgIENsb25lZEFyZ3VtZW50cyogcmVzdWx0ID0gQ2xvbmVkQXJndW1l
bnRzOjpjcmVhdGVFbXB0eSgKLSAgICAgICAgdm0sIGdsb2JhbE9iamVjdC0+Y2xvbmVkQXJndW1l
bnRzU3RydWN0dXJlKCksIGNhbGxlZSwgbGVuZ3RoKTsKLQotICAgIHZvaWQqIGZyYW1lQmFzZSA9
IGNvbnRleHQuZnA8UmVnaXN0ZXIqPigpICsgKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgOiAwKTsKLSAgICBGcmFtZSBmcmFtZShmcmFtZUJhc2UsIGNvbnRl
eHQuc3RhY2soKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQotICAgICAg
ICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaSwgZnJhbWUuYXJndW1lbnQo
aSkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGVtaXRSZXN0b3JlQXJn
dW1lbnRzKENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogY29kZUJsb2NrLCBERkc6OkpJVENv
ZGUqIGRmZ0pJVENvZGUsIGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcykK
LXsKLSAgICBGcmFtZSBmcmFtZShjb250ZXh0LmZwKCksIGNvbnRleHQuc3RhY2soKSk7Ci0KLSAg
ICBIYXNoTWFwPE1pbmlmaWVkSUQsIGludD4gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50czsgLy8g
TWFwcyBwaGFudG9tIGFyZ3VtZW50cyBub2RlIElEIHRvIG9wZXJhbmQuCi0gICAgZm9yIChzaXpl
X3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewotICAgICAg
ICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAg
ICAgaW50IG9wZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOwotCi0gICAg
ICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5v
dENyZWF0ZWQKLSAgICAgICAgICAgICYmIHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IENsb25lZEFy
Z3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgIE1pbmlmaWVkSUQgaWQgPSByZWNvdmVyeS5ub2RlSUQoKTsKLSAgICAgICAgYXV0byBpdGVy
ID0gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5maW5kKGlkKTsKLSAgICAgICAgaWYgKGl0ZXIg
IT0gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5lbmQoKSkgewotICAgICAgICAgICAgZnJhbWUu
c2V0T3BlcmFuZChvcGVyYW5kLCBmcmFtZS5vcGVyYW5kKGl0ZXItPnZhbHVlKSk7Ci0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lID0KLSAgICAgICAgICAgIGRmZ0pJVENvZGUtPm1pbmlmaWVkREZHLmF0KGlk
KS0+aW5saW5lQ2FsbEZyYW1lKCk7Ci0KLSAgICAgICAgaW50IHN0YWNrT2Zmc2V0OwotICAgICAg
ICBpZiAoaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgc3RhY2tPZmZzZXQgPSBpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdGFja09m
ZnNldCA9IDA7Ci0KLSAgICAgICAgSlNGdW5jdGlvbiogY2FsbGVlOwotICAgICAgICBpZiAoIWlu
bGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAg
ICAgICBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGZyYW1lLm9wZXJhbmQoc3RhY2tPZmZz
ZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpLmFzQ2VsbCgpKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihpbmxpbmVDYWxsRnJhbWUtPmNh
bGxlZVJlY292ZXJ5LmNvbnN0YW50KCkuYXNDZWxsKCkpOwotCi0gICAgICAgIGludDMyX3QgYXJn
dW1lbnRDb3VudDsKLSAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZy
YW1lLT5pc1ZhcmFyZ3MoKSkKLSAgICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBmcmFtZS5vcGVy
YW5kPGludDMyX3Q+KHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIFBheWxvYWRPZmZzZXQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBh
cmd1bWVudENvdW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
czsKLQotICAgICAgICBKU0NlbGwqIGFyZ3VtZW50c09iamVjdDsKLSAgICAgICAgc3dpdGNoIChy
ZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICBjYXNlIERpcmVjdEFyZ3VtZW50c1RoYXRX
ZXJlTm90Q3JlYXRlZDoKLSAgICAgICAgICAgIGFyZ3VtZW50c09iamVjdCA9IGNyZWF0ZURpcmVj
dEFyZ3VtZW50c0R1cmluZ0V4aXQoY29udGV4dCwgY29kZUJsb2NrLCBpbmxpbmVDYWxsRnJhbWUs
IGNhbGxlZSwgYXJndW1lbnRDb3VudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgICAgICBhcmd1bWVu
dHNPYmplY3QgPSBjcmVhdGVDbG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0KGNvbnRleHQsIGNvZGVC
bG9jaywgaW5saW5lQ2FsbEZyYW1lLCBjYWxsZWUsIGFyZ3VtZW50Q291bnQpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZnJh
bWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGFyZ3VtZW50c09iamVjdCkpOwotCi0gICAg
ICAgIGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuYWRkKGlkLCBvcGVyYW5kKTsKLSAgICB9Ci19
Ci0KLS8vIFRoZSBmb2xsb3dpbmcgaXMgYSBsaXN0IG9mIGV4dHJhIGluaXRpYWxpemF0aW9ucyB0
aGF0IG5lZWQgdG8gYmUgZG9uZSBpbiBvcmRlcgotLy8gb2YgbW9zdCBsaWtlbHkgbmVlZGVkIChs
b3dlciBlbnVtIHZhbHVlKSB0byBsZWFzdCBsaWtlbHkgbmVlZGVkIChoaWdoZXIgZW51bSB2YWx1
ZSkuCi0vLyBFYWNoIGxldmVsIGluaXRpYWxpemF0aW9uIGluY2x1ZGVzIHRoZSBwcmV2aW91cyBs
b3dlciBlbnVtIHZhbHVlIChzZWUgdXNlIG9mIHRoZQotLy8gZXh0cmFJbml0aWFsaXphdGlvbkxl
dmVsIHZhbHVlIGJlbG93KS4KLWVudW0gY2xhc3MgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsIHsK
LSAgICBOb25lLAotICAgIFNwZWN1bGF0aW9uUmVjb3ZlcnksCi0gICAgVmFsdWVQcm9maWxlVXBk
YXRlLAotICAgIEFycmF5UHJvZmlsZVVwZGF0ZSwKLSAgICBPdGhlcgotfTsKLQotdm9pZCBPU1JF
eGl0OjpleGVjdXRlT1NSRXhpdChDb250ZXh0JiBjb250ZXh0KQotewotICAgIFZNJiB2bSA9ICpj
b250ZXh0LmFyZzxWTSo+KCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+
KCk7Ci0gICAgQVNTRVJUKCZjYWxsRnJhbWUtPmRlcHJlY2F0ZWRWTSgpID09ICZ2bSk7Ci0gICAg
YXV0byYgY3B1ID0gY29udGV4dC5jcHU7Ci0KLSAgICBpZiAodmFsaWRhdGVERkdEb2VzR0MpIHsK
LSAgICAgICAgLy8gV2UncmUgYWJvdXQgdG8gZXhpdCBvcHRpbWl6ZWQgY29kZS4gU28sIHRoZXJl
J3Mgbm8gbG9uZ2VyIGFueSBvcHRpbWl6ZWQKLSAgICAgICAgLy8gY29kZSBydW5uaW5nIHRoYXQg
ZXhwZWN0cyBubyBHQy4KLSAgICAgICAgdm0uaGVhcC5zZXRFeHBlY3REb2VzR0ModHJ1ZSk7Ci0g
ICAgfQotCi0gICAgaWYgKHZtLmNhbGxGcmFtZUZvckNhdGNoKSB7Ci0gICAgICAgIGNhbGxGcmFt
ZSA9IHZtLmNhbGxGcmFtZUZvckNhdGNoOwotICAgICAgICBjb250ZXh0LmZwKCkgPSBjYWxsRnJh
bWU7Ci0gICAgfQotCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpOwotICAgIEFTU0VSVChjb2RlQmxvY2spOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQpOwotCi0gICAgLy8gSXQncyBzb3J0IG9mIHByZWZl
cmFibGUgdGhhdCB3ZSBkb24ndCBHQyB3aGlsZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3
b3VsZG4ndAotICAgIC8vIHJlYWxseSBiZSBwcm9maXRhYmxlLgotICAgIERlZmVyR0NGb3JBV2hp
bGUgZGVmZXJHQyh2bS5oZWFwKTsKLQotICAgIHVpbnQzMl90IGV4aXRJbmRleCA9IHZtLm9zckV4
aXRJbmRleDsKLSAgICBERkc6OkpJVENvZGUqIGRmZ0pJVENvZGUgPSBjb2RlQmxvY2stPmppdENv
ZGUoKS0+ZGZnKCk7Ci0gICAgT1NSRXhpdCYgZXhpdCA9IGRmZ0pJVENvZGUtPm9zckV4aXRbZXhp
dEluZGV4XTsKLQotICAgIEFTU0VSVCghdm0uY2FsbEZyYW1lRm9yQ2F0Y2ggfHwgZXhpdC5tX2tp
bmQgPT0gR2VuZXJpY1Vud2luZCk7Ci0gICAgRVhDRVBUSU9OX0FTU0VSVF9VTlVTRUQoc2NvcGUs
ICEhc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpOwotCi0g
ICAgaWYgKFVOTElLRUxZKCFleGl0LmV4aXRTdGF0ZSkpIHsKLSAgICAgICAgRXh0cmFJbml0aWFs
aXphdGlvbkxldmVsIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IEV4dHJhSW5pdGlhbGl6YXRp
b25MZXZlbDo6Tm9uZTsKLQotICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gZXhlY3V0ZSB0aGlz
IGJsb2NrIG9uY2UgZm9yIGVhY2ggT1NSRXhpdCByZWNvcmQuIFRoZSBjb21wdXRlZAotICAgICAg
ICAvLyByZXN1bHRzIHdpbGwgYmUgY2FjaGVkIGluIHRoZSBPU1JFeGl0U3RhdGUgcmVjb3JkIGZv
ciB1c2Ugb2YgdGhlIHJlc3Qgb2YgdGhlCi0gICAgICAgIC8vIGV4aXQgcmFtcCBjb2RlLgotCi0g
ICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2RlQmxvY2stPmJhc2VsaW5l
QWx0ZXJuYXRpdmUoKTsKLSAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGJh
c2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKLQotICAgICAgICBTcGVjdWxhdGlvblJlY292
ZXJ5KiByZWNvdmVyeSA9IG51bGxwdHI7Ci0gICAgICAgIGlmIChleGl0Lm1fcmVjb3ZlcnlJbmRl
eCAhPSBVSU5UX01BWCkgewotICAgICAgICAgICAgcmVjb3ZlcnkgPSAmZGZnSklUQ29kZS0+c3Bl
Y3VsYXRpb25SZWNvdmVyeVtleGl0Lm1fcmVjb3ZlcnlJbmRleF07Ci0gICAgICAgICAgICBleHRy
YUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWws
IEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6U3BlY3VsYXRpb25SZWNvdmVyeSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoVU5MSUtFTFkoZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCkp
Ci0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRyYUlu
aXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6T3RoZXIpOwotCi0g
ICAgICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gbnVsbHB0cjsKLSAgICAgICAgaWYg
KCEhZXhpdC5tX2pzVmFsdWVTb3VyY2UpIHsKLSAgICAgICAgICAgIGlmIChleGl0Lm1fdmFsdWVQ
cm9maWxlKQotICAgICAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6
bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpW
YWx1ZVByb2ZpbGVVcGRhdGUpOwotICAgICAgICAgICAgaWYgKGV4aXQubV9raW5kID09IEJhZENh
Y2hlIHx8IGV4aXQubV9raW5kID09IEJhZEluZGV4aW5nVHlwZSkgewotICAgICAgICAgICAgICAg
IENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGU7
Ci0gICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jayA9IGJhc2VsaW5l
Q29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soY29kZU9yaWdpbiwgYmFzZWxp
bmVDb2RlQmxvY2spOwotICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZSA9IHByb2ZpbGVkQ29k
ZUJsb2NrLT5nZXRBcnJheVByb2ZpbGUoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOwotICAg
ICAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpCi0gICAgICAgICAgICAgICAgICAgIGV4dHJh
SW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwg
RXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpBcnJheVByb2ZpbGVVcGRhdGUpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaW50MzJfdCBhY3RpdmVUaHJlc2hvbGQgPSBiYXNl
bGluZUNvZGVCbG9jay0+YWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0aW9uczo6dGhyZXNob2xkRm9y
T3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKSk7Ci0gICAgICAgIGRvdWJsZSBhZGp1c3RlZFRocmVz
aG9sZCA9IGFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0aWNzQW5kQ29udmVydFRvSW50KGFjdGl2ZVRo
cmVzaG9sZCwgYmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICBBU1NFUlQoYWRqdXN0ZWRUaHJl
c2hvbGQgPiAwKTsKLSAgICAgICAgYWRqdXN0ZWRUaHJlc2hvbGQgPSBCYXNlbGluZUV4ZWN1dGlv
bkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQoY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgYWRq
dXN0ZWRUaHJlc2hvbGQpOwotCi0gICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yRXhpdCA9
IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soZXhpdC5tX2Nv
ZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgYm9vbCBleGl0VG9MTEludCA9
IE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8fCBjb2RlQmxvY2tGb3JFeGl0LT5qaXRU
eXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazsKLSAgICAgICAgdm9pZCoganVtcFRh
cmdldDsKLSAgICAgICAgaWYgKGV4aXRUb0xMSW50KSB7Ci0gICAgICAgICAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwot
ICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICpjb2Rl
QmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZU9mZnNldCkucHRyKCk7Ci0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZGVzdGluYXRp
b24gPSBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjdXJyZW50SW5zdHJ1Y3Rpb24p
OwotICAgICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNz
KCk7ICAgIAotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29uc3QgSklUQ29kZU1hcCYg
Y29kZU1hcCA9IGNvZGVCbG9ja0ZvckV4aXQtPmppdENvZGVNYXAoKTsKLSAgICAgICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlvbiA9IGNvZGVNYXAuZmlu
ZChleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOwotICAgICAgICAgICAgQVNTRVJU
KGNvZGVMb2NhdGlvbik7Ci0gICAgICAgICAgICBqdW1wVGFyZ2V0ID0gY29kZUxvY2F0aW9uLmV4
ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDb21wdXRlIHRoZSB2
YWx1ZSByZWNvdmVyaWVzLgotICAgICAgICBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiBvcGVyYW5k
czsKLSAgICAgICAgVmVjdG9yPFVuZGVmaW5lZE9wZXJhbmRTcGFuPiB1bmRlZmluZWRPcGVyYW5k
U3BhbnM7Ci0gICAgICAgIGRmZ0pJVENvZGUtPnZhcmlhYmxlRXZlbnRTdHJlYW0ucmVjb25zdHJ1
Y3QoY29kZUJsb2NrLCBleGl0Lm1fY29kZU9yaWdpbiwgZGZnSklUQ29kZS0+bWluaWZpZWRERkcs
IGV4aXQubV9zdHJlYW1JbmRleCwgb3BlcmFuZHMsICZ1bmRlZmluZWRPcGVyYW5kU3BhbnMpOwot
ICAgICAgICBwdHJkaWZmX3Qgc3RhY2tQb2ludGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PHB0cmRp
ZmZfdD4oY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5yZXF1aXJlZFJlZ2lzdGVy
Q291bnRGb3JFeGl0KSAqIHNpemVvZihSZWdpc3Rlcik7Ci0KLSAgICAgICAgZXhpdC5leGl0U3Rh
dGUgPSBhZG9wdFJlZihuZXcgT1NSRXhpdFN0YXRlKGV4aXQsIGNvZGVCbG9jaywgYmFzZWxpbmVD
b2RlQmxvY2ssIG9wZXJhbmRzLCBXVEZNb3ZlKHVuZGVmaW5lZE9wZXJhbmRTcGFucyksIHJlY292
ZXJ5LCBzdGFja1BvaW50ZXJPZmZzZXQsIGFjdGl2ZVRocmVzaG9sZCwgYWRqdXN0ZWRUaHJlc2hv
bGQsIGp1bXBUYXJnZXQsIGFycmF5UHJvZmlsZSwgZXhpdFRvTExJbnQpKTsKLQotICAgICAgICBp
ZiAoVU5MSUtFTFkodm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIGNvZGVCbG9jay0+aml0Q29k
ZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24pKSB7Ci0gICAgICAgICAgICBQcm9maWxlcjo6
RGF0YWJhc2UmIGRhdGFiYXNlID0gKnZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlcjsKLSAgICAgICAg
ICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24gPSBjb2RlQmxvY2stPmppdENv
ZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdldCgpOwotCi0gICAgICAgICAgICBQcm9m
aWxlcjo6T1NSRXhpdCogcHJvZmlsZXJFeGl0ID0gY29tcGlsYXRpb24tPmFkZE9TUkV4aXQoCi0g
ICAgICAgICAgICAgICAgZXhpdEluZGV4LCBQcm9maWxlcjo6T3JpZ2luU3RhY2soZGF0YWJhc2Us
IGNvZGVCbG9jaywgZXhpdC5tX2NvZGVPcmlnaW4pLAotICAgICAgICAgICAgICAgIGV4aXQubV9r
aW5kLCBleGl0Lm1fa2luZCA9PSBVbmNvdW50YWJsZUludmFsaWRhdGlvbik7Ci0gICAgICAgICAg
ICBleGl0LmV4aXRTdGF0ZS0+cHJvZmlsZXJFeGl0ID0gcHJvZmlsZXJFeGl0OwotICAgICAgICAg
ICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlv
bkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6Ok90aGVyKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpwcmludEVhY2hPU1JFeGl0KCkpKQotICAgICAg
ICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXph
dGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6Ok90aGVyKTsKLQotICAgICAgICBl
eGl0LmV4aXRTdGF0ZS0+ZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gZXh0cmFJbml0aWFsaXph
dGlvbkxldmVsOwotCi0gICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlT1NSKCkg
fHwgT3B0aW9uczo6dmVyYm9zZURGR09TUkV4aXQoKSkpIHsKLSAgICAgICAgICAgIGRhdGFMb2dG
KCJERkcgT1NSIGV4aXQgIyV1ICglcywgJXMpIGZyb20gJXMsIHdpdGggb3BlcmFuZHMgPSAlc1xu
IiwKLSAgICAgICAgICAgICAgICBleGl0SW5kZXgsIHRvQ1N0cmluZyhleGl0Lm1fY29kZU9yaWdp
bikuZGF0YSgpLAotICAgICAgICAgICAgICAgIGV4aXRLaW5kVG9TdHJpbmcoZXhpdC5tX2tpbmQp
LCB0b0NTdHJpbmcoKmNvZGVCbG9jaykuZGF0YSgpLAotICAgICAgICAgICAgICAgIHRvQ1N0cmlu
ZyhpZ25vcmluZ0NvbnRleHQ8RHVtcENvbnRleHQ+KG9wZXJhbmRzKSkuZGF0YSgpKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIE9TUkV4aXRTdGF0ZSYgZXhpdFN0YXRlID0gKmV4aXQuZXhpdFN0
YXRlLmdldCgpOwotICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBleGl0U3RhdGUu
YmFzZWxpbmVDb2RlQmxvY2s7Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGJh
c2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKLQotICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zl
cnk+JiBvcGVyYW5kcyA9IGV4aXRTdGF0ZS5vcGVyYW5kczsKLSAgICBWZWN0b3I8VW5kZWZpbmVk
T3BlcmFuZFNwYW4+JiB1bmRlZmluZWRPcGVyYW5kU3BhbnMgPSBleGl0U3RhdGUudW5kZWZpbmVk
T3BlcmFuZFNwYW5zOwotCi0gICAgY29udGV4dC5zcCgpID0gY29udGV4dC5mcDx1aW50OF90Kj4o
KSArIGV4aXRTdGF0ZS5zdGFja1BvaW50ZXJPZmZzZXQ7Ci0KLSAgICAvLyBUaGUgb25seSByZWFz
b24gZm9yIHVzaW5nIHRoaXMgZG8gd2hpbGUgbG9vcCBpcyBzbyB3ZSBjYW4gYnJlYWsgb3V0IG1p
ZHdheSB3aGVuIGFwcHJvcHJpYXRlLgotICAgIGRvIHsKLSAgICAgICAgYXV0byBleHRyYUluaXRp
YWxpemF0aW9uTGV2ZWwgPSBzdGF0aWNfY2FzdDxFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw+KGV4
aXRTdGF0ZS5leHRyYUluaXRpYWxpemF0aW9uTGV2ZWwpOwotCi0gICAgICAgIGlmIChleHRyYUlu
aXRpYWxpemF0aW9uTGV2ZWwgPT0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpOb25lKQotICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8gQmVnaW4gZXh0cmEgaW5pdGlsaXphdGlvbiBs
ZXZlbDogU3BlY3VsYXRpb25SZWNvdmVyeQotCi0gICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gc3Bl
Y3VsYXRpb24gcmVjb3ZlcnkgZmlyc3QgYmVjYXVzZSBhcnJheSBwcm9maWxpbmcgYW5kIHZhbHVl
IHByb2ZpbGluZwotICAgICAgICAvLyBtYXkgcmVseSBvbiBhIHZhbHVlIHRoYXQgaXQgcmVjb3Zl
cnMuIEhvd2V2ZXIsIHRoYXQgZG9lc24ndCBtZWFuIHRoYXQgaXQgaXMgbGlrZWx5Ci0gICAgICAg
IC8vIHRvIGhhdmUgYSByZWNvdmVyeSB2YWx1ZS4gU28sIHdlJ2xsIGRlY29yYXRlIGl0IGFzIFVO
TElLRUxZLgotICAgICAgICBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSA9IGV4aXRTdGF0
ZS5yZWNvdmVyeTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHJlY292ZXJ5KSkgewotICAgICAgICAg
ICAgc3dpdGNoIChyZWNvdmVyeS0+dHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFNwZWN1bGF0
aXZlQWRkOgotICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPSBjcHUu
Z3ByPHVpbnQzMl90PihyZWNvdmVyeS0+ZGVzdCgpKSAtIGNwdS5ncHI8dWludDMyX3Q+KHJlY292
ZXJ5LT5zcmMoKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBBU1NFUlQo
IShjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID4+IDMyKSk7Ci0gICAgICAgICAgICAgICAgY3B1
LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSB8PSBKU1ZhbHVlOjpOdW1iZXJUYWc7Ci0jZW5kaWYKLSAg
ICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZFNl
bGY6Ci0gICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA9IHN0YXRpY19j
YXN0PHVpbnQzMl90PihjcHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5LT5kZXN0KCkpID4+IDEpIF4g
MHg4MDAwMDAwMFU7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBBU1NFUlQo
IShjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID4+IDMyKSk7Ci0gICAgICAgICAgICAgICAgY3B1
LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSB8PSBKU1ZhbHVlOjpOdW1iZXJUYWc7Ci0jZW5kaWYKLSAg
ICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZElt
bWVkaWF0ZToKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID0gKGNw
dS5ncHI8dWludDMyX3Q+KHJlY292ZXJ5LT5kZXN0KCkpIC0gcmVjb3ZlcnktPmltbWVkaWF0ZSgp
KTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgIEFTU0VSVCghKGNwdS5ncHIo
cmVjb3ZlcnktPmRlc3QoKSkgPj4gMzIpKTsKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292
ZXJ5LT5kZXN0KCkpIHw9IEpTVmFsdWU6Ok51bWJlclRhZzsKLSNlbmRpZgotICAgICAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrOgot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVz
dCgpKSA9IGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgXiBKU1ZhbHVlOjpWYWx1ZUZhbHNlOwot
I2VuZGlmCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA8PSBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6
OlNwZWN1bGF0aW9uUmVjb3ZlcnkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBC
ZWdpbiBleHRyYSBpbml0aWxpemF0aW9uIGxldmVsOiBWYWx1ZVByb2ZpbGVVcGRhdGUKLSAgICAg
ICAgSlNWYWx1ZSBwcm9maWxlZFZhbHVlOwotICAgICAgICBpZiAoISFleGl0Lm1fanNWYWx1ZVNv
dXJjZSkgewotICAgICAgICAgICAgcHJvZmlsZWRWYWx1ZSA9IGpzVmFsdWVGb3IoY3B1LCBleGl0
Lm1fanNWYWx1ZVNvdXJjZSk7Ci0gICAgICAgICAgICBpZiAoTWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZSBwcm9maWxlID0gZXhpdC5tX3ZhbHVlUHJvZmlsZSkKLSAgICAgICAgICAgICAgICBw
cm9maWxlLnJlcG9ydFZhbHVlKHByb2ZpbGVkVmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPD0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpW
YWx1ZVByb2ZpbGVVcGRhdGUpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBCZWdp
biBleHRyYSBpbml0aWxpemF0aW9uIGxldmVsOiBBcnJheVByb2ZpbGVVcGRhdGUKLSAgICAgICAg
aWYgKEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gZXhpdFN0YXRlLmFycmF5UHJvZmlsZSkg
ewotICAgICAgICAgICAgQVNTRVJUKCEhZXhpdC5tX2pzVmFsdWVTb3VyY2UpOwotICAgICAgICAg
ICAgQVNTRVJUKGV4aXQubV9raW5kID09IEJhZENhY2hlIHx8IGV4aXQubV9raW5kID09IEJhZElu
ZGV4aW5nVHlwZSk7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrID0g
YmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhleGl0Lm1fY29k
ZU9yaWdpbkZvckV4aXRQcm9maWxlLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgICAgICBj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBwcm9maWxlZENvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkuYXQoZXhpdC5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZS5ieXRlY29kZUluZGV4
KCkpLnB0cigpOwotICAgICAgICAgICAgYm9vbCBkb1Byb2ZpbGUgPSAhaW5zdHJ1Y3Rpb24tPmlz
PE9wR2V0QnlJZD4oKSB8fCBpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpLm1ldGFkYXRhKHBy
b2ZpbGVkQ29kZUJsb2NrKS5tX21vZGVNZXRhZGF0YS5tb2RlID09IEdldEJ5SWRNb2RlOjpBcnJh
eUxlbmd0aDsKLSAgICAgICAgICAgIGlmIChkb1Byb2ZpbGUpIHsKLSAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHByb2ZpbGVkVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2
bSk7Ci0gICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5vYnNlcnZlU3RydWN0dXJlKHN0cnVj
dHVyZSk7Ci0gICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5vYnNlcnZlQXJyYXlNb2RlKGFy
cmF5TW9kZXNGcm9tU3RydWN0dXJlKHN0cnVjdHVyZSkpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGlmIChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPD0gRXh0cmFJbml0aWFs
aXphdGlvbkxldmVsOjpBcnJheVByb2ZpbGVVcGRhdGUpCi0gICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICAvLyBCZWdpbiBFeHRyYSBpbml0aWxpemF0aW9uIGxldmVsOiBPdGhlcgotICAgICAg
ICBpZiAoVU5MSUtFTFkoZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCkpIHsKLSAgICAgICAg
ICAgIC8vIFdlIGFyZSBhY3RpbmcgYXMgYSBkZWZhY3RvIG9wX2NhdGNoIGJlY2F1c2Ugd2UgYXJy
aXZlIGhlcmUgZnJvbSBnZW5lcmljVW53aW5kKCkuCi0gICAgICAgICAgICAvLyBTbywgd2UgbXVz
dCByZXN0b3JlIG91ciBjYWxsIGZyYW1lIGFuZCBzdGFjayBwb2ludGVyLgotICAgICAgICAgICAg
cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKGNvbnRl
eHQpOwotICAgICAgICAgICAgQVNTRVJUKGNvbnRleHQuZnAoKSA9PSB2bS5jYWxsRnJhbWVGb3JD
YXRjaCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZXhpdFN0YXRlLnByb2ZpbGVyRXhpdCkK
LSAgICAgICAgICAgIGV4aXRTdGF0ZS5wcm9maWxlckV4aXQtPmluY0NvdW50KCk7Ci0KLSAgICAg
ICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnByaW50RWFjaE9TUkV4aXQoKSkpCi0gICAgICAgICAg
ICBwcmludE9TUkV4aXQoY29udGV4dCwgdm0ub3NyRXhpdEluZGV4LCBleGl0KTsKLQotICAgIH0g
d2hpbGUgKGZhbHNlKTsgLy8gRW5kIGV4dHJhIGluaXRpYWxpemF0aW9uLgotCi0gICAgRnJhbWUg
ZnJhbWUoY3B1LmZwKCksIGNvbnRleHQuc3RhY2soKSk7Ci0gICAgQVNTRVJUKCEoY29udGV4dC5m
cDx1aW50cHRyX3Q+KCkgJiAweDcpKTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgQVNTRVJU
KGNwdS5ncHI8aW50NjRfdD4oR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpID09IEpTVmFsdWU6
Ok51bWJlclRhZyk7Ci0gICAgQVNTRVJUKGNwdS5ncHI8aW50NjRfdD4oR1BSSW5mbzo6bm90Q2Vs
bE1hc2tSZWdpc3RlcikgPT0gSlNWYWx1ZTo6Tm90Q2VsbE1hc2spOwotI2VuZGlmCi0KLSAgICAv
LyBEbyBhbGwgZGF0YSBmb3JtYXQgY29udmVyc2lvbnMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGlu
dG8gdGhlIHN0YWNrLgotICAgIC8vIE5vdGU6IHdlIG5lZWQgdG8gcmVjb3ZlciB2YWx1ZXMgYmVm
b3JlIHJlc3RvcmluZyBjYWxsZWUgc2F2ZSByZWdpc3RlcnMgYmVsb3cKLSAgICAvLyBiZWNhdXNl
IHRoZSByZWNvdmVyeSBtYXkgcmVseSBvbiB2YWx1ZXMgaW4gc29tZSBvZiBjYWxsZWUgc2F2ZSBy
ZWdpc3RlcnMuCi0KLSAgICBpbnQgY2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzID0g
c3RhdGljX2Nhc3Q8aW50PihiYXNlbGluZUNvZGVCbG9jay0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0
dWFsUmVnaXN0ZXJzKCkpOwotICAgIHNpemVfdCBudW1iZXJPZk9wZXJhbmRzID0gb3BlcmFuZHMu
c2l6ZSgpOwotICAgIHNpemVfdCBudW1VbmRlZmluZWRPcGVyYW5kU3BhbnMgPSB1bmRlZmluZWRP
cGVyYW5kU3BhbnMuc2l6ZSgpOwotCi0gICAgc2l6ZV90IG5leHRVbmRlZmluZWRTcGFuSW5kZXgg
PSAwOwotICAgIHNpemVfdCBuZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4ID0gbnVtYmVyT2ZPcGVy
YW5kczsKLSAgICBpZiAobnVtVW5kZWZpbmVkT3BlcmFuZFNwYW5zKQotICAgICAgICBuZXh0VW5k
ZWZpbmVkT3BlcmFuZEluZGV4ID0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zW25leHRVbmRlZmluZWRT
cGFuSW5kZXhdLmZpcnN0SW5kZXg7Ci0KLSAgICBKU1ZhbHVlIHVuZGVmaW5lZCA9IGpzVW5kZWZp
bmVkKCk7Ci0gICAgZm9yIChzaXplX3Qgc3BhbkluZGV4ID0gMDsgc3BhbkluZGV4IDwgbnVtVW5k
ZWZpbmVkT3BlcmFuZFNwYW5zOyArK3NwYW5JbmRleCkgewotICAgICAgICBhdXRvJiBzcGFuID0g
dW5kZWZpbmVkT3BlcmFuZFNwYW5zW3NwYW5JbmRleF07Ci0gICAgICAgIGludCBmaXJzdE9mZnNl
dCA9IHNwYW4ubWluT2Zmc2V0OwotICAgICAgICBpbnQgbGFzdE9mZnNldCA9IGZpcnN0T2Zmc2V0
ICsgc3Bhbi5udW1iZXJPZlJlZ2lzdGVyczsKLQotICAgICAgICBmb3IgKGludCBvZmZzZXQgPSBm
aXJzdE9mZnNldDsgb2Zmc2V0IDwgbGFzdE9mZnNldDsgKytvZmZzZXQpCi0gICAgICAgICAgICBm
cmFtZS5zZXRPcGVyYW5kKG9mZnNldCwgdW5kZWZpbmVkKTsKLSAgICB9Ci0KLSAgICBmb3IgKHNp
emVfdCBpbmRleCA9IDA7IGluZGV4IDwgbnVtYmVyT2ZPcGVyYW5kczsgKytpbmRleCkgewotICAg
ICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmRzLnZpcnR1YWxSZWdpc3RlckZvcklu
ZGV4KGluZGV4KTsKLQotICAgICAgICBpZiAoVU5MSUtFTFkoaW5kZXggPT0gbmV4dFVuZGVmaW5l
ZE9wZXJhbmRJbmRleCkpIHsKLSAgICAgICAgICAgIGluZGV4ICs9IHVuZGVmaW5lZE9wZXJhbmRT
cGFuc1tuZXh0VW5kZWZpbmVkU3BhbkluZGV4KytdLm51bWJlck9mUmVnaXN0ZXJzIC0gMTsKLSAg
ICAgICAgICAgIGlmIChuZXh0VW5kZWZpbmVkU3BhbkluZGV4IDwgbnVtVW5kZWZpbmVkT3BlcmFu
ZFNwYW5zKQotICAgICAgICAgICAgICAgIG5leHRVbmRlZmluZWRPcGVyYW5kSW5kZXggPSB1bmRl
ZmluZWRPcGVyYW5kU3BhbnNbbmV4dFVuZGVmaW5lZFNwYW5JbmRleF0uZmlyc3RJbmRleDsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBuZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4
ID0gbnVtYmVyT2ZPcGVyYW5kczsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkgJiYgcmVnLnRvTG9jYWwoKSA8IGNhbGxlZVNhdmVT
cGFjZUFzVmlydHVhbFJlZ2lzdGVycykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IGludCBvcGVyYW5kID0gcmVnLm9mZnNldCgpOwotCi0gICAgICAgIHN3aXRjaCAocmVjb3Zlcnku
dGVjaG5pcXVlKCkpIHsKLSAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAg
ICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0
dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZUpTVmFsdWUoKSk7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIEluRlBSOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVy
YW5kLCBjcHUuZnByPEpTVmFsdWU+KHJlY292ZXJ5LmZwcigpKSk7Ci0gICAgICAgICAgICBicmVh
azsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGNhc2UgSW5HUFI6Ci0gICAgICAgICAg
ICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGNwdS5ncHI8SlNWYWx1ZT4ocmVjb3ZlcnkuZ3By
KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2Vsc2UKLSAgICAgICAgY2FzZSBJblBhaXI6Ci0g
ICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQz
Ml90PihyZWNvdmVyeS50YWdHUFIoKSksIGNwdS5ncHI8aW50MzJfdD4ocmVjb3ZlcnkucGF5bG9h
ZEdQUigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLQotICAgICAgICBjYXNlIFVu
Ym94ZWRDZWxsSW5HUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpT
VmFsdWUoY3B1LmdwcjxKU0NlbGwqPihyZWNvdmVyeS5ncHIoKSkpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAg
IGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjYWxsRnJhbWUtPnIocmVjb3Zlcnku
dmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVVbmJveGVkQ2VsbCgpKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLQotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGNhc2UgVW5ib3hlZEJv
b2xlYW5JbkdQUjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwganNCb29s
ZWFuKGNwdS5ncHI8Ym9vbD4ocmVjb3ZlcnkuZ3ByKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSNlbmRpZgotCi0gICAgICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBjYWxs
RnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVKU1ZhbHVlKCkp
OwotI2Vsc2UKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwganNCb29sZWFu
KGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZUpTVmFs
dWUoKS5wYXlsb2FkKCkpKTsKLSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
Y2FzZSBVbmJveGVkSW50MzJJbkdQUjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3Bl
cmFuZCwgSlNWYWx1ZShjcHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5LmdwcigpKSkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazoKLSAg
ICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjYWxsRnJhbWUtPnIo
cmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVVbmJveGVkSW50MzIoKSkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBjYXNlIFVu
Ym94ZWRJbnQ1MkluR1BSOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBK
U1ZhbHVlKGNwdS5ncHI8aW50NjRfdD4ocmVjb3ZlcnkuZ3ByKCkpID4+IEpTVmFsdWU6OmludDUy
U2hpZnRBbW91bnQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgSW50NTJE
aXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQs
IEpTVmFsdWUoY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5z
YWZlVW5ib3hlZEludDUyKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2Ug
VW5ib3hlZFN0cmljdEludDUySW5HUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9w
ZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQ2NF90PihyZWNvdmVyeS5ncHIoKSkpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU3RyaWN0SW50NTJEaXNwbGFjZWRJbkpTU3Rh
Y2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY2FsbEZy
YW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hlZFN0cmlj
dEludDUyKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0KLSAgICAgICAgY2FzZSBV
bmJveGVkRG91YmxlSW5GUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQs
IEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHB1cmlmeU5hTihjcHUuZnByKHJlY292
ZXJ5LmZwcigpKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRG91Ymxl
RGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5k
LCBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBwdXJpZnlOYU4oY2FsbEZyYW1lLT5y
KHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hlZERvdWJsZSgpKSkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBDb25zdGFudDoKLSAgICAgICAg
ICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgcmVjb3ZlcnkuY29uc3RhbnQoKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIERpcmVjdEFyZ3VtZW50c1RoYXRXZXJlTm90
Q3JlYXRlZDoKLSAgICAgICAgY2FzZSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6
Ci0gICAgICAgICAgICAvLyBEb24ndCBkbyB0aGlzLCB5ZXQuCi0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmVz
dG9yZSB0aGUgREZHIGNhbGxlZSBzYXZlcyBhbmQgdGhlbiBzYXZlIHRoZSBvbmVzIHRoZSBiYXNl
bGluZSBKSVQgdXNlcy4KLSAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoY29udGV4dCwgY29kZUJs
b2NrKTsKLSAgICBzYXZlQ2FsbGVlU2F2ZXNGb3IoY29udGV4dCwgYmFzZWxpbmVDb2RlQmxvY2sp
OwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBjcHUuZ3ByKEdQUkluZm86Om51bWJlclRhZ1Jl
Z2lzdGVyKSA9IHN0YXRpY19jYXN0PEpTQzo6VUNQVVJlZ2lzdGVyPihKU1ZhbHVlOjpOdW1iZXJU
YWcpOwotICAgIGNwdS5ncHIoR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3RlcikgPSBzdGF0aWNf
Y2FzdDxKU0M6OlVDUFVSZWdpc3Rlcj4oSlNWYWx1ZTo6Tm90Q2VsbE1hc2spOwotI2VuZGlmCi0K
LSAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgY29weUNhbGxlZVNh
dmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihjb250ZXh0KTsKLQotICAgIC8vIE5v
dyB0aGF0IHRoaW5ncyBvbiB0aGUgc3RhY2sgYXJlIHJlY292ZXJlZCwgZG8gdGhlIGFyZ3VtZW50
cyByZWNvdmVyeS4gV2UgYXNzdW1lIHRoYXQgYXJndW1lbnRzCi0gICAgLy8gcmVjb3ZlcmllcyBk
b24ndCByZWN1cnNpdmVseSByZWZlciB0byBlYWNoIG90aGVyLiBCdXQsIHdlIGRvbid0IHRyeSB0
byBhc3N1bWUgdGhhdCB0aGV5IG9ubHkKLSAgICAvLyByZWZlciB0byBjZXJ0YWluIHJhbmdlcyBv
ZiBsb2NhbHMuIEhlbmNlIHdoeSB3ZSBuZWVkIHRvIGRvIHRoaXMgaGVyZSwgb25jZSB0aGUgc3Rh
Y2sgaXMgc2Vuc2libGUuCi0gICAgLy8gTm90ZSB0aGF0IHdlIGFsc28gcm91Z2hseSBhc3N1bWUg
dGhhdCB0aGUgYXJndW1lbnRzIG1pZ2h0IHN0aWxsIGJlIG1hdGVyaWFsaXplZCBvdXRzaWRlIG9m
IGl0cwotICAgIC8vIGlubGluZSBjYWxsIGZyYW1lIHNjb3BlIC0gYnV0IGZvciBub3cgdGhlIERG
RyB3b3VsZG4ndCBkbyB0aGF0LgotCi0gICAgREZHOjplbWl0UmVzdG9yZUFyZ3VtZW50cyhjb250
ZXh0LCBjb2RlQmxvY2ssIGRmZ0pJVENvZGUsIG9wZXJhbmRzKTsKLQotICAgIC8vIEFkanVzdCB0
aGUgb2xkIEpJVCdzIGV4ZWN1dGUgY291bnRlci4gU2luY2Ugd2UgYXJlIGV4aXRpbmcgT1NSLCB3
ZSBrbm93Ci0gICAgLy8gdGhhdCBhbGwgbmV3IGNhbGxzIGludG8gdGhpcyBjb2RlIHdpbGwgZ28g
dG8gdGhlIG5ldyBKSVQsIHNvIHRoZSBleGVjdXRlCi0gICAgLy8gY291bnRlciBvbmx5IGFmZmVj
dHMgY2FsbCBmcmFtZXMgdGhhdCBwZXJmb3JtZWQgT1NSIGV4aXQgYW5kIGNhbGwgZnJhbWVzCi0g
ICAgLy8gdGhhdCB3ZXJlIHN0aWxsIGV4ZWN1dGluZyB0aGUgb2xkIEpJVCBhdCB0aGUgdGltZSBv
ZiBhbm90aGVyIGNhbGwgZnJhbWUncwotICAgIC8vIE9TUiBleGl0LiBXZSB3YW50IHRvIGVuc3Vy
ZSB0aGF0IHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKLSAgICAvLwotICAgIC8vIChhKSBDb2RlIHRo
ZSBwZXJmb3JtcyBhbiBPU1IgZXhpdCBnZXRzIGEgY2hhbmNlIHRvIHJlZW50ZXIgb3B0aW1pemVk
Ci0gICAgLy8gICAgIGNvZGUgZXZlbnR1YWxseSwgc2luY2Ugb3B0aW1pemVkIGNvZGUgaXMgZmFz
dGVyLiBCdXQgd2UgZG9uJ3QKLSAgICAvLyAgICAgd2FudCB0byBkbyBzdWNoIHJlZW50ZXJ5IHRv
byBhZ2dyZXNzaXZlbHkgKHNlZSAoYykgYmVsb3cpLgotICAgIC8vCi0gICAgLy8gKGIpIElmIHRo
ZXJlIGlzIGNvZGUgb24gdGhlIGNhbGwgc3RhY2sgdGhhdCBpcyBzdGlsbCBydW5uaW5nIHRoZSBv
bGQKLSAgICAvLyAgICAgSklUJ3MgY29kZSBhbmQgaGFzIG5ldmVyIE9TUidkLCB0aGVuIGl0IHNo
b3VsZCBnZXQgYSBjaGFuY2UgdG8KLSAgICAvLyAgICAgcGVyZm9ybSBPU1IgZW50cnkgZGVzcGl0
ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGV4aXRlZC4KLSAgICAvLwotICAgIC8vIChjKSBDb2RlIHRo
ZSBwZXJmb3JtcyBhbiBPU1IgZXhpdCBzaG91bGQgbm90IGltbWVkaWF0ZWx5IHJldHJ5IE9TUgot
ICAgIC8vICAgICBlbnRyeSwgc2luY2UgYm90aCBmb3JtcyBvZiBPU1IgYXJlIGV4cGVuc2l2ZS4g
T1NSIGVudHJ5IGlzCi0gICAgLy8gICAgIHBhcnRpY3VsYXJseSBleHBlbnNpdmUuCi0gICAgLy8K
LSAgICAvLyAoZCkgRnJlcXVlbnQgT1NSIGZhaWx1cmVzLCBldmVuIHRob3NlIHRoYXQgZG8gbm90
IHJlc3VsdCBpbiB0aGUgY29kZQotICAgIC8vICAgICBydW5uaW5nIGluIGEgaG90IGxvb3AsIHJl
c3VsdCBpbiByZWNvbXBpbGF0aW9uIGdldHRpbmcgdHJpZ2dlcmVkLgotICAgIC8vCi0gICAgLy8g
VG8gZW5zdXJlIChjKSwgd2UnZCBsaWtlIHRvIHNldCB0aGUgZXhlY3V0ZSBjb3VudGVyIHRvCi0g
ICAgLy8gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLiBUaGlzIHNlZW1zIGxp
a2UgaXQgd291bGQgZW5kYW5nZXIKLSAgICAvLyAoYSkgYW5kIChiKSwgc2luY2UgdGhlbiBldmVy
eSBPU1IgZXhpdCB3b3VsZCBkZWxheSB0aGUgb3Bwb3J0dW5pdHkgZm9yCi0gICAgLy8gZXZlcnkg
Y2FsbCBmcmFtZSB0byBwZXJmb3JtIE9TUiBlbnRyeS4gRXNzZW50aWFsbHksIGlmIE9TUiBleGl0
IGhhcHBlbnMKLSAgICAvLyBmcmVxdWVudGx5IGFuZCB0aGUgZnVuY3Rpb24gaGFzIGZldyBsb29w
cywgdGhlbiB0aGUgY291bnRlciB3aWxsIG5ldmVyCi0gICAgLy8gYmVjb21lIG5vbi1uZWdhdGl2
ZSBhbmQgT1NSIGVudHJ5IHdpbGwgbmV2ZXIgYmUgdHJpZ2dlcmVkLiBPU1IgZW50cnkKLSAgICAv
LyB3aWxsIG9ubHkgaGFwcGVuIGlmIGEgbG9vcCBnZXRzIGhvdCBpbiB0aGUgb2xkIEpJVCwgd2hp
Y2ggZG9lcyBhIHByZXR0eQotICAgIC8vIGdvb2Qgam9iIG9mIGVuc3VyaW5nIChhKSBhbmQgKGIp
LiBCdXQgdGhhdCBkb2Vzbid0IHRha2UgY2FyZSBvZiAoZCksCi0gICAgLy8gc2luY2UgZWFjaCBz
cGVjdWxhdGlvbiBmYWlsdXJlIHdvdWxkIHJlc2V0IHRoZSBleGVjdXRlIGNvdW50ZXIuCi0gICAg
Ly8gU28gd2UgY2hlY2sgaGVyZSBpZiB0aGUgbnVtYmVyIG9mIHNwZWN1bGF0aW9uIGZhaWx1cmVz
IGlzIHNpZ25pZmljYW50bHkKLSAgICAvLyBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHN1Y2Nl
c3NlcyAod2Ugd2FudCA5MCUgc3VjY2VzcyByYXRlKSwgYW5kIGlmCi0gICAgLy8gdGhlcmUgaGF2
ZSBiZWVuIGEgbGFyZ2UgZW5vdWdoIG51bWJlciBvZiBmYWlsdXJlcy4gSWYgc28sIHdlIHNldCB0
aGUKLSAgICAvLyBjb3VudGVyIHRvIDA7IG90aGVyd2lzZSB3ZSBzZXQgdGhlIGNvdW50ZXIgdG8K
LSAgICAvLyBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuCi0KLSAgICBpZiAo
VU5MSUtFTFkoY29kZUJsb2NrLT51cGRhdGVPU1JFeGl0Q291bnRlckFuZENoZWNrSWZOZWVkVG9S
ZW9wdGltaXplKGV4aXRTdGF0ZSkgPT0gQ29kZUJsb2NrOjpPcHRpbWl6ZUFjdGlvbjo6UmVvcHRp
bWl6ZU5vdykpCi0gICAgICAgIHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdyhiYXNlbGluZUNvZGVC
bG9jaywgY29kZUJsb2NrLCAmZXhpdCk7Ci0KLSAgICByZWlmeUlubGluZWRDYWxsRnJhbWVzKGNv
bnRleHQsIGJhc2VsaW5lQ29kZUJsb2NrLCBleGl0KTsKLSAgICBhZGp1c3RBbmRKdW1wVG9UYXJn
ZXQoY29udGV4dCwgdm0sIGNvZGVCbG9jaywgYmFzZWxpbmVDb2RlQmxvY2ssIGV4aXQpOwotfQot
Ci1zdGF0aWMgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENvbnRleHQmIGNvbnRleHQsIENv
ZGVCbG9jayogb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2ssIGNvbnN0IE9TUkV4aXRCYXNlJiBl
eGl0KQotewotICAgIGF1dG8mIGNwdSA9IGNvbnRleHQuY3B1OwotICAgIEZyYW1lIGZyYW1lKGNw
dS5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOwotCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBs
ZWF2ZSBob2xlcyBvbiB0aGUgc3RhY2sgd2hlbiBwZXJmb3JtaW5nIGFuIE9TUiBleGl0Ci0gICAg
Ly8gaW4gcHJlc2VuY2Ugb2YgaW5saW5lZCB0YWlsIGNhbGxzLgotICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1MTEKLSAgICBBU1NFUlQoSklUQ29kZTo6
aXNCYXNlbGluZUNvZGUob3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2stPmppdFR5cGUoKSkpOwot
ICAgIGZyYW1lLnNldE9wZXJhbmQ8Q29kZUJsb2NrKj4oQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
LCBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jayk7Ci0KLSAgICBjb25zdCBDb2RlT3JpZ2luKiBj
b2RlT3JpZ2luOwotICAgIGZvciAoY29kZU9yaWdpbiA9ICZleGl0Lm1fY29kZU9yaWdpbjsgY29k
ZU9yaWdpbiAmJiBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsgY29kZU9yaWdpbiA9IGNv
ZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygp
KSB7Ci0gICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdp
bi0+aW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxv
Y2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKCpjb2Rl
T3JpZ2luLCBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgIElubGluZUNhbGxG
cmFtZTo6S2luZCB0cnVlQ2FsbGVyQ2FsbEtpbmQ7Ci0gICAgICAgIENvZGVPcmlnaW4qIHRydWVD
YWxsZXIgPSBpbmxpbmVDYWxsRnJhbWUtPmdldENhbGxlclNraXBwaW5nVGFpbENhbGxzKCZ0cnVl
Q2FsbGVyQ2FsbEtpbmQpOwotICAgICAgICB2b2lkKiBjYWxsZXJGcmFtZSA9IGNwdS5mcCgpOwot
Ci0gICAgICAgIGJvb2wgY2FsbGVySXNMTEludCA9IGZhbHNlOwotCi0gICAgICAgIGlmICghdHJ1
ZUNhbGxlcikgewotICAgICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZS0+aXNUYWlsKCkp
OwotICAgICAgICAgICAgdm9pZCogcmV0dXJuUEMgPSBmcmFtZS5nZXQ8dm9pZCo+KENhbGxGcmFt
ZTo6cmV0dXJuUENPZmZzZXQoKSk7Ci0jaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAgICAgIHZvaWQq
IG9sZEVudHJ5U1AgPSBjcHUuZnA8dWludDhfdCo+KCkgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
Qyk7Ci0gICAgICAgICAgICB2b2lkKiBuZXdFbnRyeVNQID0gY3B1LmZwPHVpbnQ4X3QqPigpICsg
aW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpICsgc2l6ZW9mKHZvaWQqKTsKLSAgICAg
ICAgICAgIHJldHVyblBDID0gcmV0YWdDb2RlUHRyKHJldHVyblBDLCBiaXR3aXNlX2Nhc3Q8UHRy
VGFnPihvbGRFbnRyeVNQKSwgYml0d2lzZV9jYXN0PFB0clRhZz4obmV3RW50cnlTUCkpOwotI2Vu
ZGlmCi0gICAgICAgICAgICBmcmFtZS5zZXQ8dm9pZCo+KGlubGluZUNhbGxGcmFtZS0+cmV0dXJu
UENPZmZzZXQoKSwgcmV0dXJuUEMpOwotICAgICAgICAgICAgY2FsbGVyRnJhbWUgPSBmcmFtZS5n
ZXQ8dm9pZCo+KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0g
YmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jaygqdHJ1ZUNhbGxl
ciwgb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICAgICAgQnl0ZWNvZGVJbmRl
eCBjYWxsQnl0ZWNvZGVJbmRleCA9IHRydWVDYWxsZXItPmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAg
ICAgICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjYWxsZXJSZXR1cm5QQyhiYXNlbGluZUNvZGVCbG9j
a0ZvckNhbGxlciwgY2FsbEJ5dGVjb2RlSW5kZXgsIHRydWVDYWxsZXJDYWxsS2luZCwgY2FsbGVy
SXNMTEludCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpOwotCi0gICAgICAgICAgICBpZiAo
dHJ1ZUNhbGxlci0+aW5saW5lQ2FsbEZyYW1lKCkpCi0gICAgICAgICAgICAgICAgY2FsbGVyRnJh
bWUgPSBjcHUuZnA8dWludDhfdCo+KCkgKyB0cnVlQ2FsbGVyLT5pbmxpbmVDYWxsRnJhbWUoKS0+
c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotCi0jaWYgQ1BVKEFSTTY0RSkK
LSAgICAgICAgICAgIHZvaWQqIG5ld0VudHJ5U1AgPSBjcHUuZnA8dWludDhfdCo+KCkgKyBpbmxp
bmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkgKyBzaXplb2Yodm9pZCopOwotICAgICAgICAg
ICAganVtcFRhcmdldCA9IHRhZ0NvZGVQdHIoanVtcFRhcmdldCwgYml0d2lzZV9jYXN0PFB0clRh
Zz4obmV3RW50cnlTUCkpOwotI2VuZGlmCi0gICAgICAgICAgICBmcmFtZS5zZXQ8dm9pZCo+KGlu
bGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSwganVtcFRhcmdldCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHZvaWQqPihpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0K
LSAgICAgICAgLy8gUmVzdG9yZSB0aGUgaW5saW5lIGNhbGwgZnJhbWUncyBjYWxsZWUgc2F2ZSBy
ZWdpc3RlcnMuCi0gICAgICAgIC8vIElmIHRoaXMgaW5saW5lZCBmcmFtZSBpcyBhIHRhaWwgY2Fs
bCB0aGF0IHdpbGwgcmV0dXJuIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGNhbGxlciwgd2UgbmVlZCB0
bwotICAgICAgICAvLyBjb3B5IHRoZSBwcmlvciBjb250ZW50cyBvZiB0aGUgdGFnIHJlZ2lzdGVy
cyBhbHJlYWR5IHNhdmVkIGZvciB0aGUgb3V0ZXIgZnJhbWUgdG8gdGhpcyBmcmFtZS4KLSAgICAg
ICAgc2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKGNvbnRleHQsIGJhc2VsaW5lQ29kZUJsb2NrLCBW
aXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCksICF0cnVlQ2FsbGVy
KTsKLQotICAgICAgICBpZiAoY2FsbGVySXNMTEludCkgewotICAgICAgICAgICAgQ29kZUJsb2Nr
KiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2lu
QW5kQmFzZWxpbmVDb2RlQmxvY2soKnRydWVDYWxsZXIsIG91dGVybW9zdEJhc2VsaW5lQ29kZUJs
b2NrKTsKLSAgICAgICAgICAgIGZyYW1lLnNldDxjb25zdCB2b2lkKj4oY2FsbGVlU2F2ZVNsb3Qo
aW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6bWV0
YWRhdGFUYWJsZUdQUikub2Zmc2V0LCBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0YWRh
dGFUYWJsZSgpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgZnJhbWUuc2V0PGNv
bnN0IHZvaWQqPihjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJs
b2NrLCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUikub2Zmc2V0LCBiYXNlbGluZUNvZGVCbG9ja0Zv
ckNhbGxlci0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKTsKLSNlbmRpZgotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAgICAgICAgICAg
ZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJfdD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBQYXlsb2FkT2Zmc2V0
LCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKLSAgICAgICAg
QVNTRVJUKGNhbGxlckZyYW1lKTsKLSAgICAgICAgZnJhbWUuc2V0PHZvaWQqPihpbmxpbmVDYWxs
RnJhbWUtPmNhbGxlckZyYW1lT2Zmc2V0KCksIGNhbGxlckZyYW1lKTsKLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGNvZGVP
cmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkuYml0cygpOwotICAgICAgICBmcmFtZS5zZXRPcGVyYW5k
PHVpbnQzMl90PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFRhZ09mZnNldCwgbG9jYXRpb25CaXRzKTsKLSAg
ICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICBm
cmFtZS5zZXRPcGVyYW5kKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVT
bG90OjpjYWxsZWUsIEpTVmFsdWUoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpKSk7
Ci0jZWxzZSAvLyBVU0UoSlNWQUxVRTY0KSAvLyBzbyB0aGlzIGlzIHRoZSAzMi1iaXQgcGFydAot
ICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBiYXNlbGluZUNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuYXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5wdHIoKTsK
LSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUlu
ZGV4KGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKSkuYml0cygpOwotICAgICAg
ICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFRhZ09mZnNldCwg
bG9jYXRpb25CaXRzKTsKLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJfdD4oaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgVGFnT2Zmc2V0
LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oSlNWYWx1ZTo6Q2VsbFRhZykpOwotICAgICAgICBpZiAo
IWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIGZyYW1lLnNldE9w
ZXJhbmQoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSwgUGF5bG9hZE9mZnNldCwgaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpKTsKLSNl
bmRpZiAvLyBVU0UoSlNWQUxVRTY0KSAvLyBlbmRpbmcgdGhlICNlbHNlIHBhcnQsIHNvIGRpcmVj
dGx5IGFib3ZlIGlzIHRoZSAzMi1iaXQgcGFydAotICAgIH0KLQotICAgIC8vIERvbid0IG5lZWQg
dG8gc2V0IHRoZSB0b3BsZXZlbCBjb2RlIG9yaWdpbiBpZiB3ZSBvbmx5IGRpZCBpbmxpbmUgdGFp
bCBjYWxscwotICAgIGlmIChjb2RlT3JpZ2luKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAg
ICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2luLT5ieXRl
Y29kZUluZGV4KCkpLmJpdHMoKTsKLSNlbHNlCi0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiA9IG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5h
dChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLnB0cigpOwotICAgICAgICB1aW50MzJfdCBs
b2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVp
bnQzMl90PihpbnN0cnVjdGlvbikpKS5iaXRzKCk7Ci0jZW5kaWYKLSAgICAgICAgZnJhbWUuc2V0
T3BlcmFuZDx1aW50MzJfdD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIFRhZ09mZnNldCwgbG9jYXRpb25CaXRzKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGFk
anVzdEFuZEp1bXBUb1RhcmdldChDb250ZXh0JiBjb250ZXh0LCBWTSYgdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBPU1JFeGl0JiBleGl0KQot
ewotICAgIE9TUkV4aXRTdGF0ZSogZXhpdFN0YXRlID0gZXhpdC5leGl0U3RhdGUuZ2V0KCk7Ci0K
LSAgICBXVEY6OnN0b3JlTG9hZEZlbmNlKCk7IC8vIFRoZSBvcHRpbWl6aW5nIGNvbXBpbGVyIGV4
cGVjdHMgdGhhdCB0aGUgT1NSIGV4aXQgbWVjaGFuaXNtIHdpbGwgZXhlY3V0ZSB0aGlzIGZlbmNl
LgotICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGJhc2VsaW5lQ29kZUJsb2NrKTsKLQotICAgIC8v
IFdlIGJhcnJpZXIgYWxsIGlubGluZWQgZnJhbWVzIC0tIGFuZCBub3QganVzdCB0aGUgY3VycmVu
dCBpbmxpbmUgc3RhY2sgLS0KLSAgICAvLyBiZWNhdXNlIHdlIGRvbid0IGtub3cgd2hpY2ggaW5s
aW5lZCBmdW5jdGlvbiBvd25zIHRoZSB2YWx1ZSBwcm9maWxlIHRoYXQKLSAgICAvLyB3ZSdsbCB1
cGRhdGUgd2hlbiB3ZSBleGl0LiBJbiB0aGUgY2FzZSBvZiAiZigpIHsgYSgpOyBiKCk7IH0iLCBp
ZiBib3RoCi0gICAgLy8gYSBhbmQgYiBhcmUgaW5saW5lZCwgd2UgbWlnaHQgZXhpdCBpbnNpZGUg
YiBkdWUgdG8gYSBiYWQgdmFsdWUgbG9hZGVkCi0gICAgLy8gZnJvbSBhLgotICAgIC8vIEZJWE1F
OiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHNob3VsZCByZW1lbWJlciB3aGljaCBDb2Rl
QmxvY2sgb3ducwotICAgIC8vIHRoZSB2YWx1ZSBwcm9maWxlLgotICAgIElubGluZUNhbGxGcmFt
ZVNldCogaW5saW5lQ2FsbEZyYW1lcyA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24o
KS0+aW5saW5lQ2FsbEZyYW1lcy5nZXQoKTsKLSAgICBpZiAoaW5saW5lQ2FsbEZyYW1lcykgewot
ICAgICAgICBmb3IgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lIDogKmlubGluZUNh
bGxGcmFtZXMpCi0gICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihpbmxpbmVDYWxsRnJh
bWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsKLSAgICB9Ci0KLSAgICBhdXRvKiBleGl0SW5s
aW5lQ2FsbEZyYW1lID0gZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAg
aWYgKGV4aXRJbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIGNvbnRleHQuZnAoKSA9IGNvbnRleHQu
ZnA8dWludDhfdCo+KCkgKyBleGl0SW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSk7Ci0KLSAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gZXhpdFN0YXRlLT5q
dW1wVGFyZ2V0OwotICAgIEFTU0VSVChqdW1wVGFyZ2V0KTsKLQotICAgIGlmIChleGl0LmlzRXhj
ZXB0aW9uSGFuZGxlcigpKSB7Ci0gICAgICAgIC8vIFNpbmNlIHdlJ3JlIGp1bXBpbmcgdG8gb3Bf
Y2F0Y2gsIHdlIG5lZWQgdG8gc2V0IGNhbGxGcmFtZUZvckNhdGNoLgotICAgICAgICB2bS5jYWxs
RnJhbWVGb3JDYXRjaCA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsKLSAgICB9Ci0KLSAgICB2
bS50b3BDYWxsRnJhbWUgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7Ci0KLSAgICBpZiAoZXhp
dFN0YXRlLT5pc0p1bXBUb0xMSW50KSB7Ci0gICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9y
RXhpdCA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soZXhp
dC5tX2NvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwotICAg
ICAgICBjb25zdCBJbnN0cnVjdGlvbiYgY3VycmVudEluc3RydWN0aW9uID0gKmNvZGVCbG9ja0Zv
ckV4aXQtPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLnB0cigpOwotCi0gICAgICAg
IGNvbnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpID0gYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4oY29kZUJsb2NrRm9yRXhpdC0+bWV0YWRhdGFUYWJsZSgpKTsKLSNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6UmVnaXN0ZXJzOjpw
YkdQUikgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVj
dGlvbnNSYXdQb2ludGVyKCkpOwotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6UmVnaXN0ZXJz
OjpwY0dQUikgPSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVj
b2RlSW5kZXgoKS5vZmZzZXQoKSk7Ci0jZWxzZQotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6
UmVnaXN0ZXJzOjpwY0dQUikgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PigmY3VycmVudEluc3Ry
dWN0aW9uKTsKLSNlbmRpZgotCi0gICAgICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigp
KQotICAgICAgICAgICAgdm0udGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93ID0gJmN1cnJlbnRJ
bnN0cnVjdGlvbjsKLSAgICB9Ci0KLSAgICBjb250ZXh0LnBjKCkgPSB1bnRhZ0NvZGVQdHI8SlNF
bnRyeVB0clRhZz4oanVtcFRhcmdldCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50T1NSRXhpdChD
b250ZXh0JiBjb250ZXh0LCB1aW50MzJfdCBvc3JFeGl0SW5kZXgsIGNvbnN0IE9TUkV4aXQmIGV4
aXQpCi17Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+
KCk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwot
ICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUgPSBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7Ci0g
ICAgRXhpdEtpbmQga2luZCA9IGV4aXQubV9raW5kOwotICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVPZmZzZXQgPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0KLSAgICBkYXRh
TG9nKCJTcGVjdWxhdGlvbiBmYWlsdXJlIGluICIsICpjb2RlQmxvY2spOwotICAgIGRhdGFMb2co
IiBAIGV4aXQgIyIsIG9zckV4aXRJbmRleCwgIiAoIiwgYnl0ZWNvZGVPZmZzZXQsICIsICIsIGV4
aXRLaW5kVG9TdHJpbmcoa2luZCksICIpIHdpdGggIik7Ci0gICAgaWYgKGFsdGVybmF0aXZlKSB7
Ci0gICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAiZXhlY3V0ZUNvdW50ZXIgPSAiLCBhbHRl
cm5hdGl2ZS0+aml0RXhlY3V0ZUNvdW50ZXIoKSwKLSAgICAgICAgICAgICIsIHJlb3B0aW1pemF0
aW9uUmV0cnlDb3VudGVyID0gIiwgYWx0ZXJuYXRpdmUtPnJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dGVyKCksCi0gICAgICAgICAgICAiLCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPSAiLCBhbHRl
cm5hdGl2ZS0+b3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKCkpOwotICAgIH0gZWxzZQotICAgICAg
ICBkYXRhTG9nKCJubyBhbHRlcm5hdGl2ZSBjb2RlIGJsb2NrIChpLmUuIHdlJ3ZlIGJlZW4gamV0
dGlzb25lZCkiKTsKLSAgICBkYXRhTG9nKCIsIG9zckV4aXRDb3VudGVyID0gIiwgY29kZUJsb2Nr
LT5vc3JFeGl0Q291bnRlcigpLCAiXG4iKTsKLSAgICBkYXRhTG9nKCIgICAgR1BScyBhdCB0aW1l
IG9mIGV4aXQ6Iik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzOyArK2kpIHsKLSAgICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVn
aXN0ZXIoaSk7Ci0gICAgICAgIGRhdGFMb2coIiAiLCBjb250ZXh0Lmdwck5hbWUoZ3ByKSwgIjoi
LCBSYXdQb2ludGVyKGNvbnRleHQuZ3ByPHZvaWQqPihncHIpKSk7Ci0gICAgfQotICAgIGRhdGFM
b2coIlxuIik7Ci0gICAgZGF0YUxvZygiICAgIEZQUnMgYXQgdGltZSBvZiBleGl0OiIpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytp
KSB7Ci0gICAgICAgIEZQUlJlZyBmcHIgPSBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAg
ICBkYXRhTG9nKCIgIiwgY29udGV4dC5mcHJOYW1lKGZwciksICI6Iik7Ci0gICAgICAgIHVpbnQ2
NF90IGJpdHMgPSBjb250ZXh0LmZwcjx1aW50NjRfdD4oZnByKTsKLSAgICAgICAgZG91YmxlIHZh
bHVlID0gY29udGV4dC5mcHIoZnByKTsKLSAgICAgICAgZGF0YUxvZ0YoIiVsbHg6JWxmIiwgc3Rh
dGljX2Nhc3Q8bG9uZyBsb25nPihiaXRzKSwgdmFsdWUpOwotICAgIH0KLSAgICBkYXRhTG9nKCJc
biIpOwotfQotCi0vLyBKSVQgYmFzZWQgT1NSIEV4aXQuCi0KIE9TUkV4aXQ6Ok9TUkV4aXQoRXhp
dEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBNZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlIHZhbHVlUHJvZmlsZSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgdW5zaWduZWQg
c3RyZWFtSW5kZXgsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCiAgICAgOiBPU1JFeGl0QmFzZShr
aW5kLCBqaXQtPm1fb3JpZ2luLmZvckV4aXQsIGppdC0+bV9vcmlnaW4uc2VtYW50aWMsIGppdC0+
bV9vcmlnaW4ud2FzSG9pc3RlZCkKICAgICAsIG1fanNWYWx1ZVNvdXJjZShqc1ZhbHVlU291cmNl
KQpAQCAtOTU4LDE1ICs3MCwxOCBAQCBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+
IE9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goKSBjb25zdAogCiB2b2lkIE9TUkV4aXQ6
OmVtaXRSZXN0b3JlQXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9w
ZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcykKIHsKLSAgICBIYXNoTWFwPE1pbmlmaWVk
SUQsIGludD4gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50czsgLy8gTWFwcyBwaGFudG9tIGFyZ3Vt
ZW50cyBub2RlIElEIHRvIG9wZXJhbmQuCisgICAgSGFzaE1hcDxNaW5pZmllZElELCBWaXJ0dWFs
UmVnaXN0ZXI+IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHM7IC8vIE1hcHMgcGhhbnRvbSBhcmd1
bWVudHMgbm9kZSBJRCB0byBvcGVyYW5kLgogICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5k
ZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgY29uc3QgVmFsdWVSZWNv
dmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIGludCBvcGVyYW5kID0g
b3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KTsKIAogICAgICAgICBpZiAocmVjb3Zlcnku
dGVjaG5pcXVlKCkgIT0gRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkCiAgICAgICAg
ICAgICAmJiByZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5v
dENyZWF0ZWQpCiAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICBPcGVyYW5kIG9wZXJh
bmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOworICAgICAgICBpZiAob3BlcmFu
ZC5pc1RtcCgpKQorICAgICAgICAgICAgY29udGludWU7CisKICAgICAgICAgTWluaWZpZWRJRCBp
ZCA9IHJlY292ZXJ5Lm5vZGVJRCgpOwogICAgICAgICBhdXRvIGl0ZXIgPSBhbHJlYWR5QWxsb2Nh
dGVkQXJndW1lbnRzLmZpbmQoaWQpOwogICAgICAgICBpZiAoaXRlciAhPSBhbHJlYWR5QWxsb2Nh
dGVkQXJndW1lbnRzLmVuZCgpKSB7CkBAIC05ODcsNyArMTAyLDcgQEAgdm9pZCBPU1JFeGl0Ojpl
bWl0UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPcGVy
YW5kczxWYWwKIAogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJh
bWUtPmlzQ2xvc3VyZUNhbGwpIHsKICAgICAgICAgICAgIGppdC5sb2FkUHRyKAotICAgICAgICAg
ICAgICAgIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihzdGFja09mZnNldCArIENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSksCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNz
Rm9yKFZpcnR1YWxSZWdpc3RlcihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkp
LAogICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIGppdC5tb3ZlKApAQCAtOTk3LDcgKzExMiw3IEBAIHZvaWQgT1NSRXhpdDo6ZW1p
dFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT3BlcmFu
ZHM8VmFsCiAKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1l
LT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgaml0LmxvYWQzMigKLSAgICAgICAgICAgICAg
ICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Ioc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksCisgICAgICAgICAgICAgICAgQXNzZW1ibHlI
ZWxwZXJzOjpwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihzdGFja09mZnNldCArIENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSksCiAgICAgICAgICAgICAgICAgR1BS
SW5mbzo6cmVnVDEpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaml0Lm1vdmUoCkBA
IC0xMDIzLDcgKzEzOCw3IEBAIHZvaWQgT1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0Nh
bGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT3BlcmFuZHM8VmFsCiAgICAgICAgIGppdC5j
YWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgIGppdC5z
dG9yZUNlbGwoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvcihvcGVyYW5kKSk7CiAKLSAgICAgICAgYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5hZGQo
aWQsIG9wZXJhbmQpOworICAgICAgICBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmFkZChpZCwg
b3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogfQogCkBAIC0xNDY2LDE2ICs1ODEs
NzkgQEAgdm9pZCBPU1JFeGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZt
LCBjb25zdCBPU1JFeGl0JiBleGl0LCBjb25zdAogICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFu
ZGxlcigpKQogICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7CiAKKyAgICBpZiAoZXhpdC5tX2NvZGVPcmlnaW4u
aW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSkgeworICAgICAgICAvLyBGSVhN
RTogTWF5YmUgd2Ugc2hvdWxkbid0IHVzZSBhIHByb2JlIGJ1dCBmaWxsaW5nIGFsbCB0aGUgc2lk
ZSBzdGF0ZSBvYmplY3RzIGlzIHRyaWNreSBvdGhlcndpc2UuLi4KKyAgICAgICAgVmVjdG9yPFZh
bHVlUmVjb3Zlcnk+IHZhbHVlcyhvcGVyYW5kcy5udW1iZXJPZlRtcHMoKSk7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmFuZHMubnVtYmVyT2ZUbXBzKCk7ICsraSkKKyAgICAg
ICAgICAgIHZhbHVlc1tpXSA9IG9wZXJhbmRzLnRtcChpKTsKKworICAgICAgICBWTSogdm1QdHIg
PSAmdm07CisgICAgICAgIGF1dG8qIHRtcFNjcmF0Y2ggPSBzY3JhdGNoICsgb3BlcmFuZHMudG1w
SW5kZXgoMCk7CisgICAgICAgIGppdC5wcm9iZShbPSwgdmFsdWVzID0gV1RGTW92ZSh2YWx1ZXMp
XSAoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgIGF1dG8gYWRkU2lkZVN0
YXRlID0gWyZdIChDYWxsRnJhbWUqIGZyYW1lLCBCeXRlY29kZUluZGV4IGluZGV4LCBzaXplX3Qg
dG1wT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRP
U1JFeGl0U2lkZVN0YXRlPiBzaWRlU3RhdGUgPSBXVEY6Om1ha2VVbmlxdWU8Q2hlY2twb2ludE9T
UkV4aXRTaWRlU3RhdGU+KCk7CisKKyAgICAgICAgICAgICAgICBzaWRlU3RhdGUtPmJ5dGVjb2Rl
SW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1h
eE51bUNoZWNrcG9pbnRUbXBzOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byYgcmVj
b3ZlcnkgPSB2YWx1ZXNbaSArIHRtcE9mZnNldF07CisgICAgICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgZG8gd2hhdCB0aGUgRlRMIGRvZXMgYW5kIG1hdGVyaWFsaXplIGFsbCB0
aGUgSlNWYWx1ZXMgaW50byB0aGUgc2NyYXRjaCBidWZmZXIuCisgICAgICAgICAgICAgICAgICAg
IHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBDb25zdGFudDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9
IHJlY292ZXJ5LmNvbnN0YW50KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgorICAgICAgICAgICAg
ICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOiB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzaWRlU3RhdGUtPnRtcHNbaV0gPSBqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90
Pih0bXBTY3JhdGNoW2kgKyB0bXBPZmZzZXRdKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
Qm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBVbmJv
eGVkQ2VsbEluR1BSOgorICAgICAgICAgICAgICAgICAgICBjYXNlIENlbGxEaXNwbGFjZWRJbkpT
U3RhY2s6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBz
aWRlU3RhdGUtPnRtcHNbaV0gPSByZWludGVycHJldF9jYXN0PEpTVmFsdWUqPih0bXBTY3JhdGNo
KVtpICsgdG1wT2Zmc2V0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IAorICAgICAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgdm1QdHItPmFkZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUo
ZnJhbWUsIFdURk1vdmUoc2lkZVN0YXRlKSk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAg
ICBjb25zdCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luOworICAgICAgICAgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBjb250ZXh0LmdwcjxDYWxsRnJhbWUqPihHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3Rlcik7CisgICAgICAgICAgICBmb3IgKGNvZGVPcmlnaW4gPSAmZXhpdC5tX2NvZGVPcmlnaW47
IGNvZGVPcmlnaW4gJiYgY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7IGNvZGVPcmlnaW4g
PSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2Fs
bHMoKSkgeworICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXgg
PSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjYWxs
Qnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgICAgICAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi0+
aW5saW5lQ2FsbEZyYW1lKCk7CisgICAgICAgICAgICAgICAgYWRkU2lkZVN0YXRlKHJlaW50ZXJw
cmV0X2Nhc3Q8Q2FsbEZyYW1lKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY2FsbEZyYW1lKSAr
IGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSAtIHNpemVvZihDUFVSZWdpc3Rlcikp
LCBjYWxsQnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWNvZGVPcmlnaW4pCisgICAgICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgICAgICBpZiAoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0g
Y29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpOyBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkK
KyAgICAgICAgICAgICAgICBhZGRTaWRlU3RhdGUoY2FsbEZyYW1lLCBieXRlY29kZUluZGV4LCAw
KTsKKyAgICAgICAgfSk7CisgICAgfQorCiAgICAgLy8gRG8gYWxsIGRhdGEgZm9ybWF0IGNvbnZl
cnNpb25zIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBpbnRvIHRoZSBzdGFjay4KIAogICAgIGZvciAo
c2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKICAg
ICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07Ci0g
ICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5kcy52aXJ0dWFsUmVnaXN0ZXJGb3JJ
bmRleChpbmRleCk7Ci0KLSAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkgJiYgcmVnLnRvTG9jYWwo
KSA8IHN0YXRpY19jYXN0PGludD4oaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmNhbGxlZVNhdmVT
cGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKSkKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gb3Bl
cmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGludCBvcGVyYW5kID0gcmVnLm9m
ZnNldCgpOworICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkgJiYgb3BlcmFuZC50b0xvY2Fs
KCkgPCBzdGF0aWNfY2FzdDxpbnQ+KGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5jYWxsZWVTYXZl
U3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSkpCisgICAgICAgICAgICBjb250aW51ZTsKIAogICAg
ICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAgICAgIGNhc2UgRGlzcGxh
Y2VkSW5KU1N0YWNrOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAppbmRleCBh
N2U1ODc4YzA3MTcwOGExZGE3NmMwYjBlYjU0ZDU0ZjFhMDRlYjhlLi45ZTliY2VhNDgxYzFkNjg3
Nzk3MmYyNTlkNjJjMWEyMzAwYjJiMTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXQuaApAQCAtMTUwLDggKzE1MCw2IEBAIHN0cnVjdCBPU1JFeGl0IDogcHVibGljIE9TUkV4
aXRCYXNlIHsKIAogICAgIGZyaWVuZCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGls
ZU9TUkV4aXQoQ2FsbEZyYW1lKik7CiAKLSAgICBzdGF0aWMgdm9pZCBleGVjdXRlT1NSRXhpdChQ
cm9iZTo6Q29udGV4dCYpOwotCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRh
Zz4gbV9wYXRjaGFibGVKdW1wTG9jYXRpb247CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE9T
UkV4aXRQdHJUYWc+IG1fY29kZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0QmFzZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0QmFzZS5oCmluZGV4IDMxMDk2M2Q4NDQzNmM1MzMyNzg0ZjBhMjkyYTQ5Y2JlMWI4MmE1OWIu
LjAwM2I2MThjZDQ0MGU0MDBhYmFhY2VjMGFmYmMzYzEyNDM1ZGI5NmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgKQEAgLTcwLDYgKzcwLDExIEBAIHN0cnVj
dCBPU1JFeGl0QmFzZSB7CiAgICAgICAgIHJldHVybiBtX2tpbmQgPT0gR2VuZXJpY1Vud2luZDsK
ICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNFeGl0aW5nVG9DaGVja3BvaW50SGFu
ZGxlcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgoKS5jaGVja3BvaW50KCk7CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBjb25z
aWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2Nr
LCBFeGl0aW5nSklUVHlwZSBqaXRUeXBlKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAppbmRleCA3YmE1ZDZl
MjJiZTVmYWI0NjJlMjA1ZTAwMDBkMTg1ZmZkODgwMTI0Li4yN2UyYWE4ZDk4Zjc3YzJjYmZkZDM3
ZTJhY2RjNzJmNDhkYzVlOWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCkBAIC0yOSwxMiArMjksMTUgQEAKICNp
ZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkJ5dGVjb2Rlcy5oIgorI2luY2x1ZGUgIkNo
ZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2lu
Y2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJKU0NK
U1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJMTElu
dERhdGEuaCIKKyNpbmNsdWRlICJMTEludFRodW5rcy5oIgorI2luY2x1ZGUgIlByb2JlQ29udGV4
dC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKQEAgLTE0Miw2ICsxNDUsMTAgQEAgdm9pZCBoYW5kbGVFeGl0Q291bnRz
KFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNhbGxlclJldHVyblBDKENvZGVCbG9j
ayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIsIEJ5dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2Rl
SW5kZXgsIElubGluZUNhbGxGcmFtZTo6S2luZCB0cnVlQ2FsbGVyQ2FsbEtpbmQsIGJvb2wmIGNh
bGxlcklzTExJbnQpCiB7CiAgICAgY2FsbGVySXNMTEludCA9IE9wdGlvbnM6OmZvcmNlT1NSRXhp
dFRvTExJbnQoKSB8fCBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+aml0VHlwZSgpID09IEpJ
VFR5cGU6OkludGVycHJldGVyVGh1bms7CisKKyAgICBpZiAoY2FsbEJ5dGVjb2RlSW5kZXguY2hl
Y2twb2ludCgpKQorICAgICAgICByZXR1cm4gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRh
Zz4oY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lKTsKKwog
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqdW1wVGFyZ2V0OwogCiAg
ICAgaWYgKGNhbGxlcklzTExJbnQpIHsKQEAgLTIzNyw3ICsyNDQsNyBAQCB2b2lkIHJlaWZ5SW5s
aW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0
KQogICAgIC8vIGluIHByZXNlbmNlIG9mIGlubGluZWQgdGFpbCBjYWxscy4KICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NTExCiAgICAgQVNTRVJUKEpJ
VENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5qaXRUeXBlKCkp
KTsKLSAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5i
YXNlbGluZUNvZGVCbG9jaygpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFs
UmVnaXN0ZXIpQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7CisgICAgaml0LnN0b3JlUHRyKEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKSksIEFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKIAog
ICAgIGNvbnN0IENvZGVPcmlnaW4qIGNvZGVPcmlnaW47CiAgICAgZm9yIChjb2RlT3JpZ2luID0g
JmV4aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2luICYmIGNvZGVPcmlnaW4tPmlubGluZUNhbGxG
cmFtZSgpOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCktPmdldENh
bGxlclNraXBwaW5nVGFpbENhbGxzKCkpIHsKQEAgLTMwNCwzMyArMzExLDM0IEBAIHZvaWQgcmVp
ZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2Um
IGV4aXQpCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNWYXJh
cmdzKCkpCi0gICAgICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgQXNzZW1i
bHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykp
KTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMy
KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCBBc3NlbWJseUhl
bHBlcnM6OnBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBqaXQuc3RvcmVQdHIoY2FsbGVyRnJhbWVHUFIsIEFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5jYWxs
ZXJGcmFtZU9mZnNldCgpKSk7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxT
aXRlSW5kZXgoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5iaXRzKCk7Ci0gICAgICAgIGpp
dC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFz
c2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykp
KTsKKyAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChiYXNlbGlu
ZUNvZGVCbG9jay0+Ynl0ZWNvZGVJbmRleEZvckV4aXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRl
eCgpKSkuYml0cygpOworICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVn
aXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpOwogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+
aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIGppdC5zdG9yZTY0KEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGlubGluZUNhbGxGcmFtZS0+Y2Fs
bGVlQ29uc3RhbnQoKSkpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVn
aXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxs
ZWUpKSk7CisgICAgICAgICAgICBqaXQuc3RvcmU2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0
YW50KCkpKSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICNl
bHNlIC8vIFVTRShKU1ZBTFVFNjQpIC8vIHNvIHRoaXMgaXMgdGhlIDMyLWJpdCBwYXJ0CiAgICAg
ICAgIGppdC5zdG9yZVB0cihjYWxsZXJGcmFtZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNz
Rm9yQnl0ZU9mZnNldChpbmxpbmVDYWxsRnJhbWUtPmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKICAg
ICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gYmFzZWxpbmVDb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpLmF0KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0g
ICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRl
eChiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KGluc3RydWN0aW9uKSkpLmJpdHMoKTsKLSAgICAgICAg
aml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwg
QXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KSkpOwotICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3Rl
cikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkp
KTsKKyAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleCgpLmJpdHMo
KTsKKyAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9j
YXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcykpKTsKKyAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKFZpcnR1
YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSkpOwogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkK
LSAgICAgICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXls
b2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBD
YWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1i
bHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQo
KSksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICNlbmRpZiAv
LyBVU0UoSlNWQUxVRTY0KSAvLyBlbmRpbmcgdGhlICNlbHNlIHBhcnQsIHNvIGRpcmVjdGx5IGFi
b3ZlIGlzIHRoZSAzMi1iaXQgcGFydAogICAgIH0KIAogICAgIC8vIERvbid0IG5lZWQgdG8gc2V0
IHRoZSB0b3BsZXZlbCBjb2RlIG9yaWdpbiBpZiB3ZSBvbmx5IGRpZCBpbmxpbmUgdGFpbCBjYWxs
cwogICAgIGlmIChjb2RlT3JpZ2luKSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdWlu
dDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2luLT5ieXRlY29kZUlu
ZGV4KCkpLmJpdHMoKTsKKyAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJ
bmRleChCeXRlY29kZUluZGV4KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKSkp
LmJpdHMoKTsKICNlbHNlCi0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9
IGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2luLT5i
eXRlY29kZUluZGV4KCkpLnB0cigpOwotICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBD
YWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVj
dGlvbikpKS5iaXRzKCk7CisgICAgICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IGppdC5iYXNlbGlu
ZUNvZGVCbG9jaygpLT5ieXRlY29kZUluZGV4Rm9yRXhpdChjb2RlT3JpZ2luLT5ieXRlY29kZUlu
ZGV4KCkpOworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBqaXQuYmFz
ZWxpbmVDb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKGJ5dGVjb2RlSW5kZXgpLmF0KCkucHRyKCk7
CisgICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYml0d2lzZV9j
YXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikpLmJpdHMoKTsKICNlbmRpZgotICAgICAgICBqaXQu
c3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3Nl
bWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKKyAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdG
b3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICB9CiB9
CiAKQEAgLTM4NSw3ICszOTMsMTEgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZt
LCBDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAgICAgaWYgKGV4
aXRUb0xMSW50KSB7CiAgICAgICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IGV4aXQubV9jb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJ
bnN0cnVjdGlvbiA9ICpjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29k
ZUluZGV4KS5wdHIoKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJU
YWc+IGRlc3RpbmF0aW9uID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY3VycmVu
dEluc3RydWN0aW9uKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJU
YWc+IGRlc3RpbmF0aW9uOworICAgICAgICBpZiAoYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkp
CisgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJU
YWc+KGNoZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBvbGluZSk7CisgICAgICAgIGVsc2UgCisgICAg
ICAgICAgICBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1
cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVy
KCkpIHsKICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigm
Y3VycmVudEluc3RydWN0aW9uKSwgR1BSSW5mbzo6cmVnVDIpOwpAQCAtNDAxLDEwICs0MTMsMTgg
QEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAjZW5kaWYKICAgICAgICAganVtcFRhcmdldCA9IGRl
c3RpbmF0aW9uLnJldGFnZ2VkPE9TUkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsK
ICAgICB9IGVsc2UgewotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBj
b2RlTG9jYXRpb24gPSBjb2RlQmxvY2tGb3JFeGl0LT5qaXRDb2RlTWFwKCkuZmluZChleGl0Lm1f
Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOwotICAgICAgICBBU1NFUlQoY29kZUxvY2F0aW9u
KTsKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBleGl0SW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5i
eXRlY29kZUluZGV4KCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBkZXN0aW5hdGlvbjsKKyAgICAgICAgaWYgKGV4aXRJbmRleC5jaGVja3BvaW50KCkpCisg
ICAgICAgICAgICBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+
KGNoZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBvbGluZSk7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgQVNTRVJUKGNvZGVCbG9ja0ZvckV4aXQtPmJ5dGVjb2RlSW5kZXhGb3JFeGl0KGV4aXRJ
bmRleCkgPT0gZXhpdEluZGV4KTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gY29kZUJsb2Nr
Rm9yRXhpdC0+aml0Q29kZU1hcCgpLmZpbmQoZXhpdEluZGV4KTsKKyAgICAgICAgfQogCi0gICAg
ICAgIGp1bXBUYXJnZXQgPSBjb2RlTG9jYXRpb24ucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4oKS5l
eGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICBBU1NFUlQoZGVzdGluYXRpb24pOworCisgICAg
ICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4
ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfQogCiAgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW0zMihKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2tGb3JF
eGl0KSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQXNz
ZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNl
LmNwcAppbmRleCBhOTk1OTdmNjY0MzhjZGE3ODRlZTM5NmQzMWU0MTY4YWIzZjk4NjExLi5iODU5
NTk4MTA3MTA4MDRjMjUyNzc2NTI1ZTUxMjZjNjNhMjZlNzZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQ
aGFzZS5jcHAKQEAgLTIyNDIsNyArMjI0Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAo
bV9oZWFwLmZvbGxvdyhhdmFpbGFiaWxpdHkubV9sb2NhbHNbaV0ubm9kZSgpKSAhPSBlc2NhcGVl
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpbnQgb3BlcmFuZCA9
IGF2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICBP
cGVyYW5kIG9wZXJhbmQgPSBhdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZEZvckluZGV4KGkp
OwogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAg
ICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBvcmlnaW4udGFrZVZhbGlkRXhpdChjYW5F
eGl0KSwgT3BJbmZvKG9wZXJhbmQpLAogICAgICAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvbi0+
ZGVmYXVsdEVkZ2UoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcEluZm8uaAppbmRleCBm
MzljMTRiOWYwYTQ0ODc4OWQ3NzJkYzI3ZGYxNTg4MWU1MDg2ODk1Li43N2VmY2ZiMjQ4MDAyYTRi
ZjVlYTYwYTZlNjY1MjBmZTA1MTQ0YmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BJ
bmZvLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgc3RydWN0IE9wSW5mbyB7CiAgICAgZXhwbGljaXQgT3BJ
bmZvKEludGVncmFsVHlwZSB2YWx1ZSkKICAgICAgICAgOiBtX3ZhbHVlKHN0YXRpY19jYXN0PHVp
bnQ2NF90Pih2YWx1ZSkpIHsgfQogICAgIGV4cGxpY2l0IE9wSW5mbyhSZWdpc3RlcmVkU3RydWN0
dXJlIHN0cnVjdHVyZSkgOiBtX3ZhbHVlKHN0YXRpY19jYXN0PHVpbnQ2NF90PihiaXR3aXNlX2Nh
c3Q8dWludHB0cl90PihzdHJ1Y3R1cmUpKSkgeyB9Ci0KKyAgICBleHBsaWNpdCBPcEluZm8oT3Bl
cmFuZCBvcCkgOiBtX3ZhbHVlKG9wLmFzQml0cygpKSB7IH0KIAogICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPgogICAgIGV4cGxpY2l0IE9wSW5mbyhUKiBwdHIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAppbmRleCBiYjVjODM1OWMxMjg1YWNiMzYxMWRiNTI3
NjhmMzUwOTA4ZjA0ZjYzLi5jZGFmN2JlOGRjZmE0MGI5MWU2NzZiNjc1NGM4MGU3NGY2NWQxM2Ey
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKQEAgLTI5
NzEsMTcgKzI5NzEsMTggQEAgaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5SW5k
ZXhPZlZhbHVlRG91YmxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmoKICAgICByZXR1cm4gLTE7
CiB9CiAKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Mb2FkVmFyYXJncyhKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IGZpcnN0RWxlbWVudERlc3QsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRBcmd1bWVudHMsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoLCB1
aW50MzJfdCBtYW5kYXRvcnlNaW5pbXVtKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxv
YWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgZmlyc3RFbGVt
ZW50RGVzdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEFyZ3VtZW50cywgdWludDMyX3Qgb2Zmc2V0
LCB1aW50MzJfdCBsZW5ndGhJbmNsdWRpbmdUaGlzLCB1aW50MzJfdCBtYW5kYXRvcnlNaW5pbXVt
KQogeworICAgIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnQgeyBmaXJzdEVsZW1lbnREZXN0
IH07CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgSlNWYWx1ZSBhcmd1
bWVudHMgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50cyk7CiAgICAgCi0gICAgbG9h
ZFZhcmFyZ3MoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlcihmaXJzdEVs
ZW1lbnREZXN0KSwgYXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgbG9hZFZhcmFyZ3Mo
Z2xvYmFsT2JqZWN0LCBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCZjYWxsRnJhbWUtPnIoZmlyc3RF
bGVtZW50KSksIGFyZ3VtZW50cywgb2Zmc2V0LCBsZW5ndGhJbmNsdWRpbmdUaGlzIC0gMSk7CiAg
ICAgCi0gICAgZm9yICh1aW50MzJfdCBpID0gbGVuZ3RoOyBpIDwgbWFuZGF0b3J5TWluaW11bTsg
KytpKQotICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0ganNVbmRl
ZmluZWQoKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSBsZW5ndGhJbmNsdWRpbmdUaGlzIC0gMTsg
aSA8IG1hbmRhdG9yeU1pbmltdW07ICsraSkKKyAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxl
bWVudCArIGkpID0ganNVbmRlZmluZWQoKTsKIH0KIAogZG91YmxlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uRk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3QgYikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcAppbmRleCBj
YmMyYzhiZmFlNGU5NGQwOTVkZGM5MTU3ZGIzNmFiNWEwYzZhZGMyLi4yYjEwNWIyY2FkZTdiN2Q1
NTg5ZmFkZWFmYjAyYmMwOTY0NWUwOWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwCkBAIC00MywxMSArNDMsOCBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIG5hbWVzcGFjZSB7CiAKLW5hbWVz
cGFjZSBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2VJbnRlcm5hbCB7Ci1zdGF0aWMgY29uc3RleHBy
IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotfQotCiBjbGFzcyBQaGFudG9tSW5zZXJ0aW9uUGhhc2Ug
OiBwdWJsaWMgUGhhc2UgeworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFs
c2U7CiBwdWJsaWM6CiAgICAgUGhhbnRvbUluc2VydGlvblBoYXNlKEdyYXBoJiBncmFwaCkKICAg
ICAgICAgOiBQaGFzZShncmFwaCwgInBoYW50b20gaW5zZXJ0aW9uIikKQEAgLTYyLDcgKzU5LDcg
QEAgcHVibGljOgogICAgICAgICAvLyBTZXRMb2NhbHMgZXhlY3V0ZSwgd2hpY2ggaXMgaW5hY2N1
cmF0ZS4gVGhhdCBjYXVzZXMgdXMgdG8gaW5zZXJ0IHRvbyBmZXcgUGhhbnRvbXMuCiAgICAgICAg
IERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgbV9ncmFwaC5tX3JlZkNvdW50U3RhdGUgPT0g
RXhhY3RSZWZDb3VudCk7CiAgICAgICAgIAotICAgICAgICBpZiAoREZHUGhhbnRvbUluc2VydGlv
blBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAg
ICAgICAgIGRhdGFMb2coIkdyYXBoIGJlZm9yZSBQaGFudG9tIGluc2VydGlvbjpcbiIpOwogICAg
ICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CiAgICAgICAgIH0KQEAgLTcyLDcgKzY5LDcgQEAgcHVi
bGljOgogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5h
dHVyYWxPcmRlcigpKQogICAgICAgICAgICAgaGFuZGxlQmxvY2soYmxvY2spOwogICAgICAgICAK
LSAgICAgICAgaWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3NlKSB7
CisgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBhZnRl
ciBQaGFudG9tIGluc2VydGlvbjpcbiIpOwogICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CiAg
ICAgICAgIH0KQEAgLTEwMywyMiArMTAwLDIyIEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVk
IGxhc3RFeGl0aW5nSW5kZXggPSAwOwogICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9
IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CiAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICBpZiAoREZH
UGhhbnRvbUluc2VydGlvblBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyAiLCBub2RlLCAi
XG4iKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAg
ICAgICAgICAgICBjYXNlIE1vdkhpbnQ6Ci0gICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFu
ZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAg
ICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gbm9k
ZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgY2FzZSBab21iaWVIaW50OgotICAgICAgICAgICAgICAgIG1fdmFs
dWVzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IG51bGxwdHI7CisgICAgICAgICAg
ICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBudWxscHRy
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgog
ICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudERlZmluaXRlbHk6CiAgICAgICAgICAgICBjYXNl
IFNldEFyZ3VtZW50TWF5YmU6Ci0gICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2Rl
LT5sb2NhbCgpKSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChu
b2RlLT5vcGVyYW5kKCkpID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0xMzQsMzggKzEzMSw0MiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCiAgICAgICAgICAgICAg
ICAgbm9kZSwKICAgICAgICAgICAgICAgICBbJl0gKEVkZ2UgZWRnZSkgeworICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiVXBkYXRpbmcgZXBvY2ggZm9yICIsIGVkZ2Us
ICIgdG8gIiwgY3VycmVudEVwb2NoKTsKICAgICAgICAgICAgICAgICAgICAgZWRnZS0+c2V0RXBv
Y2goY3VycmVudEVwb2NoKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgbm9kZS0+c2V0RXBvY2goY3VycmVudEVwb2NoKTsKIAotICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGFscmVhZHlLaWxsZWQ7CisgICAgICAgICAgICBPcGVyYW5kIGFscmVhZHlL
aWxsZWQ7CiAKLSAgICAgICAgICAgIGF1dG8gcHJvY2Vzc0tpbGxlZE9wZXJhbmQgPSBbJl0gKFZp
cnR1YWxSZWdpc3RlciByZWcpIHsKLSAgICAgICAgICAgICAgICBpZiAoREZHUGhhbnRvbUluc2Vy
dGlvblBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgICBLaWxsZWQgb3BlcmFuZDogIiwgcmVnLCAiXG4iKTsKKyAgICAgICAgICAgIGF1dG8gcHJv
Y2Vzc0tpbGxlZE9wZXJhbmQgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICIgICAgS2lsbGVkIG9wZXJhbmQ6ICIsIG9wZXJhbmQp
OwogCiAgICAgICAgICAgICAgICAgLy8gQWxyZWFkeSBoYW5kbGVkIGZyb20gU2V0TG9jYWwuCi0g
ICAgICAgICAgICAgICAgaWYgKHJlZyA9PSBhbHJlYWR5S2lsbGVkKQorICAgICAgICAgICAgICAg
IGlmIChvcGVyYW5kID09IGFscmVhZHlLaWxsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZ0xuSWYodmVyYm9zZSwgIiAgICBPcGVyYW5kICIsIG9wZXJhbmQsICIgYWxyZWFkeSBraWxs
ZWQgYnkgc2V0IGxvY2FsIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTm9kZSoga2lsbGVk
Tm9kZSA9IG1fdmFsdWVzLm9wZXJhbmQocmVnKTsKLSAgICAgICAgICAgICAgICBpZiAoIWtpbGxl
ZE5vZGUpCisgICAgICAgICAgICAgICAgTm9kZSoga2lsbGVkTm9kZSA9IG1fdmFsdWVzLm9wZXJh
bmQob3BlcmFuZCk7IAorICAgICAgICAgICAgICAgIGlmICgha2lsbGVkTm9kZSkgeworICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiICAgIE9wZXJhbmQgIiwgb3BlcmFu
ZCwgIiB3YXMgbm90IGRlZmluZWQgaW4gdGhpcyBibG9jay4iKTsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIG1fdmFsdWVz
Lm9wZXJhbmQocmVnKSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFu
ZChvcGVyYW5kKSA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
Ly8gV2Ugb25seSBuZWVkIHRvIGluc2VydCBhIFBoYW50b20gaWYgdGhlIG5vZGUgaGFzbid0IGJl
ZW4gdXNlZCBzaW5jZSB0aGUgbGFzdAogICAgICAgICAgICAgICAgIC8vIGV4aXQsIGFuZCB3YXMg
Ym9ybiBiZWZvcmUgdGhlIGxhc3QgZXhpdC4KLSAgICAgICAgICAgICAgICBpZiAoa2lsbGVkTm9k
ZS0+ZXBvY2goKSA9PSBjdXJyZW50RXBvY2gpCisgICAgICAgICAgICAgICAgaWYgKGtpbGxlZE5v
ZGUtPmVwb2NoKCkgPT0gY3VycmVudEVwb2NoKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2dMbklmKHZlcmJvc2UsICIgICAgT3BlcmFuZCAiLCBvcGVyYW5kLCAiIGhhcyBjdXJyZW50IGVw
b2NoICIsIGN1cnJlbnRFcG9jaCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoREZHUGhhbnRvbUluc2VydGlvblBoYXNl
SW50ZXJuYWw6OnZlcmJvc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygKLSAgICAg
ICAgICAgICAgICAgICAgICAgICIgICAgSW5zZXJ0aW5nIFBoYW50b20gb24gIiwga2lsbGVkTm9k
ZSwgIiBhZnRlciAiLAotICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPmF0KGxhc3RFeGl0
aW5nSW5kZXgpLCAiXG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwKKyAgICAgICAgICAgICAgICAgICAg
IiAgICBJbnNlcnRpbmcgUGhhbnRvbSBvbiAiLCBraWxsZWROb2RlLCAiIGFmdGVyICIsCisgICAg
ICAgICAgICAgICAgICAgIGJsb2NrLT5hdChsYXN0RXhpdGluZ0luZGV4KSk7CisgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBleGFjdCByZWYgY291bnRzLCBzbyBj
cmVhdGluZyBhIG5ldyB1c2UgbWVhbnMgdGhhdCB3ZSBoYXZlIHRvCiAgICAgICAgICAgICAgICAg
Ly8gaW5jcmVtZW50IHRoZSByZWYgY291bnQuCiAgICAgICAgICAgICAgICAga2lsbGVkTm9kZS0+
cG9zdGZpeFJlZigpOwpAQCAtMTc5LDE0ICsxODAsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IH07CiAKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFNldExvY2FsKSB7Ci0gICAgICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+bG9jYWwoKTsKKyAgICAgICAg
ICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBub2RlLT5vcGVyYW5kKCk7CiAgICAgICAgICAgICAg
ICAgaWYgKG5vZGVNYXlFeGl0KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBTZXRM
b2NhbCBkb2VzIGV4aXQsIHdlIG5lZWQgdGhlIE1vdkhpbnQgb2YgaXRzIGxvY2FsCiAgICAgICAg
ICAgICAgICAgICAgIC8vIHRvIGJlIGxpdmUgdW50aWwgdGhlIFNldExvY2FsIGlzIGRvbmUuCi0g
ICAgICAgICAgICAgICAgICAgIHByb2Nlc3NLaWxsZWRPcGVyYW5kKGxvY2FsKTsKLSAgICAgICAg
ICAgICAgICAgICAgYWxyZWFkeUtpbGxlZCA9IGxvY2FsOworICAgICAgICAgICAgICAgICAgICBw
cm9jZXNzS2lsbGVkT3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgYWxyZWFk
eUtpbGxlZCA9IG9wZXJhbmQ7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1f
dmFsdWVzLm9wZXJhbmQobG9jYWwpID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBtX3ZhbHVl
cy5vcGVyYW5kKG9wZXJhbmQpID0gbnVsbHB0cjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgZm9yQWxsS2lsbGVkT3BlcmFuZHMobV9ncmFwaCwgbm9kZSwgYmxvY2stPnRyeUF0KG5vZGVJ
bmRleCArIDEpLCBwcm9jZXNzS2lsbGVkT3BlcmFuZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCmluZGV4IDEyOGM4NDFm
MGFjN2Y5ZGViNjJmN2U2ZmM0NjNhNTI4NzM0Yzc1NTkuLjJhNmEwMmYyYmJkZjAxZmE4OTIwMzBj
OWNkZDFhMzk2Nzk2OTZmYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGNhbGxJZkFwcHJvcHJpYXRlKG1fcmVhZCwgVmlydHVhbFJlZ2lzdGVyKGhlYXAu
cGF5bG9hZCgpLnZhbHVlMzIoKSkpOworICAgICAgICAgICAgY2FsbElmQXBwcm9wcmlhdGUobV9y
ZWFkLCBoZWFwLm9wZXJhbmQoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gV2UgZXhwZWN0IHN0
YWNrIHdyaXRlcyB0byBhbHJlYWR5IGJlIHByZWNpc2VseSBjaGFyYWN0ZXJpemVkIGJ5IERGRzo6
Y2xvYmJlcml6ZSgpLgogICAgICAgICBpZiAoaGVhcC5raW5kKCkgPT0gU3RhY2spIHsKICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKTsKLSAgICAgICAg
ICAgIGNhbGxJZkFwcHJvcHJpYXRlKG1fdW5jb25kaXRpb25hbFdyaXRlLCBWaXJ0dWFsUmVnaXN0
ZXIoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKSk7CisgICAgICAgICAgICBjYWxsSWZBcHByb3By
aWF0ZShtX3VuY29uZGl0aW9uYWxXcml0ZSwgaGVhcC5vcGVyYW5kKCkpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtODcsMTIgKzg3LDEyIEBAIHB1YmxpYzoK
ICAgICAgICAgCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxvY2F0aW9uLmhlYXAoKS5raW5kKCkg
PT0gU3RhY2spOwogICAgICAgICAKLSAgICAgICAgbV9kZWYoVmlydHVhbFJlZ2lzdGVyKGxvY2F0
aW9uLmhlYXAoKS5wYXlsb2FkKCkudmFsdWUzMigpKSwgbm9kZSk7CisgICAgICAgIG1fZGVmKGxv
Y2F0aW9uLmhlYXAoKS5vcGVyYW5kKCksIG5vZGUpOwogICAgIH0KICAgICAKIHByaXZhdGU6CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGNhbGxJZkFwcHJvcHJpYXRl
KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIHZv
aWQgY2FsbElmQXBwcm9wcmlhdGUoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgT3BlcmFuZCBvcGVy
YW5kKQogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpICYmIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihvcGVyYW5kLnRvTG9jYWwoKSkgPj0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFi
bGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpCiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFz
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25Q
aGFzZS5jcHAKaW5kZXggNDQ3ZTI0ZTJhMTE2MzM3YzgzZTNiYWEzMTI3MzU3OTJiOTA0NzI5ZC4u
NWI0Zjk5MjkzNDExNzljMjA0OTk1MmJkYzM4Njk2NTI5ZjBmYzMxMSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNl
LmNwcApAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5k
bGVWYWx1ZXMgPSBtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzKCk7CiAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZv
ckluZGV4KGkpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG11c3RIYW5kbGVW
YWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAgICAgIE9wdGlvbmFsPEpTVmFs
dWU+IHZhbHVlID0gbXVzdEhhbmRsZVZhbHVlc1tpXTsKICAgICAgICAgICAgICAgICBpZiAoIXZh
bHVlKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAK
aW5kZXggZjExY2U3NjRiMzk2ZDlhM2E5ZmY3YThkNWVjNGMxOGFlMTFlNDcwNy4uZjkyYWU5ZGIw
YmQ3ZDM4MWUwZWI1ZmEyNzYwNzZkMWE0MTlkMDM2NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAK
QEAgLTEzNzQsNiArMTM3NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgTW92SGludDoKICAg
ICAgICAgY2FzZSBab21iaWVIaW50OgogICAgICAgICBjYXNlIEV4aXRPSzoKKyAgICAgICAgY2Fz
ZSBWYXJhcmdzTGVuZ3RoOgogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICBjYXNl
IEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIFB1dER5bmFtaWNWYXI6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCmlu
ZGV4IDg3Mjc3NjBjNmVjYmRiMzJlYWU2MDNiYWNiZDEwMDM3NGQ4MTRmZTcuLmM5NzkzMzVhMzAx
ZWY0NmI5OTIzZWRmZjU1NmJlNzNkNTdmNThmMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCkBAIC00MiwxMSArNDIs
OCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIG5hbWVzcGFjZSB7CiAKLW5h
bWVzcGFjZSBERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsIHsKLXN0YXRpYyBjb25zdGV4
cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci19Ci0KIGNsYXNzIFB1dFN0YWNrU2lua2luZ1BoYXNl
IDogcHVibGljIFBoYXNlIHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZh
bHNlOwogcHVibGljOgogICAgIFB1dFN0YWNrU2lua2luZ1BoYXNlKEdyYXBoJiBncmFwaCkKICAg
ICAgICAgOiBQaGFzZShncmFwaCwgIlB1dFN0YWNrIHNpbmtpbmciKQpAQCAtNzMsNyArNzAsNyBA
QCBwdWJsaWM6CiAgICAgICAgIC8vIHRoZSBzdGFjay4gSXQncyBub3QgY2xlYXIgdG8gbWUgaWYg
dGhpcyBpcyBpbXBvcnRhbnQgb3Igbm90LgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1Mjk2CiAgICAgICAgIAotICAgICAgICBpZiAoREZHUHV0
U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICBpZiAodmVyYm9z
ZSkgewogICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYmVmb3JlIFB1dFN0YWNrIHNpbmtpbmc6
XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CkBAIC04OCwxMSAr
ODUsOCBAQCBwdWJsaWM6CiAgICAgICAgIEJsb2NrTWFwPE9wZXJhbmRzPGJvb2w+PiBsaXZlQXRU
YWlsKG1fZ3JhcGgpOwogICAgICAgICAKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgewotICAgICAgICAgICAgbGl2ZUF0SGVh
ZFtibG9ja10gPSBPcGVyYW5kczxib29sPihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNB
dEhlYWQpOwotICAgICAgICAgICAgbGl2ZUF0VGFpbFtibG9ja10gPSBPcGVyYW5kczxib29sPihP
cGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBsaXZlQXRIZWFkW2Jsb2NrXS5maWxsKGZhbHNlKTsKLSAgICAgICAgICAgIGxpdmVB
dFRhaWxbYmxvY2tdLmZpbGwoZmFsc2UpOworICAgICAgICAgICAgbGl2ZUF0SGVhZFtibG9ja10g
PSBPcGVyYW5kczxib29sPihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQsIGZh
bHNlKTsKKyAgICAgICAgICAgIGxpdmVBdFRhaWxbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3Bl
cmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkLCBmYWxzZSk7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIGJvb2wgY2hhbmdlZDsKQEAgLTEwNywzMyArMTAxLDM0IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICBPcGVyYW5kczxib29sPiBsaXZlID0gbGl2ZUF0VGFpbFtibG9j
a107CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6
ZSgpOyBub2RlSW5kZXgtLTspIHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tT
aW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJMaXZlIGF0ICIsIG5vZGUs
ICI6ICIsIGxpdmUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgND4gcmVhZHM7Ci0gICAgICAgICAgICAgICAg
ICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDQ+IHdyaXRlczsKLSAgICAgICAgICAgICAgICAg
ICAgYXV0byBlc2NhcGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewor
ICAgICAgICAgICAgICAgICAgICBWZWN0b3I8T3BlcmFuZCwgND4gcmVhZHM7CisgICAgICAgICAg
ICAgICAgICAgIFZlY3RvcjxPcGVyYW5kLCA0PiB3cml0ZXM7CisgICAgICAgICAgICAgICAgICAg
IGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFj
a1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIs
IG9wZXJhbmQsICIgaXMgbGl2ZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlYWRzLmFwcGVuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgfTsKIAot
ICAgICAgICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBb
Jl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJh
bmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFB1dFN0YWNr
IHx8IG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFy
YXJncyB8fCBub2RlLT5vcCgpID09IEtpbGxTdGFjayk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBhdXRvIG9wID0gbm9kZS0+b3AoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG9wID09IFB1dFN0YWNrIHx8IG9wID09IExvYWRWYXJhcmdzIHx8IG9wID09IEZvcndh
cmRWYXJhcmdzIHx8IG9wID09IEtpbGxTdGFjayk7CiAgICAgICAgICAgICAgICAgICAgICAgICB3
cml0ZXMuYXBwZW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICB9OwogCiAgICAgICAg
ICAgICAgICAgICAgIHByZWNpc2VMb2NhbENsb2JiZXJpemUoCiAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLCBub2RlLCBlc2NhcGVIYW5kbGVyLCB3cml0ZUhhbmRsZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciwgTGF6eU5vZGUpIHsgfSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQsIExhenlOb2RlKSB7IH0pOwogCi0g
ICAgICAgICAgICAgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgOiB3cml0ZXMp
CisgICAgICAgICAgICAgICAgICAgIGZvciAoT3BlcmFuZCBvcGVyYW5kIDogd3JpdGVzKQogICAg
ICAgICAgICAgICAgICAgICAgICAgbGl2ZS5vcGVyYW5kKG9wZXJhbmQpID0gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgOiByZWFkcykKKyAg
ICAgICAgICAgICAgICAgICAgZm9yIChPcGVyYW5kIG9wZXJhbmQgOiByZWFkcykKICAgICAgICAg
ICAgICAgICAgICAgICAgIGxpdmUub3BlcmFuZChvcGVyYW5kKSA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMjM0LDcgKzIyOSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICBPcGVyYW5kczxGbHVzaEZvcm1hdD4gZGVmZXJyZWQgPSBkZWZlcnJlZEF0
SGVhZFtibG9ja107CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZm9yIChOb2Rl
KiBub2RlIDogKmJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1Np
bmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkRlZmVycmVkIGF0ICIsIG5v
ZGUsICI6IiwgZGVmZXJyZWQsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0U3RhY2spIHsKQEAgLTI2MSw3ICsyNTYs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMzk4CiAKICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgaXNDb25mbGljdGluZyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJy
ZWQub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpID09IENvbmZsaWN0aW5n
Rmx1c2g7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2Rl
LT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCkgPT0gQ29uZmxpY3RpbmdGbHVzaDsKICAgICAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRp
b25FbmFibGVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dy
YXBoLCBub2RlLCAhaXNDb25mbGljdGluZyk7CkBAIC0yNzUsMTcgKzI3MCwyMCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmcm9tLgogICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+b3AoKSA9
PSBQdXRTdGFjaykgewotICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWw7CisgICAgICAgICAgICAgICAg
ICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFu
ZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJTZXR0aW5n
IGZsdXNoIGZvcm1hdCBmb3IgIiwgbm9kZSwgIiBhdCBvcGVyYW5kICIsIG9wZXJhbmQpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IG5vZGUtPnN0
YWNrQWNjZXNzRGF0YSgpLT5mb3JtYXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLT5vcCgpID09IEtpbGxTdGFj
aykgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzaW5rIGEg
UHV0U3RhY2sgcGFzdCBhIEtpbGxTdGFjay4KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVy
cmVkLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IENvbmZsaWN0aW5nRmx1c2g7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nTG4oIktpbGxpbmcgc3RhY2sgZm9yICIsIG5vZGUtPnVubGlua2VkT3Bl
cmFuZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+
dW5saW5rZWRPcGVyYW5kKCkpID0gQ29uZmxpY3RpbmdGbHVzaDsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0
U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAg
YXV0byBlc2NhcGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coIkZvciAiLCBub2RlLCAiIGVzY2FwaW5nICIsIG9wZXJhbmQsICJcbiIpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CkBAIC0yOTMsMTYgKzI5MSwxOCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVhZEZsdXNo
OwogICAgICAgICAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gd3Jp
dGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAg
ICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJn
cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09
IFZhcmFyZ3NMZW5ndGggfHwgbm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgp
ID09IEZvcndhcmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklm
KHZlcmJvc2UsICJXcml0aW5nIGRlYWQgZmx1c2ggZm9yICIsIG5vZGUsICIgYXQgb3BlcmFuZCAi
LCBvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3Bl
cmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAogICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwgd3JpdGVI
YW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIsIExh
enlOb2RlKSB7IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5kLCBMYXp5
Tm9kZSkgeyB9KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgaWYgKGRlZmVycmVkID09IGRlZmVycmVkQXRUYWlsW2Jsb2NrXSkKQEAgLTMxMywx
MyArMzEzLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGRlZmVycmVkLnNpemUoKTsgaS0tOykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJu
YWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ29uc2lk
ZXJpbmcgIiwgVmlydHVhbFJlZ2lzdGVyKGRlZmVycmVkLm9wZXJhbmRGb3JJbmRleChpKSksICIg
YXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2ludGVyRHVtcChzdWNjZXNzb3IpLCAi
OiAiLCBkZWZlcnJlZFtpXSwgIiBhbmQgIiwgZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSwg
IiBtZXJnZXMgdG8gIik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyAiLCBkZWZlcnJl
ZC5vcGVyYW5kRm9ySW5kZXgoaSksICIgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBw
b2ludGVyRHVtcChzdWNjZXNzb3IpLCAiOiAiLCBkZWZlcnJlZFtpXSwgIiBhbmQgIiwgZGVmZXJy
ZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSwgIiBtZXJnZXMgdG8gIik7CiAKICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0gPQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1lcmdlKGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0sIGRlZmVycmVk
W2ldKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0sICJcbiIpOwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMzUyLDEwICszNTIsMTAgQEAgcHVibGlj
OgogICAgICAgICAKICAgICAgICAgT3BlcmFuZHM8U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqPiBv
cGVyYW5kVG9WYXJpYWJsZSgKICAgICAgICAgICAgIE9wZXJhbmRzTGlrZSwgbV9ncmFwaC5ibG9j
aygwKS0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4g
aW5kZXhUb09wZXJhbmQ7CisgICAgICAgIFZlY3RvcjxPcGVyYW5kPiBpbmRleFRvT3BlcmFuZDsK
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVh
ZC5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKG1f
Z3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kRm9ySW5kZXgoaSkpOwotICAg
ICAgICAgICAgCisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtX2dyYXBoLmJsb2NrKDAp
LT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpOworCiAgICAgICAgICAgICBTU0FD
YWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBzc2FDYWxjdWxhdG9yLm5ld1ZhcmlhYmxl
KCk7CiAgICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG9wZXJhbmQpID0gdmFy
aWFibGU7CiAgICAgICAgICAgICBBU1NFUlQoaW5kZXhUb09wZXJhbmQuc2l6ZSgpID09IHZhcmlh
YmxlLT5pbmRleCgpKTsKQEAgLTM3MCwxMiArMzcwLDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICBjYXNlIFB1dFN0YWNrOgogICAgICAgICAgICAgICAgICAgICBwdXRTdGFja3NUb1Npbmsu
YWRkKG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBzc2FDYWxjdWxhdG9yLm5ld0RlZigKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+c3Rh
Y2tBY2Nlc3NEYXRhKCktPmxvY2FsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRU
b1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgYmxvY2ssIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6CiAg
ICAgICAgICAgICAgICAgICAgIHNzYUNhbGN1bGF0b3IubmV3RGVmKAotICAgICAgICAgICAgICAg
ICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEo
KS0+bG9jYWwpLAorICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3Bl
cmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICBibG9jaywgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CkBAIC0zODYsNyArMzg2LDcgQEAgcHVibGljOgogICAgICAgICAK
ICAgICAgICAgc3NhQ2FsY3VsYXRvci5jb21wdXRlUGhpcygKICAgICAgICAgICAgIFsmXSAoU1NB
Q2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9jaykgLT4gTm9k
ZSogewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhUb09w
ZXJhbmRbdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFu
ZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBpZiAoIWxpdmVBdEhlYWRbYmxvY2tdLm9wZXJhbmQob3BlcmFuZCkp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMzk3LDcgKzM5Nyw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICBpZiAoIWlzQ29uY3JldGUoZm9ybWF0KSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgICAgICAgICBpZiAoREZH
UHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQWRkaW5nIFBoaSBmb3Ig
Iiwgb3BlcmFuZCwgIiBhdCAiLCBwb2ludGVyRHVtcChibG9jayksICJcbiIpOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBtX2dyYXBoLmFkZE5vZGUo
U3BlY0hlYXBUb3AsIFBoaSwgYmxvY2stPmF0KDApLT5vcmlnaW4ud2l0aEludmFsaWRFeGl0KCkp
OwpAQCAtNDExLDcgKzQxMSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1hcHBpbmcuZmlsbChu
dWxscHRyKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG1hcHBp
bmcuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQobWFwcGluZy5vcGVyYW5kRm9ySW5kZXgoaSkpOworICAgICAgICAgICAgICAgIE9wZXJhbmQg
b3BlcmFuZChtYXBwaW5nLm9wZXJhbmRGb3JJbmRleChpKSk7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gb3BlcmFu
ZFRvVmFyaWFibGUub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICBTU0FDYWxjdWxh
dG9yOjpEZWYqIGRlZiA9IHNzYUNhbGN1bGF0b3IucmVhY2hpbmdEZWZBdEhlYWQoYmxvY2ssIHZh
cmlhYmxlKTsKQEAgLTQyMSwxNSArNDIxLDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBt
YXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSBkZWYtPnZhbHVlKCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVy
bmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiTWFwcGluZyBhdCB0b3Agb2YgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiOiAiLCBt
YXBwaW5nLCAiXG4iKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxh
dG9yOjpEZWYqIHBoaURlZiA6IHNzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKGJsb2NrKSkgewot
ICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRb
cGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9w
ZXJhbmQgPSBpbmRleFRvT3BlcmFuZFtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoMCwgcGhp
RGVmLT52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoREZH
UHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTWFwcGluZyAiLCBv
cGVyYW5kLCAiIHRvICIsIHBoaURlZi0+dmFsdWUoKSwgIlxuIik7CiAgICAgICAgICAgICAgICAg
bWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpID0gcGhpRGVmLT52YWx1ZSgpOwogICAgICAgICAgICAg
fQpAQCAtNDM3LDE1ICs0MzcsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgZGVmZXJyZWQgPSBk
ZWZlcnJlZEF0SGVhZFtibG9ja107CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRl
eCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CiAgICAgICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAg
ICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJEZWZl
cnJlZCBhdCAiLCBub2RlLCAiOiIsIGRlZmVycmVkLCAiXG4iKTsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBj
YXNlIFB1dFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0
YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCA9IGRhdGEtPmxvY2FsOworICAgICAgICAgICAgICAgICAgICBPcGVy
YW5kIG9wZXJhbmQgPSBkYXRhLT5vcGVyYW5kOwogICAgICAgICAgICAgICAgICAgICBkZWZlcnJl
ZC5vcGVyYW5kKG9wZXJhbmQpID0gZGF0YS0+Zm9ybWF0OwotICAgICAgICAgICAgICAgICAgICBp
ZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
ICBNYXBwaW5nICIsIG9wZXJhbmQsICIgdG8gIiwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpLCAiIGF0
ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQob3Bl
cmFuZCkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwpAQCAtNDUzLDE2ICs0NTMsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIFN0YWNr
QWNjZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAg
ICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPmxvY2Fs
KTsKKyAgICAgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gZGVmZXJyZWQub3Bl
cmFuZChkYXRhLT5vcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0NvbmNyZXRl
KGZvcm1hdCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPmxvY2FsKSAhPSBDb25mbGljdGluZ0ZsdXNo
LCBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPmxvY2FsKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmZXJyZWQub3BlcmFuZChkYXRhLT5vcGVyYW5kKSAhPSBDb25mbGljdGluZ0ZsdXNo
LCBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGVyZSBpcyBubyBk
ZWZlcnJhbC4gTm8gZGVmZXJyYWwgbWVhbnMgdGhhdCB0aGUgbW9zdAogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gYXV0aG9yaXRhdGl2ZSB2YWx1ZSBmb3IgdGhpcyBzdGFjayBzbG90IGlzIHdo
YXQgaXMgc3RvcmVkIGluIHRoZSBzdGFjay4gU28sCiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBrZWVwIHRoZSBHZXRTdGFjay4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3Bl
cmFuZChkYXRhLT5sb2NhbCkgPSBub2RlOworICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGlu
Zy5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpID0gbm9kZTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAt
NDcyLDIwICs0NzIsMjAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIHN0
b3JlZCBhbmQgZ2V0IHJpZCBvZiB0aGUgR2V0U3RhY2suCiAgICAgICAgICAgICAgICAgICAgIERG
R19BU1NFUlQobV9ncmFwaCwgbm9kZSwgZm9ybWF0ID09IGRhdGEtPmZvcm1hdCwgZm9ybWF0LCBk
YXRhLT5mb3JtYXQpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
Tm9kZSogaW5jb21pbmcgPSBtYXBwaW5nLm9wZXJhbmQoZGF0YS0+bG9jYWwpOworICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBpbmNvbWluZyA9IG1hcHBpbmcub3BlcmFuZChkYXRhLT5vcGVyYW5k
KTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBpbmNvbWluZy0+ZGVmYXVs
dEVkZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHkoKTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICAgICAgY2FzZSBLaWxsU3RhY2s6IHsKLSAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQu
b3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gQ29uZmxpY3RpbmdGbHVzaDsKKyAgICAg
ICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkg
PSBDb25mbGljdGluZ0ZsdXNoOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZGVmYXVsdDogewot
ICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tT
aW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgYXV0byBl
c2NhcGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
IkZvciAiLCBub2RlLCAiIGVzY2FwaW5nICIsIG9wZXJhbmQsICJcbiIpOwogCiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQpAQCAtNDk5LDcgKzQ5OSw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHb3R0YSBpbnNlcnQgYSBQdXRTdGFjay4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFs
Ojp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiSW5zZXJ0aW5nIGEgUHV0U3RhY2sgZm9yICIs
IG9wZXJhbmQsICIgYXQgIiwgbm9kZSwgIlxuIik7CiAKICAgICAgICAgICAgICAgICAgICAgICAg
IE5vZGUqIGluY29taW5nID0gbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpOwpAQCAtNTEzLDcgKzUx
Myw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQo
b3BlcmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChPcGVy
YW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVh
ZGVyKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gTG9hZFZhcmFyZ3MgYW5kIEZvcndhcmRWYXJhcmdzIGFyZSB1bmNvbmRp
dGlvbmFsIHdyaXRlcyB0byB0aGUgc3RhY2sKQEAgLTUyMSwxMyArNTIxLDEzIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvY2F0aW9ucyB0aGV5IHdyaXRlIHRvLiBUaGlz
IG1ha2VzIHRob3NlIHN0YWNrIGxvY2F0aW9ucyBkZWFkIHJpZ2h0IAogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gYmVmb3JlIGEgTG9hZFZhcmFyZ3MvRm9yd2FyZFZhcmFyZ3MuIFRoaXMgbWVh
bnMgd2Ugc2hvdWxkIG5ldmVyIHNpbmsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFB1dFN0
YWNrcyByaWdodCB0byB0aGlzIHBvaW50LgotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQobm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZvcndh
cmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUt
Pm9wKCkgPT0gVmFyYXJnc0xlbmd0aCB8fCBub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5v
ZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVm
ZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAgICAgICAgICAgICAg
fTsKIAogICAgICAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAogICAgICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwgd3JpdGVIYW5k
bGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIsIExhenlO
b2RlKSB7IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5kLCBMYXp5Tm9k
ZSkgeyB9KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfSB9
CiAgICAgICAgICAgICB9CkBAIC01MzksOCArNTM5LDggQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBzc2FDYWxjdWxhdG9yLnBoaXNG
b3JCbG9jayhzdWNjZXNzb3JCbG9jaykpIHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogcGhp
Tm9kZSA9IHBoaURlZi0+dmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRv
cjo6VmFyaWFibGUqIHZhcmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgpOwotICAgICAgICAgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxl
LT5pbmRleCgpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1Bo
YXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFu
ZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDcmVhdGlu
ZyBVcHNpbG9uIGZvciAiLCBvcGVyYW5kLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIi0+
IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yQmxvY2spLCAiXG4iKTsKICAgICAgICAgICAgICAgICAg
ICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yQmxvY2tdLm9w
ZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwg
bnVsbHB0ciwgaXNDb25jcmV0ZShmb3JtYXQpLCBmb3JtYXQpOwpAQCAtNTg1LDcgKzU4NSw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYg
KERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgaWYg
KHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGFmdGVyIFB1dFN0YWNrIHNp
bmtpbmc6XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAK
aW5kZXggMjNkNGI5NDUzMTA2NjY1MGE4YWQ5MGVlNTFhYTViZGIyZTI5Y2VjNS4uY2E5OTAyNjFj
OTMzNWI5OTJlZDA2Mjk5Zjc1MTM5MWUwYTI3N2Y3MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcApAQCAtMTU4LDcgKzE1OCw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlID0gbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgIEdldFN0YWNrLCBub2RlLT5vcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBPcElu
Zm8obV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyaWFibGUtPmxvY2FsKCksIHZhcmlh
YmxlLT5mbHVzaEZvcm1hdCgpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1f
Z3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHZhcmlhYmxlLT5vcGVyYW5kKCksIHZhcmlhYmxl
LT5mbHVzaEZvcm1hdCgpKSkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJM
RUQpCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50R2V0dGVycy5hZGQoY2hpbGRO
b2RlKTsKICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudE1hcHBpbmcuYWRkKG5vZGUsIGNo
aWxkTm9kZSk7CkBAIC0xNzgsNyArMTc4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxlRm9yU1NBSW5kZXhbc3NhVmFy
aWFibGUtPmluZGV4KCldOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFBy
dW5lIGJ5IGxpdmVuZXNzLiBUaGlzIGRvZXNuJ3QgYnV5IHVzIG11Y2ggb3RoZXIgdGhhbiBjb21w
aWxlIHRpbWVzLgotICAgICAgICAgICAgICAgIE5vZGUqIGhlYWROb2RlID0gYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKTsKKyAgICAgICAgICAgICAgICBO
b2RlKiBoZWFkTm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCh2YXJpYWJsZS0+
b3BlcmFuZCgpKTsKICAgICAgICAgICAgICAgICBpZiAoIWhlYWROb2RlKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMzAwLDcgKzMwMCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+cmVwbGFjZW1lbnQoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5nOiAiLCBWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWVGb3JPcGVyYW5kLm9wZXJhbmRGb3JJbmRleChpKSksICIgLT4gIiwgbm9kZSwgIlxuIik7
CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5nOiAiLCB2YWx1ZUZvck9w
ZXJhbmQub3BlcmFuZEZvckluZGV4KGkpLCAiIC0+ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAg
ICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmRbaV0gPSBub2RlOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KQEAgLTMxMywxMSArMzEzLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92YXJpYWJsZUZvclNTQUluZGV4
W3BoaURlZi0+dmFyaWFibGUoKS0+aW5kZXgoKV07CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KHBoaUluc2VydGlvblBvaW50LCBwaGlEZWYt
PnZhbHVlKCkpOwotICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlh
YmxlLT5sb2NhbCgpKSA9IHBoaURlZi0+dmFsdWUoKTsKKyAgICAgICAgICAgICAgICB2YWx1ZUZv
ck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSA9IHBoaURlZi0+dmFsdWUoKTsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAogICAgICAgICAgICAgICAgICAgICBwaGlJbnNlcnRpb25Qb2ludCwgU3BlY05vbmUsIE1v
dkhpbnQsIGJsb2NrLT5hdCgwKS0+b3JpZ2luLndpdGhJbnZhbGlkRXhpdCgpLAotICAgICAgICAg
ICAgICAgICAgICBPcEluZm8odmFyaWFibGUtPmxvY2FsKCkub2Zmc2V0KCkpLCBwaGlEZWYtPnZh
bHVlKCktPmRlZmF1bHRFZGdlKCkpOworICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyaWFi
bGUtPm9wZXJhbmQoKSksIHBoaURlZi0+dmFsdWUoKS0+ZGVmYXVsdEVkZ2UoKSk7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIGlmIChibG9jay0+YXQoMCktPm9yaWdpbi5leGl0T0spCkBA
IC0zMzcsNyArMzM3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgTW92SGludDog
ewogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgS2lsbFN0YWNrLCBub2RlLT5v
cmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obm9kZS0+dW5saW5rZWRMb2Nh
bCgpLm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obm9kZS0+dW5s
aW5rZWRPcGVyYW5kKCkpKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLmV4aXRP
SyA9IGZhbHNlOyAvLyBLaWxsU3RhY2sgY2xvYmJlcnMgZXhpdC4KICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMzQ5LDE5ICszNDksMTkgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgICAgICBpZiAoISEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVJc0ZsdXNo
ZWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QdXRTdGFjaygK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFk
ZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmxvY2FsKCksIHZh
cmlhYmxlLT5mbHVzaEZvcm1hdCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhcmlhYmxlLT5vcGVyYW5kKCksIHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKSk7CiAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVtb3Zl
KG1fZ3JhcGgpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5nOiAiLCB2
YXJpYWJsZS0+bG9jYWwoKSwgIiAtPiAiLCBjaGlsZCwgIlxuIik7Ci0gICAgICAgICAgICAgICAg
ICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IGNoaWxkOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTWFwcGluZzogIiwgdmFyaWFibGUtPm9w
ZXJhbmQoKSwgIiAtPiAiLCBjaGlsZCwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgIHZhbHVl
Rm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpID0gY2hpbGQ7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRTdGFjazogewogICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQobV9hcmd1bWVudEdldHRlcnMuY29udGFpbnMobm9kZSkpOwotICAgICAgICAgICAg
ICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+
bG9jYWwpID0gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJh
bmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpID0gbm9kZTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAK
QEAgLTM3MSw4ICszNzEsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBub2RlLT5yZW1vdmUobV9ncmFwaCk7CiAgICAgICAgICAgICAgICAgICAg
IGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiUmVwbGFjaW5n
IG5vZGUgIiwgbm9kZSwgIiB3aXRoICIsIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlcGxhY2Vt
ZW50KHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCJSZXBsYWNpbmcgbm9kZSAiLCBub2RlLCAiIHdpdGgg
IiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSksICJcbiIpOwor
ICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRSZXBsYWNlbWVudCh2YWx1ZUZvck9wZXJhbmQu
b3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC0zODUsNyArMzg1
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOiB7CiAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBl
ZFVzZSk7CiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUg
PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCkgPSB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSktPmRl
ZmF1bHRFZGdlKCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gdmFsdWVG
b3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSktPmRlZmF1bHRFZGdlKCk7CiAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlbW92ZShtX2dyYXBoKTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtNDI1LDEyICs0MjUsMTIgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICAvLyBpcyBub3QgZXhpdE9LLgogICAgICAgICAgICAg
ICAgICAgICBVc2VLaW5kIHVzZUtpbmQgPSB1bmNoZWNrZWRVc2VLaW5kRm9yKGZvcm1hdCk7CiAK
LSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkluc2VydGluZyBVcHNp
bG9uIGZvciAiLCB2YXJpYWJsZS0+bG9jYWwoKSwgIiBwcm9wYWdhdGluZyAiLCB2YWx1ZUZvck9w
ZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSksICIgdG8gIiwgcGhpTm9kZSk7CisgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJJbnNlcnRpbmcgVXBzaWxvbiBm
b3IgIiwgdmFyaWFibGUtPm9wZXJhbmQoKSwgIiBwcm9wYWdhdGluZyAiLCB2YWx1ZUZvck9wZXJh
bmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSwgIiB0byAiLCBwaGlOb2RlKTsKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQsIFNw
ZWNOb25lLCBVcHNpbG9uLCB1cHNpbG9uT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICAgICAg
T3BJbmZvKHBoaU5vZGUpLCBFZGdlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
Rm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VLaW5kKSk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTYWZlVG9FeGVjdXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4
ZWN1dGUuaAppbmRleCBmOTFiYTQ4ZjU4ODlkNTQzY2Y5OWJmYWJmNDdkMWMwMzM4YTQ5ZWZlLi4y
MDMzODdiNjY1NjQ4NmMwNjUzOTllMWUxY2RiZTBiOWMzNTVlNmVhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaApAQCAtMzIzLDYgKzMyMyw3IEBAIGJv
b2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3RhdGUsIEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZSwgYm9vbCBpZ25vCiAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2Fs
bGVyOgogICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAg
Y2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICBjYXNl
IExvYWRWYXJhcmdzOgogICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgIGNhc2UgQ29u
c3RydWN0Rm9yd2FyZFZhcmFyZ3M6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IGViZjNiNmJjZWY4YTUyN2M5M2M4ZmQzOGEzZGEyYmY1
MWM0ZTRlYWIuLjA3MDI0Y2RiNDA2NTQ5YjI2YWYyNzdmMzMzODk1NTI1ZTY0YmRlNDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC0x
Nzc4LDcgKzE3NzgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludChOb2Rl
KiBub2RlKQogICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgIG5v
dGljZU9TUkJpcnRoKGNoaWxkKTsKICAgICAKLSAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZh
cmlhYmxlRXZlbnQ6Om1vdkhpbnQoTWluaWZpZWRJRChjaGlsZCksIG5vZGUtPnVubGlua2VkTG9j
YWwoKSkpOworICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6bW92SGlu
dChNaW5pZmllZElEKGNoaWxkKSwgbm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpKTsKIH0KIAogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNrTmV1dGVyZWQoTm9kZSogbm9kZSkKQEAgLTE4
NDMsNyArMTg0Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2so
KQogICAgIG1fc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKG1fYmxvY2spOwogICAgIAogICAgIGZvciAo
c2l6ZV90IGkgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2l6ZSgpOyBpLS07KSB7Ci0gICAg
ICAgIGludCBvcGVyYW5kID0gbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRl
eChpKTsKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbV9ibG9jay0+dmFyaWFibGVzQXRIZWFk
Lm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZFtpXTsKICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgY29udGludWU7
IC8vIE5vIG5lZWQgdG8gcmVjb3JkIGRlYWQgU2V0TG9jYWwncy4KQEAgLTE4NTMsMTEgKzE4NTMs
OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKCkKICAgICAgICAg
aWYgKCFub2RlLT5yZWZDb3VudCgpKQogICAgICAgICAgICAgY29udGludWU7IC8vIE5vIG5lZWQg
dG8gcmVjb3JkIGRlYWQgU2V0TG9jYWwncy4KICAgICAgICAgZm9ybWF0ID0gZGF0YUZvcm1hdEZv
cih2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSk7Ci0gICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRM
b2coCi0gICAgICAgICAgICBWYXJpYWJsZUV2ZW50OjpzZXRMb2NhbCgKLSAgICAgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksCi0gICAgICAgICAgICAgICAgdmFyaWFibGUtPm1h
Y2hpbmVMb2NhbCgpLAotICAgICAgICAgICAgICAgIGZvcm1hdCkpOworICAgICAgICBERkdfQVNT
RVJUKG1faml0LmdyYXBoKCksIG5vZGUsICFvcGVyYW5kLmlzQXJndW1lbnQoKSB8fCBvcGVyYW5k
LnZpcnR1YWxSZWdpc3RlcigpLnRvQXJndW1lbnQoKSA+PSAwKTsKKyAgICAgICAgbV9zdHJlYW0t
PmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpzZXRMb2NhbChvcGVyYW5kLCB2YXJpYWJsZS0+
bWFjaGluZUxvY2FsKCksIGZvcm1hdCkpOwogICAgIH0KIAogICAgIG1fb3JpZ2luID0gTm9kZU9y
aWdpbigpOwpAQCAtMTkzNyw3ICsxOTM0LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tB
cmd1bWVudFR5cGVzKCkKICAgICAgICAgaWYgKGZvcm1hdCA9PSBGbHVzaGVkSlNWYWx1ZSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlciA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKTsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFu
ZCgpLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyLmlz
QXJndW1lbnQoKSk7CiAKICAgICAgICAgSlNWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZSA9IEpTVmFs
dWVTb3VyY2UoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSk7CiAgICAg
ICAgIApAQCAtNzM2MCw1NCArNzM1OCw1NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
U2V0RnVuY3Rpb25OYW1lKE5vZGUqIG5vZGUpCiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyhOb2RlKiBub2RlKQordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhcmFyZ3NMZW5ndGgoTm9kZSogbm9kZSkKIHsKICAgICBM
b2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKIAogICAgIEpT
VmFsdWVSZWdzIGFyZ3VtZW50c1JlZ3M7Ci0gICAgewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBh
cmd1bWVudHModGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBhcmd1bWVudHNSZWdzID0g
YXJndW1lbnRzLmpzVmFsdWVSZWdzKCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAg
fQorICAgIGxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgIEpTVmFsdWVPcGVyYW5k
IGFyZ3VtZW50cyh0aGlzLCBub2RlLT5hcmd1bWVudHNDaGlsZCgpKTsKKyAgICBhcmd1bWVudHNS
ZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdzKCk7CisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAg
ICB1bmxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogCiAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25TaXplT2ZWYXJhcmdzLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgVHJ1c3RlZElt
bVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKSksIGFyZ3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNldCk7CiAgICAgbV9q
aXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAgIGxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OwotICAgIHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgYXJndW1lbnRzUmVncyA9IGFyZ3VtZW50cy5qc1ZhbHVlUmVncygp
OwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgIH0KKyAgICBHUFJUZW1wb3JhcnkgYXJn
Q291bnRJbmNsdWRpbmdUaGlzKHRoaXMpOworICAgIEdQUlJlZyBhcmdDb3VudEluY2x1ZGluZ1Ro
aXNHUFIgPSBhcmdDb3VudEluY2x1ZGluZ1RoaXMuZ3ByKCk7CiAgICAgdW5sb2NrKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKTsKIAotICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0
IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3RoIHByb3BlcnR5IHR3aWNlLiBUaGlzIGlz
IHNhZmUKLSAgICAvLyBmcm9tIHRoZSBzdGFuZHBvaW50IG9mIHRoZSBWTSdzIGludGVncml0eSwg
YnV0IGl0J3Mgc3VidGx5IHdyb25nIGZyb20gYSBzcGVjIGNvbXBsaWFuY2UKLSAgICAvLyBzdGFu
ZHBvaW50LiBUaGUgYmVzdCBzb2x1dGlvbiB3b3VsZCBiZSBvbmUgd2hlcmUgd2UgY2FuIGV4aXQg
KmludG8qIHRoZSBvcF9jYWxsX3ZhcmFyZ3MgcmlnaHQKLSAgICAvLyBwYXN0IHRoZSBzaXppbmcu
Ci0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0OAor
ICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIs
IGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUik7CiAKLSAgICBHUFJSZWcgYXJnQ291bnRJbmNsdWRp
bmdUaGlzR1BSID0KLSAgICAgICAgSklUQ29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIsIGFyZ3VtZW50c1JlZ3MpOworICAgIGludDMyUmVzdWx0KGFyZ0Nv
dW50SW5jbHVkaW5nVGhpc0dQUiwgbm9kZSk7ICAKK30KIAotICAgIG1faml0LmFkZDMyKFRydXN0
ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ0NvdW50SW5jbHVkaW5nVGhp
c0dQUik7Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9hZFZhcmFyZ3MoTm9kZSogbm9k
ZSkKK3sKKyAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEo
KTsKKworICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBhcmd1bWVudENvdW50KHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsgICAgCisgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMs
IG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkpOworICAgIEdQUlJlZyBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyA9IGFyZ3VtZW50Q291bnQuZ3ByKCk7CisgICAgSlNWYWx1ZVJlZ3MgYXJndW1lbnRz
UmVncyA9IGFyZ3VtZW50cy5qc1ZhbHVlUmVncygpOwogCiAgICAgc3BlY3VsYXRpb25DaGVjaygK
LSAgICAgICAgVmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVkZ2UoKSwgbV9qaXQu
YnJhbmNoMzIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsCi0gICAgICAgICAg
ICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwKLSAgICAgICAgICAgIGFyZ0NvdW50SW5jbHVkaW5n
VGhpc0dQUikpOworICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFsdWVTb3VyY2UoKSwgRWRn
ZSgpLCBtX2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVy
bywKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAKICAgICBzcGVj
dWxhdGlvbkNoZWNrKAogICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFsdWVTb3VyY2UoKSwg
RWRnZSgpLCBtX2ppdC5icmFuY2gzMigKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92
ZSwKLSAgICAgICAgICAgIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiwKKyAgICAgICAgICAgIGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLAogICAgICAgICAgICAgVHJ1c3RlZEltbTMyKGRhdGEt
PmxpbWl0KSkpOwogCi0gICAgbV9qaXQuc3RvcmUzMihhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIs
IEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAgIGZsdXNo
UmVnaXN0ZXJzKCk7CisKKyAgICBtX2ppdC5zdG9yZTMyKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKIAotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYykpLCBkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCksIGFyZ3VtZW50c1JlZ3MsIGRhdGEt
Pm9mZnNldCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0p
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MsIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYykpLCBkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCksIGFyZ3VtZW50c1JlZ3Ms
IGRhdGEtPm9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGRhdGEtPm1hbmRhdG9y
eU1pbmltdW0pOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBub1Jlc3VsdChu
b2RlKTsKQEAgLTc0MTcsMTcgKzc0MTYsMTkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUZvcndhcmRWYXJhcmdzKE5vZGUqIG5vZGUpCiB7CiAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRh
ID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWU7Ci0gICAgaWYgKG5vZGUtPmNoaWxkMSgpKQotICAgICAgICBpbmxpbmVDYWxsRnJh
bWUgPSBub2RlLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwor
ICAgIGlmIChub2RlLT5hcmd1bWVudHNDaGlsZCgpKQorICAgICAgICBpbmxpbmVDYWxsRnJhbWUg
PSBub2RlLT5hcmd1bWVudHNDaGlsZCgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
KCk7CiAgICAgZWxzZQogICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgYXJndW1lbnRDb3VudCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSVGVtcG9yYXJ5
IGxlbmd0aCh0aGlzKTsKICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAg
IEdQUlJlZyBsZW5ndGhHUFIgPSBsZW5ndGguZ3ByKCk7CisgICAgR1BSUmVnIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudC5ncHIoKTsKKyAgICBHUFJSZWcgbGVuZ3Ro
R1BSID0gYXJndW1lbnRDb3VudC5ncHIoKTsKICAgICBKU1ZhbHVlUmVncyB0ZW1wUmVncyA9IHRl
bXAucmVncygpOwotICAgICAgICAKLSAgICBlbWl0R2V0TGVuZ3RoKGlubGluZUNhbGxGcmFtZSwg
bGVuZ3RoR1BSLCAvKiBpbmNsdWRlVGhpcyA9ICovIHRydWUpOworICAgIAorICAgIG1faml0Lm1v
dmUoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGxlbmd0aEdQUik7CiAgICAgaWYgKGRhdGEt
Pm9mZnNldCkKICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKGRhdGEtPm9mZnNldCks
IGxlbmd0aEdQUik7CiAgICAgICAgIApAQCAtNzU4Niw3ICs3NTg3LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZURpcmVjdEFyZ3VtZW50cyhOb2RlKiBub2RlKQogICAgIGF1
dG8qIGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJh
bWUoKTsKICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lCiAgICAgICAgICYmICFpbmxpbmVDYWxsRnJh
bWUtPmlzVmFyYXJncygpKSB7Ci0gICAgICAgIGtub3duTGVuZ3RoID0gaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7CisgICAgICAgIGtub3duTGVuZ3RoID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgLSAxKTsKICAgICAgICAgbGVuZ3RoSXNLbm93biA9IHRydWU7CiAgICAgfSBlbHNl
IHsKICAgICAgICAga25vd25MZW5ndGggPSBVSU5UX01BWDsKQEAgLTEyNDkxLDcgKzEyNDkyLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKE5vZGUqIG5vZGUpCiAgICAgaWYgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
ID0gbm9kZS0+YXJndW1lbnRzSW5saW5lQ2FsbEZyYW1lKCkpCiAgICAgICAgIGFyZ3VtZW50Q291
bnRSZWdpc3RlciA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOwogICAg
IGVsc2UKLSAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKKyAgICAgICAgYXJndW1l
bnRDb3VudFJlZ2lzdGVyID0gQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXM7CiAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGFyZ3VtZW50Q291
bnRSZWdpc3RlciksIHJlc3VsdC5ncHIoKSk7CiAgICAgaW50MzJSZXN1bHQocmVzdWx0Lmdwcigp
LCBub2RlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAppbmRleCAyMjIzMDM0NDdlYzQ2ZGNhNmYwOWM0Nzk5ODc5MzliNzYyYzgzMGIyLi40YTJm
MGY3NDk2OTM4YWJjYjNiNjJiYjBmNjQwNDQ1OWI4ZjNiYzFmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCkBAIC0xMzk1LDYgKzEzOTUsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBjb21waWxlU2V0RnVuY3Rpb25OYW1lKE5vZGUqKTsKICAgICB2b2lk
IGNvbXBpbGVOZXdSZWdleHAoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUZvcndhcmRWYXJhcmdz
KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKE5vZGUqKTsKICAgICB2b2lk
IGNvbXBpbGVMb2FkVmFyYXJncyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlQWN0aXZh
dGlvbihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKE5vZGUq
KTsKQEAgLTE2NzMsMTUgKzE2NzQsMTYgQEAgcHVibGljOgogICAgIHZvaWQgY2FnZVR5cGVkQXJy
YXlTdG9yYWdlKEdQUlJlZywgR1BSUmVnKTsKICAgICAKICAgICB2b2lkIHJlY29yZFNldExvY2Fs
KAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnl0ZWNvZGVSZWcsIFZpcnR1YWxSZWdpc3RlciBt
YWNoaW5lUmVnLCBEYXRhRm9ybWF0IGZvcm1hdCkKKyAgICAgICAgT3BlcmFuZCBieXRlY29kZVJl
ZywgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWcsIERhdGFGb3JtYXQgZm9ybWF0KQogICAgIHsK
KyAgICAgICAgQVNTRVJUKCFieXRlY29kZVJlZy5pc0FyZ3VtZW50KCkgfHwgYnl0ZWNvZGVSZWcu
dmlydHVhbFJlZ2lzdGVyKCkudG9Bcmd1bWVudCgpID49IDApOwogICAgICAgICBtX3N0cmVhbS0+
YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKGJ5dGVjb2RlUmVnLCBtYWNoaW5l
UmVnLCBmb3JtYXQpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZWNvcmRTZXRMb2NhbChEYXRh
Rm9ybWF0IGZvcm1hdCkKICAgICB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGUgPSBtX2N1cnJlbnROb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgcmVjb3Jk
U2V0TG9jYWwodmFyaWFibGUtPmxvY2FsKCksIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwgZm9y
bWF0KTsKKyAgICAgICAgcmVjb3JkU2V0TG9jYWwodmFyaWFibGUtPm9wZXJhbmQoKSwgdmFyaWFi
bGUtPm1hY2hpbmVMb2NhbCgpLCBmb3JtYXQpOwogICAgIH0KIAogICAgIEdlbmVyYXRpb25JbmZv
JiBnZW5lcmF0aW9uSW5mb0Zyb21WaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCmluZGV4IDllNjUwYzgzMjA3MWRkNzBmMjk5NGFiYzRhMjhiODUw
YWJkNWZmNDAuLjUxNjI5MTc3OWJlYTQ0YTFhNjE4ZjdhNzU2ZGNhYWYzNjdlYWY1OWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcApAQCAtMTgyOCw3ICsxODI4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwoKSk7
CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPm9w
ZXJhbmQoKSk7CiAKICAgICAgICAgLy8gSWYgdGhlIENGQSBpcyB0cmFja2luZyB0aGlzIHZhcmlh
YmxlIGFuZCBpdCBmb3VuZCB0aGF0IHRoZSB2YXJpYWJsZQogICAgICAgICAvLyBjYW5ub3QgaGF2
ZSBiZWVuIGFzc2lnbmVkLCB0aGVuIGRvbid0IGF0dGVtcHQgdG8gcHJvY2VlZC4KQEAgLTE5MTIs
NyArMTkxMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICB9CiAgICAgICAgIAogICAgIGNhc2UgWm9tYmllSGludDogewotICAgICAgICByZWNvcmRTZXRM
b2NhbChtX2N1cnJlbnROb2RlLT51bmxpbmtlZExvY2FsKCksIFZpcnR1YWxSZWdpc3RlcigpLCBE
YXRhRm9ybWF0RGVhZCk7CisgICAgICAgIHJlY29yZFNldExvY2FsKG1fY3VycmVudE5vZGUtPnVu
bGlua2VkT3BlcmFuZCgpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdERlYWQpOwogICAg
ICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzgzNCw2ICsz
ODM0LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgZW1pdENhbGwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBWYXJhcmdzTGVu
Z3RoOiB7CisgICAgICAgIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKG5vZGUpOworICAgICAgICBicmVh
azsKKyAgICB9CisKICAgICBjYXNlIExvYWRWYXJhcmdzOiB7CiAgICAgICAgIGNvbXBpbGVMb2Fk
VmFyYXJncyhub2RlKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRleCA0NDczOTI1NDA0NzI4ZGZhNjM3
MTU3MTEzOTkxYmZjMWY0MzNiN2M2Li40NmIxMWRhYjIxZjUxMjNkNTA2ZGY1M2NlMzViMjQ3ZTUx
ZmU4YTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAKQEAgLTE5MzYsNyArMTkzNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldExvY2FsOiB7
Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPmxv
Y2FsKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChu
b2RlLT5vcGVyYW5kKCkpOwogCiAgICAgICAgIC8vIElmIHRoZSBDRkEgaXMgdHJhY2tpbmcgdGhp
cyB2YXJpYWJsZSBhbmQgaXQgZm91bmQgdGhhdCB0aGUgdmFyaWFibGUKICAgICAgICAgLy8gY2Fu
bm90IGhhdmUgYmVlbiBhc3NpZ25lZCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIHByb2NlZWQuCkBA
IC0yMDA3LDcgKzIwMDcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgcmVj
b3JkU2V0TG9jYWwobV9jdXJyZW50Tm9kZS0+dW5saW5rZWRMb2NhbCgpLCBWaXJ0dWFsUmVnaXN0
ZXIoKSwgRGF0YUZvcm1hdERlYWQpOworICAgICAgICByZWNvcmRTZXRMb2NhbChtX2N1cnJlbnRO
b2RlLT51bmxpbmtlZE9wZXJhbmQoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXREZWFk
KTsKICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQ0
NzQsNiArNDQ3NCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgICAgIGVtaXRDYWxsKG5vZGUpOwogICAgICAgICBicmVhazsKIAorICAgIGNhc2UgVmFy
YXJnc0xlbmd0aDogeworICAgICAgICBjb21waWxlVmFyYXJnc0xlbmd0aChub2RlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJnczogewogICAgICAgICBjb21w
aWxlTG9hZFZhcmFyZ3Mobm9kZSk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAKaW5kZXggMTY4YjNkZjQzMzQ2
NTdlNmFhZGI2NGJiZjYzM2VlYzVhZmExYjA0NC4uNmUwOTQ5YjBmYThjMDg3MTE3NTNiYjFjNmE3
ZjJhMzI2ZDAyYTE5MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
dGFja0xheW91dFBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
YWNrTGF5b3V0UGhhc2UuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8g
dHJlYXQgYSB2YXJpYWJsZSBhcyBiZWluZyAidXNlZCIgaWYgdGhlcmUgZXhpc3RzIGFuIGFjY2Vz
cyB0byBpdCAoU2V0TG9jYWwsIEdldExvY2FsLAogICAgICAgICAvLyBGbHVzaCwgUGhhbnRvbUxv
Y2FsKS4KICAgICAgICAgCi0gICAgICAgIEJpdFZlY3RvciB1c2VkTG9jYWxzOworICAgICAgICBP
cGVyYW5kczxib29sPiB1c2VkT3BlcmFuZHMoMCwgZ3JhcGgoKS5tX2xvY2FsVmFycywgZ3JhcGgo
KS5tX3RtcHMsIGZhbHNlKTsKICAgICAgICAgCiAgICAgICAgIC8vIENvbGxlY3QgdGhvc2UgdmFy
aWFibGVzIHRoYXQgYXJlIHVzZWQgZnJvbSBJUi4KICAgICAgICAgYm9vbCBoYXNOb2Rlc1RoYXRO
ZWVkRml4dXAgPSBmYWxzZTsKQEAgLTY3LDIzICs2NywyMiBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgY2FzZSBGbHVzaDoKICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDogewog
ICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+
bG9jYWwoKS5pc0FyZ3VtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+
b3BlcmFuZCgpLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldCh2YXJpYWJsZS0+bG9jYWwoKS50b0xv
Y2FsKCkpOworICAgICAgICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZCh2YXJp
YWJsZS0+b3BlcmFuZCgpLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNl
IExvYWRWYXJhcmdzOgogICAgICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAg
ICAgICAgICAgICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFy
Z3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLT5jb3VudC5pc0xvY2FsKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChkYXRhLT5jb3VudC50b0xv
Y2FsKCkpOworICAgICAgICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZChkYXRh
LT5jb3VudCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLT5zdGFydC5pc0xv
Y2FsKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgcGFydCByZWFsbHkgcmVs
aWVzIG9uIHRoZSBjb250aWd1aXR5IG9mIHN0YWNrIGxheW91dAogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gYXNzaWdubWVudHMuCiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoVmly
dHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgZGF0YS0+bGltaXQgLSAxKS5pc0xv
Y2FsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+
bGltaXQ7IGktLTspIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0
KFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpLnRvTG9jYWwoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoVmlydHVh
bFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSksIHRydWUpOwogICAgICAgICAgICAg
ICAgICAgICB9IC8vIHRoZSBlbHNlIGNhc2Ugc2hvdWxkbid0IGhhcHBlbi4KICAgICAgICAgICAg
ICAgICAgICAgaGFzTm9kZXNUaGF0TmVlZEZpeHVwID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CkBAIC05Miw5ICs5MSw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNl
IFB1dFN0YWNrOgogICAgICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgICAg
ICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBzdGFjayA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2stPmxvY2FsLmlzQXJndW1lbnQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLT5vcGVyYW5kLmlzQXJndW1lbnQoKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxz
LnNldChzdGFjay0+bG9jYWwudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdXNlZE9w
ZXJhbmRzLnNldE9wZXJhbmQoc3RhY2stPm9wZXJhbmQsIHRydWUpOwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAt
MTA4LDIxICsxMDcsMjEgQEAgcHVibGljOgogICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBp
bmxpbmVDYWxsRnJhbWUgPSAqaXRlcjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlu
bGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLSAgICAgICAgICAgICAgICB1c2VkTG9jYWxz
LnNldChWaXJ0dWFsUmVnaXN0ZXIoCi0gICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIoCisgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCksIHRy
dWUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGFyZ3VtZW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNXaXRoRml4dXAuc2l6ZSgp
OyBhcmd1bWVudC0tOykgewotICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KFZpcnR1YWxS
ZWdpc3RlcigKKyAgICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIoCiAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGFyZ3VtZW50KS5vZmZzZXQoKSArCi0gICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAgIGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQpLCB0cnVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBhbGxvY2F0aW9uKHVzZWRMb2NhbHMu
c2l6ZSgpKTsKKyAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBhbGxvY2F0aW9uKHVzZWRPcGVyYW5k
cy5zaXplKCkpOwogICAgICAgICBtX2dyYXBoLm1fbmV4dE1hY2hpbmVMb2NhbCA9IGNvZGVCbG9j
aygpLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRMb2NhbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IGlmICghdXNlZExvY2Fscy5nZXQoaSkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHVzZWRPcGVyYW5kcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKCF1c2VkT3Bl
cmFuZHMuZ2V0Rm9yT3BlcmFuZEluZGV4KGkpKSB7CiAgICAgICAgICAgICAgICAgYWxsb2NhdGlv
bltpXSA9IFVJTlRfTUFYOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
fQpAQCAtMTM1LDQ5ICsxMzQsNTAgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCF2YXJpYWJs
ZS0+aXNSb290KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkpIHsKLSAgICAgICAg
ICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkgPSB2YXJpYWJsZS0+bG9jYWwoKTsKKyAg
ICAgICAgICAgIGlmICh2YXJpYWJsZS0+b3BlcmFuZCgpLmlzQXJndW1lbnQoKSkgeworICAgICAg
ICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IHZhcmlhYmxlLT5vcGVyYW5kKCku
dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHNpemVfdCBsb2NhbCA9IHZhcmlhYmxlLT5s
b2NhbCgpLnRvTG9jYWwoKTsKLSAgICAgICAgICAgIGlmIChsb2NhbCA+PSBhbGxvY2F0aW9uLnNp
emUoKSkKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IHZhcmlhYmxlLT5vcGVyYW5kKCk7
CisgICAgICAgICAgICBzaXplX3QgaW5kZXggPSB1c2VkT3BlcmFuZHMub3BlcmFuZEluZGV4KG9w
ZXJhbmQpOworICAgICAgICAgICAgaWYgKGluZGV4ID49IGFsbG9jYXRpb24uc2l6ZSgpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoYWxs
b2NhdGlvbltsb2NhbF0gPT0gVUlOVF9NQVgpCisgICAgICAgICAgICBpZiAoYWxsb2NhdGlvbltp
bmRleF0gPT0gVUlOVF9NQVgpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IGFzc2lnbihhbGxvY2F0
aW9uLCB2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxv
Y2FsKCkgPSBhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9uLCB2YXJpYWJsZS0+b3BlcmFu
ZCgpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgZm9yIChTdGFja0FjY2Vzc0RhdGEq
IGRhdGEgOiBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhKSB7Ci0gICAgICAgICAgICBpZiAoIWRh
dGEtPmxvY2FsLmlzTG9jYWwoKSkgewotICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVMb2Nh
bCA9IGRhdGEtPmxvY2FsOworICAgICAgICAgICAgaWYgKGRhdGEtPm9wZXJhbmQuaXNBcmd1bWVu
dCgpKSB7CisgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZUxvY2FsID0gZGF0YS0+b3BlcmFu
ZC52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4o
ZGF0YS0+bG9jYWwudG9Mb2NhbCgpKSA+PSBhbGxvY2F0aW9uLnNpemUoKSkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uW2RhdGEtPmxvY2FsLnRv
TG9jYWwoKV0gPT0gVUlOVF9NQVgpCi0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBpZiAoZGF0YS0+b3BlcmFuZC5pc0xvY2FsKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
c3RhdGljX2Nhc3Q8c2l6ZV90PihkYXRhLT5vcGVyYW5kLnRvTG9jYWwoKSkgPj0gYWxsb2NhdGlv
bi5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IGlmIChhbGxvY2F0aW9uW2RhdGEtPm9wZXJhbmQudG9Mb2NhbCgpXSA9PSBVSU5UX01BWCkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVMb2NhbCA9IGFzc2lnbihhbGxvY2F0aW9uLCBkYXRh
LT5sb2NhbCk7CisgICAgICAgICAgICBkYXRhLT5tYWNoaW5lTG9jYWwgPSBhc3NpZ24odXNlZE9w
ZXJhbmRzLCBhbGxvY2F0aW9uLCBkYXRhLT5vcGVyYW5kKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgaWYgKCFtX2dyYXBoLm5lZWRzU2NvcGVSZWdpc3RlcigpKQogICAgICAgICAgICAg
Y29kZUJsb2NrKCktPnNldFNjb3BlUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBjb2RlQmxvY2soKS0+c2V0U2NvcGVSZWdpc3Rlcihhc3NpZ24o
YWxsb2NhdGlvbiwgY29kZUJsb2NrKCktPnNjb3BlUmVnaXN0ZXIoKSkpOworICAgICAgICAgICAg
Y29kZUJsb2NrKCktPnNldFNjb3BlUmVnaXN0ZXIoYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2Nh
dGlvbiwgY29kZUJsb2NrKCktPnNjb3BlUmVnaXN0ZXIoKSkpOwogCiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG1fZ3JhcGgubV9pbmxpbmVWYXJpYWJsZURhdGEuc2l6ZSgpOyBpLS07KSB7CiAg
ICAgICAgICAgICBJbmxpbmVWYXJpYWJsZURhdGEgZGF0YSA9IG1fZ3JhcGgubV9pbmxpbmVWYXJp
YWJsZURhdGFbaV07CiAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSA9IGRhdGEuaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
aW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewotICAgICAgICAgICAgICAgIGlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyID0gYXNzaWduKAotICAgICAgICAgICAgICAg
ICAgICBhbGxvY2F0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpKQorICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudFJlZ2lzdGVyID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgVmlydHVhbFJl
Z2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFy
Z3VtZW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNXaXRoRml4dXAuc2l6ZSgpOyBhcmd1
bWVudC0tOykgewogICAgICAgICAgICAgICAgIEFyZ3VtZW50UG9zaXRpb24mIHBvc2l0aW9uID0g
bV9ncmFwaC5tX2FyZ3VtZW50UG9zaXRpb25zWwogICAgICAgICAgICAgICAgICAgICBkYXRhLmFy
Z3VtZW50UG9zaXRpb25TdGFydCArIGFyZ3VtZW50XTsKQEAgLTIxNSw4ICsyMTUsOCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIExv
YWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZUNvdW50ID0gYXNzaWduKGFsbG9jYXRpb24sIGRh
dGEtPmNvdW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVTdGFydCA9
IGFzc2lnbihhbGxvY2F0aW9uLCBkYXRhLT5zdGFydCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhLT5tYWNoaW5lQ291bnQgPSBhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9uLCBk
YXRhLT5jb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lU3RhcnQg
PSBhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9uLCBkYXRhLT5zdGFydCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgCkBAIC0yMzEsMTcgKzIzMSwxNiBAQCBwdWJsaWM6CiAgICAgfQogCiBw
cml2YXRlOgotICAgIFZpcnR1YWxSZWdpc3RlciBhc3NpZ24oY29uc3QgVmVjdG9yPHVuc2lnbmVk
PiYgYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHNyYykKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
YXNzaWduKGNvbnN0IE9wZXJhbmRzPGJvb2w+JiB1c2VkT3BlcmFuZHMsIGNvbnN0IFZlY3Rvcjx1
bnNpZ25lZD4mIGFsbG9jYXRpb24sIE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHQgPSBzcmM7Ci0gICAgICAgIGlmIChyZXN1bHQuaXNMb2NhbCgp
KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBteUFsbG9jYXRpb24gPSBhbGxvY2F0aW9uW3Jlc3Vs
dC50b0xvY2FsKCldOwotICAgICAgICAgICAgaWYgKG15QWxsb2NhdGlvbiA9PSBVSU5UX01BWCkK
LSAgICAgICAgICAgICAgICByZXN1bHQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCht
eUFsbG9jYXRpb24pOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBvcGVyYW5kLnZp
cnR1YWxSZWdpc3RlcigpOworCisgICAgICAgIHNpemVfdCBvcGVyYW5kSW5kZXggPSB1c2VkT3Bl
cmFuZHMub3BlcmFuZEluZGV4KG9wZXJhbmQpOworICAgICAgICB1bnNpZ25lZCBteUFsbG9jYXRp
b24gPSBhbGxvY2F0aW9uW29wZXJhbmRJbmRleF07CisgICAgICAgIGlmIChteUFsbG9jYXRpb24g
PT0gVUlOVF9NQVgpCisgICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAg
ICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChteUFsbG9jYXRpb24pOwogICAgIH0K
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhS
ZWR1Y3Rpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3Ro
UmVkdWN0aW9uUGhhc2UuY3BwCmluZGV4IDE4ZTY3ZTc2MjU3MWNkYmE1ZWViZjFlMGZjNGY5MTg3
YmYzMjVkNTcuLmIzZTQxZDhkN2UxZGUzNmUyNzE2MTNhNDYyNTU3NmM5ZjY2ZTc2MmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFz
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlv
blBoYXNlLmNwcApAQCAtMjg1LDE3ICsyODUsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICAgICAgTm9kZSogc2V0TG9jYWwgPSBudWxscHRyOwotICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbV9ub2RlLT5sb2NhbCgpOworICAgICAg
ICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbV9ub2RlLT5vcGVyYW5kKCk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fbm9kZUluZGV4OyBpLS07KSB7CiAgICAg
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPmF0KGkpOwogCi0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgJiYgbm9kZS0+bG9jYWwoKSA9PSBsb2NhbCkg
eworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFNldExvY2FsICYmIG5vZGUtPm9w
ZXJhbmQoKSA9PSBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgIHNldExvY2FsID0gbm9k
ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICAgICAgaWYgKGFjY2Vzc2VzT3ZlcmxhcChtX2dyYXBoLCBub2RlLCBBYnN0cmFjdEhl
YXAoU3RhY2ssIGxvY2FsKSkpCisgICAgICAgICAgICAgICAgaWYgKGFjY2Vzc2VzT3ZlcmxhcCht
X2dyYXBoLCBub2RlLCBBYnN0cmFjdEhlYXAoU3RhY2ssIG9wZXJhbmQpKSkKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVGh1bmtzLmNwcAppbmRleCA2YWNhZmJmM2JmNTM1Yzk2OTZiZTY0OGEyMDcwYjZlZTZmNGY4
YmY5Li5mMWIxZmY2NGRkYTUzY2Y0NTk2NzA0ZWViODMxNWYxNmJmYmU5MDllIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCkBAIC00MCwxNCArNDAsNiBAQAogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gb3NyRXhpdFRodW5rR2VuZXJhdG9yKFZNJiB2bSkKLXsKLSAgICBDQ2FsbEhl
bHBlcnMgaml0KG51bGxwdHIpOwotICAgIGppdC5wcm9iZShPU1JFeGl0OjpleGVjdXRlT1NSRXhp
dCwgJnZtKTsKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lE
KTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcs
ICJERkcgT1NSIGV4aXQgdGh1bmsiKTsKLX0KLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAg
ICBDQ2FsbEhlbHBlcnMgaml0KG51bGxwdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdUaHVua3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1
bmtzLmgKaW5kZXggMDVhNTBhNTRiMjVkNTFkYmNiMTg1OGZlN2FhZGNhNDg2ODIwNWQ5ZS4uOGI1
YzNmMDFhNDg1MjBiN2FhYWFhZWJhZmY5M2MzYjI2Y2NkOTg0ZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1RodW5rcy5oCkBAIC0zNSw3ICszNSw2IEBAIGNsYXNzIFZNOwogCiBuYW1lc3Bh
Y2UgREZHIHsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0
VGh1bmtHZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFbnRyeVRodW5rR2VuZXJhdG9yKFZNJik7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQ
aGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5n
UGhhc2UuY3BwCmluZGV4IDBlMjVkN2QxNGJlNWZkNGFhNDA5MWZkOTgxM2YxNGQwZGNmODY2ZWQu
Ljc1MjhlNWU0MDJmNmE0MTgyOGMzZWNiYjljYmFkOGFmNTU2ZDllNjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNw
cApAQCAtMTQ2LDcgKzE0Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0
ZXItPnZhbHVlLm1fc3RydWN0dXJlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNo
ZWNrT3AgPSBDaGVja1N0cnVjdHVyZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTcGVj
Q2VsbENoZWNrICYgU3BlY0VtcHR5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmxvY2FsKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5v
cmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKChsb2NhbCAtIChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0IDogMCkpID09IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDApKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHx0aGlzfCBjYW4gYmUgdGhlIFREWiB2YWx1
ZS4gVGhlIGNhbGwgZW50cnlwb2ludCB3b24ndCBoYXZlIHx0aGlzfCBhcyBURFosCkBAIC0xNjgs
OCArMTY4LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+
bG9jYWwoKSkgPT0gbm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBnZXRMb2NhbDsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+
b3BlcmFuZCgpKSA9PSBub2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpID0gZ2V0TG9jYWw7CiAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnN1YnN0aXR1dGVH
ZXRMb2NhbCgqYmxvY2ssIGluZGV4SW5CbG9jaywgdmFyaWFibGUsIGdldExvY2FsKTsKICAgICAg
ICAgICAgICAgICAgICAgCkBAIC00NDgsNyArNDQ4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNvbnN0IE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFs
dWU+PiYgbXVzdEhhbmRsZVZhbHVlcyA9IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMo
KTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbXVzdEhhbmRsZVZhbHVlcy5z
aXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhhbmRsZVZh
bHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5k
ID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChvcGVyYW5kKTsKICAg
ICAgICAgICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAppbmRleCA3ZWE5MzQ4OWRl
YWMxNzRhZTcyZWY1NjhmM2FjZTY1NWFhZGZlOTQ3Li4zNzE1ZjcyNWI1NWIyNmNmN2M2NDgyNWEx
NGVmYzAwNGQ5MGUzZTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhbGlkYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRl
LmNwcApAQCAtNDgzLDcgKzQ4Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGJsb2NrLT5waGlzW2ldOwogICAgICAgICAgICAgICAgIEFTU0VSVChwaGlzSW5UaGlz
QmxvY2suY29udGFpbnMobm9kZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwg
bm9kZS0+b3AoKSA9PSBQaGkpOwotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2Nh
bCA9IG5vZGUtPmxvY2FsKCk7CisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9k
ZS0+b3BlcmFuZCgpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBt
X2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyArK2opIHsKICAgICAgICAgICAgICAgICAgICAgLy8g
UGhpIGNoaWxkcmVuIGluIExvYWRTdG9yZSBmb3JtIGFyZSBpbnZhbGlkLgogICAgICAgICAgICAg
ICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gTG9hZFN0b3JlICYmIGJsb2NrLT5pc1BoaUlu
ZGV4KGkpKQpAQCAtNTE5LDEwICs1MTksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyAr
K2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZXZCbG9jayA9IGJs
b2NrLT5wcmVkZWNlc3NvcnNba107CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgo
YmxvY2stPnByZWRlY2Vzc29yc1trXSksIHByZXZCbG9jayk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBwcmV2Tm9kZSA9IHByZXZCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQo
bG9jYWwpOworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogcHJldk5vZGUgPSBwcmV2Qmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gSWYgd2UgaGF2ZSBhIFBoaSB0aGF0IGlzIG5vdCByZWZlcnJpbmcgdG8gKnRoaXMq
IGJsb2NrIHRoZW4gYWxsIHByZWRlY2Vzc29ycwogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
bXVzdCBoYXZlIHRoYXQgbG9jYWwgYXZhaWxhYmxlLgotICAgICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKGxvY2FsLCBibG9jaywgYmxvY2stPnByZWRlY2Vzc29yc1trXSksIHByZXZOb2Rl
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChvcGVyYW5kLCBibG9jaywgYmxv
Y2stPnByZWRlY2Vzc29yc1trXSksIHByZXZOb2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IHN3aXRjaCAocHJldk5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
R2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOgpAQCAtNTMzLDEx
ICs1MzMsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKGxvY2FsLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG9wZXJhbmQsIGJsb2NrLT5wcmVkZWNlc3Nv
cnNba10sIHByZXZOb2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cmV2Tm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAobG9jYWwsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAob3BlcmFuZCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJl
dk5vZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLT5vcCgpID09IFNl
dExvY2FsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0g
U2V0QXJndW1lbnREZWZpbml0ZWx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJl
dk5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnRNYXliZQpAQCAtNTQ3LDE5ICs1NDcsMTUgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgaXQg
Y2Fubm90IHJlZmVyIGludG8gdGhpcyBibG9jay4KLSAgICAgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKChsb2NhbCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLCAhcHJldkJs
b2NrLT5pc0luQmxvY2soZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKChvcGVyYW5kLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksICFwcmV2
QmxvY2stPmlzSW5CbG9jayhlZGdlLm5vZGUoKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwg
ZWRnZSksIGZvdW5kKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIE9wZXJhbmRzPHNpemVfdD4gZ2V0TG9jYWxQb3NpdGlvbnMoCi0g
ICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygp
LAotICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMo
KSk7Ci0gICAgICAgICAgICBPcGVyYW5kczxzaXplX3Q+IHNldExvY2FsUG9zaXRpb25zKAotICAg
ICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwK
LSAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkp
OworICAgICAgICAgICAgT3BlcmFuZHM8c2l6ZV90PiBnZXRMb2NhbFBvc2l0aW9ucyhPcGVyYW5k
c0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOworICAgICAgICAgICAgT3BlcmFuZHM8c2l6
ZV90PiBzZXRMb2NhbFBvc2l0aW9ucyhPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhl
YWQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJs
b2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CiAgICAgICAg
ICAgICAgICAgVkFMSURBVEUoKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpLCBibG9jayks
ICFibG9jay0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpIHx8IGJsb2NrLT52YXJpYWJsZXNB
dEhlYWQuYXJndW1lbnQoaSktPmFjY2Vzc2VzU3RhY2sobV9ncmFwaCkpOwpAQCAtNjY4LDI0ICs2
NjQsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX215UmVmQ291bnRz
LmdldChub2RlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBibG9jayksIGdldExvY2FsUG9zaXRpb25zLm9w
ZXJhbmQobm9kZS0+bG9jYWwoKSkgPT0gbm90U2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFZBTElEQVRFKChub2RlLCBibG9jayksIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+
b3BlcmFuZCgpKSA9PSBub3RTZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo
KG5vZGUsIGJsb2NrKSwgISFub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBWQUxJREFURSgobm9kZSwgYmxvY2spLCBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBTZXRBcmd1
bWVudERlZmluaXRlbHkgfHwgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gUGhpKTsKICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVy
YW5kKG5vZGUtPmxvY2FsKCkpID0gaTsKKyAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3Np
dGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0gaTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgICAgICAg
ICAgLy8gT25seSByZWNvcmQgdGhlIGZpcnN0IFNldExvY2FsLiBUaGVyZSBtYXkgYmUgbXVsdGlw
bGUgU2V0TG9jYWxzCiAgICAgICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ugb2YgZmx1c2hpbmcu
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUt
PmxvY2FsKCkpICE9IG5vdFNldCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNldExvY2FsUG9z
aXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSAhPSBub3RTZXQpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMu
b3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGk7CisgICAgICAgICAgICAgICAgICAgIHNldExvY2Fs
UG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IGk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnREZWZpbml0ZWx5Ogog
ICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGFjdHMgbGlrZSBhIHJlc2V0LiBJdCdzIG9rIHRv
IGhhdmUgYSBzZWNvbmQgR2V0TG9jYWwgZm9yIGEgbG9jYWwgaW4gdGhlIHNhbWUKICAgICAgICAg
ICAgICAgICAgICAgLy8gYmxvY2sgaWYgd2UgaGFkIGEgU2V0QXJndW1lbnREZWZpbml0ZWx5IGZv
ciB0aGF0IGxvY2FsLgotICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVy
YW5kKG5vZGUtPmxvY2FsKCkpID0gbm90U2V0OwotICAgICAgICAgICAgICAgICAgICBzZXRMb2Nh
bFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm90U2V0OworICAgICAgICAgICAg
ICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBub3RT
ZXQ7CisgICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+
b3BlcmFuZCgpKSA9IG5vdFNldDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgY2FzZSBTZXRBcmd1bWVudE1heWJlOgogICAgICAgICAgICAgICAgICAgICBicmVh
azsKQEAgLTk2OCwyNiArOTY0LDI2IEBAIHByaXZhdGU6CiAgICAgICAgIGRhdGFMb2cobm9kZSwg
IiAtPiAiLCBlZGdlKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29u
dGV4dChWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHZvaWQg
cmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoT3BlcmFuZCBvcGVyYW5kLCBCYXNpY0Jsb2NrKiBibG9j
aykKICAgICB7CiAgICAgICAgIGlmICghYmxvY2spIHsKLSAgICAgICAgICAgIGRhdGFMb2cobG9j
YWwsICIgaW4gbnVsbCBCbG9jayAiKTsKKyAgICAgICAgICAgIGRhdGFMb2cob3BlcmFuZCwgIiBp
biBudWxsIEJsb2NrICIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAg
ICAgZGF0YUxvZyhsb2NhbCwgIiBpbiBCbG9jayAiLCAqYmxvY2spOworICAgICAgICBkYXRhTG9n
KG9wZXJhbmQsICIgaW4gQmxvY2sgIiwgKmJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBy
ZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBC
YXNpY0Jsb2NrKiBzb3VyY2VCbG9jaywgQmFzaWNCbG9jayogZGVzdGluYXRpb25CbG9jaykKKyAg
ICAgICAgT3BlcmFuZCBvcGVyYW5kLCBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9jaywgQmFzaWNCbG9j
ayogZGVzdGluYXRpb25CbG9jaykKICAgICB7Ci0gICAgICAgIGRhdGFMb2cobG9jYWwsICIgaW4g
QmxvY2sgIiwgKnNvdXJjZUJsb2NrLCAiIC0+ICIsICpkZXN0aW5hdGlvbkJsb2NrKTsKKyAgICAg
ICAgZGF0YUxvZyhvcGVyYW5kLCAiIGluIEJsb2NrICIsICpzb3VyY2VCbG9jaywgIiAtPiAiLCAq
ZGVzdGluYXRpb25CbG9jayk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlv
bkNvbnRleHQoCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgQmFzaWNCbG9jayogc291
cmNlQmxvY2ssIE5vZGUqIHByZXZOb2RlKQorICAgICAgICBPcGVyYW5kIG9wZXJhbmQsIEJhc2lj
QmxvY2sqIHNvdXJjZUJsb2NrLCBOb2RlKiBwcmV2Tm9kZSkKICAgICB7Ci0gICAgICAgIGRhdGFM
b2cocHJldk5vZGUsICIgZm9yICIsIGxvY2FsLCAiIGluIEJsb2NrICIsICpzb3VyY2VCbG9jayk7
CisgICAgICAgIGRhdGFMb2cocHJldk5vZGUsICIgZm9yICIsIG9wZXJhbmQsICIgaW4gQmxvY2sg
IiwgKnNvdXJjZUJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9u
Q29udGV4dChOb2RlKiBub2RlLCBCYXNpY0Jsb2NrKiBibG9jaykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCmluZGV4
IDAzZTg5MjBmMmY2ZjNlZThiYTE0ODZiMGJkNzc2NTYxZjEwZTU5NGMuLjc0ZWE2MThlOTAxMTI5
YTU3ZTJjODNiYjg5MmE3NWI3YjgwNjMzYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcApAQCAtNDEsMTEgKzQx
LDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBuYW1lc3BhY2UgewogCi1u
YW1lc3BhY2UgREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsIHsKLXN0YXRpYyBjb25z
dGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci19CiAKIGNsYXNzIFZhcmFyZ3NGb3J3YXJkaW5n
UGhhc2UgOiBwdWJsaWMgUGhhc2UgeworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3Nl
ID0gZmFsc2U7CiBwdWJsaWM6CiAgICAgVmFyYXJnc0ZvcndhcmRpbmdQaGFzZShHcmFwaCYgZ3Jh
cGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJ2YXJhcmdzIGZvcndhcmRpbmciKQpAQCAtNTYs
NyArNTQsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51
bGxwdHIsIG1fZ3JhcGgubV9mb3JtICE9IFNTQSk7CiAgICAgICAgIAotICAgICAgICBpZiAoREZH
VmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgIGlmICh2
ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUgdmFyYXJncyBmb3J3
YXJkaW5nOlxuIik7CiAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQpAQCAt
ODgsNyArODYsNyBAQCBwcml2YXRlOgogICAgICAgICAvLyBXZSBleHBlY3QgY2FsbHMgaW50byB0
aGlzIGZ1bmN0aW9uIHRvIGJlIHJhcmUuIFNvLCB0aGlzIGlzIHdyaXR0ZW4gaW4gYSBzaW1wbGUg
TyhuKSBtYW5uZXIuCiAgICAgICAgIAogICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBibG9jay0+
YXQoY2FuZGlkYXRlTm9kZUluZGV4KTsKLSAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5n
UGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAg
ICBkYXRhTG9nKCJIYW5kbGluZyBjYW5kaWRhdGUgIiwgY2FuZGlkYXRlLCAiXG4iKTsKICAgICAg
ICAgCiAgICAgICAgIC8vIFdlIGVsaW1pbmF0ZSBHZXRCdXR0ZXJmbHkgb3ZlciBDcmVhdGVDbG9u
ZWRBcmd1bWVudHMgaWYgdGhlIGJ1dHRlcmZseSBpcyBvbmx5CkBAIC0xMDUsNyArMTAzLDcgQEAg
cHJpdmF0ZToKIAogICAgICAgICAgICAgYXV0byBkZWZhdWx0RXNjYXBlID0gWyZdIHsKICAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC51c2VzKG5vZGUsIGNhbmRpZGF0ZSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9z
ZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgRXNjYXBlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMTcsOSArMTE1LDEw
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmNoaWxkMSgpICE9IGNhbmRpZGF0ZSkKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbm9kZS0+dW5saW5rZWRP
cGVyYW5kKCkuaXNUbXAoKSwgIldlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IGEgdG1wIHJlZmVy
cmluZyB0byBhbiBhcmd1bWVudHMgb2JqZWN0LiIpOwogICAgICAgICAgICAgICAgIGxhc3RVc2Vy
SW5kZXggPSBub2RlSW5kZXg7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZWxldmFudExvY2Fscy5j
b250YWlucyhub2RlLT51bmxpbmtlZExvY2FsKCkpKQotICAgICAgICAgICAgICAgICAgICByZWxl
dmFudExvY2Fscy5hcHBlbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIXJlbGV2YW50TG9jYWxzLmNvbnRhaW5zKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpLnZp
cnR1YWxSZWdpc3RlcigpKSkKKyAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbHMuYXBw
ZW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQ2hlY2tW
YXJhcmdzOgpAQCAtMTQwLDEzICsxMzksMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgICAgIHNhd0VzY2FwZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgICAgIGlmIChzYXdFc2NhcGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1Zh
cmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRXNj
YXBlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgICAgICAg
ICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC51c2VzKG5v
ZGUsIGNhbmRpZGF0ZSkpCiAgICAgICAgICAgICAgICAgICAgIGxhc3RVc2VySW5kZXggPSBub2Rl
SW5kZXg7CkBAIC0xNTcsNyArMTU3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgVGFp
bENhbGxWYXJhcmdzOgogICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2Fs
bGVyOgogICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjYW5kaWRhdGUgfHwg
bm9kZS0+Y2hpbGQyKCkgPT0gY2FuZGlkYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChE
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAg
IEVzY2FwZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTE2Nyw3ICsxNjcsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCkgPT0gY2FuZGlkYXRlICYmIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
LT5pc0xvYWRlZEZyb20oKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0Zv
cndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBFc2NhcGUgYXQg
Iiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
ICAgICB9CkBAIC0yMjYsNyArMjI2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICghdmFs
aWRHZXRCeU9mZnNldCkgewogICAgICAgICAgICAgICAgIGZvciAoTm9kZSogYnV0dGVyZmx5IDog
Y2FuZGlkYXRlQnV0dGVyZmxpZXMpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
dXNlcyhub2RlLCBidXR0ZXJmbHkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZH
VmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgIEJ1dHRlcmZseSBlc2NhcGVkIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yMzUsMTEgKzIz
NSwxMSBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICBmb3JBbGxLaWxsZWRPcGVyYW5kcygKICAg
ICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBibG9jay0+dHJ5QXQobm9kZUluZGV4ICsgMSks
Ci0gICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2Up
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgS2lsbGluZyAiLCByZWcsICIg
d2hpbGUgd2UgYXJlIGludGVyZXN0ZWQgaW4gIiwgbGlzdER1bXAocmVsZXZhbnRMb2NhbHMpLCAi
XG4iKTsKKyAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgICBLaWxsaW5nICIsIG9wZXJhbmQsICIgd2hpbGUgd2UgYXJlIGludGVyZXN0ZWQgaW4gIiwg
bGlzdER1bXAocmVsZXZhbnRMb2NhbHMpLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlbGV2YW50TG9jYWxzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAocmVsZXZhbnRMb2NhbHNbaV0gPT0gcmVnKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZCA9PSByZWxldmFudExvY2Fsc1tpXSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxzW2ktLV0gPSByZWxldmFu
dExvY2Fscy5sYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2Nh
bHMucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RVc2VySW5k
ZXggPSBub2RlSW5kZXg7CkBAIC0yNDcsNyArMjQ3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9Ci0gICAgICAgIGlmIChE
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgIGlmICh2
ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygiU2VsZWN0ZWQgbGFzdFVzZXJJbmRleCA9ICIs
IGxhc3RVc2VySW5kZXgsICIsICIsIGJsb2NrLT5hdChsYXN0VXNlckluZGV4KSwgIlxuIik7CiAg
ICAgICAgIAogICAgICAgICAvLyBXZSdyZSBzdGlsbCBpbiBidXNpbmVzcy4gRGV0ZXJtaW5lIGlm
IGJldHdlZW4gdGhlIGNhbmRpZGF0ZSBhbmQgdGhlIGxhc3QgdXNlciB0aGVyZSBpcyBhbnkKQEAg
LTI2MywxNiArMjYzLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CiAg
ICAgICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgICAgICBjYXNlIEtpbGxTdGFjazoK
LSAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUs
IG5vZGUtPnVubGlua2VkTG9jYWwoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1Zh
cmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBp
ZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPnVubGlua2VkT3Bl
cmFuZCgpKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnRlcmZlcmVuY2UgYXQgIiwgbm9kZSwgIlxuIik7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dFN0
YWNrOgotICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRp
ZGF0ZSwgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSkgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAg
ICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9k
ZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEludGVyZmVy
ZW5jZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgICAgIH0KQEAgLTI4MCw4ICsyODAsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgIGNhc2UgRmx1c2g6
Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRl
LCBub2RlLT5sb2NhbCgpKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0Zv
cndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgIGlmIChhcmd1
bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+b3BlcmFuZCgpKSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgICBJbnRlcmZlcmVuY2UgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBAIC0yOTcsMTMgKzI5NywxMiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaGVhcC5wYXls
b2FkKCkuaXNUb3AoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVnKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIHJlZykpCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIGhl
YXAub3BlcmFuZCgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2VzSW50ZXJmZXJl
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgTm9P
cENsb2JiZXJpemUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGRvZXNJbnRlcmZlcmUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgSW50ZXJmZXJlbmNlIGF0ICIsIG5vZGUsICJcbiIpOwog
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtMzExLDcg
KzMxMCw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIFdlIGNh
biBtYWtlIHRoaXMgd29yay4KLSAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJ
bnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgV2lsbCBkbyBmb3J3YXJkaW5nIVxuIik7CiAgICAgICAgIG1fY2hhbmdlZCA9IHRy
dWU7CiAgICAgICAgIApAQCAtMzQxLDggKzM0MCwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gY2hhbmdlIGFueXRoaW5nIHdpdGggdGhlc2UuCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFZh
cmFyZ3NMZW5ndGg6IHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJndW1lbnRzQ2hpbGQo
KSAhPSBjYW5kaWRhdGUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICAgICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHlPbihlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJy
YXlMZW5ndGgoaW5zZXJ0aW9uU2V0LCBjYW5kaWRhdGUsIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2lu
LCAvKiBhZGRUaGlzID0gKi8gdHJ1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorCiAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgotICAgICAgICAgICAgICAg
IGlmIChub2RlLT5jaGlsZDEoKSAhPSBjYW5kaWRhdGUpCisgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPmFyZ3VtZW50c0NoaWxkKCkgIT0gY2FuZGlkYXRlKQogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhGb3J3YXJk
VmFyYXJncyk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAKaW5kZXggOGViZmZiNDM1ZWQ0
ZGJmNjAyYmQ2MmFlZDRjMzQzMmVhNWE4MjkwMi4uMmFjMmVlMzliNGNjYWQzMDgxMjViNGU2ZWNj
ODhhODdjN2QxNzlkOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YXJpYWJsZUFjY2Vzc0RhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFyaWFibGVBY2Nlc3NEYXRhLmNwcApAQCAtMzEsOCArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogCiBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNzRGF0
YSgpCi0gICAgOiBtX2xvY2FsKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ+OjptaW4oKSkpCi0gICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCisg
ICAgOiBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgLCBtX2FyZ3VtZW50QXdhcmVQcmVkaWN0
aW9uKFNwZWNOb25lKQogICAgICwgbV9mbGFncygwKQogICAgICwgbV9zaG91bGROZXZlclVuYm94
KGZhbHNlKQpAQCAtNDUsMTAgKzQ0LDEwIEBAIFZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVB
Y2Nlc3NEYXRhKCkKICAgICBjbGVhclZvdGVzKCk7CiB9CiAKLVZhcmlhYmxlQWNjZXNzRGF0YTo6
VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBsb2NhbCkKLSAgICA6IG1fbG9jYWwo
bG9jYWwpCi0gICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCitWYXJpYWJsZUFjY2Vzc0RhdGE6
OlZhcmlhYmxlQWNjZXNzRGF0YShPcGVyYW5kIG9wZXJhbmQpCisgICAgOiBtX3ByZWRpY3Rpb24o
U3BlY05vbmUpCiAgICAgLCBtX2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKFNwZWNOb25lKQorICAg
ICwgbV9vcGVyYW5kKG9wZXJhbmQpCiAgICAgLCBtX2ZsYWdzKDApCiAgICAgLCBtX3Nob3VsZE5l
dmVyVW5ib3goZmFsc2UpCiAgICAgLCBtX3N0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoZmFs
c2UpCkBAIC04Nyw3ICs4Niw3IEBAIGJvb2wgVmFyaWFibGVBY2Nlc3NEYXRhOjpzaG91bGRVc2VE
b3VibGVGb3JtYXRBY2NvcmRpbmdUb1ZvdGUoKQogewogICAgIC8vIFdlIGRvbid0IHN1cHBvcnQg
dGhpcyBmYWNpbGl0eSBmb3IgYXJndW1lbnRzLCB5ZXQuCiAgICAgLy8gRklYTUU6IG1ha2UgdGhp
cyB3b3JrIGZvciBhcmd1bWVudHMuCi0gICAgaWYgKGxvY2FsKCkuaXNBcmd1bWVudCgpKQorICAg
IGlmIChvcGVyYW5kKCkuaXNBcmd1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIAogICAgIC8vIElmIHRoZSB2YXJpYWJsZSBpcyBub3QgYSBudW1iZXIgcHJlZGljdGlvbiwg
dGhlbiB0aGlzIGRvZXNuJ3QKQEAgLTEyMSw3ICsxMjAsNyBAQCBib29sIFZhcmlhYmxlQWNjZXNz
RGF0YTo6dGFsbHlWb3Rlc0ZvclNob3VsZFVzZURvdWJsZUZvcm1hdCgpCiB7CiAgICAgQVNTRVJU
KGlzUm9vdCgpKTsKICAgICAgICAgCi0gICAgaWYgKGxvY2FsKCkuaXNBcmd1bWVudCgpIHx8IHNo
b3VsZE5ldmVyVW5ib3goKQorICAgIGlmIChvcGVyYW5kKCkuaXNBcmd1bWVudCgpIHx8IHNob3Vs
ZE5ldmVyVW5ib3goKQogICAgICAgICB8fCAoZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc0Fy
cmF5SW5kZXgpKQogICAgICAgICByZXR1cm4gREZHOjptZXJnZURvdWJsZUZvcm1hdFN0YXRlKG1f
ZG91YmxlRm9ybWF0U3RhdGUsIE5vdFVzaW5nRG91YmxlRm9ybWF0KTsKICAgICAKQEAgLTE3Niw3
ICsxNzUsNyBAQCBib29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6Y291bGRSZXByZXNlbnRJbnQ1Mklt
cGwoKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gV2UgcHVudCBmb3IgbWFj
aGluZSBhcmd1bWVudHMuCi0gICAgaWYgKG1fbG9jYWwuaXNBcmd1bWVudCgpKQorICAgIGlmIChv
cGVyYW5kKCkuaXNBcmd1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAg
Ly8gVGhlIGFyZ3VtZW50LWF3YXJlIHByZWRpY3Rpb24gLS0gd2hpY2ggbWVyZ2VzIGFsbCBvZiBh
biAoaW5saW5lZCBvciBtYWNoaW5lKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyaWFibGVBY2Nlc3NEYXRhLmgKaW5kZXggMWQzODkyZjllYzA5Y2JhMjA0M2ZhMjU0ZTYw
OTQyMzIwMTRhMjg0ZS4uYmUyZmI1NDAxMzUyNjU1YjljN2FjYjEzYmRhZWE3NTU3M2ZjZWZmOSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0Rh
dGEuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0
YS5oCkBAIC00OCwxMiArNDgsMTIgQEAgY2xhc3MgVmFyaWFibGVBY2Nlc3NEYXRhIDogcHVibGlj
IFVuaW9uRmluZDxWYXJpYWJsZUFjY2Vzc0RhdGE+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShWYXJpYWJsZUFjY2Vzc0RhdGEpOwogcHVibGljOgogICAgIFZhcmlhYmxlQWNjZXNzRGF0YSgp
OwotICAgIFZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwpOworICAgIFZh
cmlhYmxlQWNjZXNzRGF0YShPcGVyYW5kKTsKICAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9j
YWwoKQorICAgIE9wZXJhbmQgb3BlcmFuZCgpCiAgICAgewotICAgICAgICBBU1NFUlQobV9sb2Nh
bCA9PSBmaW5kKCktPm1fbG9jYWwpOwotICAgICAgICByZXR1cm4gbV9sb2NhbDsKKyAgICAgICAg
QVNTRVJUKG1fb3BlcmFuZCA9PSBmaW5kKCktPm1fb3BlcmFuZCk7CisgICAgICAgIHJldHVybiBt
X29wZXJhbmQ7CiAgICAgfQogICAgIAogICAgIFZpcnR1YWxSZWdpc3RlciYgbWFjaGluZUxvY2Fs
KCkKQEAgLTIwOCwxMCArMjA4LDEwIEBAIHByaXZhdGU6CiAgICAgLy8gcHV0dGluZyB0aGVtIGhl
cmUgc2ltcGxpZmllcyB0aGUgY29kZSwgYW5kIHdlIGRvbid0IGV4cGVjdCBERkcgc3BhY2UKICAg
ICAvLyB1c2FnZSBmb3IgdmFyaWFibGUgYWNjZXNzIG5vZGVzIGRvIGJlIHNpZ25pZmljYW50Lgog
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG1fbG9jYWw7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG1fbWFj
aGluZUxvY2FsOwogICAgIFNwZWN1bGF0ZWRUeXBlIG1fcHJlZGljdGlvbjsKICAgICBTcGVjdWxh
dGVkVHlwZSBtX2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9uOworICAgIE9wZXJhbmQgbV9vcGVyYW5k
OworICAgIFZpcnR1YWxSZWdpc3RlciBtX21hY2hpbmVMb2NhbDsKICAgICBOb2RlRmxhZ3MgbV9m
bGFnczsKIAogICAgIGJvb2wgbV9zaG91bGROZXZlclVuYm94OwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5jcHAKaW5kZXggZDNiNjZjYmFhNjExZmM0MDVl
ZTRmZWMwODEwNjM3YTg5Njc4ZDEyZS4uOWNlMGY2N2Y5Nzk1MTk5YzA1YmYxMDA4OTRmOTg1OWFm
MzQ5OGU2ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJs
ZUV2ZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZl
bnQuY3BwCkBAIC02MCwxMSArNjAsMTEgQEAgdm9pZCBWYXJpYWJsZUV2ZW50OjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIG91dC5wcmludCgiRGVhdGgoIiwgaWQoKSwgIiki
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNb3ZIaW50RXZlbnQ6Ci0gICAgICAgIG91dC5w
cmludCgiTW92SGludCgiLCBpZCgpLCAiLCAiLCBieXRlY29kZVJlZ2lzdGVyKCksICIpIik7Cisg
ICAgICAgIG91dC5wcmludCgiTW92SGludCgiLCBpZCgpLCAiLCAiLCBvcGVyYW5kKCksICIpIik7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU2V0TG9jYWxFdmVudDoKICAgICAgICAgb3V0LnBy
aW50KAotICAgICAgICAgICAgIlNldExvY2FsKG1hY2hpbmU6IiwgbWFjaGluZVJlZ2lzdGVyKCks
ICIgLT4gYnl0ZWNvZGU6IiwgYnl0ZWNvZGVSZWdpc3RlcigpLAorICAgICAgICAgICAgIlNldExv
Y2FsKG1hY2hpbmU6IiwgbWFjaGluZVJlZ2lzdGVyKCksICIgLT4gYnl0ZWNvZGU6Iiwgb3BlcmFu
ZCgpLAogICAgICAgICAgICAgIiwgIiwgZGF0YUZvcm1hdFRvU3RyaW5nKGRhdGFGb3JtYXQoKSks
ICIpIik7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oCmluZGV4IGNlMmNhYzAxOTIzZjg2ODQ5YjE3OGZl
MDZmNzY3OTAzMTUxOWYwODEuLjdjOTkyMmM5MDZhYjQ0ZDdiMDM3NWY1NjlmY2YzZTI1ZTRmOGQ4
ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVu
dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oCkBA
IC02OSw2ICs2OSwxMCBAQCBlbnVtIFZhcmlhYmxlRXZlbnRLaW5kIDogdWludDhfdCB7CiB9Owog
CiB1bmlvbiBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHsKKyAgICBWYXJpYWJsZVJlcHJlc2VudGF0
aW9uKCkgCisgICAgICAgIDogb3BlcmFuZCgpIAorICAgIHsgfQorCiAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQgZ3ByOwogICAgIE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgZnBy
OwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCkBAIC03Nyw3ICs4MSw3IEBAIHVuaW9uIFZhcmlhYmxl
UmVwcmVzZW50YXRpb24gewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXls
b2FkR1BSOwogICAgIH0gcGFpcjsKICNlbmRpZgotICAgIGludDMyX3QgdmlydHVhbFJlZzsKKyAg
ICBPcGVyYW5kIG9wZXJhbmQ7CiB9OwogCiBjbGFzcyBWYXJpYWJsZUV2ZW50IHsKQEAgLTE2Myw3
ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgICAgIFdoaWNoVHlwZSB3aGljaDsKICAgICAgICAgd2hp
Y2guaWQgPSBpZC5iaXRzKCk7CiAgICAgICAgIFZhcmlhYmxlUmVwcmVzZW50YXRpb24gcmVwcmVz
ZW50YXRpb247Ci0gICAgICAgIHJlcHJlc2VudGF0aW9uLnZpcnR1YWxSZWcgPSB2aXJ0dWFsUmVn
aXN0ZXIub2Zmc2V0KCk7CisgICAgICAgIHJlcHJlc2VudGF0aW9uLm9wZXJhbmQgPSB2aXJ0dWFs
UmVnaXN0ZXI7CiAgICAgICAgIGV2ZW50Lm1fa2luZCA9IGtpbmQ7CiAgICAgICAgIGV2ZW50Lm1f
ZGF0YUZvcm1hdCA9IGZvcm1hdDsKICAgICAgICAgZXZlbnQubV93aGljaCA9IFdURk1vdmUod2hp
Y2gpOwpAQCAtMTgyLDEzICsxODYsMTMgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBzdGF0
aWMgVmFyaWFibGVFdmVudCBzZXRMb2NhbCgKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGJ5dGVj
b2RlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZywgRGF0YUZvcm1hdCBmb3JtYXQpCisg
ICAgICAgIE9wZXJhbmQgYnl0ZWNvZGVPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJl
ZywgRGF0YUZvcm1hdCBmb3JtYXQpCiAgICAgewogICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50
OwogICAgICAgICBXaGljaFR5cGUgd2hpY2g7CiAgICAgICAgIHdoaWNoLnZpcnR1YWxSZWcgPSBt
YWNoaW5lUmVnLm9mZnNldCgpOwogICAgICAgICBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHJlcHJl
c2VudGF0aW9uOwotICAgICAgICByZXByZXNlbnRhdGlvbi52aXJ0dWFsUmVnID0gYnl0ZWNvZGVS
ZWcub2Zmc2V0KCk7CisgICAgICAgIHJlcHJlc2VudGF0aW9uLm9wZXJhbmQgPSBieXRlY29kZU9w
ZXJhbmQ7CiAgICAgICAgIGV2ZW50Lm1fa2luZCA9IFNldExvY2FsRXZlbnQ7CiAgICAgICAgIGV2
ZW50Lm1fZGF0YUZvcm1hdCA9IGZvcm1hdDsKICAgICAgICAgZXZlbnQubV93aGljaCA9IFdURk1v
dmUod2hpY2gpOwpAQCAtMTk2LDEzICsyMDAsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
ZXZlbnQ7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IG1vdkhpbnQoTWlu
aWZpZWRJRCBpZCwgVmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2RlUmVnKQorICAgIHN0YXRpYyBWYXJp
YWJsZUV2ZW50IG1vdkhpbnQoTWluaWZpZWRJRCBpZCwgT3BlcmFuZCBieXRlY29kZVJlZykKICAg
ICB7CiAgICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7CiAgICAgICAgIFdoaWNoVHlwZSB3aGlj
aDsKICAgICAgICAgd2hpY2guaWQgPSBpZC5iaXRzKCk7CiAgICAgICAgIFZhcmlhYmxlUmVwcmVz
ZW50YXRpb24gcmVwcmVzZW50YXRpb247Ci0gICAgICAgIHJlcHJlc2VudGF0aW9uLnZpcnR1YWxS
ZWcgPSBieXRlY29kZVJlZy5vZmZzZXQoKTsKKyAgICAgICAgcmVwcmVzZW50YXRpb24ub3BlcmFu
ZCA9IGJ5dGVjb2RlUmVnOwogICAgICAgICBldmVudC5tX2tpbmQgPSBNb3ZIaW50RXZlbnQ7CiAg
ICAgICAgIGV2ZW50Lm1fd2hpY2ggPSBXVEZNb3ZlKHdoaWNoKTsKICAgICAgICAgZXZlbnQubV9y
ZXByZXNlbnRhdGlvbiA9IFdURk1vdmUocmVwcmVzZW50YXRpb24pOwpAQCAtMjY2LDEzICsyNzAs
MTMgQEAgcHVibGljOgogICAgIFZpcnR1YWxSZWdpc3RlciBzcGlsbFJlZ2lzdGVyKCkgY29uc3QK
ICAgICB7CiAgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gQmlydGhUb1NwaWxsIHx8IG1fa2luZCA9
PSBTcGlsbCk7Ci0gICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIobV9yZXByZXNlbnRhdGlv
bi5nZXQoKS52aXJ0dWFsUmVnKTsKKyAgICAgICAgcmV0dXJuIG1fcmVwcmVzZW50YXRpb24uZ2V0
KCkub3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICB9Ci0gICAgCi0gICAgVmlydHVhbFJl
Z2lzdGVyIGJ5dGVjb2RlUmVnaXN0ZXIoKSBjb25zdAorCisgICAgT3BlcmFuZCBvcGVyYW5kKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gU2V0TG9jYWxFdmVudCB8fCBt
X2tpbmQgPT0gTW92SGludEV2ZW50KTsKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3Rlciht
X3JlcHJlc2VudGF0aW9uLmdldCgpLnZpcnR1YWxSZWcpOworICAgICAgICByZXR1cm4gbV9yZXBy
ZXNlbnRhdGlvbi5nZXQoKS5vcGVyYW5kOwogICAgIH0KICAgICAKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbWFjaGluZVJlZ2lzdGVyKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCmluZGV4IDRiMjZjYjAyYzkzYTllODFj
ZmY0MDc0NmM2N2U3MDVjZDVkMjEwYzUuLmVmNzA4NzQ1MWIwMzQ0NzFmYWI2MTk5ZjJlMTNjMDhl
YTJhZmZjNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFi
bGVFdmVudFN0cmVhbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJp
YWJsZUV2ZW50U3RyZWFtLmNwcApAQCAtNDMsNyArNDMsNyBAQCB2b2lkIFZhcmlhYmxlRXZlbnRT
dHJlYW06OmxvZ0V2ZW50KGNvbnN0IFZhcmlhYmxlRXZlbnQmIGV2ZW50KQogewogICAgIGRhdGFM
b2dGKCJzZXEjJXU6Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNpemUoKSkpOwogICAgIGV2ZW50
LmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKLSAgICBkYXRhTG9nRigiICIpOworICAgIGRhdGFMb2dM
bigiICIpOwogfQogCiBuYW1lc3BhY2UgewpAQCAtMTIwLDEwICsxMjAsMTIgQEAgdW5zaWduZWQg
VmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTWluaWZpZWRHcmFwaCYgZ3JhcGgsCiAgICAgdW5z
aWduZWQgaW5kZXgsIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiB2YWx1ZVJlY292ZXJpZXMsIFZl
Y3RvcjxVbmRlZmluZWRPcGVyYW5kU3Bhbj4qIHVuZGVmaW5lZE9wZXJhbmRTcGFucykgY29uc3QK
IHsKKyAgICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAgICAgQVNTRVJUKGNvZGVC
bG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7CiAgICAgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CiAKICAgICB1bnNp
Z25lZCBudW1WYXJpYWJsZXM7CisgICAgdW5zaWduZWQgbnVtVG1wczsKICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIGludmFsaWRJbmRleCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKTsKICAgICB1bnNpZ25lZCBmaXJzdFVuZGVmaW5lZCA9IGludmFsaWRJbmRleDsK
ICAgICBib29sIGZpcnN0VW5kZWZpbmVkSXNBcmd1bWVudCA9IGZhbHNlOwpAQCAtMTMxLDM3ICsx
MzMsNDIgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAg
YXV0byBmbHVzaFVuZGVmaW5lZE9wZXJhbmRTcGFuID0gWyZdICh1bnNpZ25lZCBpKSB7CiAgICAg
ICAgIGlmIChmaXJzdFVuZGVmaW5lZCA9PSBpbnZhbGlkSW5kZXgpCiAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGludCBmaXJzdE9mZnNldCA9IHZhbHVlUmVjb3Zlcmllcy52aXJ0dWFsUmVn
aXN0ZXJGb3JJbmRleChmaXJzdFVuZGVmaW5lZCkub2Zmc2V0KCk7Ci0gICAgICAgIGludCBsYXN0
T2Zmc2V0ID0gdmFsdWVSZWNvdmVyaWVzLnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGkgLSAxKS5v
ZmZzZXQoKTsKKyAgICAgICAgaW50IGZpcnN0T2Zmc2V0ID0gdmFsdWVSZWNvdmVyaWVzLm9wZXJh
bmRGb3JJbmRleChmaXJzdFVuZGVmaW5lZCkudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7Cisg
ICAgICAgIGludCBsYXN0T2Zmc2V0ID0gdmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChp
IC0gMSkudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7CiAgICAgICAgIGludCBtaW5PZmZzZXQg
PSBzdGQ6Om1pbihmaXJzdE9mZnNldCwgbGFzdE9mZnNldCk7CiAgICAgICAgIHVuZGVmaW5lZE9w
ZXJhbmRTcGFucy0+YXBwZW5kKHsgZmlyc3RVbmRlZmluZWQsIG1pbk9mZnNldCwgaSAtIGZpcnN0
VW5kZWZpbmVkIH0pOwogICAgICAgICBmaXJzdFVuZGVmaW5lZCA9IGludmFsaWRJbmRleDsKICAg
ICB9OwogICAgIGF1dG8gcmVjb3JkVW5kZWZpbmVkT3BlcmFuZCA9IFsmXSAodW5zaWduZWQgaSkg
ewogICAgICAgICAvLyBXZSB3YW50IHRvIHNlcGFyYXRlIHRoZSBzcGFuIG9mIGFyZ3VtZW50cyBm
cm9tIHRoZSBzcGFuIG9mIGxvY2FscyBldmVuIGlmIHRoZXkgaGF2ZSBhZGphY2VudCBvcGVyYW5k
cyBpbmRleGVzLgotICAgICAgICBpZiAoZmlyc3RVbmRlZmluZWQgIT0gaW52YWxpZEluZGV4ICYm
IGZpcnN0VW5kZWZpbmVkSXNBcmd1bWVudCAhPSB2YWx1ZVJlY292ZXJpZXMuaXNBcmd1bWVudChp
KSkKKyAgICAgICAgaWYgKGZpcnN0VW5kZWZpbmVkICE9IGludmFsaWRJbmRleCAmJiBmaXJzdFVu
ZGVmaW5lZElzQXJndW1lbnQgIT0gdmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKS5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICBmbHVzaFVuZGVmaW5lZE9wZXJhbmRTcGFuKGkpOwog
CiAgICAgICAgIGlmIChmaXJzdFVuZGVmaW5lZCA9PSBpbnZhbGlkSW5kZXgpIHsKICAgICAgICAg
ICAgIGZpcnN0VW5kZWZpbmVkID0gaTsKLSAgICAgICAgICAgIGZpcnN0VW5kZWZpbmVkSXNBcmd1
bWVudCA9IHZhbHVlUmVjb3Zlcmllcy5pc0FyZ3VtZW50KGkpOworICAgICAgICAgICAgZmlyc3RV
bmRlZmluZWRJc0FyZ3VtZW50ID0gdmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKS5p
c0FyZ3VtZW50KCk7CiAgICAgICAgIH0KICAgICB9OwogCiAgICAgYXV0byogaW5saW5lQ2FsbEZy
YW1lID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICBpZiAoaW5saW5lQ2FsbEZy
YW1lKQotICAgICAgICBudW1WYXJpYWJsZXMgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNh
bGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpLT5udW1DYWxsZWVMb2NhbHMoKSArIFZpcnR1YWxSZWdp
c3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkgKyAxOwotICAgIGVs
c2UKKyAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1l
KTsKKyAgICAgICAgbnVtVmFyaWFibGVzID0gY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSAr
IFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkg
KyAxOworICAgICAgICBudW1UbXBzID0gY29kZUJsb2NrLT5udW1UbXBzKCkgKyBpbmxpbmVDYWxs
RnJhbWUtPnRtcE9mZnNldDsKKyAgICB9IGVsc2UgewogICAgICAgICBudW1WYXJpYWJsZXMgPSBi
YXNlbGluZUNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCk7CisgICAgICAgIG51bVRtcHMgPSBi
YXNlbGluZUNvZGVCbG9jay0+bnVtVG1wcygpOworICAgIH0KICAgICAKICAgICAvLyBDcmF6eSBz
cGVjaWFsIGNhc2U6IGlmIHdlJ3JlIGF0IGluZGV4ID09IDAgdGhlbiB0aGlzIG11c3QgYmUgYW4g
YXJndW1lbnQgY2hlY2sKICAgICAvLyBmYWlsdXJlLCBpbiB3aGljaCBjYXNlIGFsbCB2YXJpYWJs
ZXMgYXJlIGFscmVhZHkgc2V0IHVwLiBUaGUgcmVjb3ZlcmllcyBzaG91bGQKICAgICAvLyByZWZs
ZWN0IHRoaXMuCiAgICAgaWYgKCFpbmRleCkgewotICAgICAgICB2YWx1ZVJlY292ZXJpZXMgPSBP
cGVyYW5kczxWYWx1ZVJlY292ZXJ5Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFy
aWFibGVzKTsKKyAgICAgICAgLy8gV2UgZG9uJ3QgaW5jbHVkZSB0bXBzIGhlcmUgYmVjYXVzZSB0
aGV5IGNhbid0IGJlIHVzZWQgeWV0LgorICAgICAgICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5k
czxWYWx1ZVJlY292ZXJ5Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVz
LCAwKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZVJlY292ZXJpZXMuc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9IFZhbHVlUmVjb3Zl
cnk6OmRpc3BsYWNlZEluSlNTdGFjaygKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKSksIERhdGFGb3JtYXRKUyk7CisgICAg
ICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKS52aXJ0dWFsUmVn
aXN0ZXIoKSwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVtVmFy
aWFibGVzOwogICAgIH0KQEAgLTE3MiwxMiArMTc5LDEzIEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZl
bnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICBzdGFydEluZGV4LS07CiAgICAgCiAgICAg
Ly8gU3RlcCAyOiBDcmVhdGUgYSBtb2NrLXVwIG9mIHRoZSBERkcncyBzdGF0ZSBhbmQgZXhlY3V0
ZSB0aGUgZXZlbnRzLgotICAgIE9wZXJhbmRzPFZhbHVlU291cmNlPiBvcGVyYW5kU291cmNlcyhj
b2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzKTsKKyAgICBPcGVyYW5kczxW
YWx1ZVNvdXJjZT4gb3BlcmFuZFNvdXJjZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51
bVZhcmlhYmxlcywgbnVtVG1wcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gb3BlcmFuZFNvdXJj
ZXMuc2l6ZSgpOyBpLS07KQogICAgICAgICBvcGVyYW5kU291cmNlc1tpXSA9IFZhbHVlU291cmNl
KFNvdXJjZUlzRGVhZCk7CiAgICAgSGFzaE1hcDxNaW5pZmllZElELCBNaW5pZmllZEdlbmVyYXRp
b25JbmZvPiBnZW5lcmF0aW9uSW5mb3M7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRJbmRl
eDsgaSA8IGluZGV4OyArK2kpIHsKICAgICAgICAgY29uc3QgVmFyaWFibGVFdmVudCYgZXZlbnQg
PSBhdChpKTsKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlByb2Nlc3NpbmcgZXZlbnQg
IiwgZXZlbnQpOwogICAgICAgICBzd2l0Y2ggKGV2ZW50LmtpbmQoKSkgewogICAgICAgICBjYXNl
IFJlc2V0OgogICAgICAgICAgICAgLy8gbm90aGluZyB0byBkby4KQEAgLTE5OSwyMSArMjA3LDIz
IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBNb3ZIaW50RXZlbnQ6Ci0gICAgICAg
ICAgICBpZiAob3BlcmFuZFNvdXJjZXMuaGFzT3BlcmFuZChldmVudC5ieXRlY29kZVJlZ2lzdGVy
KCkpKQotICAgICAgICAgICAgICAgIG9wZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQoZXZlbnQuYnl0
ZWNvZGVSZWdpc3RlcigpLCBWYWx1ZVNvdXJjZShldmVudC5pZCgpKSk7CisgICAgICAgICAgICBp
ZiAob3BlcmFuZFNvdXJjZXMuaGFzT3BlcmFuZChldmVudC5vcGVyYW5kKCkpKQorICAgICAgICAg
ICAgICAgIG9wZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQoZXZlbnQub3BlcmFuZCgpLCBWYWx1ZVNv
dXJjZShldmVudC5pZCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTZXRM
b2NhbEV2ZW50OgotICAgICAgICAgICAgaWYgKG9wZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZl
bnQuYnl0ZWNvZGVSZWdpc3RlcigpKSkKLSAgICAgICAgICAgICAgICBvcGVyYW5kU291cmNlcy5z
ZXRPcGVyYW5kKGV2ZW50LmJ5dGVjb2RlUmVnaXN0ZXIoKSwgVmFsdWVTb3VyY2U6OmZvckRhdGFG
b3JtYXQoZXZlbnQubWFjaGluZVJlZ2lzdGVyKCksIGV2ZW50LmRhdGFGb3JtYXQoKSkpOworICAg
ICAgICAgICAgaWYgKG9wZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQub3BlcmFuZCgpKSkK
KyAgICAgICAgICAgICAgICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5kKGV2ZW50Lm9wZXJhbmQo
KSwgVmFsdWVTb3VyY2U6OmZvckRhdGFGb3JtYXQoZXZlbnQubWFjaGluZVJlZ2lzdGVyKCksIGV2
ZW50LmRhdGFGb3JtYXQoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiT3Bl
cmFuZCBzb3VyY2VzOiAiLCBvcGVyYW5kU291cmNlcyk7CiAgICAgCiAgICAgLy8gU3RlcCAzOiBD
b21wdXRlIHZhbHVlIHJlY292ZXJpZXMhCi0gICAgdmFsdWVSZWNvdmVyaWVzID0gT3BlcmFuZHM8
VmFsdWVSZWNvdmVyeT4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcmlhYmxlcyk7
CisgICAgdmFsdWVSZWNvdmVyaWVzID0gT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4oT3BlcmFuZHNM
aWtlLCBvcGVyYW5kU291cmNlcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9wZXJh
bmRTb3VyY2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFZhbHVlU291cmNlJiBzb3VyY2UgPSBv
cGVyYW5kU291cmNlc1tpXTsKICAgICAgICAgaWYgKHNvdXJjZS5pc1RyaXZpYWxseVJlY292ZXJh
YmxlKCkpIHsKQEAgLTIzMSw2ICsyNDEsNyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFt
OjpyZWNvbnN0cnVjdCgKICAgICAgICAgTWluaWZpZWROb2RlKiBub2RlID0gZ3JhcGguYXQoc291
cmNlLmlkKCkpOwogICAgICAgICBNaW5pZmllZEdlbmVyYXRpb25JbmZvIGluZm8gPSBnZW5lcmF0
aW9uSW5mb3MuZ2V0KHNvdXJjZS5pZCgpKTsKICAgICAgICAgaWYgKCFpbmZvLmFsaXZlKSB7Cisg
ICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiT3BlcmFuZCAiLCB2YWx1ZVJlY292ZXJp
ZXMub3BlcmFuZEZvckluZGV4KGkpLCAiIGlzIGRlYWQuIik7CiAgICAgICAgICAgICB2YWx1ZVJl
Y292ZXJpZXNbaV0gPSBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKTsKICAg
ICAgICAgICAgIGlmIChzdHlsZSA9PSBSZWNvbnN0cnVjdGlvblN0eWxlOjpTZXBhcmF0ZWQpCiAg
ICAgICAgICAgICAgICAgcmVjb3JkVW5kZWZpbmVkT3BlcmFuZChpKTsKQEAgLTIzOCw2ICsyNDks
NyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAg
fQogCiAgICAgICAgIGlmICh0cnlUb1NldENvbnN0YW50UmVjb3ZlcnkodmFsdWVSZWNvdmVyaWVz
W2ldLCBub2RlKSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk9wZXJhbmQg
IiwgdmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKSwgIiBpcyBjb25zdGFudC4iKTsK
ICAgICAgICAgICAgIGlmIChzdHlsZSA9PSBSZWNvbnN0cnVjdGlvblN0eWxlOjpTZXBhcmF0ZWQp
IHsKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSAmJiBub2RlLT5jb25z
dGFudCgpID09IGpzVW5kZWZpbmVkKCkpCiAgICAgICAgICAgICAgICAgICAgIHJlY29yZFVuZGVm
aW5lZE9wZXJhbmQoaSk7CkBAIC0yNjcsNyArMjc5LDcgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVu
dFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZhbHVl
UmVjb3Zlcmllc1tpXSA9Ci0gICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpT
U3RhY2soc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihpbmZvLnUudmlydHVhbFJlZyksIGlu
Zm8uZm9ybWF0KTsKKyAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFj
ayhpbmZvLnUub3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSwgaW5mby5mb3JtYXQpOwogICAgIH0K
ICAgICBpZiAoc3R5bGUgPT0gUmVjb25zdHJ1Y3Rpb25TdHlsZTo6U2VwYXJhdGVkKQogICAgICAg
ICBmbHVzaFVuZGVmaW5lZE9wZXJhbmRTcGFuKG9wZXJhbmRTb3VyY2VzLnNpemUoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0u
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oCmlu
ZGV4IDAxNTczMDA3ZWRkZGQ3MGYzMWQxN2FjMGQ5OWY3OGViZjVlYTZlYmMuLmU5ZTQzYWJmZWM0
ODVmZWM3ZTY2MzE1MWMxYzIyZWM1MTg5NzQxM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oCkBAIC00Miw5ICs0MiwxMiBAQCBz
dHJ1Y3QgVW5kZWZpbmVkT3BlcmFuZFNwYW4gewogfTsKIAogY2xhc3MgVmFyaWFibGVFdmVudFN0
cmVhbSA6IHB1YmxpYyBWZWN0b3I8VmFyaWFibGVFdmVudD4geworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmRBbmRMb2co
Y29uc3QgVmFyaWFibGVFdmVudCYgZXZlbnQpCiAgICAgeworICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgIGxvZ0V2ZW50KGV2ZW50KTsKICAgICAgICAgYXBwZW5kKGV2ZW50KTsKICAg
ICB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFi
aWxpdGllcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5j
cHAKaW5kZXggNGU3YTNjMTc0OWIwYWVlNWFhMDYyNDE4ZDUyOWNmM2MzMDdmYTg2ZC4uYjk1M2Nm
ZWM3MTVjNmFhZGQyYjYyMTM4MWRhMTVhYTExYzJmY2M1MCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcApAQCAtMTkzLDYgKzE5Myw3IEBAIGlubGlu
ZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgVGFpbENh
bGxGb3J3YXJkVmFyYXJnczoKICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVk
Q2FsbGVyOgogICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBWYXJh
cmdzTGVuZ3RoOgogICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6
CiAgICAgY2FzZSBCcmFuY2g6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEZvck9TUkVudHJ5SklUQ29kZS5jcHAKaW5kZXggMzA4MGRjMzQ1MDljNzMzMzI0YjgxNDNkMmE5
NTRmMDhlZGFmMTNmYi4uYzAwNGZhY2NjMWFkMDVkMzZjZWRiZWRmOTY3ODJhYWI3ZGNiOTgzMyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENv
ZGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRD
b2RlLmNwcApAQCAtMzEsOCArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwg
ewogCiBGb3JPU1JFbnRyeUpJVENvZGU6OkZvck9TUkVudHJ5SklUQ29kZSgpCi0gICAgOiBtX2J5
dGVjb2RlSW5kZXgoVUlOVF9NQVgpCi0gICAgLCBtX2VudHJ5RmFpbHVyZUNvdW50KDApCisgICAg
OiBtX2VudHJ5RmFpbHVyZUNvdW50KDApCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCA0ZjJjYzgyODhkOTMwZTNkNWViY2E4MjA1
MDdjM2EzZGU5N2EwNjFkLi44NTRkNGYxMjk4OTE1OTE3MDk4YzkzZjkxNzAzMTA3ODY3YmFkZWYy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBA
IC0yMDksNyArMjA5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmNs
ZWFyU3RhY2tGcmFtZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpz
dGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDAsIGNvZGUuZnJhbWVTaXplKCkpOwog
CiAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0U2F2ZShjb2RlLmNhbGxlZVNhdmVSZWdpc3Rl
ckF0T2Zmc2V0TGlzdCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcihjb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAg
ICAgICAgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoY29kZUJsb2NrLCBWaXJ0
dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7CiAgICAgICAgICAgICAgICAg
fSk7CiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2F0Y2hFbnRyeXBvaW50SW5kZXggOiBt
X2dyYXBoLm1fZW50cnlwb2ludEluZGV4VG9DYXRjaEJ5dGVjb2RlSW5kZXgua2V5cygpKSB7CkBA
IC0yNzUsNyArMjc1LDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgLy8gV2UgZG9uJ3Qg
d2FudCB0aGUgQ29kZUJsb2NrIHRvIGhhdmUgYSB3ZWFrIHBvaW50ZXIgdG8gaXRzZWxmIGJlY2F1
c2UKICAgICAgICAgLy8gdGhhdCB3b3VsZCBjYXVzZSBpdCB0byBhbHdheXMgZ2V0IGNvbGxlY3Rl
ZC4KLSAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQuY29uc3RJbnRQdHIoYml0d2lzZV9jYXN0
PGludHB0cl90Pihjb2RlQmxvY2soKSkpLCBhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jaykpOworICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5jb25zdEludFB0cihiaXR3aXNl
X2Nhc3Q8aW50cHRyX3Q+KGNvZGVCbG9jaygpKSksIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVy
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpKTsKIAogICAgICAgICAvLyBTdGFjayBPdmVyZmxv
dyBDaGVjay4KICAgICAgICAgdW5zaWduZWQgZXhpdEZyYW1lU2l6ZSA9IG1fZ3JhcGgucmVxdWly
ZWRSZWdpc3RlckNvdW50Rm9yRXhpdCgpICogc2l6ZW9mKFJlZ2lzdGVyKTsKQEAgLTM1Niw3ICsz
NTYsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAg
ICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxp
dHlNYXAoKS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51
bVBhcmFtZXRlcnMoKSwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fs
cyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwg
MCwgMCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFy
YW1ldGVycygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9s
b2NhbHMuYXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1
c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSkpOwpA
QCAtMTI5MSw2ICsxMjkxLDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBDYWxsRXZhbDoKICAg
ICAgICAgICAgIGNvbXBpbGVDYWxsRXZhbCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgVmFyYXJnc0xlbmd0aDoKKyAgICAgICAgICAgIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKCk7
CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAg
ICAgIGNvbXBpbGVMb2FkVmFyYXJncygpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xOTY3LDcg
KzE5NzAsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgRW5jb2RlZEpTVmFsdWUqIGJ1ZmZl
ciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oCiAgICAgICAgICAgICBtX2Z0bFN0YXRl
LmppdENvZGUtPmZ0bEZvck9TUkVudHJ5KCktPmVudHJ5QnVmZmVyKCktPmRhdGFCdWZmZXIoKSk7
Ci0gICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRlKGJ1ZmZlciAr
IG1fbm9kZS0+dW5saW5rZWRMb2NhbCgpLnRvTG9jYWwoKSkpKTsKKyAgICAgICAgc2V0SlNWYWx1
ZShtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUoYnVmZmVyICsgbV9ub2RlLT51bmxpbmtlZE9w
ZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKS50b0xvY2FsKCkpKSk7CiAgICAgfQogCiAgICAgdm9p
ZCBjb21waWxlRXh0cmFjdENhdGNoTG9jYWwoKQpAQCAtMTk4Niw3ICsxOTg5LDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGNvbXBpbGVHZXRTdGFjaygpCiAgICAgewogICAgICAgICBTdGFja0FjY2Vz
c0RhdGEqIGRhdGEgPSBtX25vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICBBYnN0cmFj
dFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChkYXRhLT5sb2NhbCk7CisgICAgICAgIEFi
c3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpOwogICAg
ICAgICAKICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGlzQ29uY3JldGUoZGF0
YS0+Zm9ybWF0KSwgZGF0YS0+Zm9ybWF0KTsKICAgICAgICAgCkBAIC03OTgxLDEzICs3OTg0LDEz
IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0Q2FsbGVlKCkKICAgICB7Ci0g
ICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSkpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkUHRyKGFkZHJlc3NGb3Io
VmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKSk7CiAgICAgfQogCiAgICAg
dm9pZCBjb21waWxlU2V0Q2FsbGVlKCkKICAgICB7CiAgICAgICAgIGF1dG8gY2FsbGVlID0gbG93
Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIoY2FsbGVlLCBw
YXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOworICAgICAgICBtX291dC5zdG9yZVB0
cihjYWxsZWUsIHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0QXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMoKQpAQCAtODAwMiw3ICs4MDA1LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29t
cGlsZVNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKICAgICB7Ci0gICAgICAgIG1fb3V0
LnN0b3JlMzIobV9vdXQuY29uc3RJbnQzMihtX25vZGUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKCkpLCBwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSk7CisgICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQzMihtX25vZGUtPmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpLCBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKICAgICB9CiAgICAg
CiAgICAgdm9pZCBjb21waWxlR2V0U2NvcGUoKQpAQCAtOTU5Nyw1MSArOTYwMCw1MSBAQCBwcml2
YXRlOgogICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOwogICAgIH0KICAgICAKLSAgICB2
b2lkIGNvbXBpbGVMb2FkVmFyYXJncygpCisgICAgdm9pZCBjb21waWxlVmFyYXJnc0xlbmd0aCgp
CiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICBMb2FkVmFy
YXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICBMVmFs
dWUganNBcmd1bWVudHMgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAK
KyAgICAgICAgTFZhbHVlIGpzQXJndW1lbnRzID0gbG93SlNWYWx1ZShtX25vZGUtPmFyZ3VtZW50
c0NoaWxkKCkpOworCiAgICAgICAgIExWYWx1ZSBsZW5ndGggPSB2bUNhbGwoCiAgICAgICAgICAg
ICBJbnQzMiwgb3BlcmF0aW9uU2l6ZU9mVmFyYXJncywgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0
KSwganNBcmd1bWVudHMsCiAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNl
dCkpOwotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQg
d2Ugd2lsbCBjYWxsIGFuIGVmZmVjdGZ1bCBsZW5ndGggcHJvcGVydHkgdHdpY2UuIFRoaXMgaXMg
c2FmZQotICAgICAgICAvLyBmcm9tIHRoZSBzdGFuZHBvaW50IG9mIHRoZSBWTSdzIGludGVncml0
eSwgYnV0IGl0J3Mgc3VidGx5IHdyb25nIGZyb20gYSBzcGVjIGNvbXBsaWFuY2UKLSAgICAgICAg
Ly8gc3RhbmRwb2ludC4gVGhlIGJlc3Qgc29sdXRpb24gd291bGQgYmUgb25lIHdoZXJlIHdlIGNh
biBleGl0ICppbnRvKiB0aGUgb3BfY2FsbF92YXJhcmdzIHJpZ2h0Ci0gICAgICAgIC8vIHBhc3Qg
dGhlIHNpemluZy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0MTQ0OAotICAgICAgICAKKwogICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5n
VGhpcyA9IG1fb3V0LmFkZChsZW5ndGgsIG1fb3V0LmludDMyT25lKTsKIAotICAgICAgICBzcGVj
dWxhdGUoCi0gICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwK
LSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aCwgbGVuZ3RoSW5jbHVkaW5nVGhpcykpOwor
ICAgICAgICBzZXRJbnQzMihsZW5ndGhJbmNsdWRpbmdUaGlzKTsKKyAgICB9CiAKKyAgICB2b2lk
IGNvbXBpbGVMb2FkVmFyYXJncygpCisgICAgeworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMpOworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdz
RGF0YSgpOworICAgICAgICBMVmFsdWUganNBcmd1bWVudHMgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+
YXJndW1lbnRzQ2hpbGQoKSk7CisgICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0g
bG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIAogICAgICAgICBzcGVjdWxhdGUo
CiAgICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAgICAg
ICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIo
ZGF0YS0+bGltaXQpKSk7Ci0gICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYml0T3IobV9vdXQu
aXNaZXJvMzIobGVuZ3RoSW5jbHVkaW5nVGhpcyksIG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1ZGlu
Z1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSkpOyAKKwogICAgICAgICBtX291
dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMsIHBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNv
dW50KSk7CiAgICAgICAgIAotICAgICAgICAvLyBGSVhNRTogVGhpcyBjb21wdXRhdGlvbiBpcyBy
YXRoZXIgc2lsbHkuIElmIG9wZXJhdGlvbkxhb2RWYXJhcmdzIGp1c3QgdG9vayBhIHBvaW50ZXIg
aW5zdGVhZAorICAgICAgICAvLyBGSVhNRTogVGhpcyBjb21wdXRhdGlvbiBpcyByYXRoZXIgc2ls
bHkuIElmIG9wZXJhdGlvbkxvYWRWYXJhcmdzIGp1c3QgdG9vayBhIHBvaW50ZXIgaW5zdGVhZAog
ICAgICAgICAvLyBvZiBhIFZpcnR1YWxSZWdpc3Rlciwgd2Ugd291bGRuJ3QgaGF2ZSB0byBkbyB0
aGlzLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQxNjYwCiAgICAgICAgIExWYWx1ZSBtYWNoaW5lU3RhcnQgPSBtX291dC5sU2hyKAotICAgICAg
ICAgICAgbV9vdXQuc3ViKGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpKS52
YWx1ZSgpLCBtX2NhbGxGcmFtZSksCisgICAgICAgICAgICBtX291dC5zdWIoYWRkcmVzc0Zvcihk
YXRhLT5tYWNoaW5lU3RhcnQpLnZhbHVlKCksIG1fY2FsbEZyYW1lKSwKICAgICAgICAgICAgIG1f
b3V0LmNvbnN0SW50UHRyKDMpKTsKICAgICAgICAgCiAgICAgICAgIHZtQ2FsbCgKICAgICAgICAg
ICAgIFZvaWQsIG9wZXJhdGlvbkxvYWRWYXJhcmdzLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3Qp
LAogICAgICAgICAgICAgbV9vdXQuY2FzdFRvSW50MzIobWFjaGluZVN0YXJ0KSwganNBcmd1bWVu
dHMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0KSwKLSAgICAgICAgICAgIGxlbmd0aCwg
bV9vdXQuY29uc3RJbnQzMihkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKSk7CisgICAgICAgICAgICBs
ZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5jb25zdEludDMyKGRhdGEtPm1hbmRhdG9yeU1pbmlt
dW0pKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlRm9yd2FyZFZhcmFyZ3MoKQogICAg
IHsKLSAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkpIHsKLSAgICAgICAgICAgIE5vZGUqIGFy
Z3VtZW50cyA9IG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICBpZiAobV9ub2RlLT5h
cmd1bWVudHNDaGlsZCgpKSB7CisgICAgICAgICAgICBOb2RlKiBhcmd1bWVudHMgPSBtX25vZGUt
PmFyZ3VtZW50c0NoaWxkKCkubm9kZSgpOwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy0+b3Ao
KSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFu
dG9tTmV3QXJyYXlCdWZmZXIgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21TcHJlYWQpIHsK
ICAgICAgICAgICAgICAgICBjb21waWxlRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkKCk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtOTY1MCw1MCArOTY1MywyMSBAQCBwcml2YXRlOgogCiAg
ICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7
CiAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lOwotICAgICAgICBpZiAo
bV9ub2RlLT5jaGlsZDEoKSkKLSAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+
Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICAgICAgaWYg
KG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSkKKyAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9
IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZSgpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBtX25vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKIAotICAgICAgICBMVmFsdWUgbGVu
Z3RoID0gbnVsbHB0cjsgCi0gICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbnVs
bHB0cjsKLSAgICAgICAgQXJndW1lbnRzTGVuZ3RoIGFyZ3VtZW50c0xlbmd0aCA9IGdldEFyZ3Vt
ZW50c0xlbmd0aChpbmxpbmVDYWxsRnJhbWUpOwotICAgICAgICBpZiAoYXJndW1lbnRzTGVuZ3Ro
LmlzS25vd24pIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGtub3duTGVuZ3RoID0gYXJndW1lbnRz
TGVuZ3RoLmtub3duOwotICAgICAgICAgICAgaWYgKGtub3duTGVuZ3RoID49IGRhdGEtPm9mZnNl
dCkKLSAgICAgICAgICAgICAgICBrbm93bkxlbmd0aCA9IGtub3duTGVuZ3RoIC0gZGF0YS0+b2Zm
c2V0OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGtub3duTGVuZ3RoID0gMDsK
LSAgICAgICAgICAgIGxlbmd0aCA9IG1fb3V0LmNvbnN0SW50MzIoa25vd25MZW5ndGgpOwotICAg
ICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmNvbnN0SW50MzIoa25vd25MZW5n
dGggKyAxKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gcGVy
Zm9ybSB0aGUgc2FtZSBsb2dpY2FsIG9wZXJhdGlvbiBhcyB0aGUgY29kZSBhYm92ZSwgYnV0IHRo
cm91Z2ggZHluYW1pYyBvcGVyYXRpb25zLgotICAgICAgICAgICAgaWYgKCFkYXRhLT5vZmZzZXQp
Ci0gICAgICAgICAgICAgICAgbGVuZ3RoID0gYXJndW1lbnRzTGVuZ3RoLnZhbHVlOwotICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaXNMYXJnZXIgPSBtX291
dC5uZXdCbG9jaygpOwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0KLSAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbWFs
bGVyT3JFcXVhbExlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludDMyKDAp
KTsKLSAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgICAgIG1f
b3V0LmFib3ZlKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5v
ZmZzZXQpKSwgdW5zdXJlKGlzTGFyZ2VyKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOwotICAgICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNMYXJnZXIs
IGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VyTGVu
Z3RoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LnN1Yihhcmd1bWVudHNMZW5ndGgudmFsdWUs
IG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0KSkpOwotICAgICAgICAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgICAgIGxlbmd0aCA9IG1fb3V0LnBo
aShJbnQzMiwgc21hbGxlck9yRXF1YWxMZW5ndGhSZXN1bHQsIGxhcmdlckxlbmd0aFJlc3VsdCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQu
YWRkKGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMigxKSk7Ci0gICAgICAgIH0KKyAgICAgICAgdW5z
aWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBkYXRhLT5vZmZzZXQ7CisgICAgICAgIExW
YWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CiAK
KyAgICAgICAgTFZhbHVlIGxlbmd0aCA9IG1fb3V0LnN1YihsZW5ndGhJbmNsdWRpbmdUaGlzLCBt
X291dC5pbnQzMk9uZSk7CiAgICAgICAgIHNwZWN1bGF0ZSgKICAgICAgICAgICAgIFZhcmFyZ3NP
dmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLAogICAgICAgICAgICAgbV9vdXQuYWJvdmUobGVu
Z3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5saW1pdCkpKTsKICAgICAg
ICAgCiAgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoSW5jbHVkaW5nVGhpcywgcGF5bG9hZEZv
cihkYXRhLT5tYWNoaW5lQ291bnQpKTsKICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIG51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwID0gZGF0YS0+b2Zmc2V0OwogICAgICAgICBMVmFsdWUgc291cmNl
U3RhcnQgPSBnZXRBcmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUsIG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwKTsKICAgICAgICAgTFZhbHVlIHRhcmdldFN0YXJ0ID0gYWRkcmVzc0ZvcihkYXRh
LT5tYWNoaW5lU3RhcnQpLnZhbHVlKCk7CiAKQEAgLTk3NTIsNjUgKzk3MjYsMjAgQEAgcHJpdmF0
ZToKICAgICAgICAgLy8gV2UgbmVlZCB0byBwZXJmb3JtIHRoZSBzYW1lIGxvZ2ljYWwgb3BlcmF0
aW9uIGFzIHRoZSBjb2RlIGFib3ZlLCBidXQgdGhyb3VnaCBkeW5hbWljIG9wZXJhdGlvbnMuCiAg
ICAgICAgIGlmICghbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCiAgICAgICAgICAgICByZXR1cm4g
YXJndW1lbnRzTGVuZ3RoLnZhbHVlOworICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSU5UMzJfTUlO
KSk7CiAKLSAgICAgICAgTEJhc2ljQmxvY2sgaXNMYXJnZXIgPSBtX291dC5uZXdCbG9jaygpOwot
ICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwotCi0g
ICAgICAgIFZhbHVlRnJvbUJsb2NrIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0ID0gbV9vdXQu
YW5jaG9yKG1fb3V0LmNvbnN0SW50MzIoMCkpOwotICAgICAgICBtX291dC5icmFuY2goCi0gICAg
ICAgICAgICBtX291dC5hYm92ZShhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50
MzIobnVtYmVyT2ZBcmd1bWVudHNUb1NraXApKSwgdW5zdXJlKGlzTGFyZ2VyKSwgdW5zdXJlKGNv
bnRpbnVhdGlvbikpOwotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVu
ZFRvKGlzTGFyZ2VyLCBjb250aW51YXRpb24pOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBsYXJn
ZXJMZW5ndGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuc3ViKGFyZ3VtZW50c0xlbmd0aC52
YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpKTsKLSAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICBMVmFsdWUgZml4ZWRMZW5ndGgg
PSBtX291dC5zdWIoYXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwKSk7CiAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHJldHVybiBtX291dC5waGkoSW50MzIsIHNtYWxsZXJP
ckVxdWFsTGVuZ3RoUmVzdWx0LCBsYXJnZXJMZW5ndGhSZXN1bHQpOworICAgICAgICByZXR1cm4g
bV9vdXQuc2VsZWN0KG1fb3V0LmdyZWF0ZXJUaGFuT3JFcXVhbChmaXhlZExlbmd0aCwgbV9vdXQu
aW50MzJaZXJvKSwgZml4ZWRMZW5ndGgsIG1fb3V0LmludDMyWmVybywgU2VsZWN0UHJlZGljdGFi
aWxpdHk6OlByZWRpY3RhYmxlKTsKICAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVGb3J3YXJkVmFy
YXJnc1dpdGhTcHJlYWQoKQogICAgIHsKLSAgICAgICAgSGFzaE1hcDxJbmxpbmVDYWxsRnJhbWUq
LCBMVmFsdWUsIFdURjo6RGVmYXVsdEhhc2g8SW5saW5lQ2FsbEZyYW1lKj46Okhhc2gsIFdURjo6
TnVsbGFibGVIYXNoVHJhaXRzPElubGluZUNhbGxGcmFtZSo+PiBjYWNoZWRTcHJlYWRMZW5ndGhz
OwotCi0gICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9IG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwor
ICAgICAgICBOb2RlKiBhcmd1bWVudHMgPSBtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkubm9kZSgp
OwogICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0Fy
cmF5V2l0aFNwcmVhZCB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5QnVmZmVy
IHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tU3ByZWFkKTsKIAotICAgICAgICB1bnNpZ25l
ZCBudW1iZXJPZlN0YXRpY0FyZ3VtZW50cyA9IDA7Ci0gICAgICAgIFZlY3RvcjxMVmFsdWUsIDI+
IHNwcmVhZExlbmd0aHM7Ci0KLSAgICAgICAgYXV0byBjb2xsZWN0QXJndW1lbnRDb3VudCA9IHJl
Y3Vyc2FibGVMYW1iZGEoWyZdKGF1dG8gc2VsZiwgTm9kZSogdGFyZ2V0KSAtPiB2b2lkIHsKLSAg
ICAgICAgICAgIGlmICh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCkgewotICAgICAgICAg
ICAgICAgIHNlbGYodGFyZ2V0LT5jaGlsZDEoKS5ub2RlKCkpOwotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRhcmdldC0+b3AoKSA9PSBQ
aGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKSB7Ci0gICAgICAgICAgICAgICAgQml0VmVjdG9yKiBi
aXRWZWN0b3IgPSB0YXJnZXQtPmJpdFZlY3RvcigpOwotICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB0YXJnZXQtPm51bUNoaWxkcmVuKCk7IGkrKykgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmKG1fZ3JhcGgudmFyQXJnQ2hpbGQodGFyZ2V0LCBpKS5ub2RlKCkpOwotICAgICAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICArK251bWJlck9mU3RhdGlj
QXJndW1lbnRzOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbU5l
d0FycmF5QnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbnVtYmVyT2ZTdGF0aWNBcmd1bWVudHMg
Kz0gdGFyZ2V0LT5jYXN0T3BlcmFuZDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KCktPmxlbmd0aCgp
OwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
QVNTRVJUKHRhcmdldC0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7Ci0gICAgICAgICAgICBJ
bmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IHRhcmdldC0+b3JpZ2luLnNlbWFudGlj
LmlubGluZUNhbGxGcmFtZSgpOwotICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXAgPSB0YXJnZXQtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7Ci0gICAgICAgICAg
ICBzcHJlYWRMZW5ndGhzLmFwcGVuZChjYWNoZWRTcHJlYWRMZW5ndGhzLmVuc3VyZShpbmxpbmVD
YWxsRnJhbWUsIFsmXSAoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMtPmdldFNwcmVh
ZExlbmd0aEZyb21JbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFyZ3Vt
ZW50c1RvU2tpcCk7Ci0gICAgICAgICAgICB9KS5pdGVyYXRvci0+dmFsdWUpOwotICAgICAgICB9
KTsKLQotICAgICAgICBjb2xsZWN0QXJndW1lbnRDb3VudChhcmd1bWVudHMpOwotICAgICAgICBM
VmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmNvbnN0SW50MzIoMSArIG51bWJlck9m
U3RhdGljQXJndW1lbnRzKTsKLSAgICAgICAgZm9yIChMVmFsdWUgbGVuZ3RoIDogc3ByZWFkTGVu
Z3RocykKLSAgICAgICAgICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5hZGQobGVuZ3Ro
SW5jbHVkaW5nVGhpcywgbGVuZ3RoKTsKKyAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1Ro
aXMgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKIAogICAgICAgICBMb2FkVmFyYXJnc0Rh
dGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAgICAgICBzcGVjdWxhdGUo
CkBAIC05ODIxLDcgKzk3NTAsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIExWYWx1ZSB0YXJnZXRT
dGFydCA9IGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZVN0YXJ0KS52YWx1ZSgpOwogCi0gICAgICAg
IGF1dG8gZm9yd2FyZFNwcmVhZCA9IHJlY3Vyc2FibGVMYW1iZGEoW3RoaXMsICZjYWNoZWRTcHJl
YWRMZW5ndGhzLCAmdGFyZ2V0U3RhcnRdKGF1dG8gc2VsZiwgTm9kZSogdGFyZ2V0LCBMVmFsdWUg
c3RvcmVJbmRleCkgLT4gTFZhbHVlIHsKKyAgICAgICAgYXV0byBmb3J3YXJkU3ByZWFkID0gcmVj
dXJzYWJsZUxhbWJkYShbdGhpcywgJnRhcmdldFN0YXJ0XShhdXRvIHNlbGYsIE5vZGUqIHRhcmdl
dCwgTFZhbHVlIHN0b3JlSW5kZXgpIC0+IExWYWx1ZSB7CiAgICAgICAgICAgICBpZiAodGFyZ2V0
LT5vcCgpID09IFBoYW50b21TcHJlYWQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYodGFy
Z2V0LT5jaGlsZDEoKS5ub2RlKCksIHN0b3JlSW5kZXgpOwogCkBAIC05ODUzLDggKzk3ODIsOSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodGFyZ2V0LT5vcCgpID09IFBo
YW50b21DcmVhdGVSZXN0KTsKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lID0gdGFyZ2V0LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAKLSAg
ICAgICAgICAgIExWYWx1ZSBzb3VyY2VTdGFydCA9IHRoaXMtPmdldEFyZ3VtZW50c1N0YXJ0KGlu
bGluZUNhbGxGcmFtZSwgdGFyZ2V0LT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpKTsKLSAgICAg
ICAgICAgIExWYWx1ZSBzcHJlYWRMZW5ndGggPSBtX291dC56ZXJvRXh0UHRyKGNhY2hlZFNwcmVh
ZExlbmd0aHMuZ2V0KGlubGluZUNhbGxGcmFtZSkpOworICAgICAgICAgICAgYXV0byBudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCA9IHRhcmdldC0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKKyAg
ICAgICAgICAgIExWYWx1ZSBzb3VyY2VTdGFydCA9IHRoaXMtPmdldEFyZ3VtZW50c1N0YXJ0KGlu
bGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApOworICAgICAgICAgICAgTFZh
bHVlIHNwcmVhZExlbmd0aCA9IG1fb3V0Lnplcm9FeHRQdHIoZ2V0U3ByZWFkTGVuZ3RoRnJvbUlu
bGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSk7
CiAKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxvb3AgPSBtX291dC5uZXdCbG9jaygpOwogICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKQEAg
LTEyMzY2LDggKzEyMjk2LDggQEAgcHJpdmF0ZToKICAgICAgICAgTFZhbHVlIHNjb3BlID0gbG93
Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKIAogICAgICAgICBtX291dC5zdG9yZVB0cihtX2NhbGxG
cmFtZSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2ZyYW1lKTsKLSAgICAg
ICAgbV9vdXQuc3RvcmVQdHIobV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKDApKSwgcGFja2V0LCBt
X2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2NhbGxlckZyYW1lKTsKLSAgICAgICAgbV9vdXQu
c3RvcmVQdHIobV9vdXQubG9hZFB0cihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkp
LCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9QYWNrZXRfY2FsbGVlKTsKKyAgICAgICAg
bV9vdXQuc3RvcmVQdHIobV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3Rlcigw
KSkpLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9QYWNrZXRfY2FsbGVyRnJhbWUpOwor
ICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5sb2FkUHRyKHBheWxvYWRGb3IoVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0No
aWNrZW5fUGFja2V0X2NhbGxlZSk7CiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKHNjb3BlLCBwYWNr
ZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9QYWNrZXRfc2NvcGUpOwogICAgIH0KICAgICAKQEAg
LTEyNDI4LDcgKzEyMzU4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgQXJndW1lbnRzTGVuZ3RoIGxl
bmd0aDsKIAogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpKSB7Ci0gICAgICAgICAgICBsZW5ndGgua25vd24gPSBpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsKKyAgICAgICAgICAgIGxlbmd0aC5r
bm93biA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzIC0gMSk7CiAgICAgICAgICAgICBsZW5ndGguaXNLbm93biA9IHRydWU7
CiAgICAgICAgICAgICBsZW5ndGgudmFsdWUgPSBtX291dC5jb25zdEludDMyKGxlbmd0aC5rbm93
bik7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xMjQ1OCw3ICsxMjM4OCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihmcmFtZS0+Y2Fs
bGVlUmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpKTsKICAgICAgICAgICAgIHJldHVybiB3ZWFr
UG9pbnRlcihmcmFtZS0+Y2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQoKS5hc0NlbGwoKSk7CiAgICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90OjpjYWxsZWUpKTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihW
aXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogICAgIH0KICAgICAKICAg
ICBMVmFsdWUgZ2V0QXJndW1lbnRzU3RhcnQoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUsIHVuc2lnbmVkIG9mZnNldCA9IDApCkBAIC0xNzcyMyw3ICsxNzY1Myw3IEBAIHByaXZhdGU6
CiAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IG1fZnRsU3RhdGUuaml0Q29k
ZS0+Y29tbW9uLmFkZENvZGVPcmlnaW4oY29kZU9yaWdpbik7CiAgICAgICAgIG1fb3V0LnN0b3Jl
MzIoCiAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwK
LSAgICAgICAgICAgIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcykpOworICAgICAgICAgICAgdGFnRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKICNpZiAhVVNFKEJVSUxUSU5fRlJBTUVf
QUREUkVTUykgfHwgQVNTRVJUX0VOQUJMRUQKICAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9jYWxs
RnJhbWUsIG1fb3V0LmFic29sdXRlKCZ2bSgpLnRvcENhbGxGcmFtZSkpOwogI2VuZGlmCkBAIC0x
NzgzMSw3ICsxNzc2MSw4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiAmbV9mdGxTdGF0ZS5q
aXRDb2RlLT5vc3JFeGl0RGVzY3JpcHRvcnMuYWxsb2MoCiAgICAgICAgICAgICBsb3dWYWx1ZS5m
b3JtYXQoKSwgcHJvZmlsZSwKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxz
Lm51bWJlck9mQXJndW1lbnRzKCksCi0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2Fscy5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1f
bG9jYWxzLm51bWJlck9mTG9jYWxzKCksCisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5t
X2xvY2Fscy5udW1iZXJPZlRtcHMoKSk7CiAgICAgfQogCiAgICAgdm9pZCBhcHBlbmRPU1JFeGl0
KApAQCAtMTc5MzYsMTUgKzE3ODY3LDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9KTsKICAg
ICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0RGVzY3JpcHRvci0+
bV92YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGludCBvcGVyYW5kID0gZXhpdERl
c2NyaXB0b3ItPm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgIE9wZXJh
bmQgb3BlcmFuZCA9IGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkgPSBh
dmFpbGFiaWxpdHlNYXAubV9sb2NhbHNbaV07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlm
IChPcHRpb25zOjp2YWxpZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcygpCiAgICAgICAgICAgICAgICAg
JiYgbV9ncmFwaC5tX3BsYW4ubW9kZSgpICE9IEZUTEZvck9TUkVudHJ5TW9kZSkgewogCi0gICAg
ICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5pc0RlYWQoKSAmJiBtX2dyYXBoLmlzTGl2ZUlu
Qnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBleGl0T3JpZ2luKSkKLSAgICAgICAg
ICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgdG9DU3RyaW5nKCJMaXZlIGJ5
dGVjb2RlIGxvY2FsIG5vdCBhdmFpbGFibGU6IG9wZXJhbmQgPSAiLCBWaXJ0dWFsUmVnaXN0ZXIo
b3BlcmFuZCksICIsIGF2YWlsYWJpbGl0eSA9ICIsIGF2YWlsYWJpbGl0eSwgIiwgb3JpZ2luID0g
IiwgZXhpdE9yaWdpbikuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmlsaXR5
LmlzRGVhZCgpICYmIG1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShvcGVyYW5kLCBleGl0T3JpZ2lu
KSkKKyAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgdG9DU3Ry
aW5nKCJMaXZlIGJ5dGVjb2RlIGxvY2FsIG5vdCBhdmFpbGFibGU6IG9wZXJhbmQgPSAiLCBvcGVy
YW5kLCAiLCBhdmFpbGFiaWxpdHkgPSAiLCBhdmFpbGFiaWxpdHksICIsIG9yaWdpbiA9ICIsIGV4
aXRPcmlnaW4pLmRhdGEoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBFeGl0VmFsdWUg
ZXhpdFZhbHVlID0gZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KGFyZ3VtZW50cywgbWFwLCBhdmFp
bGFiaWxpdHkpOwogICAgICAgICAgICAgaWYgKGV4aXRWYWx1ZS5oYXNJbmRleEluU3RhY2ttYXBM
b2NhdGlvbnMoKSkKQEAgLTE4MjQ0LDM5ICsxODE3NSwzOSBAQCBwcml2YXRlOgogICAgICAgICBy
ZXR1cm4gbV9vdXQuYWxyZWFkeVJlZ2lzdGVyZWRXZWFrUG9pbnRlcihtX2dyYXBoLCBzdHJ1Y3R1
cmUuZ2V0KCkpOwogICAgIH0KICAgICAKLSAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihMVmFs
dWUgYmFzZSwgaW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQorICAgIFR5cGVkUG9p
bnRlciBhZGRyZXNzRm9yKExWYWx1ZSBiYXNlLCBPcGVyYW5kIG9wZXJhbmQsIHB0cmRpZmZfdCBv
ZmZzZXQgPSAwKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3V0LmFkZHJlc3MoYmFzZSwgbV9o
ZWFwcy52YXJpYWJsZXNbb3BlcmFuZF0sIG9mZnNldCk7CisgICAgICAgIHJldHVybiBtX291dC5h
ZGRyZXNzKGJhc2UsIG1faGVhcHMudmFyaWFibGVzW29wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCku
b2Zmc2V0KCldLCBvZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZvcihM
VmFsdWUgYmFzZSwgaW50IG9wZXJhbmQpCisgICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoTFZh
bHVlIGJhc2UsIE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRyZXNz
Rm9yKGJhc2UsIG9wZXJhbmQsIFBheWxvYWRPZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50
ZXIgdGFnRm9yKExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFuZCkKKyAgICBUeXBlZFBvaW50ZXIgdGFn
Rm9yKExWYWx1ZSBiYXNlLCBPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4g
YWRkcmVzc0ZvcihiYXNlLCBvcGVyYW5kLCBUYWdPZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBv
aW50ZXIgYWRkcmVzc0ZvcihpbnQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCisgICAg
VHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoT3BlcmFuZCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0
ID0gMCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3Rlcihv
cGVyYW5kKSwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Iob3BlcmFuZC52aXJ0
dWFsUmVnaXN0ZXIoKSwgb2Zmc2V0KTsKICAgICB9CiAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3NG
b3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQogICAgIHsK
ICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpKQotICAgICAgICAgICAgcmV0dXJuIGFkZHJl
c3NGb3IobV9jYXB0dXJlZCwgb3BlcmFuZC5vZmZzZXQoKSwgb2Zmc2V0KTsKLSAgICAgICAgcmV0
dXJuIGFkZHJlc3NGb3IobV9jYWxsRnJhbWUsIG9wZXJhbmQub2Zmc2V0KCksIG9mZnNldCk7Cisg
ICAgICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhcHR1cmVkLCBvcGVyYW5kLCBvZmZzZXQp
OworICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhbGxGcmFtZSwgb3BlcmFuZCwgb2Zmc2V0
KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoaW50IG9wZXJhbmQpCisgICAg
VHlwZWRQb2ludGVyIHBheWxvYWRGb3IoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpKTsKKyAgICAgICAgcmV0
dXJuIHBheWxvYWRGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogICAgIFR5
cGVkUG9pbnRlciBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIGFkZHJlc3NGb3Iob3BlcmFuZCwgUGF5bG9hZE9mZnNldCk7CiAgICAgfQot
ICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoaW50IG9wZXJhbmQpCisgICAgVHlwZWRQb2ludGVyIHRh
Z0ZvcihPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICByZXR1cm4gdGFnRm9yKFZpcnR1
YWxSZWdpc3RlcihvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiB0YWdGb3Iob3BlcmFuZC52aXJ0
dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFbnRyeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVu
dHJ5LmNwcAppbmRleCA5MzMxNzcxMGY2ZDA2ODYwOTE5YmMwMDI1MzEzYTEzMjE5MDQ0OTE5Li4w
OTFlN2YzYzliNDk4MzQwNzZhOGQ2ZjkxNzQyY2NiNWNhZDVlYTk2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcApAQCAtNzUsNyArNzUsNyBAQCB2b2lkKiBwcmVw
YXJlT1NSRW50cnkoCiAgICAgICAgIGRhdGFMb2coIiAgICBWYWx1ZXMgYXQgZW50cnk6ICIsIHZh
bHVlcywgIlxuIik7CiAgICAgCiAgICAgZm9yIChpbnQgYXJndW1lbnQgPSB2YWx1ZXMubnVtYmVy
T2ZBcmd1bWVudHMoKTsgYXJndW1lbnQtLTspIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZU9uU3Rh
Y2sgPSBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpLm9m
ZnNldCgpKS5hc2FuVW5zYWZlSlNWYWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHZhbHVlT25TdGFj
ayA9IGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpLmFz
YW5VbnNhZmVKU1ZhbHVlKCk7CiAgICAgICAgIE9wdGlvbmFsPEpTVmFsdWU+IHJlY29uc3RydWN0
ZWRWYWx1ZSA9IHZhbHVlcy5hcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgIGlmICgocmVjb25z
dHJ1Y3RlZFZhbHVlICYmIHZhbHVlT25TdGFjayA9PSByZWNvbnN0cnVjdGVkVmFsdWUudmFsdWUo
KSkgfHwgIWFyZ3VtZW50KQogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0LmNwcAppbmRleCAwOTk1OGQyYzRmOWE1ZDg5YjVmYmJiNjVmODZi
YjZkYWJjZGYxOGUzLi4wNGM4NTc5OWU0ZDQ2OTIzYTMxODY3MThlMTlmMjRiZGZmZGFiYTRmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAKQEAgLTQ3LDEwICs0Nywx
MCBAQCB1c2luZyBuYW1lc3BhY2UgREZHOwogCiBPU1JFeGl0RGVzY3JpcHRvcjo6T1NSRXhpdERl
c2NyaXB0b3IoCiAgICAgRGF0YUZvcm1hdCBwcm9maWxlRGF0YUZvcm1hdCwgTWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZSB2YWx1ZVByb2ZpbGUsCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1
bWVudHMsIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzKQorICAgIHVuc2lnbmVkIG51bWJlck9mQXJn
dW1lbnRzLCB1bnNpZ25lZCBudW1iZXJPZkxvY2FscywgdW5zaWduZWQgbnVtYmVyT2ZUbXBzKQog
ICAgIDogbV9wcm9maWxlRGF0YUZvcm1hdChwcm9maWxlRGF0YUZvcm1hdCkKICAgICAsIG1fdmFs
dWVQcm9maWxlKHZhbHVlUHJvZmlsZSkKLSAgICAsIG1fdmFsdWVzKG51bWJlck9mQXJndW1lbnRz
LCBudW1iZXJPZkxvY2FscykKKyAgICAsIG1fdmFsdWVzKG51bWJlck9mQXJndW1lbnRzLCBudW1i
ZXJPZkxvY2FscywgbnVtYmVyT2ZUbXBzKQogewogfQogCkBAIC0xMTcsNSArMTE3LDMgQEAgQ29k
ZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBPU1JFeGl0Ojpjb2RlTG9jYXRpb25Gb3JS
ZXBhdGNoKENvZGVCbG9jayogZnQKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlm
IC8vIEVOQUJMRShGVExfSklUKQotCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT1NSRXhpdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
LmgKaW5kZXggZGE4N2NjZjMyNzNmZTRiZTM2MDY4M2I4YWYzYmJmNTE2ZDYyMjVlYi4uZmQ3Zjlm
MDViYzQ4OWMxZjZhZWNlMDk3YWQ4YTRkMWUyN2I4MDMyMiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFeGl0LmgKQEAgLTY5LDcgKzY5LDcgQEAgc3RydWN0IE9TUkV4aXRIYW5kbGU7
CiBzdHJ1Y3QgT1NSRXhpdERlc2NyaXB0b3IgewogICAgIE9TUkV4aXREZXNjcmlwdG9yKAogICAg
ICAgICBEYXRhRm9ybWF0IHByb2ZpbGVEYXRhRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlLAotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVt
YmVyT2ZMb2NhbHMpOworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWdu
ZWQgbnVtYmVyT2ZMb2NhbHMsIHVuc2lnbmVkIG51bWJlck9mVG1wcyk7CiAKICAgICAvLyBUaGUg
Zmlyc3QgYXJndW1lbnQgdG8gdGhlIGV4aXQgY2FsbCBtYXkgYmUgYSB2YWx1ZSB3ZSB3aXNoIHRv
IHByb2ZpbGUuCiAgICAgLy8gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGUgZm9ybWF0IHdpbGwgYmUg
bm90IEludmFsaWQgYW5kIHdlJ2xsIGhhdmUgYQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCmluZGV4IDY2NGQzYjk4OGFmN2VhODNmNmZiODJi
Y2IzYThjMGE4ODE3NmVlNzIuLjIxNzE1ZDNkZDIyYzM4NzllYjA0ZmI2Yjc4ZTc5NTI4NGY1ZTAz
OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBp
bGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxl
ci5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUg
IkJ5dGVjb2RlU3RydWN0cy5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRl
LmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgiCiAjaW5jbHVkZSAiRlRM
RXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKQEAgLTM3
LDEwICszOCwxMSBAQAogI2luY2x1ZGUgIkZUTE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJGVExT
dGF0ZS5oIgogI2luY2x1ZGUgIkZUTFNhdmVSZXN0b3JlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZv
clNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgotI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJQcm9iZUNvbnRleHQuaCIKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBGVEwgewogCkBAIC00NzQsMTYgKzQ3Niw1MiBAQCBzdGF0aWMgdm9pZCBj
b21waWxlU3R1YihWTSYgdm0sIHVuc2lnbmVkIGV4aXRJRCwgSklUQ29kZSogaml0Q29kZSwgT1NS
RXhpdCYgZXhpdAogCiAgICAgc2l6ZV90IGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxl
ZVNhdmVzID0gYmFzZWxpbmVDb2RlQmxvY2stPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lz
dGVycygpOwogCisgICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZVN0YWNrQ29udGFpbnNB
Y3RpdmVDaGVja3BvaW50KCkpIHsKKyAgICAgICAgSlNWYWx1ZSogdG1wU2NyYXRjaCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KHNjcmF0Y2ggKyBleGl0Lm1fZGVzY3JpcHRvci0+bV92YWx1
ZXMudG1wSW5kZXgoMCkpOworICAgICAgICBWTSogdm1QdHIgPSAmdm07CisgICAgICAgIGppdC5w
cm9iZShbPV0gKFByb2JlOjpDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICBhdXRvIGFk
ZFNpZGVTdGF0ZSA9IFsmXSAoQ2FsbEZyYW1lKiBmcmFtZSwgQnl0ZWNvZGVJbmRleCBpbmRleCwg
c2l6ZV90IHRtcE9mZnNldCkgeworICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVj
a3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gc2lkZVN0YXRlID0gV1RGOjptYWtlVW5pcXVlPENoZWNr
cG9pbnRPU1JFeGl0U2lkZVN0YXRlPigpOworCisgICAgICAgICAgICAgICAgc2lkZVN0YXRlLT5i
eXRlY29kZUluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtYXhOdW1DaGVja3BvaW50VG1wczsgKytpKQorICAgICAgICAgICAgICAgICAgICBzaWRl
U3RhdGUtPnRtcHNbaV0gPSB0bXBTY3JhdGNoW2kgKyB0bXBPZmZzZXRdOworCisgICAgICAgICAg
ICAgICAgdm1QdHItPmFkZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoZnJhbWUsIFdURk1vdmUoc2lk
ZVN0YXRlKSk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBjb25zdCBDb2RlT3JpZ2lu
KiBjb2RlT3JpZ2luOworICAgICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0
LmdwcjxDYWxsRnJhbWUqPihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgICAg
ICBmb3IgKGNvZGVPcmlnaW4gPSAmZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4gJiYgY29k
ZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLT5pbmxp
bmVDYWxsRnJhbWUoKS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMoKSkgeworICAgICAgICAg
ICAgICAgIEJ5dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5ieXRl
Y29kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjYWxsQnl0ZWNvZGVJbmRleC5jaGVj
a3BvaW50KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAg
ICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7
CisgICAgICAgICAgICAgICAgYWRkU2lkZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbEZyYW1l
Kj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY2FsbEZyYW1lKSArIGlubGluZUNhbGxGcmFtZS0+
cmV0dXJuUENPZmZzZXQoKSAtIHNpemVvZihDUFVSZWdpc3RlcikpLCBjYWxsQnl0ZWNvZGVJbmRl
eCwgaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIWNvZGVPcmlnaW4pCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
ICAgICBpZiAoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+Ynl0ZWNv
ZGVJbmRleCgpOyBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgICAgICAgICBh
ZGRTaWRlU3RhdGUoY2FsbEZyYW1lLCBieXRlY29kZUluZGV4LCAwKTsKKyAgICAgICAgfSk7Cisg
ICAgfQorCiAgICAgLy8gTm93IGdldCBzdGF0ZSBvdXQgb2YgdGhlIHNjcmF0Y2ggYnVmZmVyIGFu
ZCBwbGFjZSBpdCBiYWNrIGludG8gdGhlIHN0YWNrLiBUaGUgdmFsdWVzIGFyZQogICAgIC8vIGFs
cmVhZHkgcmVib3hlZCBzbyB3ZSBqdXN0IG1vdmUgdGhlbS4KICAgICBmb3IgKHVuc2lnbmVkIGlu
ZGV4ID0gZXhpdC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLnNpemUoKTsgaW5kZXgtLTspIHsKLSAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlcy52
aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChpbmRleCk7CisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9
IGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOworCisg
ICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICBpZiAocmVnLmlzTG9jYWwoKSAmJiByZWcudG9Mb2NhbCgpIDwgc3RhdGljX2Nhc3Q8aW50
PihiYXNlbGluZVZpcnR1YWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlcykpCisgICAgICAgIGlmIChv
cGVyYW5kLmlzTG9jYWwoKSAmJiBvcGVyYW5kLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGludD4o
YmFzZWxpbmVWaXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKICAgICAgICAgaml0LmxvYWQ2NChzY3JhdGNoICsgaW5kZXgsIEdQUkluZm86OnJl
Z1QwKTsKLSAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0ZvcihyZWcpKTsKKyAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAs
IEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKSk7
CiAgICAgfQogICAgIAogICAgIGhhbmRsZUV4aXRDb3VudHModm0sIGppdCwgZXhpdCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAppbmRleCA0NDdjMDBhNzNk
NTVkMGUwYjk2YTQxY2I1MGE3ZmMyNmMwYmRmNjA1Li4wMDY5YTNhNmU2ZmUxZGVmNjk2ODliMzhi
MjIzYWYwNDRiMTgyOTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0
aW9ucy5jcHAKQEAgLTU0MSw3ICs1NDEsNyBAQCBleHRlcm4gIkMiIEpTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKEpTR2xvYmFsT2JqZWN0KgogICAg
ICAgICAgICAgLy8gV2UgYWxzbyBjYW5ub3QgYWxsb2NhdGUgYSBuZXcgYnV0dGVyZmx5IGZyb20g
Y29tcGlsYXRpb24gdGhyZWFkcyBzaW5jZSBpdCdzIGludmFsaWQgdG8gYWxsb2NhdGUgY2VsbHMg
ZnJvbQogICAgICAgICAgICAgLy8gYSBjb21waWxhdGlvbiB0aHJlYWQuCiAgICAgICAgICAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgICAgICAgICAgY29kZUJsb2NrLT5jb25zdGFudFJl
Z2lzdGVyKG5ld0FycmF5QnVmZmVyLm1faW1tdXRhYmxlQnV0dGVyZmx5Lm9mZnNldCgpKS5zZXQo
dm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAgICAgICAgIGNvZGVCbG9j
ay0+Y29uc3RhbnRSZWdpc3RlcihuZXdBcnJheUJ1ZmZlci5tX2ltbXV0YWJsZUJ1dHRlcmZseSku
c2V0KHZtLCBjb2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7CiAgICAgICAgICAgICBXVEY6
OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT3V0cHV0LmNwcAppbmRleCA3NDkzM2RjNjA1MTVjNWRhMDBlYTE4ZmM3ZDVkYjNhZDljZTVl
OWNmLi5kNTdmYjFlZWE4MDQ0YTM0Yjc5MTc2OGE5MDk3Njk4OTk4YWMzMzkyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjU1LDE1ICs2NTUsMzcgQEAgTFZh
bHVlIE91dHB1dDo6bm90WmVybzY0KExWYWx1ZSB2YWx1ZSkKICAgICByZXR1cm4gbV9ibG9jay0+
YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6Tm90RXF1YWwsIG9yaWdpbigpLCB2YWx1
ZSwgaW50NjRaZXJvKTsKIH0KIAotTFZhbHVlIE91dHB1dDo6c2VsZWN0KExWYWx1ZSB2YWx1ZSwg
TFZhbHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4pCitMVmFsdWUgT3V0cHV0OjpzZWxlY3QoTFZh
bHVlIHZhbHVlLCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0LCBTZWxlY3RQcmVkaWN0YWJpbGl0
eSBwcmVkaWN0YWJpbGl0eSkKIHsKICAgICBpZiAodmFsdWUtPmhhc0ludDMyKCkpIHsKICAgICAg
ICAgaWYgKHZhbHVlLT5hc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdGFrZW47CisgICAg
ICAgICAgICByZXR1cm4gbGVmdDsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIG5v
dFRha2VuOworICAgICAgICAgICAgcmV0dXJuIHJpZ2h0OwogICAgIH0KLSAgICByZXR1cm4gbV9i
bG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwg
dmFsdWUsIHRha2VuLCBub3RUYWtlbik7CisKKyAgICBpZiAocHJlZGljdGFiaWxpdHkgPT0gU2Vs
ZWN0UHJlZGljdGFiaWxpdHk6Ok5vdFByZWRpY3RhYmxlKQorICAgICAgICByZXR1cm4gbV9ibG9j
ay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwgdmFs
dWUsIGxlZnQsIHJpZ2h0KTsKKworICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG5ld0Js
b2NrKCk7CisgICAgTEJhc2ljQmxvY2sgbGVmdFRha2VuQmxvY2sgPSBuZXdCbG9jaygpOworICAg
IExCYXNpY0Jsb2NrIHJpZ2h0VGFrZW5CbG9jayA9IG5ld0Jsb2NrKCk7CisKKyAgICBtX2Jsb2Nr
LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgIG1fcHJvYywgQjM6OkJyYW5jaCwgb3Jp
Z2luKCksIHZhbHVlLAorICAgICAgICBGcmVxdWVudGVkQmxvY2sobGVmdFRha2VuQmxvY2ssIHBy
ZWRpY3RhYmlsaXR5ICE9IFNlbGVjdFByZWRpY3RhYmlsaXR5OjpSaWdodExpa2VseSA/IEZyZXF1
ZW5jeUNsYXNzOjpOb3JtYWwgOiBGcmVxdWVuY3lDbGFzczo6UmFyZSksCisgICAgICAgIEZyZXF1
ZW50ZWRCbG9jayhyaWdodFRha2VuQmxvY2ssIHByZWRpY3RhYmlsaXR5ICE9IFNlbGVjdFByZWRp
Y3RhYmlsaXR5OjpMZWZ0TGlrZWx5ID8gRnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbCA6IEZyZXF1ZW5j
eUNsYXNzOjpSYXJlKSk7CisKKyAgICBMVmFsdWUgcGhpID0gY29udGludWF0aW9uLT5hcHBlbmRO
ZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpQaGksIGxlZnQtPnR5cGUoKSwgb3JpZ2luKCkpOwor
CisgICAgbGVmdFRha2VuQmxvY2stPmFwcGVuZE5ldzxCMzo6VXBzaWxvblZhbHVlPihtX3Byb2Ms
IG9yaWdpbigpLCBsZWZ0LCBwaGkpOworICAgIGxlZnRUYWtlbkJsb2NrLT5hcHBlbmROZXdDb250
cm9sVmFsdWUobV9wcm9jLCBCMzo6SnVtcCwgb3JpZ2luKCksIEIzOjpGcmVxdWVudGVkQmxvY2so
Y29udGludWF0aW9uKSk7CisKKyAgICByaWdodFRha2VuQmxvY2stPmFwcGVuZE5ldzxCMzo6VXBz
aWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCByaWdodCwgcGhpKTsKKyAgICByaWdodFRha2Vu
QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpKdW1wLCBvcmlnaW4oKSwg
QjM6OkZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsKKworICAgIG1fYmxvY2sgPSBjb250
aW51YXRpb247CisgICAgcmV0dXJuIHBoaTsKIH0KIAogTFZhbHVlIE91dHB1dDo6YXRvbWljWGNo
Z0FkZChMVmFsdWUgb3BlcmFuZCwgVHlwZWRQb2ludGVyIHBvaW50ZXIsIFdpZHRoIHdpZHRoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKaW5kZXggYzU2YjRlZjdlMDYwZjkzNjJi
M2JkY2EwZmQ0NmEwM2FhNTcwY2EyZS4uNGMwMmIzNDA4NTE0NmY3ZGYwMjU2MjdkNWZmMzFjNzgx
MGQ4ZmI3NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCkBAIC0zOSw2ICsz
OSw3IEBACiAjaW5jbHVkZSAiRlRMQWJicmV2aWF0ZWRUeXBlcy5oIgogI2luY2x1ZGUgIkZUTEFi
c3RyYWN0SGVhcFJlcG9zaXRvcnkuaCIKICNpbmNsdWRlICJGVExDb21tb25WYWx1ZXMuaCIKKyNp
bmNsdWRlICJGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oIgogI2luY2x1ZGUgIkZUTFN0YXRlLmgi
CiAjaW5jbHVkZSAiRlRMU3dpdGNoQ2FzZS5oIgogI2luY2x1ZGUgIkZUTFR5cGVkUG9pbnRlci5o
IgpAQCAtMzY1LDcgKzM2Niw3IEBAIHB1YmxpYzoKICAgICBMVmFsdWUgdGVzdElzWmVyb1B0cihM
VmFsdWUgdmFsdWUsIExWYWx1ZSBtYXNrKSB7IHJldHVybiBpc051bGwoYml0QW5kKHZhbHVlLCBt
YXNrKSk7IH0KICAgICBMVmFsdWUgdGVzdE5vblplcm9QdHIoTFZhbHVlIHZhbHVlLCBMVmFsdWUg
bWFzaykgeyByZXR1cm4gbm90TnVsbChiaXRBbmQodmFsdWUsIG1hc2spKTsgfQogCi0gICAgTFZh
bHVlIHNlbGVjdChMVmFsdWUgdmFsdWUsIExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2VuKTsK
KyAgICBMVmFsdWUgc2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHRha2VuLCBMVmFsdWUgbm90
VGFrZW4sIFNlbGVjdFByZWRpY3RhYmlsaXR5ID0gU2VsZWN0UHJlZGljdGFiaWxpdHk6Ok5vdFBy
ZWRpY3RhYmxlKTsKICAgICAKICAgICAvLyBUaGVzZSBhcmUgcmVsYXhlZCBhdG9taWNzIGJ5IGRl
ZmF1bHQuIFVzZSBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0ZUZlbmNlZEFjY2Vzcygp
IHdpdGggYQogICAgIC8vIG5vbi1udWxsIGhlYXAgdG8gbWFrZSB0aGVtIHNlcV9jc3QgZmVuY2Vk
LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTZWxlY3RQcmVkaWN0
YWJpbGl0eS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTZWxlY3RQcmVkaWN0YWJp
bGl0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjc2MDJhY2ZmZTQwNDQ1NTUxMDBlYjQ1ZDhmNmEwMzA5ZjM1ODEx
ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNlbGVj
dFByZWRpY3RhYmlsaXR5LmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShGVExf
SklUKQorCituYW1lc3BhY2UgSlNDOjpGVEwgeworCitlbnVtIGNsYXNzIFNlbGVjdFByZWRpY3Rh
YmlsaXR5IDogdWludDhfdCB7CisgICAgLy8gVXNlIHRoaXMgd2hlbiB3ZSBleHBlY3QgaXQgdG8g
YmUgdmVyeSB1bmxpa2VseSB0aGUgYnJhbmNoIHByZWRpY3RvciB3aWxsIGJlIGFibGUgdG8gZ3Vl
c3Mgd2hpY2ggc2lkZSBvZiB0aGUgc2VsZWN0IHdpbGwgYmUgY2hvc2VuLiBUaGlzIHRlbGxzIEIz
IHRvIHRyeSB0byBlbWl0IHRoZSBzZWxlY3QgYXMgYSBjb25kaXRpb25hbCBtb3ZlLCB3aGljaCAo
dXN1YWxseSkgaXMgbm90IHNwZWN1bGF0ZWQgYnkgdGhlIENQVS4KKyAgICBOb3RQcmVkaWN0YWJs
ZSwKKyAgICAvLyBVc2UgdGhpcyB3aGVuIGl0J3MgcG9zc2libGUgYSBicmFuY2ggcHJlZGljdG9y
IHdpbGwgZG8gYSBnb29kIGpvYiBndWVzc2luZyB0aGUgc2VsZWN0ZWQgdmFsdWUgYnV0IHdlIGRv
bid0IGtub3cgYSBwcmlvcmkgd2hpY2ggc2lkZSBpcyBtb3JlIGxpa2VseS4KKyAgICBQcmVkaWN0
YWJsZSwKKyAgICAvLyBVc2UgdGhlc2Ugd2hlbiB3ZSBhcmUgdmVyeSBzdXJlIG9uZSBvZiB0aGUg
dHdvIHNpZGVzIGlzIHN1YnN0YW50aWFsbHkgbW9yZSBsaWtlbHkgdGhhbiB0aGUgb3RoZXIuCisg
ICAgTGVmdExpa2VseSwKKyAgICBSaWdodExpa2VseSwKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
Qzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCmluZGV4IGZlMmE0ZWM3MjZjZWNlZDM0MTMwOTM5OTQ5
NGVhOWViN2U2YjRiNWYuLjcwZDI4OGUwM2YxZDhkODFmMjc3ZjZiODIxN2FjOWYzZmE4MGMxMmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaApAQCAtMTAw
LDcgKzEwMCw3IEBAIFNsb3dQYXRoQ2FsbCBjYWxsT3BlcmF0aW9uKAogICAgIGlmIChjYWxsU2l0
ZUluZGV4KSB7CiAgICAgICAgIGppdC5zdG9yZTMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAotICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
KTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKICAgICB9CiAgICAgcmV0
dXJuIGNhbGxPcGVyYXRpb24odm0sIHVzZWRSZWdpc3RlcnMsIGppdCwgZXhjZXB0aW9uVGFyZ2V0
LCBmdW5jdGlvbiwgcmVzdWx0R1BSLCBhcmd1bWVudHMuLi4pOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9DaGVja3BvaW50cy5yYiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9nZW5lcmF0b3IvQ2hlY2twb2ludHMucmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTZhNWY1Mjc3
ZGQ2MzFhY2Q0Y2NiZWNkMTRiMjRjYzVkNGEzOWEyNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvQ2hlY2twb2ludHMucmIKQEAgLTAsMCArMSw2NCBA
QAorIyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworY2xhc3MgQ2hlY2twb2lu
dAorICAgIGF0dHJfcmVhZGVyIDp1c2VzCisgICAgYXR0cl9yZWFkZXIgOmRlZnMKKyAgICBhdHRy
X3JlYWRlciA6bmFtZQorICAgIGF0dHJfcmVhZGVyIDppbmRleAorCisgICAgZGVmIGluaXRpYWxp
emUobmFtZSwgaW5kZXgsIHRtcHMpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAgICAgICBAaW5k
ZXggPSBpbmRleAorICAgICAgICBAdXNlcyA9IHRtcHMuZmlsdGVyIHsgfCh0bXAsIHVzZURlZil8
IHVzZURlZiA9PSA6dXNlIH0KKyAgICAgICAgQGRlZnMgPSB0bXBzLmZpbHRlciB7IHwodG1wLCB1
c2VEZWYpfCB1c2VEZWYgPT0gOmRlZmluZSB9CisgICAgZW5kCisKKyAgICBkZWYgbGl2ZW5lc3Mo
bmFtZXNwYWNlKQorICAgICAgICBFT0Y8LS0KKyAgICBjYXNlICN7bmFtZXNwYWNlfTo6I3tuYW1l
fToKK0VPRgorICAgIGVuZAorZW5kCisKK2NsYXNzIENoZWNrcG9pbnRzCisgICAgZGVmIGluaXRp
YWxpemUob3Bjb2RlLCB0bXBzLCBjaGVja3BvaW50cykKKyAgICAgICAgQG9wY29kZSA9IG9wY29k
ZQorICAgICAgICBAdG1wcyA9IHRtcHMKKyAgICAgICAgQGNoZWNrcG9pbnRzID0gY2hlY2twb2lu
dHMubWFwX3dpdGhfaW5kZXggeyB8KG5hbWUsIHRtcHMpLCBpbmRleHwgQ2hlY2twb2ludC5uZXco
bmFtZSwgaW5kZXgsIHRtcHMpIH0KKyAgICBlbmQKKworICAgIGRlZiBsaXZlbmVzcworICAgICAg
ICBAY2hlY2twb2ludHMuZWFjaCBkbyB8Y2hlY2twb2ludHwKKworICAgICAgICBlbmQKKyAgICAg
ICAgRU9GPC0tCitCaXRNYXA8bWF4TnVtVG1wcz4gdG1wTGl2ZW5lc3NGb3Ije0BvcGNvZGUuY2Fw
aXRhbGl6ZWRfbmFtZX0odWludDhfdCBjaGVja3BvaW50KQoreworICAgIHN3aXRjaCAoY2hlY2tw
b2ludCkgeworCisgICAgfQorfQorRU9GCisgICAgZW5kCitlbmQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJiIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2dlbmVyYXRvci9PcGNvZGUucmIKaW5kZXggNjg0YjMwMGU5ZDk4MTQxNDE2MTU3M2MwNjZh
OWIxMmQ2NzE3MGZjMi4uODIzNzRiN2ZiZTg2ZDU3ODhiM2E0MDU4MTU4YTg5OGQ2YTZhMjA4YyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIKQEAgLTMwLDYgKzMw
LDcgQEAgY2xhc3MgT3Bjb2RlCiAgICAgYXR0cl9yZWFkZXIgOmFyZ3MKICAgICBhdHRyX3JlYWRl
ciA6bWV0YWRhdGEKICAgICBhdHRyX3JlYWRlciA6ZXh0cmFzCisgICAgYXR0cl9yZWFkZXIgOmNo
ZWNrcG9pbnRzCiAKICAgICBtb2R1bGUgU2l6ZQogICAgICAgICBOYXJyb3cgPSAiT3Bjb2RlU2l6
ZTo6TmFycm93IgpAQCAtNDUsMTIgKzQ2LDE0IEBAIGNsYXNzIE9wY29kZQogICAgICAgICB0aWQK
ICAgICBlbmQKIAotICAgIGRlZiBpbml0aWFsaXplKHNlY3Rpb24sIG5hbWUsIGV4dHJhcywgYXJn
cywgbWV0YWRhdGEsIG1ldGFkYXRhX2luaXRpYWxpemVycykKKyAgICBkZWYgaW5pdGlhbGl6ZShz
ZWN0aW9uLCBuYW1lLCBleHRyYXMsIGFyZ3MsIG1ldGFkYXRhLCBtZXRhZGF0YV9pbml0aWFsaXpl
cnMsIHRtcHMsIGNoZWNrcG9pbnRzKQogICAgICAgICBAc2VjdGlvbiA9IHNlY3Rpb24KICAgICAg
ICAgQG5hbWUgPSBuYW1lCiAgICAgICAgIEBleHRyYXMgPSBleHRyYXMgfHwge30KICAgICAgICAg
QG1ldGFkYXRhID0gTWV0YWRhdGEubmV3IG1ldGFkYXRhLCBtZXRhZGF0YV9pbml0aWFsaXplcnMK
ICAgICAgICAgQGFyZ3MgPSBhcmdzLm1hcC53aXRoX2luZGV4IHsgfChhcmdfbmFtZSwgdHlwZSks
IGluZGV4fCBBcmd1bWVudC5uZXcgYXJnX25hbWUsIHR5cGUsIGluZGV4IH0gdW5sZXNzIGFyZ3Mu
bmlsPworICAgICAgICBAdG1wcyA9IHRtcHMKKyAgICAgICAgQGNoZWNrcG9pbnRzID0gY2hlY2tw
b2ludHMubWFwIHsgfChjaGVja3BvaW50LCBfKXwgY2hlY2twb2ludCB9IHVubGVzcyBjaGVja3Bv
aW50cy5uaWw/CiAgICAgZW5kCiAKICAgICBkZWYgY3JlYXRlX2lkIQpAQCAtMTI3LDYgKzEzMCw4
IEBAIGNsYXNzIE9wY29kZQogICAgICAgICA8PC1FT0YKIHN0cnVjdCAje2NhcGl0YWxpemVkX25h
bWV9IDogcHVibGljIEluc3RydWN0aW9uIHsKICAgICAje29wY29kZUlEfQorICAgICN7dGVtcHN9
CisgICAgI3tjaGVja3BvaW50VmFsdWVzfQogCiAje2VtaXR0ZXJ9CiAje2R1bXBlcn0KQEAgLTE0
MSw2ICsxNDYsMTggQEAgRU9GCiAgICAgICAgICJzdGF0aWMgY29uc3RleHByICN7b3Bjb2RlSURU
eXBlfSBvcGNvZGVJRCA9ICN7bmFtZX07IgogICAgIGVuZAogCisgICAgZGVmIGNoZWNrcG9pbnRW
YWx1ZXMKKyAgICAgICAgcmV0dXJuIGlmIEBjaGVja3BvaW50cy5uaWw/CisKKyAgICAgICAgWyJl
bnVtIENoZWNrcG9pbnRzIDogdWludDhfdCB7Il0uY29uY2F0KGNoZWNrcG9pbnRzLm1hcHsgfGNo
ZWNrcG9pbnR8ICIgICAgICAgICN7Y2hlY2twb2ludH0sIiB9KS5jb25jYXQoWyIgICAgICAgIG51
bWJlck9mQ2hlY2twb2ludHMsIiwgIiAgICB9OyJdKS5qb2luKCJcbiIpCisgICAgZW5kCisKKyAg
ICBkZWYgdGVtcHMKKyAgICAgICAgcmV0dXJuIGlmIEB0bXBzLm5pbD8KKworICAgICAgICBbImVu
dW0gVG1wcyA6IHVpbnQ4X3QgeyJdLmNvbmNhdChAdG1wcy5tYXAge3wodG1wLCB0eXBlKXwgIiAg
ICAgICAgI3t0bXB9LCJ9KS5wdXNoKCIgICAgfTsiKS5qb2luKCJcbiIpCisgICAgZW5kCisKICAg
ICBkZWYgZW1pdHRlcgogICAgICAgICBvcF93aWRlMTYgPSBBcmd1bWVudC5uZXcod2lkZTE2LCBv
cGNvZGVJRFR5cGUsIDApCiAgICAgICAgIG9wX3dpZGUzMiA9IEFyZ3VtZW50Lm5ldyh3aWRlMzIs
IG9wY29kZUlEVHlwZSwgMCkKQEAgLTIwOSw2ICsyMjYsNyBAQCBwcml2YXRlOgogICAgIHRlbXBs
YXRlPE9wY29kZVNpemUgX19zaXplLCBib29sIHJlY29yZE9wY29kZSwgdHlwZW5hbWUgQnl0ZWNv
ZGVHZW5lcmF0b3I+CiAgICAgc3RhdGljIGJvb2wgZW1pdEltcGwoQnl0ZWNvZGVHZW5lcmF0b3Iq
IGdlbiN7dHlwZWRfYXJnc30je21ldGFkYXRhX3BhcmFtfSkKICAgICB7CisgICAgICAgICN7IUBj
aGVja3BvaW50cy5uaWw/ID8gImdlbi0+c2V0VXNlc0NoZWNrcG9pbnRzKCk7IiA6ICIifQogICAg
ICAgICBpZiAoX19zaXplID09IE9wY29kZVNpemU6OldpZGUxNikKICAgICAgICAgICAgIGdlbi0+
YWxpZ25XaWRlT3Bjb2RlMTYoKTsKICAgICAgICAgZWxzZSBpZiAoX19zaXplID09IE9wY29kZVNp
emU6OldpZGUzMikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3Iv
U2VjdGlvbi5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlvbi5yYgpp
bmRleCAyMDRhYzc1OWUxM2VmZjE1MWY4Y2QxNzdmM2JmMWI3MGUwNzc5Y2FhLi42Njg1NWJhNjUw
MDgwZTRjMjNjYzBlYmVjMTBlNzk0OWNkZTc2OGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZ2VuZXJhdG9yL1NlY3Rpb24ucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2dlbmVyYXRvci9TZWN0aW9uLnJiCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIFNlY3Rpb24KICAg
ZW5kCiAKICAgZGVmIGNyZWF0ZV9vcGNvZGUobmFtZSwgY29uZmlnKQotICAgICAgT3Bjb2RlLm5l
dyhzZWxmLCBuYW1lLCBjb25maWdbOmV4dHJhc10sIGNvbmZpZ1s6YXJnc10sIGNvbmZpZ1s6bWV0
YWRhdGFdLCBjb25maWdbOm1ldGFkYXRhX2luaXRpYWxpemVyc10pCisgICAgICBPcGNvZGUubmV3
KHNlbGYsIG5hbWUsIGNvbmZpZ1s6ZXh0cmFzXSwgY29uZmlnWzphcmdzXSwgY29uZmlnWzptZXRh
ZGF0YV0sIGNvbmZpZ1s6bWV0YWRhdGFfaW5pdGlhbGl6ZXJzXSwgY29uZmlnWzp0bXBzXSwgY29u
ZmlnWzpjaGVja3BvaW50c10pCiAgIGVuZAogCiAgIGRlZiBhZGRfb3Bjb2RlX2dyb3VwKG5hbWUs
IG9wY29kZXMsIGNvbmZpZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKaW5kZXggNjc1
NDBkOTA3ZmRmZDdlNWY5YTRiNmMxOTA3MTkxZDY4ZmNiNjE3My4uNDM5NjMwNTA3ZDY0MzA3MGNh
NzRhYTA1OTE3YjMxM2M3MzhkOTNmYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAK
QEAgLTcyMSw2ICs3MjEsNyBAQCB2b2lkIEhlYXA6OmdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhD
b25zZXJ2YXRpdmVSb290cyYgcm9vdHMpCiAgICAgaWYgKCFWTTo6Y2FuVXNlSklUKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICBtX3ZtLmdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhyb290cyk7Cisg
ICAgbV92bS5zY2FuU2lkZVN0YXRlKHJvb3RzKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHJv
b3RzKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0NhbGxGcmFtZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2Fs
bEZyYW1lLmNwcAppbmRleCAyNDEwMWMwN2U4MDMxZDY0ZTMyZjI4NTRmOTQ2Mjk3OGZmZjAyMjBi
Li4yYzc3NWY5NDRmOGVlNzRkNDFjZTk5MjM2MjViNTgyNzY3NGVjYmY1IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcApAQCAtOTAsMjIgKzkw
LDIyIEBAIGJvb2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVDb2RlT3JpZ2luSW5kZXgoKSBj
b25zdAogCiB1bnNpZ25lZCBDYWxsRnJhbWU6OmNhbGxTaXRlQXNSYXdCaXRzKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
c10udGFnKCk7CisgICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyldLnRhZygpOwogfQogCiBTVVBQUkVTU19BU0FO
IHVuc2lnbmVkIENhbGxGcmFtZTo6dW5zYWZlQ2FsbFNpdGVBc1Jhd0JpdHMoKSBjb25zdAogewot
ICAgIHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
XS51bnNhZmVUYWcoKTsKKyAgICByZXR1cm4gdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKV0udW5zYWZlVGFnKCk7CiB9CiAKIENh
bGxTaXRlSW5kZXggQ2FsbEZyYW1lOjpjYWxsU2l0ZUluZGV4KCkgY29uc3QKIHsKLSAgICByZXR1
cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGNhbGxTaXRlQXNSYXdCaXRzKCkpKTsKKyAg
ICByZXR1cm4gQ2FsbFNpdGVJbmRleDo6ZnJvbUJpdHMoY2FsbFNpdGVBc1Jhd0JpdHMoKSk7CiB9
CiAKIFNVUFBSRVNTX0FTQU4gQ2FsbFNpdGVJbmRleCBDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRl
SW5kZXgoKSBjb25zdAogewotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgo
dW5zYWZlQ2FsbFNpdGVBc1Jhd0JpdHMoKSkpOworICAgIHJldHVybiBDYWxsU2l0ZUluZGV4Ojpm
cm9tQml0cyh1bnNhZmVDYWxsU2l0ZUFzUmF3Qml0cygpKTsKIH0KIAogY29uc3QgSW5zdHJ1Y3Rp
b24qIENhbGxGcmFtZTo6Y3VycmVudFZQQygpIGNvbnN0CkBAIC0xMTcsNyArMTE3LDggQEAgY29u
c3QgSW5zdHJ1Y3Rpb24qIENhbGxGcmFtZTo6Y3VycmVudFZQQygpIGNvbnN0CiB2b2lkIENhbGxG
cmFtZTo6c2V0Q3VycmVudFZQQyhjb25zdCBJbnN0cnVjdGlvbiogdnBjKQogewogICAgIENhbGxT
aXRlSW5kZXggY2FsbFNpdGUoY29kZUJsb2NrKCktPmJ5dGVjb2RlSW5kZXgodnBjKSk7Ci0gICAg
dGhpc1tDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc10udGFnKCkgPSBz
dGF0aWNfY2FzdDxpbnQzMl90PihjYWxsU2l0ZS5iaXRzKCkpOworICAgIHRoaXNbc3RhdGljX2Nh
c3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyldLnRhZygp
ID0gY2FsbFNpdGUuYml0cygpOworICAgIEFTU0VSVChjdXJyZW50VlBDKCkgPT0gdnBjKTsKIH0K
IAogdW5zaWduZWQgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCkgY29u
c3QKQEAgLTE0NCw3ICsxNDUsNyBAQCBCeXRlY29kZUluZGV4IENhbGxGcmFtZTo6Ynl0ZWNvZGVJ
bmRleCgpCiAgICAgfQogI2VuZGlmCiAgICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2Rl
T2Zmc2V0KCkpOwotICAgIHJldHVybiBCeXRlY29kZUluZGV4KGNhbGxTaXRlQml0c0FzQnl0ZWNv
ZGVPZmZzZXQoKSk7CisgICAgcmV0dXJuIGNhbGxTaXRlSW5kZXgoKS5ieXRlY29kZUluZGV4KCk7
CiB9CiAKIENvZGVPcmlnaW4gQ2FsbEZyYW1lOjpjb2RlT3JpZ2luKCkKQEAgLTE1OCw3ICsxNTks
NyBAQCBDb2RlT3JpZ2luIENhbGxGcmFtZTo6Y29kZU9yaWdpbigpCiAgICAgICAgIHJldHVybiBj
b2RlQmxvY2soKS0+Y29kZU9yaWdpbihpbmRleCk7CiAgICAgfQogI2VuZGlmCi0gICAgcmV0dXJu
IENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleChjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCkp
KTsKKyAgICByZXR1cm4gQ29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KCkuYnl0ZWNvZGVJbmRleCgp
KTsKIH0KIAogUmVnaXN0ZXIqIENhbGxGcmFtZTo6dG9wT2ZGcmFtZUludGVybmFsKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAppbmRleCA4YWJkZGI4
MTA2YjQxYjFhZTAzZDc1NzZhODAxZDdiZjkxZjIxNmM4Li4yZmRhMjQ2YjlhMGFjNDZiMDkxMGYy
OWQxNmVjMTFhMWRkYzcwNTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0NhbGxGcmFtZS5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiU3RhY2tWaXNpdG9y
LmgiCiAjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJWTUVudHJ5UmVjb3JkLmgiCisjaW5jbHVk
ZSA8d3RmL0VudW1DbGFzc09wZXJhdG9yT3ZlcmxvYWRzLmg+CiAKIG5hbWVzcGFjZSBKU0MgIHsK
IApAQCAtNDUsMTkgKzQ2LDMxIEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIENhbGxTaXRlSW5kZXgoKSA9IGRlZmF1bHQ7CiAgICAgICAgIAorI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgICAgIGV4cGxpY2l0IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4KQotICAgICAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKKyAg
ICAgICAgICAgIDogbV9iaXRzKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpCisgICAgICAgIHsgCisg
ICAgICAgICAgICBBU1NFUlQoIWJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKTsKKyAgICAgICAg
fQorI2Vsc2UKKyAgICAgICAgZXhwbGljaXQgQ2FsbFNpdGVJbmRleChjb25zdCBJbnN0cnVjdGlv
biYgaW5zdHJ1Y3Rpb24pCisgICAgICAgICAgICA6IG1fYml0cyhyZWludGVycHJldF9jYXN0PHVp
bnQzMl90PigmaW5zdHJ1Y3Rpb24pKQorICAgICAgICB7IH0KKyNlbmRpZgorICAgICAgICBleHBs
aWNpdCBDYWxsU2l0ZUluZGV4KHVpbnQzMl90IGJpdHMpCisgICAgICAgICAgICA6IG1fYml0cyhi
aXRzKQogICAgICAgICB7IH0KIAotICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29u
c3QgeyByZXR1cm4gISFtX2J5dGVjb2RlSW5kZXg7IH0KLSAgICAgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IENhbGxTaXRlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5k
ZXggPT0gb3RoZXIubV9ieXRlY29kZUluZGV4OyB9CisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9y
IGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fYml0czsgfQorICAgICAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgQ2FsbFNpdGVJbmRleCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fYml0cyA9PSBv
dGhlci5tX2JpdHM7IH0KIAotICAgICAgICB1aW50MzJfdCBiaXRzKCkgY29uc3QgeyByZXR1cm4g
bV9ieXRlY29kZUluZGV4LmFzQml0cygpOyB9CisgICAgICAgIHVpbnQzMl90IGJpdHMoKSBjb25z
dCB7IHJldHVybiBtX2JpdHM7IH0KKyAgICAgICAgc3RhdGljIENhbGxTaXRlSW5kZXggZnJvbUJp
dHModWludDMyX3QgYml0cykgeyByZXR1cm4gQ2FsbFNpdGVJbmRleChiaXRzKTsgfQogCi0gICAg
ICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNv
ZGVJbmRleDsgfQorICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7
IHJldHVybiBCeXRlY29kZUluZGV4KGJpdHMoKSk7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAg
IEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OworICAgICAgICB1aW50MzJfdCBtX2JpdHMg
eyBCeXRlY29kZUluZGV4KCkub2Zmc2V0KCkgfTsKICAgICB9OwogCiAgICAgY2xhc3MgRGlzcG9z
YWJsZUNhbGxTaXRlSW5kZXggOiBwdWJsaWMgQ2FsbFNpdGVJbmRleCB7CkBAIC02NSw3ICs3OCw3
IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgoKSA9
IGRlZmF1bHQ7CiAKICAgICAgICAgZXhwbGljaXQgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgodWlu
dDMyX3QgYml0cykKLSAgICAgICAgICAgIDogQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4Ojpm
cm9tQml0cyhiaXRzKSkKKyAgICAgICAgICAgIDogQ2FsbFNpdGVJbmRleChiaXRzKQogICAgICAg
ICB7CiAgICAgICAgIH0KIApAQCAtNzgsMjQgKzkxLDI3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAg
ICAvLyBhcm02NF8zMiBleHBlY3RzIGNhbGxlciBmcmFtZSBhbmQgcmV0dXJuIHBjIHRvIHVzZSA4
IGJ5dGVzIAogICAgIHN0cnVjdCBDYWxsZXJGcmFtZUFuZFBDIHsKICAgICAgICAgYWxpZ25hcyhD
UFVSZWdpc3RlcikgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZTsKLSAgICAgICAgYWxpZ25hcyhDUFVS
ZWdpc3RlcikgY29uc3QgSW5zdHJ1Y3Rpb24qIHJldHVyblBDOworICAgICAgICBhbGlnbmFzKENQ
VVJlZ2lzdGVyKSB2b2lkKiByZXR1cm5QQzsKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQg
c2l6ZUluUmVnaXN0ZXJzID0gMiAqIHNpemVvZihDUFVSZWdpc3RlcikgLyBzaXplb2YoUmVnaXN0
ZXIpOwogICAgIH07CiAgICAgc3RhdGljX2Fzc2VydChDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5S
ZWdpc3RlcnMgPT0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKSwg
IkNhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycyBpcyBpbmNvcnJlY3QuIik7CiAKLSAg
ICBzdHJ1Y3QgQ2FsbEZyYW1lU2xvdCB7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGNv
ZGVCbG9jayA9IENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsKLSAgICAgICAgc3Rh
dGljIGNvbnN0ZXhwciBpbnQgY2FsbGVlID0gY29kZUJsb2NrICsgMTsKLSAgICAgICAgc3RhdGlj
IGNvbnN0ZXhwciBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsZWUgKyAxOwot
ICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCB0aGlzQXJndW1lbnQgPSBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyArIDE7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGZpcnN0QXJn
dW1lbnQgPSB0aGlzQXJndW1lbnQgKyAxOworICAgIGVudW0gY2xhc3MgQ2FsbEZyYW1lU2xvdCA6
IGludCB7CisgICAgICAgIGNvZGVCbG9jayA9IENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lz
dGVycywKKyAgICAgICAgY2FsbGVlID0gY29kZUJsb2NrICsgMSwKKyAgICAgICAgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsZWUgKyAxLAorICAgICAgICB0aGlzQXJndW1lbnQgPSBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIDEsCisgICAgICAgIGZpcnN0QXJndW1lbnQgPSB0
aGlzQXJndW1lbnQgKyAxLAogICAgIH07CiAKKyAgICBPVkVSTE9BRF9NQVRIX09QRVJBVE9SU19G
T1JfRU5VTV9DTEFTU19XSVRIX0lOVEVHUkFMUyhDYWxsRnJhbWVTbG90KQorICAgIE9WRVJMT0FE
X1JFTEFUSU9OQUxfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dJVEhfSU5URUdSQUxTKENhbGxG
cmFtZVNsb3QpCisKICAgICAvLyBSZXByZXNlbnRzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHNjcmlw
dCBleGVjdXRpb24uCiAgICAgLy8gUGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBtb3N0
IGZ1bmN0aW9ucy4KICAgICBjbGFzcyBDYWxsRnJhbWUgOiBwcml2YXRlIFJlZ2lzdGVyIHsKICAg
ICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGhlYWRlclNpemVJblJlZ2lz
dGVycyA9IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgMTsKKyAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgaGVhZGVyU2l6ZUluUmVnaXN0ZXJzID0gc3RhdGlj
X2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykgKyAx
OwogCiAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGluIHZl
cnkgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcwogICAgICAgICAvLyB3aGVuIHlvdSd2ZSBndWFyYW50
ZWVkIHRoZSBjYWxsZWUgY2FuJ3QgYmUgYSBXYXNtIGNhbGxlZSwgYW5kIGNhbgpAQCAtMTA2LDEw
ICsxMjIsMTAgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICAvLyB0byBzZWUgaWYgaXQncyBh
IGNlbGwsIGFuZCBpZiBpdCdzIG5vdCwgd2UgdGhyb3cgYW4gZXhjZXB0aW9uLgogICAgICAgICBp
bmxpbmUgSlNWYWx1ZSBndWFyYW50ZWVkSlNWYWx1ZUNhbGxlZSgpIGNvbnN0OwogICAgICAgICBp
bmxpbmUgSlNPYmplY3QqIGpzQ2FsbGVlKCkgY29uc3Q7Ci0gICAgICAgIENhbGxlZUJpdHMgY2Fs
bGVlKCkgY29uc3QgeyByZXR1cm4gQ2FsbGVlQml0cyh0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxl
ZV0ucG9pbnRlcigpKTsgfQotICAgICAgICBTVVBQUkVTU19BU0FOIENhbGxlZUJpdHMgdW5zYWZl
Q2FsbGVlKCkgY29uc3QgeyByZXR1cm4gQ2FsbGVlQml0cyh0aGlzW0NhbGxGcmFtZVNsb3Q6OmNh
bGxlZV0uYXNhblVuc2FmZVBvaW50ZXIoKSk7IH0KKyAgICAgICAgQ2FsbGVlQml0cyBjYWxsZWUo
KSBjb25zdCB7IHJldHVybiBDYWxsZWVCaXRzKHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJh
bWVTbG90OjpjYWxsZWUpXS5wb2ludGVyKCkpOyB9CisgICAgICAgIFNVUFBSRVNTX0FTQU4gQ2Fs
bGVlQml0cyB1bnNhZmVDYWxsZWUoKSBjb25zdCB7IHJldHVybiBDYWxsZWVCaXRzKHRoaXNbc3Rh
dGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXS5hc2FuVW5zYWZlUG9pbnRlcigp
KTsgfQogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0OwotICAgICAgICBDb2Rl
QmxvY2sqKiBhZGRyZXNzT2ZDb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8
Q29kZUJsb2NrKio+KHRoaXMgKyBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOyB9CisgICAgICAg
IENvZGVCbG9jayoqIGFkZHJlc3NPZkNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDxDb2RlQmxvY2sqKj4odGhpcyArIHN0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSk7IH0KICAgICAgICAgaW5saW5lIFNVUFBSRVNTX0FTQU4gQ29kZUJsb2NrKiB1
bnNhZmVDb2RlQmxvY2soKSBjb25zdDsKICAgICAgICAgaW5saW5lIEpTU2NvcGUqIHNjb3BlKGlu
dCBzY29wZVJlZ2lzdGVyT2Zmc2V0KSBjb25zdDsKIApAQCAtMTgyLDE1ICsxOTgsMTMgQEAgbmFt
ZXNwYWNlIEpTQyAgewogICAgICAgICBzdGF0aWMgdm9pZCBpbml0RGVwcmVjYXRlZENhbGxGcmFt
ZUZvckRlYnVnZ2VyKENhbGxGcmFtZSogZ2xvYmFsRXhlYywgSlNDYWxsZWUqIGdsb2JhbENhbGxl
ZSk7CiAKICAgICAgICAgLy8gUmVhZCBhIHJlZ2lzdGVyIGZyb20gdGhlIGNvZGVmcmFtZSAob3Ig
Y29uc3RhbnQgZnJvbSB0aGUgQ29kZUJsb2NrKS4KLSAgICAgICAgUmVnaXN0ZXImIHIoaW50KTsK
ICAgICAgICAgUmVnaXN0ZXImIHIoVmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgLy8gUmVhZCBh
IHJlZ2lzdGVyIGZvciBhIG5vbi1jb25zdGFudAotICAgICAgICBSZWdpc3RlciYgdW5jaGVja2Vk
UihpbnQpOworICAgICAgICAvLyBSZWFkIGEgcmVnaXN0ZXIgZm9yIGEga25vd24gbm9uLWNvbnN0
YW50CiAgICAgICAgIFJlZ2lzdGVyJiB1bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3Rlcik7CiAKICAg
ICAgICAgLy8gQWNjZXNzIHRvIGFyZ3VtZW50cyBhcyBwYXNzZWQuIChBZnRlciBjYXB0dXJlLCBh
cmd1bWVudHMgbWF5IG1vdmUgdG8gYSBkaWZmZXJlbnQgbG9jYXRpb24uKQogICAgICAgICBzaXpl
X3QgYXJndW1lbnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKCkgLSAxOyB9Ci0gICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygp
IGNvbnN0IHsgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXNdLnBheWxvYWQoKTsgfQorICAgICAgICBzaXplX3QgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMoKSBjb25zdCB7IHJldHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpXS5wYXlsb2FkKCk7IH0KICAgICAgICAgc3Rh
dGljIGludCBhcmd1bWVudE9mZnNldChpbnQgYXJndW1lbnQpIHsgcmV0dXJuIChDYWxsRnJhbWVT
bG90OjpmaXJzdEFyZ3VtZW50ICsgYXJndW1lbnQpOyB9CiAgICAgICAgIHN0YXRpYyBpbnQgYXJn
dW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKGludCBhcmd1bWVudCkgeyByZXR1cm4gKENhbGxGcmFt
ZVNsb3Q6OnRoaXNBcmd1bWVudCArIGFyZ3VtZW50KTsgfQogCkBAIC0yMzksNyArMjUzLDcgQEAg
bmFtZXNwYWNlIEpTQyAgewogCiAgICAgICAgIEpTVmFsdWUgYXJndW1lbnRBZnRlckNhcHR1cmUo
c2l6ZV90IGFyZ3VtZW50KTsKIAotICAgICAgICBzdGF0aWMgaW50IG9mZnNldEZvcihzaXplX3Qg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpIHsgcmV0dXJuIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzICsgQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50IC0gMTsgfQorICAgICAgICBzdGF0
aWMgaW50IG9mZnNldEZvcihzaXplX3QgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpIHsgcmV0
dXJuIENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzIC0gMTsgfQogCiAgICAgICAgIHN0YXRpYyBDYWxsRnJhbWUqIG5vQ2FsbGVyKCkgeyByZXR1
cm4gbnVsbHB0cjsgfQogICAgICAgICBib29sIGlzRGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVn
Z2VyKCkgY29uc3QKQEAgLTI1MSwxMCArMjY1LDEwIEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAg
ICAgYm9vbCBpc1N0YWNrT3ZlcmZsb3dGcmFtZSgpIGNvbnN0OwogICAgICAgICBib29sIGlzV2Fz
bUZyYW1lKCkgY29uc3Q7CiAKLSAgICAgICAgdm9pZCBzZXRBcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyhpbnQgY291bnQpIHsgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc10ucGF5bG9hZCgpID0gY291bnQ7IH0KKyAg
ICAgICAgdm9pZCBzZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhpbnQgY291bnQpIHsgc3Rh
dGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKV0ucGF5bG9hZCgpID0gY291bnQ7IH0KICAgICAg
ICAgaW5saW5lIHZvaWQgc2V0Q2FsbGVlKEpTT2JqZWN0Kik7CiAgICAgICAgIGlubGluZSB2b2lk
IHNldENvZGVCbG9jayhDb2RlQmxvY2sqKTsKLSAgICAgICAgdm9pZCBzZXRSZXR1cm5QQyh2b2lk
KiB2YWx1ZSkgeyBjYWxsZXJGcmFtZUFuZFBDKCkucmV0dXJuUEMgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IEluc3RydWN0aW9uKj4odmFsdWUpOyB9CisgICAgICAgIHZvaWQgc2V0UmV0dXJuUEMo
dm9pZCogdmFsdWUpIHsgY2FsbGVyRnJhbWVBbmRQQygpLnJldHVyblBDID0gdmFsdWU7IH0KIAog
ICAgICAgICBTdHJpbmcgZnJpZW5kbHlGdW5jdGlvbk5hbWUoKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmgKaW5kZXggYTk3
ZGVjYTUzYmNlMTc5Mjg5YjBjMzgwZDA0ZThmMmE4NjA0NzdkMS4uZWU3ZWMyYWIxMDRhN2EzNGQ5
OGIwZjQzOGY2NDRjMmRjYTFjNTE2OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5oCkBAIC0zMiw1MCArMzIsMzkgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBSZWdpc3RlciYgQ2FsbEZyYW1lOjpyKGludCBpbmRl
eCkKLXsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jaygpOwotICAg
IGlmIChjb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkKLSAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZ2lzdGVyKj4oJmNvZGVCbG9jay0+Y29uc3RhbnRS
ZWdpc3RlcihpbmRleCkpOwotICAgIHJldHVybiB0aGlzW2luZGV4XTsKLX0KLQogaW5saW5lIFJl
Z2lzdGVyJiBDYWxsRnJhbWU6OnIoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICByZXR1cm4g
cihyZWcub2Zmc2V0KCkpOwotfQotCi1pbmxpbmUgUmVnaXN0ZXImIENhbGxGcmFtZTo6dW5jaGVj
a2VkUihpbnQgaW5kZXgpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBGaXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleCk7Ci0gICAgcmV0dXJuIHRoaXNbaW5kZXhdOworICAgIGlmIChyZWcu
aXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIq
PigmdGhpcy0+Y29kZUJsb2NrKCktPmNvbnN0YW50UmVnaXN0ZXIocmVnKSk7CisgICAgcmV0dXJu
IHRoaXNbcmVnLm9mZnNldCgpXTsKIH0KIAogaW5saW5lIFJlZ2lzdGVyJiBDYWxsRnJhbWU6OnVu
Y2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICByZXR1cm4gdW5jaGVja2VkUihy
ZWcub2Zmc2V0KCkpOworICAgIEFTU0VSVCghcmVnLmlzQ29uc3RhbnQoKSk7CisgICAgcmV0dXJu
IHRoaXNbcmVnLm9mZnNldCgpXTsKIH0KIAogaW5saW5lIEpTVmFsdWUgQ2FsbEZyYW1lOjpndWFy
YW50ZWVkSlNWYWx1ZUNhbGxlZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFjYWxsZWUoKS5pc1dh
c20oKSk7Ci0gICAgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXS5qc1ZhbHVlKCk7
CisgICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUp
XS5qc1ZhbHVlKCk7CiB9CiAKIGlubGluZSBKU09iamVjdCogQ2FsbEZyYW1lOjpqc0NhbGxlZSgp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKCFjYWxsZWUoKS5pc1dhc20oKSk7Ci0gICAgcmV0dXJuIHRo
aXNbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXS5vYmplY3QoKTsKKyAgICByZXR1cm4gdGhpc1tzdGF0
aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldLm9iamVjdCgpOwogfQogCiBpbmxp
bmUgQ29kZUJsb2NrKiBDYWxsRnJhbWU6OmNvZGVCbG9jaygpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrXS5SZWdpc3Rlcjo6Y29kZUJsb2NrKCk7Cisg
ICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
XS5SZWdpc3Rlcjo6Y29kZUJsb2NrKCk7CiB9CiAKIGlubGluZSBTVVBQUkVTU19BU0FOIENvZGVC
bG9jayogQ2FsbEZyYW1lOjp1bnNhZmVDb2RlQmxvY2soKSBjb25zdAogewotICAgIHJldHVybiB0
aGlzW0NhbGxGcmFtZVNsb3Q6OmNvZGVCbG9ja10uUmVnaXN0ZXI6OmFzYW5VbnNhZmVDb2RlQmxv
Y2soKTsKKyAgICByZXR1cm4gdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayldLlJlZ2lzdGVyOjphc2FuVW5zYWZlQ29kZUJsb2NrKCk7CiB9CiAKIGlubGluZSBK
U0dsb2JhbE9iamVjdCogQ2FsbEZyYW1lOjpsZXhpY2FsR2xvYmFsT2JqZWN0KFZNJiB2bSkgY29u
c3QKQEAgLTEwMiwxMiArOTEsMTIgQEAgaW5saW5lIGJvb2wgQ2FsbEZyYW1lOjppc1dhc21GcmFt
ZSgpIGNvbnN0CiAKIGlubGluZSB2b2lkIENhbGxGcmFtZTo6c2V0Q2FsbGVlKEpTT2JqZWN0KiBj
YWxsZWUpCiB7Ci0gICAgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtDYWxsRnJhbWVTbG90
OjpjYWxsZWVdID0gY2FsbGVlOworICAgIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbc3Rh
dGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXSA9IGNhbGxlZTsKIH0KIAogaW5s
aW5lIHZvaWQgQ2FsbEZyYW1lOjpzZXRDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7
Ci0gICAgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2tdID0gY29kZUJsb2NrOworICAgIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbc3RhdGlj
X2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spXSA9IGNvZGVCbG9jazsKIH0KIAog
aW5saW5lIHZvaWQgQ2FsbEZyYW1lOjpzZXRTY29wZShpbnQgc2NvcGVSZWdpc3Rlck9mZnNldCwg
SlNTY29wZSogc2NvcGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9DaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg5
Mzg5ZDg4OTEzYTJkMGE1NmE3YmMxMmQ0ZDFjMGM0ZDgwZGQxZmEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2hlY2twb2ludE9TUkV4aXRTaWRl
U3RhdGUuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQnl0ZWNvZGVJbmRleC5o
IgorI2luY2x1ZGUgIk9wZXJhbmRzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgQ2hl
Y2twb2ludE9TUkV4aXRTaWRlU3RhdGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorCisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OworICAgIEpTVmFsdWUg
dG1wc1ttYXhOdW1DaGVja3BvaW50VG1wc10geyB9OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggNTcwYjBhZmEz
YmEwODZhNDUwOGE1MWViY2U4MGJmYjViZjU5Y2QyNS4uMzQwNjU4NmRlOTVkZThjNjJkMTExZTFl
ZmY4NjllYWZiZTkwYmUzYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQnl0ZWNv
ZGVzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lQ2xvc3VyZS5oIgogI2luY2x1ZGUgIkNhdGNoU2Nv
cGUuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkRpcmVjdEFy
Z3VtZW50cy5oIgpAQCAtMTIzLDcgKzEyNCw3IEBAIEpTVmFsdWUgZXZhbChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBDYWxsRnJhbWUqIGNh
bGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOwogICAgIENhbGxTaXRlSW5kZXgg
Y2FsbGVyQ2FsbFNpdGVJbmRleCA9IGNhbGxlckZyYW1lLT5jYWxsU2l0ZUluZGV4KCk7CiAgICAg
Q29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7Ci0g
ICAgSlNTY29wZSogY2FsbGVyU2NvcGVDaGFpbiA9IGNhbGxlckZyYW1lLT51bmNoZWNrZWRSKGNh
bGxlckNvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpLm9mZnNldCgpKS5SZWdpc3Rlcjo6c2NvcGUo
KTsKKyAgICBKU1Njb3BlKiBjYWxsZXJTY29wZUNoYWluID0gY2FsbGVyRnJhbWUtPnVuY2hlY2tl
ZFIoY2FsbGVyQ29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkpLlJlZ2lzdGVyOjpzY29wZSgpOwog
ICAgIFVubGlua2VkQ29kZUJsb2NrKiBjYWxsZXJVbmxpbmtlZENvZGVCbG9jayA9IGNhbGxlckNv
ZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKIAogICAgIGJvb2wgaXNBcnJvd0Z1bmN0aW9u
Q29udGV4dCA9IGNhbGxlclVubGlua2VkQ29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb24oKSB8fCBj
YWxsZXJVbmxpbmtlZENvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uQ29udGV4dCgpOwpAQCAtMjE1
LDYgKzIxNiw5IEBAIHVuc2lnbmVkIHNpemVPZlZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90CiAgICAgfQogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIDApOwogICAgIAorICAgIGlmIChsZW5ndGggPiBtYXhBcmd1bWVu
dHMpCisgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUp
OworCiAgICAgaWYgKGxlbmd0aCA+PSBmaXJzdFZhckFyZ09mZnNldCkKICAgICAgICAgbGVuZ3Ro
IC09IGZpcnN0VmFyQXJnT2Zmc2V0OwogICAgIGVsc2UKQEAgLTI1MSw3ICsyNTUsNyBAQCB1bnNp
Z25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lLAogICAgIHJldHVybiBsZW5ndGg7CiB9CiAKLXZvaWQgbG9hZFZh
cmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCBKU1ZhbHVlIGFyZ3VtZW50cywgdWlu
dDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpCit2b2lkIGxvYWRWYXJhcmdzKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUg
YXJndW1lbnRzLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCkKIHsKICAgICBpZiAo
VU5MSUtFTFkoIWFyZ3VtZW50cy5pc0NlbGwoKSkgfHwgIWxlbmd0aCkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjYzLDMxICsyNjcsMzEgQEAgdm9pZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2kKICAgICBzd2l0
Y2ggKGNlbGwtPnR5cGUoKSkgewogICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVHlwZToKICAgICAg
ICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBqc0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4oY2Vs
bCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50
RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICBqc0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4o
Y2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9m
ZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU2NvcGVkQXJndW1lbnRz
VHlwZToKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBqc0Nhc3Q8U2NvcGVkQXJn
dW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwg
Zmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICBqc0Nhc3Q8U2NvcGVk
QXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxl
bWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSlNJ
bW11dGFibGVCdXR0ZXJmbHlUeXBlOgogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAg
IGpzQ2FzdDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsK
KyAgICAgICAganNDYXN0PEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oY2VsbCktPmNvcHlUb0FyZ3Vt
ZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAg
ICAgICAgcmV0dXJuOyAKICAgICBkZWZhdWx0OiB7CiAgICAgICAgIEFTU0VSVChhcmd1bWVudHMu
aXNPYmplY3QoKSk7CiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3Qq
PihjZWxsKTsKICAgICAgICAgaWYgKGlzSlNBcnJheShvYmplY3QpKSB7CiAgICAgICAgICAgICBz
Y29wZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBqc0Nhc3Q8SlNBcnJheSo+KG9iamVjdCktPmNv
cHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwg
b2Zmc2V0LCBsZW5ndGgpOworICAgICAgICAgICAganNDYXN0PEpTQXJyYXkqPihvYmplY3QpLT5j
b3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxl
bmd0aCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgdW5zaWduZWQg
aTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aCAmJiBvYmplY3QtPmNhbkdldEluZGV4
UXVpY2tseShpICsgb2Zmc2V0KTsgKytpKQotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0
RWxlbWVudERlc3QgKyBpKSA9IG9iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOwor
ICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IG9iamVjdC0+Z2V0SW5kZXhRdWlja2x5
KGkgKyBvZmZzZXQpOwogICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCBpICsgb2Zmc2V0
KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0gICAg
ICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0gdmFsdWU7CisgICAg
ICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0gdmFsdWU7CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuOwogICAgIH0gfQpAQCAtMjk5LDggKzMwMyw3IEBAIHZvaWQgc2V0dXBWYXJhcmdzRnJh
bWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENh
bGxGCiAgICAgCiAgICAgbG9hZFZhcmFyZ3MoCiAgICAgICAgIGdsb2JhbE9iamVjdCwKLSAgICAg
ICAgY2FsbEZyYW1lLAotICAgICAgICBjYWxsZWVGcmFtZU9mZnNldCArIENhbGxGcmFtZTo6YXJn
dW1lbnRPZmZzZXQoMCksCisgICAgICAgIGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oJmNhbGxGcmFt
ZS0+cihjYWxsZWVGcmFtZU9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCkpKSwK
ICAgICAgICAgYXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgCiAgICAgbmV3Q2FsbEZy
YW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhsZW5ndGggKyAxKTsKQEAgLTU0MCw4
ICs1NDMsMTMgQEAgcHVibGljOgogICAgICAgICBtX2NvZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVC
bG9jaygpOwogCiAgICAgICAgIG1faGFuZGxlciA9IG51bGxwdHI7Ci0gICAgICAgIGlmICghbV9p
c1Rlcm1pbmF0aW9uKSB7Ci0gICAgICAgICAgICBpZiAobV9jb2RlQmxvY2spIHsKKyAgICAgICAg
aWYgKG1fY29kZUJsb2NrKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBv
cnQgZXhjZXB0aW9uIGhhbmRsaW5nIGluIGNoZWNrcG9pbnRzLgorI2lmIEVOQUJMRShERkdfSklU
KQorICAgICAgICAgICAgaWYgKHJlbW92ZUNvZGVQdHJUYWcobV9yZXR1cm5QQykgPT0gTExJbnQ6
OmdldENvZGVQdHI8Tm9QdHJUYWc+KGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2Nh
bGxfdHJhbXBvbGluZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkKKyAgICAgICAgICAgICAgICBtX2Nv
ZGVCbG9jay0+dm0oKS5maW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShtX2NhbGxGcmFtZSk7Cisj
ZW5kaWYKKyAgICAgICAgICAgIGlmICghbV9pc1Rlcm1pbmF0aW9uKSB7CiAgICAgICAgICAgICAg
ICAgbV9oYW5kbGVyID0gZmluZEV4Y2VwdGlvbkhhbmRsZXIodmlzaXRvciwgbV9jb2RlQmxvY2ss
IFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7CiAgICAgICAgICAgICAgICAgaWYgKG1faGFu
ZGxlcikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKQEAg
LTU2Myw2ICs1NzEsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChzaG91bGRTdG9wVW53aW5kaW5n
KQogICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKIAorICAgICAgICBtX3Jl
dHVyblBDID0gbV9jYWxsRnJhbWUtPnJldHVyblBDKCkudmFsdWUoKTsKICAgICAgICAgcmV0dXJu
IFN0YWNrVmlzaXRvcjo6Q29udGludWU7CiAgICAgfQogCkBAIC01OTksNiArNjA4LDcgQEAgcHJp
dmF0ZToKICAgICBib29sIG1faXNUZXJtaW5hdGlvbjsKICAgICBDb2RlQmxvY2sqJiBtX2NvZGVC
bG9jazsKICAgICBIYW5kbGVySW5mbyomIG1faGFuZGxlcjsKKyAgICBtdXRhYmxlIGNvbnN0IHZv
aWQqIG1fcmV0dXJuUEMgeyBudWxscHRyIH07CiB9OwogCiBORVZFUl9JTkxJTkUgSGFuZGxlcklu
Zm8qIEludGVycHJldGVyOjp1bndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEV4
Y2VwdGlvbiogZXhjZXB0aW9uKQpAQCAtODY4LDcgKzg3OCw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0
ZXI6OmV4ZWN1dGVDYWxsKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU09i
amVjdCoKICAgICB9CiAKICAgICBWTUVudHJ5U2NvcGUgZW50cnlTY29wZSh2bSwgZ2xvYmFsT2Jq
ZWN0KTsKLSAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSkpCisgICAg
aWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vyc2VTb2Z0KCkgfHwgYXJncy5zaXplKCkgPiBt
YXhBcmd1bWVudHMpKQogICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd1N0YWNrT3Zl
cmZsb3dFcnJvcihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUpKTsKIAogICAgIGlmIChpc0pTQ2Fs
bCkgewpAQCAtOTM3LDcgKzk0Nyw3IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNv
bnN0cnVjdChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNPCiAgICAgfQog
CiAgICAgVk1FbnRyeVNjb3BlIGVudHJ5U2NvcGUodm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgaWYg
KFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vyc2VTb2Z0KCkpKSB7CisgICAgaWYgKFVOTElLRUxZ
KCF2bS5pc1NhZmVUb1JlY3Vyc2VTb2Z0KCkgfHwgYXJncy5zaXplKCkgPiBtYXhBcmd1bWVudHMp
KSB7CiAgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKaW5kZXggMTgxMTI5N2IxOGFkYzJk
NzNmZjZmZTFkZjk1ODAyYTZhMGIxNWRjNS4uZTgzZjQ4OTJlNDYzOWExMjM2Y2VlMzlkY2RhOTlm
ZWM4YWRjMDU4ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmgKQEAgLTE3MSw3ICsxNzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIG1heEFyZ3VtZW50cyA9IDB4MTAwMDA7CiAgICAgdW5zaWdu
ZWQgc2l6ZUZyYW1lRm9yVmFyYXJncyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZNJiwg
SlNWYWx1ZSBhcmd1bWVudHMsIHVuc2lnbmVkIG51bVVzZWRTdGFja1Nsb3RzLCB1aW50MzJfdCBm
aXJzdFZhckFyZ09mZnNldCk7CiAgICAgdW5zaWduZWQgc2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3Vt
ZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZNJiwgdW5zaWduZWQgbnVtVXNlZFN0
YWNrU2xvdHMpOwotICAgIHZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJh
bWUqIGV4ZWNDYWxsZXIsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCBKU1ZhbHVl
IHNvdXJjZSwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpOworICAgIHZvaWQgbG9h
ZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCBKU1Zh
bHVlIHNvdXJjZSwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpOwogICAgIHZvaWQg
c2V0dXBWYXJhcmdzRnJhbWUoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZXIs
IENhbGxGcmFtZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90IGZpcnN0
VmFyQXJnT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpOwogICAgIHZvaWQgc2V0dXBWYXJhcmdzRnJh
bWVBbmRTZXRUaGlzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBDYWxs
RnJhbWUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIGFyZ3VtZW50cywg
dWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7CiAgICAgdm9pZCBz
ZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZShKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogZXhl
Y0NhbGxlciwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVlLCB1aW50MzJfdCBsZW5ndGgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAppbmRl
eCBkNzFhNTk3MWRkYzhmMGY1ZWE2NzhkNWZjZTQ4ZTM5NmUyMmE4NzU0Li43NWRkZDIwM2Y3M2Jl
MDU3NmQ2ZGQ3NDhiNjVjYmFhOWFiYmZjNzMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcApAQCAtMjA4LDcgKzIwOCw3IEBAIHZv
aWQgU3RhY2tWaXNpdG9yOjpyZWFkSW5saW5lZEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lLCBD
b2RlT3JpZ2luKiBjb2RlT3JpZ2luCiAgICAgICAgIG1fZnJhbWUubV9jYWxsRnJhbWUgPSBjYWxs
RnJhbWU7CiAgICAgICAgIG1fZnJhbWUubV9pbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJh
bWU7CiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5p
c1ZhbGlkKCkpCi0gICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIu
b2Zmc2V0KCkpLnVuYm94ZWRJbnQzMigpOworICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZyYW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudFJlZ2lzdGVyKS51bmJveGVkSW50MzIoKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKICAgICAgICAgbV9mcmFtZS5tX2NvZGVCbG9j
ayA9IGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAppbmRleCAyODIwY2IxNzg0NWNmY2Zj
ODlmNTU5NmExYjY0OTc1ODRiZmYwNjFlLi5hM2FmZGM0MjNiNjMxZjFlYWMxOWZiYjBhNTA3NmM0
OWE3MWU3NmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmgKQEAgLTY0NywyOCArNjQ3LDI4IEBAIHB1YmxpYzoKICAgICB9CiAjZW5kaWYKIAotICAgIHZv
aWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoaW50IGVudHJ5LCBHUFJSZWcgdG8sIEdQ
UlJlZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCisgICAgdm9pZCBlbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cihWaXJ0dWFsUmVnaXN0ZXIgZW50cnksIEdQUlJlZyB0bywg
R1BSUmVnIGZyb20gPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKICAgICB7Ci0gICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7Cisg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhmcm9tLCBlbnRyeS5vZmZzZXQoKSAqIHNpemVvZihSZWdp
c3RlcikpLCB0byk7CiAgICAgfQotICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIz
MihpbnQgZW50cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlcikKKyAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyMzIoVmlydHVhbFJl
Z2lzdGVyIGVudHJ5LCBHUFJSZWcgdG8sIEdQUlJlZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIpCiAgICAgewotICAgICAgICBsb2FkMzIoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNp
emVvZihSZWdpc3RlcikpLCB0byk7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKGZyb20sIGVudHJ5
Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKICAgICB9CiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyNjQoaW50IGVudHJ5LCBH
UFJSZWcgdG8sIEdQUlJlZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCisgICAg
dm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjY0KFZpcnR1YWxSZWdpc3RlciBlbnRyeSwg
R1BSUmVnIHRvLCBHUFJSZWcgZnJvbSA9IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQogICAg
IHsKLSAgICAgICAgbG9hZDY0KEFkZHJlc3MoZnJvbSwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgdG8pOworICAgICAgICBsb2FkNjQoQWRkcmVzcyhmcm9tLCBlbnRyeS5vZmZzZXQoKSAqIHNp
emVvZihSZWdpc3RlcikpLCB0byk7CiAgICAgfQogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCi0g
ICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoR1BSUmVnIGZyb20sIGludCBlbnRyeSkK
KyAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihHUFJSZWcgZnJvbSwgVmlydHVhbFJl
Z2lzdGVyIGVudHJ5KQogICAgIHsKLSAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAg
ICAgIHN0b3JlUHRyKGZyb20sIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVu
dHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgIH0KIAotICAgIHZvaWQgZW1p
dFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBpbnQgZW50cnkpCisgICAgdm9pZCBl
bWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIFZpcnR1YWxSZWdpc3RlciBlbnRy
eSkKICAgICB7Ci0gICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIodmFsdWUpLCBBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpKTsK
KyAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cih2YWx1ZSksIEFkZHJlc3MoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwog
ICAgIH0KIAogICAgIHZvaWQgZW1pdEdldENhbGxlckZyYW1lRnJvbUNhbGxGcmFtZUhlYWRlclB0
cihSZWdpc3RlcklEIHRvKQpAQCAtNjk2LDE5ICs2OTYsMTkgQEAgcHVibGljOgogICAgIC8vIGNh
bGxlcidzIGZyYW1lIHBvaW50ZXIuIE9uIHNvbWUgcGxhdGZvcm1zLCB0aGUgY2FsbGVlIGlzIHJl
c3BvbnNpYmxlIGZvciBwdXNoaW5nIHRoZQogICAgIC8vICJsaW5rIHJlZ2lzdGVyIiBjb250YWlu
aW5nIHRoZSByZXR1cm4gYWRkcmVzcyBpbiB0aGUgZnVuY3Rpb24gcHJvbG9ndWUuCiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xv
Z3VlKEdQUlJlZyBmcm9tLCBpbnQgZW50cnkpCisgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVI
ZWFkZXJCZWZvcmVQcm9sb2d1ZShHUFJSZWcgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQog
ICAgIHsKLSAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgZW50cnkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpIC0gcHJv
bG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpKSk7CisgICAgICAgIHN0b3JlUHRyKGZyb20sIEFkZHJl
c3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVudHJ5Lm9mZnNldCgpICogc3RhdGljX2Nhc3Q8cHRy
ZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEoKSkp
OwogICAgIH0KICNlbHNlCi0gICAgdm9pZCBlbWl0UHV0UGF5bG9hZFRvQ2FsbEZyYW1lSGVhZGVy
QmVmb3JlUHJvbG9ndWUoR1BSUmVnIGZyb20sIGludCBlbnRyeSkKKyAgICB2b2lkIGVtaXRQdXRQ
YXlsb2FkVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShHUFJSZWcgZnJvbSwgVmlydHVh
bFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKLSAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhz
dGFja1BvaW50ZXJSZWdpc3RlciwgZW50cnkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVv
ZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICBz
dG9yZVB0cihmcm9tLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBlbnRyeS5vZmZzZXQo
KSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBwcm9sb2d1ZVN0
YWNrUG9pbnRlckRlbHRhKCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnBheWxvYWQpKSk7CiAgICAgfQogCi0gICAgdm9pZCBlbWl0UHV0VGFnVG9DYWxs
RnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShUcnVzdGVkSW1tMzIgdGFnLCBpbnQgZW50cnkpCisg
ICAgdm9pZCBlbWl0UHV0VGFnVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShUcnVzdGVk
SW1tMzIgdGFnLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewotICAgICAgICBzdG9yZVB0
cih0YWcsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVudHJ5ICogc3RhdGljX2Nhc3Q8
cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEo
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkp
OworICAgICAgICBzdG9yZVB0cih0YWcsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVu
dHJ5Lm9mZnNldCgpICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAt
IHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEoKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogICAgIH0KICNlbmRpZgogICAgIApAQCAtMTE0
OCw5ICsxMTQ4LDEwIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3Rlci5p
c1ZhbGlkKCkpOwogICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAg
fQotICAgIHN0YXRpYyBBZGRyZXNzIGFkZHJlc3NGb3IoaW50IG9wZXJhbmQpCisgICAgc3RhdGlj
IEFkZHJlc3MgYWRkcmVzc0ZvcihPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRkcmVzc0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKKyAg
ICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzVG1wKCkpOworICAgICAgICByZXR1cm4gYWRkcmVzc0Zv
cihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAKICAgICBzdGF0aWMgQWRkcmVz
cyB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgR1BSUmVnIGJhc2VHUFIp
CkBAIC0xMTYzLDkgKzExNjQsMTAgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQodmlydHVhbFJl
Z2lzdGVyLmlzVmFsaWQoKSk7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIp
ICsgVGFnT2Zmc2V0KTsKICAgICB9Ci0gICAgc3RhdGljIEFkZHJlc3MgdGFnRm9yKGludCBvcGVy
YW5kKQorICAgIHN0YXRpYyBBZGRyZXNzIHRhZ0ZvcihPcGVyYW5kIG9wZXJhbmQpCiAgICAgewot
ICAgICAgICByZXR1cm4gdGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFu
ZCkpOworICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7CisgICAgICAgIHJldHVybiB0
YWdGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogCiAgICAgc3RhdGljIEFk
ZHJlc3MgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcg
YmFzZUdQUikKQEAgLTExNzgsMzAgKzExODAsMzEgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQo
dmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSk7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkgKiBzaXplb2Yo
UmVnaXN0ZXIpICsgUGF5bG9hZE9mZnNldCk7CiAgICAgfQotICAgIHN0YXRpYyBBZGRyZXNzIHBh
eWxvYWRGb3IoaW50IG9wZXJhbmQpCisgICAgc3RhdGljIEFkZHJlc3MgcGF5bG9hZEZvcihPcGVy
YW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICByZXR1cm4gcGF5bG9hZEZvcihzdGF0aWNfY2Fz
dDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKKyAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlz
VG1wKCkpOworICAgICAgICByZXR1cm4gcGF5bG9hZEZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3Rl
cigpKTsKICAgICB9CiAKICAgICAvLyBBY2Nlc3MgdG8gb3VyIGZpeGVkIGNhbGxlZSBDYWxsRnJh
bWUuCi0gICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVTbG90KGludCBzbG90KQorICAgIHN0
YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lU2xvdChWaXJ0dWFsUmVnaXN0ZXIgc2xvdCkKICAgICB7
Ci0gICAgICAgIEFTU0VSVChzbG90ID49IENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVy
cyk7Ci0gICAgICAgIHJldHVybiBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2Yo
UmVnaXN0ZXIpICogKHNsb3QgLSBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMpKTsK
KyAgICAgICAgQVNTRVJUKHNsb3Qub2Zmc2V0KCkgPj0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUlu
UmVnaXN0ZXJzKTsKKyAgICAgICAgcmV0dXJuIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIs
IHNpemVvZihSZWdpc3RlcikgKiAoc2xvdCAtIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lz
dGVycykub2Zmc2V0KCkpOwogICAgIH0KIAogICAgIC8vIEFjY2VzcyB0byBvdXIgZml4ZWQgY2Fs
bGVlIENhbGxGcmFtZS4KICAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVBcmd1bWVudFNsb3QoaW50
IGFyZ3VtZW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkpOworICAgICAgICByZXR1cm4g
Y2FsbGVlRnJhbWVTbG90KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSk7CiAg
ICAgfQogCi0gICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVUYWdTbG90KGludCBzbG90KQor
ICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lVGFnU2xvdChWaXJ0dWFsUmVnaXN0ZXIgc2xv
dCkKICAgICB7CiAgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3Qoc2xvdCkud2l0aE9mZnNl
dChUYWdPZmZzZXQpOwogICAgIH0KIAotICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lUGF5
bG9hZFNsb3QoaW50IHNsb3QpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVQYXlsb2Fk
U2xvdChWaXJ0dWFsUmVnaXN0ZXIgc2xvdCkKICAgICB7CiAgICAgICAgIHJldHVybiBjYWxsZWVG
cmFtZVNsb3Qoc2xvdCkud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KTsKICAgICB9CkBAIC0xMjE4
LDcgKzEyMjEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZUNh
bGxlckZyYW1lKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3QoMCkud2l0
aE9mZnNldChDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpOworICAgICAgICByZXR1cm4g
Y2FsbGVlRnJhbWVTbG90KFZpcnR1YWxSZWdpc3RlcigwKSkud2l0aE9mZnNldChDYWxsRnJhbWU6
OmNhbGxlckZyYW1lT2Zmc2V0KCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBHUFJSZWcgc2VsZWN0
U2NyYXRjaEdQUihSZWdpc3RlclNldCBwcmVzZXJ2ZWQpCkBAIC0xNTI3LDcgKzE1MzAsNyBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVD
YWxsRnJhbWUtPmlzVmFyYXJncygpKTsKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCi0g
ICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKTsKKyAgICAgICAgICAgIHJldHVybiBDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKICAgICAgICAgcmV0dXJuIGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAppbmRleCA1ZGZiMmYxMWQzNjVkNjNhMTNm
NjcxNjE1YjZiNjUwNzQ2ZDc0MjBlLi5kOGQwNmNmZDRkM2VmYTdhZmU4MWNlMGFmOWNkNzNlNWJk
N2NjMTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZm
bGVyLmNwcApAQCAtNjEsNyArNjEsNyBAQCBDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1lU2h1
ZmZsZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IENhbGxGcmFtZVNodWZmbGVEYQogI2VuZGlm
CiAKICAgICBBU1NFUlQoIWRhdGEuY2FsbGVlLmlzSW5KU1N0YWNrKCkgfHwgZGF0YS5jYWxsZWUu
dmlydHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgpKTsKLSAgICBhZGROZXcoVmlydHVhbFJlZ2lzdGVy
KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIGRhdGEuY2FsbGVlKTsKKyAgICBhZGROZXcoQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlLCBkYXRhLmNhbGxlZSk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGRhdGEuYXJncy5zaXplKCk7ICsraSkgewogICAgICAgICBBU1NFUlQoIWRhdGEuYXJnc1tp
XS5pc0luSlNTdGFjaygpIHx8IGRhdGEuYXJnc1tpXS52aXJ0dWFsUmVnaXN0ZXIoKS5pc0xvY2Fs
KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVm
Zmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCmlu
ZGV4IDYyNDM5YmRmMzQ0M2I4N2JlOTk5NjAyZmQ5YzNlYmM5NmFmNmE5ZjUuLjRjNmFhMzJmNGY1
ODc2MzgzMTA5MzhmMDBmOTJjMDk5OGQ2NmY5NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgKQEAgLTEyOCw3ICsxMjgsNyBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICBBU1NFUlQoaXNVbmRlY2lkZWQoKSk7CiAgICAgICAgIEFTU0VSVCghZ2V0
TmV3KGpzVmFsdWVSZWdzKSk7Ci0gICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVy
eSB7IGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkgfTsKKyAg
ICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsgZ2V0TmV3KENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSkgfTsKICAgICAgICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5KTsKICAgICAgICAg
YWRkTmV3KGpzVmFsdWVSZWdzLCBjYWNoZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKSk7CiAgICAgfQpA
QCAtMTQxLDcgKzE0MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFzc3VtZUNhbGxlZUlzQ2VsbCgp
CiAgICAgewogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIENhY2hlZFJlY292ZXJ5JiBj
YWxsZWVDYWNoZWRSZWNvdmVyeSA9ICpnZXROZXcoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSkpOworICAgICAgICBDYWNoZWRSZWNvdmVyeSYgY2FsbGVlQ2FjaGVkUmVjb3Zl
cnkgPSAqZ2V0TmV3KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CiAgICAgICAgIHN3aXRjaCAoY2Fs
bGVlQ2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS50ZWNobmlxdWUoKSkgewogICAgICAgICBjYXNl
IEluUGFpcjoKICAgICAgICAgICAgIHVwZGF0ZVJlY292ZXJ5KApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgKaW5kZXggNTY1NjY3NWMzNjVkOTllNjFkNDBkZDg2M2U5YWUwNzc2YzJmMzVhZC4uZjZmMDli
OTJhMGNjZjI2NzBlYTdmNmMwZWZiMGJkMTcxNTIwNzU1MSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCkBAIC0zMzEsMTYgKzMzMSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBj
b21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BTdHJpY3RF
cVR5cGUpOwogICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBORXEgfTsK
ICAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKLSAgICAgICAgYm9v
bCBpc09wZXJhbmRDb25zdGFudERvdWJsZShpbnQgc3JjKTsKKyAgICAgICAgYm9vbCBpc09wZXJh
bmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICAKLSAgICAgICAgdm9p
ZCBlbWl0TG9hZERvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7Ci0gICAgICAg
IHZvaWQgZW1pdExvYWRJbnQzMlRvRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVl
KTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0
ZXJJRCB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW1pdExvYWRJbnQzMlRvRG91YmxlKFZpcnR1YWxS
ZWdpc3RlciwgRlBSZWdpc3RlcklEIHZhbHVlKTsKIAogICAgICAgICBlbnVtIFdyaXRlQmFycmll
ck1vZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJCYXNlLCBTaG91
bGRGaWx0ZXJWYWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07CiAgICAgICAgIC8vIHZh
bHVlIHJlZ2lzdGVyIGluIHdyaXRlIGJhcnJpZXIgaXMgdXNlZCBiZWZvcmUgYW55IHNjcmF0Y2gg
cmVnaXN0ZXJzCiAgICAgICAgIC8vIHNvIG1heSBzYWZlbHkgYmUgdGhlIHNhbWUgYXMgZWl0aGVy
IG9mIHRoZSBzY3JhdGNoIHJlZ2lzdGVycy4KLSAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVy
KHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7Ci0gICAg
ICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwg
V3JpdGVCYXJyaWVyTW9kZSk7CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihWaXJ0dWFs
UmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7
CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJh
cnJpZXIoSlNDZWxsKiBvd25lcik7CiAKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhl
IHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxl
IGZvcgpAQCAtNDA0LDMyICs0MDQsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgZW51
bSBGaW5hbE9iamVjdE1vZGUgeyBNYXlCZUZpbmFsLCBLbm93bk5vdEZpbmFsIH07CiAKLSAgICAg
ICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMsIEpTVmFsdWVSZWdzIGRzdCk7
Ci0gICAgICAgIHZvaWQgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBKU1ZhbHVlUmVn
cyBzcmMpOworICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyIHNyYywgSlNWYWx1ZVJlZ3MgZHN0KTsKKyAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIHNyYyk7CiAKLSAgICAgICAg
aW50MzJfdCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYyk7Ci0gICAgICAgIGRvdWJsZSBn
ZXRPcGVyYW5kQ29uc3RhbnREb3VibGUoaW50IHNyYyk7CisgICAgICAgIGludDMyX3QgZ2V0T3Bl
cmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpOworICAgICAgICBkb3VibGUgZ2V0
T3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpOwogCiAjaWYgVVNFKEpT
VkFMVUUzMl82NCkKLSAgICAgICAgYm9vbCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IG9wMSwg
aW50IG9wMiwgaW50JiBvcCwgaW50MzJfdCYgY29uc3RhbnQpOworICAgICAgICBib29sIGdldE9w
ZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
LCBpbnQmIG9wLCBpbnQzMl90JiBjb25zdGFudCk7CiAKLSAgICAgICAgdm9pZCBlbWl0TG9hZFRh
ZyhpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZFBheWxv
YWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQpOworICAgICAgICB2b2lkIGVtaXRMb2Fk
VGFnKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcpOworICAgICAgICB2b2lkIGVtaXRM
b2FkUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCk7CiAKICAgICAg
ICAgdm9pZCBlbWl0TG9hZChjb25zdCBKU1ZhbHVlJiB2LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0
ZXJJRCBwYXlsb2FkKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVy
SUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJl
Z2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZDIoaW50IGluZGV4MSwgUmVnaXN0ZXJJRCB0
YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBpbnQgaW5kZXgyLCBSZWdpc3RlcklEIHRhZzIsIFJl
Z2lzdGVySUQgcGF5bG9hZDIpOworICAgICAgICB2b2lkIGVtaXRMb2FkKFZpcnR1YWxSZWdpc3Rl
ciwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0g
Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRMb2FkMihWaXJ0dWFsUmVnaXN0
ZXIsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwgVmlydHVhbFJlZ2lzdGVy
LCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpOwogCi0gICAgICAgIHZvaWQg
ZW1pdFN0b3JlKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwg
UmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGVtaXRT
dG9yZShpbnQgaW5kZXgsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSA9
IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihpbnQgaW5k
ZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7Ci0gICAg
ICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwg
Ym9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChp
bnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCA9IGZhbHNlKTsK
LSAgICAgICAgdm9pZCBlbWl0U3RvcmVCb29sKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2Fk
LCBib29sIGluZGV4SXNCb29sID0gZmFsc2UpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZURvdWJs
ZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3Jl
KFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVn
aXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRTdG9y
ZShWaXJ0dWFsUmVnaXN0ZXIsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFz
ZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihWaXJ0
dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxz
ZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoVmlydHVhbFJlZ2lzdGVyLCBUcnVzdGVk
SW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7CisgICAgICAgIHZvaWQg
ZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBp
bmRleElzQ2VsbCA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVCb29sKFZpcnR1YWxS
ZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29sID0gZmFsc2UpOwor
ICAgICAgICB2b2lkIGVtaXRTdG9yZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJ
RCB2YWx1ZSk7CiAKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaW50
IHZpcnR1YWxSZWdpc3RlckluZGV4KTsKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoaW50IHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIHRhZyk7CisgICAg
ICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3Rlcik7Cisg
ICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3Rlciwg
UmVnaXN0ZXJJRCB0YWcpOwogCiAgICAgICAgIHZvaWQgY29tcGlsZUdldEJ5SWRIb3RQYXRoKGNv
bnN0IElkZW50aWZpZXIqKTsKIApAQCAtNDM4LDE3ICs0MzgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RydWN0aW9uICosIE9w
ZXJhbmRUeXBlcywgSnVtcExpc3QmIG5vdEludDMyT3AxLCBKdW1wTGlzdCYgbm90SW50MzJPcDIs
IGJvb2wgb3AxSXNJblJlZ2lzdGVycyA9IHRydWUsIGJvb2wgb3AySXNJblJlZ2lzdGVycyA9IHRy
dWUpOwogCiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICB2b2lkIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBkc3QpOwogICAgICAgICB2b2lkIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3Qp
OwotICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGludCBzcmMxLCBSZWdpc3Rl
cklEIGRzdDEsIGludCBzcmMyLCBSZWdpc3RlcklEIGRzdDIpOwogICAgICAgICB2b2lkIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEs
IFZpcnR1YWxSZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpOwotICAgICAgICB2b2lkIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgUmVnaXN0ZXJJRCBmcm9tID0gcmVnVDApOwog
ICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwg
UmVnaXN0ZXJJRCBmcm9tID0gcmVnVDApOwotICAgICAgICB2b2lkIGVtaXRTdG9yZUNlbGwoaW50
IGRzdCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIC8qIG9ubHkgdXNlZCBpbiBKU1ZhbHVlMzJf
NjQgKi8gPSBmYWxzZSkKLSAgICAgICAgewotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHBheWxvYWQpOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQ2Vs
bChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIHBheWxvYWQpCisgICAgICAgIHZvaWQg
ZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIHBheWxvYWQsIGJv
b2wgLyogb25seSB1c2VkIGluIEpTVmFsdWUzMl82NCAqLyA9IGZhbHNlKQogICAgICAgICB7CiAg
ICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcGF5bG9hZCk7CiAgICAgICAg
IH0KQEAgLTQ1NiwyOSArNDQ5LDI5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKdW1wIGVt
aXRKdW1wSWZCb3RoSlNDZWxscyhSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsK
ICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZKU0NlbGwoUmVnaXN0ZXJJRCk7CiAgICAg
ICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQpOwotICAgICAg
ICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklELCBpbnQgVlJlZyk7
CisgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQsIFZp
cnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEp1bXAgZW1pdEp1bXBJZk5vdEludChSZWdpc3RlcklE
LCBSZWdpc3RlcklELCBSZWdpc3RlcklEIHNjcmF0Y2gpOwogICAgICAgICBQYXRjaGFibGVKdW1w
IGVtaXRQYXRjaGFibGVKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW50KFJlZ2lzdGVySUQpOwogICAgICAgICB2b2lkIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdE51bWJlcihSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQoUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCBzY3JhdGNo
KTsKIAotICAgICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkSG90UGF0aChpbnQgYmFzZVZSZWcsIGNv
bnN0IElkZW50aWZpZXIqKTsKKyAgICAgICAgdm9pZCBjb21waWxlR2V0QnlJZEhvdFBhdGgoVmly
dHVhbFJlZ2lzdGVyIGJhc2VSZWcsIGNvbnN0IElkZW50aWZpZXIqKTsKIAogI2VuZGlmIC8vIFVT
RShKU1ZBTFVFMzJfNjQpCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAg
IHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxD
b25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKGludCBvcDEs
IGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAg
IHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVh
bFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5z
aWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAg
dm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoaW50IGRzdCwgaW50IG9wMSwgaW50IG9wMiwg
UmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRJ
bXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBh
cmVVbnNpZ25lZEFuZEp1bXBJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwg
UmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRB
bmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNp
Z25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0
cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRp
b24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9v
bCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQg
dGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAo
SklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1
YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6
ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJ
T04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwog
ICAgICAgICAKICAgICAgICAgdm9pZCBhc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKTsKIApAQCAt
Njg2LDggKzY3OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKGludCBkc3Qs
IGludCBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgp
OwotICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKGludCBzY29wZSwgU3Ry
dWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CisgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJl
KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOworICAgICAgICB2b2lkIGVtaXRMb2Fk
V2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3Ry
dWN0dXJlU2xvdCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgdm9pZCBlbWl0R2V0VmFy
RnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnKTsKICAgICAgICAgdm9pZCBlbWl0
R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnKTsKQEAg
LTY5NSwyMCArNjg4LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRHZXRW
YXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcgdGFnLCBHUFJS
ZWcgcGF5bG9hZCk7CiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUq
IG9wZXJhbmQsIEdQUlJlZyB0YWcsIEdQUlJlZyBwYXlsb2FkKTsKICNlbmRpZgotICAgICAgICB2
b2lkIGVtaXRHZXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOworICAg
ICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0
cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0
Kik7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9TZXQpOwot
ICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBpbnQg
dmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFi
bGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBv
aW50U2V0KiopOwotICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWlu
dHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOworICAgICAgICB2b2lk
IGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKKyAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFi
bGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlLCBXYXRjaHBvaW50U2V0KiopOworICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZp
cnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3Rlcihp
bnQgZHN0KTsKKyAgICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7
CiAKLSAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBm
cm9tLCBpbnQgZW50cnkpOworICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRl
cihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKLSAgICAgICAgSlNWYWx1ZSBn
ZXRDb25zdGFudE9wZXJhbmQoaW50IHNyYyk7Ci0gICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3Rh
bnRJbnQoaW50IHNyYyk7Ci0gICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKGludCBz
cmMpOworICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIp
OworICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7Cisg
ICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3Rlcik7CiAKICAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1l
IFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CiAgICAgICAg
IHZvaWQgZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IElu
c3RydWN0aW9uKiwgUHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbik7CkBAIC03
MzUsNyArNzI4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQoIWl0ZXIt
PmZyb20uaXNTZXQoKSk7CiAgICAgICAgICAgICArK2l0ZXI7CiAgICAgICAgIH0KLSAgICAgICAg
dm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiwgaW50IHZpcnR1YWxSZWdpc3RlckluZGV4KTsKKyAgICAgICAgdm9pZCBsaW5rU2xvd0Nh
c2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVhbFJl
Z2lzdGVyKTsKICAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKICAgICAgICAgICAgIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKIApA
QCAtNzU1LDEzICs3NDgsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tBbmRTbG93UGF0aFJldHVyblR5
cGUoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAjZW5kaWYKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhj
ZXB0aW9uKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBpbnQpOworICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1Zh
bHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+LCBpbnQpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiwg
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCk7CiAgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0
eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRz
PE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAg
ICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBpbnQgcmVzdWx0LCBBcmdz
Li4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24s
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewogICAgICAg
ICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CiAgICAgICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHQpOwpAQCAtODA1LDcgKzc5OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBl
LCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJh
aXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAg
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRp
b25UeXBlIG9wZXJhdGlvbiwgaW50IHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9w
ZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7
CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKICAg
ICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CkBAIC04NjUsNyAr
ODU4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogI2lmbmRlZiBOREVCVUcKLSAgICAg
ICAgdm9pZCBwcmludEJ5dGVjb2RlT3BlcmFuZFR5cGVzKGludCBzcmMxLCBpbnQgc3JjMik7Cisg
ICAgICAgIHZvaWQgcHJpbnRCeXRlY29kZU9wZXJhbmRUeXBlcyhWaXJ0dWFsUmVnaXN0ZXIgc3Jj
MSwgVmlydHVhbFJlZ2lzdGVyIHNyYzIpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0FNUExJTkdf
RkxBR1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0
aWMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAppbmRl
eCAzNDU4NzQ0ZmJjZGQ1M2FjZjlhNDMzMjhiYzQ5NGIwZmVkY2I4OTNmLi4zYTMyYzMyNjE4OWZh
YjE5N2Q3Y2Y5ZjkxZDVmNmI0YjMxMDIwMmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQXJpdGhtZXRpYy5jcHAKQEAgLTE1OCw4ICsxNTgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9qYmVsb3dlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBK
SVQ6OmVtaXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVuc2ln
bmVkPigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBp
bnQgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBy
ZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKQEAgLTE3MiwxMyAr
MTcyLDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigp
OwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0g
Ynl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVj
b2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKICAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0
LCBjb25kaXRpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoaW50
IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRp
dGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIg
b3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25k
aXRpb24gY29uZGl0aW9uKQogewogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0
aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBmYXN0IHBhdGg6CiAgICAgLy8gLSBpbnQgaW1tZWRp
YXRlIHRvIGNvbnN0YW50IGludCBpbW1lZGlhdGUKQEAgLTIzMCwxMyArMjMwLDEzIEBAIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAg
aW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29k
ZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9s
aHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwogICAgIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdl
dCwgY29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVt
cEltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBs
KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdl
dCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KG9wMikpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJl
Z1QwKTsKQEAgLTI1NiwxMyArMjU2LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIg
PSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKICAgICBlbWl0X2NvbXBh
cmVVbnNpZ25lZEltcGwoZHN0LCBvcDEsIG9wMiwgY29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChpbnQgZHN0LCBpbnQgb3AxLCBpbnQgb3AyLCBSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25l
ZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJl
Z2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgaWYgKGlz
T3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIHJlZ1QwKTsKQEAgLTI4NCwxMyArMjg0LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9w
Pgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFU
SU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBp
bnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2Rl
Lm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xo
czsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CiAgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGlu
c3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIGl0ZXIpOwog
fQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKGludCBvcDEsIGludCBv
cDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0
aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFs
T2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBv
cDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0
aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFs
T2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAKICAgICAvLyBXZSBnZW5l
cmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgc2xvdyBwYXRo
OgpAQCAtMzg3LDcgKzM4Nyw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QKIHZvaWQgSklUOjpl
bWl0X29wX2luYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwotICAgIGlu
dCBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyY0RzdCwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7
CkBAIC0zOTksNyArMzk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5jKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKLSAgICBpbnQgc3JjRHN0ID0gYnl0ZWNvZGUu
bV9zcmNEc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2Rl
Lm1fc3JjRHN0OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsK
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwpAQCAtNDE1LDkgKzQxNSw5IEBA
IHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BNb2Q+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAg
IGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNv
ZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICAgICAvLyBNYWtlIHN1cmUg
cmVnaXN0ZXJzIGFyZSBjb3JyZWN0IGZvciB4ODYgSURJViBpbnN0cnVjdGlvbnMuCiAgICAgQVNT
RVJUKHJlZ1QwID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKQEAgLTQ5MSw5ICs0OTEsOSBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU25pcHBldEdlbmVyYXRvcj4KIHZvaWQgSklUOjpl
bWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBQcm9maWxpbmdQb2xpY3kgcHJvZmlsaW5nUG9saWN5KQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCByZXN1bHQgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0
KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ax
ID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1f
cmhzOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKQEAgLTUzOCw4ICs1MzgsOCBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJp
bmFyeU9wRmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJv
ZmlsaQogdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BCaXRub3Q+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBv
cDEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAtNTk5LDkgKzU5OSw5IEBA
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgSklUUmlnaHRTaGlmdEdlbmVy
YXRvcjo6U2hpZnRUeXBlIHNuaXBwZXRTaGlmdFR5cGUpCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsK
LSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBi
eXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7
CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDApOwpAQCAtNjc0LDggKzY3NCw4IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwg
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBO
CiB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0
aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZEZ1bmN0
aW9uIHByb2ZpbGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24gbm9uUHJvZmlsZWRGdW5j
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4o
KTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9w
ZXJhbmQgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAvLyBBcml0aE5l
Z2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0
LgpAQCAtNzI0LDkgKzcyNCw5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2Vu
ZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOCiB2b2lkIEpJVDo6
ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxl
ZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9uIG5vblByb2ZpbGVkRnVuY3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29k
ZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
ID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdz
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwpAQCAtNzk5LDcgKzc5OSw3IEBAIHZvaWQg
SklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNv
bnN0IEluc3RydWN0aW9uKiBjCiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3Rh
cnQgPSBsYWJlbCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKIAogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKQEAg
LTg0NSw5ICs4NDUsOSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElD
PEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgbWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsK
LSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBi
eXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7
CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEpOwpAQCAtOTA2LDkgKzkwNiw5IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xv
dyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbioK
IHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2
PigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQg
b3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1f
cmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCmluZGV4IGMzZjhhYTBjN2ZhZjRlYWQ0MzQ2N2Q1NDI3MjZh
ZThhYzkyNTg3ZGYuLjhkZDc5NmZhOTU2NGFjNTQwYWMwYTUxNGRjZmZkOGZhYjNjMTFiZTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcApAQCAtNTEsNyArNTEsNyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYg
Ynl0ZWNvZGUpCiB7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY2LDcgKzY2LDcgQEAgSklUOjpjb21w
aWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCiAgICAgaW50
IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9hcmd2KTsKIAog
ICAgIGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkp
IHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCArIENhbGxG
cmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApLCByZWdUMCk7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2Fs
bEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCByZWdUMCk7CiAgICAgICAg
IEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAgICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgICAg
IHN0b3JlMzIocmVnVDAsIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLm1fYXJyYXlQcm9maWxlLmFk
ZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CkBAIC04NSw5ICs4NSw5IEBAIHN0ZDo6ZW5h
YmxlX2lmX3Q8CiAsIHZvaWQ+CiBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRl
Y29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvKQogewotICAgIGludCB0aGlzVmFsdWUgPSBieXRlY29k
ZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9h
cmd1bWVudHMub2Zmc2V0KCk7Ci0gICAgaW50IGZpcnN0RnJlZVJlZ2lzdGVyID0gYnl0ZWNvZGUu
bV9maXJzdEZyZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5
dGVjb2RlLm1fdGhpc1ZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRl
Y29kZS5tX2FyZ3VtZW50czsKKyAgICBpbnQgZmlyc3RGcmVlUmVnaXN0ZXIgPSBieXRlY29kZS5t
X2ZpcnN0RnJlZS5vZmZzZXQoKTsgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGEgdmlydHVhbCByZWdp
c3RlciBpZiB3ZSBuZXZlciB1c2UgaXQgYXMgb25lLi4uCiAgICAgaW50IGZpcnN0VmFyQXJnT2Zm
c2V0ID0gYnl0ZWNvZGUubV9maXJzdFZhckFyZzsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYXJndW1lbnRzLCByZWdUMSk7CkBAIC0yMDYsNyArMjA2LDcgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlu
a0luZm9JbmQKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBjYWxsZWUgPSBi
eXRlY29kZS5tX2NhbGxlZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0g
Ynl0ZWNvZGUubV9jYWxsZWU7CiAKICAgICAvKiBDYWxsZXIgYWx3YXlzOgogICAgICAgICAtIFVw
ZGF0ZXMgY2FsbEZyYW1lUmVnaXN0ZXIgdG8gY2FsbGVlIGNhbGxGcmFtZS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCmluZGV4IGI3ZDBjYTIzNThiZTUyNTAx
OGEzZjRlOTYxNmQ5Y2I4NDhmZmY1MjEuLmUwN2E4MzNkNGM4NTNiOWM3YTAyZGU4Yjc0NjAxZGYz
MDY2YmFlMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0
aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNw
cApAQCAtNTAsNyArNTAsNyBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0mIHZtLCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKICAgICBpZiAoT3B0aW9uczo6YnJlYWtPblRocm93KCkpIHsKICAgICAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0b3BKU0NhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAg
ICAgIGRhdGFMb2coIkluIGNhbGwgZnJhbWUgIiwgUmF3UG9pbnRlcih0b3BKU0NhbGxGcmFtZSks
ICIgZm9yIGNvZGUgYmxvY2sgIiwgY29kZUJsb2NrLCAiXG4iKTsKLSAgICAgICAgQ1JBU0goKTsK
KyAgICAgICAgV1RGQnJlYWtwb2ludFRyYXAoKTsKICAgICB9CiAgICAgCiAgICAgaWYgKGF1dG8q
IHNoYWRvd0NoaWNrZW4gPSB2bS5zaGFkb3dDaGlja2VuKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lcy5oCmluZGV4IGZjZThiYjc0NzY2Mzc4Mzc5OGM5OTc1NmU4ZGY3Zjg5ZTA5
YmI4NWIuLjljMTE3MzQzNDBjMzY0NzIxYjM1OGI5NTE2ZjY4NzA5MzM0YzVhMDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCkBAIC00OCwxOSArNDgsMjAgQEAgQUxXQVlT
X0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgSklUOjplbWl0TG9hZEZvckFycmF5TW9k
ZShjb25zdCBJbnN0cnVjdGkKICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0KCk7
CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKGlu
dCBzcmMpCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShW
aXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25zdGFu
dFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgp
OworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMp
LmlzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50
T3BlcmFuZChpbnQgc3JjKQorQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRP
cGVyYW5kKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5p
c0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpKTsKKyAgICBBU1NFUlQoc3JjLmlzQ29uc3RhbnQo
KSk7CiAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJ
RCBmcm9tLCBpbnQgZW50cnkpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9D
YWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiB7
CisgICAgQVNTRVJUKGVudHJ5LmlzSGVhZGVyKCkpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAg
ICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IoZW50cnkp
KTsKICAgICBzdG9yZTMyKGZyb20sIHBheWxvYWRGb3IoZW50cnkpKTsKQEAgLTE0Myw3ICsxNDQs
NyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdp
dGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aQogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiBmdW5jdGlvbiwgaW50IGRzdCkKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0
KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMTU1LDcgKzE1Niw3
IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFk
YXRhPgotQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1l
dGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBpbnQg
ZHN0KQorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1l
dGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0
dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhKTsKQEAgLTE2Nyw5ICsxNjgsOSBAQCBBTFdBWVNfSU5MSU5FIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFs
dWVSZQogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5r
U2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
LCBpbnQgdlJlZykKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlND
ZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3Rl
ciByZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZSh2UmVn
KSkKKyAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHJlZykpCiAgICAg
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIH0KIApAQCAtMjg0LDkgKzI4NSw5IEBAIEFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OnNhbXBsZUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykKICNl
bmRpZgogI2VuZGlmCiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50
Q2hhcihpbnQgc3JjKQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRD
aGFyKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0Nv
bnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3Ry
aW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5n
dGgoKSA9PSAxOworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3Bl
cmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyku
YXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwogfQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUpCkBAIC0zNjMsMjYgKzM2
NCwyNiBAQCBpbmxpbmUgSklUQXJyYXlNb2RlIEpJVDo6Y2hvb3NlQXJyYXlNb2RlKEFycmF5UHJv
ZmlsZSogcHJvZmlsZSkKICAgICByZXR1cm4gSklUQ29udGlndW91czsKIH0KIAotQUxXQVlTX0lO
TElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KGludCBzcmMpCitBTFdBWVNf
SU5MSU5FIGludDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVy
IHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNJbnQzMigpOwog
fQogCi1BTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zdGFudERvdWJsZShp
bnQgc3JjKQorQUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnREb3Vi
bGUoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5k
KHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRS
ZWdpc3RlcihpbnQgZHN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3Rl
cihWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZp
bmVkKCksIGFkZHJlc3NGb3IoZHN0KSk7CiB9CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogCi1p
bmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkVGFnKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcpCitp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkVGFnKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVy
SUQgdGFnKQogewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgo
aW5kZXgpKSB7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgbW92ZShJbW0z
MihnZXRDb25zdGFudE9wZXJhbmQoaW5kZXgpLnRhZygpKSwgdGFnKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTM5MCw5ICszOTEsOSBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkVGFn
KGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcpCiAgICAgbG9hZDMyKHRhZ0ZvcihpbmRleCksIHRh
Zyk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRQYXlsb2FkKGludCBpbmRleCwgUmVn
aXN0ZXJJRCBwYXlsb2FkKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFBheWxvYWQoVmlydHVh
bFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkKQogewotICAgIGlmIChtX2NvZGVCbG9j
ay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7CisgICAgaWYgKHJlZy5pc0NvbnN0
YW50KCkpIHsKICAgICAgICAgbW92ZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQoaW5kZXgpLnBh
eWxvYWQoKSksIHBheWxvYWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDA2LDEzNiAr
NDA3LDEzMyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKGNvbnN0IEpTVmFsdWUmIHYsIFJl
Z2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQpCiAgICAgbW92ZShJbW0zMih2LnRhZygp
KSwgdGFnKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihpbnQgc3JjLCBKU1ZhbHVlUmVncyBkc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0R2V0KFZpcnR1YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKIHsKICAgICBlbWl0
TG9hZChzcmMsIGRzdC50YWdHUFIoKSwgZHN0LnBheWxvYWRHUFIoKSk7CiB9CiAKLUFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgSlNWYWx1ZVJl
Z3MgZnJvbSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkKIHsKICAgICBlbWl0U3RvcmUo
ZHN0LCBmcm9tLnRhZ0dQUigpLCBmcm9tLnBheWxvYWRHUFIoKSk7CiB9CiAKLWlubGluZSB2b2lk
IEpJVDo6ZW1pdExvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXls
b2FkLCBSZWdpc3RlcklEIGJhc2UpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKFZpcnR1YWxS
ZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVy
SUQgYmFzZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh0YWcgIT0gcGF5bG9hZCk7CiAKICAgICBp
ZiAoYmFzZSA9PSBjYWxsRnJhbWVSZWdpc3RlcikgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChw
YXlsb2FkICE9IGJhc2UpOwotICAgICAgICBlbWl0TG9hZFBheWxvYWQoaW5kZXgsIHBheWxvYWQp
OwotICAgICAgICBlbWl0TG9hZFRhZyhpbmRleCwgdGFnKTsKKyAgICAgICAgZW1pdExvYWRQYXls
b2FkKHJlZywgcGF5bG9hZCk7CisgICAgICAgIGVtaXRMb2FkVGFnKHJlZywgdGFnKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIFZpcnR1YWxSZWdpc3RlciB0YXJnZXQgeyBpbmRleCB9
OwogICAgIGlmIChwYXlsb2FkID09IGJhc2UpIHsgLy8gYXZvaWQgc3RvbXBpbmcgYmFzZQotICAg
ICAgICBsb2FkMzIodGFnRm9yKHRhcmdldCwgYmFzZSksIHRhZyk7Ci0gICAgICAgIGxvYWQzMihw
YXlsb2FkRm9yKHRhcmdldCwgYmFzZSksIHBheWxvYWQpOworICAgICAgICBsb2FkMzIodGFnRm9y
KHJlZywgYmFzZSksIHRhZyk7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKHJlZywgYmFzZSks
IHBheWxvYWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbG9hZDMyKHBheWxvYWRG
b3IodGFyZ2V0LCBiYXNlKSwgcGF5bG9hZCk7Ci0gICAgbG9hZDMyKHRhZ0Zvcih0YXJnZXQsIGJh
c2UpLCB0YWcpOworICAgIGxvYWQzMihwYXlsb2FkRm9yKHJlZywgYmFzZSksIHBheWxvYWQpOwor
ICAgIGxvYWQzMih0YWdGb3IocmVnLCBiYXNlKSwgdGFnKTsKIH0KIAotaW5saW5lIHZvaWQgSklU
OjplbWl0TG9hZDIoaW50IGluZGV4MSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxv
YWQxLCBpbnQgaW5kZXgyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpCitp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkMihWaXJ0dWFsUmVnaXN0ZXIgcmVnMSwgUmVnaXN0ZXJJ
RCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnMiwgUmVnaXN0
ZXJJRCB0YWcyLCBSZWdpc3RlcklEIHBheWxvYWQyKQogewotICAgIGVtaXRMb2FkKGluZGV4Miwg
dGFnMiwgcGF5bG9hZDIpOwotICAgIGVtaXRMb2FkKGluZGV4MSwgdGFnMSwgcGF5bG9hZDEpOwor
ICAgIGVtaXRMb2FkKHJlZzIsIHRhZzIsIHBheWxvYWQyKTsKKyAgICBlbWl0TG9hZChyZWcxLCB0
YWcxLCBwYXlsb2FkMSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoaW50
IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91
YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKLSAgICBpZiAo
bV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgewotICAgICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0
YW50UmVnaXN0ZXIoaW5kZXgpOworICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7CisgICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29u
c3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJmlu
Q29uc3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQotICAgICAgICBsb2FkRG91YmxlKGFk
ZHJlc3NGb3IoaW5kZXgpLCB2YWx1ZSk7CisgICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0Zvcihy
ZWcpLCB2YWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91Ymxl
KGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9h
ZEludDMyVG9Eb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQog
ewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7
Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVC
bG9jay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCk7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkp
IHsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29k
ZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGNoYXIqIGJ5dGVQb2ludGVy
ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmluQ29uc3RhbnRQb29sKTsKICAgICAgICAgY29u
dmVydEludDMyVG9Eb3VibGUoQWJzb2x1dGVBZGRyZXNzKGJ5dGVQb2ludGVyICsgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgdmFsdWUpOwogICAgIH0gZWxzZQot
ICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShwYXlsb2FkRm9yKGluZGV4KSwgdmFsdWUpOwor
ICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShwYXlsb2FkRm9yKHJlZyksIHZhbHVlKTsKIH0K
IAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywg
UmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCitpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBw
YXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCiB7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRhcmdldCB7
IGluZGV4IH07Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHRhcmdldCwgYmFzZSkp
OwotICAgIHN0b3JlMzIodGFnLCB0YWdGb3IodGFyZ2V0LCBiYXNlKSk7CisgICAgc3RvcmUzMihw
YXlsb2FkLCBwYXlsb2FkRm9yKHJlZywgYmFzZSkpOworICAgIHN0b3JlMzIodGFnLCB0YWdGb3Io
cmVnLCBiYXNlKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoaW50IGlu
ZGV4LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQoraW5saW5lIHZvaWQg
SklUOjplbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHBheWxv
YWQsIGJvb2wgaW5kZXhJc0ludDMyKQogewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZv
cihpbmRleCkpOworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcpKTsKICAgICBp
ZiAoIWluZGV4SXNJbnQzMikKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
SW50MzJUYWcpLCB0YWdGb3IoaW5kZXgpKTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IocmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6
ZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRl
eElzSW50MzIpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMyKFZpcnR1YWxSZWdpc3Rl
ciByZWcsIFRydXN0ZWRJbW0zMiBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMikKIHsKLSAgICBz
dG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IoaW5kZXgpKTsKKyAgICBzdG9yZTMyKHBheWxvYWQs
IHBheWxvYWRGb3IocmVnKSk7CiAgICAgaWYgKCFpbmRleElzSW50MzIpCi0gICAgICAgIHN0b3Jl
MzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKGluZGV4KSk7CisgICAg
ICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKHJlZykp
OwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUNlbGwoaW50IGluZGV4LCBSZWdpc3Rl
cklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0NlbGwpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9y
ZUNlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4
SXNDZWxsKQogewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihpbmRleCkpOworICAg
IHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcpKTsKICAgICBpZiAoIWluZGV4SXNDZWxs
KQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9y
KGluZGV4KSk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcp
LCB0YWdGb3IocmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlQm9vbChpbnQg
aW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQm9vbCkKK2lubGluZSB2b2lk
IEpJVDo6ZW1pdFN0b3JlQm9vbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHBheWxv
YWQsIGJvb2wgaW5kZXhJc0Jvb2wpCiB7Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9y
KGluZGV4KSk7CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZykpOwogICAgIGlm
ICghaW5kZXhJc0Jvb2wpCi0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJv
b2xlYW5UYWcpLCB0YWdGb3IoaW5kZXgpKTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Qm9vbGVhblRhZyksIHRhZ0ZvcihyZWcpKTsKIH0KIAotaW5saW5lIHZvaWQgSklU
OjplbWl0U3RvcmVEb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCitpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRTdG9yZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVy
SUQgdmFsdWUpCiB7Ci0gICAgc3RvcmVEb3VibGUodmFsdWUsIGFkZHJlc3NGb3IoaW5kZXgpKTsK
KyAgICBzdG9yZURvdWJsZSh2YWx1ZSwgYWRkcmVzc0ZvcihyZWcpKTsKIH0KIAotaW5saW5lIHZv
aWQgSklUOjplbWl0U3RvcmUoaW50IGluZGV4LCBjb25zdCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdp
c3RlcklEIGJhc2UpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIg
cmVnLCBjb25zdCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdpc3RlcklEIGJhc2UpCiB7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHRhcmdldCB7IGluZGV4IH07Ci0gICAgc3RvcmUzMihJbW0zMihjb25zdGFu
dC5wYXlsb2FkKCkpLCBwYXlsb2FkRm9yKHRhcmdldCwgYmFzZSkpOwotICAgIHN0b3JlMzIoSW1t
MzIoY29uc3RhbnQudGFnKCkpLCB0YWdGb3IodGFyZ2V0LCBiYXNlKSk7CisgICAgc3RvcmUzMihJ
bW0zMihjb25zdGFudC5wYXlsb2FkKCkpLCBwYXlsb2FkRm9yKHJlZywgYmFzZSkpOworICAgIHN0
b3JlMzIoSW1tMzIoY29uc3RhbnQudGFnKCkpLCB0YWdGb3IocmVnLCBiYXNlKSk7CiB9CiAKLWlu
bGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGludCB2aXJ0dWFsUmVn
aXN0ZXJJbmRleCkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KFZpcnR1YWxSZWdpc3RlciByZWcpCiB7CiAgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5v
dEltbWVkaWF0ZSh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpIHsKLSAgICAgICAgaWYgKG1fY29kZUJs
b2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleCh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpCisgICAg
ICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgp
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEpT
Q2VsbCh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZW1p
dEp1bXBJZk5vdEpTQ2VsbChyZWcpKTsKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0
ZXJJRCB0YWcpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChW
aXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKIHsKICAgICBpZiAoIW1fY29kZUJs
b2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHZpcnR1YWxSZWdpc3RlckluZGV4KSkgewotICAgICAg
ICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHZpcnR1YWxSZWdpc3Rl
ckluZGV4KSkKKyAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRT
bG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdENlbGwodGFnKSk7CiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklU
Ojppc09wZXJhbmRDb25zdGFudEludChpbnQgc3JjKQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6
aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4g
bV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykgJiYgZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuaXNJbnQzMigpOworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKIH0KIAotQUxXQVlTX0lOTElORSBib29s
IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KGludCBvcDEsIGludCBvcDIsIGludCYgb3AsIGlu
dDMyX3QmIGNvbnN0YW50KQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0
YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIGludCYgb3As
IGludDMyX3QmIGNvbnN0YW50KQogewogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEp
KSB7CiAgICAgICAgIGNvbnN0YW50ID0gZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJbnQzMigp
OwpAQCAtNTU1LDExICs1NTMsMTEgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFu
ZENvbnN0YW50SW50KGludCBvcDEsIGludCBvcDIsIGludCYgb3AsIGludDMyX3QKICNlbHNlIC8v
IFVTRShKU1ZBTFVFMzJfNjQpCiAKIC8vIGdldCBhcmcgcHV0cyBhbiBhcmcgZnJvbSB0aGUgU0Yg
cmVnaXN0ZXIgYXJyYXkgaW50byBhIGgvdyByZWdpc3RlcgotQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBSZWdpc3RlcklEIGRzdCkKK0FMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IHNyYywgUmVnaXN0ZXJJRCBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8v
IFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBn
ZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKLSAgICBpZiAobV9j
b2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpIHsKKyAgICBpZiAoc3JjLmlz
Q29uc3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKICAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOwpAQCAtNTcx
LDQ3ICs1NjksMzIgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihpbnQgc3JjLCBSZWdpc3RlcklEIGRzdCkKICAgICBsb2FkNjQoYWRkcmVzc0ZvcihzcmMp
LCBkc3QpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGludCBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgSlNWYWx1ZVJlZ3MgZHN0
KQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBkc3QucGF5bG9hZEdQUigpKTsK
IH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYy5vZmZzZXQoKSwgZHN0KTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW50IHNyYzEsIFJlZ2lzdGVySUQgZHN0MSwgaW50IHNy
YzIsIFJlZ2lzdGVySUQgZHN0MikKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1
YWxSZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMxLCBkc3QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGRz
dDIpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhWaXJ0dWFsUmVnaXN0ZXIgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBWaXJ0dWFsUmVnaXN0ZXIg
c3JjMiwgUmVnaXN0ZXJJRCBkc3QyKQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNy
YzEub2Zmc2V0KCksIGRzdDEsIHNyYzIub2Zmc2V0KCksIGRzdDIpOwotfQotCi1BTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChpbnQgc3JjKQorQUxXQVlTX0lOTElO
RSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsK
LSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykgJiYg
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworICAgIHJldHVybiBzcmMuaXNDb25z
dGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKIH0KIAotQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBSZWdpc3Rl
cklEIGZyb20pCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKIHsKICAgICBzdG9yZTY0KGZy
b20sIGFkZHJlc3NGb3IoZHN0KSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkKK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwg
SlNWYWx1ZVJlZ3MgZnJvbSkKIHsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgZnJv
bS5wYXlsb2FkR1BSKCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKLXsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdC5vZmZzZXQoKSwgZnJvbSk7Ci19Ci0KIEFMV0FZ
U19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZkJvdGhKU0NlbGxzKFJlZ2lzdGVySUQg
cmVnMSwgUmVnaXN0ZXJJRCByZWcyLCBSZWdpc3RlcklEIHNjcmF0Y2gpCiB7CiAgICAgbW92ZShy
ZWcxLCBzY3JhdGNoKTsKQEAgLTYyOSwyOCArNjEyLDI4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZykKICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZywgaW50IHZSZWcp
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVn
aXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewogICAgIGlmICghbV9jb2RlQmxv
Y2stPmlzS25vd25Ob3RJbW1lZGlhdGUodlJlZykpCiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWcpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKGlu
dCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERv
dWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0gICAgaWYg
KG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKLSAgICAgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25z
dGFudFJlZ2lzdGVyKGluZGV4KTsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgeworICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNv
bnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZp
bkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbG9hZERvdWJsZShh
ZGRyZXNzRm9yKGluZGV4KSwgdmFsdWUpOworICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3Io
cmVnKSwgdmFsdWUpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkSW50MzJUb0RvdWJs
ZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExv
YWRJbnQzMlRvRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkK
IHsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkg
ewotICAgICAgICBBU1NFUlQoaXNPcGVyYW5kQ29uc3RhbnRJbnQoaW5kZXgpKTsKLSAgICAgICAg
Y29udmVydEludDMyVG9Eb3VibGUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKGluZGV4KS5hc0lu
dDMyKCkpLCB2YWx1ZSk7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgQVNT
RVJUKGlzT3BlcmFuZENvbnN0YW50SW50KHJlZykpOworICAgICAgICBjb252ZXJ0SW50MzJUb0Rv
dWJsZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQocmVnKS5hc0ludDMyKCkpLCB2YWx1ZSk7CiAg
ICAgfSBlbHNlCi0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGFkZHJlc3NGb3IoaW5kZXgp
LCB2YWx1ZSk7CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGFkZHJlc3NGb3IocmVnKSwg
dmFsdWUpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpJVDo6UGF0Y2hhYmxlSnVtcCBKSVQ6OmVtaXRQ
YXRjaGFibGVKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCByZWcpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCA4ODI2OGQ5YjNjMzRiZTgxZDQ3MzZkN2EyODE4MWZh
NTIyODYzMzI3Li43ZjM1OGMxMjAzYmRlYWU5MGQ0NGEyYzdmYjg4OTk3ODA4OWNhODVmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTU2LDEwICs1NiwxMCBA
QCBuYW1lc3BhY2UgSlNDIHsKIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTW92PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV9zcmMub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSBieXRlY29kZS5tX3NyYzsKIAotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lz
dGVySW5kZXgoc3JjKSkgeworICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIEpT
VmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgaWYg
KCF2YWx1ZS5pc051bWJlcigpKQogICAgICAgICAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC03Nyw3ICs3Nyw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2VuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW5k
PigpOwogICAgIFJFTEVBU0VfQVNTRVJUKHJldHVyblZhbHVlR1BSICE9IGNhbGxGcmFtZVJlZ2lz
dGVyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0
KCksIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7
CiAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICByZXQoKTsKQEAgLTExMCw3ICsxMTAs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywg
SklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJ
bW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwogICAg
ICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlu
bGluZUNhcGFjaXR5KCkpOwogICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiAgICAgfQogfQogCkBA
IC0xMjAsNyArMTIwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3Qg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVj
dEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3T2JqZWN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJlKTsKICAgICBlbWl0
U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTI5LDkgKzEyOSw5IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3Rh
bmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5jZT4o
KTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGNvbnN0
cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3Rvci5vZmZzZXQoKTsKLSAgICBpbnQgaGFzSW5z
dGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZS5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwogCkBAIC0x
NTUsOSArMTU1LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bf
aW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsK
LSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvdG8gPSBieXRlY29kZS5tX3By
b3RvdHlwZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAogICAgIC8vIExv
YWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkg
aW50byByZWdpc3RlcnMuCiAgICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdl
IHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9y
IHRoZSByZXN1bHQuCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKLSAgICBpbnQgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciYg
Z2VuID0gbV9pbnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsrXTsKICAgICAKQEAgLTIwNCw4
ICsyMDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0
cnVjdGlvbiopCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSXNFbXB0eT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zm
c2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7CiAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOwpAQCAtMjE3LDggKzIxNyw4
IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkPigpOwotICAgIGludCBkc3QgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCBpc0NlbGwgPSBicmFu
Y2hJZkNlbGwocmVnVDApOwpAQCAtMjQ2LDggKzI0Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lz
X3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIApAQCAtMjYxLDggKzI2MSw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKQEAgLTI3NCw4ICsyNzQsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2
b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cElzTnVtYmVyPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7CiAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdpc3Rl
ciwgcmVnVDApOwpAQCAtMjg2LDggKzI4Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJl
cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfY2VsbF93aXRoX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzQ2Vs
bFdpdGhUeXBlPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKQEAgLTMwNyw4ICszMDcs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5k
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCBpc05vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtMzMyLDcgKzMzMiw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3JldChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgLy8g
UmV0dXJuIHRoZSByZXN1bHQgaW4gJWVheC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFJldD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fdmFsdWUub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKIAogICAgIGNoZWNr
U3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpA
QCAtMzQzLDggKzM0Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fc3Jj
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogICAgIApAQCAtMzc3LDE1ICszNzcsMTUgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbi5vZmZzZXQoKSwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLm9mZnNldCgpLCByZWdUMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5vdD4oKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKSwgcmVn
VDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9vcGVyYW5kLCByZWdU
MCk7CiAKICAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsgaWYgdGhlIHZhbHVl
IHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwgYmUKICAgICAvLyBj
bGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAgb3IgMSBmb3IgZmFs
c2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KQEAgLTM5NCw3ICszOTQsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwogICAgIHhvcjY0KFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MDcsMTQgKzQwNywxNCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKICAgICBib29sIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fY29uZGl0aW9uLm9mZnNldCgpLCB2YWx1ZSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwogICAgIGFkZEp1bXAoYnJhbmNo
SWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZw
UmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
amVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcU51bGw+KCk7Ci0gICAg
aW50IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKQEAgLTQzOCw3ICs0MzgsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKbmVxTnVsbD4oKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OwpAQCAtNDYyLDcgKzQ2Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVm
aW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdW5kZWZpbmVkT3JO
dWxsPigpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CkBAIC00
NzQsNyArNDc0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVu
ZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnVuZGVmaW5l
ZE9yTnVsbD4oKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwpA
QCAtNDg3LDggKzQ4Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxUHRyPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBzcmMgPSBieXRlY29kZS5tX3Zh
bHVlLm9mZnNldCgpOwotICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9w
ZXJhbmQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlci5vZmZzZXQoKSk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRl
ciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsKICAgICBB
U1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAg
ICAKQEAgLTUwMiwxOCArNTAyLDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9lcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jocy5v
ZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1f
bGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdU
MSwgcmVnVDAsIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4o
KTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0
ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jocy5vZmZzZXQoKSwgcmVn
VDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwg
Ynl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDAsIHJlZ1QxLCByZWdUMik7CiAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJl
Z1QxKSwgdGFyZ2V0KTsKIH0KQEAgLTUyNywyNiArNTI3LDI2IEBAIHZvaWQgSklUOjplbWl0X29w
X2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgR1BSUmVn
IHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CiAgICAgYm9v
bCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24ub2Zmc2V0KCksIHZhbHVlKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CiAg
ICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4o
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocy5vZmZzZXQoKSwg
cmVnVDAsIGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEp
OwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAg
ICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwogICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1Qw
LCBieXRlY29kZS5tX3Jocy5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgYWRk
SnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKIH0KQEAgLTU1
Niw3ICs1NTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wVGhyb3c+KCk7CiAgICAgQVNTRVJUKHJlZ1QwID09IHJldHVyblZhbHVlR1BSKTsK
ICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRv
cEVudHJ5RnJhbWUpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1
ZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV92YWx1ZSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvblRocm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogfQpAQCAtNTY1LDkgKzU2
NSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVx
VHlwZSB0eXBlKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQg
c3JjMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBzcmMyID0gYnl0ZWNvZGUu
bV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CiAgICAgCkBAIC02MDksOCArNjA5LDgg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBDb21waWxlT3AKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBpbnQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGludCBzcmMxID0g
Ynl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzIgPSBieXRlY29kZS5tX3Jocy5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOworICAg
IFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOwogCkBAIC02NjcsOCArNjY3
LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJl
cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCk7Ci0gICAgaW50IGRz
dFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5dGVj
b2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwogICAg
IAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CkBAIC02ODEsOCAr
NjgxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCk7Ci0gICAgaW50IGRzdFZSZWcgPSBi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwogCiAgICAgSnVtcCBp
c05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtNzAxLDIwICs3MDEsMjAgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2RlLm1f
b3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsK
IAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKTsKLSAgICBpbnQgZHN0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmNWUmVnID0gYnl0ZWNvZGUubV9v
cGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CiAKICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTc0NSwxMCArNzQ1LDEwIEBAIHZv
aWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fdm0pLCByZWdUMyk7CiAgICAgbG9hZDY0KEFk
ZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSksIHJlZ1QwKTsKICAgICBzdG9yZTY0
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIEFkZHJlc3MocmVnVDMs
IFZNOjpleGNlcHRpb25PZmZzZXQoKSkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9leGNlcHRpb24ub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9leGNlcHRpb24pOwogCiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIEV4Y2Vw
dGlvbjo6dmFsdWVPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdGhyb3duVmFsdWUub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV90aHJvd25WYWx1ZSk7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAg
ICAvLyBGSVhNRTogY29uc2lkZXIgaW5saW5lIGNhY2hpbmcgdGhlIHByb2Nlc3Mgb2YgZG9pbmcg
T1NSIGVudHJ5LCBpbmNsdWRpbmcKQEAgLTc1Niw3ICs3NTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZhbHVlUHJv
ZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOworICAgIFZh
bHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9i
dWZmZXI7CiAgICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0
ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgZWxzZQpAQCAtNzY2LDcgKzc2Niw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CiAg
ICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7CiAgICAgaWYgKGJ1ZmZlciAmJiBzaG91bGRFbWl0
UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxl
QW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1
ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgICAgIEpTVmFs
dWVSZWdzIHJlZ3MocmVnVDApOwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9maWxlLm1fb3BlcmFuZCwgcmVncyk7CiAgICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpKTsKQEAgLTc4MywxMCArNzgz
LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmlsZShjb25zdCBJbnN0
cnVjdGlvbiopCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsKLSAgICBpbnQgY3VycmVudFNj
b3BlID0gYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY3Vy
cmVudFNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGN1cnJlbnRTY29wZSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29w
ZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5t
X2RzdC5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9kc3Qs
IHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzk0LDcgKzc5NCw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN3aXRjaEltbT4o
KTsKICAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsKICAgICB1
bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgdW5zaWduZWQgc2NydXRpbmVlID0gYnl0ZWNv
ZGUubV9zY3J1dGluZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9
IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3
aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBTaW1w
bGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOwpAQCAtODExLDcgKzgxMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9j
aGFyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hDaGFyPigpOwogICAgIHNpemVf
dCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OwogICAgIHVuc2lnbmVkIGRlZmF1
bHRPZmZzZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV9kZWZh
dWx0T2Zmc2V0KTsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5l
ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9z
Y3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0
aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFNpbXBsZUp1bXBUYWJsZSog
anVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CkBA
IC04MjgsNyArODI4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoU3RyaW5nPigpOwogICAgIHNpemVfdCB0YWJsZUlu
ZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OwogICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0
KTsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZS5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7
CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJh
Y2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxl
ID0gJm1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CkBAIC04
NTEsOCArODUxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7CiAgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElm
Tm90Q2VsbChyZWdUMCk7CkBAIC04ODQsOCArODg0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFf
bnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVt
aXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCk7
Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMxID0g
Ynl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwogICAgIEp1
bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtOTIwLDcgKzkyMCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKikKICAgICAvLyBv
YmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6ZV90IGNv
dW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKICAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJs
b2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGog
PCBjb3VudDsgKytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZv
ckxvY2FsKGopLm9mZnNldCgpKTsKKyAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVn
aXN0ZXJGb3JMb2NhbChqKSk7CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsK
IApAQCAtOTMwLDcgKzkzMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3Ry
dWN0aW9uKikKIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBl
bWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlZ1Qw
KTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVD
aGFpbigpKSwgcmVnVDApOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CkBAIC05NDEs
NyArOTQxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wVG9UaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZt
ZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9zcmNEc3Qub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDEpOwogCkBAIC05NTQsNyArOTU0LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+
KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
Ci0gICAgaW50IGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlLm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKICAgICBXcml0ZUJhcnJpZXJC
YXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwog
ICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0
YVJlZyA9IHJlZ1Q0OwpAQCAtOTgyLDEzICs5ODIsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3Jl
YXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBsb2Fk
OChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgp
KSwgc2NyYXRjaFJlZyk7CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJl
Zywgc2NyYXRjaFJlZyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hl
Y2tfdGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rkej4oKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyLm9m
ZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Rh
cmdldFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1w
dHkocmVnVDApKTsKIH0KIApAQCAtMTAwMiw3ICsxMDAyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigp
OwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgYm94Qm9vbGVh
bihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpLCByZXR1cm5WYWx1
ZUdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJu
VmFsdWVHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCkBAIC0xMDEzLDcgKzEwMTMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZQogICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgeG9yMzIoVHJ1c3RlZElt
bTMyKDB4MSksIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVl
UmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTEwNDEsMTAgKzEwNDEs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFYKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5j
ZW9mQ3VzdG9tPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwotICAgIGludCBjb25zdHJ1
Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3Iub2Zmc2V0KCk7Ci0gICAgaW50IGhhc0luc3Rh
bmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWUub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9y
ID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFu
Y2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNv
bnN0cnVjdG9yLCByZWdUMSk7CkBAIC0xMTIxLDggKzExMjEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHAub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKICAg
ICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTEzMiwxMiArMTEz
MiwxMiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBKdW1wIGxhenlKdW1wOwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBkc3QgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQo
Ynl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChi
eXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CiAjZW5kaWYKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9u
RGVjbCk7CiAKQEAgLTExNzgsMTEgKzExNzgsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2
b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3A+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVn
VDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDAp
OwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwg
cmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CiAj
ZW5kaWYKIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+
ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKQEAgLTEyMjQsMTAgKzEyMjQs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BOZXdBcnJheT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
Ci0gICAgaW50IHZhbHVlc0luZGV4ID0gYnl0ZWNvZGUubV9hcmd2Lm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5t
X2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNJbmRleCAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOworICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFBy
b2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAog
ICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7
CiB9CkBAIC0xMjM2LDggKzEyMzYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0
aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXplPigp
OwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwot
ICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc2l6ZUluZGV4
ID0gYnl0ZWNvZGUubV9sZW5ndGgub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29k
ZS5tX2xlbmd0aDsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2l6ZUluZGV4LCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJh
eVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksCkBAIC0xMjUzLDkgKzEyNTMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
YXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2
b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zm
c2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBl
bnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJh
dG9yLCByZWdUMSk7CkBAIC0xMjk5LDkgKzEyOTksOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNf
aW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhl
ZFByb3BlcnR5PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBp
bnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Owog
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAg
ICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8oKTsKICAg
ICAKQEAgLTEzNDcsOSArMTM0Nyw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhl
ZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uCiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwotICAgIGludCBkc3QgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQo
KTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZh
bENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogCiAg
ICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwpAQCAtMTM2NiwxMCArMTM2NiwxMCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCk7Ci0gICAgaW50
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlLm9mZnNldCgpOwotICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXgub2Zmc2V0
KCk7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBpbmRl
eCA9IGJ5dGVjb2RlLm1faW5kZXg7CisgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBi
eXRlY29kZS5tX2VudW1lcmF0b3I7CiAKICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxs
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBAIC0xNDA3LDkgKzE0
MDcsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0
cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvclN0
cnVjdHVyZVBuYW1lPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsK
LSAgICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvci5vZmZzZXQoKTsKLSAg
ICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRv
ciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBi
eXRlY29kZS5tX2luZGV4OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVn
VDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwpAQCAt
MTQzMSw5ICsxNDMxLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVf
cG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGkKIHZvaWQgSklUOjplbWl0
X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3Iu
b2Zmc2V0KCk7Ci0gICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleC5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaW5kZXgsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3Is
IHJlZ1QxKTsKQEAgLTE0NTcsNyArMTQ1Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVf
dHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7CiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVHlwZUxv
Y2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKLSAg
ICBpbnQgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3Rlci5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5t
X3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWVUb1Byb2ZpbGUsIHJlZ1QwKTsKIApAQCAtMTUyNiw3ICsxNTI2LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3QKICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlz
IG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCiAgICAgR1BSUmVnIHNjcmF0Y2gyUmVn
ID0gcmVnVDI7CiAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNr
ZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7CiAgICAgbG9nU2hhZG93Q2hpY2tl
blByb2xvZ3VlUGFja2V0KHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHJlZ1QzKTsKIH0K
IApAQCAtMTU0MCw4ICsxNTQwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlj
a2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBHUFJS
ZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1l
bnQgcmVnaXN0ZXIuCiAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CiAgICAgZW5zdXJl
U2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBz
Y3JhdGNoMlJlZyk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNW
YWx1ZS5vZmZzZXQoKSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV90aGlzVmFsdWUsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKICAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tl
dChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJsb2Nr
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwogfQogCkBAIC0xNTYyLDcgKzE1NjIs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfYXJndW1lbnRfY291
bnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCk7Ci0gICAg
aW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKICAgICBzdWIzMihUcnVzdGVk
SW1tMzIoMSksIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVnczo6
d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsKQEAgLTE1NzMsNyArMTU3Myw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCk7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICB1bnNpZ25lZCBudW1QYXJhbXNUb1NraXAgPSBieXRlY29kZS5tX251
bVBhcmFtZXRlcnNUb1NraXA7CiAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7CiAgICAgc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCByZWdUMCk7CkBAIC0xNjAzLDcgKzE2MDMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfcmVzdF9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZv
aWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QXJndW1lbnQ+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBpbnQgaW5k
ZXggPSBieXRlY29kZS5tX2luZGV4OwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyhyZWdUMCk7CkBAIC0xNjEzLDcgKzE2MTMsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IAogICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKSwgcmVnVDIpOwogICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5j
aDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleCkpOwotICAgIGxv
YWRWYWx1ZShhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSwg
cmVzdWx0UmVncyk7CisgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENh
bGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIHJlc3VsdFJlZ3MpOwogICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAppbmRleCBj
MWJiNjU3YTA3YzNjODdkZTI4ZGQ1OGJjZDIyNjA1NTgwOTczYWU4Li4zMDI4NmNkMzI5YjMxZjk3
NGI4ZWQ4NGY1MWFmNmZiYzc2MzgwYzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwCkBAIC05NTAsNyArOTUwLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1ZVBy
b2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKKyAgICBW
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1f
YnVmZmVyOwogICAgIGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5
dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGVsc2UKQEAgLTk2MCw3ICs5NjAsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKICAgICBza2lwT1NSRW50
cnkubGluayh0aGlzKTsKICAgICBpZiAoYnVmZmVyICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkg
ewotICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBw
cm9maWxlKSB7CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZp
cnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVncyhy
ZWdUMSwgcmVnVDApOwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9maWxl
Lm1fb3BlcmFuZCwgcmVncyk7CiAgICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHN0
YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IDA4MmE3ODMwODRkMmZjNWEwNzM2YjFlNmI3
MWE4YTA2ZDMwMzZmN2UuLjZmZjg4MDIxMTM4MmU5NjBiZDcyMWFjZDM4NTA5ZThjMjg1NjA2NTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtMTY1
NSwxOCArMTY1NSwxOCBAQCBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25PcHRpbWl6ZShWTSogdm1Qb2ludGVyLCB1aW50MzJfdCBieXRlYwogICAgICAgICBpZiAoVU5M
SUtFTFkoT3B0aW9uczo6dmVyYm9zZU9TUigpKSkKICAgICAgICAgICAgIGRhdGFMb2coIlRyaWdn
ZXJpbmcgb3B0aW1pemVkIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICJcbiIpOwogCi0g
ICAgICAgIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzOworICAgICAgICB1bnNpZ25lZCBudW1W
YXJzV2l0aFZhbHVlcyA9IDA7CiAgICAgICAgIGlmIChieXRlY29kZUluZGV4KQogICAgICAgICAg
ICAgbnVtVmFyc1dpdGhWYWx1ZXMgPSBjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IDA7Ci0gICAgICAgIE9w
ZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiBtdXN0SGFuZGxlVmFsdWVzKGNvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpLCBudW1WYXJzV2l0aFZhbHVlcyk7CisKKyAgICAgICAgT3BlcmFuZHM8T3B0
aW9uYWw8SlNWYWx1ZT4+IG11c3RIYW5kbGVWYWx1ZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCksIG51bVZhcnNXaXRoVmFsdWVzLCAwKTsKICAgICAgICAgaW50IGxvY2Fsc1VzZWRGb3JDYWxs
ZWVTYXZlcyA9IHN0YXRpY19jYXN0PGludD4oQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVl
U2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGludCBv
cGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7Ci0gICAgICAgICAg
ICBpZiAob3BlcmFuZElzTG9jYWwob3BlcmFuZCkgJiYgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQp
LnRvTG9jYWwoKSA8IGxvY2Fsc1VzZWRGb3JDYWxsZWVTYXZlcykKKyAgICAgICAgICAgIE9wZXJh
bmQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworCisgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkgJiYgb3BlcmFuZC50b0xvY2FsKCkgPCBsb2Nh
bHNVc2VkRm9yQ2FsbGVlU2F2ZXMpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICBtdXN0SGFuZGxlVmFsdWVzW2ldID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQp
LmpzVmFsdWUoKTsKKyAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXNbaV0gPSBjYWxsRnJhbWUt
PnVuY2hlY2tlZFIob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSkuanNWYWx1ZSgpOwogICAgICAg
ICB9CiAKICAgICAgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudENvZGVCbG9jayA9IGNvZGVCbG9j
ay0+bmV3UmVwbGFjZW1lbnQoKTsKQEAgLTE3ODQsNyArMTc4NCw3IEBAIGNoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlKFZNKiB2bVBv
aW50ZXIsIHVpCiAgICAgY29kZUJsb2NrLT5lbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZv
ckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgYXV0byBieXRlY29kZSA9IGNvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCktPmFzPE9wQ2F0Y2g+KCk7CiAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwotICAgIG1l
dGFkYXRhLm1fYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJv
ZmlsZSkgeworICAgIG1ldGFkYXRhLm1fYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxl
QW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgIHByb2ZpbGUubV9idWNrZXRz
WzBdID0gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxGcmFtZS0+dW5jaGVja2VkUihwcm9maWxlLm1fb3Bl
cmFuZCkuanNWYWx1ZSgpKTsKICAgICB9KTsKIApAQCAtMTkwOCw4ICsxOTA4LDggQEAgdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblBvcFNjb3BlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIGludDMyX3Qgc2NvcGUKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FM
TF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBjYWxsRnJhbWUpOwogCi0gICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIoc2NvcGVSZWcpLlJlZ2lzdGVyOjpzY29wZSgpOwotICAgIGNhbGxGcmFtZS0+dW5j
aGVja2VkUihzY29wZVJlZykgPSBzY29wZS0+bmV4dCgpOworICAgIGF1dG8mIHNjb3BlU2xvdCA9
IGNhbGxGcmFtZS0+dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIoc2NvcGVSZWcpKTsKKyAgICBz
Y29wZVNsb3QgPSBzY29wZVNsb3QuUmVnaXN0ZXI6OnNjb3BlKCktPm5leHQoKTsKIH0KIAogaW50
MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20oSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU09iamVjdCog
Y29uc3RydWN0b3IsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRIYXNJbnN0YW5jZSkKQEAgLTI0MTcs
NyArMjQxNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0RnJv
bVNjb3BlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gcGMtPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50
ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFyKTsKLSAgICBKU09iamVjdCog
c2NvcGUgPSBqc0Nhc3Q8SlNPYmplY3QqPihjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUu
bV9zY29wZS5vZmZzZXQoKSkuanNWYWx1ZSgpKTsKKyAgICBKU09iamVjdCogc2NvcGUgPSBqc0Nh
c3Q8SlNPYmplY3QqPihjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuanNW
YWx1ZSgpKTsKICAgICBHZXRQdXRJbmZvJiBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEo
Y29kZUJsb2NrKS5tX2dldFB1dEluZm87CiAKICAgICAvLyBNb2R1bGVWYXIgaXMgYWx3YXlzIGNv
bnZlcnRlZCB0byBDbG9zdXJlVmFyIGZvciBnZXRfZnJvbV9zY29wZS4KQEAgLTI0NjAsOCArMjQ2
MCw4IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRUb1Njb3BlKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEluc3RyCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwogCiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQg
PSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOwotICAgIEpTT2JqZWN0KiBz
Y29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5t
X3Njb3BlLm9mZnNldCgpKS5qc1ZhbHVlKCkpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsRnJh
bWUtPnIoYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKSkuanNWYWx1ZSgpOworICAgIEpTT2JqZWN0
KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29k
ZS5tX3Njb3BlKS5qc1ZhbHVlKCkpOworICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsRnJhbWUtPnIo
Ynl0ZWNvZGUubV92YWx1ZSkuanNWYWx1ZSgpOwogICAgIEdldFB1dEluZm8mIGdldFB1dEluZm8g
PSBtZXRhZGF0YS5tX2dldFB1dEluZm87CiAKICAgICAvLyBNb2R1bGVWYXIgZG9lcyBub3Qga2Vl
cCB0aGUgc2NvcGUgcmVnaXN0ZXIgdmFsdWUgYWxpdmUgaW4gREZHLgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAppbmRleCBjNjU1ZGI4YmQyZDIx
MjQwZTJjYTg2YTkxYTk2MjE2MDQwODRlOTM3Li5hYmY1MmY3MTNlOGFhMGFmYjVlODA1YzdjZjNm
MWQzODgzNzFjMmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcApAQCAtNTcsOSArNTcsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jh
c2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFMKIHsKICAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7CiAgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgICAgIGlu
dCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0g
Jm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCkBAIC0xMTcsOCArMTE3LDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwog
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAg
IGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9
IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9h
cnJheVByb2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRk
QnlWYWxJbmZvKCk7CiAKQEAgLTE3Nyw3ICsxNzcsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
IEpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChPcCBieXRl
Y29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUp
CiB7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICAKICAgICBKdW1wTGlzdCBzbG93
Q2FzZXM7CkBAIC0yMDgsNyArMjA4LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmlj
Q29udGlndW91c1B1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWQKICAgICB9
CiAgICAgY2FzZSBDb250aWd1b3VzU2hhcGU6CiAgICAgICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJ
bmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpKTsKLSAgICAgICAgZW1pdFdyaXRlQmFycmll
cihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Cisg
ICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNlLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBDUkFTSCgp
OwpAQCAtMjM1LDcgKzIzNSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogSklUOjpKdW1wTGlz
dCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVt
cCYgYmFkVHlwZSkKIHsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIAogICAgIEp1
bXBMaXN0IHNsb3dDYXNlczsKQEAgLTI0OSw3ICsyNDksNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6
ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRU
eXBlKQogICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QzKTsKICAgICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIs
IHJlZ1QxLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSk7Ci0gICAg
ZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHZhbHVlLCBTaG91bGRG
aWx0ZXJWYWx1ZSk7CisgICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jhc2UsIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgSnVtcCBlbmQgPSBqdW1wKCk7CiAgICAgCiAgICAg
ZW1wdHkubGluayh0aGlzKTsKQEAgLTI3NCw4ICsyNzQsOCBAQCBKSVRQdXRCeUlkR2VuZXJhdG9y
IEpJVDo6ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBPcCBi
eXRlYwogICAgIC8vIHByb3BlcnR5OiByZWdUMQogICAgIC8vIHNjcmF0Y2g6IHJlZ1QyCiAKLSAg
ICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7CiAKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdUMSkpOwogICAg
IGVtaXRCeVZhbElkZW50aWZpZXJDaGVjayhieVZhbEluZm8sIHJlZ1QxLCByZWdUMSwgcHJvcGVy
dHlOYW1lLCBzbG93Q2FzZXMpOwpAQCAtMzA0LDE0ICszMDQsMTQgQEAgSklUUHV0QnlJZEdlbmVy
YXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywg
T3AgYnl0ZWMKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7CiAgICAgYm9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKLSAgICBpbnQgYmFzZTsKLSAgICBpbnQgcHJv
cGVydHk7Ci0gICAgaW50IHZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlOworICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAKICAg
ICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgewotICAgICAgICBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlLm9mZnNldCgpOwotICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHkub2Zmc2V0KCk7Ci0gICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsK
KyAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICAgICAgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OworICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAg
fTsKIAogICAgIGlmIChpc0RpcmVjdCkKQEAgLTMzNywzNiArMzM3LDM2IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9w
dGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2FjY2Vzc29yLm9mZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CiAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVy
QnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZz
ZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNl
LCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvci5vZmZzZXQoKSwg
cmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvciwg
cmVnVDEpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQz
Ml90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLm9mZnNldCgpLCByZWdUMSk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlci5vZmZzZXQoKSwgcmVnVDIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7CiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0
cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwpAQCAtMzc1LDE4ICszNzUs
MTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeVZhbD4oKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgcmVnVDAp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQo
KSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBy
ZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBy
ZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvci5vZmZzZXQoKSwg
cmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvciwg
cmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRy
aWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGludCBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkSlNSZXN1bHQsIGRzdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSk7CkBAIC0zOTUsOSArMzk1LDkgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAg
aW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CiAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbEpTUmVzdWx0LCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKQEAgLTQwNiw4ICs0
MDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIGludCByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0ZWNv
ZGUubV9iYXNlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2VWUmVnLCByZWdUMCk7CkBAIC00MzAsNyArNDMwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG8KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIGludCByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKQEAg
LTQ0NSw4ICs0NDUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0bwogdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZERpcmVjdD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwpAQCAtNDY5LDcg
KzQ2OSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlCiAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlJZERpcmVjdD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CkBAIC00ODUsOCArNDg1LDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlk
PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50
IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VW
UmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CkBAIC01MTMsOSArNTEzLDkgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgaW50IHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRl
Y29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlz
VmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CiAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZS
ZWcsIHJlZ1QwKTsKQEAgLTUzOSw3ICs1MzksNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbAog
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwpAQCAtNTU2LDcgKzU1
Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZFdpdGhUaGlzPigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKQEAgLTU3
MSw4ICs1NzEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAg
IGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWVW
UmVnID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9
IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9vbCBkaXJlY3QgPSAhIShieXRlY29kZS5tX2ZsYWdz
ICYgUHV0QnlJZElzRGlyZWN0KTsKIAogICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0
Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9u
ZSBwb2ludGVyLApAQCAtNjE1LDggKzYxNSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsCiB2
b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SW5CeUlkPigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CkBAIC02MzgsNyAr
NjM4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG8KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5
SWQ+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1tt
X2luQnlJZEluZGV4KytdOwpAQCAtNjU3LDcgKzY1Nyw3IEBAIHZvaWQgSklUOjplbWl0VmFySW5q
ZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVk
SW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3Vy
ZShpbnQgZHN0LCBpbnQgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2ln
bmVkIGRlcHRoKQordm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIg
ZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3Ms
IHVuc2lnbmVkIGRlcHRoKQogewogICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDAp
OwpAQCAtNjcwLDggKzY3MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNjb3BlID0gYnl0ZWNvZGUubV9zY29w
ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAgICAgdW5zaWduZWQg
ZGVwdGggPSBtZXRhZGF0YS5tX2xvY2FsU2NvcGVEZXB0aDsKIApAQCAtNzcwLDcgKzc3MCw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1
cmVDaGVjayhpbnQgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCit2b2lkIEpJVDo6
ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1
cmUqKiBzdHJ1Y3R1cmVTbG90KQogewogICAgIGxvYWRQdHIoc3RydWN0dXJlU2xvdCwgcmVnVDEp
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKQEAgLTc5MCw3ICs3
OTAsNyBAQCB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoSlNWYWx1ZSoq
IG9wZXJhbmQsIEdQUlJlZyByZWcpCiAgICAgbG9hZFB0cihyZWcsIHJlZyk7CiB9CiAKLXZvaWQg
SklUOjplbWl0R2V0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQordm9p
ZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90
IG9wZXJhbmQpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwog
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9m
VmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwKTsKQEAgLTgw
MCw4ICs4MDAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CiAgICAgU3Ry
dWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKICAg
ICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigm
bWV0YWRhdGEubV9vcGVyYW5kKTsKQEAgLTkxOSwxNyArOTE5LDE3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBp
bnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKK3ZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFy
aWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50
U2V0KiBzZXQpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwog
ICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwogICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsK
IH0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRk
cmVzc09mT3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBv
aW50U2V0KQordm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUq
KiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQq
KiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwogICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7
CkBAIC05MzgsNyArOTM4LDcgQEAgdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGly
ZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBpbnQgdmFsdWUsIFcKICAgICBzdG9yZVB0
cihyZWdUMCwgcmVnVDEpOwogfQogCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoaW50IHNj
b3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCit2
b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRy
X3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCiB7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKQEAgLTk1MCw4ICs5NTAsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dFRvU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7Ci0gICAgaW50IHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsKLSAg
ICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBjb3BpZWRH
ZXRQdXRJbmZvKGJ5dGVjb2RlKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1
dEluZm8ucmVzb2x2ZVR5cGUoKTsKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0
YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwpAQCAtMTA4Niw4ICsxMDg2LDggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3IKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbUFyZ3VtZW50cz4oKTsKLSAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGFyZ3VtZW50cyA9IGJ5dGVj
b2RlLm1fYXJndW1lbnRzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9h
cmd1bWVudHM7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICAKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwpAQCAtMTA5OSw5ICsxMDk5
LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1l
bnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb0FyZ3VtZW50cz4oKTsKLSAg
ICBpbnQgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHMub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGludCBp
bmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
OwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwpAQCAtMTExMCw3ICsxMTEw
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2
YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQogCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmll
cih1bnNpZ25lZCBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkK
K3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CiAgICAgSnVtcCB2YWx1
ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBT
aG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKQEAgLTExMzMsNyArMTEzMyw3IEBAIHZvaWQgSklU
OjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVC
YXJyaWVyTW9kZSBtb2RlCiAgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwg
V3JpdGVCYXJyaWVyTW9kZSBtb2RlKQordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxs
KiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIEp1bXAgdmFs
dWVOb3RDZWxsOwpAQCAtMTE1MCw4ICsxMTUwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2lu
dGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZp
ZWxkPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CkBAIC0xMTY0LDggKzExNjQsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBpbnQg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAg
ICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBAIC0xMTc2LDcgKzExNzYsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIAogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkKIAotdm9pZCBKSVQ6OmVtaXRXcml0
ZUJhcnJpZXIodW5zaWduZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2Rl
IG1vZGUpCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewogICAgIEp1
bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1v
ZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7CkBAIC0xMTk5LDcgKzExOTksNyBAQCB2
b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25lciwgdW5zaWduZWQgdmFsdWUs
IFdyaXRlQmFycmllck1vZGUgbW9kZQogICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgdW5zaWduZWQg
dmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVy
KEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBt
b2RlKQogewogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmIChtb2RlID09IFNob3VsZEZp
bHRlclZhbHVlKSB7CkBAIC0xNDI1LDcgKzE0MjUsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1p
dEludFR5cGVkQXJyYXlQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlw
ZQogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsK
ICAgICBBU1NFUlQoaXNJbnQodHlwZSkpOwogICAgIAotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVn
VDA7CkBAIC0xNTAxLDcgKzE1MDEsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlw
ZWRBcnJheVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeQogICAgIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBBU1NF
UlQoaXNGbG9hdCh0eXBlKSk7CiAgICAgCi0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAppbmRleCAyY2Y5MTk4ZjQw
ZWRhYWY1M2E2MWRiZjMzOTBhNmM3ZGIyODZhNWMxLi41ODI3MTNlNjQwODdhNTFmNTkzOWI5MGI5
ODU0NWRmMTMzZDBjNmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pT
SW50ZXJmYWNlSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFj
ZUpJVC5oCkBAIC00NSwxOCArNDUsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAg
ICAgICAgfQogCi0gICAgICAgIGlubGluZSBKdW1wIGVtaXRMb2FkSlNDZWxsKHVuc2lnbmVkIHZp
cnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQpOwotICAgICAgICBpbmxpbmUg
SnVtcCBlbWl0TG9hZEludDMyKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3Rl
cklEIGRzdCk7Ci0gICAgICAgIGlubGluZSBKdW1wIGVtaXRMb2FkRG91YmxlKHVuc2lnbmVkIHZp
cnR1YWxSZWdpc3RlckluZGV4LCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gp
OworICAgICAgICBpbmxpbmUgSnVtcCBlbWl0TG9hZEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIsIFJl
Z2lzdGVySUQgcGF5bG9hZCk7CisgICAgICAgIGlubGluZSBKdW1wIGVtaXRMb2FkSW50MzIoVmly
dHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIGRzdCk7CisgICAgICAgIGlubGluZSBKdW1wIGVtaXRM
b2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCBz
Y3JhdGNoKTsKIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGlubGluZSBKdW1wIGVt
aXRKdW1wSWZOb3RKU0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgpOworICAgICAg
ICBpbmxpbmUgSnVtcCBlbWl0SnVtcElmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3Rlcik7CiAjZW5k
aWYKIAotICAgICAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKGludCBlbnRy
eSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwot
ICAgICAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIGlu
dCBlbnRyeSk7Ci0gICAgICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZh
bHVlLCBpbnQgZW50cnkpOwotICAgICAgICB2b2lkIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFk
ZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkpOworICAgICAgICB2b2lkIGVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKFZpcnR1YWxSZWdpc3RlciBlbnRyeSwgUmVnaXN0ZXJJRCB0bywg
UmVnaXN0ZXJJRCBmcm9tID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRQ
dXRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRy
eSk7CisgICAgICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBW
aXJ0dWFsUmVnaXN0ZXIgZW50cnkpOworICAgICAgICB2b2lkIGVtaXRQdXRDZWxsVG9DYWxsRnJh
bWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpOwogCiAgICAg
ICAgIFZNKiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1fdm07IH0KIApAQCAtNjQsMzYgKzY0LDM2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGlu
bGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwo
dW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCkKKyAgICBp
bmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSlNDZWxs
KFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCkKICAg
ICB7Ci0gICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIHBh
eWxvYWQpOwotICAgICAgICByZXR1cm4gZW1pdEp1bXBJZk5vdEpTQ2VsbCh2aXJ0dWFsUmVnaXN0
ZXJJbmRleCk7CisgICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBw
YXlsb2FkKTsKKyAgICAgICAgcmV0dXJuIGVtaXRKdW1wSWZOb3RKU0NlbGwodmlydHVhbFJlZ2lz
dGVyKTsKICAgICB9CiAKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZh
Y2VKSVQ6OmVtaXRKdW1wSWZOb3RKU0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgp
CisgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0SnVt
cElmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCiAgICAgewotICAg
ICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50Pih2aXJ0dWFsUmVnaXN0ZXJJbmRleCkgPCBGaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleCk7Ci0gICAgICAgIHJldHVybiBicmFuY2gzMihOb3RFcXVh
bCwgdGFnRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNl
bGxUYWcpKTsKKyAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3RlciA8IEZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVxdWFsLCB0YWdGb3Io
dmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKICAgICB9
CiAgICAgCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjpl
bWl0TG9hZEludDMyKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIGRz
dCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRM
b2FkSW50MzIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBkc3Qp
CiAgICAgewotICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50Pih2aXJ0dWFsUmVnaXN0ZXJJ
bmRleCkgPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7Ci0gICAgICAgIGxvYWRQdHIocGF5
bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7Ci0gICAgICAgIHJldHVybiBicmFu
Y2gzMihOb3RFcXVhbCwgdGFnRm9yKHN0YXRpY19jYXN0PGludD4odmlydHVhbFJlZ2lzdGVySW5k
ZXgpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7CisgICAgICAgIEFTU0VSVCh2
aXJ0dWFsUmVnaXN0ZXIgPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAgICAgIGxv
YWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBkc3QpOworICAgICAgICByZXR1cm4g
YnJhbmNoMzIoTm90RXF1YWwsIHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6SW50MzJUYWcpKTsKICAgICB9CiAKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6
Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkRG91YmxlKHVuc2lnbmVkIHZpcnR1YWxSZWdp
c3RlckluZGV4LCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCisgICAgaW5s
aW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZShW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3Rl
cklEIHNjcmF0Y2gpCiAgICAgewotICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50Pih2aXJ0
dWFsUmVnaXN0ZXJJbmRleCkgPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7Ci0gICAgICAg
IGxvYWRQdHIodGFnRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgc2NyYXRjaCk7CisgICAgICAg
IEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIgPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7Cisg
ICAgICAgIGxvYWRQdHIodGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIHNjcmF0Y2gpOwogICAgICAg
ICBKdW1wIGlzRG91YmxlID0gYnJhbmNoMzIoQmVsb3csIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpMb3dlc3RUYWcpKTsKICAgICAgICAgSnVtcCBub3RJbnQgPSBicmFuY2gzMihOb3RF
cXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7Ci0gICAgICAg
IGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIHNjcmF0Y2gpOworICAg
ICAgICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgc2NyYXRjaCk7CiAgICAg
ICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHNjcmF0Y2gsIGRzdCk7CiAgICAgICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKICAgICAgICAgaXNEb3VibGUubGluayh0aGlzKTsKLSAgICAgICAgbG9hZERv
dWJsZShhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgZHN0KTsKKyAgICAgICAgbG9h
ZERvdWJsZShhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7CiAgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKICAgICAgICAgcmV0dXJuIG5vdEludDsKICAgICB9CkBAIC0xMDEsMjMgKzEw
MSwyMyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSlND
ZWxsKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIGRzdCkKKyAgICBp
bmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSlNDZWxs
KFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsK
LSAgICAgICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOwor
ICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBkc3QpOwogICAgICAg
ICByZXR1cm4gYnJhbmNoSWZOb3RDZWxsKGRzdCk7CiAgICAgfQogICAgIAotICAgIGlubGluZSBK
U0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRJbnQzMih1bnNpZ25l
ZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBkc3QpCisgICAgaW5saW5lIEpTSW50
ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEludDMyKFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKLSAgICAgICAgbG9h
ZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOworICAgICAgICBsb2Fk
NjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBkc3QpOwogICAgICAgICBKdW1wIG5vdElu
dDMyID0gYnJhbmNoSWZOb3RJbnQzMihkc3QpOwogICAgICAgICB6ZXJvRXh0ZW5kMzJUb1B0cihk
c3QsIGRzdCk7CiAgICAgICAgIHJldHVybiBub3RJbnQzMjsKICAgICB9CiAKLSAgICBpbmxpbmUg
SlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkRG91YmxlKHVuc2ln
bmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNj
cmF0Y2gpCisgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjpl
bWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBGUFJlZ2lzdGVy
SUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiAgICAgewotICAgICAgICBsb2FkNjQoYWRkcmVz
c0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIHNjcmF0Y2gpOworICAgICAgICBsb2FkNjQoYWRk
cmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBzY3JhdGNoKTsKICAgICAgICAgSnVtcCBub3ROdW1i
ZXIgPSBicmFuY2hJZk5vdE51bWJlcihzY3JhdGNoKTsKICAgICAgICAgSnVtcCBub3RJbnQgPSBi
cmFuY2hJZk5vdEludDMyKHNjcmF0Y2gpOwogICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShz
Y3JhdGNoLCBkc3QpOwpAQCAtMTI5LDEyICsxMjksMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
fQogI2VuZGlmCiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRH
ZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKGludCBlbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0
ZXJJRCBmcm9tKQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdEdl
dEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoVmlydHVhbFJlZ2lzdGVyIGVudHJ5LCBSZWdpc3RlcklE
IHRvLCBSZWdpc3RlcklEIGZyb20pCiAgICAgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MoZnJv
bSwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOworICAgICAgICBsb2FkUHRyKEFkZHJl
c3MoZnJvbSwgZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOwogICAgIH0K
IAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2FsbEZy
YW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgaW50IGVudHJ5KQorICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQg
ZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTMyXzY0
KQogICAgICAgICBzdG9yZVB0cihmcm9tLCBwYXlsb2FkRm9yKGVudHJ5KSk7CkBAIC0xNDMsMTIg
KzE0MywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAgIH0KIAotICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQq
IHZhbHVlLCBpbnQgZW50cnkpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklU
OjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIFZpcnR1YWxSZWdpc3RlciBl
bnRyeSkKICAgICB7CiAgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIodmFsdWUpLCBhZGRy
ZXNzRm9yKGVudHJ5KSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJm
YWNlSklUOjplbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgaW50
IGVudHJ5KQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dENl
bGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRy
eSkKICAgICB7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgc3RvcmUzMihUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihlbnRyeSkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAppbmRleCAwOTUyNTkxZWU5Zjdk
NWQ0ZmMyMTcwYzcxNjkzY2ViNjY5Nzc0YjRiLi40OWY1NGM1ZGE1NjcyNTAzYTFlMDc2ZjIyZDlk
MzgwMjliYjA5ZmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVw
VmFyYXJnc0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFy
YXJnc0ZyYW1lLmNwcApAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgZW1pdFNldHVwVmFyYXJnc0Zy
YW1lRmFzdENhc2UoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG51bVVzZWRTbG90
CiAgICAgICAgICAgICBmaXJzdEFyZ3VtZW50UmVnID0gVmlydHVhbFJlZ2lzdGVyKDApOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6
OmRpc3BsYWNlZEluSlNTdGFjaygKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIERhdGFGb3JtYXRJbnQzMik7Cisg
ICAgICAgICAgICBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgRGF0
YUZvcm1hdEludDMyKTsKICAgICAgICAgZmlyc3RBcmd1bWVudFJlZyA9IFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApKTsKICAgICB9CiAgICAgZW1pdFNldHVwVmFy
YXJnc0ZyYW1lRmFzdENhc2Uodm0sIGppdCwgbnVtVXNlZFNsb3RzR1BSLCBzY3JhdGNoR1BSMSwg
c2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBhcmd1bWVudENvdW50UmVjb3ZlcnksIGZpcnN0QXJn
dW1lbnRSZWcsIGZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCmluZGV4IGExMTYyMmVlYmRiZTQ3
ODVlZjA2YWRjMzkzNDcxZjVjMjFmNzI0MDMuLmUxNTYwMzBlNDE0Mzc4YWNiMzU1ZGFhNzJjZTVj
NDUyMGVkYzFlZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lh
bGl6ZWRUaHVua0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6
ZWRUaHVua0pJVC5oCkBAIC01NSwxMyArNTUsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IAogICAgICAgICB2b2lkIGxvYWREb3VibGVBcmd1bWVudChpbnQgYXJndW1lbnQsIEZQUmVnaXN0
ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKICAgICAgICAgewotICAgICAgICAgICAgdW5z
aWduZWQgc3JjID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVudCk7CisgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJn
dW1lbnQpOwogICAgICAgICAgICAgbV9mYWlsdXJlcy5hcHBlbmQoZW1pdExvYWREb3VibGUoc3Jj
LCBkc3QsIHNjcmF0Y2gpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBsb2Fk
Q2VsbEFyZ3VtZW50KGludCBhcmd1bWVudCwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIHNyYyA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1l
bnQpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAgICAgIG1fZmFpbHVyZXMuYXBwZW5kKGVtaXRM
b2FkSlNDZWxsKHNyYywgZHN0KSk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC03Myw3ICs3Myw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBsb2FkSW50MzJBcmd1
bWVudChpbnQgYXJndW1lbnQsIFJlZ2lzdGVySUQgZHN0LCBKdW1wJiBmYWlsVGFyZ2V0KQogICAg
ICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMgPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zm
c2V0KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgICAgICBmYWlsVGFyZ2V0ID0g
ZW1pdExvYWRJbnQzMihzcmMsIGRzdCk7CiAgICAgICAgIH0KICAgICAgICAgCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKaW5kZXggYjgxNDZkMjE3NjYx
NDgwZWQ0YjJhNzZhMGVhMWRmYTMxZjMxZjFmMi4uNzFhNGFjN2E3NTBjMWQ1ZGZmODRlMzY1N2Mw
MTVkNGY2ZDk3NTIyOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVu
a0dlbmVyYXRvcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmNwcApAQCAtMTAzNiw4ICsxMDM2LDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBhYnNUaHVua0dlbmVyYXRvcihWTSYgdm0pCiAgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENv
ZGVSZWYodm0uaml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKIAogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgdW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXggPSBDYWxsRnJhbWU6OmFyZ3Vt
ZW50T2Zmc2V0KDApOwotICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9y
KHZpcnR1YWxSZWdpc3RlckluZGV4KSwgR1BSSW5mbzo6cmVnVDApOworICAgIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwKTsKKyAg
ICBqaXQubG9hZDY0KEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIp
LCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgYXV0byBub3RJbnRlZ2VyID0gaml0LmJyYW5jaElmTm90
SW50MzIoR1BSSW5mbzo6cmVnVDApOwogCiAgICAgLy8gQWJzIEludDMyLgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggYWM3MmFiYzU3Mzg3
MDYyNTc5NDNlMTJlNjRmNTdmN2VmNTkyZjBlMi4uMmJiNjE1ZjU0YTg4ZThlNDg2YzlkZTQ5Mjc3
YTMyZDJmZTU5OWMxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rv
ci5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1l
LmgiCisjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJD
b21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkVycm9ySGFu
ZGxpbmdTY29wZS5oIgpAQCAtOTgsOCArOTksOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IExMSW50IHsKICAgICBMTElOVF9CRUdJTl9OT19TRVRfUEMoKTsgICAgICAgICAgICAgICAgICAg
IFwKICAgICBMTElOVF9TRVRfUENfRk9SX1NUVUJTKCkKIAotaW5saW5lIEpTVmFsdWUgZ2V0Tm9u
Q29uc3RhbnRPcGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBWaXJ0dWFsUmVnaXN0
ZXImIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kLm9mZnNl
dCgpKS5qc1ZhbHVlKCk7IH0KLWlubGluZSBKU1ZhbHVlIGdldE9wZXJhbmQoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIGNvbnN0IFZpcnR1YWxSZWdpc3RlciYgb3BlcmFuZCkgeyByZXR1cm4gY2FsbEZy
YW1lLT5yKG9wZXJhbmQub2Zmc2V0KCkpLmpzVmFsdWUoKTsgfQoraW5saW5lIEpTVmFsdWUgZ2V0
Tm9uQ29uc3RhbnRPcGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkgeyByZXR1cm4gY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQpLmpzVmFsdWUo
KTsgfQoraW5saW5lIEpTVmFsdWUgZ2V0T3BlcmFuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+cihvcGVyYW5kKS5qc1Zh
bHVlKCk7IH0KIAogI2RlZmluZSBMTElOVF9SRVRVUk5fVFdPKGZpcnN0LCBzZWNvbmQpIGRvIHsg
ICAgICAgXAogICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGZpcnN0LCBzZWNvbmQpOyAgICAg
ICAgXApAQCAtMTU3MSw3ICsxNTcyLDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBnZW5l
cmljQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUKICAgICBD
YWxsRnJhbWUqIGNhbGxlZUZyYW1lID0gY2FsbEZyYW1lIC0gYnl0ZWNvZGUubV9hcmd2OwogICAg
IAogICAgIGNhbGxlZUZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhieXRlY29k
ZS5tX2FyZ2MpOwotICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSkgPSBjYWxsZWVBc1ZhbHVlOworICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1
YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CiAgICAg
Y2FsbGVlRnJhbWUtPnNldENhbGxlckZyYW1lKGNhbGxGcmFtZSk7CiAgICAgCiAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwpAQCAtMTY4OSw3ICsxNjkw
LDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2YXJhcmdzU2V0dXAoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKgogICAgICAgICBzZXR1cEZvcndhcmRBcmd1bWVu
dHNGcmFtZUFuZFNldFRoaXMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNhbGxlZUZyYW1lLCBn
ZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUpLCB2bS52YXJhcmdzTGVu
Z3RoKTsKIAogICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFtZShjYWxsRnJhbWUpOwotICAg
IGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgPSBjYWxsZWVB
c1ZhbHVlOworICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CiAgICAgY2FsbEZyYW1lLT5zZXRD
dXJyZW50VlBDKHBjKTsKIAogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBzZXRV
cENhbGwoY2FsbGVlRnJhbWUsIGtpbmQsIGNhbGxlZUFzVmFsdWUpKTsKQEAgLTE3MjUsNyArMTcy
Niw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgY29tbW9uQ2FsbEV2YWwoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uCiAgICAgCiAgICAgY2FsbGVlRnJhbWUtPnNl
dEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAgY2FsbGVl
RnJhbWUtPnNldENhbGxlckZyYW1lKGNhbGxGcmFtZSk7Ci0gICAgY2FsbGVlRnJhbWUtPnVuY2hl
Y2tlZFIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSA9IGNhbGxlZUFzVmFsdWU7CisgICAgY2FsbGVl
RnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkp
ID0gY2FsbGVlQXNWYWx1ZTsKICAgICBjYWxsZWVGcmFtZS0+c2V0UmV0dXJuUEMocmV0dXJuUG9p
bnQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgY2FsbGVlRnJhbWUtPnNldENvZGVCbG9jayhu
dWxscHRyKTsKICAgICBjYWxsRnJhbWUtPnNldEN1cnJlbnRWUEMocGMpOwpAQCAtMTkyNiw3ICsx
OTI3LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Byb2ZpbGVfY2F0Y2gpCiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wQ2F0Y2g+KCk7CiAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwotICAgIG1ldGFkYXRhLm1fYnVmZmVy
LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgIG1l
dGFkYXRhLm1fYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyJiBwcm9maWxlKSB7CiAgICAgICAgIHByb2ZpbGUubV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6
ZW5jb2RlKGNhbGxGcmFtZS0+dW5jaGVja2VkUihwcm9maWxlLm1fb3BlcmFuZCkuanNWYWx1ZSgp
KTsKICAgICB9KTsKIApAQCAtMTk1NywxMSArMTk1OCwxMjQgQEAgTExJTlRfU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX291dF9vZl9saW5lX2p1bXBfdGFyZ2V0KQogICAgIExMSU5UX0VORF9JTVBM
KCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIE9wY29kZT4KK3N0YXRpYyB2b2lkIGhhbmRsZVZh
cmFyZ3NDaGVja3BvaW50KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IE9wY29kZSYgYnl0ZWNvZGUsIENoZWNrcG9pbnRPU1JF
eGl0U2lkZVN0YXRlJiBzaWRlU3RhdGUpCit7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0g
c2lkZVN0YXRlLnRtcHNbT3Bjb2RlOjphcmdDb3VudEluY2x1ZGluZ1RoaXNdLmFzVUludDMyKCk7
CisgICAgdW5zaWduZWQgZmlyc3RWYXJBcmcgPSBieXRlY29kZS5tX2ZpcnN0VmFyQXJnOworCisg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICBhcmdzLmZpbGwoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgLSAxLCBbJl0gKEpTVmFsdWUqIGJ1ZmZlcikgeworICAgICAgICBsb2Fk
VmFyYXJncyhnbG9iYWxPYmplY3QsIGJ1ZmZlciwgY2FsbEZyYW1lLT5yKGJ5dGVjb2RlLm1fYXJn
dW1lbnRzKS5qc1ZhbHVlKCksIGZpcnN0VmFyQXJnLCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyAtIDEpOworICAgIH0pOworICAgIGlmIChhcmdzLmhhc092ZXJmbG93ZWQoKSkgeworICAgICAg
ICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lk
KCkpOworCisgICAgSlNWYWx1ZSByZXN1bHQ7CisgICAgaWYgKE9wY29kZTo6b3Bjb2RlSUQgIT0g
b3BfY29uc3RydWN0X3ZhcmFyZ3MpCisgICAgICAgIHJlc3VsdCA9IGNhbGwoZ2xvYmFsT2JqZWN0
LCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9jYWxsZWUpLCBnZXRPcGVyYW5kKGNh
bGxGcmFtZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUpLCBhcmdzLCAiIik7CisgICAgZWxzZQorICAg
ICAgICByZXN1bHQgPSBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBnZXRPcGVyYW5kKGNhbGxGcmFt
ZSwgYnl0ZWNvZGUubV9jYWxsZWUpLCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV90
aGlzVmFsdWUpLCBhcmdzLCAiIik7CisKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2
b2lkKCkpOworICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX2RzdCkgPSByZXN1
bHQ7Cit9CisKK2lubGluZSBTbG93UGF0aFJldHVyblR5cGUgZGlzcGF0Y2hUb05leHRJbnN0cnVj
dGlvbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiBwYykKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVCghY29kZUJsb2NrLT52bSgpLmV4Y2VwdGlvbkZvckluc3BlY3Rp
b24oKSk7CisgICAgaWYgKE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8fCBjb2RlQmxv
Y2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKSB7CisgICAgICAgIGNv
bnN0IEluc3RydWN0aW9uKiBuZXh0UEMgPSBwYy5uZXh0KCkucHRyKCk7CisgICAgICAgIGF1dG8g
bmV4dEJ5dGVjb2RlID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oKnBjLm5leHQo
KS5wdHIoKSk7CisgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQobmV4dFBDLCBuZXh0Qnl0ZWNv
ZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgfQorCisjaWYgRU5BQkxFKEpJVCkKKyAgICBB
U1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAg
IEJ5dGVjb2RlSW5kZXggbmV4dEJ5dGVjb2RlSW5kZXggPSBwYy5uZXh0KCkuaW5kZXgoKTsKKyAg
ICBhdXRvIG5leHRCeXRlY29kZSA9IGNvZGVCbG9jay0+aml0Q29kZU1hcCgpLmZpbmQobmV4dEJ5
dGVjb2RlSW5kZXgpOworICAgIHJldHVybiBlbmNvZGVSZXN1bHQobnVsbHB0ciwgbmV4dEJ5dGVj
b2RlLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworI2VuZGlmCisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRo
X2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIEVuY29kZWRKU1ZhbHVlIHJlc3VsdCkKK3sKKyAgICAvLyBTaW5jZSBhbGwgb3VyIGNhbGxp
bmcgY2hlY2twb2ludHMgZG8gcmlnaHQgbm93IGlzIG1vdmUgcmVzdWx0IGludG8gb3VyIGRlc3Qg
d2UgY2FuIGp1c3QgZG8gdGhhdCBoZXJlIGFuZCByZXR1cm4uCisgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+
dm0oKTsKKyAgICBTbG93UGF0aEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gc2lkZVN0YXRl
ID0gdm0uZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoY2FsbEZyYW1lKTsKKyAgICBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBzaWRlU3RhdGUtPmJ5dGVjb2RlSW5kZXg7CisgICAgYXV0
byBwYyA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7CisKKyAg
ICBhdXRvIG9wY29kZSA9IHBjLT5vcGNvZGVJRCgpOworICAgIHN3aXRjaCAob3Bjb2RlKSB7Cisg
ICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6IHsKKyAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRS
KHBjLT5hczxPcENhbGxWYXJhcmdzPigpLm1fZHN0KSA9IEpTVmFsdWU6OmRlY29kZShyZXN1bHQp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczog
eworICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIocGMtPmFzPE9wQ29uc3RydWN0VmFyYXJn
cz4oKS5tX2RzdCkgPSBKU1ZhbHVlOjpkZWNvZGUocmVzdWx0KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIC8vIG9wX3RhaWxfY2FsbF92YXJhcmdzIHNob3VsZCBuZXZlciByZXR1cm4gaWYg
dGhlIHRoaW5nIGl0IHdhcyBjYWxsaW5nIHdhcyBpbmxpbmVkLgorICAgIGRlZmF1bHQ6CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIHJldHVybiBkaXNwYXRjaFRvTmV4dEluc3RydWN0aW9uKGNvZGVCbG9jaywgcGMpOwor
fQorCitleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93X3BhdGhfY2hlY2twb2ludF9v
c3JfZXhpdChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRW5jb2RlZEpTVmFsdWUgLyogbmVlZGVkIGZv
ciBjQ2FsbDIgaW4gQ0xvb3AgKi8pCit7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxs
RnJhbWUtPmNvZGVCbG9jaygpOworICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKKyAgICBT
bG93UGF0aEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0
cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gc2lkZVN0YXRlID0gdm0uZmluZENoZWNrcG9p
bnRPU1JTaWRlU3RhdGUoY2FsbEZyYW1lKTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXggPSBzaWRlU3RhdGUtPmJ5dGVjb2RlSW5kZXg7CisgICAgQVNTRVJUKGJ5dGVjb2RlSW5kZXgu
Y2hlY2twb2ludCgpKTsKKworICAgIGF1dG8gcGMgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LmF0KGJ5dGVjb2RlSW5kZXgpOworCisgICAgYXV0byBvcGNvZGUgPSBwYy0+b3Bjb2RlSUQoKTsK
KyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgICAg
ICBoYW5kbGVWYXJhcmdzQ2hlY2twb2ludCh2bSwgY2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIHBj
LT5hczxPcENhbGxWYXJhcmdzPigpLCAqc2lkZVN0YXRlLmdldCgpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKKyAgICAgICAgaGFuZGxlVmFyYXJnc0No
ZWNrcG9pbnQodm0sIGNhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBwYy0+YXM8T3BDb25zdHJ1Y3RW
YXJhcmdzPigpLCAqc2lkZVN0YXRlLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShwYy5uZXh0
KCktPm9wY29kZUlEKCkgPT0gb3BfcmV0IHx8IHBjLm5leHQoKS0+b3Bjb2RlSUQoKSA9PSBvcF9q
bXAsICJXZSBzdHJvbmdseSBhc3N1bWUgYWxsIHRhaWwgY2FsbHMgYXJlIGZvbGxvd2VkIGJ5IGFu
IG9wX3JldCAob3Igc29tZXRpbWVzIGEgam1wIHRvIGEgcmV0KS4iKTsKKyAgICAgICAgaGFuZGxl
VmFyYXJnc0NoZWNrcG9pbnQodm0sIGNhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBwYy0+YXM8T3BU
YWlsQ2FsbFZhcmFyZ3M+KCksICpzaWRlU3RhdGUuZ2V0KCkpOworICAgICAgICBicmVhazsKKwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQor
ICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHJldHVyblRvVGhyb3codm0pLCAwKTsKKworICAg
IHJldHVybiBkaXNwYXRjaFRvTmV4dEluc3RydWN0aW9uKGNvZGVCbG9jaywgcGMpOworfQorCiBl
eHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90aHJvd19zdGFja19vdmVyZmxvd19l
cnJvcihWTSogdm0sIFByb3RvQ2FsbEZyYW1lKiBwcm90b0ZyYW1lKQogewogICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gdm0tPnRvcENhbGxGcmFtZTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSgqdm0pOwotCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IG51bGxwdHI7CiAgICAgaWYgKGNhbGxGcmFtZSkKICAgICAgICAgZ2xvYmFsT2JqZWN0ID0gY2Fs
bEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCp2bSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5oCmluZGV4IDJmZjI4YjAwNmJjMjIzMzMwY2M2Nzg2NWEx
Njc5NGE5MGU3ZTdhYWUuLjdjNzVkYjNiZjQ5OWE0NGQ1MGFkYjkwMThjZjFlNmU5ZGRhNTA1ZmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCkBAIC0x
MzYsNiArMTM2LDggQEAgTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zdXBl
cl9zYW1wbGVyX2JlZ2luKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhf
c3VwZXJfc2FtcGxlcl9lbmQpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0
aF9vdXRfb2ZfbGluZV9qdW1wX3RhcmdldCk7CiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlw
ZSBsbGludF90aHJvd19zdGFja19vdmVyZmxvd19lcnJvcihWTSosIFByb3RvQ2FsbEZyYW1lKikg
V1RGX0lOVEVSTkFMOworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX2No
ZWNrcG9pbnRfb3NyX2V4aXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEVuY29kZWRKU1ZhbHVlIHVu
dXNlZCkgV1RGX0lOVEVSTkFMOworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19w
YXRoX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIEVuY29kZWRKU1ZhbHVlIGNhbGxSZXN1bHQpIFdURl9JTlRFUk5BTDsKICNpZiBFTkFC
TEUoQ19MT09QKQogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfc3RhY2tfY2hl
Y2tfYXRfdm1fZW50cnkoVk0qLCBSZWdpc3RlciopIFdURl9JTlRFUk5BTDsKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
CmluZGV4IGE3MzI1OWI5ZTAxZTVmZDUyYWI4ZTg3OWY0NTZiNDczNWNjM2Q0MTguLjRmN2UzODdl
NTlkYjZhN2MyYzJjODU1Njk0NDUzMTQ5NTZiYTVhYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KQEAgLTExMTgsNyArMTEx
OCw3IEBAIG1hY3JvIGdldHRlclNldHRlck9TUkV4aXRSZXR1cm5Qb2ludChvcE5hbWUsIHNpemUp
CiAgICAgZGVmaW5lT1NSRXhpdFJldHVybkxhYmVsKG9wTmFtZSwgc2l6ZSkKIAogICAgIHJlc3Rv
cmVTdGFja1BvaW50ZXJBZnRlckNhbGwoKQotICAgIGxvYWRpIEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCisgICAgbG9hZGkgTExJbnRSZXR1cm5QQ1tjZnJd
LCBQQwogZW5kCiAKIG1hY3JvIGFycmF5UHJvZmlsZShvZmZzZXQsIGNlbGxBbmRJbmRleGluZ1R5
cGUsIG1ldGFkYXRhLCBzY3JhdGNoKQpAQCAtMTg2OSwxMyArMTg2OSwxNyBAQCBlbmQpCiBjYWxs
T3AoY29uc3RydWN0LCBPcENvbnN0cnVjdCwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBtYWNybyAo
Z2V0dSwgbWV0YWRhdGEpIGVuZCkKIAogCi1tYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUs
IHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBw
cmVwYXJlQ2FsbCkKLSAgICBjYWxsU2xvd1BhdGgoZnJhbWVTbG93UGF0aCkKK21hY3JvIGJyYW5j
aElmRXhjZXB0aW9uKGV4Y2VwdGlvblRhcmdldCkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwg
dDMKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fdm1bdDNdLCB0MwogICAgIGJ0cHogVk06Om1fZXhj
ZXB0aW9uW3QzXSwgLm5vRXhjZXB0aW9uCi0gICAgam1wIF9sbGludF90aHJvd19mcm9tX3Nsb3df
cGF0aF90cmFtcG9saW5lCi0ubm9FeGNlcHRpb246CisgICAgam1wIGV4Y2VwdGlvblRhcmdldAor
Lm5vRXhjZXB0aW9uOiAgICAKK2VuZAorCittYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUs
IHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBw
cmVwYXJlQ2FsbCkKKyAgICBjYWxsU2xvd1BhdGgoZnJhbWVTbG93UGF0aCkKKyAgICBicmFuY2hJ
ZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSkKICAgICAj
IGNhbGxlZUZyYW1lIGluIHIxCiAgICAgaWYgSlNWQUxVRTY0CiAgICAgICAgIG1vdmUgcjEsIHNw
CkBAIC0yMDMwLDYgKzIwMzQsNDAgQEAgb3AobGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3Ry
dWN0X3RyYW1wb2xpbmUsIG1hY3JvICgpCiBlbmQpCiAKIAorb3AoY2hlY2twb2ludF9vc3JfZXhp
dF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lLCBtYWNybyAoKQorICAgIGlmIEpTVkFMVUU2
NCBhbmQgbm90IChDX0xPT1Agb3IgQ19MT09QX1dJTikKKyAgICAgICAgcmVzdG9yZVN0YWNrUG9p
bnRlckFmdGVyQ2FsbCgpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgd2UgbW92ZSByMCB0byBhMSBm
aXJzdCBzaW5jZSByMCBtaWdodCBiZSB0aGUgc2FtZSBhcyBhMCwgZm9yIGluc3RhbmNlLCBvbiBh
cm0uCisgICAgICAgIG1vdmUgcjAsIGExCisgICAgICAgIG1vdmUgY2ZyLCBhMAorICAgICAgICAj
IFdlIGRvbid0IGNhbGwgc2F2ZVN0YXRlRm9yQ0NhbGwoKSBiZWNhdXNlIHdlIGFyZSBnb2luZyB0
byB1c2UgdGhlIGJ5dGVjb2RlSW5kZXggZnJvbSBvdXIgc2lkZSBzdGF0ZS4KKyAgICAgICAgY0Nh
bGwyKF9zbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbCkKKyAg
ICAgICAgcmVzdG9yZVN0YXRlQWZ0ZXJDQ2FsbCgpCisgICAgICAgIGJyYW5jaElmRXhjZXB0aW9u
KF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lKQorICAgICAgICBqbXAgcjEs
IEpTRW50cnlQdHJUYWcKKyAgICBlbHNlCisgICAgICAgIG5vdFN1cHBvcnRlZCgpCisgICAgZW5k
CitlbmQpCisKK29wKGNoZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBvbGluZSwgbWFjcm8gKCkKKyAg
ICAjIEZJWE1FOiBXZSBjYW4gcHJvYmFibHkgZGlzcGF0Y2ggdG8gdGhlIGNoZWNrcG9pbnQgaGFu
ZGxlciBkaXJlY3RseSBidXQgdGhpcyB3YXMgZWFzaWVyIAorICAgICMgYW5kIHByb2JhYmx5IGRv
ZXNuJ3QgbWF0dGVyIGZvciBwZXJmb3JtYW5jZS4KKyAgICBpZiBKU1ZBTFVFNjQgYW5kIG5vdCAo
Q19MT09QIG9yIENfTE9PUF9XSU4pCisgICAgICAgIHJlc3RvcmVTdGFja1BvaW50ZXJBZnRlckNh
bGwoKQorCisgICAgICAgIG1vdmUgY2ZyLCBhMAorICAgICAgICAjIFdlIGRvbid0IGNhbGwgc2F2
ZVN0YXRlRm9yQ0NhbGwoKSBiZWNhdXNlIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIGJ5dGVjb2Rl
SW5kZXggZnJvbSBvdXIgc2lkZSBzdGF0ZS4KKyAgICAgICAgY0NhbGwyKF9zbG93X3BhdGhfY2hl
Y2twb2ludF9vc3JfZXhpdCkKKyAgICAgICAgcmVzdG9yZVN0YXRlQWZ0ZXJDQ2FsbCgpCisgICAg
ICAgIGJyYW5jaElmRXhjZXB0aW9uKF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9s
aW5lKQorICAgICAgICBqbXAgcjEsIEpTRW50cnlQdHJUYWcKKyAgICBlbHNlCisgICAgICAgIG5v
dFN1cHBvcnRlZCgpCisgICAgZW5kCitlbmQpCisKICMgTGFzdGx5LCBtYWtlIHN1cmUgdGhhdCB3
ZSBjYW4gbGluayBldmVuIHRob3VnaCB3ZSBkb24ndCBzdXBwb3J0IGFsbCBvcGNvZGVzLgogIyBU
aGVzZSBvcGNvZGVzIHNob3VsZCBuZXZlciBhcmlzZSB3aGVuIHVzaW5nIExMSW50IG9yIGVpdGhl
ciBKSVQuIFdlIGFzc2VydAogIyBhcyBtdWNoLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQppbmRleCA5M2MyOTAy
NWIwZDkzMDVkOTk1NzEwM2UxNjViN2FhODkxNGNiYjFkLi4wN2MyZWU5ZDJkZjBkZWFjOTNlM2I2
MmY2YzYwZTNhNWRiNzI3ZDFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQpAQCAtMTQyLDcgKzE0Miw3IEBA
IGVuZAogbWFjcm8gY2FsbFNsb3dQYXRoKHNsb3dQYXRoKQogICAgIHByZXBhcmVTdGF0ZUZvckND
YWxsKCkKICAgICBtb3ZlIGNmciwgYTAKLSAgICBtb3ZlIFBDLCBhMQorICAgIHByZXBhcmVTdGF0
ZUZvckNDYWxsKCkKICAgICBjQ2FsbDIoc2xvd1BhdGgpCiAgICAgcmVzdG9yZVN0YXRlQWZ0ZXJD
Q2FsbCgpCiBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc20KaW5kZXggMGY3ZTZjM2M1NzExNzdiYWJmM2M5NGU3MThkYWYz
OTUyNTNjOTkwZS4uYjZlZTk5ZTM2M2FmMWZmZDQxYjkxMjU0NGM1MGRlOTJmMWE0ZjJkMyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2
NC5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXI2NC5hc20KQEAgLTIzLDYgKzIzLDEzIEBACiAKIAogIyBVdGlsaXRpZXMuCittYWNybyBzdG9y
ZVBDKCkKKyAgICBzdG9yZWkgUEMsIExMSW50UmV0dXJuUENbY2ZyXQorZW5kCisKK21hY3JvIGxv
YWRQQygpCisgICAgbG9hZGkgTExJbnRSZXR1cm5QQ1tjZnJdLCBQQworZW5kCiAKIG1hY3JvIGdl
dHVPcGVyYW5kTmFycm93KG9wY29kZVN0cnVjdCwgZmllbGROYW1lLCBkc3QpCiAgICAgbG9hZGIg
Y29uc3RleHByICVvcGNvZGVTdHJ1Y3QlXyVmaWVsZE5hbWUlX2luZGV4ICsgT3Bjb2RlSUROYXJy
b3dTaXplW1BCLCBQQywgMV0sIGRzdApAQCAtNzQsNyArODEsNyBAQCBlbmQKIAogIyBBZnRlciBj
YWxsaW5nLCBjYWxsaW5nIGJ5dGVjb2RlIGlzIGNsYWltaW5nIGlucHV0IHJlZ2lzdGVycyBhcmUg
bm90IHVzZWQuCiBtYWNybyBkaXNwYXRjaEFmdGVyQ2FsbChzaXplLCBvcGNvZGVTdHJ1Y3QsIGRp
c3BhdGNoKQotICAgIGxvYWRpIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgVGFnT2Zmc2V0
W2Nmcl0sIFBDCisgICAgbG9hZFBDKCkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgUEIKICAg
ICBsb2FkcCBDb2RlQmxvY2s6Om1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcltQQl0sIFBCCiAgICAg
Z2V0KHNpemUsIG9wY29kZVN0cnVjdCwgbV9kc3QsIHQxKQpAQCAtMzcyLDcgKzM3OSw3IEBAIGVu
ZAogCiAjIENhbGwgYSBzbG93IHBhdGggZm9yIGNhbGwgb3Bjb2Rlcy4KIG1hY3JvIGNhbGxDYWxs
U2xvd1BhdGgoc2xvd1BhdGgsIGFjdGlvbikKLSAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzICsgVGFnT2Zmc2V0W2Nmcl0KKyAgICBzdG9yZVBDKCkKICAgICBwcmVwYXJl
U3RhdGVGb3JDQ2FsbCgpCiAgICAgbW92ZSBjZnIsIGEwCiAgICAgbW92ZSBQQywgYTEKQEAgLTM4
MSwyMCArMzg4LDIwIEBAIG1hY3JvIGNhbGxDYWxsU2xvd1BhdGgoc2xvd1BhdGgsIGFjdGlvbikK
IGVuZAogCiBtYWNybyBjYWxsVHJhcEhhbmRsZXIodGhyb3dIYW5kbGVyKQotICAgIHN0b3JlaSBQ
QywgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBUYWdPZmZzZXRbY2ZyXQorICAgIHN0b3Jl
UEMoKQogICAgIHByZXBhcmVTdGF0ZUZvckNDYWxsKCkKICAgICBtb3ZlIGNmciwgYTAKICAgICBt
b3ZlIFBDLCBhMQogICAgIGNDYWxsMihfbGxpbnRfc2xvd19wYXRoX2hhbmRsZV90cmFwcykKICAg
ICBidHBueiByMCwgdGhyb3dIYW5kbGVyCi0gICAgbG9hZGkgQXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgKyBUYWdPZmZzZXRbY2ZyXSwgUEMKKyAgICBsb2FkaSBMTEludFJldHVyblBDW2Nmcl0s
IFBDCiBlbmQKIAogbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgIGNoZWNrU3dp
dGNoVG9KSVQoCiAgICAgICAgIDEsCiAgICAgICAgIG1hY3JvKCkKLSAgICAgICAgICAgIHN0b3Jl
aSBQQywgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBUYWdPZmZzZXRbY2ZyXQorICAgICAg
ICAgICAgc3RvcmVQQygpCiAgICAgICAgICAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCiAgICAg
ICAgICAgICBtb3ZlIGNmciwgYTAKICAgICAgICAgICAgIG1vdmUgUEMsIGExCkBAIC00MDMsNyAr
NDEwLDcgQEAgbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgICAgICAgICAgbW92
ZSByMSwgc3AKICAgICAgICAgICAgIGptcCByMCwgSlNFbnRyeVB0clRhZwogICAgICAgICAucmVj
b3ZlcjoKLSAgICAgICAgICAgIGxvYWRpIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgVGFn
T2Zmc2V0W2Nmcl0sIFBDCisgICAgICAgICAgICBsb2FkUEMoKQogICAgICAgICBlbmQpCiBlbmQK
IApAQCAtMjA0Nyw3ICsyMDU0LDcgQEAgbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNs
b3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBwcm9sb2d1ZSkKICAgICAgICAgYWRk
cCBjZnIsIHQzCiAgICAgICAgIHN0b3JlcSB0MiwgQ2FsbGVlW3QzXQogICAgICAgICBnZXR1KHNp
emUsIG9wY29kZVN0cnVjdCwgbV9hcmdjLCB0MikKLSAgICAgICAgc3RvcmVpIFBDLCBBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyArIFRhZ09mZnNldFtjZnJdCisgICAgICAgIHN0b3JlUEMoKQog
ICAgICAgICBzdG9yZWkgdDIsIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgUGF5bG9hZE9m
ZnNldFt0M10KICAgICAgICAgbW92ZSB0Mywgc3AKICAgICAgICAgcHJlcGFyZUNhbGwoJW9wY29k
ZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX21hY2hpbmVDb2RlVGFyZ2V0W3Q1
XSwgdDIsIHQzLCB0NCwgSlNFbnRyeVB0clRhZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FyZ0xpc3QuaAppbmRleCBmYWRhM2Q2OWRhNTg5Zjk3YjczNjNlMzJhOTE5NDVkN2JhZTgwZGQ1
Li45NDliOWIwOTFhOWY1YTM1Y2YwNWNlNGNhZmUyNzQyODQzMGYyYTZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCkBAIC0xMzMsNiArMTMzLDE3IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgb3ZlcmZsb3dDaGVja05vdE5lZWRlZCgpIHsgY2xlYXJOZWVkc092ZXJmbG93
Q2hlY2soKTsgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZp
bGwoc2l6ZV90IGNvdW50LCBjb25zdCBGdW5jdG9yJiBmdW5jKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKCFtX3NpemUpOworICAgICAgICBlbnN1cmVDYXBhY2l0eShjb3VudCk7CisgICAgICAgIGlm
IChCYXNlOjpoYXNPdmVyZmxvd2VkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1f
c2l6ZSA9IGNvdW50OworICAgICAgICBmdW5jKHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KCZz
bG90Rm9yKDApKSk7CisgICAgfQorCiBwcml2YXRlOgogICAgIHZvaWQgZXhwYW5kQ2FwYWNpdHko
KTsKICAgICB2b2lkIGV4cGFuZENhcGFjaXR5KGludCBuZXdDYXBhY2l0eSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKaW5kZXggYjNjNzNjZmYyODQx
ZGM4OTI1MTE5N2FlMDdlMjQzMzFiNmYwZTkwYy4uYTgyNjYxYTA2YjU5MjQ2MWZmMmE2N2Y2Y2Y0
MGUyYjE5NmY1MDE4ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FjaGVkVHlwZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hl
ZFR5cGVzLmNwcApAQCAtMTc5NCw2ICsxNzk0LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG5l
ZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc0NsYXNzRmll
bGRJbml0aWFsaXplcjsgfQogICAgIHVuc2lnbmVkIGV2YWxDb250ZXh0VHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZXZhbENvbnRleHRUeXBlOyB9CiAgICAgdW5zaWduZWQgaGFzVGFpbENhbGxzKCkg
Y29uc3QgeyByZXR1cm4gbV9oYXNUYWlsQ2FsbHM7IH0KKyAgICB1bnNpZ25lZCBoYXNDaGVja3Bv
aW50cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2hlY2twb2ludHM7IH0KICAgICB1bnNpZ25lZCBs
aW5lQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDb3VudDsgfQogICAgIHVuc2lnbmVkIGVu
ZENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kQ29sdW1uOyB9CiAKQEAgLTE4MjcsNiArMTgy
OCw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9ldmFsQ29udGV4dFR5cGUgOiAyOwogICAg
IHVuc2lnbmVkIG1faGFzVGFpbENhbGxzIDogMTsKICAgICB1bnNpZ25lZCBtX2NvZGVUeXBlIDog
MjsKKyAgICB1bnNpZ25lZCBtX2hhc0NoZWNrcG9pbnRzIDogMTsKIAogICAgIENvZGVGZWF0dXJl
cyBtX2ZlYXR1cmVzOwogICAgIFNvdXJjZVBhcnNlTW9kZSBtX3BhcnNlTW9kZTsKQEAgLTIwMjUs
NiArMjAyNyw3IEBAIEFMV0FZU19JTkxJTkUgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29k
ZUJsb2NrKERlY29kZXImIGRlY29kZXIsIFN0cnVjdHVyZSoKIAogICAgICwgbV9kaWRPcHRpbWl6
ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTWl4ZWRUcmlTdGF0ZSkpCiAgICAgLCBtX2FnZSgwKQor
ICAgICwgbV9oYXNDaGVja3BvaW50cyhjYWNoZWRDb2RlQmxvY2suaGFzQ2hlY2twb2ludHMoKSkK
IAogICAgICwgbV9mZWF0dXJlcyhjYWNoZWRDb2RlQmxvY2suZmVhdHVyZXMoKSkKICAgICAsIG1f
cGFyc2VNb2RlKGNhY2hlZENvZGVCbG9jay5wYXJzZU1vZGUoKSkKQEAgLTIyMTUsNiArMjIxOCw3
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZT46OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zCiAgICAgbV9wYXJzZU1vZGUgPSBjb2RlQmxvY2su
bV9wYXJzZU1vZGU7CiAgICAgbV9jb2RlR2VuZXJhdGlvbk1vZGUgPSBjb2RlQmxvY2subV9jb2Rl
R2VuZXJhdGlvbk1vZGU7CiAgICAgbV9jb2RlVHlwZSA9IGNvZGVCbG9jay5tX2NvZGVUeXBlOwor
ICAgIG1faGFzQ2hlY2twb2ludHMgPSBjb2RlQmxvY2subV9oYXNDaGVja3BvaW50czsKIAogICAg
IG1fbWV0YWRhdGEuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX21ldGFkYXRhLmdldCgpKTsK
ICAgICBtX3JhcmVEYXRhLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9yYXJlRGF0YS5nZXQo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93
UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmNwcAppbmRleCA4NzViMzAyN2IyYzhjZTg3NmM5OGEyMzU2YjQ3OGM2ZmVlMzAzZjYwLi4yYTMz
YmQzMzU2ZGZjYTk0NDRhYTBiZWYyYzc4ZWU2OWIyYzcwN2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKQEAgLTk4LDggKzk4LDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgQkVHSU5fTk9fU0VUX1BDKCk7ICAgICAgICAgICAgICAg
ICAgICBcCiAgICAgU0VUX1BDX0ZPUl9TVFVCUygpCiAKLSNkZWZpbmUgR0VUKG9wZXJhbmQpIChj
YWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZC5vZmZzZXQoKSkpCi0jZGVmaW5lIEdFVF9DKG9w
ZXJhbmQpIChjYWxsRnJhbWUtPnIob3BlcmFuZC5vZmZzZXQoKSkpCisjZGVmaW5lIEdFVChvcGVy
YW5kKSAoY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQpKQorI2RlZmluZSBHRVRfQyhvcGVy
YW5kKSAoY2FsbEZyYW1lLT5yKG9wZXJhbmQpKQogCiAjZGVmaW5lIFJFVFVSTl9UV08oZmlyc3Qs
IHNlY29uZCkgZG8geyAgICAgICBcCiAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoZmlyc3Qs
IHNlY29uZCk7ICAgICAgICBcCkBAIC0xMTU5LDggKzExNTksNyBAQCBTTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQpCiB7CiAgICAgQkVHSU4oKTsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50PigpOwot
ICAgIGludCBzY29wZVJlZyA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7Ci0gICAgSlNTY29w
ZSogY3VycmVudFNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNjb3BlUmVnKS5SZWdpc3Rl
cjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBjdXJyZW50U2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgU3ltYm9sVGFi
bGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oR0VUX0MoYnl0ZWNvZGUubV9z
eW1ib2xUYWJsZSkuanNWYWx1ZSgpKTsKICAgICBKU1ZhbHVlIGluaXRpYWxWYWx1ZSA9IEdFVF9D
KGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlKS5qc1ZhbHVlKCk7CiAgICAgQVNTRVJUKGluaXRpYWxW
YWx1ZSA9PSBqc1VuZGVmaW5lZCgpIHx8IGluaXRpYWxWYWx1ZSA9PSBqc1REWlZhbHVlKCkpOwpA
QCAtMTE3NSw4ICsxMTc0LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1c2hfd2l0aF9z
Y29wZSkKICAgICBKU09iamVjdCogbmV3U2NvcGUgPSBHRVRfQyhieXRlY29kZS5tX25ld1Njb3Bl
KS5qc1ZhbHVlKCkudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBDSEVDS19FWENFUFRJT04o
KTsKIAotICAgIGludCBzY29wZVJlZyA9IGJ5dGVjb2RlLm1fY3VycmVudFNjb3BlLm9mZnNldCgp
OwotICAgIEpTU2NvcGUqIGN1cnJlbnRTY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihzY29w
ZVJlZykuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogY3VycmVudFNjb3BlID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fY3VycmVudFNjb3BlKS5SZWdpc3Rlcjo6c2Nv
cGUoKTsKICAgICBSRVRVUk4oSlNXaXRoU2NvcGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBj
dXJyZW50U2NvcGUsIG5ld1Njb3BlKSk7CiB9CiAKQEAgLTExODUsNyArMTE4Myw3IEBAIFNMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xf
aW5fZXZhbCkKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BSZXNv
bHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpOwogICAgIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpOwot
ICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2Nv
cGUub2Zmc2V0KCkpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpTU2NvcGUqIHNjb3BlID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOwog
ICAgIEpTVmFsdWUgcmVzb2x2ZWRTY29wZSA9IEpTU2NvcGU6OnJlc29sdmVTY29wZUZvckhvaXN0
aW5nRnVuY0RlY2xJbkV2YWwoZ2xvYmFsT2JqZWN0LCBzY29wZSwgaWRlbnQpOwogCiAgICAgQ0hF
Q0tfRVhDRVBUSU9OKCk7CkBAIC0xMTk5LDcgKzExOTcsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfcmVzb2x2ZV9zY29wZSkKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wUmVzb2x2
ZVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJs
b2NrKTsKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Zhcik7Ci0gICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZFIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSkuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAg
SlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSku
UmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgSlNPYmplY3QqIHJlc29sdmVkU2NvcGUgPSBKU1Njb3Bl
OjpyZXNvbHZlKGdsb2JhbE9iamVjdCwgc2NvcGUsIGlkZW50KTsKICAgICAvLyBQcm94eSBjYW4g
dGhyb3cgYW4gZXJyb3IgaGVyZSwgZS5nLiBQcm94eSBpbiB3aXRoIHN0YXRlbWVudCdzIEB1bnNj
b3BhYmxlcy4KICAgICBDSEVDS19FWENFUFRJT04oKTsKQEAgLTE0NDQsNyArMTQ0Miw3IEBAIFNM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfYXJyYXlfYnVmZmVyKQogewogICAgIEJFR0lOKCk7
CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcE5ld0FycmF5QnVmZmVyPigpOwotICAgIEFT
U0VSVChjb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGJ5dGVjb2RlLm1faW1tdXRh
YmxlQnV0dGVyZmx5Lm9mZnNldCgpKSk7CisgICAgQVNTRVJUKGJ5dGVjb2RlLm1faW1tdXRhYmxl
QnV0dGVyZmx5LmlzQ29uc3RhbnQoKSk7CiAgICAgSlNJbW11dGFibGVCdXR0ZXJmbHkqIGltbXV0
YWJsZUJ1dHRlcmZseSA9IGJpdHdpc2VfY2FzdDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KEdFVF9D
KGJ5dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5KS5qc1ZhbHVlKCkuYXNDZWxsKCkpOwogICAg
IGF1dG8mIHByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fYXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZTsKIApAQCAtMTQ2Myw3ICsxNDYxLDcgQEAgU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX25ld19hcnJheV9idWZmZXIpCiAgICAgICAgIC8vIFdlIGFsc28gY2Fubm90IGFsbG9j
YXRlIGEgbmV3IGJ1dHRlcmZseSBmcm9tIGNvbXBpbGF0aW9uIHRocmVhZHMgc2luY2UgaXQncyBp
bnZhbGlkIHRvIGFsbG9jYXRlIGNlbGxzIGZyb20KICAgICAgICAgLy8gYSBjb21waWxhdGlvbiB0
aHJlYWQuCiAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgICAgIGNvZGVCbG9j
ay0+Y29uc3RhbnRSZWdpc3RlcihieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRlcmZseS5vZmZzZXQo
KSkuc2V0KHZtLCBjb2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7CisgICAgICAgIGNvZGVC
bG9jay0+Y29uc3RhbnRSZWdpc3RlcihieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRlcmZseSkuc2V0
KHZtLCBjb2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7CiAgICAgICAgIFdURjo6c3RvcmVT
dG9yZUZlbmNlKCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbnN0cnVjdERhdGEuY3BwCmluZGV4IDRiZDE5MmE2Yzc3ZWZjMDI2ZTdhOTVhNWI3YmVjNzEy
NDM2NzdlNzguLjQ3YjI0NzQxOGNhODhlZmQxYjc4ZTYzMTFiNjc1ZDFlZmE1YTVmZjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwCkBAIC0z
NSw2ICszNSwxMSBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgY29u
c3QgQXJnTGlzdCYgYXJncywgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKQoreworICAgIHJldHVy
biBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rvck9iamVjdCwgY29uc3RydWN0b3JP
YmplY3QsIGFyZ3MsIGVycm9yTWVzc2FnZSk7Cit9CisKK0pTT2JqZWN0KiBjb25zdHJ1Y3QoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgSlNW
YWx1ZSBuZXdUYXJnZXQsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGNvbnN0IGNoYXIqIGVycm9yTWVz
c2FnZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNDYsMTAgKzUxLDkgQEAgSlNPYmplY3Qq
IGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGNvbnN0cnVj
dG9yT2JqZWN0LCBjb24KICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rv
ck9iamVjdCwgY29uc3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgYXJncywgY29uc3RydWN0b3JP
YmplY3QpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNvbnN0cnVjdChnbG9iYWxP
YmplY3QsIGNvbnN0cnVjdG9yT2JqZWN0LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBh
cmdzLCBuZXdUYXJnZXQpKTsgIAogfQogCi0KIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgQ29uc3RydWN0
VHlwZSBjb25zdHJ1Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhLCBj
b25zdCBBcmdMaXN0JiBhcmdzLCBKU1ZhbHVlIG5ld1RhcmdldCkKIHsKICAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db25zdHJ1Y3REYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25z
dHJ1Y3REYXRhLmgKaW5kZXggZDBhZTAwYmExMWQ3Y2VlMjRkZmZhZTkxOTExOTY3ZTAyYWE2ZWRl
My4uZmI2MTk3NGE3ZGIzOWM0OTFmOWY5M2JhZWI2Y2FjMTI2MjFmM2JhMiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuaApAQCAtNjAsNiArNjAsOCBA
QCBzdHJ1Y3QgQ29uc3RydWN0RGF0YSB7CiAKIC8vIENvbnZlbmllbmNlIHdyYXBwZXIgc28geW91
IGRvbid0IG5lZWQgdG8gZGVhbCB3aXRoIENhbGxEYXRhIGFuZCBDYWxsVHlwZSB1bmxlc3MgeW91
IGFyZSBnb2luZyB0byB1c2UgdGhlbS4KIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjb25z
dHJ1Y3QoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBjb25zdCBBcmdM
aXN0JiwgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTT2Jq
ZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBK
U1ZhbHVlIG5ld1RhcmdldCwgY29uc3QgQXJnTGlzdCYsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2Fn
ZSk7CisKIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlIGNvbnN0cnVjdG9yLCBDb25zdHJ1Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3RE
YXRhJiwgY29uc3QgQXJnTGlzdCYsIEpTVmFsdWUgbmV3VGFyZ2V0KTsKIAogQUxXQVlTX0lOTElO
RSBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgY29uc3RydWN0b3JPYmplY3QsIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSwgY29uc3Qg
Q29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSwgY29uc3QgQXJnTGlzdCYgYXJncykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCmluZGV4
IGE2Nzk1ZGExZWRjY2YzMTAyMmFjMmRkOWFlZmFmZDQzYTAxYTVjODUuLjRiMzQ2MWRlMjJlNzZm
N2RiZTMxODM5NDI0NWE5M2M1NzUwOWYzODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcApAQCAtMTM3LDIwICsxMzcsMTkgQEAgdm9p
ZCBEaXJlY3RBcmd1bWVudHM6OnVubWFwQXJndW1lbnQoVk0mIHZtLCB1bnNpZ25lZCBpbmRleCkK
ICAgICBtX21hcHBlZEFyZ3VtZW50cy5hdChpbmRleCwgaW50ZXJuYWxMZW5ndGgoKSkgPSB0cnVl
OwogfQogCi12b2lkIERpcmVjdEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIg
Zmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lk
IERpcmVjdEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKQogewogICAgIGlmICghbV9tYXBwZWRBcmd1bWVudHMpIHsKICAgICAgICAgdW5z
aWduZWQgbGltaXQgPSBzdGQ6Om1pbihsZW5ndGggKyBvZmZzZXQsIG1fbGVuZ3RoKTsKICAgICAg
ICAgdW5zaWduZWQgaTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHN0YXJ0ID0gZmlyc3RFbGVt
ZW50RGVzdCAtIG9mZnNldDsKICAgICAgICAgZm9yIChpID0gb2Zmc2V0OyBpIDwgbGltaXQ7ICsr
aSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihzdGFydCArIGkpID0gc3RvcmFnZSgpW2ldLmdl
dCgpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IHN0b3JhZ2Uo
KVtpXS5nZXQoKTsKICAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAg
IGNhbGxGcmFtZS0+cihzdGFydCArIGkpID0gZ2V0KGdsb2JhbE9iamVjdCwgaSk7CisgICAgICAg
ICAgICBmaXJzdEVsZW1lbnREZXN0W2kgLSBvZmZzZXRdID0gZ2V0KGdsb2JhbE9iamVjdCwgaSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBHZW5lcmljQXJndW1lbnRzOjpjb3B5VG9B
cmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNl
dCwgbGVuZ3RoKTsKKyAgICBHZW5lcmljQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFs
T2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiB9CiAKIHVuc2lnbmVk
IERpcmVjdEFyZ3VtZW50czo6bWFwcGVkQXJndW1lbnRzU2l6ZSgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCmluZGV4IDBhNmIxYTA2NjA5MGUy
Y2E1ZjU2ZjUwYTljNTNhMmNmY2U3NzJlMGEuLjhkOTY0MmEyYzk0MDQwODBiOTEzYWMyNzBjZDAx
M2MzOWVjZGE4MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rp
cmVjdEFyZ3VtZW50cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVj
dEFyZ3VtZW50cy5oCkBAIC0xNDQsNyArMTQ0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
R2VuZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1bWVudHM+Ojppc01vZGlmaWVkQXJndW1lbnREZXNj
cmlwdG9yKGluZGV4LCBtX2xlbmd0aCk7CiAgICAgfQogCi0gICAgdm9pZCBjb3B5VG9Bcmd1bWVu
dHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVt
ZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgY29w
eVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgREVDTEFSRV9JTkZPOwog
ICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0Fy
Z3VtZW50cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50
cy5oCmluZGV4IGIzMWI3MGFiZDAwY2VlYWY1ZWJiN2VlMWQ0NjdkYTQ4ODcwZDUxYzEuLjA3NGMy
MTYyZDhkYTE2NDcwNmY0MDA0YmRhYjNkYWVlYjI3MmNiYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgKQEAgLTU5LDcgKzU5LDcgQEAg
cHJvdGVjdGVkOgogICAgIHZvaWQgc2V0TW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IoVk0mLCB1
bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICBib29sIGlzTW9kaWZpZWRBcmd1
bWVudERlc2NyaXB0b3IodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGxlbmd0aCk7CiAKLSAgICB2
b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZpcnR1YWxS
ZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCk7CisgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBm
aXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAKICAg
ICB1c2luZyBNb2RpZmllZEFyZ3VtZW50c1B0ciA9IENhZ2VkQmFycmllclB0cjxHaWdhY2FnZTo6
UHJpbWl0aXZlLCBib29sPjsKICAgICBNb2RpZmllZEFyZ3VtZW50c1B0ciBtX21vZGlmaWVkQXJn
dW1lbnRzRGVzY3JpcHRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCmluZGV4IDIxODJhNjJiMTMwMzQzYWY1Njcy
MTczNjNhM2Y1YzFiODg2MTgxZmYuLmUwYWFiZjVmMmVlMTg1YjdkMTMzMTYwMzdkOGMxZDg4ODQy
NDY4NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNB
cmd1bWVudHNJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2Vu
ZXJpY0FyZ3VtZW50c0lubGluZXMuaApAQCAtMjk3LDcgKzI5Nyw3IEBAIGJvb2wgR2VuZXJpY0Fy
Z3VtZW50czxUeXBlPjo6aXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcih1bnNpZ25lZCBpbmRl
eCwgdW5zaWduCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci12b2lkIEdlbmVyaWNBcmd1
bWVudHM8VHlwZT46OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3Qs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBHZW5lcmljQXJndW1lbnRz
PFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
CiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTMwNSw5ICszMDUsOSBAQCB2b2lkIEdlbmVyaWNB
cmd1bWVudHM8VHlwZT46OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRgogICAgIFR5cGUqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxUeXBlKj4odGhp
cyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAg
IGlmICh0aGlzT2JqZWN0LT5pc01hcHBlZEFyZ3VtZW50KGkgKyBvZmZzZXQpKQotICAgICAgICAg
ICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IHRoaXNPYmplY3QtPmdldElu
ZGV4UXVpY2tseShpICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0g
PSB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaSArIG9mZnNldCk7CiAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IGdldChn
bG9iYWxPYmplY3QsIGkgKyBvZmZzZXQpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtp
XSA9IGdldChnbG9iYWxPYmplY3QsIGkgKyBvZmZzZXQpOwogICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKaW5kZXggNDRjN2U1MjBmMWMwYTI0MGE4YjY2
NjVhMjc0YTUxNDQ1OTM4NzY2MC4uNmQwNzU5MTcxMWVlZGJjMjhlMGU0ZGE3ODQ5ODIyYWI4ZDY2
ZjVkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKQEAgLTEy
MzAsNyArMTIzMCw3IEBAIHZvaWQgSlNBcnJheTo6ZmlsbEFyZ0xpc3QoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgTWFya2VkQXJndW1lbnRCdWZmZXImIGFyCiAgICAgICAgIGFyZ3MuYXBw
ZW5kKGdldChnbG9iYWxPYmplY3QsIGkpKTsKIH0KIAotdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1
bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCkKK3ZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMjY5LDcgKzEy
NjksNyBAQCB2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZQogICAgICAgICAgICAgZG91YmxlIHYgPSBi
dXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKS5hdCh0aGlzLCBpKTsKICAgICAgICAgICAgIGlm
ICh2ICE9IHYpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYWxsRnJhbWUt
PnIoZmlyc3RFbGVtZW50RGVzdCArIGkgLSBvZmZzZXQpID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNv
ZGVBc0RvdWJsZSwgdik7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2kgLSBvZmZzZXRd
ID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdik7CiAgICAgICAgIH0KICAgICAg
ICAgYnJlYWs7CiAgICAgfQpAQCAtMTI5NCwxMSArMTI5NCwxMSBAQCB2b2lkIEpTQXJyYXk6OmNv
cHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZQogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07CiAg
ICAgICAgIGlmICghdikKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYWxsRnJhbWUtPnIo
Zmlyc3RFbGVtZW50RGVzdCArIGkgLSBvZmZzZXQpID0gdi5nZXQoKTsKKyAgICAgICAgZmlyc3RF
bGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IHYuZ2V0KCk7CiAgICAgfQogICAgIAogICAgIGZvciAo
OyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERl
c3QgKyBpIC0gb2Zmc2V0KSA9IGdldChnbG9iYWxPYmplY3QsIGkpOworICAgICAgICBmaXJzdEVs
ZW1lbnREZXN0W2kgLSBvZmZzZXRdID0gZ2V0KGdsb2JhbE9iamVjdCwgaSk7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCmluZGV4IDMxNzk0OWM1NzJhMTFiNzVhZGMxODNhYzll
NDE0NGY2NmNmNmFiNTAuLjMxMTY1YjVmZjQ5MjU0Y2MxYTZjNDc5MDJiNzkxMGFjNGE3ZDliZmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKQEAgLTE2Myw3ICsxNjMs
NyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaWxsQXJn
TGlzdChKU0dsb2JhbE9iamVjdCosIE1hcmtlZEFyZ3VtZW50QnVmZmVyJik7Ci0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJh
bWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29weVRvQXJndW1l
bnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBp
c0l0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAKaW5k
ZXggZTMyZTk0OTdkNDc4Mjk1MDMzZGFhOTlhNTkzNmRlYTE5YTFjNDljMC4uZTQ5MDk3NTYxNmRh
ZDM5MTE0MjM4MmM5OTNlNzhkMTJjMTkxMWMyYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcApAQCAtNDYsMTMgKzQ2
LDEzIEBAIHZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRl
bihidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIGJ1dHRlcmZseS0+cHVibGljTGVuZ3Ro
KCkpOwogfQogCi12b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5VG9Bcmd1bWVudHMoSlNH
bG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0
RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBKU0lt
bXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGlm
ICgoaSArIG9mZnNldCkgPCBwdWJsaWNMZW5ndGgoKSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+
cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBnZXQoaSArIG9mZnNldCk7CisgICAgICAgICAgICBm
aXJzdEVsZW1lbnREZXN0W2ldID0gZ2V0KGkgKyBvZmZzZXQpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0ganNVbmRlZmluZWQo
KTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSBqc1VuZGVmaW5lZCgpOwogICAg
IH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11
dGFibGVCdXR0ZXJmbHkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRh
YmxlQnV0dGVyZmx5LmgKaW5kZXggYWNiNjg0ODE5MWExOTAzNTIyYjliM2U0ZDAwZjk2OWU0MGI3
ODE1YS4uMDdlMWE4YTEwYzNjZGM3MTE3YWNhM2RjNTQzZWQ3ZGRiMGQ0MWYzZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5o
CkBAIC0xNDcsNyArMTQ3LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMo
SlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50
RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgY29weVRv
QXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUs
IFN1YnNwYWNlQWNjZXNzPgogICAgIHN0YXRpYyBDb21wbGV0ZVN1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xv
Y2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAppbmRleCBh
NmViMGVhNWY2YWFkZWIzN2QyNzc5NGY3YzkxM2Y2ODE2ODM0OTdlLi4xNmFhMzY5ZjQ4NTA3MDYx
YzA2MzYxNTE4YWUxNWQyYmM2OGZiNmRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTG9jay5jcHAKQEAgLTIwNCw2ICsyMDQsNyBAQCB2b2lkIEpTTG9jazo6d2lsbFJlbGVhc2VM
b2NrKCkKIHsgICAKICAgICBSZWZQdHI8Vk0+IHZtID0gbV92bTsKICAgICBpZiAodm0pIHsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKCF2bS0+aGFzQ2hlY2twb2ludE9TUlNp
ZGVTdGF0ZSgpLCAiUmVsZWFzaW5nIEpTTG9jayBidXQgcGVuZGluZyBjaGVja3BvaW50IHNpZGUg
c3RhdGUgc3RpbGwgYXZhaWxhYmxlIik7CiAgICAgICAgIHZtLT5kcmFpbk1pY3JvdGFza3MoKTsK
IAogICAgICAgICBpZiAoIXZtLT50b3BDYWxsRnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAKaW5kZXgg
ZGIwNTI1NDg4MjUzMzlhNmIxMzJiYTRlNDQyYjIxMWQ2ZGUzN2JhMC4uNTk2ODA4Y2FmYzBiMGY0
Yzg0NzBiZDc1OWVkOWY0OTE2YzY2NDQ4NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcApAQCAtNzQsNyAr
NzQsNyBAQCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6
OmNyZWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsTwogCiAgICAgZXhlY3V0YWJsZS0+bV91bmxp
bmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suc2V0KGdsb2JhbE9iamVjdC0+dm0oKSwgZXhlY3V0
YWJsZSwgdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZSk7CiAKLSAgICBleGVjdXRhYmxlLT5tX21v
ZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUuc2V0KGdsb2JhbE9iamVjdC0+dm0oKSwgZXhlY3V0
YWJsZSwganNDYXN0PFN5bWJvbFRhYmxlKj4odW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZS0+Y29u
c3RhbnRSZWdpc3Rlcih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlLT5tb2R1bGVFbnZpcm9ubWVu
dFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCgpKS5nZXQoKSktPmNsb25lU2NvcGVQ
YXJ0KGdsb2JhbE9iamVjdC0+dm0oKSkpOworICAgIGV4ZWN1dGFibGUtPm1fbW9kdWxlRW52aXJv
bm1lbnRTeW1ib2xUYWJsZS5zZXQoZ2xvYmFsT2JqZWN0LT52bSgpLCBleGVjdXRhYmxlLCBqc0Nh
c3Q8U3ltYm9sVGFibGUqPih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlLT5jb25zdGFudFJlZ2lz
dGVyKFZpcnR1YWxSZWdpc3Rlcih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlLT5tb2R1bGVFbnZp
cm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCgpKSkuZ2V0KCkpLT5jbG9u
ZVNjb3BlUGFydChnbG9iYWxPYmplY3QtPnZtKCkpKTsKIAogICAgIHJldHVybiBleGVjdXRhYmxl
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAppbmRleCAxNzZm
OTlkNDllOTgwMWZiNzM4MWQyYWFlMTdhMWNjMGQ1NmFiYWJjLi43NGNjZGViMjc5NGNlNWY0YmFh
NzcxNDEwMjM4ODE1Zjg3NjMzMDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcApAQCAtNTA5LDExICs1MDksOSBAQCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBl
bmRlbnRPcHRpb25zKCkKICAgICBpZiAoT3B0aW9uczo6c29mdFJlc2VydmVkWm9uZVNpemUoKSA8
IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNpemUoKSArIG1pbmltdW1SZXNlcnZlZFpvbmVTaXplKQog
ICAgICAgICBPcHRpb25zOjpzb2Z0UmVzZXJ2ZWRab25lU2l6ZSgpID0gT3B0aW9uczo6cmVzZXJ2
ZWRab25lU2l6ZSgpICsgbWluaW11bVJlc2VydmVkWm9uZVNpemU7CiAKLSNpZiBVU0UoSlNWQUxV
RTMyXzY0KQogICAgIC8vIEZJWE1FOiBNYWtlIHByb2JlIE9TUiBleGl0IHdvcmsgb24gMzItYml0
OgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc5NTYK
ICAgICBPcHRpb25zOjp1c2VQcm9iZU9TUkV4aXQoKSA9IGZhbHNlOwotI2VuZGlmCiAKICAgICBp
ZiAoIU9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKQogICAgICAgICBPcHRpb25zOjpkaXNrQ2FjaGVQ
YXRoKCkgPSBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NvcGVkQXJndW1lbnRzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nj
b3BlZEFyZ3VtZW50cy5jcHAKaW5kZXggMDgxZDk3OGE3YjJhNjI2NmFjNTUyYzM3OWQzODQ1MDA1
ZGMxMWYxMC4uM2M3NDBkNDhmNjI0MWIwMjYwNWZiZjUyNWJkZGYyMzE5MmQwOWRiMCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCkBA
IC0xNDgsOSArMTQ4LDkgQEAgdm9pZCBTY29wZWRBcmd1bWVudHM6OnVubWFwQXJndW1lbnQoVk0m
IHZtLCB1aW50MzJfdCBpKQogICAgICAgICBzdG9yYWdlKClbaSAtIG5hbWVkTGVuZ3RoXS5jbGVh
cigpOwogfQogCi12b2lkIFNjb3BlZEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0
ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2
b2lkIFNjb3BlZEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKQogewotICAgIEdlbmVyaWNBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhn
bG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgp
OworICAgIEdlbmVyaWNBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZp
cnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVu
dHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCmlu
ZGV4IGY4NWU0N2RmYmVlOGNhN2MzNzA0ZjI5ZWQ0Y2IxYjRlOTcyMDQ0NTcuLmU1OGNiMjJlZmQ0
OGM2NzRiZjViMWIxMTI4MGI1MWFiYzBkZTA4NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCkBAIC0xNDIsNyArMTQyLDcgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gR2VuZXJpY0FyZ3VtZW50czxTY29wZWRBcmd1bWVudHM+Ojppc01v
ZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKGluZGV4LCBtX3RhYmxlLT5sZW5ndGgoKSk7CiAgICAg
fQogCi0gICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUq
LCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpOworICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpOwogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCmluZGV4IGE5ZmU3NGE0YjdmNDQyOTU5Y2IwZTg3YTZlMGY1ODk5N2E2MjY2ZjYuLjU3
YzJhNzgyOTM4OTkyNmFkZjk4ZmE3Y2VhMzJiMWM2YWU0MmUyYzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJCb29sZWFuT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiQnVpbHRpbkV4ZWN1dGFibGVzLmgiCiAjaW5jbHVkZSAiQnl0ZWNv
ZGVJbnRyaW5zaWNSZWdpc3RyeS5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0
YXRlLmgiCiAjaW5jbHVkZSAiQ2xvbmVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCiAjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCkBAIC0xMDYyLDggKzEwNjMsMzEgQEAgdm9pZCBW
TTo6Z2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRp
dmVSb290cykKICAgICAgICAgfQogICAgIH0KIH0KKwordm9pZCBWTTo6c2NhblNpZGVTdGF0ZShD
b25zZXJ2YXRpdmVSb290cyYgcm9vdHMpIGNvbnN0Cit7CisgICAgQVNTRVJUKGhlYXAud29ybGRJ
c1N0b3BwZWQoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBpdGVyIDogbV9jaGVja3BvaW50U2lk
ZVN0YXRlKSB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGl0ZXIudmFsdWUtPnRtcHMp
IC8gc2l6ZW9mKEpTVmFsdWUpID09IG1heE51bUNoZWNrcG9pbnRUbXBzKTsKKyAgICAgICAgcm9v
dHMuYWRkKGl0ZXIudmFsdWUtPnRtcHMsIGl0ZXIudmFsdWUtPnRtcHMgKyBtYXhOdW1DaGVja3Bv
aW50VG1wcyk7CisgICAgfQorfQogI2VuZGlmCiAKK3ZvaWQgVk06OmFkZENoZWNrcG9pbnRPU1JT
aWRlU3RhdGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50
T1NSRXhpdFNpZGVTdGF0ZT4mJiBwYXlsb2FkKQoreworICAgIEFTU0VSVChjdXJyZW50VGhyZWFk
SXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY2hlY2twb2ludFNp
ZGVTdGF0ZS5hZGQoY2FsbEZyYW1lLCBXVEZNb3ZlKHBheWxvYWQpKTsKKyAgICBBU1NFUlRfVU5V
U0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworfQorCitzdGQ6OnVuaXF1ZV9w
dHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IFZNOjpmaW5kQ2hlY2twb2ludE9TUlNpZGVT
dGF0ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZElz
SG9sZGluZ0FQSUxvY2soKSk7CisgICAgYXV0byBzaWRlU3RhdGUgPSBtX2NoZWNrcG9pbnRTaWRl
U3RhdGUudGFrZShjYWxsRnJhbWUpOworICAgIHJldHVybiBzaWRlU3RhdGU7Cit9CisKIHZvaWQg
bG9nU2FuaXRpemVTdGFjayhWTSYgdm0pCiB7CiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VTYW5p
dGl6ZVN0YWNrKCkgJiYgdm0udG9wQ2FsbEZyYW1lKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaAppbmRleCBmNzcxZDA5MjU2YWY5MTUwMzBkYTU5ZWUzMTgyODBmMzRkZjcxMGFmLi43ZGEz
MmE3MjYyNGYwYmZhYWY0ZTU5YTVmN2RhNDRjMjcyM2RjNTc4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmgKQEAgLTEwMywxMCArMTAzLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3Mg
QnVpbHRpbkV4ZWN1dGFibGVzOwogY2xhc3MgQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeTsKIGNs
YXNzIENhbGxGcmFtZTsKK3N0cnVjdCBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZTsKIGNsYXNz
IENvZGVCbG9jazsKIGNsYXNzIENvZGVDYWNoZTsKIGNsYXNzIENvbW1vbklkZW50aWZpZXJzOwog
Y2xhc3MgQ29tcGFjdFZhcmlhYmxlTWFwOworY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7CiBjbGFz
cyBDdXN0b21HZXR0ZXJTZXR0ZXI7CiBjbGFzcyBET01BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXI7CiBj
bGFzcyBEYXRlSW5zdGFuY2U7CkBAIC05NTgsNiArOTYwLDExIEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CiAKKyAgICB2
b2lkIGFkZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoQ2FsbEZyYW1lKiwgc3RkOjp1bmlxdWVfcHRy
PENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiYmKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2hl
Y2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IGZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRlKENhbGxG
cmFtZSopOworICAgIGJvb2wgaGFzQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY2hlY2twb2ludFNpZGVTdGF0ZS5zaXplKCk7IH0KKyAgICB2b2lkIHNjYW5TaWRlU3Rh
dGUoQ29uc2VydmF0aXZlUm9vdHMmKSBjb25zdDsKKwogICAgIFZNRW50cnlTY29wZSogZW50cnlT
Y29wZTsKIAogICAgIEpTT2JqZWN0KiBzdHJpbmdSZWN1cnNpb25DaGVja0ZpcnN0T2JqZWN0IHsg
bnVsbHB0ciB9OwpAQCAtMTIwOCw2ICsxMjE1LDcgQEAgcHJpdmF0ZToKICAgICBMb2NrIG1fc2Ny
YXRjaEJ1ZmZlckxvY2s7CiAgICAgVmVjdG9yPFNjcmF0Y2hCdWZmZXIqPiBtX3NjcmF0Y2hCdWZm
ZXJzOwogICAgIHNpemVfdCBtX3NpemVPZkxhc3RTY3JhdGNoQnVmZmVyIHsgMCB9OworICAgIEhh
c2hNYXA8Q2FsbEZyYW1lKiwgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0
YXRlPj4gbV9jaGVja3BvaW50U2lkZVN0YXRlOwogICAgIElubGluZVdhdGNocG9pbnRTZXQgbV9w
cmltaXRpdmVHaWdhY2FnZUVuYWJsZWQ7CiAgICAgRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlIG1f
ZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250cm9sRmxv
d1Byb2ZpbGVyPiBtX2NvbnRyb2xGbG93UHJvZmlsZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcAppbmRleCA4MWM5ZjFmNjc0NzA3OWVkODMxMjY2MmMwODMw
MGM2Y2MzNjI4ZTM3Li5lMTQ4NDAwZDQ4N2RmYzY0ZTQ0MDU0ZGRhZGIwODU4OTcyZTM5YTI2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5jcHAKQEAgLTM5Nyw4
ICszOTcsOCBAQCB2b2lkIFZNSW5zcGVjdG9yOjpkdW1wUmVnaXN0ZXJzKENhbGxGcmFtZSogY2Fs
bEZyYW1lKQogICAgIGNvbnN0IFJlZ2lzdGVyKiBpdDsKICAgICBjb25zdCBSZWdpc3RlciogZW5k
OwogCi0gICAgaXQgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgQ2FsbEZyYW1lU2xvdDo6dGhp
c0FyZ3VtZW50ICsgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCk7Ci0gICAgZW5kID0gY2FsbEZy
YW1lLT5yZWdpc3RlcnMoKSArIENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAtIDE7CisgICAg
aXQgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVu
dCArIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKTsKKyAgICBlbmQgPSBjYWxsRnJhbWUtPnJl
Z2lzdGVycygpICsgKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAtIDEpOwogICAgIHdoaWxl
IChpdCA+IGVuZCkgewogICAgICAgICBKU1ZhbHVlIHYgPSBpdC0+anNWYWx1ZSgpOwogICAgICAg
ICBpbnQgcmVnaXN0ZXJOdW1iZXIgPSBpdCAtIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2su
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCmlu
ZGV4IGY2ODhhN2M5ZTk0MjZkOWUwYmVhM2FmMGNmZmFmMmMyN2RkNWE1NjcuLjJmNGIxYzdkZTZh
ODdjNzQxMWU4NmU4N2U3ZjE5MjQ3MzUyYzBmOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCkBAIC03MiwxMSArNzIsMTEgQEAg
cHVibGljOgogICAgIGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIGNvbnN0YW50cygpIGNvbnN0IHsg
cmV0dXJuIG1fY29uc3RhbnRzOyB9CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3Ry
dWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuICptX2luc3RydWN0aW9uczsgfQogCi0gICAgQUxXQVlT
X0lOTElORSB1aW50NjRfdCBnZXRDb25zdGFudChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29uc3RhbnRzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOyB9Ci0gICAgQUxX
QVlTX0lOTElORSBUeXBlIGdldENvbnN0YW50VHlwZShpbnQgaW5kZXgpIGNvbnN0CisgICAgQUxX
QVlTX0lOTElORSB1aW50NjRfdCBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25z
dCB7IHJldHVybiBtX2NvbnN0YW50c1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgQUxX
QVlTX0lOTElORSBUeXBlIGdldENvbnN0YW50VHlwZShWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25z
dAogICAgIHsKICAgICAgICAgQVNTRVJUKE9wdGlvbnM6OmR1bXBHZW5lcmF0ZWRXYXNtQnl0ZWNv
ZGVzKCkpOwotICAgICAgICByZXR1cm4gbV9jb25zdGFudFR5cGVzW2luZGV4IC0gRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXhdOworICAgICAgICByZXR1cm4gbV9jb25zdGFudFR5cGVzW3JlZy50
b0NvbnN0YW50SW5kZXgoKV07CiAgICAgfQogCiAgICAgdm9pZCBzZXRJbnN0cnVjdGlvbnMoc3Rk
Ojp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcAppbmRleCBkZDFhMGY3OTk2NTZhNmQ5
NDBlMDY5YjBlNmVkY2I2ZmViZjJkN2FjLi41NzlkMjdiYjdkMTIxOWU3MmMwM2VjM2Y1Y2Q4MjYw
NDZmYjUwNzcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJ
bnRHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTElu
dEdlbmVyYXRvci5jcHAKQEAgLTI0Miw2ICsyNDIsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNl
dFBhcnNlcihGdW5jdGlvblBhcnNlcjxMTEludEdlbmVyYXRvcj4qIHBhcnNlcikgeyBtX3BhcnNl
ciA9IHBhcnNlcjsgfTsKIAorICAgIC8vIFdlIG5lZWQgdGhpcyBmb3IgYXV0b2dlbmVyYXRlZCB0
ZW1wbGF0ZXMgdXNlZCBieSBKUyBieXRlY29kZXMuCisgICAgdm9pZCBzZXRVc2VzQ2hlY2twb2lu
dHMoKSBjb25zdCB7IFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOyB9CisKICAgICB2b2lkIGR1
bXAoY29uc3QgQ29udHJvbFN0YWNrJiwgY29uc3QgU3RhY2sqKSB7IH0KIAogcHJpdmF0ZToKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcAppbmRleCBkYmZi
NTAwY2U1NThmMjllYjI2ZTFkZGQxMGViOTUxNmUwMDJmNTk5Li41NmNhNTQ3YTc0YTM3ZTlhMDEw
NjUxYTZiNjEzNDcyZWYzZmMzNmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU9wZXJhdGlvbnMuY3BwCkBAIC03NDQsNyArNzQ0LDcgQEAgdm9pZCogSklUX09QRVJBVElP
TiBvcGVyYXRpb25XYXNtVG9KU0V4Y2VwdGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgV2FzbTo6
RXhjZXAKICAgICAvLyBmb3IgZXhjZXB0aW9ucyBmaXJzdCBsb2FkIGNhbGxGcmFtZUZvckNhdGNo
IGluZm8gY2FsbCBmcmFtZSByZWdpc3RlciBiZWZvcmUganVtcGluZwogICAgIC8vIHRvIHRoZSBl
eGNlcHRpb24gaGFuZGxlci4gSWYgd2UgZGlkIHRoaXMsIHdlIGNvdWxkIHJlbW92ZSB0aGlzIHRl
cnJpYmxlIGhhY2suCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3MDQ0MAotICAgIGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGNhbGxGcmFtZSlbQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlXSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oaW5zdGFuY2UtPm1vZHVs
ZSgpKTsKKyAgICBiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihjYWxsRnJhbWUpW3N0YXRpY19jYXN0
PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKV0gPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KGlu
c3RhbmNlLT5tb2R1bGUoKSk7CiAgICAgcmV0dXJuIHZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1Bh
dGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCmlu
ZGV4IDkyN2E2OTg0YTNiZTAxNGNmM2VhN2Q2N2YwMzQ1ODRlZWJlYjYwY2UuLjU0ZjYzNmFjMWI1
MDc1ZDFjNjY3YjM4YTkwMzEzMjkwZDVmMzMzY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCkBAIC03Niw3ICs3Niw3IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgTExJbnQgewogCiAjZGVmaW5lIFJFQUQodmlydHVhbFJlZ2lzdGVyKSBcCiAg
ICAgKHZpcnR1YWxSZWdpc3Rlci5pc0NvbnN0YW50KCkgXAotICAgICAgICA/IEpTVmFsdWU6OmRl
Y29kZShDT0RFX0JMT0NLKCktPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSkp
IFwKKyAgICAgICAgPyBKU1ZhbHVlOjpkZWNvZGUoQ09ERV9CTE9DSygpLT5nZXRDb25zdGFudCh2
aXJ0dWFsUmVnaXN0ZXIpKSBcCiAgICAgICAgIDogY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3Rl
cikpCiAKIGlubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFdhc206OkxMSW50
Q2FsbGVlKiBjYWxsZWUsIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFdhc206
Okluc3RhbmNlKiBpbnN0YW5jZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDgwOTMxMzYzMjQwZTI1ZjFiMDM4N2VlNzdmZmRiNDc1OTllMGRhMzMuLjY3NDAx
OWUwZTJhZDlkOWI0NjRhZmE1MDllOTY4M2VmZjQ0ZjUyMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzkzLDYgKzM5Myw3IEBACiAJCTUzMTFCRDU3MUVB
N0UxQTEwMDUyNTI4MSAvKiBTaWduYWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNpZ25hbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMxMUJENTkxRUE4
MUE5NjAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVGhyZWFkTWVzc2FnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MzExQkQ1QjFFQTgyMkY5MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRNZXNzYWdlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTMzOEVCQTQyM0FCMDREMTAwMzgyNjYyIC8qIEVudW1DbGFzc09w
ZXJhdG9yT3ZlcmxvYWRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVudW1D
bGFzc09wZXJhdG9yT3ZlcmxvYWRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUz
NTM0RjI5MUVDMEUxMEUwMDE0MUIyRiAvKiBNYWNoRXhjZXB0aW9ucy5kZWZzICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5taWc7IHBhdGggPSBNYWNoRXhjZXB0aW9ucy5kZWZzOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MzlFQjA2MjFENTUyODQyMDBDODJFRjcgLyogTEVCRGVjb2Rlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMRUJEZWNvZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRUMyNTNDMUU5NUFEMzAwMDA4MzFCOSAvKiBQcmlvcml0
eVF1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByaW9yaXR5UXVldWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk4Niw2ICs5ODcsNyBAQAogCQkJCUE4
QTQ3Mjk4MTUxQTgyNUEwMDQxMjNGRiAvKiBkdG9hLmggKi8sCiAJCQkJRkUwNUZBRTYxRkRCMjE0
MzAwMDkzMjMwIC8qIER1bWJQdHJUcmFpdHMuaCAqLywKIAkJCQlBRDY1M0RBODIwMDZCNkMyMDBE
ODIwRDcgLyogRHVtYlZhbHVlVHJhaXRzLmggKi8sCisJCQkJNTMzOEVCQTQyM0FCMDREMTAwMzgy
NjYyIC8qIEVudW1DbGFzc09wZXJhdG9yT3ZlcmxvYWRzLmggKi8sCiAJCQkJMUFFQTg4RTExRDZC
QkNGNDAwRTVBRDY0IC8qIEVudW1UcmFpdHMuaCAqLywKIAkJCQlBRDdDNDM0QTFERDJBNEE3MDAy
Njg4OEIgLyogRXhwZWN0ZWQuaCAqLywKIAkJCQlBOEE0NzI5RjE1MUE4MjVBMDA0MTIzRkYgLyog
RXhwb3J0TWFjcm9zLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaCBi
L1NvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCmluZGV4IDRjNmY1ZDQ0MjYzMmMzZWZjMDAwYmQxOGU5
ZTM2OTQ1MmZhZjFjMTAuLmI0NmRhOWU4NWFiOWI2ODYyNDM4YTY5MmUzNjZhNzUwNTRkY2M2YzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0JpdG1hcC5oCkBAIC01MSw2ICs1MSw3IEBAIHB1YmxpYzoKICAgICBzaXplX3QgbmV4dFBvc3Np
Ymx5VW5zZXQoc2l6ZV90KSBjb25zdDsKICAgICB2b2lkIGNsZWFyKHNpemVfdCk7CiAgICAgdm9p
ZCBjbGVhckFsbCgpOworICAgIHZvaWQgaW52ZXJ0KCk7CiAgICAgaW50NjRfdCBmaW5kUnVuT2Za
ZXJvcyhzaXplX3QgcnVuTGVuZ3RoKSBjb25zdDsKICAgICBzaXplX3QgY291bnQoc2l6ZV90IHN0
YXJ0ID0gMCkgY29uc3Q7CiAgICAgc2l6ZV90IGlzRW1wdHkoKSBjb25zdDsKQEAgLTEwMiw2ICsx
MDMsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwog
ICAgICAgICB9CiAKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yPShib29sIHZhbHVlKQorICAg
ICAgICB7CisgICAgICAgICAgICBtX2JpdG1hcC0+c2V0KG1faW5kZXgsIHZhbHVlKTsKKyAgICAg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAg
Y29uc3QgQml0bWFwKiBtX2JpdG1hcDsKICAgICAgICAgc2l6ZV90IG1faW5kZXg7CkBAIC0xMTEs
NiArMTE4LDkgQEAgcHVibGljOgogICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4g
aXRlcmF0b3IoKnRoaXMsIGZpbmRCaXQoMCwgdHJ1ZSkpOyB9CiAgICAgaXRlcmF0b3IgZW5kKCkg
Y29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIGJpdG1hcFNpemUpOyB9CiAgICAgCisgICAg
aXRlcmF0b3Igb3BlcmF0b3JbXShzaXplX3QpOworICAgIGNvbnN0IGl0ZXJhdG9yIG9wZXJhdG9y
W10oc2l6ZV90KSBjb25zdDsKKwogICAgIHZvaWQgbWVyZ2VBbmRDbGVhcihCaXRtYXAmKTsKICAg
ICB2b2lkIHNldEFuZENsZWFyKEJpdG1hcCYpOwogICAgIApAQCAtMjI0LDYgKzIzNCwxMyBAQCBp
bmxpbmUgdm9pZCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpjbGVhckFsbCgpCiAgICAg
bWVtc2V0KGJpdHMuZGF0YSgpLCAwLCBzaXplb2YoYml0cykpOwogfQogCit0ZW1wbGF0ZTxzaXpl
X3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CitpbmxpbmUgdm9pZCBCaXRtYXA8Yml0
bWFwU2l6ZSwgV29yZFR5cGU+OjppbnZlcnQoKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgd29yZHM7ICsraSkKKyAgICAgICAgYml0c1tpXSA9IH5iaXRzW2ldOworfQorCiB0ZW1wbGF0
ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CiBpbmxpbmUgc2l6ZV90IEJp
dG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om5leHRQb3NzaWJseVVuc2V0KHNpemVfdCBzdGFy
dCkgY29uc3QKIHsKQEAgLTQwOSw2ICs0MjYsMTkgQEAgaW5saW5lIGJvb2wgQml0bWFwPGJpdG1h
cFNpemUsIFdvcmRUeXBlPjo6b3BlcmF0b3IhPShjb25zdCBCaXRtYXAmIG90aGVyKSBjb25zdAog
ICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKIH0KIAordGVtcGxhdGU8c2l6ZV90IGJpdG1h
cFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgoraW5saW5lIGF1dG8gQml0bWFwPGJpdG1hcFNpemUs
IFdvcmRUeXBlPjo6b3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIC0+IGl0ZXJhdG9yCit7CisgICAg
QVNTRVJUKGluZGV4IDwgc2l6ZSgpKTsKKyAgICByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIGluZGV4
KTsKK30KKwordGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgor
aW5saW5lIGF1dG8gQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6b3BlcmF0b3JbXShzaXpl
X3QgaW5kZXgpIGNvbnN0IC0+IGNvbnN0IGl0ZXJhdG9yCit7CisgICAgcmV0dXJuICgqY29uc3Rf
Y2FzdDxCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+Kj4odGhpcykpW2luZGV4XTsKK30KKwog
dGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgogaW5saW5lIHVu
c2lnbmVkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Omhhc2goKSBjb25zdAogewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV1RGL3d0Zi9D
TWFrZUxpc3RzLnR4dAppbmRleCBkMWM1OTk5YjhmMTc4YzRjMzI1NzRiMWI2ZWQzOTRlZWE5ZjMz
NzQ5Li5jZTMzMzJhODU0MThjMWNjYzVjNGQ5YjIxOWE5YjZhMDA5ZGVlZWRiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFr
ZUxpc3RzLnR4dApAQCAtNTYsNiArNTYsNyBAQCBzZXQoV1RGX1BVQkxJQ19IRUFERVJTCiAgICAg
RG91Ymx5TGlua2VkTGlzdC5oCiAgICAgRHVtYlB0clRyYWl0cy5oCiAgICAgRHVtYlZhbHVlVHJh
aXRzLmgKKyAgICBFbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oCiAgICAgRW51bVRyYWl0cy5o
CiAgICAgRXhwZWN0ZWQuaAogICAgIEV4cG9ydE1hY3Jvcy5oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9FbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oIGIvU291cmNlL1dURi93dGYvRW51
bUNsYXNzT3BlcmF0b3JPdmVybG9hZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNTdiYTJmYTJmNzkyOWE2YTk5
OGE5YTRlZjE0ZDJiZTU3NTQ2MzcxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYv
RW51bUNsYXNzT3BlcmF0b3JPdmVybG9hZHMuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSA8dHlwZV90cmFpdHM+CisKKyNkZWZpbmUgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1f
Q0xBU1NfV0hFTihlbnVtTmFtZSwgb3AsIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBcCisgICAgY29uc3RleHByIGF1dG8gb3BlcmF0b3Igb3AoZW51bU5hbWUg
ZW51bUVudHJ5LCBUIHZhbHVlKSAtPiBzdGQ6OmVuYWJsZV9pZl90PChlbmFibGVFeHByZXNzaW9u
KSwgVD4gXAorICAgIHsgXAorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZW51bUVudHJ5
KSBvcCB2YWx1ZTsgXAorICAgIH0gXAorICAgIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBc
CisgICAgY29uc3RleHByIGF1dG8gb3BlcmF0b3Igb3AoVCB2YWx1ZSwgZW51bU5hbWUgZW51bUVu
dHJ5KSAtPiBzdGQ6OmVuYWJsZV9pZl90PChlbmFibGVFeHByZXNzaW9uKSwgVD4gXAorICAgIHsg
XAorICAgICAgICByZXR1cm4gdmFsdWUgb3Agc3RhdGljX2Nhc3Q8VD4oZW51bUVudHJ5KTsgXAor
ICAgIH0gXAorCisjZGVmaW5lIE9WRVJMT0FEX01BVEhfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVNT
X1dIRU4oZW51bU5hbWUsIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRP
Ul9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCArLCBlbmFibGVFeHByZXNzaW9uKSBcCisg
ICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgLSwgZW5h
YmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dI
RU4oZW51bU5hbWUsICosIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRP
Ul9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCAvLCBlbmFibGVFeHByZXNzaW9uKSBcCisg
ICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgJSwgZW5h
YmxlRXhwcmVzc2lvbikgXAorCisjZGVmaW5lIE9WRVJMT0FEX01BVEhfT1BFUkFUT1JTX0ZPUl9F
TlVNX0NMQVNTX1dJVEhfSU5URUdSQUxTKGVudW1OYW1lKSBPVkVSTE9BRF9NQVRIX09QRVJBVE9S
U19GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCBzdGQ6OmlzX2ludGVncmFsX3Y8VD4pCisK
KyNkZWZpbmUgT1ZFUkxPQURfUkVMQVRJT05BTF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0hF
TihlbnVtTmFtZSwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZP
Ul9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsID09LCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAg
T1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgIT0sIGVuYWJs
ZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVO
KGVudW1OYW1lLCA8LCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1Jf
Rk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgPD0sIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAg
ICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCA+LCBlbmFi
bGVFeHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hF
TihlbnVtTmFtZSwgPj0sIGVuYWJsZUV4cHJlc3Npb24pIFwKKworI2RlZmluZSBPVkVSTE9BRF9S
RUxBVElPTkFMX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSVRIX0lOVEVHUkFMUyhlbnVtTmFt
ZSkgT1ZFUkxPQURfUkVMQVRJT05BTF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVt
TmFtZSwgc3RkOjppc19pbnRlZ3JhbF92PFQ+KQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9GYXN0Qml0VmVjdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgKaW5kZXgg
NzMzYzY1YzA3NjUwYmM4YzRiYzA4MWRjMDUyY2E0YzM4OWY4ZGNlZC4uOTZkY2NlMWNkYmMzODc0
ZTM2MmIzNzAwYjI4YTRmOTQ0MzM4NGFjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvRmFz
dEJpdFZlY3Rvci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaApAQCAtNDUy
LDcgKzQ1Miw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgZXhwbGljaXQgb3BlcmF0
b3IgYm9vbCgpIGNvbnN0CisgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CiAgICAgewogICAgICAg
ICByZXR1cm4gISEoKm1fd29yZCAmIG1fbWFzayk7CiAgICAgfQpAQCAtNDY2LDYgKzQ2Niw5IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAorICAgIEZhc3RCaXRSZWZl
cmVuY2UmIG9wZXJhdG9yfD0oYm9vbCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPyAqdGhpcyA9IHZh
bHVlIDogKnRoaXM7IH0KKyAgICBGYXN0Qml0UmVmZXJlbmNlJiBvcGVyYXRvciY9KGJvb2wgdmFs
dWUpIHsgcmV0dXJuIHZhbHVlID8gKnRoaXMgOiAqdGhpcyA9IHZhbHVlOyB9CisKIHByaXZhdGU6
CiAgICAgdWludDMyX3QqIG1fd29yZCB7IG51bGxwdHIgfTsKICAgICB1aW50MzJfdCBtX21hc2sg
eyAwIH07CkBAIC01MTEsNyArNTE0LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fd29y
ZHMuY2xlYXJBbGwoKTsKICAgICB9Ci0gICAgCisKKyAgICAvLyBGb3IgdGVtcGxhdGluZyBhcyBW
ZWN0b3I8Ym9vbD4KKyAgICB2b2lkIGZpbGwoYm9vbCB2YWx1ZSkgeyB2YWx1ZSA/IHNldEFsbCgp
IDogY2xlYXJBbGwoKTsgfQorICAgIHZvaWQgZ3JvdyhzaXplX3QgbmV3U2l6ZSkgeyByZXNpemUo
bmV3U2l6ZSk7IH0KKwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGNsZWFyUmFuZ2Uoc2l6
ZV90IGJlZ2luLCBzaXplX3QgZW5kKTsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29u
dGVudHMgb2YgdGhpcyBiaXR2ZWN0b3IgY2hhbmdlZC4KQEAgLTU5MSw0ICs1OTgsNSBAQCBwdWJs
aWM6CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCit1c2luZyBXVEY6OkZhc3RCaXRSZWZlcmVuY2U7
CiB1c2luZyBXVEY6OkZhc3RCaXRWZWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9V
bmFsaWduZWRBY2Nlc3MuaCBiL1NvdXJjZS9XVEYvd3RmL1VuYWxpZ25lZEFjY2Vzcy5oCmluZGV4
IDVhNGU5ZWY0NDk0ZWY0NmNhOWU0ZWVmNzdmZGNjMGQ2MGZhYTRhMTEuLjNhMzViMzhmNGMwMjM2
NzlhYzdjZmM5YzQ2NTYwODRhMzkxNDgzYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1Vu
YWxpZ25lZEFjY2Vzcy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1VuYWxpZ25lZEFjY2Vzcy5oCkBA
IC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXVEYgewogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4K
IGlubGluZSBUeXBlIHVuYWxpZ25lZExvYWQoY29uc3Qgdm9pZCogcG9pbnRlcikKIHsKLSAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbDxUeXBlPjo6dmFsdWUsICIiKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2NvcHlhYmxlPFR5cGU+Ojp2YWx1ZSwgIiIpOwog
ICAgIFR5cGUgcmVzdWx0IHsgfTsKICAgICBtZW1jcHkoJnJlc3VsdCwgcG9pbnRlciwgc2l6ZW9m
KFR5cGUpKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDMsNyArNDMsNyBAQCBpbmxpbmUgVHlw
ZSB1bmFsaWduZWRMb2FkKGNvbnN0IHZvaWQqIHBvaW50ZXIpCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
eXBlPgogaW5saW5lIHZvaWQgdW5hbGlnbmVkU3RvcmUodm9pZCogcG9pbnRlciwgVHlwZSB2YWx1
ZSkKIHsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbDxUeXBlPjo6dmFsdWUsICIi
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2NvcHlhYmxlPFR5cGU+Ojp2
YWx1ZSwgIiIpOwogICAgIG1lbWNweShwb2ludGVyLCAmdmFsdWUsIHNpemVvZihUeXBlKSk7CiB9
CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBi
ZThlZWY1YjY2NThmNDNkNWIxODMyN2Y4ZTY1YzQ3ZmI2MGE5YzQzLi4xNDVjNmZhMGNiYjUzOGM5
MTg3YzI3OGVkMWY3ZDZlNmI5MGU5MzVmIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysr
IGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwOzk1OzBjMDIwLTAxLTE2ICBL
ZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlbGFuZCBi
eXRlY29kZSBjaGVja3BvaW50cyBzaW5jZSBidWdzIGhhdmUgYmVlbiBmaXhlZAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2MzYxCisKKyAgICAgICAg
VW5yZXZpZXdlZCwgcmVsYW5kLgorCisgICAgICAgIFRoaXMgd2F0Y2ggYnVncyBoYXZlIGJlZW4g
Zml4ZWQgYnkgaHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzI1NDY3NAorCisgICAg
ICAgICogU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0czoKKwogMjAyMC0wMS0xNiAgUGhpbGlw
cGUgTm9ybWFuZCAgPHBoaWxuQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dTdHJlYW1lcl1bV1BF
XSBDbGllbnQtc2lkZSB2aWRlbyByZW5kZXJpbmcgc3VwcG9ydApkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJl
c3MtdGVzdHMKaW5kZXggMTI4OTYwN2I0MWFmOTRlNGE4NmYyOWFkZmMyMTc5YTM2NmZjOGNjMi4u
MDllNGYxN2MyOGIwM2Q3MzFiYzAzMjI4ODIzMDA4YTRmYjI3N2YxMSAxMDA3NTUKLS0tIGEvVG9v
bHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cworKysgYi9Ub29scy9TY3JpcHRzL3J1bi1q
c2Mtc3RyZXNzLXRlc3RzCkBAIC00OTgsNyArNDk4LDYgQEAgTk9fQ0pJVF9PUFRJT05TID0gWyIt
LXVzZUNvbmN1cnJlbnRKSVQ9ZmFsc2UiLCAiLS10aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcD0x
MDAKIEIzTzFfT1BUSU9OUyA9IFsiLS1kZWZhdWx0QjNPcHRMZXZlbD0xIl0KIEIzTzBfT1BUSU9O
UyA9IFsiLS1tYXhERkdOb2Rlc0luQmFzaWNCbG9ja0ZvclByZWNpc2VBbmFseXNpcz0xMDAiLCAi
LS1kZWZhdWx0QjNPcHRMZXZlbD0wIl0KIEZUTF9PUFRJT05TID0gWyItLXVzZUZUTEpJVD10cnVl
Il0KLVBST0JFX09TUl9FWElUX09QVElPTiA9IFsiLS11c2VQcm9iZU9TUkV4aXQ9dHJ1ZSJdCiBG
T1JDRV9MTElOVF9FWElUX09QVElPTlMgPSBbIi0tZm9yY2VPU1JFeGl0VG9MTEludD10cnVlIl0K
IAogcmVxdWlyZV9yZWxhdGl2ZSAid2Via2l0cnVieS9qc2Mtc3RyZXNzLXRlc3Qtd3JpdGVyLSN7
JHRlc3RXcml0ZXJ9IgpAQCAtNzEzLDcgKzcxMiw3IEBAIGRlZiBydW5GVExOb0NKSVRCM08wKCpv
cHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCiBlbmQKIAogZGVmIHJ1bkZUTE5vQ0pJVFZhbGlk
YXRlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAgcnVuKCJmdGwtbm8tY2ppdC12
YWxpZGF0ZS1zYW1wbGluZy1wcm9maWxlciIsICItLXZhbGlkYXRlR3JhcGg9dHJ1ZSIsICItLXVz
ZVNhbXBsaW5nUHJvZmlsZXI9dHJ1ZSIsICItLWFpckZvcmNlSVJDQWxsb2NhdG9yPXRydWUiLCAq
KEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgUFJPQkVfT1NSX0VYSVRfT1BUSU9OICsg
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICBydW4oImZ0bC1uby1jaml0LXZhbGlk
YXRlLXNhbXBsaW5nLXByb2ZpbGVyIiwgIi0tdmFsaWRhdGVHcmFwaD10cnVlIiwgIi0tdXNlU2Ft
cGxpbmdQcm9maWxlcj10cnVlIiwgIi0tYWlyRm9yY2VJUkNBbGxvY2F0b3I9dHJ1ZSIsICooRlRM
X09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMp
KQogZW5kCiAKIGRlZiBydW5GVExOb0NKSVROb1B1dFN0YWNrVmFsaWRhdGUoKm9wdGlvbmFsVGVz
dFNwZWNpZmljT3B0aW9ucykKQEAgLTcyOSw3ICs3MjgsNyBAQCBkZWYgcnVuRlRMTm9DSklUT1NS
VmFsaWRhdGlvbigqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQogZW5kCiAKIGRlZiBydW5E
RkdFYWdlcigqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQotICAgIHJ1bigiZGZnLWVhZ2Vy
IiwgKihFQUdFUl9PUFRJT05TICsgQ09MTEVDVF9DT05USU5VT1VTTFlfT1BUSU9OUyArIFBST0JF
X09TUl9FWElUX09QVElPTiArIEZPUkNFX0xMSU5UX0VYSVRfT1BUSU9OUyArIG9wdGlvbmFsVGVz
dFNwZWNpZmljT3B0aW9ucykpCisgICAgcnVuKCJkZmctZWFnZXIiLCAqKEVBR0VSX09QVElPTlMg
KyBDT0xMRUNUX0NPTlRJTlVPVVNMWV9PUFRJT05TICsgRk9SQ0VfTExJTlRfRVhJVF9PUFRJT05T
ICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCiBkZWYgcnVuREZHRWFnZXJO
b0NKSVRWYWxpZGF0ZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQpkaWZmIC0tZ2l0IGEv
SlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCAxYTBhNTI5NzNlOTIy
Y2RiMDM4OTkwY2Q4ZmJlNTZkYmIyYWE0NmI0Li4zMGU1ODc0NzBlNjRhNTQwYWIwOGZhYWQzNzY2
YWYwMTNjMTZlNDZlIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIwLTAxLTE2ICBLZWl0aCBNaWxsZXIgIDxr
ZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlbGFuZCBieXRlY29kZSBjaGVja3Bv
aW50cyBzaW5jZSBidWdzIGhhdmUgYmVlbiBmaXhlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2MzYxCisKKyAgICAgICAgVW5yZXZpZXdlZCwgcmVs
YW5kLgorCisgICAgICAgIFRoaXMgd2F0Y2ggYnVncyBoYXZlIGJlZW4gZml4ZWQgYnkgaHR0cHM6
Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzI1NDY3NAorCisgICAgICAgICogc3RyZXNzL2Fw
cGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2UtZXhjZXB0aW9ucy1vY2Nhc2lvbmFs
bHkuanM6IEFkZGVkLgorICAgICAgICAoZXhwZWN0ZWRBcmdDb3VudCk6CisgICAgICAgIChjYWxs
ZWUpOgorICAgICAgICAodGVzdCk6CisgICAgICAgIChsZXQuYXJyYXkuZ2V0IGxlbmd0aCk6Cisg
ICAgICAgICogc3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2UuanM6
IEFkZGVkLgorICAgICAgICAoZXhwZWN0ZWRBcmdDb3VudCk6CisgICAgICAgIChjYWxsZWUpOgor
ICAgICAgICAodGVzdCk6CisgICAgICAgIChsZXQuYXJyYXkuZ2V0IGxlbmd0aCk6CisgICAgICAg
ICogc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1hbmQtZXhpdC1zdHJpY3Qu
anM6CisgICAgICAgIChjaGVja0VxdWFsKToKKyAgICAgICAgKiBzdHJlc3MvcmVjdXJzaXZlLXRh
aWwtY2FsbC13aXRoLWRpZmZlcmVudC1hcmd1bWVudC1jb3VudC5qczoKKyAgICAgICAgKiBzdHJl
c3MvcmVzdC12YXJhcmdzLW9zci1leGl0LXRvLWNoZWNrcG9pbnQuanM6IEFkZGVkLgorICAgICAg
ICAoZm9vKToKKyAgICAgICAgKGJhcik6CisKIDIwMjAtMDEtMTYgIE1hcmsgTGFtICA8bWFyay5s
YW1AYXBwbGUuY29tPgogCiAgICAgICAgIG9wZXJhdGlvblRvT2JqZWN0KCkgc2hvdWxkIGNoZWNr
IGZvciBhIG51bGwgZXJyb3JNZXNzYWdlLgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvYXBw
bHktb3NyLWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS1leGNlcHRpb25zLW9jY2FzaW9uYWxs
eS5qcyBiL0pTVGVzdHMvc3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9u
Y2UtZXhjZXB0aW9ucy1vY2Nhc2lvbmFsbHkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjNmMTVhNmViOGMyN2Nj
MGFkMmU5ZjU5NTQxZmZlMmM1MGFjMGEyMwotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3Ry
ZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2UtZXhjZXB0aW9ucy1vY2Nh
c2lvbmFsbHkuanMKQEAgLTAsMCArMSwzNiBAQAorCitsZXQgY3VycmVudEFyZ0NvdW50OworZnVu
Y3Rpb24gZXhwZWN0ZWRBcmdDb3VudCgpIHsKKyAgICByZXR1cm4gY3VycmVudEFyZ0NvdW50Owor
fQorbm9JbmxpbmUoZXhwZWN0ZWRBcmdDb3VudCk7CisKK2Z1bmN0aW9uIGNhbGxlZSgpIHsKKyAg
ICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSBleHBlY3RlZEFyZ0NvdW50KCkpCisgICAgICAgIHRo
cm93IG5ldyBFcnJvcigpOworfQorCitmdW5jdGlvbiB0ZXN0KGFycmF5KSB7CisgICAgY2FsbGVl
LmFwcGx5KHVuZGVmaW5lZCwgYXJyYXkpOworfQorbm9JbmxpbmUodGVzdCk7CisKK2xldCBsZW5n
dGhDYWxscyA9IDA7CitjdXJyZW50QXJnQ291bnQgPSAyOworbGV0IGFycmF5ID0geyAwOiAxLCAx
OiAyLCBnZXQgbGVuZ3RoKCkgeworICAgIGlmIChsZW5ndGhDYWxscysrICUgMTAgPT0gMSkKKyAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJ0aHJvd2luZyBhbiBleGNlcHRpb24gaW4gbGVuZ3RoIik7
CisgICAgcmV0dXJuIGN1cnJlbnRBcmdDb3VudAorfSB9Citmb3IgKGxldCBpID0gMDsgaSA8IDFl
NjsgaSsrKSB7CisgICAgdHJ5IHsKKyAgICAgICAgdGVzdChhcnJheSk7CisgICAgfSBjYXRjaCB7
IH0KK30KKworY3VycmVudEFyZ0NvdW50ID0gMTAwOworbGVuZ3RoQ2FsbHMgPSAwOwordGVzdChh
cnJheSk7CisKK2lmIChsZW5ndGhDYWxscyAhPT0gMSkKKyAgICB0aHJvdyBuZXcgRXJyb3IobGVu
Z3RoQ2FsbHMpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvYXBwbHktb3NyLWV4aXQtc2hv
dWxkLWdldC1sZW5ndGgtb25jZS5qcyBiL0pTVGVzdHMvc3RyZXNzL2FwcGx5LW9zci1leGl0LXNo
b3VsZC1nZXQtbGVuZ3RoLW9uY2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGJlZTQ1Y2UxYzcyODM2NTM4Mjcw
NWQ5OWQzMDFhZTZiY2I4ZDg3YQotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL2Fw
cGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2UuanMKQEAgLTAsMCArMSwzMSBAQAor
CitsZXQgY3VycmVudEFyZ0NvdW50OworZnVuY3Rpb24gZXhwZWN0ZWRBcmdDb3VudCgpIHsKKyAg
ICByZXR1cm4gY3VycmVudEFyZ0NvdW50OworfQorbm9JbmxpbmUoZXhwZWN0ZWRBcmdDb3VudCk7
CisKK2Z1bmN0aW9uIGNhbGxlZSgpIHsKKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSBleHBl
Y3RlZEFyZ0NvdW50KCkpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigpOworfQorCitmdW5jdGlv
biB0ZXN0KGFycmF5KSB7CisgICAgY2FsbGVlLmFwcGx5KHVuZGVmaW5lZCwgYXJyYXkpOworfQor
bm9JbmxpbmUodGVzdCk7CisKK2xldCBsZW5ndGhDYWxscyA9IDA7CitjdXJyZW50QXJnQ291bnQg
PSAyOworbGV0IGFycmF5ID0geyAwOiAxLCAxOiAyLCBnZXQgbGVuZ3RoKCkgeyBsZW5ndGhDYWxs
cysrOyByZXR1cm4gY3VycmVudEFyZ0NvdW50IH0gfQorZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7
IGkrKykKKyAgICB0ZXN0KGFycmF5KTsKKworCit0ZXN0KGFycmF5KTsKK2N1cnJlbnRBcmdDb3Vu
dCA9IDEwMDsKK2xlbmd0aENhbGxzID0gMDsKK3Rlc3QoYXJyYXkpOworCitpZiAobGVuZ3RoQ2Fs
bHMgIT09IDEpCisgICAgdGhyb3cgbmV3IEVycm9yKGxlbmd0aENhbGxzKTsKZGlmZiAtLWdpdCBh
L0pTVGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1hbmQtZXhpdC1z
dHJpY3QuanMgYi9KU1Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwt
YW5kLWV4aXQtc3RyaWN0LmpzCmluZGV4IDM2MThmOGNiYjNkMzIxMTM0MGU2YTA3MjA3MmYxNDNl
NWM0NmMyNDIuLmFhNzMyMzE5MGNmNDlkODhlM2ZmZTkxMmIxZTE2YWE0N2Q1MGY5NGIgMTAwNjQ0
Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1hbmQt
ZXhpdC1zdHJpY3QuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5s
aW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qcwpAQCAtMTgsOCArMTgsOCBAQCBmdW5jdGlvbiBj
aGVja0VxdWFsKGEsIGIpIHsKICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYTog
IiArIGEuYSArICIgdmVyc3VzICIgKyBiLmE7CiAgICAgaWYgKGEuYiAhPSBiLmIpCiAgICAgICAg
IHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGI6ICIgKyBhLmIgKyAiIHZlcnN1cyAiICsgYi5i
OwotICAgIGlmIChhLmMubGVuZ3RoICE9IGIuYy5sZW5ndGgpCi0gICAgICAgIHRocm93ICJFcnJv
cjogYmFkIHZhbHVlIG9mIGMsIGxlbmd0aCBtaXNtYXRjaDogIiArIGEuYyArICIgdmVyc3VzICIg
KyBiLmM7CisgICAgaWYgKGEuYy5sZW5ndGggIT09IGIuYy5sZW5ndGgpCisgICAgICAgIHRocm93
ICJFcnJvcjogYmFkIHZhbHVlIG9mIGMsIGxlbmd0aCBtaXNtYXRjaDogIiArIGEuYy5sZW5ndGgg
KyAiIHZlcnN1cyAiICsgYi5jLmxlbmd0aDsKICAgICBmb3IgKHZhciBpID0gYS5jLmxlbmd0aDsg
aS0tOykgewogICAgICAgICBpZiAoYS5jW2ldICE9IGIuY1tpXSkKICAgICAgICAgICAgIHRocm93
ICJFcnJvcjogYmFkIHZhbHVlIG9mIGMsIG1pc21hdGNoIGF0IGkgPSAiICsgaSArICI6ICIgKyBh
LmMgKyAiIHZlcnN1cyAiICsgYi5jOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvcmVjdXJz
aXZlLXRhaWwtY2FsbC13aXRoLWRpZmZlcmVudC1hcmd1bWVudC1jb3VudC5qcyBiL0pTVGVzdHMv
c3RyZXNzL3JlY3Vyc2l2ZS10YWlsLWNhbGwtd2l0aC1kaWZmZXJlbnQtYXJndW1lbnQtY291bnQu
anMKaW5kZXggMDQ3ZmIwMWY4ODMxNDVjYzc1NTRmNWNmNzAxYTcwNzRmMjY3ZGVlZS4uNTNkNzUy
ZGVjZDdkMGYzMWJjMmYxZDc4OTkxYzY5MTAxZjA4YmZmMyAxMDA2NDQKLS0tIGEvSlNUZXN0cy9z
dHJlc3MvcmVjdXJzaXZlLXRhaWwtY2FsbC13aXRoLWRpZmZlcmVudC1hcmd1bWVudC1jb3VudC5q
cworKysgYi9KU1Rlc3RzL3N0cmVzcy9yZWN1cnNpdmUtdGFpbC1jYWxsLXdpdGgtZGlmZmVyZW50
LWFyZ3VtZW50LWNvdW50LmpzCkBAIC0xOCw4ICsxOCw4IEBAIG5vSW5saW5lKGJhcik7CiBmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKICAgICB2YXIgcmVzdWx0ID0gZm9vKDQwLCAy
KTsKICAgICBpZiAocmVzdWx0ICE9PSA0MikKLSAgICAgICAgdGhyb3cgIldyb25nIHJlc3VsdCBm
b3IgZm9vLCBleHBlY3RlZCA0MiwgZ290ICIgKyByZXN1bHQ7CisgICAgICAgIHRocm93IEVycm9y
KCJXcm9uZyByZXN1bHQgZm9yIGZvbywgZXhwZWN0ZWQgNDIsIGdvdCAiICsgcmVzdWx0KTsKICAg
ICByZXN1bHQgPSBiYXIoNDAsIDIpOwogICAgIGlmIChyZXN1bHQgIT09IDQyKQotICAgICAgICB0
aHJvdyAiV3JvbmcgcmVzdWx0IGZvciBiYXIsIGV4cGVjdGVkIDQyLCBnb3QgIiArIHJlc3VsdDsK
KyAgICAgICAgdGhyb3cgRXJyb3IoIldyb25nIHJlc3VsdCBmb3IgYmFyLCBleHBlY3RlZCA0Miwg
Z290ICIgKyByZXN1bHQpOwogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvcmVzdC12YXJh
cmdzLW9zci1leGl0LXRvLWNoZWNrcG9pbnQuanMgYi9KU1Rlc3RzL3N0cmVzcy9yZXN0LXZhcmFy
Z3Mtb3NyLWV4aXQtdG8tY2hlY2twb2ludC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44N2JhMDU1MWQzZWU5NDhm
MDk0Y2YzODBmOGNlYmZjNjc5OTA0MmRjCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJl
c3MvcmVzdC12YXJhcmdzLW9zci1leGl0LXRvLWNoZWNrcG9pbnQuanMKQEAgLTAsMCArMSwyMSBA
QAorInVzZSBzdHJpY3QiOworCitmdW5jdGlvbiBmb28oYSwgYiwgLi4ucmVzdCkgeworICAgIHJl
dHVybiByZXN0Lmxlbmd0aDsKK30KKworZnVuY3Rpb24gYmFyKGEsIGIsIC4uLnJlc3QpIHsKKyAg
ICByZXR1cm4gZm9vLmNhbGwoLi4ucmVzdCk7Cit9Citub0lubGluZShiYXIpOworCitsZXQgYXJy
YXkgPSBuZXcgQXJyYXkoMTApOworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkgeworICAg
IGxldCByZXN1bHQgPSBiYXIoLi4uYXJyYXkpOworICAgIGlmIChyZXN1bHQgIT09IGFycmF5Lmxl
bmd0aCAtIGJhci5sZW5ndGggLSBmb28ubGVuZ3RoIC0gMSkKKyAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKGkgKyAiICIgKyByZXN1bHQpOworfQorCithcnJheS5sZW5ndGggPSAxMDAwMDsKK2lmIChi
YXIoLi4uYXJyYXkpICE9PSBhcnJheS5sZW5ndGggLSBiYXIubGVuZ3RoIC0gZm9vLmxlbmd0aCAt
IDEpCisgICAgdGhyb3cgbmV3IEVycm9yKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387932</attachid>
            <date>2020-01-16 11:09:08 -0800</date>
            <delta_ts>2020-01-16 13:41:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206361-20200116110903.patch</filename>
            <type>text/plain</type>
            <size>668023</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0NjkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
YzNlYmEwOThlMWU1NjA2MjY2ZGYzNzFiOWUzYzEyY2ZjMWFiOGMwLi41YjBiN2ViZTVjZDljNjg4
NGQwZDM4ZmQzYTk0MTE0Y2ZiM2RiOGFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3ODAgQEAKKzIwMjAtMDEtMTYgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmVsYW5kIGJ5dGVjb2RlIGNoZWNrcG9pbnRzIHNpbmNlIGJ1Z3Mg
aGF2ZSBiZWVuIGZpeGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDYzNjEKKworICAgICAgICBVbnJldmlld2VkLCByZWxhbmQuCisKKyAgICAgICAg
VGhpcyB3YXRjaCBidWdzIGhhdmUgYmVlbiBmaXhlZCBieSBodHRwczovL3RyYWMud2Via2l0Lm9y
Zy9jaGFuZ2VzZXQvMjU0Njc0CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQ29kZVJlZi5oOgorICAgICAgICAqIGFzc2VtYmxlci9Qcm9iZUZyYW1lLmg6Cisg
ICAgICAgIChKU0M6OlByb2JlOjpGcmFtZTo6b3BlcmFuZCk6CisgICAgICAgIChKU0M6OlByb2Jl
OjpGcmFtZTo6c2V0T3BlcmFuZCk6CisgICAgICAgICogYjMvdGVzdGIzLmg6CisgICAgICAgIChw
b3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyk6CisgICAgICAgIChmbG9hdGluZ1BvaW50T3Bl
cmFuZHMpOgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlND
OjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nh
c2VTbmlwcGV0UGFyYW1zLmNwcDoKKyAgICAgICAgKEpTQzo6U2xvd1BhdGhDYWxsR2VuZXJhdG9y
V2l0aEFyZ3VtZW50czo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29k
ZUR1bXBlci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlRHVtcGVyQmFzZTo6ZHVtcFZhbHVl
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpyZWdpc3Rlck5hbWUgY29u
c3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUR1bXBlcjxCbG9jaz46OmNvbnN0YW50TmFtZSBj
b25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkJ5dGVjb2RlRHVtcGVyOjpjb25zdGFudE5hbWUg
Y29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmg6CisgICAgICAgICog
Ynl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6
OmR1bXAgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlSW5kZXguaDoKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6Qnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlSW5kZXg6Om9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6
OmNoZWNrcG9pbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojphc0JpdHMg
Y29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4OjpoYXNoIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlSW5kZXg6OnBhY2spOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojpm
cm9tQml0cyk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiOgorICAgICAgICAq
IGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHA6CisgICAgICAgIChKU0M6OmVu
dW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwpOgorICAgICAgICAoSlNDOjp0bXBMaXZlbmVzc0ZvckNo
ZWNrcG9pbnQpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5o
OgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZlKToKKyAgICAgICAgKEpT
Qzo6dmlydHVhbFJlZ2lzdGVyVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZSk6CisgICAgICAgIChK
U0M6OnZpcnR1YWxSZWdpc3RlcklzTGl2ZSk6CisgICAgICAgIChKU0M6Om9wZXJhbmRJc0Fsd2F5
c0xpdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2
ZUlzTGl2ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Om9wZXJhbmRJc0xpdmUpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJ5dGVjb2Rl
SW5kZXhGb3JFeGl0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjplbnN1cmVDYXRj
aExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXhTbG93KToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjp1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5l
c3MpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6Om51bVRtcHMgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzS25vd25O
b3RJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzVGVtcG9yYXJ5UmVnaXN0
ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvbnN0YW50UmVnaXN0ZXIpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmdldENvbnN0YW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6cmVwbGFjZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjppc1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBi
eXRlY29kZS9Db2RlT3JpZ2luLmg6CisgICAgICAgICogYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2
ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6OnZpcnR1YWxSZWdp
c3RlcklzTGl2ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkZ1bGxCeXRlY29kZUxpdmVuZXNzOjpv
cGVyYW5kSXNMaXZlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVD
YWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpJbmxpbmVDYWxsRnJh
bWUpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OnNldFRtcE9mZnNldCk6CisgICAg
ICAgIChKU0M6OkNvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6Q29kZU9yaWdpbjo6aW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQgY29u
c3QpOgorICAgICAgICAoSlNDOjpyZW1hcE9wZXJhbmQpOgorICAgICAgICAoSlNDOjp1bm1hcE9w
ZXJhbmQpOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjp3YWxrVXBJbmxpbmVTdGFjayk6IERl
bGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaDoKKyAg
ICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6OkxhenlPcGVyYW5kVmFsdWVQ
cm9maWxlS2V5KToKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6Omhh
c2ggY29uc3QpOgorICAgICAgICAoSlNDOjpMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleTo6b3Bl
cmFuZCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZS5jcHA6CisgICAgICAgIChKU0M6Ok1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZy
b21MYXp5T3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGU6OmVtaXRSZXBvcnRWYWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6Ok1ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGU6OnJlcG9ydFZhbHVlKToKKyAgICAgICAgKiBieXRlY29kZS9NZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlLmg6CisgICAgICAgICogYnl0ZWNvZGUvT3BlcmFuZHMuaDoK
KyAgICAgICAgKEpTQzo6T3BlcmFuZDo6T3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6
OnRtcCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmtpbmQgY29uc3QpOgorICAgICAgICAoSlND
OjpPcGVyYW5kOjp2YWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OnZpcnR1YWxS
ZWdpc3RlciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmFzQml0cyBjb25zdCk6Cisg
ICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzVG1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFu
ZDo6aXNBcmd1bWVudCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzTG9jYWwgY29u
c3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjppc0hlYWRlciBjb25zdCk6CisgICAgICAgIChK
U0M6Ok9wZXJhbmQ6OmlzQ29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjp0
b0FyZ3VtZW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6dG9Mb2NhbCBjb25zdCk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoSlND
OjpPcGVyYW5kOjppc1ZhbGlkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6ZnJvbUJp
dHMpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6T3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpP
cGVyYW5kczo6bnVtYmVyT2ZMb2NhbHMgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6
bnVtYmVyT2ZUbXBzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnRtcEluZGV4IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmFyZ3VtZW50SW5kZXggY29uc3QpOgorICAg
ICAgICAoSlNDOjpPcGVyYW5kczo6bG9jYWxJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzOjp0bXApOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6dG1wIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6T3BlcmFuZHM6OmFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmFy
Z3VtZW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmxvY2FsKToKKyAgICAgICAg
KEpTQzo6T3BlcmFuZHM6OmxvY2FsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnNp
emVGb3IgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXRGb3IpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kczo6YXRGb3IgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6ZW5z
dXJlTG9jYWxzKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmVuc3VyZVRtcHMpOgorICAgICAg
ICAoSlNDOjpPcGVyYW5kczo6Z2V0Rm9yT3BlcmFuZEluZGV4KToKKyAgICAgICAgKEpTQzo6T3Bl
cmFuZHM6OmdldEZvck9wZXJhbmRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRz
OjpvcGVyYW5kSW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmFuZCk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
T3BlcmFuZHM6Omhhc09wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2V0
T3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdCBjb25zdCk6CisgICAgICAgIChK
U0M6Ok9wZXJhbmRzOjphdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYXRvcltdIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhdG9yW10pOgorICAgICAgICAoSlND
OjpPcGVyYW5kczo6b3BlcmFuZEZvckluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFu
ZHM6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6aXNBcmd1bWVu
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjppc0xvY2FsIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnZpcnR1YWxSZWdpc3RlckZvcklu
ZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnNldE9wZXJhbmRG
aXJzdFRpbWUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5o
OgorICAgICAgICAoSlNDOjpPcGVyYW5kOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3Bl
cmFuZHM8VD46OmR1bXBJbkNvbnRleHQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczxU
Pjo6ZHVtcCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3Bw
OgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2spOgor
ICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjpoYXNDaGVja3BvaW50cyBjb25zdCk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjpzZXRIYXNDaGVja3BvaW50cyk6CisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrOjpjb25zdGFudFJlZ2lzdGVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6OmdldENvbnN0YW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2s6OmlzQ29uc3RhbnRSZWdpc3RlckluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBieXRlY29kZS9WYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyOjpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXJCdWZmZXIpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJC
dWZmZXI6On5WYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIpOgorICAgICAgICAo
SlNDOjpWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyOjpWYWx1ZVByb2ZpbGVBbmRPcGVyYW5k
QnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1
ZmZlcjo6flZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyOjpmb3JFYWNoKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcDoKKyAgICAgICAgKEpTQzo6VmFsdWVS
ZWNvdmVyeTo6cmVjb3ZlciBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvVmFsdWVSZWNvdmVy
eS5oOgorICAgICAgICAqIGJ5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oOgorICAgICAgICAoSlND
Ojp2aXJ0dWFsUmVnaXN0ZXJJc0xvY2FsKToKKyAgICAgICAgKEpTQzo6dmlydHVhbFJlZ2lzdGVy
SXNBcmd1bWVudCk6CisgICAgICAgIChKU0M6OlZpcnR1YWxSZWdpc3Rlcjo6VmlydHVhbFJlZ2lz
dGVyKToKKyAgICAgICAgKEpTQzo6VmlydHVhbFJlZ2lzdGVyOjppc1ZhbGlkIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6VmlydHVhbFJlZ2lzdGVyOjppc0xvY2FsIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6VmlydHVhbFJlZ2lzdGVyOjppc0FyZ3VtZW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Vmly
dHVhbFJlZ2lzdGVyOjppc0NvbnN0YW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6VmlydHVhbFJl
Z2lzdGVyOjp0b0NvbnN0YW50SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpvcGVyYW5kSXNM
b2NhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Om9wZXJhbmRJc0FyZ3VtZW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZU5leHRQYXJhbWV0ZXIpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZVBhcmFtZXRlcnMpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVxdWFsaXR5T3BJbXBsKToKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsVmFyYXJncyk6CisgICAgICAgICog
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjpzZXRVc2VzQ2hlY2twb2ludHMpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9S
ZWdpc3RlcklELmg6CisgICAgICAgIChKU0M6OlJlZ2lzdGVySUQ6OnNldEluZGV4KToKKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RIZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dEhlYXA6OlBheWxvYWQ6OmR1bXBBc09wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0SGVhcDo6ZHVtcCBjb25zdCk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SGVh
cC5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6UGF5bG9hZDo6UGF5bG9hZCk6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpBYnN0cmFjdEhlYXApOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6b3BlcmFuZCBjb25zdCk6CisgICAgICAgICogZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAg
ICAgICAgKiBkZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oOgorICAgICAgICAoSlNDOjpERkc6OkFy
Z3VtZW50UG9zaXRpb246OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNFbGltaW5h
dGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjphcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KToKKyAgICAgICAg
KEpTQzo6REZHOjplbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgpOgorICAgICAgICAq
IGRmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuaDoKKyAgICAgICAgKiBkZmcvREZHQXRUYWlsQWJz
dHJhY3RTdGF0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6Om9w
ZXJhbmQpOgorICAgICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6cHJ1bmVCeUxpdmVuZXNzKToKKyAgICAgICAgKiBk
ZmcvREZHQXZhaWxhYmlsaXR5TWFwLmg6CisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5
TWFwOjpjbG9zZVN0YXJ0aW5nV2l0aExvY2FsKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6QmFzaWNCbG9jayk6CisgICAg
ICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6ZW5zdXJlVG1wcyk6CisgICAgICAgICogZGZnL0RG
R0Jhc2ljQmxvY2suaDoKKyAgICAgICAgKiBkZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQpOgorICAgICAgICAq
IGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OkJ5dGVDb2RlUGFyc2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6ZW5zdXJlVG1wcyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnByb2dy
ZXNzVG9OZXh0Q2hlY2twb2ludCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
Om5ld1ZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OmdldERpcmVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldCk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNldERpcmVjdCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24p
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRMb2NhbE9yVG1wKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0TG9jYWxPclRtcCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNldEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6ZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JMb2NhbCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZpbmRBcmd1bWVudFBvc2l0aW9uKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Zmx1c2hJbXBsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Zmx1c2hGb3JUZXJtaW5hbEltcGwpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OmZsdXNoRGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6YWRkRmx1c2hPclBoYW50b21Mb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OnBoYW50b21Mb2NhbERpcmVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmZsdXNoRm9yVGVybWluYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjphZGRUb0dyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
SW5saW5lU3RhY2tFbnRyeTo6cmVtYXBPcGVyYW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6RGVsYXllZFNldExvY2FsOjpEZWxheWVkU2V0TG9jYWwpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpEZWxheWVkU2V0TG9jYWw6OmV4ZWN1dGUp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVRhcmdldGFibGVC
bG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVW50YXJn
ZXRhYmxlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVS
ZWN1cnNpdmVUYWlsQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Omlu
bGluZUNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJh
cmdzSW5saW5pbmcpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJ
bmxpbmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJ
bmxpbmVTdGFja0VudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFy
c2UpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRMb2NhbCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNldExvY2FsKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNG
QVBoYXNlOjppbmplY3RPU1IpOgorICAgICAgICAqIGRmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDUFNSZXRocmVhZGluZ1BoYXNlOjpydW4pOgorICAg
ICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUdldExvY2Fs
KToKKyAgICAgICAgKEpTQzo6REZHOjpDUFNSZXRocmVhZGluZ1BoYXNlOjpjYW5vbmljYWxpemVG
bHVzaE9yUGhhbnRvbUxvY2FsRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDUFNSZXRocmVhZGlu
Z1BoYXNlOjpjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsKToKKyAgICAgICAgKEpTQzo6
REZHOjpDUFNSZXRocmVhZGluZ1BoYXNlOjpjYW5vbmljYWxpemVTZXQpOgorICAgICAgICAoSlND
OjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2spOgor
ICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OnByb3BhZ2F0ZVBoaXMpOgor
ICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OnBoaVN0YWNrRm9yKToKKyAg
ICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAgICog
ZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAg
ICAgICAgKiBkZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
YWRkQnl0ZWNvZGVMaXZlbmVzcyk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkNvbW1vbkRhdGE6OmFkZENvZGVPcmlnaW4pOgorICAgICAgICAo
SlNDOjpERkc6OkNvbW1vbkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgpOgorICAgICAgICAo
SlNDOjpERkc6OkNvbW1vbkRhdGE6Omxhc3RDYWxsU2l0ZSBjb25zdCk6CisgICAgICAgICogZGZn
L0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFu
dEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlSW1wbCk6CisgICAgICAgICogZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9k
ZSk6CisgICAgICAgICogZGZnL0RGR0ZvckFsbEtpbGxzLmg6CisgICAgICAgIChKU0M6OkRGRzo6
Zm9yQWxsS2lsbGVkT3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxlZE5v
ZGVzQXROb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxzSW5CbG9jayk6
CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXBCbG9ja0hlYWRlcik6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbCk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
Ojpsb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjptZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6bG9jYWxzTGl2ZUluQnl0ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdH
cmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmb3JBbGxMb2NhbHNBbmRUbXBzTGl2
ZUluQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmb3JBbGxMaXZlSW5CeXRl
Y29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmZvckFsbExvY2Fsc0xpdmVJbkJ5dGVj
b2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpJblBsYWNlQWJzdHJh
Y3RTdGF0ZSk6CisgICAgICAgICogZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6Om9wZXJhbmQpOgorICAgICAgICAq
IGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6
OmxpbmtPU1JFeGl0cyk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZU9T
UkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpKSVRDb21waWxlcjo6ZW1pdFN0b3JlQ2FsbFNpdGVJbmRleCk6CisgICAgICAgICogZGZn
L0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkxpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2U6OmlzVmFsaWRGbHVzaExv
Y2F0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlv
blBoYXNlOjpoYW5kbGVCbG9ja0ZvclRyeUNhdGNoKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZl
Q2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlOjpuZXdWYXJpYWJsZUFjY2Vzc0RhdGEpOgor
ICAgICAgICAqIGRmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcv
REZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OlN0YWNrQWNjZXNzRGF0YTo6U3RhY2tBY2Nl
c3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcmd1bWVudHNDaGlsZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6YXJndW1lbnRzQ2hpbGQpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6Om9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1VubGlua2Vk
T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dW5saW5rZWRPcGVyYW5kKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNMb2FkVmFyYXJnc0RhdGEpOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6OmxvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpo
YXNVbmxpbmtlZExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp1bmxp
bmtlZExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAg
ICAgKiBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZTo6cnVuKToKKyAgICAgICAgKEpT
Qzo6REZHOjpMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKToKKyAg
ICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVP
U1JFbnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkpOgorICAg
ICAgICAqIGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZn
L0RGR09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmVtaXRSZXN0b3Jl
QXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhpdCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6anNWYWx1ZUZvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRG
Rzo6cmVzdG9yZUNhbGxlZVNhdmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpz
YXZlQ2FsbGVlU2F2ZXNGb3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlc3RvcmVD
YWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6c2F2ZU9yQ29weUNhbGxlZVNh
dmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVEaXJlY3RBcmd1bWVu
dHNEdXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjcmVhdGVDbG9uZWRB
cmd1bWVudHNEdXJpbmdFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjplbWl0UmVz
dG9yZUFyZ3VtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6ZXhl
Y3V0ZU9TUkV4aXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5saW5lZENh
bGxGcmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEFuZEp1bXBUb1Rh
cmdldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6cHJpbnRPU1JFeGl0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0
QmFzZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjppc0V4aXRpbmdUb0NoZWNr
cG9pbnRIYW5kbGVyIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAgIChK
U0M6OkRGRzo6cmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyk6CisgICAgICAgIChKU0M6OkRGRzo6YWRq
dXN0QW5kSnVtcFRvVGFyZ2V0KToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR09wSW5mby5oOgorICAgICAgICAoSlND
OjpERkc6Ok9wSW5mbzo6T3BJbmZvKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6
CisgICAgICAgICogZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHA6CisgICAgICAgICog
ZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVj
aXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6cmVhZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJl
Y2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OndyaXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpQ
cmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6ZGVmKToKKyAgICAgICAgKEpTQzo6REZHOjpQ
cmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6Y2FsbElmQXBwcm9wcmlhdGUpOgorICAgICAg
ICAqIGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlByZWRpY3Rpb25JbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQdXRTdGFja1Np
bmtpbmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpydW4pOgorICAgICAgICAq
IGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0
ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhcmFyZ3NMZW5ndGgpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRm9yd2FyZFZhcmFyZ3MpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6cmVjb3JkU2V0TG9jYWwpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAg
ICAgKiBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Rh
Y2tMYXlvdXRQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpTdGFja0xheW91dFBoYXNl
Ojphc3NpZ24pOgorICAgICAgICAqIGRmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTdHJlbmd0aFJlZHVjdGlvblBoYXNlOjpoYW5kbGVOb2RlKToK
KyAgICAgICAgKiBkZmcvREZHVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpvc3JFeGl0
VGh1bmtHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdUaHVua3MuaDoKKyAg
ICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpU
eXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjpkaXNhYmxlSG9pc3RpbmdBY3Jvc3NPU1JFbnRyaWVzKToK
KyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAqIGRmZy9ERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRh
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNj
ZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpzaG91bGRV
c2VEb3VibGVGb3JtYXRBY2NvcmRpbmdUb1ZvdGUpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlh
YmxlQWNjZXNzRGF0YTo6dGFsbHlWb3Rlc0ZvclNob3VsZFVzZURvdWJsZUZvcm1hdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpjb3VsZFJlcHJlc2VudEludDUySW1w
bCk6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oOgorICAgICAgICAoSlND
OjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6b3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6
VmFyaWFibGVBY2Nlc3NEYXRhOjpsb2NhbCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1Zh
cmlhYmxlRXZlbnQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OmR1bXAg
Y29uc3QpOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50Lmg6CisgICAgICAgIChKU0M6
OkRGRzo6VmFyaWFibGVFdmVudDo6c3BpbGwpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxl
RXZlbnQ6OnNldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50Ojptb3ZI
aW50KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpzcGlsbFJlZ2lzdGVyIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpvcGVyYW5kIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpieXRlY29kZVJlZ2lzdGVyIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudFN0cmVhbTo6bG9nRXZlbnQpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0IGNvbnN0KToKKyAg
ICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oOgorICAgICAgICAoSlNDOjpERkc6
OlZhcmlhYmxlRXZlbnRTdHJlYW06OmFwcGVuZEFuZExvZyk6CisgICAgICAgICogZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAg
ICogZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Rm9y
T1NSRW50cnlKSVRDb2RlOjpGb3JPU1JFbnRyeUpJVENvZGUpOgorICAgICAgICAqIGZ0bC9GVExM
b3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjps
b3dlcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2Rl
KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUV4dHJhY3RP
U1JFbnRyeUxvY2FsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29t
cGlsZUdldFN0YWNrKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29t
cGlsZUdldENhbGxlZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNv
bXBpbGVTZXRDYWxsZWUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlU2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlVmFyYXJnc0xlbmd0aCk6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVMb2FkVmFyYXJncyk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVGb3J3YXJkVmFyYXJncyk6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmdldFNwcmVhZExlbmd0aEZyb21Jbmxp
bmVDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6Y29tcGlsZUxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZSk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmdldEFyZ3VtZW50c0xlbmd0aCk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmdldEN1cnJlbnRDYWxsZWUpOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjYWxsUHJlZmxpZ2h0KToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YXBwZW5kT1NSRXhpdERlc2NyaXB0b3IpOgor
ICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpidWlsZEV4aXRBcmd1bWVudHMp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphZGRyZXNzRm9yKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6cGF5bG9hZEZvcik6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OnRhZ0Zvcik6CisgICAgICAgICogZnRsL0ZU
TE9TUkVudHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpwcmVwYXJlT1NSRW50cnkpOgorICAg
ICAgICAqIGZ0bC9GVExPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0RGVz
Y3JpcHRvcjo6T1NSRXhpdERlc2NyaXB0b3IpOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Lmg6
CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6Y29tcGlsZVN0dWIpOgorICAgICAgICAqIGZ0bC9GVExPcGVyYXRpb25zLmNwcDoKKyAgICAg
ICAgKEpTQzo6RlRMOjpvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKToKKyAgICAgICAg
KiBmdGwvRlRMT3V0cHV0LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OnNlbGVjdCk6
CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5oOgorICAgICAgICAqIGZ0bC9GVExTZWxlY3RQcmVk
aWN0YWJpbGl0eS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZv
ck9TUkVudHJ5SklUQ29kZS5jcHAuCisgICAgICAgICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oOgor
ICAgICAgICAoSlNDOjpGVEw6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGdlbmVyYXRvci9D
aGVja3BvaW50cy5yYjogQWRkZWQuCisgICAgICAgICogZ2VuZXJhdG9yL09wY29kZS5yYjoKKyAg
ICAgICAgKiBnZW5lcmF0b3IvU2VjdGlvbi5yYjoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgor
ICAgICAgICAoSlNDOjpIZWFwOjpnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMpOgorICAgICAgICAq
IGludGVycHJldGVyL0NhbGxGcmFtZS5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2Fs
bFNpdGVBc1Jhd0JpdHMgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuc2FmZUNh
bGxTaXRlQXNSYXdCaXRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpjYWxsU2l0
ZUluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjp1bnNhZmVDYWxsU2l0ZUlu
ZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpzZXRDdXJyZW50VlBDKToKKyAg
ICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpieXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjpjb2RlT3JpZ2luKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoK
KyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Q2FsbFNpdGVJbmRleCk6CisgICAgICAgIChK
U0M6OkNhbGxTaXRlSW5kZXg6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSlNDOjpD
YWxsU2l0ZUluZGV4OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJ
bmRleDo6Yml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6OmZyb21CaXRz
KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Ynl0ZWNvZGVJbmRleCBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkRpc3Bvc2FibGVDYWxsU2l0ZUluZGV4OjpEaXNwb3NhYmxlQ2FsbFNpdGVJ
bmRleCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbGVlIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6Q2FsbEZyYW1lOjp1bnNhZmVDYWxsZWUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWU6OmFkZHJlc3NPZkNvZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFt
ZTo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWU6Om9mZnNldEZvcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0QXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldFJldHVyblBD
KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6OkNhbGxGcmFtZTo6cik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5jaGVja2VkUik6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUgY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmpzQ2FsbGVlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Q2FsbEZyYW1lOjpjb2RlQmxvY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
OnVuc2FmZUNvZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0Q2Fs
bGVlKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpzZXRDb2RlQmxvY2spOgorICAgICAgICAq
IGludGVycHJldGVyL0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmguCisgICAgICAgICogaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpldmFsKToKKyAgICAgICAgKEpTQzo6
c2l6ZU9mVmFyYXJncyk6CisgICAgICAgIChKU0M6OmxvYWRWYXJhcmdzKToKKyAgICAgICAgKEpT
Qzo6c2V0dXBWYXJhcmdzRnJhbWUpOgorICAgICAgICAoSlNDOjpVbndpbmRGdW5jdG9yOjpvcGVy
YXRvcigpIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKToK
KyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QpOgorICAgICAgICAq
IGludGVycHJldGVyL0ludGVycHJldGVyLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tW
aXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpyZWFkSW5saW5lZEZyYW1l
KToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2Vt
Ymx5SGVscGVyczo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIpOgorICAgICAgICAoSlND
OjpBc3NlbWJseUhlbHBlcnM6OmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyMzIpOgorICAgICAg
ICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyNjQpOgor
ICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcik6
CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVy
QmVmb3JlUHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRQdXRQ
YXlsb2FkVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkFz
c2VtYmx5SGVscGVyczo6ZW1pdFB1dFRhZ1RvQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJvbG9ndWUp
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IpOgorICAgICAgICAo
SlNDOjpBc3NlbWJseUhlbHBlcnM6OnRhZ0Zvcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6cGF5bG9hZEZvcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y2FsbGVl
RnJhbWVTbG90KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVBcmd1bWVu
dFNsb3QpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhbGxlZUZyYW1lVGFnU2xv
dCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y2FsbGVlRnJhbWVQYXlsb2FkU2xv
dCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y2FsbGVlRnJhbWVDYWxsZXJGcmFt
ZSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YXJndW1lbnRDb3VudCk6CisgICAg
ICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1l
U2h1ZmZsZXI6OkNhbGxGcmFtZVNodWZmbGVyKToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1lU2h1
ZmZsZXIuaDoKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OnNldENhbGxlZUpTVmFs
dWVSZWdzKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmFzc3VtZUNhbGxlZUlz
Q2VsbCk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRBcml0aG1ldGlj
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Vuc2lnbmVkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wSW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlVW5zaWdu
ZWRBbmRKdW1wKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1
bXBJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luYyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfbW9kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9iaXRub3QpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNG
YXN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TWF0aElDU2xvdyk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9kaXYpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0UHV0Q2FsbFJlc3VsdCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGls
ZVNldHVwRnJhbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAg
ICAqIGppdC9KSVRFeGNlcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1Vud2luZCk6
CisgICAgICAgICogaml0L0pJVElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SklUOjppc09wZXJh
bmRDb25zdGFudERvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5k
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVz
dWx0KToKKyAgICAgICAgKEpTQzo6SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rU2xvd0Nh
c2VJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFy
KToKKyAgICAgICAgKEpTQzo6SklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmdldE9wZXJhbmRDb25zdGFudERvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdEluaXRSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWRUYWcpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRMb2FkUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dEdldCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdExvYWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRMb2FkMik6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWREb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRMb2FkSW50MzJUb0RvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFN0b3JlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmVJbnQzMik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFN0b3JlQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFN0b3JlQm9vbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFN0b3JlRG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENv
bnN0YW50SW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVycyk6CisgICAgICAgICog
aml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbW92KToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VuZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9uZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9p
c19lbXB0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9pc19udW1iZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5
cGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3JldCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19wcmlt
aXRpdmUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfbm90KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2pmYWxzZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXFfbnVsbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pu
dW5kZWZpbmVkX29yX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9wdHIp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfamVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2p0cnVlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX25lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVx
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93KToKKyAgICAgICAgKEpTQzo6SklU
Ojpjb21waWxlT3BTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wU3RyaWN0
RXFKdW1wKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX251bWJlcik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1lcmljKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RvX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19vYmplY3QpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZ2V0X3BhcmVudF9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0
Y2hfaW1tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9jaGFyKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXFfbnVsbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnRlcik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9nZXRfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fdGhpcyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9jaGVja190ZHopOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2VxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9uZXEpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX25ld19yZWdleHApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXROZXdGdW5jQ29t
bW9uKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24pOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX25ld19hcnJheV93aXRoX3NpemUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFz
X3N0cnVjdHVyZV9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfaW5k
ZXhlZF9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4
ZWRfcHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFt
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFt
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9hcmd1bWVudF9jb3VudCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9nZXRfcmVzdF9sZW5ndGgpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3Vt
ZW50KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFB1dEJ5VmFsV2l0aENhY2hlZElkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9w
dXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9k
ZWxfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2dldF9ieV9pZF9kaXJlY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF9kaXJlY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9wdXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5fYnlfaWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0UmVzb2x2ZUNsb3N1cmUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmVzb2x2
ZV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2sp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9nZXRfZnJvbV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2JhbFZh
cmlhYmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVj
dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENsb3N1cmVWYXIpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2dldF9mcm9tX2FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9f
YXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0V3JpdGVCYXJyaWVyKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRJbnRUeXBlZEFycmF5UHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRGbG9hdFR5
cGVkQXJyYXlQdXRCeVZhbCk6CisgICAgICAgICogaml0L0pTSW50ZXJmYWNlSklULmg6CisgICAg
ICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEpTQ2VsbCk6CisgICAgICAgIChKU0M6
OkpTSW50ZXJmYWNlSklUOjplbWl0SnVtcElmTm90SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SlNJ
bnRlcmZhY2VKSVQ6OmVtaXRMb2FkSW50MzIpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJ
VDo6ZW1pdExvYWREb3VibGUpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdEdl
dEZyb21DYWxsRnJhbWVIZWFkZXJQdHIpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6
ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6
OmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIpOgorICAgICAgICAqIGppdC9TZXR1cFZhcmFy
Z3NGcmFtZS5jcHA6CisgICAgICAgIChKU0M6OmVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNl
KToKKyAgICAgICAgKiBqaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oOgorICAgICAgICAoSlNDOjpT
cGVjaWFsaXplZFRodW5rSklUOjpsb2FkRG91YmxlQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpT
cGVjaWFsaXplZFRodW5rSklUOjpsb2FkQ2VsbEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6U3Bl
Y2lhbGl6ZWRUaHVua0pJVDo6bG9hZEludDMyQXJndW1lbnQpOgorICAgICAgICAqIGppdC9UaHVu
a0dlbmVyYXRvcnMuY3BwOgorICAgICAgICAoSlNDOjphYnNUaHVua0dlbmVyYXRvcik6CisgICAg
ICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6Z2V0
Tm9uQ29uc3RhbnRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldE9wZXJhbmQpOgor
ICAgICAgICAoSlNDOjpMTEludDo6Z2VuZXJpY0NhbGwpOgorICAgICAgICAoSlNDOjpMTEludDo6
dmFyYXJnc1NldHVwKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmNvbW1vbkNhbGxFdmFsKToKKyAg
ICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKEpTQzo6
TExJbnQ6OmhhbmRsZVZhcmFyZ3NDaGVja3BvaW50KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmRp
c3BhdGNoVG9OZXh0SW5zdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpMTEludDo6c2xvd19wYXRo
X2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwpOgorICAgICAgICAoSlNDOjpM
TEludDo6c2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQpOgorICAgICAgICAoSlNDOjpMTElu
dDo6bGxpbnRfdGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IpOgorICAgICAgICAqIGxsaW50L0xM
SW50U2xvd1BhdGhzLmg6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206
CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAg
KiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQXJn
TGlzdC5oOgorICAgICAgICAoSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6ZmlsbCk6CisgICAg
ICAgICogcnVudGltZS9DYWNoZWRUeXBlcy5jcHA6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVC
bG9jazo6aGFzQ2hlY2twb2ludHMgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVC
bG9jazo6VW5saW5rZWRDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s8
Q29kZUJsb2NrVHlwZT46OmVuY29kZSk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0
aHMuY3BwOgorICAgICAgICAoSlNDOjpTTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogcnVudGlt
ZS9Db25zdHJ1Y3REYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0KToKKyAgICAgICAg
KiBydW50aW1lL0NvbnN0cnVjdERhdGEuaDoKKyAgICAgICAgKiBydW50aW1lL0RpcmVjdEFyZ3Vt
ZW50cy5jcHA6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRz
KToKKyAgICAgICAgKiBydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oOgorICAgICAgICAqIHJ1bnRp
bWUvR2VuZXJpY0FyZ3VtZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUvR2VuZXJpY0FyZ3VtZW50
c0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Y29weVRv
QXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlND
OjpKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5o
OgorICAgICAgICAqIHJ1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwOgorICAgICAgICAo
SlNDOjpKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRzKToKKyAgICAgICAgKiBy
dW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5Lmg6CisgICAgICAgICogcnVudGltZS9KU0xvY2su
Y3BwOgorICAgICAgICAoSlNDOjpKU0xvY2s6OndpbGxSZWxlYXNlTG9jayk6CisgICAgICAgICog
cnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6Ok1vZHVs
ZVByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5j
cHA6CisgICAgICAgIChKU0M6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMpOgorICAgICAgICAq
IHJ1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6U2NvcGVkQXJndW1l
bnRzOjpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvU2NvcGVkQXJndW1lbnRz
Lmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpzY2FuU2lk
ZVN0YXRlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Vk06OmFkZENoZWNrcG9pbnRPU1JTaWRlU3Rh
dGUpOgorICAgICAgICAoSlNDOjpWTTo6ZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06Omhhc0NoZWNrcG9pbnRPU1JT
aWRlU3RhdGUgY29uc3QpOgorICAgICAgICAqIHRvb2xzL1ZNSW5zcGVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6Vk1JbnNwZWN0b3I6OmR1bXBSZWdpc3RlcnMpOgorICAgICAgICAqIHdhc20vV2Fz
bUZ1bmN0aW9uQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uQ29kZUJs
b2NrOjpnZXRDb25zdGFudCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uQ29k
ZUJsb2NrOjpnZXRDb25zdGFudFR5cGUgY29uc3QpOgorICAgICAgICAqIHdhc20vV2FzbUxMSW50
R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OnNldFVz
ZXNDaGVja3BvaW50cyBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHA6
CisgICAgICAgIChKU0M6Oldhc206Om9wZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9uKToKKyAgICAg
ICAgKiB3YXNtL1dhc21TbG93UGF0aHMuY3BwOgorCiAyMDIwLTAxLTE2ICBKb25hdGhhbiBCZWRh
cmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBQYXNzIEpTVG9rZW4gYnkgY29uc3Qg
cmVmZXJlbmNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCmluZGV4IDczZjQ5YWE4YzMxMDUwZGUyNWI3ODIyNTE4ZmE4YjEyNWM4Y2E1NmIu
LjdiYzRlMjUzYjRkYjA1ZjhlYzAzN2QwZDE5NGQ3MTAwMWE3NWM3OWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjkgQEAKKzIwMjAtMDEtMTYgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+
CisKKyAgICAgICAgUmVsYW5kIGJ5dGVjb2RlIGNoZWNrcG9pbnRzIHNpbmNlIGJ1Z3MgaGF2ZSBi
ZWVuIGZpeGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMDYzNjEKKworICAgICAgICBVbnJldmlld2VkLCByZWxhbmQuCisKKyAgICAgICAgVGhpcyB3
YXRjaCBidWdzIGhhdmUgYmVlbiBmaXhlZCBieSBodHRwczovL3RyYWMud2Via2l0Lm9yZy9jaGFu
Z2VzZXQvMjU0Njc0CisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiB3dGYvQml0bWFwLmg6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6aW52ZXJ0
KToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+OjpvcGVyYXRvcik6CisgICAgICAgIChXVEY6Oldv
cmRUeXBlPjo6b3BlcmF0b3IgY29uc3QgY29uc3QpOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3Rz
LnR4dDoKKyAgICAgICAgKiB3dGYvRW51bUNsYXNzT3BlcmF0b3JPdmVybG9hZHMuaDogQWRkZWQu
CisgICAgICAgICogd3RmL0Zhc3RCaXRWZWN0b3IuaDoKKyAgICAgICAgKFdURjo6RmFzdEJpdFJl
ZmVyZW5jZTo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChXVEY6OkZhc3RCaXRSZWZl
cmVuY2U6Om9wZXJhdG9yfD0pOgorICAgICAgICAoV1RGOjpGYXN0Qml0UmVmZXJlbmNlOjpvcGVy
YXRvciY9KToKKyAgICAgICAgKFdURjo6RmFzdEJpdFZlY3Rvcjo6ZmlsbCk6CisgICAgICAgIChX
VEY6OkZhc3RCaXRWZWN0b3I6Omdyb3cpOgorICAgICAgICAqIHd0Zi9VbmFsaWduZWRBY2Nlc3Mu
aDoKKyAgICAgICAgKFdURjo6dW5hbGlnbmVkTG9hZCk6CisgICAgICAgIChXVEY6OnVuYWxpZ25l
ZFN0b3JlKToKKwogMjAyMC0wMS0xNiAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5j
b20+CiAKICAgICAgICAgW1dpbl0gRml4IEFwcGxlV2luIGJ1aWxkCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQKaW5kZXggYjkxN2JjNTg5MDY5NzVhMzQ3ZWVmMWE3YzVhNmJmMDVhOWM1
NGI2Yi4uOTFlNDI3YzMwYzUxMTYzZWRkOWYxMDZkNDJmOTVlMDlkMDJiZTljNCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNTI2LDYgKzUyNiw3IEBAIHNldChKYXZhU2Ny
aXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgYnl0ZWNvZGUvT2JqZWN0UHJv
cGVydHlDb25kaXRpb24uaAogICAgIGJ5dGVjb2RlL09wY29kZS5oCiAgICAgYnl0ZWNvZGUvT3Bj
b2RlU2l6ZS5oCisgICAgYnl0ZWNvZGUvT3BlcmFuZHMuaAogICAgIGJ5dGVjb2RlL1Byb3BlcnR5
Q29uZGl0aW9uLmgKICAgICBieXRlY29kZS9QdXRCeUlkRmxhZ3MuaAogICAgIGJ5dGVjb2RlL1Nw
ZWN1bGF0ZWRUeXBlLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVk
U291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRT
b3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggZjhjMWI0YWU1NTZiNTM0YzJhYjEwMWFjMzkw
YmE3MTFiNDVjYmFlYS4uOWVhZDY1M2ZhYWFiMTg5M2ViOTJkZDAyZTk3NTc5NjZkZmE5OWFjNCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0Lnhj
ZmlsZWxpc3QKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0
LnhjZmlsZWxpc3QKQEAgLTY0LDYgKzY0LDcgQEAgJChQUk9KRUNUX0RJUikvZGlzYXNzZW1ibGVy
L3VkaXM4Ni9vcHRhYmxlLnhtbAogJChQUk9KRUNUX0RJUikvZGlzYXNzZW1ibGVyL3VkaXM4Ni91
ZF9pdGFiLnB5CiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvQXJndW1lbnQucmIKICQoUFJPSkVD
VF9ESVIpL2dlbmVyYXRvci9Bc3NlcnRpb24ucmIKKyQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9D
aGVja3BvaW50cy5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9yL0RTTC5yYgogJChQUk9KRUNU
X0RJUikvZ2VuZXJhdG9yL0ZpdHMucmIKICQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9HZW5lcmF0
ZWRGaWxlLnJiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDM5NDBmMWQzNGMzNGQ5
YTAzYjUxZGNiNWNjOTU5MjRhNWM3MWI5ZDguLjY2ZjkzNWRkYjE5MjllY2EzMmQ2ZmNlMTEyYjM5
MTE2NjEyNzczOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05MzEsNiArOTMx
LDggQEAKIAkJNTMzM0JCREIyMTEwRjdEMjAwNzYxOEVDIC8qIERGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY4
ODBGMUIxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwICovOyB9
OwogCQk1MzMzQkJEQzIxMTBGN0Q5MDA3NjE4RUMgLyogREZHU3BlY3VsYXRpdmVKSVQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQzlEQzIxMzI4
REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmNwcCAqLzsgfTsKIAkJNTMzM0JCREQy
MTEwRjdFMTAwNzYxOEVDIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY4ODBGNEMxNDM1M0IyMTAwQjA4RDQy
IC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwICovOyB9OworCQk1MzM4RTJBNzIzOTZFRkZCMDBD
NjFCQUQgLyogQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMzhFMkE2MjM5NkVGRUMwMEM2MUJBRCAvKiBD
aGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTUzMzhFQkEzMjNBQjA0QjgwMDM4MjY2MiAvKiBGVExTZWxl
Y3RQcmVkaWN0YWJpbGl0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTMzOEVCQTIyM0FCMDRBMzAwMzgyNjYyIC8qIEZUTFNlbGVjdFByZWRpY3RhYmls
aXR5LmggKi87IH07CiAJCTUzNDFGQzcyMURBQzM0M0MwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHND
aGVja1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MzQxRkM3MTFEQUMzNDNDMDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oICov
OyB9OwogCQk1MzQ2Mzg3MTFFNzBDRjNEMDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYzODcwMUU3MENG
M0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzNDYzODc1MUU3MERERUMwMEYxMkFDMSAvKiBQcm9t
aXNlVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzNDYzODc0MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlVGltZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzYwMSw2ICszNjAzLDggQEAK
IAkJNTMxODA0NUQyMkVBQUYwRjAwNEE3MzQyIC8qIEIzRXh0cmFjdFZhbHVlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IEIzRXh0cmFjdFZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzRXh0cmFjdFZhbHVl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMxRDRFMTkxRjU5Q0REMjAwRUM4
MzZDIC8qIHRlc3RhcGkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGFwaS5jcHA7IHBhdGgg
PSBBUEkvdGVzdHMvdGVzdGFwaS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUz
MjYzMUIzMjE4Nzc3QTUwMDdCODE5MSAvKiBKYXZhU2NyaXB0Q29yZS5tb2R1bGVtYXAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSAic291cmNlY29kZS5tb2R1bGUtbWFwIjsgcGF0aCA9IEphdmFTY3JpcHRDb3JlLm1vZHVs
ZW1hcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMzOEUyQTYyMzk2RUZFQzAwQzYx
QkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUzMzhFQkEyMjNBQjA0QTMwMDM4MjY2MiAvKiBGVExTZWxlY3RQcmVk
aWN0YWJpbGl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTZWxlY3RQ
cmVkaWN0YWJpbGl0eS5oOyBwYXRoID0gZnRsL0ZUTFNlbGVjdFByZWRpY3RhYmlsaXR5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzM0IxNURFMURDN0Y0NjMwMDRENTAwQSAvKiBX
YXNtT3BzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21PcHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0MUZDNkYxREFDMzNFNTAwRTdFNEQ3IC8qIEIz
V2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM1dhc21Cb3VuZHND
aGVja1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0MUZDNzExREFD
MzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oOyBwYXRoID0gYjMvQjNX
YXNtQm91bmRzQ2hlY2tWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzYx
NSw2ICszNjE5LDkgQEAKIAkJNTM0QzQ1N0ExQkM3MDNEQzAwNzQ3NkE3IC8qIFR5cGVkQXJyYXlD
b25zdHJ1Y3Rvci5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFR5
cGVkQXJyYXlDb25zdHJ1Y3Rvci5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0
QzQ1N0IxQkM3MjQxMTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0QzQ1N0QxQkM3MjU0OTAwNzQ3
NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzREOUJGODIzNjNDNTVEMDA1NDUyNEQgLyogU2V0
SXRlcmF0b3JQcm90b3R5cGUuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBh
dGggPSBTZXRJdGVyYXRvclByb3RvdHlwZS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTM0RDlCRjkyMzYzQzU1RDAwNTQ1MjREIC8qIEl0ZXJhdG9ySGVscGVycy5qcyAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEl0ZXJhdG9ySGVscGVycy5qczsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0RDlCRkEyMzYzQzU1RDAwNTQ1MjREIC8qIE1h
cEl0ZXJhdG9yUHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBw
YXRoID0gTWFwSXRlcmF0b3JQcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUzNEUwMzREMUU0RDRCMTYwMDIxM0Y2NCAvKiBBY2Nlc3NDYXNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc0Nhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTM0RTAzNEYxRTREOTVFRDAwMjEzRjY0IC8qIEFjY2Vzc0Nhc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzQ2FzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEUwMzUzMUU1M0JEMjkwMDIxM0Y2NCAvKiBJbnRyaW5z
aWNHZXR0ZXJBY2Nlc3NDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
dHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTU1MzQsNiArNTU0MSw3IEBACiAJCQkJMEY0ODUzMjYxODdERkRFQzAwODNCNjg3IC8qIEZUTFJl
Y292ZXJ5T3Bjb2RlLmggKi8sCiAJCQkJMEZDRUZBQTkxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNh
dmVSZXN0b3JlLmNwcCAqLywKIAkJCQkwRkNFRkFBQTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2
ZVJlc3RvcmUuaCAqLywKKwkJCQk1MzM4RUJBMjIzQUIwNEEzMDAzODI2NjIgLyogRlRMU2VsZWN0
UHJlZGljdGFiaWxpdHkuaCAqLywKIAkJCQkwRjI1RjFBQTE4MTYzNUYzMDA1MjJGMzkgLyogRlRM
U2xvd1BhdGhDYWxsLmNwcCAqLywKIAkJCQkwRjI1RjFBQjE4MTYzNUYzMDA1MjJGMzkgLyogRlRM
U2xvd1BhdGhDYWxsLmggKi8sCiAJCQkJMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNs
b3dQYXRoQ2FsbEtleS5jcHAgKi8sCkBAIC01OTYwLDYgKzU5NjgsNyBAQAogCQkJCTE0MjlEOERD
MEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuaCAqLywKIAkJCQlBN0Y4NjlFQzBGOTVDMkVD
MDA1NTg2OTcgLyogQ2FsbEZyYW1lQ2xvc3VyZS5oICovLAogCQkJCUZFQTNCQkE3MjEyQjY1NTgw
MEU5M0FEMSAvKiBDYWxsRnJhbWVJbmxpbmVzLmggKi8sCisJCQkJNTMzOEUyQTYyMzk2RUZFQzAw
QzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggKi8sCiAJCQkJMTQyOUQ4NUIw
RUQyMThFOTAwQjg5NjE5IC8qIENMb29wU3RhY2suY3BwICovLAogCQkJCTE0RDc5MjY0MERBQTAz
RkIwMDFBOUYwNSAvKiBDTG9vcFN0YWNrLmggKi8sCiAJCQkJQTdDMUVBRUIxNzk4N0FCNjAwMjk5
REIyIC8qIENMb29wU3RhY2tJbmxpbmVzLmggKi8sCkBAIC04NjAwLDcgKzg2MDksOSBAQAogCQkJ
CUE1MjcwNDg1MUQwMjdDODgwMDM1NEMzNyAvKiBHbG9iYWxPcGVyYXRpb25zLmpzICovLAogCQkJ
CUUzNUUwMzYxMUI3QUI0ODUwMDczQUQyQSAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmpl
Y3QuanMgKi8sCiAJCQkJRTMzRjUwODgxQjg0NEExQTAwNDEzODU2IC8qIEludGVybmFsUHJvbWlz
ZUNvbnN0cnVjdG9yLmpzICovLAorCQkJCTUzNEQ5QkY5MjM2M0M1NUQwMDU0NTI0RCAvKiBJdGVy
YXRvckhlbHBlcnMuanMgKi8sCiAJCQkJN0NGOUJDNUIxQjY1RDlBMzAwOURCMUVGIC8qIEl0ZXJh
dG9yUHJvdG90eXBlLmpzICovLAorCQkJCTUzNEQ5QkZBMjM2M0M1NUQwMDU0NTI0RCAvKiBNYXBJ
dGVyYXRvclByb3RvdHlwZS5qcyAqLywKIAkJCQk3MDM1NTg3QzFDNDE4NDE5MDA0QkQ3QkYgLyog
TWFwUHJvdG90eXBlLmpzICovLAogCQkJCUUzMDY3Nzk3MUI4QkM2RjUwMDNGODdGMCAvKiBNb2R1
bGVMb2FkZXIuanMgKi8sCiAJCQkJQTUyNzA0ODYxRDAyN0M4ODAwMzU0QzM3IC8qIE51bWJlckNv
bnN0cnVjdG9yLmpzICovLApAQCAtODYxMSw2ICs4NjIyLDcgQEAKIAkJCQk3Q0Y5QkM1RjFCNjVE
OUIxMDA5REIxRUYgLyogUmVmbGVjdE9iamVjdC5qcyAqLywKIAkJCQk2NTQ3ODg0MjFDOTM3RDJD
MDAwNzgxQTAgLyogUmVnRXhwUHJvdG90eXBlLmpzICovLAogCQkJCTg0OTI1QTlDMjJCMzBDQzgw
MEQxREZGRiAvKiBSZWdFeHBTdHJpbmdJdGVyYXRvclByb3RvdHlwZS5qcyAqLywKKwkJCQk1MzRE
OUJGODIzNjNDNTVEMDA1NDUyNEQgLyogU2V0SXRlcmF0b3JQcm90b3R5cGUuanMgKi8sCiAJCQkJ
NzAzNTU4N0QxQzQxODQxOTAwNEJEN0JGIC8qIFNldFByb3RvdHlwZS5qcyAqLywKIAkJCQk3Q0Y5
QkM2MDFCNjVEOUIxMDA5REIxRUYgLyogU3RyaW5nQ29uc3RydWN0b3IuanMgKi8sCiAJCQkJN0NG
OUJDNjExQjY1RDlCMTAwOURCMUVGIC8qIFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmpzICovLApA
QCAtOTExMyw2ICs5MTI1LDcgQEAKIAkJCQlGRTFCRDAyMTFFNzIwMjc5MDAxMzRCQzkgLyogQ2Vs
bFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFQzE2MDMyMjMzOUU5RjkwMEEwNENCOCAv
KiBDZWxsU2l6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxQzNEREExQkJDRTA5RTAwRTUyM0U0
IC8qIENlbGxTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMzOEUyQTcyMzk2RUZGQjAwQzYx
QkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzZBQUFFNTBFMUY0MjY1MDBBRDg3RDggLyogQ2xhc3NJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkUwNTAyNjFBQTkwOTU2MDBEMzNCMzMgLyogQ2xvbmVkQXJndW1lbnRzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzQ1RTBFMTZGNUNEMDBCMzQ0NjAgLyogQ0xvb3BTdGFjay5oIGluIEhl
YWRlcnMgKi8sCkBAIC05NDU4LDYgKzk0NzEsNyBAQAogCQkJCTBGOUQ0QzExMUMzRTJDNzQwMDZD
RDk4NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjQ4NTMyQTE4N0RGREVDMDA4M0I2ODcgLyogRlRMUmVjb3ZlcnlPcGNvZGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQ0VGQUFDMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNTMzOEVCQTMyM0FCMDRCODAwMzgyNjYyIC8qIEZUTFNlbGVj
dFByZWRpY3RhYmlsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI1RjFCMjE4MTYzNUYzMDA1
MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI1RjFCNDE4
MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFMzIyRTVBNzFEQTY0NEE4MDA2RTc3MDkgLyogRlRMU25pcHBldFBhcmFtcy5oIGluIEhlYWRl
cnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQ29kZVJlZi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckNvZGVSZWYuaAppbmRleCA1NmQ4YTA3ZGJmY2RlZmRlYzc2MDg5YTEzZGZiNTAx
MWI2NGIyNWQzLi42ODg0MDgzZTBmYzE3NmEyMTNjZDY2ODI3NjRiMmY0ZWIzMGM2ZjZjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29k
ZVJlZi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLmgKQEAgLTIzOSwxMyArMjM5LDYgQEAgcHVibGljOgogICAgICAgICBBU1NFUlRf
VkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPFB0clRh
ZyB0YWc+Ci0gICAgZXhwbGljaXQgUmV0dXJuQWRkcmVzc1B0cihGdW5jdGlvblB0cjx0YWc+IGZ1
bmN0aW9uKQotICAgICAgICA6IG1fdmFsdWUodW50YWdDb2RlUHRyPHRhZz4oZnVuY3Rpb24uZXhl
Y3V0YWJsZUFkZHJlc3MoKSkpCi0gICAgewotICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lO
VEVSKG1fdmFsdWUpOwotICAgIH0KLQogICAgIGNvbnN0IHZvaWQqIHZhbHVlKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIHJldHVybiBtX3ZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9Qcm9iZUZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL1Byb2JlRnJhbWUuaAppbmRleCBjYWIzNjhkYzdjZDBmM2I0Zjg1Yjc2OWI3ODhkNDBk
NjNlYTU2Mzc3Li40MjI5YTBkMDk5N2E0YjBmNTgzYWNhZWEzYTBmMTY1NzI5ZjQ2ZTA1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlRnJhbWUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlRnJhbWUuaApAQCAtNDYsMTQg
KzQ2LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGdldDxUPihDYWxsRnJhbWU6OmFyZ3Vt
ZW50T2Zmc2V0KGFyZ3VtZW50KSAqIHNpemVvZihSZWdpc3RlcikpOwogICAgIH0KICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KLSAgICBUIG9wZXJhbmQoaW50IG9wZXJhbmQpCisg
ICAgVCBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGdldDxUPihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpLm9mZnNldCgp
ICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgIHJldHVybiBnZXQ8VD4ob3BlcmFuZC5vZmZz
ZXQoKSAqIHNpemVvZihSZWdpc3RlcikpOwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
ID0gSlNWYWx1ZT4KLSAgICBUIG9wZXJhbmQoaW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQp
CisgICAgVCBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdldDxUPihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0
ZXI+KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIG9mZnNldCk7CisgICAg
ICAgIHJldHVybiBnZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBv
ZmZzZXQpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC02MiwxNCArNjIs
MTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc2V0PFQ+KENhbGxGcmFtZTo6YXJndW1lbnRP
ZmZzZXQoYXJndW1lbnQpICogc2l6ZW9mKFJlZ2lzdGVyKSwgdmFsdWUpOwogICAgIH0KICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgc2V0T3BlcmFuZChpbnQgb3BlcmFuZCwgVCB2
YWx1ZSkKKyAgICB2b2lkIHNldE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIFQgdmFs
dWUpCiAgICAgewotICAgICAgICBzZXQ8VD4oc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihv
cGVyYW5kKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlciksIHZhbHVlKTsKKyAgICAgICAgc2V0
PFQ+KG9wZXJhbmQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpLCB2YWx1ZSk7CiAgICAgfQog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZXRPcGVyYW5kKGludCBvcGVyYW5k
LCBwdHJkaWZmX3Qgb2Zmc2V0LCBUIHZhbHVlKQorICAgIHZvaWQgc2V0T3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCwgVCB2YWx1ZSkKICAgICB7Ci0gICAg
ICAgIHNldDxUPihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpLm9mZnNldCgp
ICogc2l6ZW9mKFJlZ2lzdGVyKSArIG9mZnNldCwgdmFsdWUpOworICAgICAgICBzZXQ8VD4ob3Bl
cmFuZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBvZmZzZXQsIHZhbHVlKTsKICAgICB9
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90
ZXN0YjMuaAppbmRleCAzNWQwMTc1NmQ1MzJhNzFlYzA3ZmU0MDNlZjdhNTI1MGI1ZmM2ZjYxLi40
MWJjOTYxYTE1MzA4NWZiYTg1NTA2NWMzOWI2YzZkYTZmYjJhODBkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL3Rlc3RiMy5oCkBAIC0yNjMsMjAgKzI2MywyMCBAQCBpbmxpbmUgdm9pZCBjaGVja0RvZXNO
b3RVc2VJbnN0cnVjdGlvbihDb21waWxhdGlvbiYgY29tcGlsYXRpb24sIGNvbnN0IGNoYXIqIHRl
eAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotc3RydWN0IE9wZXJhbmQgeworc3RydWN0
IEIzT3BlcmFuZCB7CiAgICAgY29uc3QgY2hhciogbmFtZTsKICAgICBUeXBlIHZhbHVlOwogfTsK
IAotdHlwZWRlZiBPcGVyYW5kPGludDY0X3Q+IEludDY0T3BlcmFuZDsKLXR5cGVkZWYgT3BlcmFu
ZDxpbnQzMl90PiBJbnQzMk9wZXJhbmQ7Ci10eXBlZGVmIE9wZXJhbmQ8aW50MTZfdD4gSW50MTZP
cGVyYW5kOwotdHlwZWRlZiBPcGVyYW5kPGludDhfdD4gSW50OE9wZXJhbmQ7Cit0eXBlZGVmIEIz
T3BlcmFuZDxpbnQ2NF90PiBJbnQ2NE9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQzMl90
PiBJbnQzMk9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQxNl90PiBJbnQxNk9wZXJhbmQ7
Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQ4X3Q+IEludDhPcGVyYW5kOwogCi0jZGVmaW5lIE1BS0Vf
T1BFUkFORCh2YWx1ZSkgT3BlcmFuZDxkZWNsdHlwZSh2YWx1ZSk+IHsgI3ZhbHVlLCB2YWx1ZSB9
CisjZGVmaW5lIE1BS0VfT1BFUkFORCh2YWx1ZSkgQjNPcGVyYW5kPGRlY2x0eXBlKHZhbHVlKT4g
eyAjdmFsdWUsIHZhbHVlIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRmxvYXRUeXBlPgotdm9pZCBw
b3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhWZWN0b3I8T3BlcmFuZDxGbG9hdFR5cGU+PiYg
b3BlcmFuZHMpCit2b2lkIHBvcHVsYXRlV2l0aEludGVyZXN0aW5nVmFsdWVzKFZlY3RvcjxCM09w
ZXJhbmQ8RmxvYXRUeXBlPj4mIG9wZXJhbmRzKQogewogICAgIG9wZXJhbmRzLmFwcGVuZCh7ICIw
LiIsIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oMC4pIH0pOwogICAgIG9wZXJhbmRzLmFwcGVuZCh7
ICItMC4iLCBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KC0wLikgfSk7CkBAIC0zMDIsOSArMzAyLDkg
QEAgdm9pZCBwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhWZWN0b3I8T3BlcmFuZDxGbG9h
dFR5cGU+PiYgb3BlcmFuZHMpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZsb2F0VHlwZT4KLVZl
Y3RvcjxPcGVyYW5kPEZsb2F0VHlwZT4+IGZsb2F0aW5nUG9pbnRPcGVyYW5kcygpCitWZWN0b3I8
QjNPcGVyYW5kPEZsb2F0VHlwZT4+IGZsb2F0aW5nUG9pbnRPcGVyYW5kcygpCiB7Ci0gICAgVmVj
dG9yPE9wZXJhbmQ8RmxvYXRUeXBlPj4gb3BlcmFuZHM7CisgICAgVmVjdG9yPEIzT3BlcmFuZDxG
bG9hdFR5cGU+PiBvcGVyYW5kczsKICAgICBwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhv
cGVyYW5kcyk7CiAgICAgcmV0dXJuIG9wZXJhbmRzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAppbmRleCBjOGI1MmI4ODI2YWU5ODIyOGVlODQ0
NDk2YjFlZTdhOGU5YTdkMzNhLi43MWRhODZkZmViZGYyNTg4ZmUyZTAxN2FlN2E1YzlhNmZkYjRk
YWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3Bw
CkBAIC0xNTIwLDcgKzE1MjAsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nl
c3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogCiAgICAgICAgIGppdC5zdG9yZTMyKAogICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4
Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5hbCgpLmJpdHMoKSksCi0gICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
Ojp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKIAog
ICAgICAgICBpZiAobV90eXBlID09IEdldHRlciB8fCBtX3R5cGUgPT0gU2V0dGVyKSB7CiAgICAg
ICAgICAgICBhdXRvJiBhY2Nlc3MgPSB0aGlzLT5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigp
OwpAQCAtMTgwOSw3ICsxODA5LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNj
ZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigK
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoCiAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0ZS5jYWxsU2l0ZUluZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmdP
ck9yaWdpbmFsKCkuYml0cygpKSwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0
YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcykpKTsKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
Ojp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBqaXQubWFrZVNwYWNlT25TdGFja0ZvckND
YWxsKCk7CiAgICAgICAgICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZVNuaXBwZXRQYXJhbXMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcAppbmRleCBiMWQ0MDRh
MTQ1YmQyMTQxYjNhMGE5YzQzMTkxOGE1OGY5YWYxODlmLi42OWI1ZWUxMDZiMmU4MTc1NTc3Nzk3
MWJlMjcxNGM0YTFhOThjYmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQWNjZXNzQ2FzZVNuaXBwZXRQYXJhbXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHAKQEAgLTU1LDcgKzU1LDcg
QEAgcHVibGljOgogCiAgICAgICAgIGppdC5zdG9yZTMyKAogICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5n
T3JPcmlnaW5hbCgpLmJpdHMoKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0Zvcihz
dGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKSkpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKIAogICAgICAgICBqaXQubWFr
ZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCmluZGV4IDYwNThmYjA2MjAzOTQ2YzRjZDU2ZWY2
YTk4Mzg3OWQyZDZjODFmYjYuLjgzNjUxMTVmNDIxNzkxYTVjNjY0ODNhNWE3OTA1Y2FlNWMwZWUz
ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1
bXBlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcApAQCAtNjMsNyArNjMsNyBAQCB2b2lkIEJ5dGVjb2RlRHVtcGVyQmFzZTo6cHJpbnRM
b2NhdGlvbkFuZE9wKEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgbG9jYXRpb24sCiAKIHZvaWQg
Qnl0ZWNvZGVEdW1wZXJCYXNlOjpkdW1wVmFsdWUoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAg
ICBtX291dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHJlZy5vZmZzZXQoKSkuZGF0YSgpKTsK
KyAgICBtX291dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHJlZykuZGF0YSgpKTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgVHJhaXRzPgpAQCAtODMsMTIgKzgzLDEyIEBAIHRlbXBsYXRlIHZv
aWQgQnl0ZWNvZGVEdW1wZXJCYXNlOjpkdW1wVmFsdWUoR2VuZXJpY0JvdW5kTGFiZWw8V2FzbTo6
R2VuZXJhdG9yVHJhCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQogCiB0ZW1wbGF0ZTxj
bGFzcyBCbG9jaz4KLUNTdHJpbmcgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpyZWdpc3Rlck5hbWUo
aW50IHIpIGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6cmVnaXN0ZXJOYW1l
KFZpcnR1YWxSZWdpc3RlciByKSBjb25zdAogewotICAgIGlmIChpc0NvbnN0YW50UmVnaXN0ZXJJ
bmRleChyKSkKKyAgICBpZiAoci5pc0NvbnN0YW50KCkpCiAgICAgICAgIHJldHVybiBjb25zdGFu
dE5hbWUocik7CiAKLSAgICByZXR1cm4gdG9DU3RyaW5nKFZpcnR1YWxSZWdpc3RlcihyKSk7Cisg
ICAgcmV0dXJuIHRvQ1N0cmluZyhyKTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIEJsb2NrPgpAQCAt
OTgsMTAgKzk4LDEwIEBAIGludCBCeXRlY29kZUR1bXBlcjxCbG9jaz46Om91dE9mTGluZUp1bXBP
ZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZzZXQpCiB9CiAKIHRlbXBsYXRlPGNs
YXNzIEJsb2NrPgotQ1N0cmluZyBCeXRlY29kZUR1bXBlcjxCbG9jaz46OmNvbnN0YW50TmFtZShp
bnQgaW5kZXgpIGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6Y29uc3RhbnRO
YW1lKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CiB7Ci0gICAgYXV0byB2YWx1ZSA9IGJsb2Nr
KCktPmdldENvbnN0YW50KGluZGV4KTsKLSAgICByZXR1cm4gdG9DU3RyaW5nKHZhbHVlLCAiKCIs
IFZpcnR1YWxSZWdpc3RlcihpbmRleCksICIpIik7CisgICAgYXV0byB2YWx1ZSA9IGJsb2NrKCkt
PmdldENvbnN0YW50KHJlZyk7CisgICAgcmV0dXJuIHRvQ1N0cmluZyh2YWx1ZSwgIigiLCByZWcs
ICIpIik7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgpAQCAtMzM1LDcgKzMzNSw3IEBAIHZv
aWQgQnl0ZWNvZGVEdW1wZXI6OmR1bXBDb25zdGFudHMoKQogICAgIH0KIH0KIAotQ1N0cmluZyBC
eXRlY29kZUR1bXBlcjo6Y29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3QKK0NTdHJpbmcgQnl0
ZWNvZGVEdW1wZXI6OmNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgpIGNvbnN0CiB7
CiAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGJsb2NrID0gdGhpcy0+YmxvY2soKTsKICAgICBhdXRv
IHZhbHVlID0gZm9ybWF0Q29uc3RhbnQoYmxvY2stPmdldENvbnN0YW50VHlwZShpbmRleCksIGJs
b2NrLT5nZXRDb25zdGFudChpbmRleCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAppbmRleCAwZDcxNjc1MDM5NGIxNWQ0ZWI1ZTg3YzVhODgy
NTEwNzVlZmUwM2VlLi5lZGIxMTI5MjFhZjc1M2U2M2Q4NjEzNzJmYmRlMGVlZjg5ZmNhMTU5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaApA
QCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wVmFsdWUoVCB2KSB7IG1fb3V0
LnByaW50KHYpOyB9CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIENTdHJpbmcgcmVnaXN0ZXJO
YW1lKGludCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgQ1N0cmluZyByZWdpc3Rlck5hbWUoVmly
dHVhbFJlZ2lzdGVyKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgb3V0T2ZMaW5lSnVtcE9m
ZnNldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0KSBjb25zdCA9IDA7CiAKICAgICBCeXRlY29k
ZUR1bXBlckJhc2UoUHJpbnRTdHJlYW0mIG91dCkKQEAgLTkxLDExICs5MSwxMSBAQCBwcm90ZWN0
ZWQ6CiAKICAgICB2b2lkIGR1bXBCeXRlY29kZShjb25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVm
JiBpdCwgY29uc3QgSUNTdGF0dXNNYXAmKTsKIAotICAgIENTdHJpbmcgcmVnaXN0ZXJOYW1lKGlu
dCByKSBjb25zdCBvdmVycmlkZTsKKyAgICBDU3RyaW5nIHJlZ2lzdGVyTmFtZShWaXJ0dWFsUmVn
aXN0ZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3Ry
dWN0aW9uU3RyZWFtOjpPZmZzZXQgb2Zmc2V0KSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToK
LSAgICB2aXJ0dWFsIENTdHJpbmcgY29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3Q7CisgICAg
dmlydHVhbCBDU3RyaW5nIGNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIpIGNvbnN0OwogCiAg
ICAgQmxvY2sqIG1fYmxvY2s7CiB9OwpAQCAtMTM1LDcgKzEzNSw3IEBAIHByaXZhdGU6CiAgICAg
dXNpbmcgSlNDOjpCeXRlY29kZUR1bXBlcjxGdW5jdGlvbkNvZGVCbG9jaz46OkJ5dGVjb2RlRHVt
cGVyOwogCiAgICAgdm9pZCBkdW1wQ29uc3RhbnRzKCk7Ci0gICAgQ1N0cmluZyBjb25zdGFudE5h
bWUoaW50IGluZGV4KSBjb25zdCBvdmVycmlkZTsKKyAgICBDU3RyaW5nIGNvbnN0YW50TmFtZShW
aXJ0dWFsUmVnaXN0ZXIgaW5kZXgpIGNvbnN0IG92ZXJyaWRlOwogICAgIENTdHJpbmcgZm9ybWF0
Q29uc3RhbnQoVHlwZSwgdWludDY0X3QpIGNvbnN0OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwCmluZGV4IDE1ZDYxYmE5MDQwMWE3
MTE3ZGMwZjlmMjZlMTkxMzdlYjJjMzE1OWIuLmEyYzFmNDE1YjE5N2Q0NmJkNjgxNGEyMDExMWM4
N2M1MDg3MjIyNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUluZGV4LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVJbmRleC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkJ5dGVjb2RlSW5kZXguaCIKKwogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5o
PgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTMyLDYgKzMzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiB2
b2lkIEJ5dGVjb2RlSW5kZXg6OmR1bXAoV1RGOjpQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewog
ICAgIG91dC5wcmludCgiYmMjIiwgb2Zmc2V0KCkpOworICAgIGlmIChjaGVja3BvaW50KCkpCisg
ICAgICAgIG91dC5wcmludCgiY3AjIiwgY2hlY2twb2ludCgpKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVJbmRleC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXgu
aAppbmRleCA1Mjk1YzI5YjEyMjgxMzFmNzJhYzIwNzMxYzFkM2JjZTkzNTE1OGRmLi4xMGZiYTQ0
MDU4ZWM5ZGZlZDI1NDgwOWE2ZDc4MzM3ZDAxMWE0YjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKyNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIFByaW50U3RyZWFtOwpAQCAtMzcs
MjQgKzM4LDMzIEBAIGNsYXNzIEJ5dGVjb2RlSW5kZXggewogcHVibGljOgogICAgIEJ5dGVjb2Rl
SW5kZXgoKSA9IGRlZmF1bHQ7CiAgICAgQnl0ZWNvZGVJbmRleChXVEY6Okhhc2hUYWJsZURlbGV0
ZWRWYWx1ZVR5cGUpCi0gICAgICAgIDogbV9vZmZzZXQoZGVsZXRlZFZhbHVlKCkuYXNCaXRzKCkp
CisgICAgICAgIDogbV9wYWNrZWRCaXRzKGRlbGV0ZWRWYWx1ZSgpLmFzQml0cygpKQogICAgIHsK
ICAgICB9Ci0gICAgZXhwbGljaXQgQnl0ZWNvZGVJbmRleCh1aW50MzJfdCBieXRlY29kZU9mZnNl
dCkKLSAgICAgICAgOiBtX29mZnNldChieXRlY29kZU9mZnNldCkKLSAgICB7IH0KIAotICAgIHVp
bnQzMl90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Ci0gICAgdWludDMyX3Qg
YXNCaXRzKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICBleHBsaWNpdCBCeXRlY29k
ZUluZGV4KHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0LCB1aW50OF90IGNoZWNrcG9pbnQgPSAwKQor
ICAgICAgICA6IG1fcGFja2VkQml0cyhwYWNrKGJ5dGVjb2RlT2Zmc2V0LCBjaGVja3BvaW50KSkK
KyAgICB7CisgICAgICAgIEFTU0VSVCgqdGhpcyk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0
ZXhwciB1aW50MzJfdCBudW1iZXJPZkNoZWNrcG9pbnRzID0gNDsKKyAgICBzdGF0aWNfYXNzZXJ0
KGhhc09uZUJpdFNldChudW1iZXJPZkNoZWNrcG9pbnRzKSwgIm51bWJlck9mQ2hlY2twb2ludHMg
c2hvdWxkIGJlIGEgcG93ZXIgb2YgMiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3Qg
Y2hlY2twb2ludE1hc2sgPSBudW1iZXJPZkNoZWNrcG9pbnRzIC0gMTsKKyAgICBzdGF0aWMgY29u
c3RleHByIHVpbnQzMl90IGNoZWNrcG9pbnRTaGlmdCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHBy
KG51bWJlck9mQ2hlY2twb2ludHMpOworCisgICAgdWludDMyX3Qgb2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9wYWNrZWRCaXRzID4+IGNoZWNrcG9pbnRTaGlmdDsgfQorICAgIHVpbnQ4X3QgY2hl
Y2twb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyAmIGNoZWNrcG9pbnRNYXNrOyB9
CisgICAgdWludDMyX3QgYXNCaXRzKCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzOyB9CiAK
LSAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gV1RGOjppbnRIYXNoKG1fb2Zmc2V0
KTsgfQorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBXVEY6OmludEhhc2gobV9w
YWNrZWRCaXRzKTsgfQogICAgIHN0YXRpYyBCeXRlY29kZUluZGV4IGRlbGV0ZWRWYWx1ZSgpIHsg
cmV0dXJuIGZyb21CaXRzKGludmFsaWRPZmZzZXQgLSAxKTsgfQogICAgIGJvb2wgaXNIYXNoVGFi
bGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiAqdGhpcyA9PSBkZWxldGVkVmFsdWUoKTsg
fQogCiAgICAgc3RhdGljIEJ5dGVjb2RlSW5kZXggZnJvbUJpdHModWludDMyX3QgYml0cyk7CiAK
ICAgICAvLyBDb21wYXJpc29uIG9wZXJhdG9ycy4KLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQgIT0gaW52YWxpZE9mZnNldCAmJiBtX29mZnNldCAh
PSBkZWxldGVkVmFsdWUoKS5vZmZzZXQoKTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7IHJldHVybiBtX3BhY2tlZEJpdHMgIT0gaW52YWxpZE9mZnNldCAmJiBtX3BhY2tl
ZEJpdHMgIT0gZGVsZXRlZFZhbHVlKCkub2Zmc2V0KCk7IH0KICAgICBib29sIG9wZXJhdG9yID09
KGNvbnN0IEJ5dGVjb2RlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBhc0JpdHMoKSA9PSBv
dGhlci5hc0JpdHMoKTsgfQogICAgIGJvb2wgb3BlcmF0b3IgIT0oY29uc3QgQnl0ZWNvZGVJbmRl
eCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAKQEAgLTY5LDEz
ICs3OSwyMiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMy
X3QgaW52YWxpZE9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsK
IAotICAgIHVpbnQzMl90IG1fb2Zmc2V0IHsgaW52YWxpZE9mZnNldCB9OworICAgIHN0YXRpYyB1
aW50MzJfdCBwYWNrKHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgsIHVpbnQ4X3QgY2hlY2twb2ludCk7
CisKKyAgICB1aW50MzJfdCBtX3BhY2tlZEJpdHMgeyBpbnZhbGlkT2Zmc2V0IH07CiB9OwogCitp
bmxpbmUgdWludDMyX3QgQnl0ZWNvZGVJbmRleDo6cGFjayh1aW50MzJfdCBieXRlY29kZUluZGV4
LCB1aW50OF90IGNoZWNrcG9pbnQpCit7CisgICAgQVNTRVJUKGNoZWNrcG9pbnQgPCBudW1iZXJP
ZkNoZWNrcG9pbnRzKTsKKyAgICBBU1NFUlQoKGJ5dGVjb2RlSW5kZXggPDwgY2hlY2twb2ludFNo
aWZ0KSA+PiBjaGVja3BvaW50U2hpZnQgPT0gYnl0ZWNvZGVJbmRleCk7CisgICAgcmV0dXJuIGJ5
dGVjb2RlSW5kZXggPDwgY2hlY2twb2ludFNoaWZ0IHwgY2hlY2twb2ludDsKK30KKwogaW5saW5l
IEJ5dGVjb2RlSW5kZXggQnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHModWludDMyX3QgYml0cykKIHsK
ICAgICBCeXRlY29kZUluZGV4IHJlc3VsdDsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBiaXRzOwor
ICAgIHJlc3VsdC5tX3BhY2tlZEJpdHMgPSBiaXRzOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3Qu
cmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCmluZGV4
IDg2MmNjZDhjY2ZkNDBiZjBlZWI3MzQyNWVmNmQyOGI0Nzk2ODA4OWMuLjM0ODM0N2M2YjRjZDc1
NDY4MGMxMjZhMGY3Mjc1MzZmMWJlMzdjNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgpAQCAtNTksNyArNTksNyBAQCB0eXBlcyBbCiAgICAg
OldhdGNocG9pbnRTZXQsCiAKICAgICA6VmFsdWVQcm9maWxlLAotICAgIDpWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kQnVmZmVyLAorICAgIDpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZm
ZXIsCiAgICAgOlVuYXJ5QXJpdGhQcm9maWxlLAogICAgIDpCaW5hcnlBcml0aFByb2ZpbGUsCiAg
ICAgOkFycmF5UHJvZmlsZSwKQEAgLTc5Niw2ICs3OTYsMTMgQEAgb3AgOmNhbGxfdmFyYXJncywK
ICAgICBtZXRhZGF0YTogewogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAg
ICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgIH0sCisgICAgdG1wczogeworICAgICAg
ICBhcmdDb3VudEluY2x1ZGluZ1RoaXM6IHVuc2lnbmVkLAorICAgIH0sCisgICAgY2hlY2twb2lu
dHM6IHsKKyAgICAgICAgZGV0ZXJtaW5pbmdBcmdDb3VudDogbmlsLAorICAgICAgICBtYWtlQ2Fs
bDogbmlsLAogICAgIH0KIAogb3AgOnRhaWxfY2FsbF92YXJhcmdzLApAQCAtODEwLDYgKzgxNywx
MyBAQCBvcCA6dGFpbF9jYWxsX3ZhcmFyZ3MsCiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgYXJy
YXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwK
KyAgICB9LAorICAgIHRtcHM6IHsKKyAgICAgICAgYXJnQ291bnRJbmNsdWRpbmdUaGlzOiB1bnNp
Z25lZAorICAgIH0sCisgICAgY2hlY2twb2ludHM6IHsKKyAgICAgICAgZGV0ZXJtaW5pbmdBcmdD
b3VudDogbmlsLAorICAgICAgICBtYWtlQ2FsbDogbmlsLAogICAgIH0KIAogb3AgOnRhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cywKQEAgLTg1MCw2ICs4NjQsMTMgQEAgb3AgOmNvbnN0cnVjdF92
YXJhcmdzLAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9m
aWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgfSwKKyAgICB0bXBzOiB7
CisgICAgICAgIGFyZ0NvdW50SW5jbHVkaW5nVGhpczogdW5zaWduZWQKKyAgICB9LAorICAgIGNo
ZWNrcG9pbnRzOiB7CisgICAgICAgIGRldGVybWluaW5nQXJnQ291bnQ6IG5pbCwKKyAgICAgICAg
bWFrZUNhbGw6IG5pbCwKICAgICB9CiAKIG9wIDpyZXQsCkBAIC0xMDAzLDcgKzEwMjQsNyBAQCBv
cCA6Y2F0Y2gsCiAgICAgICAgIHRocm93blZhbHVlOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgfSwK
ICAgICBtZXRhZGF0YTogewotICAgICAgICBidWZmZXI6IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRC
dWZmZXIuKiwKKyAgICAgICAgYnVmZmVyOiBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJC
dWZmZXIuKiwKICAgICB9CiAKIG9wIDp0aHJvdywKQEAgLTEyNDksNiArMTI3MCw4IEBAIG9wIDps
bGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lCiBvcCA6bGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90
cmFtcG9saW5lCiBvcCA6bGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lCiBv
cCA6bGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmUKK29wIDpjaGVj
a3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmUKK29wIDpjaGVja3Bv
aW50X29zcl9leGl0X3RyYW1wb2xpbmUKIG9wIDpoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbgogb3Ag
Om9wX2NhbGxfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfY29uc3RydWN0X3JldHVybl9sb2NhdGlv
bgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAppbmRleCA5MThlMWQyMTM0YTYwYjZjZmYxMDExNDNhYjU1
NDMzYjhiNDNmNDQwLi43OTc1ZmVmM2M4ODE0MzE4MTU3YTU5ZGJlOGJlNTU0ODM4OGZlMzY1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmNwcApAQCAtMjAxLDQgKzIwMSwzOSBAQCB2b2lkIEJ5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpczo6ZHVtcFJlc3VsdHMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAg
fQogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnVtVHlwZTEsIHR5cGVuYW1lIEVudW1UeXBlMj4K
K2NvbnN0ZXhwciBib29sIGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoRW51bVR5cGUxIHYxLCBF
bnVtVHlwZTIgdjIpCit7CisgICAgdXNpbmcgSW50VHlwZTEgPSB0eXBlbmFtZSBzdGQ6OnVuZGVy
bHlpbmdfdHlwZTxFbnVtVHlwZTE+Ojp0eXBlOworICAgIHVzaW5nIEludFR5cGUyID0gdHlwZW5h
bWUgc3RkOjp1bmRlcmx5aW5nX3R5cGU8RW51bVR5cGUyPjo6dHlwZTsKKyAgICBpZiBjb25zdGV4
cHIgKHNpemVvZihJbnRUeXBlMSkgPiBzaXplb2YoSW50VHlwZTIpKQorICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8SW50VHlwZTE+KHYxKSA9PSBzdGF0aWNfY2FzdDxJbnRUeXBlMT4odjIpOwor
ICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEludFR5cGUyPih2MSkgPT0gc3Rh
dGljX2Nhc3Q8SW50VHlwZTI+KHYyKTsKK30KKworQml0bWFwPG1heE51bUNoZWNrcG9pbnRUbXBz
PiB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoY29uc3QgQ29kZUJsb2NrJiBjb2RlQmxvY2ssIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKK3sKKyAgICBCaXRtYXA8bWF4TnVtQ2hlY2twb2lu
dFRtcHM+IHJlc3VsdDsKKyAgICB1aW50OF90IGNoZWNrcG9pbnQgPSBieXRlY29kZUluZGV4LmNo
ZWNrcG9pbnQoKTsKKworICAgIGlmICghY2hlY2twb2ludCkKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKworICAgIHN3aXRjaCAoY29kZUJsb2NrLmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5k
ZXgpLT5vcGNvZGVJRCgpKSB7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBv
cF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOiB7Cisg
ICAgICAgIHN0YXRpY19hc3NlcnQoZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChPcENhbGxWYXJh
cmdzOjptYWtlQ2FsbCwgT3BUYWlsQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsKSAmJiBlbnVtVmFsdWVz
RXF1YWxBc0ludGVncmFsKE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50SW5jbHVkaW5nVGhpcywgT3BU
YWlsQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50SW5jbHVkaW5nVGhpcykpOworICAgICAgICBzdGF0aWNf
YXNzZXJ0KGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6bWFrZUNhbGws
IE9wQ29uc3RydWN0VmFyYXJnczo6bWFrZUNhbGwpICYmIGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdy
YWwoT3BDYWxsVmFyYXJnczo6YXJnQ291bnRJbmNsdWRpbmdUaGlzLCBPcENvbnN0cnVjdFZhcmFy
Z3M6OmFyZ0NvdW50SW5jbHVkaW5nVGhpcykpOworICAgICAgICBpZiAoY2hlY2twb2ludCA9PSBP
cENhbGxWYXJhcmdzOjptYWtlQ2FsbCkKKyAgICAgICAgICAgIHJlc3VsdC5zZXQoT3BDYWxsVmFy
YXJnczo6YXJnQ291bnRJbmNsdWRpbmdUaGlzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5oCmluZGV4IDczNzliM2M5YmM3MjMyNTkxMDljNjFlN2FkYTUzM2Q5ZTdkMmYyYzkuLjNlNWVk
YzBhNjhhZTQ0ZGY2NTE1Y2RiZmQ0YjQyN2VmNjllZWYxODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJCeXRlY29kZUJhc2ljQmxvY2suaCIKICNpbmNs
dWRlICJCeXRlY29kZUdyYXBoLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSA8
d3RmL0JpdG1hcC5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewpAQCAtOTcsNiArOTgsOCBAQCBwcml2YXRlOgogICAgIEJ5dGVjb2RlR3JhcGggbV9n
cmFwaDsKIH07CiAKK0JpdG1hcDxtYXhOdW1DaGVja3BvaW50VG1wcz4gdG1wTGl2ZW5lc3NGb3JD
aGVja3BvaW50KGNvbnN0IENvZGVCbG9jayYsIEJ5dGVjb2RlSW5kZXgpOworCiBpbmxpbmUgYm9v
bCBvcGVyYW5kSXNBbHdheXNMaXZlKGludCBvcGVyYW5kKTsKIGlubGluZSBib29sIG9wZXJhbmRU
aGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50IG9w
ZXJhbmQpOwogaW5saW5lIGJvb2wgb3BlcmFuZElzTGl2ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBv
dXQsIGludCBvcGVyYW5kKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCmluZGV4IDNk
MTJlMTk1YzY5OWVmYmY5NjM2YTJiOTc0ZTc5NDRjZGFlZDcyYzAuLmRlNmNhOGRjOTEwOWI3ODk2
N2YxMDU1MDA5ZGEzMGU4OTk4NDgyODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMu
aApAQCAtMzMsMjIgKzMzLDIyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgYm9vbCBv
cGVyYW5kSXNBbHdheXNMaXZlKGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wgdmlydHVhbFJlZ2lz
dGVySXNBbHdheXNMaXZlKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgcmV0dXJuICFWaXJ0
dWFsUmVnaXN0ZXIob3BlcmFuZCkuaXNMb2NhbCgpOworICAgIHJldHVybiAhcmVnLmlzTG9jYWwo
KTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUoY29u
c3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxS
ZWdpc3RlclRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIHVuc2lnbmVkIGxvY2FsID0gVmlydHVhbFJl
Z2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKTsKKyAgICB1bnNpZ25lZCBsb2NhbCA9IHJlZy50b0xv
Y2FsKCk7CiAgICAgaWYgKGxvY2FsID49IG91dC5udW1CaXRzKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICByZXR1cm4gb3V0W2xvY2FsXTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmFuZElz
TGl2ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKQoraW5saW5lIGJvb2wg
dmlydHVhbFJlZ2lzdGVySXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCiB7Ci0gICAgcmV0dXJuIG9wZXJhbmRJc0Fsd2F5c0xpdmUob3BlcmFu
ZCkgfHwgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUob3V0LCBvcGVyYW5kKTsKKyAg
ICByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IHZpcnR1YWxS
ZWdpc3RlclRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUob3V0LCBvcGVyYW5kKTsKIH0KIAogaW5s
aW5lIGJvb2wgaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4
IDNmMzJmZTg3ZTRjMGFjMjcyMmQ2OTRiNDFmMTliZWM0ZDdkNTk3ZDIuLjc4ZWI0ZjdkMTgxMDUw
MWRiOGMwZTAzMmE5OGZmNjc1YTRmNDk5OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiQnl0ZWNv
ZGVTdHJ1Y3RzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYuaCIKICNpbmNsdWRlICJDYWxs
TGlua1N0YXR1cy5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAj
aW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja1NldC5oIgog
I2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgpAQCAtNDA5LDcgKzQxMCw3IEBAIGJvb2wgQ29k
ZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhl
Y3V0YWJsZSwgVW5saW5rCiAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNs
b25lZFN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgY2xvbmVkU3ltYm9sVGFibGUt
PnByZXBhcmVGb3JUeXBlUHJvZmlsaW5nKGxvY2tlcik7CiAgICAgICAgIH0KLSAgICAgICAgcmVw
bGFjZUNvbnN0YW50KHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay0+bW9kdWxlRW52aXJv
bm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSwgY2xvbmVkU3ltYm9sVGFi
bGUpOworICAgICAgICByZXBsYWNlQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyKHVubGlua2VkTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jay0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50
UmVnaXN0ZXJPZmZzZXQoKSksIGNsb25lZFN5bWJvbFRhYmxlKTsKICAgICB9CiAKICAgICBib29s
IHNob3VsZFVwZGF0ZUZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSA9IG1fdW5saW5rZWRDb2RlLT53
YXNDb21waWxlZFdpdGhUeXBlUHJvZmlsZXJPcGNvZGVzKCkgfHwgbV91bmxpbmtlZENvZGUtPndh
c0NvbXBpbGVkV2l0aENvbnRyb2xGbG93UHJvZmlsZXJPcGNvZGVzKCk7CkBAIC02NDMsNyArNjQ0
LDcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0
YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgICAgIGlmIChieXRlY29kZS5t
X2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBMb2NhbENsb3N1cmVWYXIpIHsKICAgICAgICAg
ICAgICAgICAvLyBPbmx5IGRvIHdhdGNoaW5nIGlmIHRoZSBwcm9wZXJ0eSB3ZSdyZSBwdXR0aW5n
IHRvIGlzIG5vdCBhbm9ueW1vdXMuCiAgICAgICAgICAgICAgICAgaWYgKGJ5dGVjb2RlLm1fdmFy
ICE9IFVJTlRfTUFYKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xU
YWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3ltYm9s
VGFibGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUoKS5vZmZzZXQoKSkpOworICAgICAgICAgICAg
ICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihn
ZXRDb25zdGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlT3JTY29wZURlcHRoLnN5bWJvbFRhYmxl
KCkpKTsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fdmFyKTsKICAgICAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICAgICAg
YXV0byBpdGVyID0gc3ltYm9sVGFibGUtPmZpbmQobG9ja2VyLCBpZGVudC5pbXBsKCkpOwpAQCAt
NzExLDggKzcxMiw3IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNj
cmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlQnl0ZWNv
ZGVMb2NhbGx5UmVzb2x2ZWQ6IHsKLSAgICAgICAgICAgICAgICBpbnQgc3ltYm9sVGFibGVJbmRl
eCA9IGJ5dGVjb2RlLm1fc3ltYm9sVGFibGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUoKS5vZmZz
ZXQoKTsKLSAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8
U3ltYm9sVGFibGUqPihnZXRDb25zdGFudChzeW1ib2xUYWJsZUluZGV4KSk7CisgICAgICAgICAg
ICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0
Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZU9yU2NvcGVEZXB0aC5zeW1ib2xUYWJsZSgp
KSk7CiAgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVy
KGJ5dGVjb2RlLm1faWRlbnRpZmllcik7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICAvLyBJZiBv
dXIgcGFyZW50IHNjb3BlIHdhcyBjcmVhdGVkIHdoaWxlIHByb2ZpbGluZyB3YXMgZGlzYWJsZWQs
IGl0IHdpbGwgbm90IGhhdmUgcHJlcGFyZWQgZm9yIHByb2ZpbGluZyB5ZXQuCkBAIC0xMDg4LDYg
KzEwODgsMTUgQEAgc3RhdGljIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oVk0mIHZtLCBERkc6
OldlYWtSZWZlcmVuY2VUcmFuc2l0aW9uJiB0cmFuc2l0aW8KICAgICAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KKworQnl0ZWNvZGVJbmRleCBDb2RlQmxvY2s6OmJ5dGVjb2RlSW5kZXhGb3JFeGl0KEJ5
dGVjb2RlSW5kZXggZXhpdEluZGV4KSBjb25zdAoreworICAgIGlmIChleGl0SW5kZXguY2hlY2tw
b2ludCgpKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25z
KCkuYXQoZXhpdEluZGV4KTsKKyAgICAgICAgZXhpdEluZGV4ID0gaW5zdHJ1Y3Rpb24ubmV4dCgp
LmluZGV4KCk7CisgICAgfQorICAgIHJldHVybiBleGl0SW5kZXg7Cit9CiAjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCiAKIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTE4MTYsMTAg
KzE4MjUsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVk
Rm9yQnl0ZWNvZGVJbmRleFNsb3coY29uc3QgT3BDYXRjaCYKICAgICBmb3IgKGludCBpID0gMDsg
aSA8IG51bVBhcmFtZXRlcnMoKTsgKytpKQogICAgICAgICBsaXZlT3BlcmFuZHMuYXBwZW5kKHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKTsKIAotICAgIGF1dG8gcHJvZmlsZXMgPSBtYWtl
VW5pcXVlPFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI+KGxpdmVPcGVyYW5kcy5zaXplKCkp
OworICAgIGF1dG8gcHJvZmlsZXMgPSBtYWtlVW5pcXVlPFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlckJ1ZmZlcj4obGl2ZU9wZXJhbmRzLnNpemUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQo
cHJvZmlsZXMtPm1fc2l6ZSA9PSBsaXZlT3BlcmFuZHMuc2l6ZSgpKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcHJvZmlsZXMtPm1fc2l6ZTsgKytpKQotICAgICAgICBwcm9maWxlcy0+
bV9idWZmZXIuZ2V0KClbaV0ubV9vcGVyYW5kID0gbGl2ZU9wZXJhbmRzW2ldLm9mZnNldCgpOwor
ICAgICAgICBwcm9maWxlcy0+bV9idWZmZXIuZ2V0KClbaV0ubV9vcGVyYW5kID0gbGl2ZU9wZXJh
bmRzW2ldOwogCiAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwogCkBAIC0yNzE4LDcg
KzI3MjcsNyBAQCB2b2lkIENvZGVCbG9jazo6dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlv
bnNBbmRDb3VudExpdmVuZXNzKHVuc2lnbmVkJiBudW1iZQogCiAgICAgaWYgKGF1dG8qIHJhcmVE
YXRhID0gbV9yYXJlRGF0YS5nZXQoKSkgewogICAgICAgICBmb3IgKGF1dG8mIHByb2ZpbGVCdWNr
ZXQgOiByYXJlRGF0YS0+bV9jYXRjaFByb2ZpbGVzKSB7Ci0gICAgICAgICAgICBwcm9maWxlQnVj
a2V0LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAg
ICAgICAgICAgcHJvZmlsZUJ1Y2tldC0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVw
ZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCmluZGV4IDBmOWJiZWFjMjc2
MWE2M2VkNDA5OGUyMjVhZThiZTQ2NzhjN2VjYTcuLjY4ZmQwMWZkOTE0YzVlNDE5ZWI4ODM5Mjc5
ZjU3YWY2MGM0ZDY2MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgKQEAgLTE2Myw2ICsxNjMsNyBAQCBwdWJsaWM6CiAgICAgaW50IG51bUNhbGxlZUxvY2Fs
cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAKICAgICBpbnQgbnVtVmFy
cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQorICAgIGludCBudW1UbXBzKCkgY29uc3Qg
eyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0NoZWNrcG9pbnRzKCkgKiBtYXhOdW1DaGVja3Bv
aW50VG1wczsgfQogCiAgICAgaW50KiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4g
Jm1fbnVtUGFyYW1ldGVyczsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJh
bWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0
ZXJzKTsgfQpAQCAtMjMxLDIwICsyMzIsMjAgQEAgcHVibGljOgogICAgIGJvb2wgaGFzSW5zdGFs
bGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdDsKICAgICBib29sIGluc3RhbGxWTVRyYXBCcmVh
a3BvaW50cygpOwogCi0gICAgaW5saW5lIGJvb2wgaXNLbm93bk5vdEltbWVkaWF0ZShpbnQgaW5k
ZXgpCisgICAgaW5saW5lIGJvb2wgaXNLbm93bk5vdEltbWVkaWF0ZShWaXJ0dWFsUmVnaXN0ZXIg
cmVnKQogICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID09IHRoaXNSZWdpc3RlcigpLm9mZnNldCgp
ICYmICFpc1N0cmljdE1vZGUoKSkKKyAgICAgICAgaWYgKHJlZyA9PSB0aGlzUmVnaXN0ZXIoKSAm
JiAhaXNTdHJpY3RNb2RlKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICBp
ZiAoaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIGdl
dENvbnN0YW50KGluZGV4KS5pc0NlbGwoKTsKKyAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkp
CisgICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsKIAogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVtcG9y
YXJ5UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpCisgICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVt
cG9yYXJ5UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7Ci0gICAgICAgIHJldHVy
biBpbmRleCA+PSBtX251bVZhcnM7CisgICAgICAgIHJldHVybiByZWcub2Zmc2V0KCkgPj0gbV9u
dW1WYXJzOwogICAgIH0KIAogICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9yQnl0ZWNvZGVJbmRl
eChCeXRlY29kZUluZGV4LCBSZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFueUhh
bmRsZXIpOwpAQCAtNTgzLDEwICs1ODQsOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgY29uc3Qg
VmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1
cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29u
c3RhbnRSZWdpc3RlcihpbnQgaW5kZXgpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5k
ZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KLSAgICBzdGF0aWMgQUxXQVlTX0lO
TElORSBib29sIGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGludCBpbmRleCkgeyByZXR1cm4gaW5k
ZXggPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KLSAgICBBTFdBWVNfSU5MSU5FIEpT
VmFsdWUgZ2V0Q29uc3RhbnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVn
aXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdLmdldCgpOyB9Ci0gICAg
QUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24oaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbltpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsg
fQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVn
aXN0ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5k
ZXgoKV07IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJl
Z2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25z
dGFudEluZGV4KCldLmdldCgpOyB9CisgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oVmlydHVhbFJlZ2lzdGVy
IHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb25b
cmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5j
dGlvbkRlY2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgp
OyB9CiAgICAgaW50IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25E
ZWNscy5zaXplKCk7IH0KQEAgLTc3Niw2ICs3NzYsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNl
dE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChDb21waWxhdGlv
blJlc3VsdCk7CiAgICAgCisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4Rm9yRXhpdChC
eXRlY29kZUluZGV4KSBjb25zdDsKICAgICB1aW50MzJfdCBvc3JFeGl0Q291bnRlcigpIGNvbnN0
IHsgcmV0dXJuIG1fb3NyRXhpdENvdW50ZXI7IH0KIAogICAgIHZvaWQgY291bnRPU1JFeGl0KCkg
eyBtX29zckV4aXRDb3VudGVyKys7IH0KQEAgLTg3Niw3ICs4NzcsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKICAgICAgICAg
VmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwogCi0gICAg
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcj4+
IG1fY2F0Y2hQcm9maWxlczsKKyAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZVBy
b2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI+PiBtX2NhdGNoUHJvZmlsZXM7CiAKICAgICAg
ICAgRGlyZWN0RXZhbENvZGVDYWNoZSBtX2RpcmVjdEV2YWxDb2RlQ2FjaGU7CiAgICAgfTsKQEAg
LTk0MywxMCArOTQ0LDEwIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNldENvbnN0YW50UmVnaXN0
ZXJzKGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMsIGNvbnN0
IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24sIFNjcmlwdEV4ZWN1dGFibGUqIHRvcExldmVsRXhlY3V0YWJsZSk7CiAKLSAg
ICB2b2lkIHJlcGxhY2VDb25zdGFudChpbnQgaW5kZXgsIEpTVmFsdWUgdmFsdWUpCisgICAgdm9p
ZCByZXBsYWNlQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZywgSlNWYWx1ZSB2YWx1ZSkKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkgJiYgc3Rh
dGljX2Nhc3Q8c2l6ZV90PihpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSA8IG1f
Y29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKLSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tp
bmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5zZXQoKm1fdm0sIHRoaXMsIHZhbHVl
KTsKKyAgICAgICAgQVNTRVJUKHJlZy5pc0NvbnN0YW50KCkgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90
PihyZWcudG9Db25zdGFudEluZGV4KCkpIDwgbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkpOwor
ICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uc2V0KCpt
X3ZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgYm9vbCBzaG91bGRWaXNpdFN0cm9uZ2x5
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlT3JpZ2luLmgKaW5kZXggMjEwNjgxM2YwYTFlYWE1MTM0ZDBmMzliZDc1MWM3MzE4
ZWJjMDQzMS4uZjk4MjlhMjg2ZjhhYWJmNGQzMzJmZmYxZTcxZWEzYzgzZjliYzYwYSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCkBAIC0xNjAsNyArMTYw
LDkgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGFwcHJveGltYXRlSGFzaChJbmxpbmVDYWxsRnJh
bWUqIHRlcm1pbmFsID0gbnVsbHB0cikgY29uc3Q7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
RnVuY3Rpb24+Ci0gICAgdm9pZCB3YWxrVXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlvbiYpOwor
ICAgIHZvaWQgd2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mKSBjb25zdDsKKworICAg
IGlubGluZSBib29sIGlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50KCkgY29uc3Q7
CiAgICAgCiAgICAgLy8gR2V0IHRoZSBpbmxpbmUgc3RhY2suIFRoaXMgaXMgc2xvdywgYW5kIGlz
IGludGVuZGVkIGZvciBkZWJ1Z2dpbmcgb25seS4KICAgICBWZWN0b3I8Q29kZU9yaWdpbj4gaW5s
aW5lU3RhY2soKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgKaW5kZXggZTRhNTc1YjAzYTdkMWI1OTlhZDBkNTZj
ZWRkZGFmNGJhMDUwMmYzYS4uNDdjNjU3YzhkZjkwMzgzYWY2NWViNWMzYjhhOGIwNTk0ZDBjNGRh
NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29k
ZUxpdmVuZXNzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRl
Y29kZUxpdmVuZXNzLmgKQEAgLTI2LDEyICsyNiwxNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKKyNpbmNsdWRlICJPcGVyYW5kcy5oIgog
I2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFz
cyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7CitjbGFzcyBDb2RlQmxvY2s7CiAKKy8vIE5vdGU6
IEZ1bGwgYnl0ZWNvZGUgbGl2ZW5lc3MgZG9lcyBub3QgdHJhY2sgYW55IGluZm9ybWF0aW9uIGFi
b3V0IHRoZSBsaXZlbmVzcyBvZiB0ZW1wcy4KKy8vIElmIHlvdSB3YW50IHRtcCBsaXZlbmVzcyBm
b3IgYSBjaGVja3BvaW50IGFzayB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQuCiBjbGFzcyBGdWxs
Qnl0ZWNvZGVMaXZlbmVzcyB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
CkBAIC00NywxNSArNTEsMTUgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIH0KICAgICAKLSAgICBib29sIG9wZXJhbmRJc0xpdmUoaW50IG9wZXJh
bmQsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50
IHBvaW50KSBjb25zdAorICAgIGJvb2wgdmlydHVhbFJlZ2lzdGVySXNMaXZlKFZpcnR1YWxSZWdp
c3RlciByZWcsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgTGl2ZW5lc3NDYWxjdWxhdGlv
blBvaW50IHBvaW50KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wZXJhbmRJc0Fsd2F5
c0xpdmUob3BlcmFuZCkgfHwgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUoZ2V0TGl2
ZW5lc3MoYnl0ZWNvZGVJbmRleCwgcG9pbnQpLCBvcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuIHZp
cnR1YWxSZWdpc3RlcklzQWx3YXlzTGl2ZShyZWcpIHx8IHZpcnR1YWxSZWdpc3RlclRoYXRJc05v
dEFsd2F5c0xpdmVJc0xpdmUoZ2V0TGl2ZW5lc3MoYnl0ZWNvZGVJbmRleCwgcG9pbnQpLCByZWcp
OwogICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpczsKICAgICAKLSAgICAvLyBGSVhNRTogVXNlIEZhc3RCaXRWZWN0b3IncyB2aWV3
IG1lY2hhbnNpbSB0byBtYWtlIHRoZW0gY29tcGFjdC4KKyAgICAvLyBGSVhNRTogVXNlIEZhc3RC
aXRWZWN0b3IncyB2aWV3IG1lY2hhbmlzbSB0byBtYWtlIHRoZW0gY29tcGFjdC4KICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0NDI3PFBhc3RlPgogICAg
IFZlY3RvcjxGYXN0Qml0VmVjdG9yLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9iZWZvcmVV
c2VWZWN0b3I7CiAgICAgVmVjdG9yPEZhc3RCaXRWZWN0b3IsIDAsIFVuc2FmZVZlY3Rvck92ZXJm
bG93PiBtX2FmdGVyVXNlVmVjdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0lubGluZUNhbGxGcmFtZS5oCmluZGV4IDk3NTA4YmJmMGM0NWNiOTdhNDc4NTE1OTcwNDE3
MWRkZjZkZDFkYTMuLmUyOWYzODRkMWQwNjcyZmVlYTA3MTIwNWJjYWEyODFhNjQ5YjIyMjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgK
QEAgLTE3OSw3ICsxNzksOCBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICBXcml0ZUJh
cnJpZXI8Q29kZUJsb2NrPiBiYXNlbGluZUNvZGVCbG9jazsKICAgICBDb2RlT3JpZ2luIGRpcmVj
dENhbGxlcjsKIAotICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIHsgMCB9
OyAvLyBEbyBub3QgaW5jbHVkZSBmaXh1cHMuCisgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgOiAyMjsgLy8gRG8gbm90IGluY2x1ZGUgZml4dXBzLgorICAgIHVuc2lnbmVk
IHRtcE9mZnNldCA6IDEwOwogICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDI4OwogICAgIHVuc2ln
bmVkIGtpbmQgOiAzOyAvLyByZWFsIHR5cGUgaXMgS2luZAogICAgIGJvb2wgaXNDbG9zdXJlQ2Fs
bCA6IDE7IC8vIElmIGZhbHNlIHRoZW4gd2Uga25vdyB0aGF0IGNhbGxlZS9zY29wZSBhcmUgY29u
c3RhbnRzIGFuZCB0aGUgREZHIHdvbid0IHRyZWF0IHRoZW0gYXMgdmFyaWFibGVzLCBpLmUuIHRo
ZXkgaGF2ZSB0byBiZSByZWNvdmVyZWQgbWFudWFsbHkuCkBAIC0xOTEsNyArMTkyLDkgQEAgc3Ry
dWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgLy8gSW5saW5lQ2FsbEZyYW1lJ3MgZmllbGRzLiBU
aGlzIGNvbnN0cnVjdG9yIGlzIGhlcmUganVzdCB0byByZWR1Y2UgY29uZnVzaW9uIGlmCiAgICAg
Ly8gd2UgZm9yZ290IHRvIGluaXRpYWxpemUgZXhwbGljaXRseS4KICAgICBJbmxpbmVDYWxsRnJh
bWUoKQotICAgICAgICA6IHN0YWNrT2Zmc2V0KDApCisgICAgICAgIDogYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMoMCkKKyAgICAgICAgLCB0bXBPZmZzZXQoMCkKKyAgICAgICAgLCBzdGFja09m
ZnNldCgwKQogICAgICAgICAsIGtpbmQoQ2FsbCkKICAgICAgICAgLCBpc0Nsb3N1cmVDYWxsKGZh
bHNlKQogICAgIHsKQEAgLTIxOSw2ICsyMjIsMTIgQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRpY19jYXN0PHNpZ25lZD4oc3RhY2tPZmZzZXQp
ID09IG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCBzZXRUbXBPZmZzZXQodW5zaWduZWQgb2Zm
c2V0KQorICAgIHsKKyAgICAgICAgdG1wT2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICBSRUxFQVNF
X0FTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4odG1wT2Zmc2V0KSA9PSBvZmZzZXQpOworICAg
IH0KKwogICAgIHB0cmRpZmZfdCBjYWxsZXJGcmFtZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIHN0
YWNrT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZz
ZXQoKTsgfQogICAgIHB0cmRpZmZfdCByZXR1cm5QQ09mZnNldCgpIGNvbnN0IHsgcmV0dXJuIHN0
YWNrT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQo
KTsgfQogCkBAIC0yNDcsOSArMjU2LDkgQEAgaW5saW5lIENvZGVCbG9jayogYmFzZWxpbmVDb2Rl
QmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhjb25zdCBDb2RlT3JpZ2kKICAgICBy
ZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2s7CiB9CiAKLS8vIFRoaXMgZnVuY3Rpb24gaXMgZGVmaW5l
ZCBoZXJlIGFuZCBub3QgaW4gQ29kZU9yaWdpbiBiZWNhdXNlIGl0IG5lZWRzIGFjY2VzcyB0byB0
aGUgZGlyZWN0Q2FsbGVyIGZpZWxkIGluIElubGluZUNhbGxGcmFtZQorLy8gVGhlc2UgZnVuY3Rp
b24gaXMgZGVmaW5lZCBoZXJlIGFuZCBub3QgaW4gQ29kZU9yaWdpbiBiZWNhdXNlIGl0IG5lZWRz
IGFjY2VzcyB0byB0aGUgZGlyZWN0Q2FsbGVyIGZpZWxkIGluIElubGluZUNhbGxGcmFtZQogdGVt
cGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgotaW5saW5lIHZvaWQgQ29kZU9yaWdpbjo6d2Fsa1Vw
SW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9uKQoraW5saW5lIHZvaWQgQ29kZU9y
aWdpbjo6d2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9uKSBjb25zdAog
ewogICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9ICp0aGlzOwogICAgIHdoaWxlICh0cnVlKSB7
CkBAIC0yNjEsMTEgKzI3MCwzOCBAQCBpbmxpbmUgdm9pZCBDb2RlT3JpZ2luOjp3YWxrVXBJbmxp
bmVTdGFjayhjb25zdCBGdW5jdGlvbiYgZnVuY3Rpb24pCiAgICAgfQogfQogCi1BTFdBWVNfSU5M
SU5FIFZpcnR1YWxSZWdpc3RlciByZW1hcE9wZXJhbmQoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciByZWcpCitpbmxpbmUgYm9vbCBDb2RlT3JpZ2luOjpp
bmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCgpIGNvbnN0Cit7CisgICAgYm9vbCBy
ZXN1bHQgPSBmYWxzZTsKKyAgICB3YWxrVXBJbmxpbmVTdGFjayhbJl0gKENvZGVPcmlnaW4gb3Jp
Z2luKSB7CisgICAgICAgIGlmIChvcmlnaW4uYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSkK
KyAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworQUxXQVlTX0lOTElORSBPcGVyYW5kIHJlbWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZCBvcGVyYW5kKQoreworICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUpCisgICAgICAgIHJldHVybiBvcGVyYW5kLmlzVG1wKCkgPyBPcGVyYW5kOjp0bXAob3Bl
cmFuZC52YWx1ZSgpICsgaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQpIDogb3BlcmFuZC52aXJ0
dWFsUmVnaXN0ZXIoKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CisgICAgcmV0dXJu
IG9wZXJhbmQ7Cit9CisKK0FMV0FZU19JTkxJTkUgT3BlcmFuZCByZW1hcE9wZXJhbmQoSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciByZWcpCit7CisgICAg
cmV0dXJuIHJlbWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQocmVnKSk7Cit9CisK
K0FMV0FZU19JTkxJTkUgT3BlcmFuZCB1bm1hcE9wZXJhbmQoSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUsIE9wZXJhbmQgb3BlcmFuZCkKIHsKICAgICBpZiAoaW5saW5lQ2FsbEZyYW1l
KQotICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKHJlZy5vZmZzZXQoKSArIGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQpOwotICAgIHJldHVybiByZWc7CisgICAgICAgIHJldHVybiBv
cGVyYW5kLmlzVG1wKCkgPyBPcGVyYW5kOjp0bXAob3BlcmFuZC52YWx1ZSgpIC0gaW5saW5lQ2Fs
bEZyYW1lLT50bXBPZmZzZXQpIDogT3BlcmFuZChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpIC0g
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCk7CisgICAgcmV0dXJuIG9wZXJhbmQ7Cit9CisK
K0FMV0FZU19JTkxJTkUgT3BlcmFuZCB1bm1hcE9wZXJhbmQoSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciByZWcpCit7CisgICAgcmV0dXJuIHVubWFwT3Bl
cmFuZChpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQocmVnKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVy
YW5kVmFsdWVQcm9maWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGUuaAppbmRleCBiZmI5NGIzNWZjZDYzOWE0YTFmMWQwMGM4YWJiMTQ1
ZWIxYzY0YTU5Li44MWY1YTBjNDg5YzRlZjZkZGNiYTZlMWI0NjJkNzJkOWU5ODY0NmQ3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRW
YWx1ZVByb2ZpbGUuaApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJDb25jdXJyZW50SlNMb2NrLmgiCisjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlICJW
YWx1ZVByb2ZpbGUuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgpAQCAtNDksNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAg
ICAKLSAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleShCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXgsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIExhenlPcGVyYW5kVmFsdWVQcm9m
aWxlS2V5KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgT3BlcmFuZCBvcGVyYW5kKQogICAg
ICAgICA6IG1fYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICAsIG1fb3BlcmFu
ZChvcGVyYW5kKQogICAgIHsKQEAgLTY5LDcgKzcwLDcgQEAgcHVibGljOgogICAgIAogICAgIHVu
c2lnbmVkIGhhc2goKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRl
eC5oYXNoKCkgKyBtX29wZXJhbmQub2Zmc2V0KCk7CisgICAgICAgIHJldHVybiBtX2J5dGVjb2Rl
SW5kZXguaGFzaCgpICsgbV9vcGVyYW5kLnZhbHVlKCkgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bV9vcGVyYW5kLmtpbmQoKSk7CiAgICAgfQogICAgIAogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCgpIGNvbnN0CkBAIC03OCw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IG1fYnl0ZWNvZGVJbmRleDsKICAgICB9CiAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCgp
IGNvbnN0CisgICAgT3BlcmFuZCBvcGVyYW5kKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VS
VCghISp0aGlzKTsKICAgICAgICAgcmV0dXJuIG1fb3BlcmFuZDsKQEAgLTkwLDcgKzkxLDcgQEAg
cHVibGljOgogICAgIH0KIHByaXZhdGU6IAogICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUlu
ZGV4OwotICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgT3BlcmFuZCBtX29wZXJh
bmQ7CiB9OwogCiBzdHJ1Y3QgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXlIYXNoIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlLmNwcAppbmRleCAyYjY5ZjM2YzdmYmRhMTA1NTc4OWRmZmRlNjdm
Mzk2Zjg2ZTJiNTAzLi43MDFjMzMwODliOTU2Zjc5Nzg2ZWM4N2FhMmM2OWE4YmMwNjcwNDcyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCkBAIC00Miw3ICs0Miw3IEBAIE1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGUgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZnJvbUxh
enlPcGVyYW5kKAogICAgIHJlc3VsdC5tX2tpbmQgPSBMYXp5T3BlcmFuZDsKICAgICByZXN1bHQu
dS5sYXp5T3BlcmFuZC5jb2RlQmxvY2sgPSBjb2RlQmxvY2s7CiAgICAgcmVzdWx0LnUubGF6eU9w
ZXJhbmQuYnl0ZWNvZGVPZmZzZXQgPSBrZXkuYnl0ZWNvZGVJbmRleCgpOwotICAgIHJlc3VsdC51
LmxhenlPcGVyYW5kLm9wZXJhbmQgPSBrZXkub3BlcmFuZCgpLm9mZnNldCgpOworICAgIHJlc3Vs
dC51LmxhenlPcGVyYW5kLm9wZXJhbmQgPSBrZXkub3BlcmFuZCgpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlOjplbWl0UmVwb3J0VmFsdWUoQ0NhbGxIZWxwZXJzJiBqaXQsIEpTVmFsdWVSZWcKICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIExhenlPcGVyYW5kOiB7Ci0gICAgICAgIExh
enlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVyYW5kLmJ5dGVjb2RlT2Zmc2V0
LCBWaXJ0dWFsUmVnaXN0ZXIodS5sYXp5T3BlcmFuZC5vcGVyYW5kKSk7CisgICAgICAgIExhenlP
cGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVyYW5kLmJ5dGVjb2RlT2Zmc2V0LCB1
LmxhenlPcGVyYW5kLm9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcih1LmxhenlPcGVyYW5kLmNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAgICAgTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPQpAQCAtOTEsNyArOTEsNyBAQCB2b2lkIE1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OnJlcG9ydFZhbHVlKEpTVmFsdWUgdmFsdWUpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgTGF6eU9wZXJhbmQ6IHsKLSAgICAgICAgTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNvZGVPZmZzZXQsIFZp
cnR1YWxSZWdpc3Rlcih1LmxhenlPcGVyYW5kLm9wZXJhbmQpKTsKKyAgICAgICAgTGF6eU9wZXJh
bmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNvZGVPZmZzZXQsIHUubGF6
eU9wZXJhbmQub3BlcmFuZCk7CiAKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcih1
LmxhenlPcGVyYW5kLmNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAgICAgTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGUqIHByb2ZpbGUgPQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgKaW5kZXggNTdiNGIx
NzcyZjA0ZmJkZjMzNjg1MDU0MzY1N2MxNWQ5YzQxZGI0ZS4uZThiNjVlYWQ0NmU0NzUwNTM1Y2Qw
YTlkYmY4MGFlMzliMGI0YTFjYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oCkBAIC0xMDcs
NyArMTA3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIENvZGVC
bG9jayogY29kZUJsb2NrOwogICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNl
dDsKLSAgICAgICAgICAgIGludCBvcGVyYW5kOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5k
OwogICAgICAgICB9IGxhenlPcGVyYW5kOwogICAgIH0gdTsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCmluZGV4IGYyOWZmOWY5NzM2YWViMzczNDU5NDQ2ZGM3
NGNkMTIwMjc1NjI1NzYuLmQ0N2E2OGY2NDAzOGUzYjFkYzU1N2E0NGQ3MDg1MDQwMjc0MjBiZmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTEx
ICszNSwyMjcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBPcGVyYW5kVmFsdWVUcmFpdHM7CiAKLWVudW0gT3BlcmFuZEtpbmQgeyBBcmd1bWVudE9wZXJh
bmQsIExvY2FsT3BlcmFuZCB9OworY29uc3RleHByIHVuc2lnbmVkIG1heE51bUNoZWNrcG9pbnRU
bXBzID0gNDsKKworLy8gQSBPcGVyYW5kS2luZDo6VG1wIGlzIG9uZSB0aGF0IGV4aXN0cyBmb3Ig
ZXhpdGluZyB0byBhIGNoZWNrcG9pbnQgYnV0IGRvZXMgbm90IGV4aXN0IGJldHdlZW4gYnl0ZWNv
ZGVzLgorZW51bSBjbGFzcyBPcGVyYW5kS2luZCB7IEFyZ3VtZW50LCBMb2NhbCwgVG1wIH07CisK
K2NsYXNzIE9wZXJhbmQgeworcHVibGljOgorICAgIE9wZXJhbmQoKSA9IGRlZmF1bHQ7CisgICAg
T3BlcmFuZChjb25zdCBPcGVyYW5kJikgPSBkZWZhdWx0OworCisgICAgT3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgOiBtX2tpbmQob3BlcmFuZC5pc0xvY2FsKCkgPyBP
cGVyYW5kS2luZDo6TG9jYWwgOiBPcGVyYW5kS2luZDo6QXJndW1lbnQpCisgICAgICAgICwgbV9v
cGVyYW5kKG9wZXJhbmQub2Zmc2V0KCkpCisgICAgeyB9CisKKyAgICBPcGVyYW5kKE9wZXJhbmRL
aW5kIGtpbmQsIGludCBvcGVyYW5kKQorICAgICAgICA6IG1fa2luZChraW5kKQorICAgICAgICAs
IG1fb3BlcmFuZChvcGVyYW5kKQorICAgIHsgCisgICAgICAgIEFTU0VSVChraW5kID09IE9wZXJh
bmRLaW5kOjpUbXAgfHwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLmlzTG9jYWwoKSA9PSAoa2lu
ZCA9PSBPcGVyYW5kS2luZDo6TG9jYWwpKTsKKyAgICB9CisgICAgc3RhdGljIE9wZXJhbmQgdG1w
KHVpbnQzMl90IGluZGV4KSB7IHJldHVybiBPcGVyYW5kKE9wZXJhbmRLaW5kOjpUbXAsIGluZGV4
KTsgfQorCisgICAgT3BlcmFuZEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQor
ICAgIGludCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmFuZDsgfQorICAgIFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
a2luZCAhPSBPcGVyYW5kS2luZDo6VG1wKTsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3Rl
cihtX29wZXJhbmQpOworICAgIH0KKyAgICB1aW50NjRfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVy
biBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KCp0aGlzKTsgfQorICAgIHN0YXRpYyBPcGVyYW5kIGZy
b21CaXRzKHVpbnQ2NF90IHZhbHVlKTsKKworICAgIGJvb2wgaXNUbXAoKSBjb25zdCB7IHJldHVy
biBraW5kKCkgPT0gT3BlcmFuZEtpbmQ6OlRtcDsgfQorICAgIGJvb2wgaXNBcmd1bWVudCgpIGNv
bnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBPcGVyYW5kS2luZDo6QXJndW1lbnQ7IH0KKyAgICBib29s
IGlzTG9jYWwoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gT3BlcmFuZEtpbmQ6OkxvY2FsICYm
IHZpcnR1YWxSZWdpc3RlcigpLmlzTG9jYWwoKTsgfQorICAgIGJvb2wgaXNIZWFkZXIoKSBjb25z
dCB7IHJldHVybiBraW5kKCkgIT0gT3BlcmFuZEtpbmQ6OlRtcCAmJiB2aXJ0dWFsUmVnaXN0ZXIo
KS5pc0hlYWRlcigpOyB9CisgICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4ga2lu
ZCgpICE9IE9wZXJhbmRLaW5kOjpUbXAgJiYgdmlydHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFudCgp
OyB9CisKKyAgICBpbnQgdG9Bcmd1bWVudCgpIGNvbnN0IHsgQVNTRVJUKGlzQXJndW1lbnQoKSk7
IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXIoKS50b0FyZ3VtZW50KCk7IH0KKyAgICBpbnQgdG9Mb2Nh
bCgpIGNvbnN0IHsgQVNTRVJUKGlzTG9jYWwoKSk7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXIoKS50
b0xvY2FsKCk7IH0KKworICAgIGlubGluZSBib29sIGlzVmFsaWQoKSBjb25zdDsKKworICAgIGlu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgT3BlcmFuZCYpIGNvbnN0OworCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgT3BlcmFuZEtpbmQgbV9r
aW5kIHsgT3BlcmFuZEtpbmQ6OkFyZ3VtZW50IH07CisgICAgaW50IG1fb3BlcmFuZCB7IFZpcnR1
YWxSZWdpc3Rlcjo6aW52YWxpZFZpcnR1YWxSZWdpc3RlciB9OworfTsKKworQUxXQVlTX0lOTElO
RSBib29sIE9wZXJhbmQ6Om9wZXJhdG9yPT0oY29uc3QgT3BlcmFuZCYgb3RoZXIpIGNvbnN0Cit7
CisgICAgaWYgKGtpbmQoKSAhPSBvdGhlci5raW5kKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoaXNUbXAoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlKCkgPT0gb3RoZXIudmFsdWUo
KTsKKyAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyKCkgPT0gb3RoZXIudmlydHVhbFJlZ2lzdGVy
KCk7Cit9CisKK2lubGluZSBib29sIE9wZXJhbmQ6OmlzVmFsaWQoKSBjb25zdAoreworICAgIGlm
IChpc1RtcCgpKQorICAgICAgICByZXR1cm4gdmFsdWUoKSA+PSAwOworICAgIHJldHVybiB2aXJ0
dWFsUmVnaXN0ZXIoKS5pc1ZhbGlkKCk7Cit9CisKK2lubGluZSBPcGVyYW5kIE9wZXJhbmQ6OmZy
b21CaXRzKHVpbnQ2NF90IHZhbHVlKQoreworICAgIE9wZXJhbmQgcmVzdWx0ID0gYml0d2lzZV9j
YXN0PE9wZXJhbmQ+KHZhbHVlKTsKKyAgICBBU1NFUlQocmVzdWx0LmlzVmFsaWQoKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljX2Fzc2VydChzaXplb2YoT3BlcmFuZCkgPT0gc2l6
ZW9mKHVpbnQ2NF90KSwgIk9wZXJhbmQ6OmFzQml0cygpIHJlbGllcyBvbiB0aGlzLiIpOwogCiBl
bnVtIE9wZXJhbmRzTGlrZVRhZyB7IE9wZXJhbmRzTGlrZSB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgogY2xhc3MgT3BlcmFuZHMgewogcHVibGljOgotICAgIE9wZXJhbmRzKCkKLSAgICAgICAg
OiBtX251bUFyZ3VtZW50cygwKSB7IH0KLSAgICAKLSAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXpl
X3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzKQorICAgIHVzaW5nIFN0b3JhZ2UgPSBz
dGQ6OmNvbmRpdGlvbmFsX3Q8c3RkOjppc19zYW1lX3Y8VCwgYm9vbD4sIEZhc3RCaXRWZWN0b3Is
IFZlY3RvcjxULCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4+OworICAgIHVzaW5nIFJlZlR5cGUg
PSBzdGQ6OmNvbmRpdGlvbmFsX3Q8c3RkOjppc19zYW1lX3Y8VCwgYm9vbD4sIEZhc3RCaXRSZWZl
cmVuY2UsIFQmPjsKKyAgICB1c2luZyBDb25zdFJlZlR5cGUgPSBzdGQ6OmNvbmRpdGlvbmFsX3Q8
c3RkOjppc19zYW1lX3Y8VCwgYm9vbD4sIGJvb2wsIGNvbnN0IFQmPjsKKworICAgIE9wZXJhbmRz
KCkgPSBkZWZhdWx0OworCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50
cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMpCiAgICAgICAgIDogbV9udW1Bcmd1
bWVudHMobnVtQXJndW1lbnRzKQorICAgICAgICAsIG1fbnVtTG9jYWxzKG51bUxvY2FscykKICAg
ICB7Ci0gICAgICAgIGlmIChXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlv
bikgewotICAgICAgICAgICAgbV92YWx1ZXMucmVzaXplKG51bUFyZ3VtZW50cyArIG51bUxvY2Fs
cyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX3ZhbHVlcy5maWxsKFQoKSwgbnVt
QXJndW1lbnRzICsgbnVtTG9jYWxzKTsKLSAgICAgICAgfQorICAgICAgICBzaXplX3Qgc2l6ZSA9
IG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRtcHM7CisgICAgICAgIG1fdmFsdWVzLmdy
b3coc2l6ZSk7CisgICAgICAgIGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlh
bGl6YXRpb24pCisgICAgICAgICAgICBtX3ZhbHVlcy5maWxsKFQoKSk7CiAgICAgfQogCi0gICAg
ZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywg
Y29uc3QgVCYgaW5pdGlhbFZhbHVlKQorICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1B
cmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIHNpemVfdCBudW1UbXBzLCBjb25zdCBUJiBpbml0
aWFsVmFsdWUpCiAgICAgICAgIDogbV9udW1Bcmd1bWVudHMobnVtQXJndW1lbnRzKQorICAgICAg
ICAsIG1fbnVtTG9jYWxzKG51bUxvY2FscykKICAgICB7Ci0gICAgICAgIG1fdmFsdWVzLmZpbGwo
aW5pdGlhbFZhbHVlLCBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMpOworICAgICAgICBtX3ZhbHVl
cy5ncm93KG51bUFyZ3VtZW50cyArIG51bUxvY2FscyArIG51bVRtcHMpOworICAgICAgICBtX3Zh
bHVlcy5maWxsKGluaXRpYWxWYWx1ZSk7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+Ci0gICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtlVGFnLCBjb25zdCBPcGVy
YW5kczxVPiYgb3RoZXIpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtlVGFnLCBj
b25zdCBPcGVyYW5kczxVPiYgb3RoZXIsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSA9IFQoKSkKICAg
ICAgICAgOiBtX251bUFyZ3VtZW50cyhvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKQorICAgICAg
ICAsIG1fbnVtTG9jYWxzKG90aGVyLm51bWJlck9mTG9jYWxzKCkpCiAgICAgewotICAgICAgICBt
X3ZhbHVlcy5maWxsKFQoKSwgb3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSArIG90aGVyLm51bWJl
ck9mTG9jYWxzKCkpOworICAgICAgICBtX3ZhbHVlcy5ncm93KG90aGVyLnNpemUoKSk7CisgICAg
ICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKICAgICB9Ci0gICAgCisKICAgICBzaXpl
X3QgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUFyZ3VtZW50czsgfQot
ICAgIHNpemVfdCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUo
KSAtIG1fbnVtQXJndW1lbnRzOyB9Ci0gICAgCisgICAgc2l6ZV90IG51bWJlck9mTG9jYWxzKCkg
Y29uc3QgeyByZXR1cm4gbV9udW1Mb2NhbHM7IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZUbXBzKCkg
Y29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51
bWJlck9mTG9jYWxzKCk7IH0KKworICAgIHNpemVfdCB0bXBJbmRleChzaXplX3QgaWR4KSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mVG1wcygpKTsKKyAgICAgICAg
cmV0dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpOworICAg
IH0KICAgICBzaXplX3QgYXJndW1lbnRJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKLSAg
ICAgICAgQVNTRVJUKGlkeCA8IG1fbnVtQXJndW1lbnRzKTsKKyAgICAgICAgQVNTRVJUKGlkeCA8
IG51bWJlck9mQXJndW1lbnRzKCkpOwogICAgICAgICByZXR1cm4gaWR4OwogICAgIH0KICAgICAK
ICAgICBzaXplX3QgbG9jYWxJbmRleChzaXplX3QgaWR4KSBjb25zdAogICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fbnVtQXJndW1lbnRzICsgaWR4OworICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVy
T2ZMb2NhbHMoKSk7CisgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4Owog
ICAgIH0KKworICAgIFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW3Rt
cEluZGV4KGlkeCldOyB9CisgICAgQ29uc3RSZWZUeXBlIHRtcChzaXplX3QgaWR4KSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlc1t0bXBJbmRleChpZHgpXTsgfQogICAgIAotICAgIFQmIGFyZ3VtZW50
KHNpemVfdCBpZHgpCi0gICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRl
eChpZHgpXTsKLSAgICB9Ci0gICAgY29uc3QgVCYgYXJndW1lbnQoc2l6ZV90IGlkeCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOwotICAg
IH0KKyAgICBSZWZUeXBlIGFyZ3VtZW50KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2Fy
Z3VtZW50SW5kZXgoaWR4KV07IH0KKyAgICBDb25zdFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlk
eCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRleChpZHgpXTsgfQogICAgIAot
ICAgIFQmIGxvY2FsKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4
KV07IH0KLSAgICBjb25zdCBUJiBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisgICAgUmVmVHlwZSBsb2NhbChzaXplX3QgaWR4KSB7
IHJldHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisgICAgQ29uc3RSZWZUeXBlIGxv
Y2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07
IH0KICAgICAKICAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KICAgICBzaXpl
X3Qgc2l6ZUZvcigpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAob3BlcmFuZEtpbmQgPT0gQXJn
dW1lbnRPcGVyYW5kKQorICAgICAgICBzd2l0Y2ggKG9wZXJhbmRLaW5kKSB7CisgICAgICAgIGNh
c2UgT3BlcmFuZEtpbmQ6OlRtcDoKKyAgICAgICAgICAgIHJldHVybiBudW1iZXJPZlRtcHMoKTsK
KyAgICAgICAgY2FzZSBPcGVyYW5kS2luZDo6QXJndW1lbnQ6CiAgICAgICAgICAgICByZXR1cm4g
bnVtYmVyT2ZBcmd1bWVudHMoKTsKLSAgICAgICAgcmV0dXJuIG51bWJlck9mTG9jYWxzKCk7Cisg
ICAgICAgIGNhc2UgT3BlcmFuZEtpbmQ6OkxvY2FsOgorICAgICAgICAgICAgcmV0dXJuIG51bWJl
ck9mTG9jYWxzKCk7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5k
IG9wZXJhbmRLaW5kPgotICAgIFQmIGF0Rm9yKHNpemVfdCBpZHgpCisgICAgUmVmVHlwZSBhdEZv
cihzaXplX3QgaWR4KQogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRLaW5kID09IEFyZ3VtZW50
T3BlcmFuZCkKKyAgICAgICAgc3dpdGNoIChvcGVyYW5kS2luZCkgeworICAgICAgICBjYXNlIE9w
ZXJhbmRLaW5kOjpUbXA6CisgICAgICAgICAgICByZXR1cm4gdG1wKGlkeCk7CisgICAgICAgIGNh
c2UgT3BlcmFuZEtpbmQ6OkFyZ3VtZW50OgogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KGlk
eCk7Ci0gICAgICAgIHJldHVybiBsb2NhbChpZHgpOworICAgICAgICBjYXNlIE9wZXJhbmRLaW5k
OjpMb2NhbDoKKyAgICAgICAgICAgIHJldHVybiBsb2NhbChpZHgpOworICAgICAgICB9CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB0bXAoMCk7
CiAgICAgfQogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgotICAgIGNvbnN0
IFQmIGF0Rm9yKHNpemVfdCBpZHgpIGNvbnN0CisgICAgQ29uc3RSZWZUeXBlIGF0Rm9yKHNpemVf
dCBpZHgpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAob3BlcmFuZEtpbmQgPT0gQXJndW1lbnRP
cGVyYW5kKQorICAgICAgICBzd2l0Y2ggKG9wZXJhbmRLaW5kKSB7CisgICAgICAgIGNhc2UgT3Bl
cmFuZEtpbmQ6OlRtcDoKKyAgICAgICAgICAgIHJldHVybiB0bXAoaWR4KTsKKyAgICAgICAgY2Fz
ZSBPcGVyYW5kS2luZDo6QXJndW1lbnQ6CiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQoaWR4
KTsKLSAgICAgICAgcmV0dXJuIGxvY2FsKGlkeCk7CisgICAgICAgIGNhc2UgT3BlcmFuZEtpbmQ6
OkxvY2FsOgorICAgICAgICAgICAgcmV0dXJuIGxvY2FsKGlkeCk7CisgICAgICAgIH0KKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHRtcCgwKTsK
ICAgICB9Ci0gICAgCi0gICAgdm9pZCBlbnN1cmVMb2NhbHMoc2l6ZV90IHNpemUpCisKKyAgICB2
b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSwgY29uc3QgVCYgZW5zdXJlZFZhbHVlID0gVCgp
KQogICAgIHsKLSAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7Ci0gICAg
ICAgIHNpemVfdCBuZXdTaXplID0gbV9udW1Bcmd1bWVudHMgKyBzaXplOwotICAgICAgICBpZiAo
bmV3U2l6ZSA8PSBvbGRTaXplKQorICAgICAgICBpZiAoc2l6ZSA8PSBudW1iZXJPZkxvY2Fscygp
KQogICAgICAgICAgICAgcmV0dXJuOwogCisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVy
T2ZBcmd1bWVudHMoKSArIG51bWJlck9mVG1wcygpICsgc2l6ZTsKKyAgICAgICAgc2l6ZV90IG9s
ZE51bUxvY2FscyA9IG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHNpemVfdCBvbGROdW1UbXBz
ID0gbnVtYmVyT2ZUbXBzKCk7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7Ci0gICAg
ICAgIGlmICghV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pIHsKLSAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbV92YWx1ZXMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgICAgICAgICAgbV92YWx1ZXNbaV0gPSBUKCk7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgb2xkTnVtVG1wczsgKytpKQorICAgICAgICAgICAgbV92YWx1ZXNbbmV3
U2l6ZSAtIDEgLSBpXSA9IG1fdmFsdWVzW3RtcEluZGV4KG9sZE51bVRtcHMgLSAxIC0gaSldOwor
CisgICAgICAgIG1fbnVtTG9jYWxzID0gc2l6ZTsKKyAgICAgICAgaWYgKGVuc3VyZWRWYWx1ZSAh
PSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKSB7Cisg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUgLSBvbGROdW1Mb2NhbHM7ICsr
aSkKKyAgICAgICAgICAgICAgICBtX3ZhbHVlc1tsb2NhbEluZGV4KG9sZE51bUxvY2FscyArIGkp
XSA9IGVuc3VyZWRWYWx1ZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQgZW5zdXJlTG9j
YWxzKHNpemVfdCBzaXplLCBjb25zdCBUJiBlbnN1cmVkVmFsdWUpCisgICAgdm9pZCBlbnN1cmVU
bXBzKHNpemVfdCBzaXplLCBjb25zdCBUJiBlbnN1cmVkVmFsdWUgPSBUKCkpCiAgICAgewotICAg
ICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsKLSAgICAgICAgc2l6ZV90IG5l
d1NpemUgPSBtX251bUFyZ3VtZW50cyArIHNpemU7Ci0gICAgICAgIGlmIChuZXdTaXplIDw9IG9s
ZFNpemUpCisgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mVG1wcygpKQogICAgICAgICAgICAg
cmV0dXJuOwogCisgICAgICAgIHNpemVfdCBvbGRTaXplID0gbV92YWx1ZXMuc2l6ZSgpOworICAg
ICAgICBzaXplX3QgbmV3U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2Fs
cygpICsgc2l6ZTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXplKTsKLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX3ZhbHVlcy5zaXplKCk7ICsraSkKLSAgICAgICAg
ICAgIG1fdmFsdWVzW2ldID0gZW5zdXJlZFZhbHVlOworCisgICAgICAgIGlmIChlbnN1cmVkVmFs
dWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikg
eworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBuZXdTaXplOyArK2kp
CisgICAgICAgICAgICAgICAgbV92YWx1ZXNbaV0gPSBlbnN1cmVkVmFsdWU7CisgICAgICAgIH0K
ICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXRMb2NhbChzaXplX3QgaWR4LCBjb25zdCBUJiB2YWx1
ZSkKQEAgLTE2NCw4NCArMjgwLDc2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGlkeCA+PSBu
dW1iZXJPZkxvY2FscygpIHx8IGxvY2FsKGlkeCkgPT0gVCgpKTsKICAgICAgICAgc2V0TG9jYWwo
aWR4LCB2YWx1ZSk7CiAgICAgfQotICAgIAotICAgIHNpemVfdCBvcGVyYW5kSW5kZXgoaW50IG9w
ZXJhbmQpIGNvbnN0CisKKyAgICBSZWZUeXBlIGdldEZvck9wZXJhbmRJbmRleChzaXplX3QgaW5k
ZXgpIHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIENvbnN0UmVmVHlwZSBnZXRGb3JP
cGVyYW5kSW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PE9wZXJh
bmRzKj4odGhpcyktPmdldEZvck9wZXJhbmRJbmRleChpbmRleCk7IH0KKworICAgIHNpemVfdCBv
cGVyYW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0CiAgICAgewotICAgICAg
ICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICByZXR1cm4gYXJn
dW1lbnRJbmRleChWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Bcmd1bWVudCgpKTsKLSAgICAg
ICAgcmV0dXJuIGxvY2FsSW5kZXgoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKSk7
CisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBh
cmd1bWVudEluZGV4KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsKKyAgICAgICAgcmV0dXJuIGxvY2Fs
SW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KICAgICAKLSAgICBzaXplX3Qgb3BlcmFu
ZEluZGV4KFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpIGNvbnN0CisgICAgc2l6ZV90
IG9wZXJhbmRJbmRleChPcGVyYW5kIG9wKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG9w
ZXJhbmRJbmRleCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkpOworICAgICAgICBpZiAoIW9wLmlz
VG1wKCkpCisgICAgICAgICAgICByZXR1cm4gb3BlcmFuZEluZGV4KG9wLnZpcnR1YWxSZWdpc3Rl
cigpKTsKKyAgICAgICAgcmV0dXJuIHRtcEluZGV4KG9wLnZhbHVlKCkpOwogICAgIH0KICAgICAK
LSAgICBUJiBvcGVyYW5kKGludCBvcGVyYW5kKQorICAgIFJlZlR5cGUgb3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChv
cGVyYW5kKSkKLSAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChWaXJ0dWFsUmVnaXN0ZXIob3Bl
cmFuZCkudG9Bcmd1bWVudCgpKTsKLSAgICAgICAgcmV0dXJuIGxvY2FsKFZpcnR1YWxSZWdpc3Rl
cihvcGVyYW5kKS50b0xvY2FsKCkpOworICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkp
CisgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQob3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAg
ICAgICByZXR1cm4gbG9jYWwob3BlcmFuZC50b0xvY2FsKCkpOwogICAgIH0KIAotICAgIFQmIG9w
ZXJhbmQoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKKyAgICBSZWZUeXBlIG9wZXJh
bmQoT3BlcmFuZCBvcCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcGVyYW5kKHZpcnR1YWxSZWdp
c3Rlci5vZmZzZXQoKSk7CisgICAgICAgIGlmICghb3AuaXNUbXAoKSkKKyAgICAgICAgICAgIHJl
dHVybiBvcGVyYW5kKG9wLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgcmV0dXJuIHRtcChv
cC52YWx1ZSgpKTsKICAgICB9CiAKLSAgICBjb25zdCBUJiBvcGVyYW5kKGludCBvcGVyYW5kKSBj
b25zdCB7IHJldHVybiBjb25zdF9jYXN0PGNvbnN0IFQmPihjb25zdF9jYXN0PE9wZXJhbmRzKj4o
dGhpcyktPm9wZXJhbmQob3BlcmFuZCkpOyB9Ci0gICAgY29uc3QgVCYgb3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBUJj4oY29u
c3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQpKTsgfQorICAgIENvbnN0
UmVmVHlwZSBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdCB7IHJldHVybiBj
b25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCk7IH0KKyAgICBDb25z
dFJlZlR5cGUgb3BlcmFuZChPcGVyYW5kIG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nh
c3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKTsgfQogICAgIAotICAgIGJvb2wg
aGFzT3BlcmFuZChpbnQgb3BlcmFuZCkgY29uc3QKKyAgICBib29sIGhhc09wZXJhbmQoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAob3BlcmFuZElzQXJn
dW1lbnQob3BlcmFuZCkpCisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihW
aXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpKSA8IG51bWJlck9mTG9jYWxzKCk7Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Mb2NhbCgpKSA8IG51
bWJlck9mTG9jYWxzKCk7CiAgICAgfQotICAgIGJvb2wgaGFzT3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIgcmVnKSBjb25zdAorICAgIGJvb2wgaGFzT3BlcmFuZChPcGVyYW5kIG9wKSBjb25zdAogICAg
IHsKLSAgICAgICAgcmV0dXJuIGhhc09wZXJhbmQocmVnLm9mZnNldCgpKTsKKyAgICAgICAgaWYg
KG9wLmlzVG1wKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChvcC52YWx1ZSgpID49IDApOworICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3AudmFsdWUoKSkgPCBudW1iZXJP
ZlRtcHMoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaGFzT3BlcmFuZChvcC52aXJ0dWFs
UmVnaXN0ZXIoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0T3BlcmFuZChpbnQgb3BlcmFu
ZCwgY29uc3QgVCYgdmFsdWUpCisgICAgdm9pZCBzZXRPcGVyYW5kKE9wZXJhbmQgb3BlcmFuZCwg
Y29uc3QgVCYgdmFsdWUpCiAgICAgewogICAgICAgICB0aGlzLT5vcGVyYW5kKG9wZXJhbmQpID0g
dmFsdWU7CiAgICAgfQotICAgIAotICAgIHZvaWQgc2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyLCBjb25zdCBUJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHNldE9wZXJh
bmQodmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpLCB2YWx1ZSk7Ci0gICAgfQogCiAgICAgc2l6ZV90
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KLSAgICBjb25zdCBUJiBh
dChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQotICAgIFQm
IGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9Ci0gICAgY29uc3Qg
VCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQot
ICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSB7IHJldHVybiBhdChpbmRleCk7IH0KLQot
ICAgIGJvb2wgaXNBcmd1bWVudChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluZGV4IDwg
bV9udW1Bcmd1bWVudHM7IH0KLSAgICBib29sIGlzTG9jYWwoc2l6ZV90IGluZGV4KSBjb25zdCB7
IHJldHVybiAhaXNBcmd1bWVudChpbmRleCk7IH0KLSAgICBpbnQgb3BlcmFuZEZvckluZGV4KHNp
emVfdCBpbmRleCkgY29uc3QKKyAgICBDb25zdFJlZlR5cGUgYXQoc2l6ZV90IGluZGV4KSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBSZWZUeXBlIGF0KHNpemVfdCBpbmRl
eCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgQ29uc3RSZWZUeXBlIG9wZXJhdG9y
W10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICBSZWZUeXBl
IG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgIE9w
ZXJhbmQgb3BlcmFuZEZvckluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKICAgICB7CiAgICAgICAg
IGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkpCi0gICAgICAgICAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgpLm9mZnNldCgpOwotICAgICAgICByZXR1cm4g
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKS5vZmZz
ZXQoKTsKLSAgICB9Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckluZGV4
KHNpemVfdCBpbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0
ZXIob3BlcmFuZEZvckluZGV4KGluZGV4KSk7CisgICAgICAgICAgICByZXR1cm4gdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoaW5kZXgpOworICAgICAgICBlbHNlIGlmIChpbmRleCA8IG51bWJl
ck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKQorICAgICAgICAgICAgcmV0dXJuIHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKSk7CisgICAg
ICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVtYmVyT2ZMb2NhbHMoKSArIG51bWJl
ck9mQXJndW1lbnRzKCkpKTsKICAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRPcGVyYW5kRmlyc3RU
aW1lKGludCBvcGVyYW5kLCBjb25zdCBUJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChvcGVy
YW5kSXNBcmd1bWVudChvcGVyYW5kKSkgewotICAgICAgICAgICAgc2V0QXJndW1lbnRGaXJzdFRp
bWUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvQXJndW1lbnQoKSwgdmFsdWUpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzZXRMb2NhbEZpcnN0
VGltZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpLCB2YWx1ZSk7Ci0gICAgfQot
ICAgIAorCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCiAgICAgewogICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fdmFsdWVzLnNpemUoKTsgKytpKQpAQCAtMjU3LDYgKzM2NSw3IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChudW1iZXJPZkFyZ3VtZW50cygpID09IG90aGVy
Lm51bWJlck9mQXJndW1lbnRzKCkpOwogICAgICAgICBBU1NFUlQobnVtYmVyT2ZMb2NhbHMoKSA9
PSBvdGhlci5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgQVNTRVJUKG51bWJlck9mVG1wcygp
ID09IG90aGVyLm51bWJlck9mVG1wcygpKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBtX3Zh
bHVlcyA9PSBvdGhlci5tX3ZhbHVlczsKICAgICB9CkBAIC0yNjUsOSArMzc0LDEwIEBAIHB1Ymxp
YzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAgICAgCiBwcml2YXRl
OgotICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVlcyBhcmUgYXJndW1l
bnRzLCB0aGUgcmVzdCBhcmUgbG9jYWxzLgotICAgIFZlY3RvcjxULCAwLCBVbnNhZmVWZWN0b3JP
dmVyZmxvdz4gbV92YWx1ZXM7Ci0gICAgdW5zaWduZWQgbV9udW1Bcmd1bWVudHM7CisgICAgLy8g
VGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVudHMsIHRoZSBu
ZXh0IG1fbnVtTG9jYWxzIGFyZSBsb2NhbHMsIGFuZCB0aGUgcmVzdCBhcmUgdG1wcy4KKyAgICBT
dG9yYWdlIG1fdmFsdWVzOworICAgIHVuc2lnbmVkIG1fbnVtQXJndW1lbnRzIHsgMCB9OworICAg
IHVuc2lnbmVkIG1fbnVtTG9jYWxzIHsgMCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgKaW5k
ZXggNjVmZWRkYTA3MzBhODM5MWY4MzE1NjNkYmRlYjgxNmFmOTI1NjZmZC4uMGIxY2MxZjJkMTk3
YWQwODM2NWE4Zjc4NTYxZmRmNjdhN2Q5ZWRkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaApAQCAtMzAsNiArMzAsMTQgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK2lubGluZSB2b2lkIE9wZXJhbmQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBpZiAoaXNUbXAoKSkKKyAgICAgICAgb3V0LnByaW50KCJ0bXAiLCB2
YWx1ZSgpKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludCh2aXJ0dWFsUmVnaXN0ZXIoKSk7
Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1wSW5Db250
ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogewpAQCAt
NDQsNiArNTIsMTEgQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVh
bSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJsb2MiLCBsb2NhbEluZGV4LCAiOiIsIGluQ29u
dGV4dChsb2NhbChsb2NhbEluZGV4KSwgY29udGV4dCkpOwogICAgIH0KKyAgICBmb3IgKHNpemVf
dCB0bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbnVtYmVyT2ZUbXBzKCk7ICsrdG1wSW5kZXgpIHsK
KyAgICAgICAgaWYgKCF0bXAodG1wSW5kZXgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcEluZGV4LCAiOiIsIGluQ29udGV4dCh0bXAo
dG1wSW5kZXgpLCBjb250ZXh0KSk7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpA
QCAtNjAsNiArNzMsMTEgQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChjb21tYSwg
ImxvYyIsIGxvY2FsSW5kZXgsICI6IiwgbG9jYWwobG9jYWxJbmRleCkpOwogICAgIH0KKyAgICBm
b3IgKHNpemVfdCB0bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbnVtYmVyT2ZUbXBzKCk7ICsrdG1w
SW5kZXgpIHsKKyAgICAgICAgaWYgKCF0bXAodG1wSW5kZXgpKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcEluZGV4LCAiOiIsIHRtcCh0
bXBJbmRleCkpOworICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAppbmRleCAy
MDk5M2UyMTJkMmNkNjhiNDFhZmNiZDBkZmI2ODYwMzJkMWNkZGIzLi5kZGI0MTIxMTkxZmFmN2I0
MjE1MzFlOGUyZTA1MjAyNWE2MTI3ZTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKQEAgLTcyLDYgKzcyLDcgQEAgVW5s
aW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIENvZGVUeXBlIGNvZGUKICAgICAsIG1fY29kZVR5cGUoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGNvZGVUeXBlKSkKICAgICAsIG1fZGlkT3B0aW1pemUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KE1peGVkVHJpU3RhdGUpKQogICAgICwgbV9hZ2UoMCkKKyAgICAsIG1faGFzQ2hlY2twb2ludHMo
ZmFsc2UpCiAgICAgLCBtX3BhcnNlTW9kZShpbmZvLnBhcnNlTW9kZSgpKQogICAgICwgbV9jb2Rl
R2VuZXJhdGlvbk1vZGUoY29kZUdlbmVyYXRpb25Nb2RlKQogICAgICwgbV9tZXRhZGF0YShVbmxp
bmtlZE1ldGFkYXRhVGFibGU6OmNyZWF0ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAppbmRleCAzZDlmYjNjNTdkNWYzZDRlMmFl
ZGNiMWUzNTY3YTc0YjhjNzEzYzJiLi4zMTkyMTcwOWFjODMwNmJmNGRlNGQ5NzM5OTJlMTRhMGQw
MzBkYWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suaApAQCAtMTQxLDYgKzE0MSw5IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0V4
cHJlc3Npb25JbmZvKCkgeyByZXR1cm4gbV9leHByZXNzaW9uSW5mby5zaXplKCk7IH0KICAgICBj
b25zdCBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4mIGV4cHJlc3Npb25JbmZvKCkgeyByZXR1
cm4gbV9leHByZXNzaW9uSW5mbzsgfQogCisgICAgYm9vbCBoYXNDaGVja3BvaW50cygpIGNvbnN0
IHsgcmV0dXJuIG1faGFzQ2hlY2twb2ludHM7IH0KKyAgICB2b2lkIHNldEhhc0NoZWNrcG9pbnRz
KCkgeyBtX2hhc0NoZWNrcG9pbnRzID0gdHJ1ZTsgfQorCiAgICAgLy8gU3BlY2lhbCByZWdpc3Rl
cnMKICAgICB2b2lkIHNldFRoaXNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVy
KSB7IG1fdGhpc1JlZ2lzdGVyID0gdGhpc1JlZ2lzdGVyOyB9CiAgICAgdm9pZCBzZXRTY29wZVJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyKSB7IG1fc2NvcGVSZWdpc3RlciA9
IHNjb3BlUmVnaXN0ZXI7IH0KQEAgLTE5OCw5ICsyMDEsOCBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJz
KCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQotICAgIGNvbnN0IFdyaXRlQmFycmll
cjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0K
LSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW50IGluZGV4
KSBjb25zdCB7IHJldHVybiBpbmRleCA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQot
ICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChpbnQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleF0uZ2V0KCk7IH0KKyAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJl
Z2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgQUxXQVlTX0lOTElORSBKU1Zh
bHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29u
c3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQogICAgIGNvbnN0
IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bjsgfQogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZDb25zdGFudElkZW50aWZpZXJTZXRzKCkgY29u
c3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fY29uc3RhbnRJZGVudGlmaWVy
U2V0cy5zaXplKCkgOiAwOyB9CkBAIC00MjYsNiArNDI4LDcgQEAgcHJpdmF0ZToKICAgICB1bnNp
Z25lZCBtX2RpZE9wdGltaXplIDogMjsKICAgICB1bnNpZ25lZCBtX2FnZSA6IDM7CiAgICAgc3Rh
dGljX2Fzc2VydCgoKDFVIDw8IDMpIC0gMSkgPj0gbWF4QWdlKTsKKyAgICBib29sIG1faGFzQ2hl
Y2twb2ludHMgOiAxOwogcHVibGljOgogICAgIENvbmN1cnJlbnRKU0xvY2sgbV9sb2NrOwogcHJp
dmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVBy
b2ZpbGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaApp
bmRleCBkZmEwNzc2NGE2YWIwMjE5ZDc4YWQ3YWJlZmVhNmEzYjdjODE3YmViLi45MGY5M2RkMWM5
MTExY2UzYmNhZmIwYWIzYjAzZDhiN2RiYmY5ZmRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCkBAIC0xNzYsMjggKzE3NiwyOCBAQCBpbmxpbmUg
Qnl0ZWNvZGVJbmRleCBnZXRSYXJlQ2FzZVByb2ZpbGVCeXRlY29kZUluZGV4KFJhcmVDYXNlUHJv
ZmlsZSogcmFyZUNhc2VQcgogICAgIHJldHVybiByYXJlQ2FzZVByb2ZpbGUtPm1fYnl0ZWNvZGVJ
bmRleDsKIH0KIAotc3RydWN0IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQgOiBwdWJsaWMgVmFsdWVQ
cm9maWxlIHsKLSAgICBpbnQgbV9vcGVyYW5kOworc3RydWN0IFZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlciA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgeworICAgIFZpcnR1YWxSZWdpc3RlciBt
X29wZXJhbmQ7CiB9OwogCi1zdHJ1Y3QgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciB7Citz
dHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyIHsKICAgICBXVEZfTUFL
RV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CiAKLSAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVm
ZmVyKHVuc2lnbmVkIHNpemUpCisgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVm
ZmVyKHVuc2lnbmVkIHNpemUpCiAgICAgICAgIDogbV9zaXplKHNpemUpCiAgICAgewogICAgICAg
ICAvLyBGSVhNRTogVmFsdWVQcm9maWxlIGhhcyBtb3JlIHN0dWZmIHRoYW4gd2UgbmVlZC4gV2Ug
Y291bGQgb3B0aW1pemUgdGhlc2UgdmFsdWUgcHJvZmlsZXMKICAgICAgICAgLy8gdG8gYmUgbW9y
ZSBzcGFjZSBlZmZpY2llbnQuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzU0MTMKLSAgICAgICAgbV9idWZmZXIgPSBNYWxsb2NQdHI8VmFsdWVQ
cm9maWxlQW5kT3BlcmFuZCwgVk1NYWxsb2M+OjptYWxsb2MobV9zaXplICogc2l6ZW9mKFZhbHVl
UHJvZmlsZUFuZE9wZXJhbmQpKTsKKyAgICAgICAgbV9idWZmZXIgPSBNYWxsb2NQdHI8VmFsdWVQ
cm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyLCBWTU1hbGxvYz46Om1hbGxvYyhtX3NpemUgKiBzaXpl
b2YoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX3NpemU7ICsraSkKLSAgICAgICAgICAgIG5ldyAoJm1fYnVmZmVyLmdl
dCgpW2ldKSBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kKCk7CisgICAgICAgICAgICBuZXcgKCZtX2J1
ZmZlci5nZXQoKVtpXSkgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgfQog
Ci0gICAgflZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIoKQorICAgIH5WYWx1ZVByb2ZpbGVB
bmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIoKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fc2l6ZTsgKytpKQotICAgICAgICAgICAgbV9idWZmZXIuZ2V0KClbaV0uflZh
bHVlUHJvZmlsZUFuZE9wZXJhbmQoKTsKKyAgICAgICAgICAgIG1fYnVmZmVyLmdldCgpW2ldLn5W
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIoKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgRnVuY3Rpb24+CkBAIC0yMDgsNyArMjA4LDcgQEAgc3RydWN0IFZhbHVlUHJvZmls
ZUFuZE9wZXJhbmRCdWZmZXIgewogICAgIH0KIAogICAgIHVuc2lnbmVkIG1fc2l6ZTsKLSAgICBN
YWxsb2NQdHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZCwgVk1NYWxsb2M+IG1fYnVmZmVyOworICAg
IE1hbGxvY1B0cjxWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIsIFZNTWFsbG9jPiBtX2J1
ZmZlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCmluZGV4IGM1Y2E0ZGUxZTRiMzYxMTIxNGMz
NWFiMWVhMzJkYzFjYmY0NWYzZTkuLmIxMzk0N2YwZTE4ZGYwNjNhODhiM2YyMjdjZGNkYmZlZmZl
ZGMzMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJl
Y292ZXJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNv
dmVyeS5jcHAKQEAgLTM1LDIyICszNSwyMiBAQCBKU1ZhbHVlIFZhbHVlUmVjb3Zlcnk6OnJlY292
ZXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIGNvbnN0CiB7CiAgICAgc3dpdGNoICh0ZWNobmlxdWUo
KSkgewogICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICByZXR1cm4gY2FsbEZy
YW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS5qc1ZhbHVlKCk7CisgICAgICAgIHJl
dHVybiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLmpzVmFsdWUoKTsKICAgICBjYXNl
IEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZy
YW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51bmJveGVkSW50MzIoKSk7CisgICAg
ICAgIHJldHVybiBqc051bWJlcihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94
ZWRJbnQzMigpKTsKICAgICBjYXNlIEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICBy
ZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51
bmJveGVkSW50NTIoKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcihjYWxsRnJhbWUtPnIodmly
dHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRJbnQ1MigpKTsKICAgICBjYXNlIFN0cmljdEludDUyRGlz
cGxhY2VkSW5KU1N0YWNrOgotICAgICAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZp
cnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51bmJveGVkU3RyaWN0SW50NTIoKSk7CisgICAgICAg
IHJldHVybiBqc051bWJlcihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRT
dHJpY3RJbnQ1MigpKTsKICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluSlNTdGFjazoKLSAgICAg
ICAgcmV0dXJuIGpzTnVtYmVyKHB1cmlmeU5hTihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVy
KCkub2Zmc2V0KCkpLnVuYm94ZWREb3VibGUoKSkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIo
cHVyaWZ5TmFOKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZERvdWJsZSgp
KSk7CiAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICByZXR1cm4gY2Fs
bEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51bmJveGVkQ2VsbCgpOworICAg
ICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkQ2VsbCgp
OwogICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgp
KS5qc1ZhbHVlKCk7CisgICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVy
KCkpLmpzVmFsdWUoKTsKICNlbHNlCi0gICAgICAgIHJldHVybiBqc0Jvb2xlYW4oY2FsbEZyYW1l
LT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51bmJveGVkQm9vbGVhbigpKTsKKyAgICAg
ICAgcmV0dXJuIGpzQm9vbGVhbihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94
ZWRCb29sZWFuKCkpOwogI2VuZGlmCiAgICAgY2FzZSBDb25zdGFudDoKICAgICAgICAgcmV0dXJu
IGNvbnN0YW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmFsdWVSZWNvdmVyeS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVj
b3ZlcnkuaAppbmRleCBkOGYxOGMzZmU4NTU5NGYzMmEyOTNhZmQ4OTA5MjIzNjEzNjJlYTYzLi41
ZTQzYmM3MmJiY2M0ZmY5N2E2OGY4M2RhODMwOTRlNThkYTNiMzE0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCmluZGV4IDM2MTk1
Mjk0MmQyYjg2YmFiMTJmNmNjYzdjYzFiYTAyMWY1YWQwNDguLmZkMTcwMDcxN2MzYmZmM2JhZjBj
M2IwMDMxNzZmZTY2NTkyNGRmNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKQEAgLTMxLDEyICszMSwxMiBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotaW5saW5lIGJvb2wgb3BlcmFuZElzTG9jYWwoaW50IG9wZXJhbmQpCitpbmxpbmUg
Ym9vbCB2aXJ0dWFsUmVnaXN0ZXJJc0xvY2FsKGludCBvcGVyYW5kKQogewogICAgIHJldHVybiBv
cGVyYW5kIDwgMDsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmFuZElzQXJndW1lbnQoaW50IG9wZXJh
bmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJJc0FyZ3VtZW50KGludCBvcGVyYW5kKQog
ewogICAgIHJldHVybiBvcGVyYW5kID49IDA7CiB9CkBAIC00OSwyNSArNDksMzIgQEAgcHVibGlj
OgogICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW50
KTsKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGludCwgaW50KTsKIAorICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGludmFsaWRWaXJ0dWFsUmVn
aXN0ZXIgPSAweDNmZmZmZmZmOworICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7CisKICAgICBWaXJ0
dWFsUmVnaXN0ZXIoUmVnaXN0ZXJJRCopOwogICAgIFZpcnR1YWxSZWdpc3RlcihSZWZQdHI8UmVn
aXN0ZXJJRD4pOwogCiAgICAgVmlydHVhbFJlZ2lzdGVyKCkKLSAgICAgICAgOiBtX3ZpcnR1YWxS
ZWdpc3RlcihzX2ludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgIDogbV92aXJ0dWFsUmVn
aXN0ZXIoaW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICB7IH0KIAogICAgIGV4cGxpY2l0IFZp
cnR1YWxSZWdpc3RlcihpbnQgdmlydHVhbFJlZ2lzdGVyKQogICAgICAgICA6IG1fdmlydHVhbFJl
Z2lzdGVyKHZpcnR1YWxSZWdpc3RlcikKICAgICB7IH0KIAotICAgIGJvb2wgaXNWYWxpZCgpIGNv
bnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBzX2ludmFsaWRWaXJ0dWFsUmVnaXN0
ZXIpOyB9Ci0gICAgYm9vbCBpc0xvY2FsKCkgY29uc3QgeyByZXR1cm4gb3BlcmFuZElzTG9jYWwo
bV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1
cm4gb3BlcmFuZElzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZVNsb3Qgc2xvdCkKKyAgICAgICAgOiBtX3ZpcnR1YWxSZWdpc3Rlcihz
dGF0aWNfY2FzdDxpbnQ+KHNsb3QpKQorICAgIHsgfQorCisgICAgYm9vbCBpc1ZhbGlkKCkgY29u
c3QgeyByZXR1cm4gKG1fdmlydHVhbFJlZ2lzdGVyICE9IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIp
OyB9CisgICAgYm9vbCBpc0xvY2FsKCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNM
b2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7
IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQog
ICAgIGJvb2wgaXNIZWFkZXIoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSAw
ICYmIG1fdmlydHVhbFJlZ2lzdGVyIDwgQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50OyB9Ci0g
ICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0g
c19maXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQorICAgIGJvb2wgaXNDb25zdGFudCgpIGNv
bnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IGZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4OyB9CiAgICAgaW50IHRvTG9jYWwoKSBjb25zdCB7IEFTU0VSVChpc0xvY2FsKCkpOyByZXR1
cm4gb3BlcmFuZFRvTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CiAgICAgaW50IHRvQXJndW1l
bnQoKSBjb25zdCB7IEFTU0VSVChpc0FyZ3VtZW50KCkpOyByZXR1cm4gb3BlcmFuZFRvQXJndW1l
bnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgaW50IHRvQ29uc3RhbnRJbmRleCgpIGNvbnN0
IHsgQVNTRVJUKGlzQ29uc3RhbnQoKSk7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciAtIHNfZmly
c3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KKyAgICBpbnQgdG9Db25zdGFudEluZGV4KCkgY29u
c3QgeyBBU1NFUlQoaXNDb25zdGFudCgpKTsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyIC0gZmly
c3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KICAgICBpbnQgb2Zmc2V0KCkgY29uc3QgeyByZXR1
cm4gbV92aXJ0dWFsUmVnaXN0ZXI7IH0KICAgICBpbnQgb2Zmc2V0SW5CeXRlcygpIGNvbnN0IHsg
cmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyICogc2l6ZW9mKFJlZ2lzdGVyKTsgfQogCkBAIC0xMDYs
OSArMTEzLDYgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dDsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgY29uc3RleHByIGludCBzX2ludmFsaWRWaXJ0dWFs
UmVnaXN0ZXIgPSAweDNmZmZmZmZmOwotICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHNfZmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXggPSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsKLQogICAg
IHN0YXRpYyBpbnQgbG9jYWxUb09wZXJhbmQoaW50IGxvY2FsKSB7IHJldHVybiAtMSAtIGxvY2Fs
OyB9CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9Mb2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4g
LTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3Bl
cmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAKaW5kZXggOTEwMWQxMGRkOGVjNGZjMjI5YTdmOGEwOTE2OGM3Yzg0
NWUyNjkxMS4uNWMwYTk4MTMyNWE1ZTU3NWJhMThlNWU4M2Q0MmU2NDgzZGQ2YzQyNCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHAKQEAgLTExODksNyArMTE4OSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjppbml0aWFsaXplTmV4dFBhcmFtZXRlcigpCiAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
ZyA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCkpOwogICAgIG1fcGFyYW1ldGVycy5ncm93KG1fcGFyYW1ldGVycy5zaXplKCkgKyAxKTsKICAg
ICBhdXRvJiBwYXJhbWV0ZXIgPSByZWdpc3RlckZvcihyZWcpOwotICAgIHBhcmFtZXRlci5zZXRJ
bmRleChyZWcub2Zmc2V0KCkpOworICAgIHBhcmFtZXRlci5zZXRJbmRleChyZWcpOwogICAgIG1f
Y29kZUJsb2NrLT5hZGRQYXJhbWV0ZXIoKTsKICAgICByZXR1cm4gJnBhcmFtZXRlcjsKIH0KQEAg
LTExOTgsNyArMTE5OCw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVQYXJh
bWV0ZXJzKEZ1bmN0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKIHsKICAgICAvLyBNYWtlIHN1
cmUgdGhlIGNvZGUgYmxvY2sga25vd3MgYWJvdXQgYWxsIG9mIG91ciBwYXJhbWV0ZXJzLCBhbmQg
bWFrZSBzdXJlIHRoYXQgcGFyYW1ldGVycwogICAgIC8vIG5lZWRpbmcgZGVzdHJ1Y3R1cmluZyBh
cmUgbm90ZWQuCi0gICAgbV90aGlzUmVnaXN0ZXIuc2V0SW5kZXgoaW5pdGlhbGl6ZU5leHRQYXJh
bWV0ZXIoKS0+aW5kZXgoKSk7IC8vIHRoaXMKKyAgICBtX3RoaXNSZWdpc3Rlci5zZXRJbmRleChW
aXJ0dWFsUmVnaXN0ZXIoaW5pdGlhbGl6ZU5leHRQYXJhbWV0ZXIoKS0+aW5kZXgoKSkpOyAvLyB0
aGlzCiAKICAgICBib29sIG5vblNpbXBsZUFyZ3VtZW50cyA9IGZhbHNlOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnNpemUoKTsgKytpKSB7CkBAIC0xNjM5LDExICsx
NjM5LDExIEBAIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFcXVhbGl0eU9wSW1wbChSZWdp
c3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYzEsIFJlCiAKICAgICBpZiAobV9sYXN0SW5zdHJ1
Y3Rpb24tPmlzPE9wVHlwZW9mPigpKSB7CiAgICAgICAgIGF1dG8gb3AgPSBtX2xhc3RJbnN0cnVj
dGlvbi0+YXM8T3BUeXBlb2Y+KCk7Ci0gICAgICAgIGlmIChzcmMxLT5pbmRleCgpID09IG9wLm1f
ZHN0Lm9mZnNldCgpCisgICAgICAgIGlmIChzcmMxLT52aXJ0dWFsUmVnaXN0ZXIoKSA9PSBvcC5t
X2RzdAogICAgICAgICAgICAgJiYgc3JjMS0+aXNUZW1wb3JhcnkoKQotICAgICAgICAgICAgJiYg
bV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYzItPmluZGV4KCkpCi0gICAg
ICAgICAgICAmJiBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihzcmMyLT5pbmRleCgpKS5n
ZXQoKS5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXNT
dHJpbmcobV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+aW5kZXgoKSkuZ2V0KCkp
LT50cnlHZXRWYWx1ZSgpOworICAgICAgICAgICAgJiYgc3JjMi0+dmlydHVhbFJlZ2lzdGVyKCku
aXNDb25zdGFudCgpCisgICAgICAgICAgICAmJiBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3Rl
cihzcmMyLT52aXJ0dWFsUmVnaXN0ZXIoKSkuZ2V0KCkuaXNTdHJpbmcoKSkgeworICAgICAgICAg
ICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGFzU3RyaW5nKG1fY29kZUJsb2NrLT5jb25zdGFudFJl
Z2lzdGVyKHNyYzItPnZpcnR1YWxSZWdpc3RlcigpKS5nZXQoKSktPnRyeUdldFZhbHVlKCk7CiAg
ICAgICAgICAgICBpZiAodmFsdWUgPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgICAgICBy
ZXdpbmQoKTsKICAgICAgICAgICAgICAgICBPcElzVW5kZWZpbmVkOjplbWl0KHRoaXMsIGRzdCwg
b3AubV92YWx1ZSk7CkBAIC0zMjkwLDYgKzMyOTAsOCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVu
YwogICAgIC8vIEVtaXQgY2FsbC4KICAgICBBU1NFUlQoZHN0ICE9IGlnbm9yZWRSZXN1bHQoKSk7
CiAgICAgVmFyYXJnc09wOjplbWl0KHRoaXMsIGRzdCwgZnVuYywgdGhpc1JlZ2lzdGVyLCBhcmd1
bWVudHMgPyBhcmd1bWVudHMgOiBWaXJ0dWFsUmVnaXN0ZXIoMCksIGZpcnN0RnJlZVJlZ2lzdGVy
LCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgaWYgKFZhcmFyZ3NPcDo6b3Bjb2RlSUQgIT0gb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQorICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2st
Pmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIHJldHVybiBkc3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAppbmRl
eCBjOWU0ZjY5NjE2ZmVkNzNmNDE5ODkxMGQ3YjRlOWQzOGUzMzU1YTZmLi40MmM2MzAyNjBlZTZl
YjhkYjYxNjMzODJmNjBmNjdjNWU4NDBmN2YwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCkBAIC0xMDE5LDYgKzEw
MTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzaG91bGRFbWl0Q29udHJvbEZs
b3dQcm9maWxlckhvb2tzKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlR2VuZXJhdGlvbk1vZGUuY29u
dGFpbnMoQ29kZUdlbmVyYXRpb25Nb2RlOjpDb250cm9sRmxvd1Byb2ZpbGVyKTsgfQogICAgICAg
ICAKICAgICAgICAgYm9vbCBpc1N0cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9j
ay0+aXNTdHJpY3RNb2RlKCk7IH0KKyAgICAgICAgdm9pZCBzZXRVc2VzQ2hlY2twb2ludHMoKSB7
IG1fY29kZUJsb2NrLT5zZXRIYXNDaGVja3BvaW50cygpOyB9CiAKICAgICAgICAgU291cmNlUGFy
c2VNb2RlIHBhcnNlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5wYXJzZU1vZGUo
KTsgfQogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvUmVnaXN0ZXJJRC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9S
ZWdpc3RlcklELmgKaW5kZXggZGEzZmUxMjgwMDkwZjQwZTczZjgxZDIxMjBkZmNkNWVmOTBkM2Nl
ZS4uNzNiNDMyMDYzOGMzNDhmOTU1NGFhZTlhM2EzMjAyMzI4M2JkYjNjOCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9SZWdpc3RlcklELmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9SZWdpc3RlcklELmgKQEAgLTY5LDEyICs2
OSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAg
dm9pZCBzZXRJbmRleChpbnQgaW5kZXgpCisgICAgICAgIHZvaWQgc2V0SW5kZXgoVmlydHVhbFJl
Z2lzdGVyIGluZGV4KQogICAgICAgICB7CiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICAgICAgICAg
IG1fZGlkU2V0SW5kZXggPSB0cnVlOwogI2VuZGlmCi0gICAgICAgICAgICBtX3ZpcnR1YWxSZWdp
c3RlciA9IFZpcnR1YWxSZWdpc3RlcihpbmRleCk7CisgICAgICAgICAgICBtX3ZpcnR1YWxSZWdp
c3RlciA9IGluZGV4OwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBzZXRUZW1wb3JhcnkoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwCmluZGV4IGI4
M2ZlZTBkM2MwOWQxNDk3YWE3ZWExZGUzZTA0OTA2MmYyMjZjMTQuLmU2NDA3MWIxYWEwZTM0ODk0
NDM0MzlmZjI4ZmNhMjUxYjYyYjk2NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RIZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SGVhcC5jcHAKQEAgLTQwLDYgKzQwLDE0IEBAIHZvaWQgQWJzdHJhY3RIZWFw
OjpQYXlsb2FkOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIG91dC5wcmlu
dCh2YWx1ZSgpKTsKIH0KIAordm9pZCBBYnN0cmFjdEhlYXA6OlBheWxvYWQ6OmR1bXBBc09wZXJh
bmQoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAg
b3V0LnByaW50KCJUT1AiKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludChPcGVyYW5kOjpm
cm9tQml0cyh2YWx1ZSgpKSk7Cit9CisKIHZvaWQgQWJzdHJhY3RIZWFwOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KGtpbmQoKSk7CkBAIC00OSw2ICs1Nywx
MyBAQCB2b2lkIEFic3RyYWN0SGVhcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAg
ICAgICBvdXQucHJpbnQoIigiLCBET01KSVQ6OkhlYXBSYW5nZTo6ZnJvbVJhdyhwYXlsb2FkKCku
dmFsdWUzMigpKSwgIikiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBpZiAoa2luZCgp
ID09IFN0YWNrKSB7CisgICAgICAgIG91dC5wcmludCgiKCIpOworICAgICAgICBwYXlsb2FkKCku
ZHVtcEFzT3BlcmFuZChvdXQpOworICAgICAgICBvdXQucHJpbnQoIikiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKwogICAgIG91dC5wcmludCgiKCIsIHBheWxvYWQoKSwgIikiKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKaW5kZXggYmY5OTM3
Nzk3MDQ3MDJkOGQ1YjIwYjZjMmY2ZjczOTVhZmU2Yjg2OC4uM2M0Y2UzZDVkMDJkYzNhODFmM2Fh
NDI0Y2ZjM2ZkMWM0NDdjNTI5MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEhlYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SGVhcC5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNp
bmNsdWRlICJET01KSVRIZWFwUmFuZ2UuaCIKKyNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIK
ICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgog
I2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgpAQCAtMTIzLDEwICsxMjQsMTUgQEAgcHVibGlj
OgogICAgICAgICAgICAgLCBtX3ZhbHVlKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocG9pbnRlcikp
CiAgICAgICAgIHsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgUGF5bG9hZChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKworICAgICAgICBQYXlsb2FkKE9wZXJhbmQgb3BlcmFuZCkKICAg
ICAgICAgICAgIDogbV9pc1RvcChmYWxzZSkKLSAgICAgICAgICAgICwgbV92YWx1ZShvcGVyYW5k
Lm9mZnNldCgpKQorICAgICAgICAgICAgLCBtX3ZhbHVlKG9wZXJhbmQuYXNCaXRzKCkpCisgICAg
ICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFBheWxvYWQoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgICAgICAgICA6IFBheWxvYWQoT3BlcmFuZChvcGVyYW5kKSkKICAgICAgICAgewog
ICAgICAgICB9CiAgICAgICAgIApAQCAtMTgzLDYgKzE4OSw3IEBAIHB1YmxpYzoKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAg
ICAgIHZvaWQgZHVtcEFzT3BlcmFuZChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgICAgICAKICAg
ICBwcml2YXRlOgogICAgICAgICBib29sIG1faXNUb3A7CkBAIC0yMDQsNiArMjExLDcgQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKGtpbmQgIT0gSW52YWxpZEFic3RyYWN0SGVhcCAm
JiBraW5kICE9IFdvcmxkICYmIGtpbmQgIT0gSGVhcCAmJiBraW5kICE9IFNpZGVTdGF0ZSk7CiAg
ICAgICAgIG1fdmFsdWUgPSBlbmNvZGUoa2luZCwgcGF5bG9hZCk7CisgICAgICAgIEFTU0VSVCh0
aGlzLT5raW5kKCkgPT0ga2luZCAmJiB0aGlzLT5wYXlsb2FkKCkgPT0gcGF5bG9hZCk7CiAgICAg
fQogICAgIAogICAgIEFic3RyYWN0SGVhcChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUp
CkBAIC0yMTksNiArMjI3LDExIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGtpbmQoKSAhPSBX
b3JsZCAmJiBraW5kKCkgIT0gSW52YWxpZEFic3RyYWN0SGVhcCk7CiAgICAgICAgIHJldHVybiBw
YXlsb2FkSW1wbCgpOwogICAgIH0KKyAgICBPcGVyYW5kIG9wZXJhbmQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFjayAmJiAhcGF5bG9hZCgpLmlzVG9wKCkpOwor
ICAgICAgICByZXR1cm4gT3BlcmFuZDo6ZnJvbUJpdHMocGF5bG9hZCgpLnZhbHVlKCkpOworICAg
IH0KICAgICAKICAgICBBYnN0cmFjdEhlYXAgc3VwZXJ0eXBlKCkgY29uc3QKICAgICB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXJJbmxpbmVzLmgKaW5kZXggYzI2YzI0YWZlYmUxY2Y3ZWRlMWEwNzg0MGQwYzY2ZDk3NDY2ODAw
My4uNWJiMjc4ZDJjZjcyZTQ3MTViZDhmY2MyNDA4NmY1NmNkZTFkNTg2MSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaApAQCAtMzg4LDcgKzM4OCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAg
ICAgICAgICAKICAgICBjYXNlIEdldExvY2FsOiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAg
ICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NE
YXRhLT5sb2NhbCgpLm9mZnNldCgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1f
c3RhdGUub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSk7CiAgICAgICAgIC8v
IFRoZSB2YWx1ZSBpbiB0aGUgbG9jYWwgc2hvdWxkIGFscmVhZHkgYmUgY2hlY2tlZC4KICAgICAg
ICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YWx1ZS5pc1R5cGUodHlwZUZpbHRlckZvcih2
YXJpYWJsZUFjY2Vzc0RhdGEtPmZsdXNoRm9ybWF0KCkpKSk7CiAgICAgICAgIGlmICh2YWx1ZS52
YWx1ZSgpKQpAQCAtMzk5LDcgKzM5OSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAg
ICAgIAogICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRh
ID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUg
PSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+bG9jYWwpOworICAgICAgICBBYnN0cmFjdFZhbHVlIHZh
bHVlID0gbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpOwogICAgICAgICAvLyBUaGUgdmFs
dWUgaW4gdGhlIGxvY2FsIHNob3VsZCBhbHJlYWR5IGJlIGNoZWNrZWQuCiAgICAgICAgIERGR19B
U1NFUlQobV9ncmFwaCwgbm9kZSwgdmFsdWUuaXNUeXBlKHR5cGVGaWx0ZXJGb3IoZGF0YS0+Zm9y
bWF0KSkpOwogICAgICAgICBpZiAodmFsdWUudmFsdWUoKSkKQEAgLTQwOSwxMiArNDA5LDEyIEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZl
Y3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFNldExv
Y2FsOiB7Ci0gICAgICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgp
KSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgIAogICAgIGNhc2UgUHV0U3RhY2s6IHsKLSAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUt
PnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSA9
IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IApAQCAtNDM2LDcgKzQzNiw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIC8v
IEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0LiBTZXRBcmd1
bWVudERlZmluaXRlbHkvU2V0QXJndW1lbnRNYXliZSBtZWFucwogICAgICAgICAvLyB0aGF0IHNv
bWVvbmUgc2V0IHRoZSBhcmd1bWVudCB2YWx1ZXMgb3V0LW9mLWJhbmQsIGFuZCBjdXJyZW50bHkg
dGhpcyBhbHdheXMgbWVhbnMgc2V0dGluZyB0byBhCiAgICAgICAgIC8vIG5vbi1jbGVhciB2YWx1
ZS4KLSAgICAgICAgQVNTRVJUKCFtX3N0YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkuaXNDbGVh
cigpKTsKKyAgICAgICAgQVNTRVJUKCFtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKS5p
c0NsZWFyKCkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9p
bnRBcmd1bWVudHM6IHsKQEAgLTQ2NSw2ICs0NjUsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxp
bWkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7Cisg
ICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVj
SW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBMb2FkVmFyYXJn
czoKICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgIC8vIEZJWE1FOiBGb3J3YXJk
VmFyYXJncyBzaG91bGQgY2hlY2sgaWYgdGhlIGNvdW50IGJlY29tZXMga25vd24sIGFuZCBpZiBp
dCBkb2VzLCBpdCBzaG91bGQgdHVybgpAQCAtNDgzLDcgKzQ4OSw3IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNs
b2JiZXJMaW1pCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJh
cmdzRGF0YSgpOwogICAgICAgICBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+Y291bnQpLnNldE5vbkNl
bGxUeXBlKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5s
aW1pdCAtIDE7IGktLTspCi0gICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+c3RhcnQu
b2Zmc2V0KCkgKyBpKS5tYWtlSGVhcFRvcCgpOworICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5k
KGRhdGEtPnN0YXJ0ICsgaSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
CkBAIC0yMzY1LDcgKzIzNzEsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAg
ICAgdW5zaWduZWQgYXJndW1lbnRJbmRleDsKICAgICAgICAgICAgIGlmIChhcmd1bWVudEluZGV4
Q2hlY2tlZC5zYWZlR2V0KGFyZ3VtZW50SW5kZXgpICE9IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZs
b3cpIHsKICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChhcmd1bWVudEluZGV4IDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyAtIDEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50
SW5kZXggPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyAtIDEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzZXRGb3JO
b2RlKG5vZGUsIG1fc3RhdGUub3BlcmFuZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudEluZGV4ICsgMSkgKyBpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnNl
dFNob3VsZFRyeUNvbnN0YW50Rm9sZGluZyh0cnVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmgKaW5kZXggZDczMjQ3YjkzYzVkYzc4NmI2MTdh
YTVhYWRjMmIwZjYxNTI4NmI1Zi4uODljMDhmYTA4MGNlYTMyZmQ5YzU5MWYzMGYxZTdkZDQ2ZjFk
MTI1ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBv
c2l0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBvc2l0
aW9uLmgKQEAgLTEyMCw3ICsxMjAsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxlc1tpXS0+ZmluZCgpOwot
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2YXJpYWJsZS0+bG9jYWwoKTsK
KyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IHZhcmlhYmxlLT5vcGVyYW5kKCk7CiAKICAg
ICAgICAgICAgIGlmIChpKQogICAgICAgICAgICAgICAgIG91dC5wcmludCgiICIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBo
YXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRp
b25QaGFzZS5jcHAKaW5kZXggNzEzZTc5OTlhN2JmY2EyMWRkY2VhOGUzNDYyNjBmMzQzMWU0ZDk0
Mi4uMWZlMjBmZWY3ZDU1ZmUxNzdlZmUzOWM0ZTY5YWZjMzY2ZjhjNDEzYyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9u
UGhhc2UuY3BwCkBAIC0zNTgsOSArMzU4LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
Y2FzZSBOZXdBcnJheUJ1ZmZlcjoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdz
OgotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCktPm9mZnNl
dCAmJiAobm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gTmV3QXJyYXlXaXRoU3ByZWFkIHx8IG5vZGUt
PmNoaWxkMSgpLT5vcCgpID09IFNwcmVhZCB8fCBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBOZXdB
cnJheUJ1ZmZlcikpCi0gICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQx
KCksIG5vZGUpOworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+bG9hZFZhcmFyZ3NEYXRh
KCktPm9mZnNldCAmJiAobm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3AoKSA9PSBOZXdBcnJheVdp
dGhTcHJlYWQgfHwgbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3AoKSA9PSBTcHJlYWQgfHwgbm9k
ZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3AoKSA9PSBOZXdBcnJheUJ1ZmZlcikpCisgICAgICAgICAg
ICAgICAgICAgICAgICBlc2NhcGUobm9kZS0+YXJndW1lbnRzQ2hpbGQoKSwgbm9kZSk7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBjYXNlIENhbGxWYXJhcmdzOgpAQCAtNDkzLDEwICs0OTYsMTAgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWhlYXAucGF5bG9hZCgpLmlzVG9w
KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyhoZWFwLnBh
eWxvYWQoKS52YWx1ZTMyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVy
YW5kID0gaGVhcC5vcGVyYW5kKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVn
aXN0ZXIgbWF5IG5vdCBwb2ludCB0byBhbiBhcmd1bWVudCBvciBsb2NhbCwgZm9yIGV4YW1wbGUg
aWYgd2UgYXJlIGxvb2tpbmcgYXQgU2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMuCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZy5pc0hlYWRlcigpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNsb2JiZXJlZEJ5VGhpc0Jsb2NrLm9wZXJhbmQocmVnKSA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wZXJhbmQuaXNIZWFkZXIoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjbG9iYmVyZWRCeVRoaXNCbG9jay5vcGVyYW5kKG9wZXJhbmQp
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgTm9P
cENsb2JiZXJpemUoKSk7CiAgICAgICAgICAgICB9CkBAIC01NjAsMTYgKzU2MywxNiBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2xvYmJlcmVkQnlCbG9jayB8
PSBjbG9iYmVyZWRCeVRoaXNCbG9jay5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlz
Q2xvYmJlcmVkQnlCbG9jayB8fCBpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDbG9iYmVyZWRCeUJsb2NrIHw9IGNsb2Ji
ZXJlZEJ5VGhpc0Jsb2NrLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rlcihp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFpc0Nsb2JiZXJlZEJ5QmxvY2spIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgLSAxOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7ICsraSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkpOwpAQCAtNjI3LDcgKzYz
MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgs
IG5vZGUsIE5vT3BDbG9iYmVyaXplKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFsmXSAoQWJzdHJhY3RIZWFwIGhlYXApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChoZWFwLmtpbmQoKSA9PSBTdGFjayAmJiAhaGVhcC5wYXlsb2FkKCkuaXNUb3Ao
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVu
dHNJbnZvbHZlU3RhY2tTbG90KGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyKGhlYXAu
cGF5bG9hZCgpLnZhbHVlMzIoKSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGlubGluZUNhbGxGcmFtZSwgaGVh
cC5vcGVyYW5kKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtODA2LDcg
KzgwOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgc2FmZVRvR2V0U3RhY2sgPSBpbmRleCA+PSBudW1iZXJPZkFyZ3Vt
ZW50c1RvU2tpcDsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVRvR2V0U3RhY2sgJj0gaW5kZXggPCBp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzYWZlVG9HZXRTdGFjayAmPSBpbmRleCA8IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0g
MSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzYWZlVG9HZXRTdGFjayAmPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbmRleCA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpKSAtIDE7CkBAIC04NDUsOSArODQ4LDIzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNvbnZlcnRUb0lkZW50aXR5T24ocmVzdWx0KTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsKKyAgICAg
ICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS5u
b2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNFbGltaW5hdGVkQWxsb2NhdGlvbihj
YW5kaWRhdGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
ICAgICAgICAgLy8gVmFyYXJnc0xlbmd0aCBjYW4gZXhpdCwgc28gaXQgYmV0dGVyIGJlIGV4aXRP
Sy4KKyAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBub2RlLT5v
cmlnaW4uZXhpdE9LKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBu
b2RlLT5vcmlnaW4ud2l0aEV4aXRPSyh0cnVlKTsKKworCisgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNvbnZlcnRUb0lkZW50aXR5T24oZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3Ro
KGluc2VydGlvblNldCwgY2FuZGlkYXRlLCBub2RlSW5kZXgsIG9yaWdpbiwgLyogYWRkVGhpcyA9
ICovIHRydWUpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorCiAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczogewotICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBjYW5kaWRhdGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAg
ICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkubm9kZSgp
OwogICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWxpbWluYXRlZEFsbG9jYXRpb24oY2FuZGlk
YXRlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICAKQEAgLTg2MiwxMCArODc5LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAganNOdW1iZXIoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEtpbGxTdGFjaywgbm9kZS0+b3JpZ2luLnRh
a2VWYWxpZEV4aXQoY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZv
KHZhcmFyZ3NEYXRhLT5jb3VudC5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE9wSW5mbyh2YXJhcmdzRGF0YS0+Y291bnQpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIG5vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGNh
bkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJhcmdzRGF0YS0+
Y291bnQub2Zmc2V0KCkpLCBFZGdlKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzTm9kZSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJhcmdzRGF0YS0+Y291bnQpLCBF
ZGdlKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzTm9kZSkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9L
KGNhbkV4aXQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1f
c3RhY2tBY2Nlc3NEYXRhLmFkZCh2YXJhcmdzRGF0YS0+Y291bnQsIEZsdXNoZWRJbnQzMikpLApA
QCAtODc0LDE0ICs4OTEsMTUgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgICAgICBhdXRv
IHN0b3JlVmFsdWUgPSBbJl0gKE5vZGUqIHZhbHVlLCB1bnNpZ25lZCBzdG9yZUluZGV4KSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmFyYXJnc0RhdGEt
PnN0YXJ0ICsgc3RvcmVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyZWcu
aXNMb2NhbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0
YSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0
YS5hZGQocmVnLCBGbHVzaGVkSlNWYWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEtpbGxTdGFjaywgbm9kZS0+
b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksIE9wSW5mbyhyZWcub2Zmc2V0KCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3RhY2ss
IG5vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLCBPcEluZm8ocmVnKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmln
aW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBP
cEluZm8ocmVnLm9mZnNldCgpKSwgRWRnZSh2YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE9wSW5mbyhyZWcpLCBFZGdlKHZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlSW5kZXgsIFNwZWNOb25lLCBQdXRTdGFjaywgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2Fu
RXhpdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGRhdGEpLCBFZGdlKHZh
bHVlKSk7CkBAIC05MzUsNyArOTUzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwID0gY2FuZGlkYXRlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSA9IGNhbmRpZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmcmFtZUFyZ3VtZW50Q291bnQgPSBp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZnJhbWVBcmd1bWVudENvdW50ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgLSAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lQXJn
dW1lbnRDb3VudCA+PSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmcmFtZUFyZ3VtZW50Q291bnQgLSBudW1iZXJPZkFy
Z3VtZW50c1RvU2tpcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CkBAIC05ODMsNyArMTAwMSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwID0gY2FuZGlkYXRlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUgPSBjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZyYW1lQXJndW1l
bnRDb3VudCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAx
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZnJhbWVBcmd1
bWVudENvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgbG9hZEluZGV4ID0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7
IGxvYWRJbmRleCA8IGZyYW1lQXJndW1lbnRDb3VudDsgKytsb2FkSW5kZXgpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQobG9hZEluZGV4ICsgMSkgKyBpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0
YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHJlZywg
Rmx1c2hlZEpTVmFsdWUpOwpAQCAtMTAxOSw5ICsxMDM3LDcgQEAgcHJpdmF0ZToKIAogICAgICAg
ICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjYW5k
aWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKIAotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJh
cmdzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzID4gdmFyYXJnc0RhdGEtPm9mZnNldCkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLT0gdmFyYXJnc0RhdGEtPm9mZnNl
dDsKQEAgLTEwMzAsNyArMTA0Niw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPj0gMSk7CiAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgPD0gdmFyYXJnc0RhdGEtPmxpbWl0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZUFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZhcmFyZ3NEYXRh
LT5saW1pdCAtIDEgPj0gdmFyYXJnc0RhdGEtPm1hbmRhdG9yeU1pbmltdW0sIHZhcmFyZ3NEYXRh
LT5saW1pdCwgdmFyYXJnc0RhdGEtPm1hbmRhdG9yeU1pbmltdW0pOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCmluZGV4IGZmMWQ1
NjgwZmFlMGEyMDAxNGQxZjFlMTNkYzNlNDhkOGM1NDMzMWQuLjFmZGMzMDk5NDg4ZmE5OTZlZmEy
Y2MwYTY5ODM1OGMwYTQ5MTVjNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAKQEAgLTMyLDExICszMiwxNSBAQAogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLWJvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNr
U2xvdChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIHJl
ZykKK2Jvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSwgT3BlcmFuZCBvcGVyYW5kKQogeworICAgIGlmIChvcGVyYW5kLmlzVG1wKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVy
YW5kLnZpcnR1YWxSZWdpc3RlcigpOwogICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQogICAgICAg
ICByZXR1cm4gKHJlZy5pc0FyZ3VtZW50KCkgJiYgcmVnLnRvQXJndW1lbnQoKSkgfHwgcmVnLmlz
SGVhZGVyKCk7Ci0gICAgCisKICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxs
CiAgICAgICAgICYmIHJlZyA9PSBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtNDYsMTkgKzUwLDE5IEBAIGJvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIAogICAgIC8vIFdlIGRvIG5vdCBpbmNsdWRlIGZpeHVwcyBoZXJlIHNpbmNl
IGl0IGlzIG5vdCByZWxhdGVkIHRvIHxhcmd1bWVudHN8LCByZXN0IHBhcmFtZXRlcnMsIGFuZCB2
YXJhcmdzLgotICAgIHVuc2lnbmVkIG51bUFyZ3VtZW50cyA9IGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOworICAgIHVuc2lnbmVkIG51bUFyZ3VtZW50cyA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzIC0gMSk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50U3RhcnQgPQogICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkgKyBDYWxs
RnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApOwogICAgIHJldHVybiByZWcgPj0gYXJndW1lbnRTdGFy
dCAmJiByZWcgPCBhcmd1bWVudFN0YXJ0ICsgbnVtQXJndW1lbnRzOwogfQogCi1ib29sIGFyZ3Vt
ZW50c0ludm9sdmVTdGFja1Nsb3QoTm9kZSogY2FuZGlkYXRlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVn
KQorYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KE5vZGUqIGNhbmRpZGF0ZSwgT3BlcmFu
ZCBvcGVyYW5kKQogewotICAgIHJldHVybiBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRp
ZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpLCByZWcpOworICAgIHJldHVy
biBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlu
bGluZUNhbGxGcmFtZSgpLCBvcGVyYW5kKTsKIH0KIAogTm9kZSogZW1pdENvZGVUb0dldEFyZ3Vt
ZW50c0FycmF5TGVuZ3RoKAotICAgIEluc2VydGlvblNldCYgaW5zZXJ0aW9uU2V0LCBOb2RlKiBh
cmd1bWVudHMsIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4pCisgICAgSW5z
ZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQsIE5vZGUqIGFyZ3VtZW50cywgdW5zaWduZWQgbm9kZUlu
ZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwgYm9vbCBhZGRUaGlzKQogewogICAgIEdyYXBoJiBncmFw
aCA9IGluc2VydGlvblNldC5ncmFwaCgpOwogCkBAIC02OSwxMSArNzMsMTQgQEAgTm9kZSogZW1p
dENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAogICAgICAgICB8fCBhcmd1bWVudHMtPm9w
KCkgPT0gTmV3QXJyYXlCdWZmZXIKICAgICAgICAgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50
b21EaXJlY3RBcmd1bWVudHMgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21DbG9uZWRBcmd1
bWVudHMKICAgICAgICAgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0IHx8
IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIKLSAgICAgICAgfHwgYXJn
dW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQsCisgICAgICAgIHx8IGFy
Z3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkIHx8IGFyZ3VtZW50cy0+
b3AoKSA9PSBQaGFudG9tU3ByZWFkLAogICAgICAgICBhcmd1bWVudHMtPm9wKCkpOwogCisgICAg
aWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tU3ByZWFkKQorICAgICAgICByZXR1cm4gZW1p
dENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKGluc2VydGlvblNldCwgYXJndW1lbnRzLT5j
aGlsZDEoKS5ub2RlKCksIG5vZGVJbmRleCwgb3JpZ2luLCBhZGRUaGlzKTsKKwogICAgIGlmIChh
cmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCkgewotICAgICAgICB1
bnNpZ25lZCBudW1iZXJPZk5vblNwcmVhZEFyZ3VtZW50cyA9IDA7CisgICAgICAgIHVuc2lnbmVk
IG51bWJlck9mTm9uU3ByZWFkQXJndW1lbnRzID0gYWRkVGhpczsKICAgICAgICAgQml0VmVjdG9y
KiBiaXRWZWN0b3IgPSBhcmd1bWVudHMtPmJpdFZlY3RvcigpOwogICAgICAgICBOb2RlKiBjdXJy
ZW50U3VtID0gbnVsbHB0cjsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3Vt
ZW50cy0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7CkBAIC0xMDMsNyArMTEwLDcgQEAgTm9kZSogZW1p
dENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAogCiAgICAgaWYgKGFyZ3VtZW50cy0+b3Ao
KSA9PSBOZXdBcnJheUJ1ZmZlciB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5
QnVmZmVyKSB7CiAgICAgICAgIHJldHVybiBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoCi0g
ICAgICAgICAgICBub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIoYXJndW1lbnRzLT5jYXN0T3Bl
cmFuZDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KCktPmxlbmd0aCgpKSk7CisgICAgICAgICAgICBu
b2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIoYXJndW1lbnRzLT5jYXN0T3BlcmFuZDxKU0ltbXV0
YWJsZUJ1dHRlcmZseSo+KCktPmxlbmd0aCgpICsgYWRkVGhpcykpOwogICAgIH0KICAgICAKICAg
ICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGFyZ3VtZW50cy0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZSgpOwpAQCAtMTEzLDcgKzEyMCw3IEBAIE5vZGUqIGVtaXRD
b2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKICAgICAgICAgbnVtYmVyT2ZBcmd1bWVudHNU
b1NraXAgPSBhcmd1bWVudHMtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CiAgICAgCiAgICAg
aWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewot
ICAgICAgICB1bnNpZ25lZCBhcmd1bWVudHNTaXplID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyAtIDE7CisgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50c1NpemUg
PSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gIWFkZFRoaXM7
CiAgICAgICAgIGlmIChhcmd1bWVudHNTaXplID49IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKQog
ICAgICAgICAgICAgYXJndW1lbnRzU2l6ZSAtPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKICAg
ICAgICAgZWxzZQpAQCAtMTI5LDE0ICsxMzYsMTQgQEAgTm9kZSogZW1pdENvZGVUb0dldEFyZ3Vt
ZW50c0FycmF5TGVuZ3RoKAogICAgICAgICBub2RlSW5kZXgsIFNwZWNJbnQzMk9ubHksIEFyaXRo
U3ViLCBvcmlnaW4sIE9wSW5mbyhBcml0aDo6VW5jaGVja2VkKSwKICAgICAgICAgRWRnZShhcmd1
bWVudENvdW50LCBJbnQzMlVzZSksCiAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRDb25zdGFu
dEZvclVzZSgKLSAgICAgICAgICAgIG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcigxICsgbnVt
YmVyT2ZBcmd1bWVudHNUb1NraXApLCBJbnQzMlVzZSkpOworICAgICAgICAgICAgbm9kZUluZGV4
LCBvcmlnaW4sIGpzTnVtYmVyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwICsgIWFkZFRoaXMpLCBJ
bnQzMlVzZSkpOwogCiAgICAgaWYgKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSB7CiAgICAgICAg
IC8vIFRoZSBhYm92ZSBzdWJ0cmFjdGlvbiBtYXkgcHJvZHVjZSBhIG5lZ2F0aXZlIG51bWJlciBp
ZiB0aGlzIG51bWJlciBpcyBub24temVyby4gV2UgY29ycmVjdCB0aGF0IGhlcmUuCiAgICAgICAg
IHJlc3VsdCA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgbm9kZUluZGV4
LCBTcGVjSW50MzJPbmx5LCBBcml0aE1heCwgb3JpZ2luLCAKICAgICAgICAgICAgIEVkZ2UocmVz
dWx0LCBJbnQzMlVzZSksIAotICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50
Rm9yVXNlKG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcigwKSwgSW50MzJVc2UpKTsKKyAgICAg
ICAgICAgIGluc2VydGlvblNldC5pbnNlcnRDb25zdGFudEZvclVzZShub2RlSW5kZXgsIG9yaWdp
biwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFkZFRoaXMpKSwgSW50MzJVc2UpKTsK
ICAgICAgICAgcmVzdWx0LT5zZXRSZXN1bHQoTm9kZVJlc3VsdEludDMyKTsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oCmlu
ZGV4IDlhNzcxOGZiYmY1NDdiMmY2YWUxMDFkYWYzNzRhMDZhMmMzZGRmMTIuLjc0ZjkzOWU4MTYy
MmQ0MDI0NmUyMzU1ZDUwOThhOWVkMmE4NTIxMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuaApAQCAtMzEsMTEgKzMxLDExIEBACiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotYm9vbCBhcmd1bWVudHNJbnZvbHZl
U3RhY2tTbG90KElubGluZUNhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3Rlcik7Ci1ib29sIGFyZ3Vt
ZW50c0ludm9sdmVTdGFja1Nsb3QoTm9kZSogY2FuZGlkYXRlLCBWaXJ0dWFsUmVnaXN0ZXIpOwor
Ym9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElubGluZUNhbGxGcmFtZSosIE9wZXJhbmQp
OworYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KE5vZGUqIGNhbmRpZGF0ZSwgT3BlcmFu
ZCk7CiAKIE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKLSAgICBJbnNl
cnRpb25TZXQmLCBOb2RlKiBhcmd1bWVudHMsIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdp
bik7CisgICAgSW5zZXJ0aW9uU2V0JiwgTm9kZSogYXJndW1lbnRzLCB1bnNpZ25lZCBub2RlSW5k
ZXgsIE5vZGVPcmlnaW4sIGJvb2wgYWRkVGhpcyA9IGZhbHNlKTsKIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0
VGFpbEFic3RyYWN0U3RhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWls
QWJzdHJhY3RTdGF0ZS5oCmluZGV4IDk2ZGFjMzlhNDQ0ZmZiZDNjZTU0M2Y1N2YzNmNkNjFkZWNj
MjhiZDQuLjg5N2M3MGRmZmJhMDY2YjY0OWNhZmRjYzFlZjA5MzM3NjgxMDRkMTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCkBA
IC0xMzksOCArMTM5LDcgQEAgcHVibGljOgogICAgIAogICAgIHVuc2lnbmVkIG51bWJlck9mQXJn
dW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm51bWJlck9mQXJn
dW1lbnRzKCk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJu
IG1fYmxvY2stPnZhbHVlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpOyB9Ci0gICAgQWJzdHJhY3RW
YWx1ZSYgb3BlcmFuZChpbnQgb3BlcmFuZCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWls
Lm9wZXJhbmQob3BlcmFuZCk7IH0KLSAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwub3BlcmFuZChv
cGVyYW5kKTsgfQorICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoT3BlcmFuZCBvcGVyYW5kKSB7
IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsgfQogICAgIEFi
c3RyYWN0VmFsdWUmIGxvY2FsKHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVz
QXRUYWlsLmxvY2FsKGluZGV4KTsgfQogICAgIEFic3RyYWN0VmFsdWUmIGFyZ3VtZW50KHNpemVf
dCBpbmRleCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGluZGV4KTsg
fQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFi
aWxpdHlNYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlN
YXAuY3BwCmluZGV4IDc3NDNlN2QwMWYxY2FkNzgxZDg0YWIwM2QzYzA5Yzc3ZjgwMjliYTUuLmMy
YjU1YWE1YzRhNTIyOWIxYjFhNDQzMWMxODdhZGVmNDZjM2RiMjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAKQEAgLTY1LDEwICs2NSwx
MCBAQCB2b2lkIEF2YWlsYWJpbGl0eU1hcDo6cHJ1bmVIZWFwKCkKIAogdm9pZCBBdmFpbGFiaWxp
dHlNYXA6OnBydW5lQnlMaXZlbmVzcyhHcmFwaCYgZ3JhcGgsIENvZGVPcmlnaW4gd2hlcmUpCiB7
Ci0gICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBsb2NhbHNDb3B5KG1fbG9jYWxzLm51bWJlck9m
QXJndW1lbnRzKCksIG1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCksIEF2YWlsYWJpbGl0eTo6dW5h
dmFpbGFibGUoKSk7CisgICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBsb2NhbHNDb3B5KE9wZXJh
bmRzTGlrZSwgbV9sb2NhbHMsIEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKSk7CiAgICAgZ3Jh
cGguZm9yQWxsTGl2ZUluQnl0ZWNvZGUoCiAgICAgICAgIHdoZXJlLAotICAgICAgICBbJl0gKFZp
cnR1YWxSZWdpc3RlciByZWcpIHsKKyAgICAgICAgWyZdIChPcGVyYW5kIHJlZykgewogICAgICAg
ICAgICAgbG9jYWxzQ29weS5vcGVyYW5kKHJlZykgPSBtX2xvY2Fscy5vcGVyYW5kKHJlZyk7CiAg
ICAgICAgIH0pOwogICAgIG1fbG9jYWxzID0gV1RGTW92ZShsb2NhbHNDb3B5KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5oCmluZGV4IDUzNTUyNTYw
MjNkZGNmMjgwZGM1OTViMzNhN2M3ZmRlYzU0ZTY0ZjAuLjgwYzEyYmYxODAyNWE1NjEwNTk2ZGEy
NGUyM2MwMjVmMmFiZTRmMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXZhaWxhYmlsaXR5TWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
dmFpbGFiaWxpdHlNYXAuaApAQCAtNjYsOSArNjYsOSBAQCBzdHJ1Y3QgQXZhaWxhYmlsaXR5TWFw
IHsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzRnVuY3RvciwgdHlwZW5h
bWUgQWRkRnVuY3Rvcj4KLSAgICB2b2lkIGNsb3NlU3RhcnRpbmdXaXRoTG9jYWwoVmlydHVhbFJl
Z2lzdGVyIHJlZywgY29uc3QgSGFzRnVuY3RvciYgaGFzLCBjb25zdCBBZGRGdW5jdG9yJiBhZGQp
CisgICAgdm9pZCBjbG9zZVN0YXJ0aW5nV2l0aExvY2FsKE9wZXJhbmQgb3AsIGNvbnN0IEhhc0Z1
bmN0b3ImIGhhcywgY29uc3QgQWRkRnVuY3RvciYgYWRkKQogICAgIHsKLSAgICAgICAgQXZhaWxh
YmlsaXR5IGF2YWlsYWJpbGl0eSA9IG1fbG9jYWxzLm9wZXJhbmQocmVnKTsKKyAgICAgICAgQXZh
aWxhYmlsaXR5IGF2YWlsYWJpbGl0eSA9IG1fbG9jYWxzLm9wZXJhbmQob3ApOwogICAgICAgICBp
ZiAoIWF2YWlsYWJpbGl0eS5oYXNOb2RlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKaW5kZXggYzhk
MWQxN2Q2ZDljNzU1MGM0YjFiZTUwZjBlZDlmNzI2MTc2ZjIyMy4uZTQ4ZTBjMjRmMDM5N2Y1MTE3
ZGNmYTcyMTgyNDdlNzI5ZDY1YzkzYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Jhc2ljQmxvY2suY3BwCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKIAogREVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihCYXNpY0Js
b2NrKTsKIAotQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVn
aW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzLCBmbG9hdCBleGVj
dXRpb25Db3VudCkKK0Jhc2ljQmxvY2s6OkJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscywgdW5zaWdu
ZWQgbnVtVG1wcywgZmxvYXQgZXhlY3V0aW9uQ291bnQpCiAgICAgOiBieXRlY29kZUJlZ2luKGJ5
dGVjb2RlQmVnaW4pCiAgICAgLCBpbmRleChOb0Jsb2NrKQogICAgICwgY2ZhU3RydWN0dXJlQ2xv
YmJlclN0YXRlQXRIZWFkKFN0cnVjdHVyZXNBcmVXYXRjaGVkKQpAQCAtNTAsMTEgKzUwLDExIEBA
IEJhc2ljQmxvY2s6OkJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29kZUJlZ2luLCB1bnNp
Z25lZCBudW1Bcmd1bWVudHMsIHVuc2lnCiAgICAgLCBpc0xpbmtlZChmYWxzZSkKICNlbmRpZgog
ICAgICwgaXNSZWFjaGFibGUoZmFsc2UpCi0gICAgLCB2YXJpYWJsZXNBdEhlYWQobnVtQXJndW1l
bnRzLCBudW1Mb2NhbHMpCi0gICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1M
b2NhbHMpCi0gICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAgLCBpbnRlcnNlY3Rp
b25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMsIEFic3RyYWN0VmFs
dWU6OmZ1bGxUb3AoKSkKKyAgICAsIHZhcmlhYmxlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxv
Y2FscywgbnVtVG1wcykKKyAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxv
Y2FscywgbnVtVG1wcykKKyAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2Fs
cywgbnVtVG1wcykKKyAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2Fscywg
bnVtVG1wcykKKyAgICAsIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1bWVu
dHMsIG51bUxvY2FscywgbnVtVG1wcywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKQogICAgICwg
ZXhlY3V0aW9uQ291bnQoZXhlY3V0aW9uQ291bnQpCiB7CiB9CkBAIC03Miw2ICs3MiwxNSBAQCB2
b2lkIEJhc2ljQmxvY2s6OmVuc3VyZUxvY2Fscyh1bnNpZ25lZCBuZXdOdW1Mb2NhbHMpCiAgICAg
aW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMs
IEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSk7CiB9CiAKK3ZvaWQgQmFzaWNCbG9jazo6ZW5zdXJl
VG1wcyh1bnNpZ25lZCBuZXdOdW1UbXBzKQoreworICAgIHZhcmlhYmxlc0F0SGVhZC5lbnN1cmVU
bXBzKG5ld051bVRtcHMpOworICAgIHZhcmlhYmxlc0F0VGFpbC5lbnN1cmVUbXBzKG5ld051bVRt
cHMpOworICAgIHZhbHVlc0F0SGVhZC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOworICAgIHZhbHVl
c0F0VGFpbC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOworICAgIGludGVyc2VjdGlvbk9mUGFzdFZh
bHVlc0F0SGVhZC5lbnN1cmVUbXBzKG5ld051bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3Ao
KSk7Cit9CisKIHZvaWQgQmFzaWNCbG9jazo6cmVwbGFjZVRlcm1pbmFsKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZSkKIHsKICAgICBOb2RlQW5kSW5kZXggcmVzdWx0ID0gZmluZFRlcm1pbmFsKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCmluZGV4IGQ0NTcxNzVl
OGI3MTUyMzVmYzc5ZGQxMjI5MGM5ZWZkOTc1ZWI3Y2IuLmQyYzVhZTljMTNmM2I0ZTc3OWY5OGEx
NGMxNzAzN2Q5OGY5NmQ5YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmFzaWNCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNC
bG9jay5oCkBAIC00OSwxMSArNDksMTIgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lE
RU5USUZJRVIoQmFzaWNCbG9jayk7CiBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFz
aWNCbG9jaz4gewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBf
SURFTlRJRklFUihCYXNpY0Jsb2NrKTsKICAgICBCYXNpY0Jsb2NrKAotICAgICAgICBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVt
TG9jYWxzLAorICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51
bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzLCB1bnNpZ25lZCBudW1UbXBzLAogICAgICAg
ICBmbG9hdCBleGVjdXRpb25Db3VudCk7CiAgICAgfkJhc2ljQmxvY2soKTsKICAgICAKICAgICB2
b2lkIGVuc3VyZUxvY2Fscyh1bnNpZ25lZCBuZXdOdW1Mb2NhbHMpOworICAgIHZvaWQgZW5zdXJl
VG1wcyh1bnNpZ25lZCBuZXdOdW1UbXBzKTsKICAgICAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbm9kZXMuc2l6ZSgpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gIXNpemUoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCbG9ja0luc2VydGlvblNldC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Js
b2NrSW5zZXJ0aW9uU2V0LmNwcAppbmRleCA3NTA4ZTIxOWRjN2M1ODNkYjllYThmY2U2NDY4NTg5
OTllMDQ2MGY5Li4wMDhjZjUyMjY5NTdjOWE4MzU4NWM1ZTVlMmMxMjVmMmY4Y2U0YjJlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNw
cApAQCAtNTEsNyArNTEsNyBAQCB2b2lkIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQoc2l6ZV90
IGluZGV4LCBSZWY8QmFzaWNCbG9jaz4mJiBibG9jaykKIAogQmFzaWNCbG9jayogQmxvY2tJbnNl
cnRpb25TZXQ6Omluc2VydChzaXplX3QgaW5kZXgsIGZsb2F0IGV4ZWN1dGlvbkNvdW50KQogewot
ICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRl
Y29kZUluZGV4KCksIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFy
Z3VtZW50cygpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2Nh
bHMoKSwgZXhlY3V0aW9uQ291bnQpKTsKKyAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9w
dFJlZigqbmV3IEJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCgpLCBtX2dyYXBoLmJsb2NrKDApLT52
YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFy
aWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCksIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZlRtcHMoKSwgZXhlY3V0aW9uQ291bnQpKTsKICAgICBibG9jay0+aXNS
ZWFjaGFibGUgPSB0cnVlOwogICAgIGF1dG8qIHJlc3VsdCA9IGJsb2NrLnB0cigpOwogICAgIGlu
c2VydChpbmRleCwgV1RGTW92ZShibG9jaykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCA3ZWZmYWQwN2YyMjQyNThmMDdhMmUwNGY2
YWJmZWUwNjBiMmZhZDUwLi45M2JlMGVkYjFhNzIyZTczODUyMmNlYTZjMDNlNzRmOTNkM2NkMjQ2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cApAQCAtMTEzLDYgKzExMyw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2NvbnN0YW50T25lKGdy
YXBoLmZyZWV6ZShqc051bWJlcigxKSkpCiAgICAgICAgICwgbV9udW1Bcmd1bWVudHMobV9jb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKSkKICAgICAgICAgLCBtX251bUxvY2FscyhtX2NvZGVCbG9j
ay0+bnVtQ2FsbGVlTG9jYWxzKCkpCisgICAgICAgICwgbV9udW1UbXBzKG1fY29kZUJsb2NrLT5u
dW1UbXBzKCkpCiAgICAgICAgICwgbV9wYXJhbWV0ZXJTbG90cygwKQogICAgICAgICAsIG1fbnVt
UGFzc2VkVmFyQXJncygwKQogICAgICAgICAsIG1faW5saW5lU3RhY2tUb3AoMCkKQEAgLTE0MSw2
ICsxNDIsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fZ3JhcGguYmxvY2soaSktPmVuc3Vy
ZUxvY2FscyhuZXdOdW1Mb2NhbHMpOwogICAgIH0KIAorICAgIHZvaWQgZW5zdXJlVG1wcyh1bnNp
Z25lZCBuZXdOdW1UbXBzKQorICAgIHsKKyAgICAgICAgVkVSQk9TRV9MT0coIiAgIGVuc3VyZVRt
cHM6IHRyeWluZyB0byByYWlzZSBtX251bVRtcHMgZnJvbSAiLCBtX251bVRtcHMsICIgdG8gIiwg
bmV3TnVtVG1wcywgIlxuIik7CisgICAgICAgIGlmIChuZXdOdW1UbXBzIDw9IG1fbnVtVG1wcykK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9udW1UbXBzID0gbmV3TnVtVG1wczsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2kpCisg
ICAgICAgICAgICBtX2dyYXBoLmJsb2NrKGkpLT5lbnN1cmVUbXBzKG5ld051bVRtcHMpOworICAg
IH0KKworCiAgICAgLy8gSGVscGVyIGZvciBtaW4gYW5kIG1heC4KICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGVja3NGdW5jdG9yPgogICAgIGJvb2wgaGFuZGxlTWluTWF4KFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHQsIE5vZGVUeXBlIG9wLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcywgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKQEAg
LTI3Miw3ICsyODQsMTcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGxpbmtCbG9jayhCYXNpY0Jsb2Nr
KiwgVmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKTsKICAgICB2b2lkIGxpbmtC
bG9ja3MoVmVjdG9yPEJhc2ljQmxvY2sqPiYgdW5saW5rZWRCbG9ja3MsIFZlY3RvcjxCYXNpY0Js
b2NrKj4mIHBvc3NpYmxlVGFyZ2V0cyk7CiAgICAgCi0gICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBu
ZXdWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgdm9pZCBw
cm9ncmVzc1RvTmV4dENoZWNrcG9pbnQoKQorICAgIHsKKyAgICAgICAgbV9jdXJyZW50SW5kZXgg
PSBCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4Lm9mZnNldCgpLCBtX2N1cnJlbnRJbmRleC5j
aGVja3BvaW50KCkgKyAxKTsKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgaXQncyBhZ2FpbiBP
SyB0byBPU1IgZXhpdC4KKyAgICAgICAgbV9leGl0T0sgPSB0cnVlOworICAgICAgICBhZGRUb0dy
YXBoKEV4aXRPSyk7CisKKyAgICAgICAgcHJvY2Vzc1NldExvY2FsUXVldWUoKTsKKyAgICB9CisK
KyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShPcGVyYW5kIG9w
ZXJhbmQpCiAgICAgewogICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKICAg
ICAgICAgCkBAIC0yODEsMTYgKzMwMywxNCBAQCBwcml2YXRlOgogICAgIH0KICAgICAKICAgICAv
LyBHZXQvU2V0IHRoZSBvcGVyYW5kcy9yZXN1bHQgb2YgYSBieXRlY29kZSBpbnN0cnVjdGlvbi4K
LSAgICBOb2RlKiBnZXREaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgTm9kZSog
Z2V0RGlyZWN0KE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghb3BlcmFu
ZC5pc0NvbnN0YW50KCkpOwogCi0gICAgICAgIC8vIElzIHRoaXMgYW4gYXJndW1lbnQ/CiAgICAg
ICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBnZXRBcmd1
bWVudChvcGVyYW5kKTsKKyAgICAgICAgICAgIHJldHVybiBnZXRBcmd1bWVudChvcGVyYW5kLnZp
cnR1YWxSZWdpc3RlcigpKTsKIAotICAgICAgICAvLyBNdXN0IGJlIGEgbG9jYWwuCi0gICAgICAg
IHJldHVybiBnZXRMb2NhbChvcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuIGdldExvY2FsT3JUbXAo
b3BlcmFuZCk7CiAgICAgfQogCiAgICAgTm9kZSogZ2V0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQpAQCAtMzAwLDggKzMyMCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB1bnNpZ25lZCBvbGRT
aXplID0gbV9jb25zdGFudHMuc2l6ZSgpOwogICAgICAgICAgICAgaWYgKGNvbnN0YW50SW5kZXgg
Pj0gb2xkU2l6ZSB8fCAhbV9jb25zdGFudHNbY29uc3RhbnRJbmRleF0pIHsKICAgICAgICAgICAg
ICAgICBjb25zdCBDb2RlQmxvY2smIGNvZGVCbG9jayA9ICptX2lubGluZVN0YWNrVG9wLT5tX2Nv
ZGVCbG9jazsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gY29kZUJsb2NrLmdldENv
bnN0YW50KG9wZXJhbmQub2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgIFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBjb2RlQmxvY2suY29uc3RhbnRT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24ob3BlcmFuZC5vZmZzZXQoKSk7CisgICAgICAgICAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IGNvZGVCbG9jay5nZXRDb25zdGFudChvcGVyYW5kKTsKKyAgICAg
ICAgICAgICAgICBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gc291cmNlQ29kZVJlcHJlc2VudGF0
aW9uID0gY29kZUJsb2NrLmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKG9wZXJhbmQp
OwogICAgICAgICAgICAgICAgIGlmIChjb25zdGFudEluZGV4ID49IG9sZFNpemUpIHsKICAgICAg
ICAgICAgICAgICAgICAgbV9jb25zdGFudHMuZ3Jvdyhjb25zdGFudEluZGV4ICsgMSk7CiAgICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZFNpemU7IGkgPCBtX2NvbnN0YW50
cy5zaXplKCk7ICsraSkKQEAgLTM2MCw5ICszODAsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgLy8g
aW5pdGlhbGl6aW5nIGxvY2FscyBhdCB0aGUgdG9wIG9mIGEgZnVuY3Rpb24uCiAgICAgICAgIElt
bWVkaWF0ZU5ha2VkU2V0CiAgICAgfTsKLSAgICBOb2RlKiBzZXREaXJlY3QoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisK
KyAgICBOb2RlKiBzZXREaXJlY3QoT3BlcmFuZCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9k
ZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKLSAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50
LCBPcEluZm8ob3BlcmFuZC5vZmZzZXQoKSksIHZhbHVlKTsKKyAgICAgICAgYWRkVG9HcmFwaChN
b3ZIaW50LCBPcEluZm8ob3BlcmFuZCksIHZhbHVlKTsKIAogICAgICAgICAvLyBXZSBjYW4ndCBl
eGl0IGFueW1vcmUgYmVjYXVzZSBvdXIgT1NSIGV4aXQgc3RhdGUgaGFzIGNoYW5nZWQuCiAgICAg
ICAgIG1fZXhpdE9LID0gZmFsc2U7CkBAIC0zNzYsNyArMzk3LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgCiAgICAgICAgIHJldHVybiBkZWxheWVkLmV4ZWN1dGUodGhpcyk7CiAgICAgfQotICAgIAor
CiAgICAgdm9pZCBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpCiAgICAgewogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9zZXRMb2NhbFF1ZXVlLnNpemUoKTsgKytpKQpAQCAtMzk0LDE4
ICs0MTUsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gR2V0TG9j
YWwpOwogICAgICAgICBBU1NFUlQobm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgo
KSA9PSBtX2N1cnJlbnRJbmRleCk7CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
bV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwotICAgICAgICBMYXp5
T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkobV9jdXJyZW50SW5kZXgsIG5vZGUtPmxvY2FsKCkp
OworICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkobV9jdXJyZW50SW5kZXgs
IG5vZGUtPm9wZXJhbmQoKSk7CiAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBt
X2lubGluZVN0YWNrVG9wLT5tX2xhenlPcGVyYW5kcy5wcmVkaWN0aW9uKGxvY2tlciwga2V5KTsK
ICAgICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QocHJlZGljdGlvbik7
CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIAogICAgIC8vIFVzZWQgaW4gaW1wbGVtZW50
aW5nIGdldC9zZXQsIGFib3ZlLCB3aGVyZSB0aGUgb3BlcmFuZCBpcyBhIGxvY2FsIHZhcmlhYmxl
LgotICAgIE5vZGUqIGdldExvY2FsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIE5vZGUq
IGdldExvY2FsT3JUbXAoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQg
bG9jYWwgPSBvcGVyYW5kLnRvTG9jYWwoKTsKLQotICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCk7CisgICAgICAgIEFTU0VSVChv
cGVyYW5kLmlzVG1wKCkgfHwgb3BlcmFuZC5pc0xvY2FsKCkpOworICAgICAgICBOb2RlKiYgbm9k
ZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKICAg
ICAgICAgCiAgICAgICAgIC8vIFRoaXMgaGFzIHR3byBnb2FsczogMSkgbGluayB0b2dldGhlciB2
YXJpYWJsZSBhY2Nlc3MgZGF0YXMsIGFuZCAyKQogICAgICAgICAvLyB0cnkgdG8gYXZvaWQgY3Jl
YXRpbmcgcmVkdW5kYW50IEdldExvY2Fscy4gKDEpIGlzIHJlcXVpcmVkIGZvcgpAQCAtNDMwLDIw
ICs0NTAsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVB
Y2Nlc3NEYXRhKG9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgbm9kZSA9IGluamVjdExhenlP
cGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlKSkp
OwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSA9
IG5vZGU7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KLSAgICBOb2RlKiBzZXRMb2NhbChj
b25zdCBDb2RlT3JpZ2luJiBzZW1hbnRpY09yaWdpbiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQs
IE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisgICAgTm9kZSogc2V0
TG9jYWxPclRtcChjb25zdCBDb2RlT3JpZ2luJiBzZW1hbnRpY09yaWdpbiwgT3BlcmFuZCBvcGVy
YW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKKyAg
ICAgICAgQVNTRVJUKG9wZXJhbmQuaXNUbXAoKSB8fCBvcGVyYW5kLmlzTG9jYWwoKSk7CiAgICAg
ICAgIFNldEZvclNjb3BlPENvZGVPcmlnaW4+IG9yaWdpbkNoYW5nZShtX2N1cnJlbnRTZW1hbnRp
Y09yaWdpbiwgc2VtYW50aWNPcmlnaW4pOwogCi0gICAgICAgIHVuc2lnbmVkIGxvY2FsID0gb3Bl
cmFuZC50b0xvY2FsKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoc2V0TW9kZSAhPSBJbW1lZGlh
dGVOYWtlZFNldCkgewotICAgICAgICAgICAgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3Np
dGlvbiA9IGZpbmRBcmd1bWVudFBvc2l0aW9uRm9yTG9jYWwob3BlcmFuZCk7CisgICAgICAgIGlm
IChvcGVyYW5kLmlzVG1wKCkgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9wZXJhbmQudmFsdWUo
KSkgPj0gbV9udW1UbXBzKSB7CisgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKCkpCisg
ICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCppbmxpbmVDYWxsRnJhbWUoKSk7CisgICAgICAgICAg
ICBkYXRhTG9nTG4oIkJhZCBvcGVyYW5kOiAiLCBvcGVyYW5kLCAiIGJ1dCBjdXJyZW50IG51bWJl
ciBvZiB0bXBzIGlzOiAiLCBtX251bVRtcHMsICIgY29kZSBibG9jayBoYXM6ICIsIG1fcHJvZmls
ZWRCbG9jay0+bnVtVG1wcygpLCAiIHRtcHMuIik7CisgICAgICAgICAgICBDUkFTSCgpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHNldE1vZGUgIT0gSW1tZWRpYXRlTmFrZWRTZXQgJiYgIW9w
ZXJhbmQuaXNUbXAoKSkgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJh
bmQudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBBcmd1bWVudFBvc2l0aW9uKiBhcmd1
bWVudFBvc2l0aW9uID0gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JMb2NhbChyZWcpOwogICAgICAg
ICAgICAgaWYgKGFyZ3VtZW50UG9zaXRpb24pCiAgICAgICAgICAgICAgICAgZmx1c2hEaXJlY3Qo
b3BlcmFuZCwgYXJndW1lbnRQb3NpdGlvbik7Ci0gICAgICAgICAgICBlbHNlIGlmIChtX2dyYXBo
Lm5lZWRzU2NvcGVSZWdpc3RlcigpICYmIG9wZXJhbmQgPT0gbV9jb2RlQmxvY2stPnNjb3BlUmVn
aXN0ZXIoKSkKKyAgICAgICAgICAgIGVsc2UgaWYgKG1fZ3JhcGgubmVlZHNTY29wZVJlZ2lzdGVy
KCkgJiYgcmVnID09IG1fY29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkpCiAgICAgICAgICAgICAg
ICAgZmx1c2gob3BlcmFuZCk7CiAgICAgICAgIH0KIApAQCAtNDUzLDcgKzQ3OSw3IEBAIHByaXZh
dGU6CiAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VDaGVja0FycmF5SG9pc3RpbmdG
YWlsZWQoCiAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4
aXRTaXRlKHNlbWFudGljT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSwgQmFkSW5kZXhpbmdUeXBlKSk7
CiAgICAgICAgIE5vZGUqIG5vZGUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8odmFyaWFi
bGVBY2Nlc3NEYXRhKSwgdmFsdWUpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVz
QXRUYWlsLmxvY2FsKGxvY2FsKSA9IG5vZGU7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJp
YWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSA9IG5vZGU7CiAgICAgICAgIHJldHVybiBub2Rl
OwogICAgIH0KIApAQCAtNDg1LDIwICs1MTEsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBub2RlOwogICAg
ICAgICByZXR1cm4gbm9kZTsKICAgICB9Ci0gICAgTm9kZSogc2V0QXJndW1lbnQoY29uc3QgQ29k
ZU9yaWdpbiYgc2VtYW50aWNPcmlnaW4sIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2
YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQorICAgIE5vZGUqIHNldEFyZ3VtZW50
KGNvbnN0IENvZGVPcmlnaW4mIHNlbWFudGljT3JpZ2luLCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUq
IHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAgewogICAgICAgICBTZXRG
b3JTY29wZTxDb2RlT3JpZ2luPiBvcmlnaW5DaGFuZ2UobV9jdXJyZW50U2VtYW50aWNPcmlnaW4s
IHNlbWFudGljT3JpZ2luKTsKIAotICAgICAgICB1bnNpZ25lZCBhcmd1bWVudCA9IG9wZXJhbmQu
dG9Bcmd1bWVudCgpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFuZC52aXJ0
dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgdW5zaWduZWQgYXJndW1lbnQgPSByZWcudG9Bcmd1bWVu
dCgpOwogICAgICAgICBBU1NFUlQoYXJndW1lbnQgPCBtX251bUFyZ3VtZW50cyk7CiAgICAgICAg
IAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1Zh
cmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEocmVnKTsKIAogICAgICAg
ICAvLyBBbHdheXMgZmx1c2ggYXJndW1lbnRzLCBleGNlcHQgZm9yICd0aGlzJy4gSWYgJ3RoaXMn
IGlzIGNyZWF0ZWQgYnkgdXMsCiAgICAgICAgIC8vIHRoZW4gbWFrZSBzdXJlIHRoYXQgaXQncyBu
ZXZlciB1bmJveGVkLgogICAgICAgICBpZiAoYXJndW1lbnQgfHwgbV9ncmFwaC5uZWVkc0ZsdXNo
ZWRUaGlzKCkpIHsKICAgICAgICAgICAgIGlmIChzZXRNb2RlICE9IEltbWVkaWF0ZU5ha2VkU2V0
KQotICAgICAgICAgICAgICAgIGZsdXNoRGlyZWN0KG9wZXJhbmQpOworICAgICAgICAgICAgICAg
IGZsdXNoRGlyZWN0KHJlZyk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghYXJn
dW1lbnQgJiYgbV9jb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgpID09IENvZGVGb3JDb25z
dHJ1Y3QpCkBAIC01MzQsMTQgKzU2MSwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgaW50IGFy
Z3VtZW50ID0gVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQub2Zmc2V0KCkgLSBpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0KS50b0FyZ3VtZW50KCk7CiAgICAgICAgICAgICByZXR1cm4gc3RhY2st
Pm1fYXJndW1lbnRQb3NpdGlvbnNbYXJndW1lbnRdOwogICAgICAgICB9Ci0gICAgICAgIHJldHVy
biAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCi0gICAgQXJndW1lbnRQ
b3NpdGlvbiogZmluZEFyZ3VtZW50UG9zaXRpb24oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgQXJndW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9zaXRpb24oT3BlcmFuZCBvcGVyYW5k
KQogICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JBcmd1bWVudChvcGVyYW5kLnRvQXJndW1l
bnQoKSk7Ci0gICAgICAgIHJldHVybiBmaW5kQXJndW1lbnRQb3NpdGlvbkZvckxvY2FsKG9wZXJh
bmQpOworICAgICAgICByZXR1cm4gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JMb2NhbChvcGVyYW5k
LnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGRG
bHVzaERpcmVjdEZ1bmM+CkBAIC01NTIsOSArNTgxLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IEFTU0VSVCghbV9ncmFwaC5oYXNEZWJ1Z2dlckVuYWJsZWQoKSk7CiAgICAgICAgICAgICBudW1B
cmd1bWVudHMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1dpdGhGaXh1cC5zaXplKCk7CiAg
ICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAg
ICAgICAgIGFkZEZsdXNoRGlyZWN0KGlubGluZUNhbGxGcmFtZSwgcmVtYXBPcGVyYW5kKGlubGlu
ZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKKyAg
ICAgICAgICAgICAgICBhZGRGbHVzaERpcmVjdChpbmxpbmVDYWxsRnJhbWUsIHJlbWFwT3BlcmFu
ZChpbmxpbmVDYWxsRnJhbWUsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOwogICAgICAgICAgICAg
aWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCi0gICAgICAgICAgICAgICAgYWRkRmx1
c2hEaXJlY3QoaW5saW5lQ2FsbEZyYW1lLCByZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBW
aXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
KSk7CisgICAgICAgICAgICAgICAgYWRkRmx1c2hEaXJlY3QoaW5saW5lQ2FsbEZyYW1lLCByZW1h
cE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcykpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG51bUFyZ3VtZW50cyA9
IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKS0+bnVtUGFyYW1l
dGVycygpOwogCkBAIC01NzcsNiArNjA2LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihpbmxp
bmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxs
TGl2ZW5lc3MgPSBtX2dyYXBoLmxpdmVuZXNzRm9yKGNvZGVCbG9jayk7CisgICAgICAgICAgICAg
ICAgLy8gTm90ZTogV2UgZG9uJ3QgbmVlZCB0byBoYW5kbGUgdG1wcyBoZXJlIGJlY2F1c2UgdG1w
cyBhcmUgbm90IHJlcXVpcmVkIHRvIGJlIGZsdXNoZWQgdG8gdGhlIHN0YWNrLgogICAgICAgICAg
ICAgICAgIGNvbnN0IGF1dG8mIGxpdmVuZXNzQXRCeXRlY29kZSA9IGZ1bGxMaXZlbmVzcy5nZXRM
aXZlbmVzcyhieXRlY29kZUluZGV4LCBtX2dyYXBoLmFwcHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxh
dGlvblBvaW50KG9yaWdpbiwgaXNDYWxsZXJPcmlnaW4pKTsKICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGxvY2FsID0gY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsgbG9jYWwtLTsp
IHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGxpdmVuZXNzQXRCeXRlY29kZVtsb2NhbF0pCkBA
IC01ODYsMjcgKzYxNiwyNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgfSk7CiAgICAgfQogCi0g
ICAgdm9pZCBmbHVzaChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lkIGZsdXNoKE9w
ZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIGZsdXNoRGlyZWN0KG1faW5saW5lU3RhY2tU
b3AtPnJlbWFwT3BlcmFuZChvcGVyYW5kKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgZmx1c2hE
aXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgdm9pZCBmbHVzaERpcmVjdChPcGVy
YW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICBmbHVzaERpcmVjdChvcGVyYW5kLCBmaW5kQXJn
dW1lbnRQb3NpdGlvbihvcGVyYW5kKSk7CiAgICAgfQogCi0gICAgdm9pZCBmbHVzaERpcmVjdChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlv
bikKKyAgICB2b2lkIGZsdXNoRGlyZWN0KE9wZXJhbmQgb3BlcmFuZCwgQXJndW1lbnRQb3NpdGlv
biogYXJndW1lbnRQb3NpdGlvbikKICAgICB7CiAgICAgICAgIGFkZEZsdXNoT3JQaGFudG9tTG9j
YWw8Rmx1c2g+KG9wZXJhbmQsIGFyZ3VtZW50UG9zaXRpb24pOwogICAgIH0KIAogICAgIHRlbXBs
YXRlPE5vZGVUeXBlIG5vZGVUeXBlPgotICAgIHZvaWQgYWRkRmx1c2hPclBoYW50b21Mb2NhbChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlv
bikKKyAgICB2b2lkIGFkZEZsdXNoT3JQaGFudG9tTG9jYWwoT3BlcmFuZCBvcGVyYW5kLCBBcmd1
bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFv
cGVyYW5kLmlzQ29uc3RhbnQoKSk7CiAgICAgICAgIAotICAgICAgICBOb2RlKiBub2RlID0gbV9j
dXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICBO
b2RlKiYgbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVy
YW5kKTsKICAgICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGU7CiAg
ICAgICAgIApAQCAtNjE2LDI2ICs2NDYsMjUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHZhcmlh
YmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAg
bm9kZSA9IGFkZFRvR3JhcGgobm9kZVR5cGUsIE9wSW5mbyh2YXJpYWJsZSkpOwotICAgICAgICBt
X2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkgPSBub2RlOwog
ICAgICAgICBpZiAoYXJndW1lbnRQb3NpdGlvbikKICAgICAgICAgICAgIGFyZ3VtZW50UG9zaXRp
b24tPmFkZFZhcmlhYmxlKHZhcmlhYmxlKTsKICAgICB9CiAKLSAgICB2b2lkIHBoYW50b21Mb2Nh
bERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lkIHBoYW50b21Mb2NhbERp
cmVjdChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICBhZGRGbHVzaE9yUGhhbnRvbUxv
Y2FsPFBoYW50b21Mb2NhbD4ob3BlcmFuZCwgZmluZEFyZ3VtZW50UG9zaXRpb24ob3BlcmFuZCkp
OwogICAgIH0KIAogICAgIHZvaWQgZmx1c2goSW5saW5lU3RhY2tFbnRyeSogaW5saW5lU3RhY2tF
bnRyeSkKICAgICB7Ci0gICAgICAgIGF1dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNh
bGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciByZWcpIHsgZmx1c2hEaXJlY3QocmVnKTsgfTsKKyAg
ICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgT3BlcmFu
ZCBvcGVyYW5kKSB7IGZsdXNoRGlyZWN0KG9wZXJhbmQpOyB9OwogICAgICAgICBmbHVzaEltcGwo
aW5saW5lU3RhY2tFbnRyeS0+bV9pbmxpbmVDYWxsRnJhbWUsIGFkZEZsdXNoRGlyZWN0KTsKICAg
ICB9CiAKICAgICB2b2lkIGZsdXNoRm9yVGVybWluYWwoKQogICAgIHsKLSAgICAgICAgYXV0byBh
ZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIHJl
ZykgeyBmbHVzaERpcmVjdChyZWcpOyB9OwotICAgICAgICBhdXRvIGFkZFBoYW50b21Mb2NhbERp
cmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIHJlZykgeyBwaGFu
dG9tTG9jYWxEaXJlY3QocmVnKTsgfTsKKyAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsm
XSAoSW5saW5lQ2FsbEZyYW1lKiwgT3BlcmFuZCBvcGVyYW5kKSB7IGZsdXNoRGlyZWN0KG9wZXJh
bmQpOyB9OworICAgICAgICBhdXRvIGFkZFBoYW50b21Mb2NhbERpcmVjdCA9IFsmXSAoSW5saW5l
Q2FsbEZyYW1lKiwgT3BlcmFuZCBvcGVyYW5kKSB7IHBoYW50b21Mb2NhbERpcmVjdChvcGVyYW5k
KTsgfTsKICAgICAgICAgZmx1c2hGb3JUZXJtaW5hbEltcGwoY3VycmVudENvZGVPcmlnaW4oKSwg
YWRkRmx1c2hEaXJlY3QsIGFkZFBoYW50b21Mb2NhbERpcmVjdCk7CiAgICAgfQogCkBAIC03NjMs
NiArNzkyLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBFZGdlKGNoaWxkMSksIEVkZ2UoY2hp
bGQyKSwgRWRnZShjaGlsZDMpKTsKICAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgocmVzdWx0KTsK
ICAgICB9CisgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BlcmFuZCBvcGVyYW5k
LCBOb2RlKiBjaGlsZDEpCisgICAgeworICAgICAgICBBU1NFUlQob3AgPT0gTW92SGludCk7Cisg
ICAgICAgIHJldHVybiBhZGRUb0dyYXBoKG9wLCBPcEluZm8ob3BlcmFuZC5raW5kKCkpLCBPcElu
Zm8ob3BlcmFuZC52YWx1ZSgpKSwgY2hpbGQxKTsKKyAgICB9CiAgICAgTm9kZSogYWRkVG9HcmFw
aChOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8xLCBPcEluZm8gaW5mbzIsIEVkZ2UgY2hpbGQxLCBF
ZGdlIGNoaWxkMiA9IEVkZ2UoKSwgRWRnZSBjaGlsZDMgPSBFZGdlKCkpCiAgICAgewogICAgICAg
ICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCkBAIC0xMDkzLDggKzExMjcsMTAgQEAg
cHJpdmF0ZToKIAogICAgIC8vIFRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUg
ZnVuY3Rpb24uCiAgICAgdW5zaWduZWQgbV9udW1Bcmd1bWVudHM7Ci0gICAgLy8gVGhlIG51bWJl
ciBvZiBsb2NhbHMgKHZhcnMgKyB0ZW1wb3JhcmllcykgdXNlZCBpbiB0aGUgZnVuY3Rpb24uCisg
ICAgLy8gVGhlIG51bWJlciBvZiBsb2NhbHMgKHZhcnMgKyB0ZW1wb3JhcmllcykgdXNlZCBieSB0
aGUgYnl0ZWNvZGUgZm9yIHRoZSBmdW5jdGlvbi4KICAgICB1bnNpZ25lZCBtX251bUxvY2FsczsK
KyAgICAvLyBUaGUgbWF4IG51bWJlciBvZiB0ZW1wcyB1c2VkIGZvciBmb3J3YXJkaW5nIGRhdGEg
dG8gYW4gT1NSIGV4aXQgY2hlY2twb2ludC4KKyAgICB1bnNpZ25lZCBtX251bVRtcHM7CiAgICAg
Ly8gVGhlIG51bWJlciBvZiBzbG90cyAoaW4gdW5pdHMgb2Ygc2l6ZW9mKFJlZ2lzdGVyKSkgdGhh
dCB3ZSBuZWVkIHRvCiAgICAgLy8gcHJlYWxsb2NhdGUgZm9yIGFyZ3VtZW50cyB0byBvdXRnb2lu
ZyBjYWxscyBmcm9tIHRoaXMgZnJhbWUuIFRoaXMKICAgICAvLyBudW1iZXIgaW5jbHVkZXMgdGhl
IENhbGxGcmFtZSBzbG90cyB0aGF0IHdlIGluaXRpYWxpemUgZm9yIHRoZSBjYWxsZWUKQEAgLTEx
NjEsMTQgKzExOTcsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIH5JbmxpbmVTdGFj
a0VudHJ5KCk7CiAgICAgICAgIAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVtYXBPcGVyYW5k
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdAorICAgICAgICBPcGVyYW5kIHJlbWFwT3Bl
cmFuZChPcGVyYW5kIG9wZXJhbmQpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICgh
bV9pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhbmQ7CisKKyAg
ICAgICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE9w
ZXJhbmQ6OnRtcChvcGVyYW5kLnZhbHVlKCkgKyBtX2lubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQo
KSk7CisgICAgICAgICAgICBBU1NFUlQoIW9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkuaXNDb25z
dGFudCgpKTsKIAotICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLm9m
ZnNldCgpICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgIHJl
dHVybiBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0OwogICAgICAgICB9CiAgICAgfTsKICAgICAKQEAgLTExNzcsMTMgKzEyMTYsOCBAQCBw
cml2YXRlOgogICAgIElDU3RhdHVzQ29udGV4dFN0YWNrIG1faWNDb250ZXh0U3RhY2s7CiAgICAg
CiAgICAgc3RydWN0IERlbGF5ZWRTZXRMb2NhbCB7Ci0gICAgICAgIENvZGVPcmlnaW4gbV9vcmln
aW47Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7Ci0gICAgICAgIE5vZGUqIG1f
dmFsdWU7Ci0gICAgICAgIFNldE1vZGUgbV9zZXRNb2RlOwotICAgICAgICAKICAgICAgICAgRGVs
YXllZFNldExvY2FsKCkgeyB9Ci0gICAgICAgIERlbGF5ZWRTZXRMb2NhbChjb25zdCBDb2RlT3Jp
Z2luJiBvcmlnaW4sIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9k
ZSBzZXRNb2RlKQorICAgICAgICBEZWxheWVkU2V0TG9jYWwoY29uc3QgQ29kZU9yaWdpbiYgb3Jp
Z2luLCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUpCiAgICAg
ICAgICAgICA6IG1fb3JpZ2luKG9yaWdpbikKICAgICAgICAgICAgICwgbV9vcGVyYW5kKG9wZXJh
bmQpCiAgICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUpCkBAIC0xMTk2LDggKzEyMzAsMTMgQEAg
cHJpdmF0ZToKICAgICAgICAgewogICAgICAgICAgICAgaWYgKG1fb3BlcmFuZC5pc0FyZ3VtZW50
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlci0+c2V0QXJndW1lbnQobV9vcmlnaW4s
IG1fb3BlcmFuZCwgbV92YWx1ZSwgbV9zZXRNb2RlKTsKLSAgICAgICAgICAgIHJldHVybiBwYXJz
ZXItPnNldExvY2FsKG1fb3JpZ2luLCBtX29wZXJhbmQsIG1fdmFsdWUsIG1fc2V0TW9kZSk7Cisg
ICAgICAgICAgICByZXR1cm4gcGFyc2VyLT5zZXRMb2NhbE9yVG1wKG1fb3JpZ2luLCBtX29wZXJh
bmQsIG1fdmFsdWUsIG1fc2V0TW9kZSk7CiAgICAgICAgIH0KKworICAgICAgICBDb2RlT3JpZ2lu
IG1fb3JpZ2luOworICAgICAgICBPcGVyYW5kIG1fb3BlcmFuZDsKKyAgICAgICAgTm9kZSogbV92
YWx1ZSB7IG51bGxwdHIgfTsKKyAgICAgICAgU2V0TW9kZSBtX3NldE1vZGU7CiAgICAgfTsKICAg
ICAKICAgICBWZWN0b3I8RGVsYXllZFNldExvY2FsLCAyPiBtX3NldExvY2FsUXVldWU7CkBAIC0x
MjEwLDcgKzEyNDksNyBAQCBwcml2YXRlOgogQmFzaWNCbG9jayogQnl0ZUNvZGVQYXJzZXI6OmFs
bG9jYXRlVGFyZ2V0YWJsZUJsb2NrKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKICAg
ICBBU1NFUlQoYnl0ZWNvZGVJbmRleCk7Ci0gICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRv
cHRSZWYoKm5ldyBCYXNpY0Jsb2NrKGJ5dGVjb2RlSW5kZXgsIG1fbnVtQXJndW1lbnRzLCBtX251
bUxvY2FscywgMSkpOworICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcg
QmFzaWNCbG9jayhieXRlY29kZUluZGV4LCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIG1f
bnVtVG1wcywgMSkpOwogICAgIEJhc2ljQmxvY2sqIGJsb2NrUHRyID0gYmxvY2sucHRyKCk7CiAg
ICAgLy8gbV9ibG9ja0xpbmtpbmdUYXJnZXRzIG11c3QgYWx3YXlzIGJlIHNvcnRlZCBpbiBpbmNy
ZWFzaW5nIG9yZGVyIG9mIGJ5dGVjb2RlQmVnaW4KICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+
bV9ibG9ja0xpbmtpbmdUYXJnZXRzLnNpemUoKSkKQEAgLTEyMjIsNyArMTI2MSw3IEBAIEJhc2lj
QmxvY2sqIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVRhcmdldGFibGVCbG9jayhCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgpCiAKIEJhc2ljQmxvY2sqIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0
ZVVudGFyZ2V0YWJsZUJsb2NrKCkKIHsKLSAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9w
dFJlZigqbmV3IEJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCgpLCBtX251bUFyZ3VtZW50cywgbV9u
dW1Mb2NhbHMsIDEpKTsKKyAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3
IEJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCgpLCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMs
IG1fbnVtVG1wcywgMSkpOwogICAgIEJhc2ljQmxvY2sqIGJsb2NrUHRyID0gYmxvY2sucHRyKCk7
CiAgICAgbV9ncmFwaC5hcHBlbmRCbG9jayhXVEZNb3ZlKGJsb2NrKSk7CiAgICAgcmV0dXJuIGJs
b2NrUHRyOwpAQCAtMTQyNSw3ICsxNDY0LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
UmVjdXJzaXZlVGFpbENhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIENhbGxWYXJpYW50IGMKICAg
ICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSBzdGF0aWNfY2FzdDxp
bnQ+KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBJbmxpbmVDYWxsRnJh
bWUgaXMgVmFyYXJncywgd2UgZG8gbm90IGtub3cgaG93IG1hbnkgYXJndW1lbnRzIGFyZSBhY3R1
YWxseSBmaWxsZWQgYnkgTG9hZFZhcmFyZ3MuIFZhcmFyZ3MgSW5saW5lQ2FsbEZyYW1lJ3MKLSAg
ICAgICAgICAgIC8vIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIGlzIG1heGltdW0gbnVtYmVy
IG9mIHBvdGVudGlhbGx5IGZpbGxlZCBhcmd1bWVudHMgYnkgTG9hZFZhcmFyZ3MuIFdlICJjb250
aW51ZSIgdG8gdGhlIHVwcGVyIGZyYW1lIHdoaWNoIG1heSBiZQorICAgICAgICAgICAgLy8gYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgaXMgbWF4aW11bSBudW1iZXIgb2YgcG90ZW50aWFsbHkg
ZmlsbGVkIGFyZ3VtZW50cyBieSB4a0xvYWRWYXJhcmdzLiBXZSAiY29udGludWUiIHRvIHRoZSB1
cHBlciBmcmFtZSB3aGljaCBtYXkgYmUKICAgICAgICAgICAgIC8vIGEgZ29vZCB0YXJnZXQgdG8g
anVtcCBpbnRvLgogICAgICAgICAgICAgaWYgKGNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CkBAIC0xNDUxLDcgKzE0OTAsNyBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVSZWN1cnNpdmVUYWlsQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgQ2Fs
bFZhcmlhbnQgYwogICAgICAgICAvLyBXZSBtdXN0IHNldCB0aGUgY2FsbGVlIHRvIHRoZSByaWdo
dCB2YWx1ZQogICAgICAgICBpZiAoc3RhY2tFbnRyeS0+bV9pbmxpbmVDYWxsRnJhbWUpIHsKICAg
ICAgICAgICAgIGlmIChzdGFja0VudHJ5LT5tX2lubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2Fs
bCkKLSAgICAgICAgICAgICAgICBzZXREaXJlY3Qoc3RhY2tFbnRyeS0+cmVtYXBPcGVyYW5kKFZp
cnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSwgY2FsbFRhcmdldE5vZGUsIE5v
cm1hbFNldCk7CisgICAgICAgICAgICAgICAgc2V0RGlyZWN0KHJlbWFwT3BlcmFuZChzdGFja0Vu
dHJ5LT5tX2lubGluZUNhbGxGcmFtZSwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwgY2FsbFRhcmdl
dE5vZGUsIE5vcm1hbFNldCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgYWRkVG9HcmFw
aChTZXRDYWxsZWUsIGNhbGxUYXJnZXROb2RlKTsKIApAQCAtMTYxNiwxNiArMTY1NSwxOCBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYQogICAgIEFTU0VSVCghKG51bWJlck9mU3RhY2tQYWRkaW5n
U2xvdHMgJSBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpKSk7CiAgICAgaW50IHJlZ2lzdGVyT2Zm
c2V0QWZ0ZXJGaXh1cCA9IHJlZ2lzdGVyT2Zmc2V0IC0gbnVtYmVyT2ZTdGFja1BhZGRpbmdTbG90
czsKICAgICAKLSAgICBpbnQgaW5saW5lQ2FsbEZyYW1lU3RhcnQgPSBtX2lubGluZVN0YWNrVG9w
LT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0QWZ0ZXJGaXh1cCkp
Lm9mZnNldCgpICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnM7CisgICAgT3BlcmFu
ZCBpbmxpbmVDYWxsRnJhbWVTdGFydCA9IFZpcnR1YWxSZWdpc3RlcihtX2lubGluZVN0YWNrVG9w
LT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0QWZ0ZXJGaXh1cCkp
LnZhbHVlKCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyk7CiAgICAgCiAgICAg
ZW5zdXJlTG9jYWxzKAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lU3Rh
cnQpLnRvTG9jYWwoKSArIDEgKworICAgICAgICBpbmxpbmVDYWxsRnJhbWVTdGFydC50b0xvY2Fs
KCkgKyAxICsKICAgICAgICAgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKyBjb2Rl
QmxvY2stPm51bUNhbGxlZUxvY2FscygpKTsKICAgICAKKyAgICBlbnN1cmVUbXBzKChtX2lubGlu
ZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSA/IG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5l
Q2FsbEZyYW1lLT50bXBPZmZzZXQgOiAwKSArIG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2Nr
LT5udW1UbXBzKCkgKyBjb2RlQmxvY2stPm51bVRtcHMoKSk7CisKICAgICBzaXplX3QgYXJndW1l
bnRQb3NpdGlvblN0YXJ0ID0gbV9ncmFwaC5tX2FyZ3VtZW50UG9zaXRpb25zLnNpemUoKTsKIAog
ICAgIGlmIChyZXN1bHQuaXNWYWxpZCgpKQotICAgICAgICByZXN1bHQgPSBtX2lubGluZVN0YWNr
VG9wLT5yZW1hcE9wZXJhbmQocmVzdWx0KTsKKyAgICAgICAgcmVzdWx0ID0gbV9pbmxpbmVTdGFj
a1RvcC0+cmVtYXBPcGVyYW5kKHJlc3VsdCkudmlydHVhbFJlZ2lzdGVyKCk7CiAKICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIGNhbGxlZVZhcmlhYmxlID0gbnVsbHB0cjsKICAgICBpZiAoY2FsbGVl
LmlzQ2xvc3VyZUNhbGwoKSkgewpAQCAtMTYzOCw3ICsxNjc5LDcgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCwgQ2EKIAogICAgIElubGluZVN0YWNrRW50cnkqIGNhbGxlclN0YWNrVG9wID0gbV9pbmxp
bmVTdGFja1RvcDsKICAgICBJbmxpbmVTdGFja0VudHJ5IGlubGluZVN0YWNrRW50cnkodGhpcywg
Y29kZUJsb2NrLCBjb2RlQmxvY2ssIGNhbGxlZS5mdW5jdGlvbigpLCByZXN1bHQsCi0gICAgICAg
IChWaXJ0dWFsUmVnaXN0ZXIpaW5saW5lQ2FsbEZyYW1lU3RhcnQsIGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzLCBraW5kLCBjb250aW51YXRpb25CbG9jayk7CisgICAgICAgIGlubGluZUNhbGxG
cmFtZVN0YXJ0LnZpcnR1YWxSZWdpc3RlcigpLCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywg
a2luZCwgY29udGludWF0aW9uQmxvY2spOwogCiAgICAgLy8gVGhpcyBpcyB3aGVyZSB0aGUgYWN0
dWFsIGlubGluaW5nIHJlYWxseSBoYXBwZW5zLgogICAgIEJ5dGVjb2RlSW5kZXggb2xkSW5kZXgg
PSBtX2N1cnJlbnRJbmRleDsKQEAgLTE2NzMsOSArMTcxNCw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1
bHQsIENhCiAgICAgICAgIC8vIEhvd2V2ZXIsIHdoZW4gd2UgYmVnaW4gZXhlY3V0aW5nIHRoZSBj
YWxsZWUsIHdlIG5lZWQgT1NSIGV4aXQgdG8gYmUgYXdhcmUgb2Ygd2hlcmUgaXQgY2FuIHJlY292
ZXIgdGhlIGFyZ3VtZW50cyB0byB0aGUgc2V0dGVyLCBsb2M5IGFuZCBsb2MxMC4gVGhlIE1vdkhp
bnRzIGluIHRoZSBpbmxpbmVkCiAgICAgICAgIC8vIGNhbGxlZSBtYWtlIGl0IHNvIHRoYXQgaWYg
d2UgZXhpdCBhdCA8SEVSRT4sIHdlIGNhbiByZWNvdmVyIGxvYzkgYW5kIGxvYzEwLgogICAgICAg
ICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7
ICsraW5kZXgpIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudFRvR2V0ID0g
Y2FsbGVyU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChp
bmRleCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnRUb0dl
dCA9IGNhbGxlclN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoaW5kZXgsIHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdl
dERpcmVjdChhcmd1bWVudFRvR2V0KTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwg
T3BJbmZvKGFyZ3VtZW50VG9HZXQub2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAgICAgICAgICBhZGRU
b0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhhcmd1bWVudFRvR2V0KSwgdmFsdWUpOwogICAgICAgICAg
ICAgbV9zZXRMb2NhbFF1ZXVlLmFwcGVuZChEZWxheWVkU2V0TG9jYWwgeyBjdXJyZW50Q29kZU9y
aWdpbigpLCBhcmd1bWVudFRvR2V0LCB2YWx1ZSwgSW1tZWRpYXRlTmFrZWRTZXQgfSk7CiAgICAg
ICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0xNzE5LDE2ICsxNzYwLDE2IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHQsIENhCiAgICAgICAgIC8vIEluIHN1Y2ggY2FzZXMsIHdlIGRvIG5vdCBuZWVkIHRv
IG1vdmUgZnJhbWVzLgogICAgICAgICBpZiAocmVnaXN0ZXJPZmZzZXRBZnRlckZpeHVwICE9IHJl
Z2lzdGVyT2Zmc2V0KSB7CiAgICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7ICsraW5kZXgpIHsKLSAgICAgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRUb0dldCA9IGNhbGxlclN0YWNrVG9wLT5yZW1hcE9wZXJh
bmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgsIHJlZ2lzdGVyT2Zmc2V0KSk7Cisg
ICAgICAgICAgICAgICAgT3BlcmFuZCBhcmd1bWVudFRvR2V0ID0gY2FsbGVyU3RhY2tUb3AtPnJl
bWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCwgcmVnaXN0ZXJPZmZz
ZXQpKTsKICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldERpcmVjdChhcmd1bWVudFRv
R2V0KTsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRUb1NldCA9IG1f
aW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChp
bmRleCkpOwotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3Vt
ZW50VG9TZXQub2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgT3BlcmFuZCBhcmd1
bWVudFRvU2V0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KGluZGV4KSk7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50
LCBPcEluZm8oYXJndW1lbnRUb1NldCksIHZhbHVlKTsKICAgICAgICAgICAgICAgICBtX3NldExv
Y2FsUXVldWUuYXBwZW5kKERlbGF5ZWRTZXRMb2NhbCB7IGN1cnJlbnRDb2RlT3JpZ2luKCksIGFy
Z3VtZW50VG9TZXQsIHZhbHVlLCBJbW1lZGlhdGVOYWtlZFNldCB9KTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgYXJpdHlGaXh1
cENvdW50OyArK2luZGV4KSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRU
b1NldCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIGluZGV4KSk7Ci0gICAgICAgICAg
ICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhhcmd1bWVudFRvU2V0Lm9mZnNldCgpKSwgdW5k
ZWZpbmVkKTsKKyAgICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnRUb1NldCA9IG1faW5saW5lU3Rh
Y2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyArIGluZGV4KSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhp
bnQsIE9wSW5mbyhhcmd1bWVudFRvU2V0KSwgdW5kZWZpbmVkKTsKICAgICAgICAgICAgIG1fc2V0
TG9jYWxRdWV1ZS5hcHBlbmQoRGVsYXllZFNldExvY2FsIHsgY3VycmVudENvZGVPcmlnaW4oKSwg
YXJndW1lbnRUb1NldCwgdW5kZWZpbmVkLCBJbW1lZGlhdGVOYWtlZFNldCB9KTsKICAgICAgICAg
fQogCkBAIC0xODk1LDEyICsxOTM2LDEyIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZh
cmFyZ3NJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyCiAgICAg
ICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsVmFyaWFudCwgY2FsbFRhcmdldE5vZGUsIHRoaXNB
cmd1bWVudCk7CiAgICAgICAgIAogICAgICAgICBpbnQgcmVtYXBwZWRSZWdpc3Rlck9mZnNldCA9
Ci0gICAgICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIo
cmVnaXN0ZXJPZmZzZXQpKS5vZmZzZXQoKTsKKyAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVt
YXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCkpLnZpcnR1YWxSZWdpc3Rl
cigpLm9mZnNldCgpOwogICAgICAgICAKICAgICAgICAgZW5zdXJlTG9jYWxzKFZpcnR1YWxSZWdp
c3RlcihyZW1hcHBlZFJlZ2lzdGVyT2Zmc2V0KS50b0xvY2FsKCkpOwogICAgICAgICAKICAgICAg
ICAgaW50IGFyZ3VtZW50U3RhcnQgPSByZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6aGVhZGVy
U2l6ZUluUmVnaXN0ZXJzOwotICAgICAgICBpbnQgcmVtYXBwZWRBcmd1bWVudFN0YXJ0ID0gbV9p
bmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0
KSkub2Zmc2V0KCk7CisgICAgICAgIGludCByZW1hcHBlZEFyZ3VtZW50U3RhcnQgPSBtX2lubGlu
ZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3RhcnQpKS52
aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgCiAgICAgICAgIExvYWRWYXJhcmdz
RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9sb2FkVmFyYXJnc0RhdGEuYWRkKCk7CiAgICAgICAgIGRh
dGEtPnN0YXJ0ID0gVmlydHVhbFJlZ2lzdGVyKHJlbWFwcGVkQXJndW1lbnRTdGFydCArIDEpOwpA
QCAtMTkwOCwxMSArMTk0OSwyNCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdz
SW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlcgogICAgICAgICBk
YXRhLT5vZmZzZXQgPSBhcmd1bWVudHNPZmZzZXQ7CiAgICAgICAgIGRhdGEtPmxpbWl0ID0gbWF4
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CiAgICAgICAgIGRhdGEtPm1hbmRhdG9yeU1pbmlt
dW0gPSBtYW5kYXRvcnlNaW5pbXVtOwotICAgICAgICAKLSAgICAgICAgaWYgKGNhbGxPcCA9PSBU
YWlsQ2FsbEZvcndhcmRWYXJhcmdzKQotICAgICAgICAgICAgYWRkVG9HcmFwaChGb3J3YXJkVmFy
YXJncywgT3BJbmZvKGRhdGEpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkVG9HcmFw
aChMb2FkVmFyYXJncywgT3BJbmZvKGRhdGEpLCBnZXQoYXJndW1lbnRzQXJndW1lbnQpKTsKKwor
ICAgICAgICBpZiAoY2FsbE9wID09IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MpIHsKKyAgICAgICAg
ICAgIE5vZGUqIGFyZ3VtZW50Q291bnQ7CisgICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFt
ZSgpKQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBhZGRUb0dyYXBoKEdldEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlubGluZUNhbGxG
cmFtZSgpLT5pc1ZhcmFyZ3MoKSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50ID0gZ2V0
RGlyZWN0KHJlbWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUoKSwgQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICAgICAgICAgIGVsc2UgCisgICAgICAgICAg
ICAgICAgYXJndW1lbnRDb3VudCA9IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fZ3Jh
cGguZnJlZXplKGpzTnVtYmVyKGlubGluZUNhbGxGcmFtZSgpLT5hcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcykpKSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcndhcmRWYXJhcmdzLCBPcElu
Zm8oZGF0YSksIGFyZ3VtZW50Q291bnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Tm9kZSogYXJndW1lbnRzID0gZ2V0KGFyZ3VtZW50c0FyZ3VtZW50KTsKKyAgICAgICAgICAgIGF1
dG8gYXJnQ291bnRUbXAgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoT3BlcmFuZDo6
dG1wKE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50SW5jbHVkaW5nVGhpcykpOworICAgICAgICAgICAg
c2V0RGlyZWN0KGFyZ0NvdW50VG1wLCBhZGRUb0dyYXBoKFZhcmFyZ3NMZW5ndGgsIE9wSW5mbyhk
YXRhKSwgYXJndW1lbnRzKSk7CisgICAgICAgICAgICBwcm9ncmVzc1RvTmV4dENoZWNrcG9pbnQo
KTsKKworICAgICAgICAgICAgYWRkVG9HcmFwaChMb2FkVmFyYXJncywgT3BJbmZvKGRhdGEpLCBn
ZXRMb2NhbE9yVG1wKGFyZ0NvdW50VG1wKSwgYXJndW1lbnRzKTsKKyAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgLy8gTG9hZFZhcmFyZ3MgbWF5IE9TUiBleGl0LiBIZW5jZSwgd2UgbmVlZCB0
byBrZWVwIGFsaXZlIGNhbGxUYXJnZXROb2RlLCB0aGlzQXJndW1lbnQKICAgICAgICAgLy8gYW5k
IGFyZ3VtZW50c0FyZ3VtZW50IGZvciB0aGUgYmFzZWxpbmUgSklULiBIb3dldmVyLCB3ZSBvbmx5
IG5lZWQgYSBQaGFudG9tIGZvcgpAQCAtMTkyNCwxNCArMTk3OCwxNCBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1
YWxSZWdpc3RlcgogICAgICAgICAvLyBTU0EuIEZvcnR1bmF0ZWx5LCB3ZSBhbHNvIGhhdmUgb3Ro
ZXIgcmVhc29ucyBmb3Igbm90IGluc2VydGluZyBjb250cm9sIGZsb3cKICAgICAgICAgLy8gYmVm
b3JlIFNTQS4KICAgICAgICAgCi0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogY291bnRWYXJp
YWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRSZWdp
c3Rlck9mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7
CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogY291bnRWYXJpYWJsZSA9IG5ld1ZhcmlhYmxl
QWNjZXNzRGF0YShkYXRhLT5jb3VudCk7CiAgICAgICAgIC8vIFRoaXMgaXMgcHJldHR5IGxhbWUs
IGJ1dCBpdCB3aWxsIGZvcmNlIHRoZSBjb3VudCB0byBiZSBmbHVzaGVkIGFzIGFuIGludC4gVGhp
cyBkb2Vzbid0CiAgICAgICAgIC8vIG1hdHRlciB2ZXJ5IG11Y2gsIHNpbmNlIG91ciB1c2Ugb2Yg
YSBTZXRBcmd1bWVudERlZmluaXRlbHkgYW5kIEZsdXNoZXMgZm9yIHRoaXMgbG9jYWwgc2xvdCBp
cwogICAgICAgICAvLyBtb3N0bHkganVzdCBhIGZvcm1hbGl0eS4KICAgICAgICAgY291bnRWYXJp
YWJsZS0+cHJlZGljdChTcGVjSW50MzJPbmx5KTsKICAgICAgICAgY291bnRWYXJpYWJsZS0+bWVy
Z2VJc1Byb2ZpdGFibGVUb1VuYm94KHRydWUpOwogICAgICAgICBOb2RlKiBzZXRBcmd1bWVudENv
dW50ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVudERlZmluaXRlbHksIE9wSW5mbyhjb3VudFZhcmlh
YmxlKSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFu
ZChjb3VudFZhcmlhYmxlLT5sb2NhbCgpLCBzZXRBcmd1bWVudENvdW50KTsKKyAgICAgICAgbV9j
dXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKGNvdW50VmFyaWFibGUtPm9w
ZXJhbmQoKSwgc2V0QXJndW1lbnRDb3VudCk7CiAgICAgICAgIAogICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGFyZ3VtZW50U3RhcnQpLCBnZXQodGhpc0FyZ3VtZW50KSwgSW1tZWRpYXRlTmFr
ZWRTZXQpOwogICAgICAgICB1bnNpZ25lZCBudW1TZXRBcmd1bWVudHMgPSAwOwpAQCAtMTk1NSw3
ICsyMDA5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0lubGluaW5nKE5v
ZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICAgICAgTm9kZSogc2V0QXJndW1lbnQgPSBhZGRUb0dyYXBoKG51bVNl
dEFyZ3VtZW50cyA+PSBtYW5kYXRvcnlNaW5pbXVtID8gU2V0QXJndW1lbnRNYXliZSA6IFNldEFy
Z3VtZW50RGVmaW5pdGVseSwgT3BJbmZvKHZhcmlhYmxlKSk7Ci0gICAgICAgICAgICBtX2N1cnJl
bnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCksIHNl
dEFyZ3VtZW50KTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
c2V0T3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpLCBzZXRBcmd1bWVudCk7CiAgICAgICAgICAg
ICArK251bVNldEFyZ3VtZW50czsKICAgICAgICAgfQogICAgIH07CkBAIC0yMDU1LDcgKzIxMDks
NyBAQCBCeXRlQ29kZVBhcnNlcjo6Q2FsbE9wdGltaXphdGlvblJlc3VsdCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlSW5saW5pbmcoCiAgICAgLy8geWV0LgogICAgIFZFUkJPU0VfTE9HKCJSZWdpc3Rl
ciBvZmZzZXQ6ICIsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVl
UmVnKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKLSAgICBjYWxsZWVS
ZWcgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoY2FsbGVlUmVnKTsKKyAgICBjYWxs
ZWVSZWcgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoY2FsbGVlUmVnKS52aXJ0dWFs
UmVnaXN0ZXIoKTsKICAgICBWRVJCT1NFX0xPRygiQ2FsbGVlIGlzIGdvaW5nIHRvIGJlICIsIGNh
bGxlZVJlZywgIlxuIik7CiAgICAgc2V0RGlyZWN0KGNhbGxlZVJlZywgY2FsbFRhcmdldE5vZGUs
IEltbWVkaWF0ZVNldFdpdGhGbHVzaCk7CiAKQEAgLTUxNTgsNyArNTIxMiw3IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgIGNhc2Ugb3Bf
bmV3X3JlZ2V4cDogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAgICAgICAgICAgICBBU1NFUlQoYnl0ZWNvZGUubV9y
ZWdleHAuaXNDb25zdGFudCgpKTsKLSAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW5SZWdF
eHAgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+
Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9yZWdleHAub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIEZy
b3plblZhbHVlKiBmcm96ZW5SZWdFeHAgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0
YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9yZWdleHApKTsKICAg
ICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChOZXdSZWdleHAsIE9wSW5m
byhmcm96ZW5SZWdFeHApLCBqc0NvbnN0YW50KGpzTnVtYmVyKDApKSkpOwogICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfbmV3X3JlZ2V4cCk7CiAgICAgICAgIH0KQEAgLTYyMzksNyArNjI5Myw3
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRCbG9jay0+c2l6ZSgpIHx8IChtX2dy
YXBoLmNvbXBpbGF0aW9uKCkgJiYgbV9jdXJyZW50QmxvY2stPnNpemUoKSA9PSAxICYmIG1fY3Vy
cmVudEJsb2NrLT5hdCgwKS0+b3AoKSA9PSBDb3VudEV4ZWN1dGlvbikpOwogCi0gICAgICAgICAg
ICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0
YShjb2RlQmxvY2spLm1fYnVmZmVyOworICAgICAgICAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVh
bFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1f
YnVmZmVyOwogCiAgICAgICAgICAgICBpZiAoIWJ1ZmZlcikgewogICAgICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX2NhdGNoKTsgLy8gVGhpcyBjYXRjaCBoYXMgeWV0IHRvIGV4ZWN1dGUuIE5v
dGU6IHRoaXMgbG9hZCBjYW4gYmUgcmFjeSB3aXRoIHRoZSBtYWluIHRocmVhZC4KQEAgLTYyNTYs
NyArNjMxMCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGlt
aXQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7CiAKLSAgICAg
ICAgICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBw
cm9maWxlKSB7CisgICAgICAgICAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgICAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKHByb2ZpbGUubV9vcGVyYW5kKTsKICAgICAgICAgICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9uKGxvY2tlcik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzTG9j
YWwoKSkKQEAgLTYyODQsMTQgKzYzMzgsMTQgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIG1fZXhpdE9LID0gZmFsc2U7IAogCiAg
ICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkxvY2FscyA9IDA7Ci0gICAgICAgICAgICBidWZm
ZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CisgICAg
ICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXImIHByb2ZpbGUpIHsKICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZChw
cm9maWxlLm1fb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVu
dCgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgQVNTRVJU
KG9wZXJhbmQuaXNMb2NhbCgpKTsKICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGFkZFRv
R3JhcGgoRXh0cmFjdENhdGNoTG9jYWwsIE9wSW5mbyhudW1iZXJPZkxvY2FscyksIE9wSW5mbyhs
b2NhbFByZWRpY3Rpb25zW251bWJlck9mTG9jYWxzXSkpOwogICAgICAgICAgICAgICAgICsrbnVt
YmVyT2ZMb2NhbHM7Ci0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8o
cHJvZmlsZS5tX29wZXJhbmQpLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChN
b3ZIaW50LCBPcEluZm8ob3BlcmFuZCksIHZhbHVlKTsKICAgICAgICAgICAgICAgICBsb2NhbHNU
b1NldC51bmNoZWNrZWRBcHBlbmQoc3RkOjptYWtlX3BhaXIob3BlcmFuZCwgdmFsdWUpKTsKICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgaWYgKG51bWJlck9mTG9jYWxzKQpAQCAtNjQxOSw3
ICs2NDczLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1p
dCkKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX2puZXFfcHRyOiB7CiAgICAgICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7Ci0g
ICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuUG9pbnRlciA9IG1fZ3JhcGguZnJlZXplU3Ry
b25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5t
X3NwZWNpYWxQb2ludGVyLm9mZnNldCgpKSk7CisgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJv
emVuUG9pbnRlciA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKSk7CiAgICAgICAg
ICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CiAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGdldChieXRlY29kZS5tX3ZhbHVl
KTsKICAgICAgICAgICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1faGFzSnVt
cGVkKSB7CkBAIC02ODg3LDggKzY5NDEsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmly
b25tZW50OiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKTsKICAgICAgICAgICAgIEFTU0VSVChi
eXRlY29kZS5tX3N5bWJvbFRhYmxlLmlzQ29uc3RhbnQoKSAmJiBieXRlY29kZS5tX2luaXRpYWxW
YWx1ZS5pc0NvbnN0YW50KCkpOwotICAgICAgICAgICAgRnJvemVuVmFsdWUqIHN5bWJvbFRhYmxl
ID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdl
dENvbnN0YW50KGJ5dGVjb2RlLm1fc3ltYm9sVGFibGUub2Zmc2V0KCkpKTsKLSAgICAgICAgICAg
IEZyb3plblZhbHVlKiBpbml0aWFsVmFsdWUgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGlu
ZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9pbml0aWFsVmFs
dWUub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBzeW1ib2xUYWJsZSA9IG1f
Z3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25z
dGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlKSk7CisgICAgICAgICAgICBGcm96ZW5WYWx1ZSog
aW5pdGlhbFZhbHVlID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9j
b2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlKSk7CiAgICAgICAg
ICAgICBOb2RlKiBzY29wZSA9IGdldChieXRlY29kZS5tX3Njb3BlKTsKICAgICAgICAgICAgIE5v
ZGUqIGxleGljYWxFbnZpcm9ubWVudCA9IGFkZFRvR3JhcGgoQ3JlYXRlQWN0aXZhdGlvbiwgT3BJ
bmZvKHN5bWJvbFRhYmxlKSwgT3BJbmZvKGluaXRpYWxWYWx1ZSksIHNjb3BlKTsKICAgICAgICAg
ICAgIHNldChieXRlY29kZS5tX2RzdCwgbGV4aWNhbEVudmlyb25tZW50KTsKQEAgLTY5MTgsNyAr
Njk3Miw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQp
CiAgICAgICAgICAgICAvLyBsb2FkcyBmcm9tIHRoZSBzY29wZSByZWdpc3RlciBsYXRlciwgYXMg
dGhhdCB3b3VsZCBwcmV2ZW50IHRoZSBERkcgZnJvbSB0cmFja2luZyB0aGUKICAgICAgICAgICAg
IC8vIGJ5dGVjb2RlLWxldmVsIGxpdmVuZXNzIG9mIHRoZSBzY29wZSByZWdpc3Rlci4KICAgICAg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+
KCk7Ci0gICAgICAgICAgICBOb2RlKiBjYWxsZWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSkpOworICAgICAgICAgICAgTm9kZSogY2FsbGVlID0gZ2V0KENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSk7CiAgICAgICAgICAgICBOb2RlKiByZXN1bHQ7CiAgICAgICAgICAg
ICBpZiAoSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBjYWxsZWUtPmR5bmFtaWNDYXN0Q29uc3RhbnQ8
SlNGdW5jdGlvbio+KCptX3ZtKSkKICAgICAgICAgICAgICAgICByZXN1bHQgPSB3ZWFrSlNDb25z
dGFudChmdW5jdGlvbi0+c2NvcGUoKSk7CkBAIC03MzQzLDggKzczOTcsMTAgQEAgQnl0ZUNvZGVQ
YXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkoCiAgICAgICAgIC8vIFRo
ZSBvd25lciBpcyB0aGUgbWFjaGluZSBjb2RlIGJsb2NrLCBhbmQgd2UgYWxyZWFkeSBoYXZlIGEg
YmFycmllciBvbiB0aGF0IHdoZW4gdGhlCiAgICAgICAgIC8vIHBsYW4gZmluaXNoZXMuCiAgICAg
ICAgIG1faW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5zZXRXaXRob3V0V3JpdGVC
YXJyaWVyKGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpOworICAgICAgICBtX2lubGluZUNh
bGxGcmFtZS0+c2V0VG1wT2Zmc2V0KChtX2NhbGxlci0+bV9pbmxpbmVDYWxsRnJhbWUgPyBtX2Nh
bGxlci0+bV9pbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCA6IDApICsgbV9jYWxsZXItPm1fY29k
ZUJsb2NrLT5udW1UbXBzKCkpOwogICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+c2V0U3RhY2tP
ZmZzZXQoaW5saW5lQ2FsbEZyYW1lU3RhcnQub2Zmc2V0KCkgLSBDYWxsRnJhbWU6OmhlYWRlclNp
emVJblJlZ2lzdGVycyk7CiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChtX2lubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
PT0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgICAgICBpZiAoY2FsbGVlKSB7CiAg
ICAgICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3ZlcnkgPSBWYWx1ZVJlY292
ZXJ5Ojpjb25zdGFudChjYWxsZWUpOwogICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmlz
Q2xvc3VyZUNhbGwgPSBmYWxzZTsKQEAgLTc3MDYsNyArNzc2Miw3IEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlKCkKICAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5h
dChub2RlSW5kZXgpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5oYXNWYXJpYWJs
ZUFjY2Vzc0RhdGEobV9ncmFwaCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9w
ZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0gbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
Pm9wKCkgIT0gRm9yY2VPU1JFeGl0KQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CkBAIC03NzI2LDI0ICs3NzgyLDI0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdWNjZXNzb3ItPnByZWRl
Y2Vzc29ycy5pc0VtcHR5KCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICAgICAgYXV0byBpbnNlcnRMaXZlbmVzc1ByZXNlcnZpbmdPcCA9IFsmXSAoSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE5vZGVUeXBlIG9wLCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGluc2VydExpdmVuZXNzUHJlc2Vydmlu
Z09wID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgTm9kZVR5cGUgb3As
IE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZSA9IG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghdmFyaWFibGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSB2YXJpYWJsZTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGFyZ3VtZW50ID0gb3BlcmFuZCAtIChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBPcGVy
YW5kIGFyZ3VtZW50ID0gdW5tYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgb3BlcmFuZCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnQuaXNBcmd1bWVudCgpICYmICFhcmd1
bWVudC5pc0hlYWRlcigpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVj
dG9yPEFyZ3VtZW50UG9zaXRpb24qPiYgYXJndW1lbnRzID0gbV9pbmxpbmVDYWxsRnJhbWVUb0Fy
Z3VtZW50UG9zaXRpb25zLmdldChpbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFyZ3VtZW50c1thcmd1bWVudC50b0FyZ3VtZW50KCldLT5hZGRWYXJpYWJsZSh2
YXJpYWJsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBvcCwgb3Jp
Z2luLCBPcEluZm8odmFyaWFibGUpKTsKICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBp
bmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAg
ICAgICAgIGF1dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlu
c2VydExpdmVuZXNzUHJlc2VydmluZ09wKGlubGluZUNhbGxGcmFtZSwgRmx1c2gsIG9wZXJhbmQp
OwogICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICBhdXRvIGFkZFBo
YW50b21Mb2NhbERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUs
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gYWRk
UGhhbnRvbUxvY2FsRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSwgT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRMaXZl
bmVzc1ByZXNlcnZpbmdPcChpbmxpbmVDYWxsRnJhbWUsIFBoYW50b21Mb2NhbCwgb3BlcmFuZCk7
CiAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgIGZsdXNoRm9yVGVy
bWluYWxJbXBsKG9yaWdpbi5zZW1hbnRpYywgYWRkRmx1c2hEaXJlY3QsIGFkZFBoYW50b21Mb2Nh
bERpcmVjdCk7CkBAIC03ODA4LDYgKzc4NjQsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZSgpCiAgICAgICAgIEFTU0VSVChibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1l
bnRzKCkgPT0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1l
bnRzKCkpOwogICAgIH0KIAorICAgIG1fZ3JhcGgubV90bXBzID0gbV9udW1UbXBzOwogICAgIG1f
Z3JhcGgubV9sb2NhbFZhcnMgPSBtX251bUxvY2FsczsKICAgICBtX2dyYXBoLm1fcGFyYW1ldGVy
U2xvdHMgPSBtX3BhcmFtZXRlclNsb3RzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NGQVBoYXNlLmNwcAppbmRleCBhMjQwMTQ5MjEzODM2YjYxZTc1YzJiODg3NjUzNDczZTIwZWQ1
YjExLi40YmRiN2JhZDRkYzkwODk4MDQ4ODhmMzZhMGFkYTJmMjIzODgzNjY3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcApAQCAtMTcwLDIyICsxNzAsMjIgQEAg
cHJpdmF0ZToKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIGNvbnN0IE9w
ZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVlcyA9IG1fZ3JhcGgubV9w
bGFuLm11c3RIYW5kbGVWYWx1ZXMoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IG11c3RIYW5k
bGVWYWx1ZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG11c3RI
YW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVy
YW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICBP
cHRpb25hbDxKU1ZhbHVlPiB2YWx1ZSA9IG11c3RIYW5kbGVWYWx1ZXNbaV07CiAgICAgICAgICAg
ICBpZiAoIXZhbHVlKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fdmVyYm9zZSkKLSAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiICAgTm90IGxpdmUgaW4gYnl0ZWNvZGU6ICIsIFZpcnR1YWxS
ZWdpc3RlcihvcGVyYW5kKSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
IE5vdCBsaXZlIGluIGJ5dGVjb2RlOiAiLCBvcGVyYW5kLCAiXG4iKTsKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9j
ay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICBpZiAoIW5v
ZGUpIHsKICAgICAgICAgICAgICAgICBpZiAobV92ZXJib3NlKQotICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgICBOb3QgbGl2ZTogIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCAiXG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTm90IGxpdmU6ICIsIG9wZXJhbmQs
ICJcbiIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBpZiAobV92ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFM
b2coIiAgIFdpZGVuaW5nICIsIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgIiB3aXRoICIsIHZh
bHVlLnZhbHVlKCksICJcbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIFdpZGVuaW5n
ICIsIG9wZXJhbmQsICIgd2l0aCAiLCB2YWx1ZS52YWx1ZSgpLCAiXG4iKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdGFyZ2V0ID0gYmxvY2stPnZhbHVlc0F0SGVh
ZC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgY2hhbmdlZCB8PSB0YXJnZXQubWVyZ2VP
U1JFbnRyeVZhbHVlKG1fZ3JhcGgsIHZhbHVlLnZhbHVlKCksIG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpLCBub2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQ
U1JldGhyZWFkaW5nUGhhc2UuY3BwCmluZGV4IGQ5OGZkNGFmNDQwZjA3Y2JjMTZiNjdkNjAyYmE2
NDI2YWYwZjIzODIuLjg3M2ZhMDQzMDU4YTBmZDE4ZTRkZjEyMzNkZTZmOTY3NmEyYmRlMDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFz
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1Bo
YXNlLmNwcApAQCAtNTQsOCArNTQsOSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZ3JhcGguY2xlYXJS
ZXBsYWNlbWVudHMoKTsKICAgICAgICAgY2Fub25pY2FsaXplTG9jYWxzSW5CbG9ja3MoKTsKICAg
ICAgICAgc3BlY2lhbENhc2VBcmd1bWVudHMoKTsKLSAgICAgICAgcHJvcGFnYXRlUGhpczxMb2Nh
bE9wZXJhbmQ+KCk7Ci0gICAgICAgIHByb3BhZ2F0ZVBoaXM8QXJndW1lbnRPcGVyYW5kPigpOwor
ICAgICAgICBwcm9wYWdhdGVQaGlzPE9wZXJhbmRLaW5kOjpMb2NhbD4oKTsKKyAgICAgICAgcHJv
cGFnYXRlUGhpczxPcGVyYW5kS2luZDo6QXJndW1lbnQ+KCk7CisgICAgICAgIHByb3BhZ2F0ZVBo
aXM8T3BlcmFuZEtpbmQ6OlRtcD4oKTsKICAgICAgICAgY29tcHV0ZUlzRmx1c2hlZCgpOwogICAg
ICAgICAKICAgICAgICAgbV9ncmFwaC5tX2Zvcm0gPSBUaHJlYWRlZENQUzsKQEAgLTIxMSwxMCAr
MjEyLDIwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjYW5vbmljYWxpemVHZXRMb2NhbChOb2RlKiBu
b2RlKQogICAgIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkuaXNB
cmd1bWVudCgpKQotICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8QXJndW1lbnRP
cGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9Bcmd1bWVudCgpKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8TG9jYWxP
cGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgpKTsKKyAg
ICAgICAgc3dpdGNoICh2YXJpYWJsZS0+b3BlcmFuZCgpLmtpbmQoKSkgeworICAgICAgICBjYXNl
IE9wZXJhbmRLaW5kOjpBcmd1bWVudDogeworICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9j
YWxGb3I8T3BlcmFuZEtpbmQ6OkFyZ3VtZW50Pihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9w
ZXJhbmQoKS50b0FyZ3VtZW50KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBPcGVyYW5kS2luZDo6TG9jYWw6IHsKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6
ZUdldExvY2FsRm9yPE9wZXJhbmRLaW5kOjpMb2NhbD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxl
LT5vcGVyYW5kKCkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgT3BlcmFuZEtpbmQ6OlRtcDogeworICAgICAgICAgICAgY2Fub25pY2FsaXpl
R2V0TG9jYWxGb3I8T3BlcmFuZEtpbmQ6OlRtcD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5v
cGVyYW5kKCkudmFsdWUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICB9CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPE5vZGVUeXBlIG5vZGVUeXBlLCBPcGVyYW5k
S2luZCBvcGVyYW5kS2luZD4KQEAgLTIyOSw2ICsyNDAsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgY2FzZSBGbHVzaDoKICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAgICAgICAg
ICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBBU1NFUlQob3RoZXJOb2RlLT5jaGls
ZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgICAgIG90aGVyTm9kZSA9IG90aGVyTm9kZS0+Y2hp
bGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVs
dDoKQEAgLTI3MCwxNSArMjgyLDI1IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjYW5vbmljYWxpemVG
bHVzaE9yUGhhbnRvbUxvY2FsKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAg
IGlmICh2YXJpYWJsZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkpCi0gICAgICAgICAgICBjYW5vbmlj
YWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBBcmd1bWVudE9wZXJhbmQ+KG5v
ZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKS50b0FyZ3VtZW50KCkpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVU
eXBlLCBMb2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKS50b0xv
Y2FsKCkpOworICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT5vcGVyYW5kKCkua2luZCgpKSB7Cisg
ICAgICAgIGNhc2UgT3BlcmFuZEtpbmQ6OkFyZ3VtZW50OiB7CisgICAgICAgICAgICBjYW5vbmlj
YWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBPcGVyYW5kS2luZDo6QXJndW1l
bnQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgpLnRvQXJndW1lbnQoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE9wZXJhbmRLaW5kOjpM
b2NhbDogeworICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcjxu
b2RlVHlwZSwgT3BlcmFuZEtpbmQ6OkxvY2FsPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9w
ZXJhbmQoKS50b0xvY2FsKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBPcGVyYW5kS2luZDo6VG1wOiB7CisgICAgICAgICAgICBjYW5vbmljYWxpemVGbHVz
aE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBPcGVyYW5kS2luZDo6VG1wPihub2RlLCB2YXJp
YWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS52YWx1ZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBjYW5vbmljYWxpemVT
ZXQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5z
ZXRPcGVyYW5kKG5vZGUtPmxvY2FsKCksIG5vZGUpOworICAgICAgICBtX2Jsb2NrLT52YXJpYWJs
ZXNBdFRhaWwuc2V0T3BlcmFuZChub2RlLT5vcGVyYW5kKCksIG5vZGUpOwogICAgIH0KICAgICAK
ICAgICB2b2lkIGNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2soKQpAQCAtMjg3LDggKzMwOSw5IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIEFTU0VSVChtX2Jsb2NrLT5p
c1JlYWNoYWJsZSk7CiAgICAgICAgIAotICAgICAgICBjbGVhclZhcmlhYmxlczxBcmd1bWVudE9w
ZXJhbmQ+KCk7Ci0gICAgICAgIGNsZWFyVmFyaWFibGVzPExvY2FsT3BlcmFuZD4oKTsKKyAgICAg
ICAgY2xlYXJWYXJpYWJsZXM8T3BlcmFuZEtpbmQ6OkFyZ3VtZW50PigpOworICAgICAgICBjbGVh
clZhcmlhYmxlczxPcGVyYW5kS2luZDo6TG9jYWw+KCk7CisgICAgICAgIGNsZWFyVmFyaWFibGVz
PE9wZXJhbmRLaW5kOjpUbXA+KCk7CiAgICAgICAgIAogICAgICAgICAvLyBBc3N1bWVzIHRoYXQg
YWxsIHBoaSByZWZlcmVuY2VzIGhhdmUgYmVlbiByZW1vdmVkLiBBc3N1bWVzIHRoYXQgdGhpbmdz
IHRoYXQKICAgICAgICAgLy8gc2hvdWxkIGJlIGxpdmUgaGF2ZSBhIG5vbi16ZXJvIHJlZiBjb3Vu
dCwgYnV0IGRvZXNuJ3QgYXNzdW1lIHRoYXQgdGhlIHJlZgpAQCAtMzg4LDcgKzQxMSw3IEBAIHBy
aXZhdGU6CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CiAgICAgdm9pZCBw
cm9wYWdhdGVQaGlzKCkKICAgICB7Ci0gICAgICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+
JiBwaGlTdGFjayA9IG9wZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCA/IG1fYXJndW1lbnRQ
aGlTdGFjayA6IG1fbG9jYWxQaGlTdGFjazsKKyAgICAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnks
IDEyOD4mIHBoaVN0YWNrID0gcGhpU3RhY2tGb3I8b3BlcmFuZEtpbmQ+KCk7CiAgICAgICAgIAog
ICAgICAgICAvLyBFbnN1cmUgdGhhdCBhdHRlbXB0cyB0byB1c2UgdGhpcyBmYWlsIGluc3RhbnRs
eS4KICAgICAgICAgbV9ibG9jayA9IDA7CkBAIC00NjYsOSArNDg5LDEyIEBAIHByaXZhdGU6CiAg
ICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CiAgICAgVmVjdG9yPFBoaVN0YWNr
RW50cnksIDEyOD4mIHBoaVN0YWNrRm9yKCkKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kS2lu
ZCA9PSBBcmd1bWVudE9wZXJhbmQpCi0gICAgICAgICAgICByZXR1cm4gbV9hcmd1bWVudFBoaVN0
YWNrOwotICAgICAgICByZXR1cm4gbV9sb2NhbFBoaVN0YWNrOworICAgICAgICBzd2l0Y2ggKG9w
ZXJhbmRLaW5kKSB7CisgICAgICAgIGNhc2UgT3BlcmFuZEtpbmQ6OkFyZ3VtZW50OiByZXR1cm4g
bV9hcmd1bWVudFBoaVN0YWNrOworICAgICAgICBjYXNlIE9wZXJhbmRLaW5kOjpMb2NhbDogcmV0
dXJuIG1fbG9jYWxQaGlTdGFjazsKKyAgICAgICAgY2FzZSBPcGVyYW5kS2luZDo6VG1wOiByZXR1
cm4gbV90bXBQaGlTdGFjazsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXB1dGVJc0ZsdXNoZWQoKQpAQCAt
NTIxLDYgKzU0Nyw3IEBAIHByaXZhdGU6CiAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKICAgICBW
ZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiBtX2FyZ3VtZW50UGhpU3RhY2s7CiAgICAgVmVjdG9y
PFBoaVN0YWNrRW50cnksIDEyOD4gbV9sb2NhbFBoaVN0YWNrOworICAgIFZlY3RvcjxQaGlTdGFj
a0VudHJ5LCAxMjg+IG1fdG1wUGhpU3RhY2s7CiAgICAgVmVjdG9yPE5vZGUqLCAxMjg+IG1fZmx1
c2hlZExvY2FsT3BXb3JrbGlzdDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
U0VQaGFzZS5jcHAKaW5kZXggMjM4MWM2YjhmOGY0YmE3NjM0YmI2NmIxMjM5NDcxYjVhNjE2Njdj
ZS4uNGNjZTE3NDg4M2UyMDQxMGQ2MjIzYTZmNDE3MmVkZGU2OThhYWViZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKQEAgLTE0Nyw4ICsxNDcsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTdGFjazogewogICAgICAgICAg
ICAgQVNTRVJUKCFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKTsKLSAgICAgICAgICAgIEFTU0VSVCho
ZWFwLnBheWxvYWQoKS52YWx1ZSgpID09IGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7Ci0gICAg
ICAgICAgICBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLnJlbW92ZShoZWFwLnBheWxvYWQoKS52YWx1
ZTMyKCkpOworICAgICAgICAgICAgbV9hYnN0cmFjdEhlYXBTdGFja01hcC5yZW1vdmUoaGVhcC5w
YXlsb2FkKCkudmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAoY2xvYmJlckNvbnNlcnZhdGl2ZWx5
KQogICAgICAgICAgICAgICAgIG1fZmFsbGJhY2tTdGFja01hcC5jbGVhcigpOwogICAgICAgICAg
ICAgZWxzZQpAQCAtMTcyLDcgKzE3MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpZiAo
IWNsb2JiZXJDb25zZXJ2YXRpdmVseSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgaWYgKHBhaXIua2V5LmhlYXAoKS5raW5kKCkgPT0gU3RhY2spIHsKLSAgICAg
ICAgICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZmlu
ZChwYWlyLmtleS5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmZpbmQocGFpci5rZXku
aGVhcCgpLnBheWxvYWQoKS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXJh
dG9yICE9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZW5kKCkgJiYgaXRlcmF0b3ItPnZhbHVlLT5r
ZXkgPT0gcGFpci5rZXkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjI2LDggKzIyNSw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBBYnN0cmFjdEhlYXAgYWJzdHJhY3RIZWFwID0gbG9jYXRpb24uaGVh
cCgpOwogICAgICAgICAgICAgaWYgKGFic3RyYWN0SGVhcC5wYXlsb2FkKCkuaXNUb3AoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gYWRkKG1fZmFsbGJhY2tTdGFja01hcCwgbG9jYXRpb24sIG5v
ZGUpOwotICAgICAgICAgICAgQVNTRVJUKGFic3RyYWN0SGVhcC5wYXlsb2FkKCkudmFsdWUoKSA9
PSBhYnN0cmFjdEhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7Ci0gICAgICAgICAgICBhdXRvIGFk
ZFJlc3VsdCA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuYWRkKGFic3RyYWN0SGVhcC5wYXlsb2Fk
KCkudmFsdWUzMigpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9h
YnN0cmFjdEhlYXBTdGFja01hcC5hZGQoYWJzdHJhY3RIZWFwLnBheWxvYWQoKS52YWx1ZSgpLCBu
dWxscHRyKTsKICAgICAgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAg
ICAgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUucmVzZXQobmV3IEltcHVyZURhdGFT
bG90IHtsb2NhdGlvbiwgbm9kZSwgMH0pOwogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwpAQCAtMjQ5LDggKzI0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgU2lkZVN0YXRlOgog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgY2FzZSBT
dGFjazogewotICAgICAgICAgICAgQVNTRVJUKGxvY2F0aW9uLmhlYXAoKS5wYXlsb2FkKCkudmFs
dWUoKSA9PSBsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIoKSk7Ci0gICAgICAgICAg
ICBhdXRvIGl0ZXJhdG9yID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5maW5kKGxvY2F0aW9uLmhl
YXAoKS5wYXlsb2FkKCkudmFsdWUzMigpKTsKKyAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBt
X2Fic3RyYWN0SGVhcFN0YWNrTWFwLmZpbmQobG9jYXRpb24uaGVhcCgpLnBheWxvYWQoKS52YWx1
ZSgpKTsKICAgICAgICAgICAgIGlmIChpdGVyYXRvciAhPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFw
LmVuZCgpCiAgICAgICAgICAgICAgICAgJiYgaXRlcmF0b3ItPnZhbHVlLT5rZXkgPT0gbG9jYXRp
b24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS0+dmFsdWU7CkBAIC0y
OTgsNyArMjk1LDcgQEAgcHJpdmF0ZToKICAgICAvLyBhIGR1cGxpY2F0ZSBpbiB0aGUgcGFzdCBh
bmQgbm93IG9ubHkgbGl2ZSBpbiBtX2ZhbGxiYWNrU3RhY2tNYXAuCiAgICAgLy8KICAgICAvLyBP
YnZpb3VzbHksIFRPUCBhbHdheXMgZ29lcyBpbnRvIG1fZmFsbGJhY2tTdGFja01hcCBzaW5jZSBp
dCBkb2VzIG5vdCBoYXZlIGEgdW5pcXVlIHZhbHVlLgotICAgIEhhc2hNYXA8aW50MzJfdCwgc3Rk
Ojp1bmlxdWVfcHRyPEltcHVyZURhdGFTbG90PiwgRGVmYXVsdEhhc2g8aW50MzJfdD46Okhhc2gs
IFdURjo6U2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPGludDMyX3Q+PiBtX2Fic3RyYWN0SGVh
cFN0YWNrTWFwOworICAgIEhhc2hNYXA8aW50NjRfdCwgc3RkOjp1bmlxdWVfcHRyPEltcHVyZURh
dGFTbG90PiwgRGVmYXVsdEhhc2g8aW50NjRfdD46Okhhc2gsIFdURjo6U2lnbmVkV2l0aFplcm9L
ZXlIYXNoVHJhaXRzPGludDY0X3Q+PiBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwOwogICAgIE1hcCBt
X2ZhbGxiYWNrU3RhY2tNYXA7CiAKICAgICBNYXAgbV9oZWFwTWFwOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCmluZGV4IGIxODIzMTdiOWZmODQxNmE1
OTc0MTYxZTNkYzJiOGE1NzNmNWFlOGQuLmNlNWY2YWFhNjg4MjczZDliZTcwZWQ0OGFiMTlmNTYy
NjFjZGZhYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJp
bGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGll
cy5jcHAKQEAgLTMwOCw2ICszMDgsOCBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVs
KE9wY29kZUlEIG9wY29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSQogICAgIGNh
c2UgbGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5lOgogICAgIGNhc2UgbGxpbnRfaW50
ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lOgogICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxf
ZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29zcl9l
eGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3BvaW50X29z
cl9leGl0X3RyYW1wb2xpbmU6CiAgICAgY2FzZSBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbjoKICAg
ICBjYXNlIG9wX2NhbGxfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfY29uc3RydWN0X3Jl
dHVybl9sb2NhdGlvbjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2xvYmJlcml6ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgK
aW5kZXggYmZiMWQxNDYxNTVjNGM3ZTJiYTk4ZTkxYjNiOWIzYjI4NGZiYzAzNC4uMzYyYzQ3ODlk
YTc2NzMzNjU2YjYzNzE3MTJiZDZlNDk5NmQ4NTZlMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyaXplLmgKQEAgLTExMSw5ICsxMTEsOSBAQCB2b2lkIGNsb2JiZXJpemUo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3Qg
V3JpdGVGdQogICAgIC8vIHNjYW4gd291bGQgcmVhZC4gVGhhdCdzIHdoYXQgdGhpcyBkb2VzLgog
ICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5vcmlnaW4u
c2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7IGlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZy
YW1lID0gaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIuaW5saW5lQ2FsbEZyYW1lKCkpIHsK
ICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAg
IHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgICAgICByZWFkKEFic3RyYWN0SGVhcChT
dGFjaywgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxs
RnJhbWVTbG90OjpjYWxsZWUpKSk7CiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFy
YXJncygpKQotICAgICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcykpOworICAgICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIFZpcnR1YWxSZWdp
c3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7CiAgICAgfQogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0
byBzcGVjaWZpY2FsbHkgYWNjb3VudCB3aGljaCBub2RlcyBjYW4gcmVhZCBmcm9tIHRoZSBzY29w
ZQpAQCAtNDQxLDcgKzQ0MSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJl
dHVybjsKIAogICAgIGNhc2UgS2lsbFN0YWNrOgotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAo
U3RhY2ssIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpOworICAgICAgICB3cml0ZShBYnN0cmFjdEhl
YXAoU3RhY2ssIG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICAgICAgIAogICAgIGNhc2UgTW92SGludDoKQEAgLTQ5Nyw3ICs0OTcsNyBAQCB2b2lkIGNsb2Ji
ZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwg
Y29uc3QgV3JpdGVGdQogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIEZsdXNoOgotICAgICAg
ICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpOworICAgICAgICByZWFk
KEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+b3BlcmFuZCgpKSk7CiAgICAgICAgIHdyaXRlKFNp
ZGVTdGF0ZSk7CiAgICAgICAgIHJldHVybjsKIApAQCAtNzY1LDEyICs3NjUsMTIgQEAgdm9pZCBj
bG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJl
YWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdl
dENhbGxlZToKLSAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhl
YXAoU3RhY2ssIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpLCBMYXp5Tm9kZShub2RlKSk7CisgICAg
ICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFj
dEhlYXAoU3RhY2ssIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSksIExh
enlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBTZXRDYWxsZWU6Ci0g
ICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7
CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgVmlydHVhbFJlZ2lzdGVyKENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNl
IEdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOiB7CkBAIC03ODEsNyArNzgxLDcgQEAgdm9p
ZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3Im
IHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICB9CiAKICAgICBjYXNlIFNldEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzOgotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisgICAgICAgIHdyaXRlKEFic3Ry
YWN0SGVhcChTdGFjaywgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKSkpOwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIEdldFJlc3RM
ZW5ndGg6CkBAIC03ODksMzYgKzc4OSw0MiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAg
ICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWw6Ci0gICAgICAgIHJlYWQo
QWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSk7Ci0gICAgICAgIGRlZihIZWFwTG9j
YXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpLCBMYXp5
Tm9kZShub2RlKSk7CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5vcGVy
YW5kKCkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFw
KFN0YWNrLCBub2RlLT5vcGVyYW5kKCkpKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1
cm47CiAgICAgICAgIAogICAgIGNhc2UgU2V0TG9jYWw6Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0
SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0
YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKSwgTGF6eU5vZGUobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpKSk7CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywg
bm9kZS0+b3BlcmFuZCgpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFi
c3RyYWN0SGVhcChTdGFjaywgbm9kZS0+b3BlcmFuZCgpKSksIExhenlOb2RlKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0U3Rh
Y2s6IHsKLSAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoU3RhY2ssIG5vZGUtPnN0YWNrQWNjZXNz
RGF0YSgpLT5sb2NhbCk7CisgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5z
dGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCk7CiAgICAgICAgIHJlYWQoaGVhcCk7CiAgICAgICAg
IGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIGhlYXApLCBMYXp5Tm9kZShub2RlKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0U3RhY2s6IHsKLSAgICAg
ICAgQWJzdHJhY3RIZWFwIGhlYXAoU3RhY2ssIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2Nh
bCk7CisgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0Rh
dGEoKS0+b3BlcmFuZCk7CiAgICAgICAgIHdyaXRlKGhlYXApOwogICAgICAgICBkZWYoSGVhcExv
Y2F0aW9uKFN0YWNrTG9jLCBoZWFwKSwgTGF6eU5vZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgVmFyYXJnc0xlbmd0
aDogeworICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgd3JpdGUoSGVhcCk7CisgICAgICAg
IHJldHVybjsgIAorICAgIH0KKwogICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKICAgICAgICAgcmVh
ZChXb3JsZCk7CiAgICAgICAgIHdyaXRlKEhlYXApOwogICAgICAgICBMb2FkVmFyYXJnc0RhdGEq
IGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RI
ZWFwKFN0YWNrLCBkYXRhLT5jb3VudC5vZmZzZXQoKSkpOworICAgICAgICB3cml0ZShBYnN0cmFj
dEhlYXAoU3RhY2ssIGRhdGEtPmNvdW50KSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRh
dGEtPmxpbWl0OyBpLS07KQotICAgICAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBk
YXRhLT5zdGFydC5vZmZzZXQoKSArIHN0YXRpY19jYXN0PGludD4oaSkpKTsKKyAgICAgICAgICAg
IHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3RhcnQgKyBzdGF0aWNfY2FzdDxpbnQ+
KGkpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIApAQCAtODI3LDkgKzgzMyw5
IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRG
dW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJlYWQoU3RhY2spOwogICAgICAg
ICAKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRh
KCk7Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+Y291bnQub2Zmc2V0
KCkpKTsKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5jb3VudCkpOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykKLSAgICAgICAgICAg
IHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBzdGF0aWNf
Y2FzdDxpbnQ+KGkpKSk7CisgICAgICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRh
dGEtPnN0YXJ0ICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
YmluZWRMaXZlbmVzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVk
TGl2ZW5lc3MuY3BwCmluZGV4IDk1ODY2YTdmOTFhNzE0NDJkYTFjNGY3ZTQ3MDBkMDljZDJhYzMw
ZjMuLjE1NzQ2YzA1NGYwZGYzM2JhMzJkMzlmYWZlMDJkYmJkN2QyOTE0Y2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNzLmNwcApAQCAtMzks
NyArMzksNyBAQCBzdGF0aWMgdm9pZCBhZGRCeXRlY29kZUxpdmVuZXNzKEdyYXBoJiBncmFwaCwg
QXZhaWxhYmlsaXR5TWFwJiBhdmFpbGFiaWxpdHlNYXAsCiB7CiAgICAgZ3JhcGguZm9yQWxsTGl2
ZUluQnl0ZWNvZGUoCiAgICAgICAgIG5vZGUtPm9yaWdpbi5mb3JFeGl0LAotICAgICAgICBbJl0g
KFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAgICAgICAgWyZdIChPcGVyYW5kIHJlZykgewogICAg
ICAgICAgICAgYXZhaWxhYmlsaXR5TWFwLmNsb3NlU3RhcnRpbmdXaXRoTG9jYWwoCiAgICAgICAg
ICAgICAgICAgcmVnLAogICAgICAgICAgICAgICAgIFsmXSAoTm9kZSogbm9kZSkgLT4gYm9vbCB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAppbmRleCBiNGZj
OGQ0OWU2MDcyZWMxYWJkZDNmZjZiZDI1MzAwMjI1OTE4MjYyLi4wNzEyY2NiM2JlOTkyOGVlYTg2
MjNlNGQ3MjhkOGI0NzI3ZjE3MjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbkRhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tbW9uRGF0YS5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgQ2FsbFNpdGVJbmRleCBDb21tb25EYXRh
OjphZGRDb2RlT3JpZ2luKENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAgICAgY29kZU9yaWdp
bnMuYXBwZW5kKGNvZGVPcmlnaW4pOwogICAgIHVuc2lnbmVkIGluZGV4ID0gY29kZU9yaWdpbnMu
c2l6ZSgpIC0gMTsKICAgICBBU1NFUlQoY29kZU9yaWdpbnNbaW5kZXhdID09IGNvZGVPcmlnaW4p
OwotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoaW5kZXgpKTsKKyAgICBy
ZXR1cm4gQ2FsbFNpdGVJbmRleChpbmRleCk7CiB9CiAKIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0
YTo6YWRkVW5pcXVlQ2FsbFNpdGVJbmRleChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCkBAIC02NCwx
MyArNjQsMTMgQEAgQ2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjphZGRVbmlxdWVDYWxsU2l0ZUlu
ZGV4KENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICBjb2RlT3JpZ2lucy5hcHBlbmQoY29kZU9y
aWdpbik7CiAgICAgdW5zaWduZWQgaW5kZXggPSBjb2RlT3JpZ2lucy5zaXplKCkgLSAxOwogICAg
IEFTU0VSVChjb2RlT3JpZ2luc1tpbmRleF0gPT0gY29kZU9yaWdpbik7Ci0gICAgcmV0dXJuIENh
bGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChpbmRleCkpOworICAgIHJldHVybiBDYWxsU2l0ZUlu
ZGV4KGluZGV4KTsKIH0KIAogQ2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjpsYXN0Q2FsbFNpdGUo
KSBjb25zdAogewogICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVPcmlnaW5zLnNpemUoKSk7Ci0gICAg
cmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChjb2RlT3JpZ2lucy5zaXplKCkgLSAx
KSk7CisgICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbnMuc2l6ZSgpIC0gMSk7CiB9
CiAKIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6OmFkZERpc3Bvc2FibGVDYWxs
U2l0ZUluZGV4KENvZGVPcmlnaW4gY29kZU9yaWdpbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKaW5kZXggZDM3ZDI5OGJh
ODljNmMzMWRlZmU2MzcxOTE2OWM3MjkwNjA2OTM5OS4uNmQ0NDdkM2E4YmExMzEyNmMyZDE4YzAx
ZTlhM2U0MGRkMWZhNmE1YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKQEAgLTM4Myw3ICszODMsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIC8vIEdldE15QXJndW1lbnRCeVZhbCBpbiBzdWNoIHN0YXRpY2Fs
bHktb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlczsgd2UganVzdCBsb3NlIENGQSB1bmxlc3MKICAgICAg
ICAgICAgICAgICAvLyBHQ1NFIHJlbW92ZXMgdGhlIGFjY2VzcyBlbnRpcmVseS4KICAgICAgICAg
ICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChp
bmRleCA+PSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IHN0YXRpY19jYXN0PHVuc2lnbmVkPihp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gbV9zdGF0ZS5udW1iZXJPZkFyZ3VtZW50cygpIC0g
MSkKQEAgLTQwNCw3ICs0MDQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAg
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXggKyAxKSwgRmx1c2hlZEpTVmFsdWUpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAo
aW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpICYmIGluZGV4
IDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlz
VmFyYXJncygpICYmIGluZGV4IDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKSkgewogICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jb252ZXJ0VG9HZXRTdGFjayhkYXRhKTsKICAgICAgICAgICAgICAgICAgICAgZWxp
bWluYXRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCmluZGV4IGE1ODM5OTM0MmFhYTllYjVhOTU5MGQ0ODY1
OWQ0OTI0NzU2OGJmZWYuLjFmMzBkZmY2MTc5YzBjMzNlZWY1MTkzMjIyN2M3NTk2Njc1YWJmYWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKQEAgLTI5Nyw2ICsyOTcs
NyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBJbkJ5
VmFsOgogICAgIGNhc2UgSW5zdGFuY2VPZjoKICAgICBjYXNlIEluc3RhbmNlT2ZDdXN0b206Cisg
ICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBO
dW1iZXJUb1N0cmluZ1dpdGhSYWRpeDoKICAgICBjYXNlIE51bWJlclRvU3RyaW5nV2l0aFZhbGlk
UmFkaXhDb25zdGFudDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RHJpdmVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAppbmRl
eCAxN2IzNzA3NThjMDUzODcwM2I3ZDc5ZWU2MjI3MmQ0Nzk5OThiNTM5Li40NWZiYzQzOWQ1M2Jh
OTUwZTdhOGQ4OWFjOWVjMTk3MmJhMDkzOWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RyaXZlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEcml2ZXIuY3BwCkBAIC05MCw3ICs5MCw2IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBj
b21waWxlSW1wbCgKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbnkgc3R1YnMgdGhhdCB0aGUgREZH
IGlzIGdvaW5nIHRvIHVzZSBhcmUgaW5pdGlhbGl6ZWQuIFdlIHdhbnQgdG8KICAgICAvLyBtYWtl
IHN1cmUgdGhhdCBhbGwgSklUIGNvZGUgZ2VuZXJhdGlvbiBkb2VzIGZpbmFsaXphdGlvbiBvbiB0
aGUgbWFpbiB0aHJlYWQuCiAgICAgdm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKTsK
LSAgICB2bS5nZXRDVElTdHViKG9zckV4aXRUaHVua0dlbmVyYXRvcik7CiAgICAgdm0uZ2V0Q1RJ
U3R1Yihvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKTsKICAgICB2bS5nZXRDVElTdHVi
KHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcik7CiAgICAgdm0uZ2V0Q1RJ
U3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCmluZGV4IDM3NGQ1MjYwOWMzZWM2NjZiNWNjNjMwNzY3MDE0ZWRi
NDUwZjRmZDguLjkyMmQzNWJiZmFmMGJiMWRkOTBiMDkwM2E1ZjJjZGU0OWFiODZiYjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcApAQCAtMjQzOSw2ICsy
NDM5LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCisgICAg
ICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKKyAg
ICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKwogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgICAgIC8v
IEhhdmUgdGhlc2Ugbm8tb3AgY2FzZXMgaGVyZSB0byBlbnN1cmUgdGhhdCBub2JvZHkgZm9yZ2V0
cyB0byBhZGQgaGFuZGxlcnMgZm9yIG5ldyBvcGNvZGVzLgogICAgICAgICBjYXNlIFNldEFyZ3Vt
ZW50RGVmaW5pdGVseToKQEAgLTI0NzEsOCArMjQ3Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNh
c2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJk
VmFyYXJnczoKICAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxl
cjoKLSAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKLSAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJn
czoKKyAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgICAgICBjYXNlIFByb2ZpbGVDb250
cm9sRmxvdzoKICAgICAgICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgICAgIGNhc2UgTmV3UHJvbWlz
ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaAppbmRleCAwYmYx
YzNmYmJhYzRhNjYyOThjZjkyOWZlZjUwYTYwZGNmZGUyOGI5Li5iZjQzNTBjNGNkMTdlM2Q1MDA2
NjM4ZjU1YWFjMzVhNTY1Mjk5NGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZvckFsbEtpbGxzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
b3JBbGxLaWxscy5oCkBAIC0zMiw2ICszMiwxMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAKK25hbWVzcGFjZSBGb3JBbGxLaWxsc0ludGVybmFsIHsKK2NvbnN0ZXhwciBi
b29sIHZlcmJvc2UgPSBmYWxzZTsKK30KKwogLy8gVXRpbGl0aWVzIGZvciBmaW5kaW5nIHRoZSBs
YXN0IHBvaW50cyB3aGVyZSBhIG5vZGUgaXMgbGl2ZSBpbiBERkcgU1NBLiBUaGlzIGFjY291bnRz
IGZvciBsaXZlbmVzcyBkdWUKIC8vIHRvIE9TUiBleGl0LiBUaGlzIGlzIHVzdWFsbHkgdXNlZCBm
b3IgZW51bWVyYXRpbmcgb3ZlciBhbGwgb2YgdGhlIHByb2dyYW0gcG9pbnRzIHdoZXJlIGEgbm9k
ZSBpcyBsaXZlLAogLy8gYnkgZXhwbG9yaW5nIGFsbCBibG9ja3Mgd2hlcmUgdGhlIG5vZGUgaXMg
bGl2ZSBhdCB0YWlsIGFuZCB0aGVuIGV4cGxvcmluZyBhbGwgcHJvZ3JhbSBwb2ludHMgd2hlcmUg
dGhlCkBAIC01MywxMyArNTcsMTMgQEAgdm9pZCBmb3JBbGxLaWxsZWRPcGVyYW5kcyhHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGVCZWZvcmUsIE5vZGUqIG5vZGVBZnRlciwgY29uc3QKICAgICAKICAg
ICBDb2RlT3JpZ2luIGFmdGVyID0gbm9kZUFmdGVyLT5vcmlnaW4uZm9yRXhpdDsKICAgICAKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYWxyZWFkeU5vdGVkOworICAgIE9wZXJhbmQgYWxyZWFkeU5vdGVk
OwogICAgIC8vIElmIHdlIE1vdkhpbnQgc29tZXRoaW5nIHRoYXQgaXMgbGl2ZSBhdCB0aGUgdGlt
ZSwgdGhlbiB3ZSBraWxsIHRoZSBvbGQgdmFsdWUuCiAgICAgaWYgKG5vZGVBZnRlci0+Y29udGFp
bnNNb3ZIaW50KCkpIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG5vZGVBZnRlci0+
dW5saW5rZWRMb2NhbCgpOwotICAgICAgICBpZiAoZ3JhcGguaXNMaXZlSW5CeXRlY29kZShyZWcs
IGFmdGVyKSkgewotICAgICAgICAgICAgZnVuY3RvcihyZWcpOwotICAgICAgICAgICAgYWxyZWFk
eU5vdGVkID0gcmVnOworICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBub2RlQWZ0ZXItPnVubGlu
a2VkT3BlcmFuZCgpOworICAgICAgICBpZiAoZ3JhcGguaXNMaXZlSW5CeXRlY29kZShvcGVyYW5k
LCBhZnRlcikpIHsKKyAgICAgICAgICAgIGZ1bmN0b3Iob3BlcmFuZCk7CisgICAgICAgICAgICBh
bHJlYWR5Tm90ZWQgPSBvcGVyYW5kOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtNzAsMjkg
Kzc0LDQ4IEBAIHZvaWQgZm9yQWxsS2lsbGVkT3BlcmFuZHMoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlQmVmb3JlLCBOb2RlKiBub2RlQWZ0ZXIsIGNvbnN0CiAgICAgLy8gb3RoZXIgbG9vcCwgYmVs
b3cuCiAgICAgYXV0byogYmVmb3JlSW5saW5lQ2FsbEZyYW1lID0gYmVmb3JlLmlubGluZUNhbGxG
cmFtZSgpOwogICAgIGlmIChiZWZvcmVJbmxpbmVDYWxsRnJhbWUgPT0gYWZ0ZXIuaW5saW5lQ2Fs
bEZyYW1lKCkpIHsKLSAgICAgICAgaW50IHN0YWNrT2Zmc2V0ID0gYmVmb3JlSW5saW5lQ2FsbEZy
YW1lID8gYmVmb3JlSW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDA7CiAgICAgICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IoYmVmb3JlSW5s
aW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgaWYgKGFmdGVyLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3Bv
aW50KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChiZWZvcmUuYnl0ZWNvZGVJbmRleCgpLmNoZWNr
cG9pbnQoKSAhPSBhZnRlci5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpKTsKKyAgICAgICAg
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoYmVmb3JlLmJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKSA9
PSBhZnRlci5ieXRlY29kZUluZGV4KCkub2Zmc2V0KCksICJXaGVuIHRoZSBERkcgZG9lcyBjb2Rl
IG1vdGlvbiBpdCBzaG91bGQgY2hhbmdlIHRoZSBmb3JFeGl0IG9yaWdpbiB0byBtYXRjaCB0aGUg
c3Vycm91bmRpbmcgYnl0ZWNvZGVzLiIpOworCisgICAgICAgICAgICBhdXRvIGxpdmVCZWZvcmUg
PSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgYmVmb3JlLmJ5dGVjb2RlSW5k
ZXgoKSk7CisgICAgICAgICAgICBhdXRvIGxpdmVBZnRlciA9IHRtcExpdmVuZXNzRm9yQ2hlY2tw
b2ludCgqY29kZUJsb2NrLCBhZnRlci5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgbGl2
ZUFmdGVyLmludmVydCgpOworICAgICAgICAgICAgbGl2ZUJlZm9yZS5maWx0ZXIobGl2ZUFmdGVy
KTsKKworICAgICAgICAgICAgbGl2ZUJlZm9yZS5mb3JFYWNoU2V0Qml0KFsmXSAoc2l6ZV90IHRt
cCkgeworICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVtYXBPcGVyYW5kKGJlZm9yZUlubGluZUNh
bGxGcmFtZSwgT3BlcmFuZDo6dG1wKHRtcCkpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgLy8gTm8gbG9jYWxzIGNhbiBkaWUgYXQgYSBjaGVja3BvaW50LgorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKICAgICAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGZ1bGxMaXZl
bmVzcyA9IGdyYXBoLmxpdmVuZXNzRm9yKGNvZGVCbG9jayk7CiAgICAgICAgIGNvbnN0IEZhc3RC
aXRWZWN0b3ImIGxpdmVCZWZvcmUgPSBmdWxsTGl2ZW5lc3MuZ2V0TGl2ZW5lc3MoYmVmb3JlLmJ5
dGVjb2RlSW5kZXgoKSwgTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50OjpCZWZvcmVVc2UpOwogICAg
ICAgICBjb25zdCBGYXN0Qml0VmVjdG9yJiBsaXZlQWZ0ZXIgPSBmdWxsTGl2ZW5lc3MuZ2V0TGl2
ZW5lc3MoYWZ0ZXIuYnl0ZWNvZGVJbmRleCgpLCBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQ6OkJl
Zm9yZVVzZSk7CiAgICAgICAgIAogICAgICAgICAobGl2ZUJlZm9yZSAmIH5saXZlQWZ0ZXIpLmZv
ckVhY2hTZXRCaXQoCiAgICAgICAgICAgICBbJl0gKHNpemVfdCByZWxhdGl2ZUxvY2FsKSB7Ci0g
ICAgICAgICAgICAgICAgZnVuY3Rvcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChyZWxhdGl2ZUxv
Y2FsKSArIHN0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBmdW5jdG9yKHJlbWFwT3BlcmFu
ZChiZWZvcmVJbmxpbmVDYWxsRnJhbWUsIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKHJlbGF0aXZl
TG9jYWwpKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAK
KworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWFmdGVyLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3Bv
aW50KCksICJUcmFuc2l0aW9uaW5nIGFjcm9zcyBhIGNoZWNrcG9pbnQgYnV0IGJlZm9yZSBhbmQg
YWZ0ZXIgZG9uJ3Qgc2hhcmUgYW4gaW5saW5lQ2FsbEZyYW1lLiIpOworCiAgICAgLy8gRGV0ZWN0
IGtpbGxzIHRoZSBzdXBlciBjb25zZXJ2YXRpdmUgd2F5OiBpdCBpcyBraWxsZWQgaWYgaXQgd2Fz
IGxpdmUgYmVmb3JlIGFuZCBkZWFkIGFmdGVyLgotICAgIEJpdFZlY3RvciBsaXZlQWZ0ZXIgPSBn
cmFwaC5sb2NhbHNMaXZlSW5CeXRlY29kZShhZnRlcik7Ci0gICAgZ3JhcGguZm9yQWxsTG9jYWxz
TGl2ZUluQnl0ZWNvZGUoCisgICAgQml0VmVjdG9yIGxpdmVBZnRlciA9IGdyYXBoLmxvY2Fsc0Fu
ZFRtcHNMaXZlSW5CeXRlY29kZShhZnRlcik7CisgICAgdW5zaWduZWQgbnVtTG9jYWxzID0gZ3Jh
cGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOworICAgIGdyYXBo
LmZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZSgKICAgICAgICAgYmVmb3JlLAotICAg
ICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKLSAgICAgICAgICAgIGlmIChyZWcgPT0g
YWxyZWFkeU5vdGVkKQorICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAg
ICAgaWYgKG9wZXJhbmQgPT0gYWxyZWFkeU5vdGVkKQogICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIGlmIChsaXZlQWZ0ZXIuZ2V0KHJlZy50b0xvY2FsKCkpKQorICAgICAgICAg
ICAgdW5zaWduZWQgb2Zmc2V0ID0gb3BlcmFuZC5pc1RtcCgpID8gbnVtTG9jYWxzICsgb3BlcmFu
ZC52YWx1ZSgpIDogb3BlcmFuZC50b0xvY2FsKCk7CisgICAgICAgICAgICBpZiAobGl2ZUFmdGVy
LmdldChvZmZzZXQpKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGZ1bmN0
b3IocmVnKTsKKyAgICAgICAgICAgIGZ1bmN0b3Iob3BlcmFuZCk7CiAgICAgICAgIH0pOwogfQog
ICAgIApAQCAtMTA1LDcgKzEyOCw4IEBAIHZvaWQgZm9yQWxsS2lsbGVkTm9kZXNBdE5vZGVJbmRl
eCgKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNlZW5JbkNsb3N1cmVGbGFnID0gMTsK
ICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNhbGxlZEZ1bmN0b3JGbGFnID0gMjsKICAg
ICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD4gZmxhZ3M7Ci0gICAgCisKKyAgICBBU1NFUlQobm9k
ZUluZGV4KTsKICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CiAgICAgCiAg
ICAgZ3JhcGguZG9Ub0NoaWxkcmVuKApAQCAtMTIwLDE1ICsxNDQsMTMgQEAgdm9pZCBmb3JBbGxL
aWxsZWROb2Rlc0F0Tm9kZUluZGV4KAogICAgICAgICAgICAgfQogICAgICAgICB9KTsKIAotICAg
IE5vZGUqIGJlZm9yZSA9IG51bGxwdHI7Ci0gICAgaWYgKG5vZGVJbmRleCkKLSAgICAgICAgYmVm
b3JlID0gYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpOworICAgIE5vZGUqIGJlZm9yZSA9IGJsb2Nr
LT5hdChub2RlSW5kZXggLSAxKTsKIAogICAgIGZvckFsbEtpbGxlZE9wZXJhbmRzKAogICAgICAg
ICBncmFwaCwgYmVmb3JlLCBub2RlLAotICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcp
IHsKKyAgICAgICAgWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgIGF2YWlsYWJp
bGl0eU1hcC5jbG9zZVN0YXJ0aW5nV2l0aExvY2FsKAotICAgICAgICAgICAgICAgIHJlZywKKyAg
ICAgICAgICAgICAgICBvcGVyYW5kLAogICAgICAgICAgICAgICAgIFsmXSAoTm9kZSogbm9kZSkg
LT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbGFncy5nZXQobm9kZSkgJiBz
ZWVuSW5DbG9zdXJlRmxhZzsKICAgICAgICAgICAgICAgICB9LApAQCAtMTU5LDYgKzE4MSw3IEBA
IHZvaWQgZm9yQWxsS2lsbHNJbkJsb2NrKAogICAgIC8vIFN0YXJ0IGF0IHRoZSBzZWNvbmQgbm9k
ZSwgYmVjYXVzZSB0aGUgZnVuY3RvciBpcyBleHBlY3RlZCB0byBvbmx5IGluc3BlY3Qgbm9kZXMg
ZnJvbSB0aGUgc3RhcnQgb2YKICAgICAvLyB0aGUgYmxvY2sgdXAgdG8gbm9kZUluZGV4IChleGNs
dXNpdmUpLCBzbyBpZiBub2RlSW5kZXggaXMgemVybyB0aGVuIHRoZSBmdW5jdG9yIGhhcyBub3Ro
aW5nIHRvIGRvLgogICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMTsgbm9kZUluZGV4IDwg
YmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgZGF0YUxvZ0xuSWYoRm9yQWxs
S2lsbHNJbnRlcm5hbDo6dmVyYm9zZSwgImxvY2FsIGF2YWlsYWJpbGl0eSBhdCBpbmRleDogIiwg
bm9kZUluZGV4LCAiICIsIGxvY2FsQXZhaWxhYmlsaXR5Lm1fYXZhaWxhYmlsaXR5KTsKICAgICAg
ICAgZm9yQWxsS2lsbGVkTm9kZXNBdE5vZGVJbmRleCgKICAgICAgICAgICAgIGdyYXBoLCBsb2Nh
bEF2YWlsYWJpbGl0eS5tX2F2YWlsYWJpbGl0eSwgYmxvY2ssIG5vZGVJbmRleCwKICAgICAgICAg
ICAgIFsmXSAoTm9kZSogbm9kZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAppbmRleCBlNTEzNTVjNTUxYjQ4YzI2NmY5ZTNhYjc1NjhiYTEwYjdkODI0ZWMyLi5iOWY4NTcy
OTVlZmFmNzUyNjE0YjQ0Zjc1OWY0ODk4YTRmYmM3MjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcApAQCAtMzA4LDggKzMwOCw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBOb2RlKiBub2RlLCBEdW1wQ29u
dGV4CiAgICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgqdGhpcykpIHsKICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT50cnlHZXRW
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YSkgewot
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2YXJpYWJsZUFjY2Vzc0RhdGEt
PmxvY2FsKCk7Ci0gICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIHZhcmlhYmxlQWNjZXNzRGF0
YS0+bG9jYWwoKSwgIigiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKCp0aGlzLCB2YXJpYWJsZUFj
Y2Vzc0RhdGEpLCAiKSIpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gdmFyaWFibGVB
Y2Nlc3NEYXRhLT5vcGVyYW5kKCk7CisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIHZhcmlh
YmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpLCAiKCIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAoKnRo
aXMsIHZhcmlhYmxlQWNjZXNzRGF0YSksICIpIik7CiAgICAgICAgICAgICBvcGVyYW5kID0gdmFy
aWFibGVBY2Nlc3NEYXRhLT5tYWNoaW5lTG9jYWwoKTsKICAgICAgICAgICAgIGlmIChvcGVyYW5k
LmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJtYWNoaW5lOiIs
IG9wZXJhbmQpOwpAQCAtMzE3LDEzICszMTcsMTMgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXhTdHIsIE5vZGUqIG5vZGUsIER1bXBDb250ZXgK
ICAgICB9CiAgICAgaWYgKG5vZGUtPmhhc1N0YWNrQWNjZXNzRGF0YSgpKSB7CiAgICAgICAgIFN0
YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICBv
dXQucHJpbnQoY29tbWEsIGRhdGEtPmxvY2FsKTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBk
YXRhLT5vcGVyYW5kKTsKICAgICAgICAgaWYgKGRhdGEtPm1hY2hpbmVMb2NhbC5pc1ZhbGlkKCkp
CiAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJtYWNoaW5lOiIsIGRhdGEtPm1hY2hpbmVM
b2NhbCk7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgZGF0YS0+Zm9ybWF0KTsKICAgICB9Ci0g
ICAgaWYgKG5vZGUtPmhhc1VubGlua2VkTG9jYWwoKSkgCi0gICAgICAgIG91dC5wcmludChjb21t
YSwgbm9kZS0+dW5saW5rZWRMb2NhbCgpKTsKKyAgICBpZiAobm9kZS0+aGFzVW5saW5rZWRPcGVy
YW5kKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgbm9kZS0+dW5saW5rZWRPcGVyYW5kKCkp
OwogICAgIGlmIChub2RlLT5oYXNWZWN0b3JMZW5ndGhIaW50KCkpCiAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgInZlY3Rvckxlbmd0aEhpbnQgPSAiLCBub2RlLT52ZWN0b3JMZW5ndGhIaW50KCkp
OwogICAgIGlmIChub2RlLT5oYXNMYXp5SlNWYWx1ZSgpKQpAQCAtNTE1LDkgKzUxNSwxMCBAQCB2
b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciog
cHJlZml4U3RyLCBCYXNpY0Jsb2NrKgogICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBQaGkg
Tm9kZXM6Iik7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnBoaXMuc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBibG9jay0+cGhpc1tpXTsK
KyAgICAgICAgICAgIEFTU0VSVChwaGlOb2RlLT5vcCgpID09IFBoaSk7CiAgICAgICAgICAgICBp
ZiAoIXBoaU5vZGUtPnNob3VsZEdlbmVyYXRlKCkgJiYgcGhpTm9kZUR1bXBNb2RlID09IER1bXBM
aXZlUGhpc09ubHkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBvdXQu
cHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgoKSwgIjwiLCBwaGlOb2RlLT5sb2NhbCgpLCAiLCIs
IHBoaU5vZGUtPnJlZkNvdW50KCksICI+LT4oIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiBA
IiwgcGhpTm9kZS0+aW5kZXgoKSwgIjwiLCBwaGlOb2RlLT5vcGVyYW5kKCksICIsIiwgcGhpTm9k
ZS0+cmVmQ291bnQoKSwgIj4tPigiKTsKICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDEo
KSkgewogICAgICAgICAgICAgICAgIG91dC5wcmludCgiQCIsIHBoaU5vZGUtPmNoaWxkMSgpLT5p
bmRleCgpKTsKICAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQyKCkpIHsKQEAgLTg4
NCw3ICs4ODUsNyBAQCB2b2lkIEdyYXBoOjpzdWJzdGl0dXRlR2V0TG9jYWwoQmFzaWNCbG9jayYg
YmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJbkJsb2NrLCBWYQogICAgICAgICBib29sIHNob3Vs
ZENvbnRpbnVlID0gdHJ1ZTsKICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAg
IGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5sb2NhbCgpID09IHZhcmlh
YmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkKKyAgICAgICAgICAgIGlmIChub2RlLT5vcGVyYW5kKCkg
PT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCkpCiAgICAgICAgICAgICAgICAgc2hvdWxk
Q29udGludWUgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC04OTMs
OSArODk0LDkgQEAgdm9pZCBHcmFwaDo6c3Vic3RpdHV0ZUdldExvY2FsKEJhc2ljQmxvY2smIGJs
b2NrLCB1bnNpZ25lZCBzdGFydEluZGV4SW5CbG9jaywgVmEKICAgICAgICAgICAgIGlmIChub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSB2YXJpYWJsZUFjY2Vzc0RhdGEpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICBzdWJzdGl0dXRlKGJsb2NrLCBpbmRleEluQmxv
Y2ssIG5vZGUsIG5ld0dldExvY2FsKTsKLSAgICAgICAgICAgIE5vZGUqIG9sZFRhaWxOb2RlID0g
YmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgp
KTsKKyAgICAgICAgICAgIE5vZGUqIG9sZFRhaWxOb2RlID0gYmxvY2sudmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCkpOwogICAgICAgICAgICAgaWYg
KG9sZFRhaWxOb2RlID09IG5vZGUpCi0gICAgICAgICAgICAgICAgYmxvY2sudmFyaWFibGVzQXRU
YWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKSA9IG5ld0dldExvY2FsOwor
ICAgICAgICAgICAgICAgIGJsb2NrLnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNj
ZXNzRGF0YS0+b3BlcmFuZCgpKSA9IG5ld0dldExvY2FsOwogICAgICAgICAgICAgc2hvdWxkQ29u
dGludWUgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMTMzLDM2
ICsxMTM0LDU2IEBAIEJ5dGVjb2RlS2lsbHMmIEdyYXBoOjpraWxsc0ZvcihJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZSkKICAgICByZXR1cm4ga2lsbHNGb3IoYmFzZWxpbmVDb2RlQmxv
Y2tGb3IoaW5saW5lQ2FsbEZyYW1lKSk7CiB9CiAKLWJvb2wgR3JhcGg6OmlzTGl2ZUluQnl0ZWNv
ZGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKK2Jvb2wg
R3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUoT3BlcmFuZCBvcGVyYW5kLCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4pCiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKICAg
ICAKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiQ2hlY2tpbmcgb2Ygb3BlcmFu
ZCBpcyBsaXZlOiAiLCBvcGVyYW5kLCAiXG4iKTsKICAgICBib29sIGlzQ2FsbGVyT3JpZ2luID0g
ZmFsc2U7CisKICAgICBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luUHRyID0gJmNvZGVPcmlnaW47Ci0g
ICAgZm9yICg7OykgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gVmlydHVhbFJlZ2lz
dGVyKAotICAgICAgICAgICAgb3BlcmFuZC5vZmZzZXQoKSAtIGNvZGVPcmlnaW5QdHItPnN0YWNr
T2Zmc2V0KCkpOworICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW5QdHItPmlu
bGluZUNhbGxGcmFtZSgpOworICAgIC8vIFdlIG5lZWQgdG8gaGFuZGxlIHRhaWwgY2FsbGVycyBi
ZWNhdXNlIHdlIG1heSBkZWNpZGUgdG8gZXhpdCB0byB0aGUKKyAgICAvLyB0aGUgcmV0dXJuIGJ5
dGVjb2RlIGZvbGxvd2luZyB0aGUgdGFpbCBjYWxsLgorICAgIGZvciAoOyBjb2RlT3JpZ2luUHRy
OyBjb2RlT3JpZ2luUHRyID0gaW5saW5lQ2FsbEZyYW1lID8gJmlubGluZUNhbGxGcmFtZS0+ZGly
ZWN0Q2FsbGVyIDogbnVsbHB0cikgeworICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3Jp
Z2luUHRyLT5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkg
eworICAgICAgICAgICAgdW5zaWduZWQgdG1wT2Zmc2V0ID0gaW5saW5lQ2FsbEZyYW1lID8gaW5s
aW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQgOiAwOworICAgICAgICAgICAgdW5zaWduZWQgb3BlcmFu
ZEluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9wZXJhbmQudmFsdWUoKSk7CisKKyAgICAg
ICAgICAgIEFTU0VSVChvcGVyYW5kLnZhbHVlKCkgPj0gMCk7CisgICAgICAgICAgICAvLyBUaGlz
IHRtcCBzaG91bGQgaGF2ZSBiZWxvbmdlZCB0byBzb21lb25lIHdlIGlubGluZWQuCisgICAgICAg
ICAgICBpZiAob3BlcmFuZEluZGV4ID4gdG1wT2Zmc2V0ICsgbWF4TnVtQ2hlY2twb2ludFRtcHMp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSk7CisgICAg
ICAgICAgICBpZiAoIWNvZGVCbG9jay0+bnVtVG1wcygpIHx8IG9wZXJhbmRJbmRleCA8IHRtcE9m
ZnNldCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgYXV0byBiaXRN
YXAgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgY29kZU9yaWdpblB0ci0+
Ynl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAgIHJldHVybiBiaXRNYXAuZ2V0KG9wZXJhbmRJ
bmRleCAtIHRtcE9mZnNldCk7CisgICAgICAgIH0KKworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSAtIGNvZGVPcmlnaW5QdHItPnN0YWNrT2Zm
c2V0KCk7CiAgICAgICAgIAogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFM
b2coInJlZyA9ICIsIHJlZywgIlxuIik7CiAKLSAgICAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1l
ID0gY29kZU9yaWdpblB0ci0+aW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAgICAgIGlmIChvcGVyYW5k
Lm9mZnNldCgpIDwgY29kZU9yaWdpblB0ci0+c3RhY2tPZmZzZXQoKSArIENhbGxGcmFtZTo6aGVh
ZGVyU2l6ZUluUmVnaXN0ZXJzKSB7CisgICAgICAgIGlmIChvcGVyYW5kLnZpcnR1YWxSZWdpc3Rl
cigpLm9mZnNldCgpIDwgY29kZU9yaWdpblB0ci0+c3RhY2tPZmZzZXQoKSArIENhbGxGcmFtZTo6
aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSB7CiAgICAgICAgICAgICBpZiAocmVnLmlzQXJndW1lbnQo
KSkgewogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlZy5vZmZzZXQoKSA8IENhbGxG
cmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKTsKIAogCiAgICAgICAgICAgICAgICAgaWYgKGlu
bGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbAotICAgICAgICAgICAgICAgICAgICAmJiByZWcu
b2Zmc2V0KCkgPT0gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSB7CisgICAgICAgICAgICAgICAgICAg
ICYmIHJlZyA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUpIHsKICAgICAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJMb29rcyBsaWtl
IGEgY2FsbGVlLlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKQotICAgICAgICAgICAgICAgICAgICAmJiByZWcub2Zmc2V0
KCkgPT0gQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgJiYgcmVnID09IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiTG9va3MgbGlrZSB0aGUgYXJndW1lbnQgY291bnQuXG4i
KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTc2LDQyICsxMTk3LDM5
IEBAIGJvb2wgR3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQs
IENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgIEZ1
bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxsTGl2ZW5lc3MgPSBsaXZlbmVzc0Zvcihjb2RlQmxvY2sp
OwogICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpblB0
ci0+Ynl0ZWNvZGVJbmRleCgpOwotICAgICAgICAgICAgcmV0dXJuIGZ1bGxMaXZlbmVzcy5vcGVy
YW5kSXNMaXZlKHJlZy5vZmZzZXQoKSwgYnl0ZWNvZGVJbmRleCwgYXBwcm9wcmlhdGVMaXZlbmVz
c0NhbGN1bGF0aW9uUG9pbnQoKmNvZGVPcmlnaW5QdHIsIGlzQ2FsbGVyT3JpZ2luKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkgewotICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiUmFuIG91dCBvZiBzdGFjaywgcmV0
dXJuaW5nIHRydWUuXG4iKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
cmV0dXJuIGZ1bGxMaXZlbmVzcy52aXJ0dWFsUmVnaXN0ZXJJc0xpdmUocmVnLCBieXRlY29kZUlu
ZGV4LCBhcHByb3ByaWF0ZUxpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCgqY29kZU9yaWdpblB0ciwg
aXNDYWxsZXJPcmlnaW4pKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEFyZ3VtZW50cyBhcmUg
YWx3YXlzIGxpdmUuIFRoaXMgd291bGQgYmUgcmVkdW5kYW50IGlmIGl0IHdhc24ndCBmb3Igb3Vy
CiAgICAgICAgIC8vIG9wX2NhbGxfdmFyYXJncyBpbmxpbmluZy4KLSAgICAgICAgaWYgKHJlZy5p
c0FyZ3VtZW50KCkKKyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiByZWcuaXNBcmd1bWVu
dCgpCiAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlZy50b0FyZ3VtZW50KCkp
IDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNXaXRoRml4dXAuc2l6ZSgpKSB7CiAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJBcmd1bWVudCBpcyBs
aXZlLlxuIik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAg
IC8vIFdlIG5lZWQgdG8gaGFuZGxlIHRhaWwgY2FsbGVycyBiZWNhdXNlIHdlIG1heSBkZWNpZGUg
dG8gZXhpdCB0byB0aGUKLSAgICAgICAgLy8gdGhlIHJldHVybiBieXRlY29kZSBmb2xsb3dpbmcg
dGhlIHRhaWwgY2FsbC4KLSAgICAgICAgY29kZU9yaWdpblB0ciA9ICZpbmxpbmVDYWxsRnJhbWUt
PmRpcmVjdENhbGxlcjsKICAgICAgICAgaXNDYWxsZXJPcmlnaW4gPSB0cnVlOwogICAgIH0KLSAg
ICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgaWYgKG9wZXJhbmQu
aXNUbXAoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgIGRhdGFMb2coIlJhbiBvdXQgb2Ygc3RhY2ssIHJldHVybmluZyB0cnVlLlxuIik7CisgICAg
cmV0dXJuIHRydWU7ICAgIAogfQogCi1CaXRWZWN0b3IgR3JhcGg6OmxvY2Fsc0xpdmVJbkJ5dGVj
b2RlKENvZGVPcmlnaW4gY29kZU9yaWdpbikKK0JpdFZlY3RvciBHcmFwaDo6bG9jYWxzQW5kVG1w
c0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4gY29kZU9yaWdpbikKIHsKICAgICBCaXRWZWN0b3Ig
cmVzdWx0OwotICAgIHJlc3VsdC5lbnN1cmVTaXplKGJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQu
bnVtYmVyT2ZMb2NhbHMoKSk7Ci0gICAgZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoCisgICAg
dW5zaWduZWQgbnVtTG9jYWxzID0gYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxv
Y2FscygpOworICAgIHJlc3VsdC5lbnN1cmVTaXplKG51bUxvY2FscyArIGJsb2NrKDApLT52YXJp
YWJsZXNBdEhlYWQubnVtYmVyT2ZUbXBzKCkpOworICAgIGZvckFsbExvY2Fsc0FuZFRtcHNMaXZl
SW5CeXRlY29kZSgKICAgICAgICAgY29kZU9yaWdpbiwKLSAgICAgICAgWyZdIChWaXJ0dWFsUmVn
aXN0ZXIgcmVnKSB7Ci0gICAgICAgICAgICBBU1NFUlQocmVnLmlzTG9jYWwoKSk7Ci0gICAgICAg
ICAgICByZXN1bHQucXVpY2tTZXQocmVnLnRvTG9jYWwoKSk7CisgICAgICAgIFsmXSAoT3BlcmFu
ZCBvcGVyYW5kKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBvcGVyYW5kLmlzVG1w
KCkgPyBudW1Mb2NhbHMgKyBvcGVyYW5kLnZhbHVlKCkgOiBvcGVyYW5kLnRvTG9jYWwoKTsKKyAg
ICAgICAgICAgIHJlc3VsdC5xdWlja1NldChvZmZzZXQpOwogICAgICAgICB9KTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQpAQCAtMTYzNSw4ICsxNjUzLDggQEAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZSBHcmFwaDo6bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihOb2RlKiBjdXJy
ZW4KIAogICAgIGZvciAoTm9kZSogbm9kZSA9IG9wZXJhbmROb2RlOyBub2RlOykgewogICAgICAg
ICBpZiAobm9kZS0+YWNjZXNzZXNTdGFjaygqdGhpcykpIHsKLSAgICAgICAgICAgIGlmIChtX2Zv
cm0gIT0gU1NBICYmIG5vZGUtPmxvY2FsKCkuaXNBcmd1bWVudCgpKSB7Ci0gICAgICAgICAgICAg
ICAgaW50IGFyZ3VtZW50ID0gbm9kZS0+bG9jYWwoKS50b0FyZ3VtZW50KCk7CisgICAgICAgICAg
ICBpZiAobV9mb3JtICE9IFNTQSAmJiBub2RlLT5vcGVyYW5kKCkuaXNBcmd1bWVudCgpKSB7Cisg
ICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gbm9kZS0+b3BlcmFuZCgpLnRvQXJndW1lbnQo
KTsKICAgICAgICAgICAgICAgICBOb2RlKiBhcmd1bWVudE5vZGUgPSBtX3Jvb3RUb0FyZ3VtZW50
cy5maW5kKGJsb2NrKDApKS0+dmFsdWVbYXJndW1lbnRdOwogICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgbWF0Y2ggU2V0QXJndW1lbnREZWZpbml0ZWx5IG5vZGVzIGF0IG90aGVy
IGVudHJ5cG9pbnRzIGFzIHdlbGw6CiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTg0MQpAQCAtMTY1Niw3ICsxNjc0LDcgQEAgTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBHcmFwaDo6bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZUZvcihOb2RlKiBjdXJyZW4KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKICAgICAgICAgICAgICAgICAg
ICAgICAgIHByb2ZpbGVkQmxvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICBMYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZUtleSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmln
aW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpLCBub2RlLT5sb2NhbCgpKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSwg
bm9kZS0+b3BlcmFuZCgpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKaW5kZXggZWM0ZjIyYmVlNTVmMWIyOTA0MmJm
YjIzZTEyNjRmYTIwM2NhZGRlNy4uZDQzM2Q4NWQ5Nzg5YTViZTliNWNlNjgzOGQ5YjFlMjM0MWE3
YTRjYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaApAQCAtODQwLDEzICs4NDAs
MTMgQEAgcHVibGljOgogICAgIC8vIFF1aWNrbHkgcXVlcnkgaWYgYSBzaW5nbGUgbG9jYWwgaXMg
bGl2ZSBhdCB0aGUgZ2l2ZW4gcG9pbnQuIFRoaXMgaXMgZmFzdGVyIHRoYW4gY2FsbGluZwogICAg
IC8vIGZvckFsbExpdmVJbkJ5dGVjb2RlKCkgaWYgeW91IHdpbGwgb25seSBxdWVyeSBvbmUgbG9j
YWwuIEJ1dCwgaWYgeW91IHdhbnQgdG8ga25vdyBhbGwgb2YgdGhlCiAgICAgLy8gbG9jYWxzIGxp
dmUsIHRoZW4gY2FsbGluZyB0aGlzIGZvciBlYWNoIGxvY2FsIGlzIG11Y2ggc2xvd2VyIHRoYW4g
Zm9yQWxsTGl2ZUluQnl0ZWNvZGUoKS4KLSAgICBib29sIGlzTGl2ZUluQnl0ZWNvZGUoVmlydHVh
bFJlZ2lzdGVyLCBDb2RlT3JpZ2luKTsKKyAgICBib29sIGlzTGl2ZUluQnl0ZWNvZGUoT3BlcmFu
ZCwgQ29kZU9yaWdpbik7CiAgICAgCi0gICAgLy8gUXVpY2tseSBnZXQgYWxsIG9mIHRoZSBub24t
YXJndW1lbnQgbG9jYWxzIGxpdmUgYXQgdGhlIGdpdmVuIHBvaW50LiBUaGlzIGRvZXNuJ3QgZ2l2
ZSB5b3UKKyAgICAvLyBRdWlja2x5IGdldCBhbGwgb2YgdGhlIG5vbi1hcmd1bWVudCBsb2NhbHMg
YW5kIHRtcHMgbGl2ZSBhdCB0aGUgZ2l2ZW4gcG9pbnQuIFRoaXMgZG9lc24ndCBnaXZlIHlvdQog
ICAgIC8vIGFueSBhcmd1bWVudHMgYmVjYXVzZSB0aG9zZSBhcmUgYWxsIHByZXN1bWVkIGxpdmUu
IFlvdSBjYW4gY2FsbCBmb3JBbGxMaXZlSW5CeXRlY29kZSgpIHRvCiAgICAgLy8gYWxzbyBnZXQg
dGhlIGFyZ3VtZW50cy4gVGhpcyBpcyBtdWNoIGZhc3RlciB0aGFuIGNhbGxpbmcgaXNMaXZlSW5C
eXRlY29kZSgpIGZvciBlYWNoIGxvY2FsLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
Ci0gICAgdm9pZCBmb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgdm9pZCBmb3JBbGxMb2NhbHNBbmRUbXBz
TGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKQogICAgIHsKICAgICAgICAgLy8gU3VwcG9ydCBmb3Igbm90IHJlZHVuZGFudGx5IHJlcG9y
dGluZyBhcmd1bWVudHMuIE5lY2Vzc2FyeSBiZWNhdXNlIGluIGNhc2Ugb2YgYSB2YXJhcmdzCiAg
ICAgICAgIC8vIGNhbGwsIG9ubHkgdGhlIGNhbGxlZSBrbm93cyB0aGF0IGFyZ3VtZW50cyBhcmUg
bGl2ZSB3aGlsZSBpbiB0aGUgY2FzZSBvZiBhIG5vbi12YXJhcmdzCkBAIC04ODEsNiArODgxLDE0
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpZiAobGl2ZW5lc3NBdEJ5dGVjb2RlW3JlbGF0
aXZlTG9jYWxdKQogICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHJlZyk7CiAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCkuY2hl
Y2twb2ludCgpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+bnVtVG1wcygp
KTsKKyAgICAgICAgICAgICAgICBhdXRvIGxpdmVUbXBzID0gdG1wTGl2ZW5lc3NGb3JDaGVja3Bv
aW50KCpjb2RlQmxvY2ssIGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAg
ICAgICAgICAgbGl2ZVRtcHMuZm9yRWFjaFNldEJpdChbJl0gKHNpemVfdCB0bXApIHsKKyAgICAg
ICAgICAgICAgICAgICAgZnVuY3RvcihyZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBPcGVy
YW5kOjp0bXAodG1wKSkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAg
ICAgICBicmVhazsKQEAgLTkwNCw5ICs5MTIsOSBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9
CiAgICAgCi0gICAgLy8gR2V0IGEgQml0VmVjdG9yIG9mIGFsbCBvZiB0aGUgbm9uLWFyZ3VtZW50
IGxvY2FscyBsaXZlIHJpZ2h0IG5vdy4gVGhpcyBpcyBtb3N0bHkgdXNlZnVsIGlmCisgICAgLy8g
R2V0IGEgQml0VmVjdG9yIG9mIGFsbCBvZiB0aGUgbG9jYWxzIGFuZCB0bXBzIGxpdmUgcmlnaHQg
bm93LiBUaGlzIGlzIG1vc3RseSB1c2VmdWwgaWYKICAgICAvLyB5b3Ugd2FudCB0byBjb21wYXJl
IHR3byBzZXRzIG9mIGxpdmUgbG9jYWxzIGZyb20gdHdvIGRpZmZlcmVudCBDb2RlT3JpZ2lucy4K
LSAgICBCaXRWZWN0b3IgbG9jYWxzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbik7CisgICAgQml0
VmVjdG9yIGxvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luKTsKIAogICAgIExp
dmVuZXNzQ2FsY3VsYXRpb25Qb2ludCBhcHByb3ByaWF0ZUxpdmVuZXNzQ2FsY3VsYXRpb25Qb2lu
dChDb2RlT3JpZ2luIG9yaWdpbiwgYm9vbCBpc0NhbGxlck9yaWdpbikKICAgICB7CkBAIC05Mzgs
MTIgKzk0NiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBMaXZlbmVzc0NhbGN1bGF0aW9u
UG9pbnQ6OkJlZm9yZVVzZTsKICAgICB9CiAgICAgCi0gICAgLy8gVGVsbHMgeW91IGFsbCBvZiB0
aGUgYXJndW1lbnRzIGFuZCBsb2NhbHMgbGl2ZSBhdCB0aGUgZ2l2ZW4gQ29kZU9yaWdpbi4gVGhp
cyBpcyBhIHNtYWxsCi0gICAgLy8gZXh0ZW5zaW9uIHRvIGZvckFsbExvY2Fsc0xpdmVJbkJ5dGVj
b2RlKCksIHNpbmNlIGFsbCBhcmd1bWVudHMgYXJlIGFsd2F5cyBwcmVzdW1lZCBsaXZlLgorICAg
IC8vIFRlbGxzIHlvdSBhbGwgb2YgdGhlIG9wZXJhbmRzIGxpdmUgYXQgdGhlIGdpdmVuIENvZGVP
cmlnaW4uIFRoaXMgaXMgYSBzbWFsbAorICAgIC8vIGV4dGVuc2lvbiB0byBmb3JBbGxMb2NhbHNP
clRtcHNMaXZlSW5CeXRlY29kZSgpLCBzaW5jZSBhbGwgYXJndW1lbnRzIGFyZSBhbHdheXMgcHJl
c3VtZWQgbGl2ZS4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQgZm9y
QWxsTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKQogICAgIHsKLSAgICAgICAgZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoY29kZU9y
aWdpbiwgZnVuY3Rvcik7CisgICAgICAgIGZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29k
ZShjb2RlT3JpZ2luLCBmdW5jdG9yKTsKICAgICAgICAgCiAgICAgICAgIC8vIFJlcG9ydCBhbGwg
YXJndW1lbnRzIGFzIGJlaW5nIGxpdmUuCiAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQg
PSBibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50
LS07KQpAQCAtMTExNCw2ICsxMTIyLDcgQEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxC
YWNrd2FyZHNDRkc+IG1fYmFja3dhcmRzQ0ZHOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNrd2Fy
ZHNEb21pbmF0b3JzPiBtX2JhY2t3YXJkc0RvbWluYXRvcnM7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzPiBtX2NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lz
OworICAgIHVuc2lnbmVkIG1fdG1wczsKICAgICB1bnNpZ25lZCBtX2xvY2FsVmFyczsKICAgICB1
bnNpZ25lZCBtX25leHRNYWNoaW5lTG9jYWw7CiAgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJTbG90
czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3Ry
YWN0U3RhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJh
Y3RTdGF0ZS5jcHAKaW5kZXggOTlhZWZmY2RjMDVhMTFjNDViMDU3NDEyNTBmNGQyYWViNGUyMjhj
ZC4uMjAyZDIyNTA1M2ZhOWRmYmU1YzIzYzY0YmNmOGJlMzg0ZTNlNzY1NCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAK
QEAgLTQ1LDggKzQ1LDggQEAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsK
IEluUGxhY2VBYnN0cmFjdFN0YXRlOjpJblBsYWNlQWJzdHJhY3RTdGF0ZShHcmFwaCYgZ3JhcGgp
CiAgICAgOiBtX2dyYXBoKGdyYXBoKQogICAgICwgbV9hYnN0cmFjdFZhbHVlcygqZ3JhcGgubV9h
YnN0cmFjdFZhbHVlc0NhY2hlKQotICAgICwgbV92YXJpYWJsZXMobV9ncmFwaC5tX2NvZGVCbG9j
ay0+bnVtUGFyYW1ldGVycygpLCBncmFwaC5tX2xvY2FsVmFycykKLSAgICAsIG1fYmxvY2soMCkK
KyAgICAsIG1fdmFyaWFibGVzKE9wZXJhbmRzTGlrZSwgZ3JhcGguYmxvY2soMCktPnZhcmlhYmxl
c0F0SGVhZCkKKyAgICAsIG1fYmxvY2sobnVsbHB0cikKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCmluZGV4IGJmNWVh
ZDE4ZWMxNjQ3ZWUxNjc2Njg4MzU3NDAxZmE3ZmVjNzEyOTkuLjE4NjVlNmExZWZmYzNkYWFlZmU1
ODRjYTg2MmM0OWJjMzY4NTg1MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgKQEAgLTE2NywxMyArMTY3LDExIEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIGZhc3RGb3J3YXJkKG1fdmFyaWFibGVzW2luZGV4XSk7CiAgICAg
fQogCi0gICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChpbnQgb3BlcmFuZCkKKyAgICBBYnN0cmFj
dFZhbHVlJiBvcGVyYW5kKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJldHVybiB2
YXJpYWJsZUF0KG1fdmFyaWFibGVzLm9wZXJhbmRJbmRleChvcGVyYW5kKSk7CiAgICAgfQogICAg
IAotICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsg
cmV0dXJuIHRoaXMtPm9wZXJhbmQob3BlcmFuZC5vZmZzZXQoKSk7IH0KLSAgICAKICAgICBBYnN0
cmFjdFZhbHVlJiBsb2NhbChzaXplX3QgaW5kZXgpCiAgICAgewogICAgICAgICByZXR1cm4gdmFy
aWFibGVBdChtX3ZhcmlhYmxlcy5sb2NhbEluZGV4KGluZGV4KSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCmluZGV4IDcwZWVmODg2YjRhOGZlMjk0M2Y0
NmJhZTc2ZWM2YjYzNzBlNDUyZDUuLmM1NTQ0YmJjNWM5ODA1NjY5ZjllN2Y2ZmY4MGI5YWMxOTZm
NGRmMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
CkBAIC04NSw4ICs4NSw2IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0cygpCiAgICAg
ICAgIH0KICAgICB9CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBvc3JFeGl0VGh1bmsgPSB2bSgpLmdldENUSVN0dWIob3NyRXhpdFRodW5rR2VuZXJhdG9y
KTsKLSAgICBhdXRvIG9zckV4aXRUaHVua0xhYmVsID0gQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1
bmtQdHJUYWc+KG9zckV4aXRUaHVuay5jb2RlKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2ppdENvZGUtPm9zckV4aXQuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgT1NSRXhpdENv
bXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZXhpdENvbXBpbGF0aW9uSW5mb1tpXTsKICAgICAgICAg
SnVtcExpc3QmIGZhaWx1cmVKdW1wcyA9IGluZm8ubV9mYWlsdXJlSnVtcHM7CkBAIC05NywxMyAr
OTUsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoKQogCiAgICAgICAgIGppdEFz
c2VydEhhc1ZhbGlkQ2FsbEZyYW1lKCk7CiAgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGkp
LCAmdm0oKS5vc3JFeGl0SW5kZXgpOwotICAgICAgICBpZiAoT3B0aW9uczo6dXNlUHJvYmVPU1JF
eGl0KCkpIHsKLSAgICAgICAgICAgIEp1bXAgdGFyZ2V0ID0ganVtcCgpOwotICAgICAgICAgICAg
YWRkTGlua1Rhc2soW3RhcmdldCwgb3NyRXhpdFRodW5rTGFiZWxdIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHRhcmdldCwgb3NyRXhp
dFRodW5rTGFiZWwpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgaW5mby5tX3BhdGNoYWJsZUp1bXAgPSBwYXRjaGFibGVKdW1wKCk7CisgICAgICAgIGluZm8u
bV9wYXRjaGFibGVKdW1wID0gcGF0Y2hhYmxlSnVtcCgpOwogICAgIH0KIH0KIApAQCAtNTk1LDEx
ICs1ODcsMTIgQEAgdm9pZCBKSVRDb21waWxlcjo6bm90aWNlT1NSRW50cnkoQmFzaWNCbG9jayYg
YmFzaWNCbG9jaywgSklUQ29tcGlsZXI6OkxhYmVsIGJsb2MKICAgICAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwoKSAhPSB2YXJpYWJsZS0+bWFjaGluZUxvY2Fs
KCkpIHsKKworICAgICAgICAgICAgQVNTRVJUKCF2YXJpYWJsZS0+b3BlcmFuZCgpLmlzVG1wKCkp
OworICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkg
IT0gdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSB7CiAgICAgICAgICAgICAgICAgZW50cnktPm1f
cmVzaHVmZmxpbmdzLmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAgT1NSRW50cnlSZXNodWZm
bGluZygKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgp
LCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhcmlhYmxlLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCksIHZh
cmlhYmxlLT5tYWNoaW5lTG9jYWwoKS5vZmZzZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCmlu
ZGV4IGQxYmQ3ZGE5ZGZmZGMzNmMyNjBlNjM1Y2I2MDBhOWIyZjE5MTlkMzUuLjQ4ODA4NzRjMjg1
YWI3ZDQ0N2ViODkzYTZlOGI0YmJmMDEwNzMxZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmgKQEAgLTEzNSw3ICsxMzUsNyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGVtaXRTdG9yZUNhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSkKICAgICB7
Ci0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlLmJpdHMoKSksIHRhZ0Zvcihz
dGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKSkpOworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZS5i
aXRzKCkpLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
KTsKICAgICB9CiAKICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0
IGFuIGV4Y2VwdGlvbiBjaGVjay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3Bw
CmluZGV4IDQyZjY4YWRhMzI0NzhhMTE3MWNlYWQwZjkzZTA4YWMyNWNhNjMxMzQuLjVjMzVlNTM1
ZTVkZDY2MWQzMWRkNTEzMGQ3YzEyYmFjYmFkYjJjMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNl
cnZhdGlvblBoYXNlLmNwcApAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIAotICAgIGJvb2wgaXNWYWxpZEZsdXNoTG9jYXRpb24oQmFzaWNCbG9j
ayogc3RhcnRpbmdCbG9jaywgdW5zaWduZWQgaW5kZXgsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgIGJvb2wgaXNWYWxpZEZsdXNoTG9jYXRpb24oQmFzaWNCbG9jayogc3RhcnRpbmdCbG9j
aywgdW5zaWduZWQgaW5kZXgsIE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIC8vIFRo
aXMgY29kZSBpcyBub3QgbWVhbnQgdG8gYmUgZmFzdC4gV2UganVzdCB1c2UgaXQgZm9yIGFzc2Vy
dGlvbnMuIElmIHdlIGdvdCBsaXZlbmVzcyB3cm9uZywKICAgICAgICAgLy8gdGhpcyBmdW5jdGlv
biB3b3VsZCByZXR1cm4gZmFsc2UgZm9yIGEgRmx1c2ggdGhhdCB3ZSBpbnNlcnQuCkBAIC04MSw3
ICs4MSw3IEBAIHB1YmxpYzoKICAgICAgICAgYXV0byBmbHVzaElzRGVmaW5pdGVseUludmFsaWQg
PSBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbmRleCkgewogICAgICAgICAgICAg
Ym9vbCBhbGxHb29kID0gZmFsc2U7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbmRl
eDsgaS0tOyApIHsKLSAgICAgICAgICAgICAgICBpZiAoYmxvY2stPmF0KGkpLT5hY2Nlc3Nlc1N0
YWNrKG1fZ3JhcGgpICYmIGJsb2NrLT5hdChpKS0+bG9jYWwoKSA9PSBvcGVyYW5kKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGJsb2NrLT5hdChpKS0+YWNjZXNzZXNTdGFjayhtX2dyYXBoKSAmJiBi
bG9jay0+YXQoaSktPm9wZXJhbmQoKSA9PSBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAg
IGFsbEdvb2QgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CkBAIC0xMTUsOCArMTE1LDcgQEAgcHVibGljOgogICAgIHZvaWQgaGFuZGxlQmxvY2tG
b3JUcnlDYXRjaChCYXNpY0Jsb2NrKiBibG9jaywgSW5zZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQp
CiAgICAgewogICAgICAgICBIYW5kbGVySW5mbyogY3VycmVudEV4Y2VwdGlvbkhhbmRsZXIgPSBu
dWxscHRyOwotICAgICAgICBGYXN0Qml0VmVjdG9yIGxpdmVBdENhdGNoSGVhZDsKLSAgICAgICAg
bGl2ZUF0Q2F0Y2hIZWFkLnJlc2l6ZShtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdFRhaWwu
bnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIE9wZXJhbmRzPGJvb2w+IGxpdmVBdENhdGNoSGVh
ZCgwLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSwg
bV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mVG1wcygpKTsKIAogICAg
ICAgICBIYW5kbGVySW5mbyogY2FjaGVkSGFuZGxlclJlc3VsdDsKICAgICAgICAgQ29kZU9yaWdp
biBjYWNoZWRDb2RlT3JpZ2luOwpAQCAtMTMzLDExICsxMzIsMTEgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gb3JpZ2luLmlubGlu
ZUNhbGxGcmFtZSgpOwogICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9n
cmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAg
ICAgIGlmIChIYW5kbGVySW5mbyogaGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVj
b2RlSW5kZXgoYnl0ZWNvZGVJbmRleFRvQ2hlY2spKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxp
dmVBdENhdGNoSGVhZC5jbGVhckFsbCgpOworICAgICAgICAgICAgICAgICAgICBsaXZlQXRDYXRj
aEhlYWQuZmlsbChmYWxzZSk7CiAKICAgICAgICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBj
YXRjaEJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KGhhbmRsZXItPnRhcmdldCk7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGguZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoQ29kZU9y
aWdpbihjYXRjaEJ5dGVjb2RlSW5kZXgsIGlubGluZUNhbGxGcmFtZSksIFsmXSAoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpdmVBdENhdGNoSGVh
ZFtvcGVyYW5kLnRvTG9jYWwoKV0gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LmZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luKGNhdGNoQnl0ZWNv
ZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lKSwgWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGxpdmVBdENhdGNoSGVhZC5vcGVyYW5kKG9wZXJhbmQpID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgICAgICAgICAgY2FjaGVk
SGFuZGxlclJlc3VsdCA9IGhhbmRsZXI7CkBAIC0xNTYsMTIgKzE1NSwxMiBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICByZXR1cm4gY2FjaGVkSGFuZGxlclJlc3VsdDsKICAgICAgICAgfTsKIAotICAg
ICAgICBPcGVyYW5kczxWYXJpYWJsZUFjY2Vzc0RhdGEqPiBjdXJyZW50QmxvY2tBY2Nlc3NEYXRh
KGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKSwgYmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpLCBudWxscHRyKTsKKyAgICAgICAgT3BlcmFuZHM8
VmFyaWFibGVBY2Nlc3NEYXRhKj4gY3VycmVudEJsb2NrQWNjZXNzRGF0YShPcGVyYW5kc0xpa2Us
IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwsIG51bGxwdHIpOwogCiAgICAgICAgIGF1dG8gZmx1c2hF
dmVyeXRoaW5nID0gWyZdIChOb2RlT3JpZ2luIG9yaWdpbiwgdW5zaWduZWQgaW5kZXgpIHsKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGN1cnJlbnRFeGNlcHRpb25IYW5kbGVyKTsKLSAgICAg
ICAgICAgIGF1dG8gZmx1c2ggPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKChvcGVyYW5kLmlzTG9jYWwoKSAmJiBsaXZlQXRDYXRjaEhlYWRbb3Bl
cmFuZC50b0xvY2FsKCldKSB8fCBvcGVyYW5kLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAg
YXV0byBmbHVzaCA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgaWYg
KG9wZXJhbmQuaXNBcmd1bWVudCgpIHx8IGxpdmVBdENhdGNoSGVhZC5vcGVyYW5kKG9wZXJhbmQp
KSB7CiAKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlzVmFsaWRGbHVzaExvY2F0aW9uKGJs
b2NrLCBpbmRleCwgb3BlcmFuZCkpOwogCkBAIC0xNzgsNiArMTc3LDggQEAgcHVibGljOgogCiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gMDsgbG9jYWwgPCBibG9jay0+dmFyaWFi
bGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7IGxvY2FsKyspCiAgICAgICAgICAgICAgICAgZmx1
c2godmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobG9jYWwpKTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgdG1wID0gMDsgdG1wIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZlRtcHMo
KTsgKyt0bXApCisgICAgICAgICAgICAgICAgZmx1c2goT3BlcmFuZDo6dG1wKHRtcCkpOwogICAg
ICAgICAgICAgZmx1c2goVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zm
c2V0KCkpKTsKICAgICAgICAgfTsKIApAQCAtMTkyLDkgKzE5Myw4IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGN1cnJlbnRFeGNlcHRpb25IYW5kbGVyICYmIChu
b2RlLT5vcCgpID09IFNldExvY2FsIHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnREZWZpbml0
ZWx5IHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnRNYXliZSkpIHsKLSAgICAgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG5vZGUtPmxvY2FsKCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKChvcGVyYW5kLmlzTG9jYWwoKSAmJiBsaXZlQXRDYXRjaEhlYWRbb3BlcmFuZC50b0xv
Y2FsKCldKSB8fCBvcGVyYW5kLmlzQXJndW1lbnQoKSkgewotCisgICAgICAgICAgICAgICAgT3Bl
cmFuZCBvcGVyYW5kID0gbm9kZS0+b3BlcmFuZCgpOworICAgICAgICAgICAgICAgIGlmIChvcGVy
YW5kLmlzQXJndW1lbnQoKSB8fCBsaXZlQXRDYXRjaEhlYWQub3BlcmFuZChvcGVyYW5kKSkgewog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXNWYWxpZEZsdXNoTG9jYXRpb24oYmxvY2ssIG5v
ZGVJbmRleCwgb3BlcmFuZCkpOwogCiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5k
KG9wZXJhbmQpOwpAQCAtMjA3LDcgKzIwNyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgaWYgKG5vZGUtPmFjY2Vzc2VzU3RhY2sobV9ncmFwaCkpCi0gICAgICAgICAg
ICAgICAgY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgY3VycmVudEJsb2NrQWNj
ZXNzRGF0YS5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChjdXJyZW50RXhjZXB0aW9uSGFuZGxlcikg
ewpAQCAtMjE2LDcgKzIxNiw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQorICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRhKE9w
ZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc0NvbnN0YW50
KCkpOwogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TW92SGludFJlbW92YWxQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01v
dkhpbnRSZW1vdmFsUGhhc2UuY3BwCmluZGV4IDczYTNkNzViNzYwYjUyYjk2NzYzNzEzM2Q2YTBm
ZWZiMDBlYmVkODcuLmZmZjk2YmZjZjYyOWViNGQwNTJlN2IxNDI3YjJiNjdiMDU0YzFhMDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFz
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBo
YXNlLmNwcApAQCAtODUsNyArODUsNyBAQCBwcml2YXRlOgogICAgICAgICBtX3N0YXRlLmZpbGwo
RXBvY2goKSk7CiAgICAgICAgIG1fZ3JhcGguZm9yQWxsTGl2ZUluQnl0ZWNvZGUoCiAgICAgICAg
ICAgICBibG9jay0+dGVybWluYWwoKS0+b3JpZ2luLmZvckV4aXQsCi0gICAgICAgICAgICBbJl0g
KFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAgICAgICAgICAgIFsmXSAoT3BlcmFuZCByZWcpIHsK
ICAgICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQocmVnKSA9IGN1cnJlbnRFcG9jaDsKICAg
ICAgICAgICAgIH0pOwogICAgICAgICAKQEAgLTk5LDcgKzk5LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gTW92SGludCkgewotICAgICAgICAgICAgICAg
IEVwb2NoIGxvY2FsRXBvY2ggPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgp
KTsKKyAgICAgICAgICAgICAgICBFcG9jaCBsb2NhbEVwb2NoID0gbV9zdGF0ZS5vcGVyYW5kKG5v
ZGUtPnVubGlua2VkT3BlcmFuZCgpKTsKICAgICAgICAgICAgICAgICBpZiAoREZHTW92SGludFJl
bW92YWxQaGFzZUludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICAgQXQgIiwgbm9kZSwgIjogY3VycmVudCA9ICIsIGN1cnJlbnRFcG9jaCwgIiwgbG9jYWwg
PSAiLCBsb2NhbEVwb2NoLCAiXG4iKTsKICAgICAgICAgICAgICAgICBpZiAoIWxvY2FsRXBvY2gg
fHwgbG9jYWxFcG9jaCA9PSBjdXJyZW50RXBvY2gpIHsKQEAgLTEwNyw3ICsxMDcsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IEVkZ2UoKTsKICAgICAg
ICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBFcG9j
aCgpOworICAgICAgICAgICAgICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJh
bmQoKSkgPSBFcG9jaCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAobWF5RXhpdChtX2dyYXBoLCBub2RlKSAhPSBEb2VzTm90RXhpdCkKQEAgLTExNiwxNSAr
MTE2LDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobm9kZUluZGV4KSB7CiAgICAgICAg
ICAgICAgICAgZm9yQWxsS2lsbGVkT3BlcmFuZHMoCiAgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGgsIGJsb2NrLT5hdChub2RlSW5kZXggLSAxKSwgbm9kZSwKLSAgICAgICAgICAgICAgICAgICAg
WyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIFsmXSAoT3Bl
cmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGZ1bmN0aW9u
IGlzIGEgYml0IHNsb3BweSAtIGl0IG1pZ2h0IGNsYWltIHRvIGtpbGwgYSBsb2NhbCBldmVuIGlm
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCdzIHN0aWxsIGxpdmUgYWZ0ZXIuIFdlIG5l
ZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IHRoYXQuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ISFtX3N0YXRlLm9wZXJhbmQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIW1f
c3RhdGUub3BlcmFuZChvcGVyYW5kKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChERkdNb3ZIaW50UmVtb3ZhbFBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxlZCBvcGVyYW5kIGF0ICIsIG5vZGUsICI6
ICIsIHJlZywgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQo
cmVnKSA9IGN1cnJlbnRFcG9jaDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICAgS2lsbGVkIG9wZXJhbmQgYXQgIiwgbm9kZSwgIjogIiwgb3BlcmFuZCwgIlxuIik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQob3BlcmFuZCkgPSBjdXJyZW50
RXBvY2g7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfQogICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCmluZGV4IDRiZmQzZTVhNTIxMDA1MTFhOWU3
MjMwODM0NWJkYjljMGEwNmZiNzYuLjUxN2FmMTAwM2FmY2U2ZDM1ZjcxNDVkYmI2OTUxZjE4Y2My
MjNiNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCkBAIC0yNTEsMTMgKzI1MSwx
MyBAQCBzdHJ1Y3QgU3RhY2tBY2Nlc3NEYXRhIHsKICAgICB7CiAgICAgfQogICAgIAotICAgIFN0
YWNrQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEZsdXNoRm9ybWF0IGZvcm1hdCkK
LSAgICAgICAgOiBsb2NhbChsb2NhbCkKKyAgICBTdGFja0FjY2Vzc0RhdGEoT3BlcmFuZCBvcGVy
YW5kLCBGbHVzaEZvcm1hdCBmb3JtYXQpCisgICAgICAgIDogb3BlcmFuZChvcGVyYW5kKQogICAg
ICAgICAsIGZvcm1hdChmb3JtYXQpCiAgICAgewogICAgIH0KICAgICAKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgbG9jYWw7CisgICAgT3BlcmFuZCBvcGVyYW5kOwogICAgIFZpcnR1YWxSZWdpc3RlciBt
YWNoaW5lTG9jYWw7CiAgICAgRmx1c2hGb3JtYXQgZm9ybWF0OwogICAgIApAQCAtOTE1LDYgKzkx
NSw3IEBAIHB1YmxpYzoKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgR2V0
TXlBcmd1bWVudEJ5VmFsOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91
bmRzOgorICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgICAgIGNhc2UgTG9hZFZhcmFy
Z3M6CiAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgQ2FsbFZhcmFy
Z3M6CkBAIC05MzYsOSArOTM3LDExIEBAIHB1YmxpYzoKICAgICAgICAgc3dpdGNoIChvcCgpKSB7
CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgICAgICBjYXNlIEdldE15QXJn
dW1lbnRCeVZhbE91dE9mQm91bmRzOgorICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CisgICAg
ICAgICAgICByZXR1cm4gY2hpbGQxKCk7CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAg
ICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAgICAgICByZXR1cm4gY2hpbGQxKCk7Cisg
ICAgICAgICAgICByZXR1cm4gY2hpbGQyKCk7CiAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CiAg
ICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIENvbnN0cnVjdFZh
cmFyZ3M6CkBAIC05ODYsOSArOTg5LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9vcElu
Zm8uYXM8VmFyaWFibGVBY2Nlc3NEYXRhKj4oKS0+ZmluZCgpOwogICAgIH0KICAgICAKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgbG9jYWwoKQorICAgIE9wZXJhbmQgb3BlcmFuZCgpCiAgICAgewotICAg
ICAgICByZXR1cm4gdmFyaWFibGVBY2Nlc3NEYXRhKCktPmxvY2FsKCk7CisgICAgICAgIHJldHVy
biB2YXJpYWJsZUFjY2Vzc0RhdGEoKS0+b3BlcmFuZCgpOwogICAgIH0KICAgICAKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgbWFjaGluZUxvY2FsKCkKQEAgLTk5Niw3ICs5OTksNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiB2YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bWFjaGluZUxvY2FsKCk7CiAgICAg
fQogICAgIAotICAgIGJvb2wgaGFzVW5saW5rZWRMb2NhbCgpCisgICAgYm9vbCBoYXNVbmxpbmtl
ZE9wZXJhbmQoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2Ug
RXh0cmFjdE9TUkVudHJ5TG9jYWw6CkBAIC0xMDA5LDEwICsxMDEyLDEwIEBAIHB1YmxpYzoKICAg
ICAgICAgfQogICAgIH0KICAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdW5saW5rZWRMb2NhbCgp
CisgICAgT3BlcmFuZCB1bmxpbmtlZE9wZXJhbmQoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGhh
c1VubGlua2VkTG9jYWwoKSk7Ci0gICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIobV9vcElu
Zm8uYXM8aW50MzJfdD4oKSk7CisgICAgICAgIEFTU0VSVChoYXNVbmxpbmtlZE9wZXJhbmQoKSk7
CisgICAgICAgIHJldHVybiBPcGVyYW5kOjpmcm9tQml0cyhtX29wSW5mby5hczx1aW50NjRfdD4o
KSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgaGFzU3RhY2tBY2Nlc3NEYXRhKCkKQEAgLTEzNjMs
NyArMTM2Niw3IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGhhc0xvYWRWYXJhcmdzRGF0YSgp
CiAgICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBMb2FkVmFyYXJncyB8fCBvcCgpID09IEZv
cndhcmRWYXJhcmdzOworICAgICAgICByZXR1cm4gb3AoKSA9PSBMb2FkVmFyYXJncyB8fCBvcCgp
ID09IEZvcndhcmRWYXJhcmdzIHx8IG9wKCkgPT0gVmFyYXJnc0xlbmd0aDsKICAgICB9CiAgICAg
CiAgICAgTG9hZFZhcmFyZ3NEYXRhKiBsb2FkVmFyYXJnc0RhdGEoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlVHlwZS5oCmluZGV4IGMwNDdjNmU3MTgyNTlhYTk1ZjVkMTNhYWE4NzBm
ODE3MTQ2MWNjZWIuLjdjNmQxYjJhZmM1YWZmNDc0NzY4MTAzYTVlMTNkM2EyMjI2Y2E2ZmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKQEAgLTc0LDYgKzc0LDcgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEdldExvY2FsLCBOb2Rl
UmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oU2V0TG9jYWwsIDApIFwK
ICAgICBcCisgICAgLyogVGhlc2UgYXJlIHVzZWQgaW4gU1NBIGZvcm0gdG8gcmVwcmVzZW50IHRv
IHRyYWNrICovXAogICAgIG1hY3JvKFB1dFN0YWNrLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAg
bWFjcm8oS2lsbFN0YWNrLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oR2V0U3RhY2ss
IE5vZGVSZXN1bHRKUykgXApAQCAtMjAyLDYgKzIwMyw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKICAgICBtYWNybyhHZXRCeVZhbFdpdGhUaGlzLCBOb2RlUmVzdWx0SlMgfCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oR2V0TXlBcmd1bWVudEJ5VmFsLCBOb2RlUmVz
dWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oR2V0TXlBcmd1bWVudEJ5VmFs
T3V0T2ZCb3VuZHMsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNy
byhWYXJhcmdzTGVuZ3RoLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEludDMyKSBcCiAg
ICAgbWFjcm8oTG9hZFZhcmFyZ3MsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhGb3J3
YXJkVmFyYXJncywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFB1dEJ5VmFsRGlyZWN0
LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhh
c2UuY3BwCmluZGV4IDc5YmM3OTY4MzExMzBjMDM3ZDU0NzBjMGU3OWQ1YjBkOTk1NjI2M2YuLmQw
YTk0MDZmMDIwMjMzNWZiMjA5NGZhYzliNDE3MTcyODUyOTU3MGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNp
c1BoYXNlLmNwcApAQCAtMzUsMTEgKzM1LDkgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLW5hbWVzcGFjZSBERkdPU1JBdmFpbGFi
aWxpdHlBbmFseXNpc1BoYXNlSW50ZXJuYWwgewotc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJv
c2UgPSBmYWxzZTsKLX0KIAogY2xhc3MgT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZSA6IHB1
YmxpYyBQaGFzZSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsK
IHB1YmxpYzoKICAgICBPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlKEdyYXBoJiBncmFwaCkK
ICAgICAgICAgOiBQaGFzZShncmFwaCwgIk9TUiBhdmFpbGFiaWxpdHkgYW5hbHlzaXMiKQpAQCAt
NzUsOCArNzMsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBkYXRhTG9nKCJMaXZlOiAiKTsKICAg
ICAgICAgICAgIG1fZ3JhcGguZm9yQWxsTGl2ZUluQnl0ZWNvZGUoCiAgICAgICAgICAgICAgICAg
YmxvY2stPmF0KDApLT5vcmlnaW4uZm9yRXhpdCwKLSAgICAgICAgICAgICAgICBbJl0gKFZpcnR1
YWxSZWdpc3RlciByZWcpIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhyZWcsICIgIik7
CisgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZyhvcGVyYW5kLCAiICIpOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgZGF0YUxvZ0xuKCIiKTsKICAgICAgICAgfTsKQEAgLTkxLDcgKzg5LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChERkdPU1JBdmFpbGFi
aWxpdHlBbmFseXNpc1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkJlZm9yZSBjaGFu
Z2luZyBCbG9jayAjIiwgYmxvY2stPmluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgZHVtcEF2
YWlsYWJpbGl0eShibG9jayk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTA2LDcgKzEwNCw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWwg
PSBjYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5OwogICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0
cnVlOwogCi0gICAgICAgICAgICAgICAgaWYgKERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhh
c2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiQWZ0ZXIgY2hhbmdpbmcgQmxvY2sgIyIsIGJs
b2NrLT5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIGR1bXBBdmFpbGFiaWxpdHkoYmxvY2sp
OwogICAgICAgICAgICAgICAgIH0KQEAgLTEyMCw3ICsxMTgsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IGJsb2NrLT5zdWNjZXNzb3Ioc3Vj
Y2Vzc29ySW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPnNzYS0+YXZhaWxh
YmlsaXR5QXRIZWFkLnBydW5lQnlMaXZlbmVzcygKICAgICAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGgsIHN1Y2Nlc3Nvci0+YXQoMCktPm9yaWdpbi5mb3JFeGl0KTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2VJbnRlcm5hbDo6dmVyYm9z
ZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZ0xuKCJBZnRlciBwcnVuaW5nIEJsb2NrICMiLCBzdWNjZXNzb3ItPmlu
ZGV4KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBBdmFpbGFiaWxpdHkoc3VjY2Vzc29y
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBCeXRlY29kZUxpdmVuZXNzQXRIZWFkKHN1
Y2Nlc3Nvcik7CkBAIC0yMDgsMjggKzIwNiwyOCBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5
Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUoTm9kZSogbm9kZSkKICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKICAgICBjYXNlIFB1dFN0YWNrOiB7CiAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0
YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xv
Y2Fscy5vcGVyYW5kKGRhdGEtPmxvY2FsKS5zZXRGbHVzaChkYXRhLT5mbHVzaGVkQXQoKSk7Cisg
ICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCkuc2V0
Rmx1c2goZGF0YS0+Zmx1c2hlZEF0KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgS2lsbFN0YWNrOiB7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxz
Lm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKS5zZXRGbHVzaChGbHVzaGVkQXQoQ29uZmxp
Y3RpbmdGbHVzaCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5v
ZGUtPnVubGlua2VkT3BlcmFuZCgpKS5zZXRGbHVzaChGbHVzaGVkQXQoQ29uZmxpY3RpbmdGbHVz
aCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAg
ICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAg
ICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPmxvY2FsKSA9IEF2YWls
YWJpbGl0eShub2RlLCBkYXRhLT5mbHVzaGVkQXQoKSk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5
Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCkgPSBBdmFpbGFiaWxpdHkobm9kZSwgZGF0
YS0+Zmx1c2hlZEF0KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIE1vdkhp
bnQ6IHsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxp
bmtlZExvY2FsKCkpLnNldE5vZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgbV9h
dmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkuc2V0
Tm9kZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAg
ICBjYXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3Bl
cmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpLnNldE5vZGVVbmF2YWlsYWJsZSgpOworICAgICAg
ICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgp
KS5zZXROb2RlVW5hdmFpbGFibGUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yNDIs
MTUgKzI0MCwxOCBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0
ZU5vZGUoTm9kZSogbm9kZSkKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9Ci0gICAg
ICAgIAorCisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAgIGJyZWFrOworICAgIH0K
KwogICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczogewogICAg
ICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAg
ICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5jb3VudCkgPQotICAg
ICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSW50MzIsIGRhdGEtPm1hY2hp
bmVDb3VudCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEt
PmNvdW50KSA9IEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEludDMyLCBkYXRhLT5tYWNo
aW5lQ291bnQpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTsp
IHsKLSAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoVmlydHVhbFJl
Z2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkpID0KLSAgICAgICAgICAgICAgICBBdmFp
bGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+
bWFjaGluZVN0YXJ0Lm9mZnNldCgpICsgaSkpKTsKKyAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5
Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+c3RhcnQgKyBpKSA9CisgICAgICAgICAgICAgICAgQXZh
aWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgZGF0YS0+bWFjaGluZVN0YXJ0ICsg
aSkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTI3MiwyMCArMjczLDIw
IEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZShOb2Rl
KiBub2RlKQogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAg
ICAgICAgICAgLy8gUmVjb3JkIGhvdyB0byByZWFkIGVhY2ggYXJndW1lbnQgYW5kIHRoZSBhcmd1
bWVudCBjb3VudC4KICAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBhcmd1bWVudENvdW50ID0KLSAg
ICAgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyk7CisgICAgICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQoUHJvbW90ZWRIZWFwTG9jYXRpb24oQXJndW1l
bnRDb3VudFBMb2MsIG5vZGUpLCBhcmd1bWVudENvdW50KTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkgewogICAgICAgICAg
ICAgQXZhaWxhYmlsaXR5IGNhbGxlZSA9IG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQo
Ci0gICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSk7CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKICAgICAgICAg
ICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQoUHJvbW90ZWRIZWFwTG9jYXRpb24oQXJndW1l
bnRzQ2FsbGVlUExvYywgbm9kZSksIGNhbGxlZSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOyBpIDwgaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7ICsraSkgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgaSA8IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
IC0gMSk7ICsraSkgewogICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGFyZ3VtZW50ID0gbV9hdmFp
bGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZCgKLSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChpKSk7CisgICAgICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBD
YWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQoUHJvbW90ZWRIZWFwTG9jYXRpb24oQXJndW1lbnRQ
TG9jLCBub2RlLCBpKSwgYXJndW1lbnQpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuY3BwCmluZGV4IDQ0OTczMDgzOWM5NDQ1MDcyNTcxYTViMGM3Yzk0
Yjg0M2U4OTBkYzcuLmVlNWY3ZjNkNjhlMmVhMGViMWRkZWYxMzlmZjkzOWI2YWQ4OWQ5MzkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCkBAIC0zMjIsNyArMzIy
LDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY28KICAgICAKICAgICAvLyA3KSBGaXggdGhlIGNh
bGwgZnJhbWUgdG8gaGF2ZSB0aGUgcmlnaHQgY29kZSBibG9jay4KICAgICAKLSAgICAqYml0d2lz
ZV9jYXN0PENvZGVCbG9jayoqPihwaXZvdCAtIDEgLSBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
ID0gY29kZUJsb2NrOworICAgICpiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKio+KHBpdm90IC0gKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayArIDEpKSA9IGNvZGVCbG9jazsKICAgICAKICAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZU9TUigpKQogICAgICAgICBkYXRhTG9nRigiICAgIE9TUiByZXR1cm5p
bmcgZGF0YSBidWZmZXIgJXAuXG4iLCBzY3JhdGNoKTsKQEAgLTM4MiwxMCArMzgyLDEwIEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBwcmVwYXJlQ2F0Y2hP
U1JFbnRyeShWTSYgdm0sIENhbGxGCiAKICAgICBhdXRvIGluc3RydWN0aW9uID0gYmFzZWxpbmVD
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpKTsK
ICAgICBBU1NFUlQoaW5zdHJ1Y3Rpb24tPmlzPE9wQ2F0Y2g+KCkpOwotICAgIFZhbHVlUHJvZmls
ZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IGluc3RydWN0aW9uLT5hczxPcENhdGNoPigpLm1l
dGFkYXRhKGJhc2VsaW5lQ29kZUJsb2NrKS5tX2J1ZmZlcjsKKyAgICBWYWx1ZVByb2ZpbGVBbmRW
aXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IGluc3RydWN0aW9uLT5hczxPcENhdGNoPigp
Lm1ldGFkYXRhKGJhc2VsaW5lQ29kZUJsb2NrKS5tX2J1ZmZlcjsKICAgICBKU1ZhbHVlKiBkYXRh
QnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4oZGZnQ29tbW9uLT5jYXRjaE9TUkVu
dHJ5QnVmZmVyLT5kYXRhQnVmZmVyKCkpOwogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKLSAgICBi
dWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7Cisg
ICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBw
cm9maWxlKSB7CiAgICAgICAgIGlmICghVmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5k
KS5pc0xvY2FsKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGRhdGFCdWZmZXJbaW5k
ZXhdID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKHByb2ZpbGUubV9vcGVyYW5kKS5qc1ZhbHVlKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRD
cmVhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlw
b2ludENyZWF0aW9uUGhhc2UuY3BwCmluZGV4IGRjNzZiY2JhZWQ0MWVlZTA2M2RmZGJlYTg0NTA2
NjU1M2QwY2I0ZDYuLjYwOTY4NjYzYjY0YzJiNjg1NGU0NjE2MWY5NDk5NDY1N2UxYWVmZDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0
aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlw
b2ludENyZWF0aW9uUGhhc2UuY3BwCkBAIC0xMDIsMTAgKzEwMiwxMCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gcHJldmlvdXNIZWFkLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgIGxvY2Fsc1tsb2NhbF0gPSBuZXdSb290LT5h
cHBlbmROb2RlKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsIHZhcmlhYmxlLT5wcmVkaWN0aW9u
KCksIEV4dHJhY3RPU1JFbnRyeUxvY2FsLCBvcmlnaW4sCi0gICAgICAgICAgICAgICAgT3BJbmZv
KHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgT3BJbmZvKHZh
cmlhYmxlLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkpKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgbmV3Um9vdC0+YXBwZW5kTm9kZSgKLSAgICAgICAgICAgICAgICBtX2dyYXBoLCBT
cGVjTm9uZSwgTW92SGludCwgb3JpZ2luLCBPcEluZm8odmFyaWFibGUtPmxvY2FsKCkub2Zmc2V0
KCkpLAorICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBNb3ZIaW50LCBvcmlnaW4s
IE9wSW5mbyh2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpKSwKICAgICAgICAg
ICAgICAgICBFZGdlKGxvY2Fsc1tsb2NhbF0pKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAppbmRleCAxYjhlMjc4ZTRkNWVlMTJkYTA5NmMwZTkw
MWE4Y2Y0OTNkZmIyZmM2Li4yMzlkZjUyYTgyOTJhMmIzNWNlNmY3NzI1NjhmZTdjYzljNmQzYTgz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKQEAgLTMwLDYgKzMw
LDcgQEAKIAogI2luY2x1ZGUgIkFzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkJ5dGVjb2Rl
VXNlRGVmLmgiCisjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNs
dWRlICJDbG9uZWRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUg
IkRGR01heUV4aXQuaCIKQEAgLTQ3LDg5NSArNDgsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAKLS8vIFByb2JlIGJhc2VkIE9TUiBFeGl0LgotCi11c2luZyBDUFVTdGF0
ZSA9IFByb2JlOjpDUFVTdGF0ZTsKLXVzaW5nIENvbnRleHQgPSBQcm9iZTo6Q29udGV4dDsKLXVz
aW5nIEZyYW1lID0gUHJvYmU6OkZyYW1lOwotCi1zdGF0aWMgdm9pZCByZWlmeUlubGluZWRDYWxs
RnJhbWVzKFByb2JlOjpDb250ZXh0JiwgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jaywgY29u
c3QgT1NSRXhpdEJhc2UmKTsKLXN0YXRpYyB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChQcm9i
ZTo6Q29udGV4dCYsIFZNJiwgQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
aywgT1NSRXhpdCYpOwotc3RhdGljIHZvaWQgcHJpbnRPU1JFeGl0KENvbnRleHQmLCB1aW50MzJf
dCBvc3JFeGl0SW5kZXgsIGNvbnN0IE9TUkV4aXQmKTsKLQotc3RhdGljIEpTVmFsdWUganNWYWx1
ZUZvcihDUFVTdGF0ZSYgY3B1LCBKU1ZhbHVlU291cmNlIHNvdXJjZSkKLXsKLSAgICBpZiAoc291
cmNlLmlzQWRkcmVzcygpKSB7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0OwotICAgICAgICBzdGQ6
Om1lbWNweSgmcmVzdWx0LCBjcHUuZ3ByPHVpbnQ4X3QqPihzb3VyY2UuYmFzZSgpKSArIHNvdXJj
ZS5vZmZzZXQoKSwgc2l6ZW9mKEpTVmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICB9Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKGNwdS5n
cHI8RW5jb2RlZEpTVmFsdWU+KHNvdXJjZS5ncHIoKSkpOwotI2Vsc2UKLSAgICBpZiAoc291cmNl
Lmhhc0tub3duVGFnKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlKHNvdXJjZS50YWcoKSwgY3B1
LmdwcjxpbnQzMl90Pihzb3VyY2UucGF5bG9hZEdQUigpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWUo
Y3B1LmdwcjxpbnQzMl90Pihzb3VyY2UudGFnR1BSKCkpLCBjcHUuZ3ByPGludDMyX3Q+KHNvdXJj
ZS5wYXlsb2FkR1BSKCkpKTsKLSNlbmRpZgotfQotCi0jaWYgTlVNQkVSX09GX0NBTExFRV9TQVZF
U19SRUdJU1RFUlMgPiAwCi0KLS8vIEJhc2VkIG9uIEFzc2VtYmx5SGVscGVyczo6ZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlc0ZvcigpLgotc3RhdGljIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRm9yKENv
bnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIEFTU0VSVChjb2Rl
QmxvY2spOwotCi0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVzID0g
Y29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udFJl
c3RvcmVSZWdpc3RlcnMgPSBSZWdpc3RlclNldChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMo
KSwgUmVnaXN0ZXJTZXQ6OmFsbEZQUnMoKSk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9
IGNhbGxlZVNhdmVzLT5zaXplKCk7Ci0KLSAgICBVQ1BVUmVnaXN0ZXIqIHBoeXNpY2FsU3RhY2tG
cmFtZSA9IGNvbnRleHQuZnA8VUNQVVJlZ2lzdGVyKj4oKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQg
ZW50cnkgPSBjYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250UmVzdG9yZVJlZ2lz
dGVycy5nZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIC8v
IFRoZSBjYWxsZWUgc2F2ZWQgdmFsdWVzIGNvbWUgZnJvbSB0aGUgb3JpZ2luYWwgc3RhY2ssIG5v
dCB0aGUgcmVjb3ZlcmVkIHN0YWNrLgotICAgICAgICAvLyBIZW5jZSwgd2UgcmVhZCB0aGUgdmFs
dWVzIGRpcmVjdGx5IGZyb20gdGhlIHBoeXNpY2FsIHN0YWNrIG1lbW9yeSBpbnN0ZWFkIG9mCi0g
ICAgICAgIC8vIGdvaW5nIHRocm91Z2ggY29udGV4dC5zdGFjaygpLgotICAgICAgICBBU1NFUlQo
IShlbnRyeS5vZmZzZXQoKSAlIHNpemVvZihVQ1BVUmVnaXN0ZXIpKSk7Ci0gICAgICAgIGNvbnRl
eHQuZ3ByKGVudHJ5LnJlZygpLmdwcigpKSA9IHBoeXNpY2FsU3RhY2tGcmFtZVtlbnRyeS5vZmZz
ZXQoKSAvIHNpemVvZihVQ1BVUmVnaXN0ZXIpXTsKLSAgICB9Ci19Ci0KLS8vIEJhc2VkIG9uIEFz
c2VtYmx5SGVscGVyczo6ZW1pdFNhdmVDYWxsZWVTYXZlc0ZvcigpLgotc3RhdGljIHZvaWQgc2F2
ZUNhbGxlZVNhdmVzRm9yKENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogY29kZUJsb2NrKQot
ewotICAgIGF1dG8mIHN0YWNrID0gY29udGV4dC5zdGFjaygpOwotICAgIEFTU0VSVChjb2RlQmxv
Y2spOwotCi0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVzID0gY29k
ZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udFNhdmVS
ZWdpc3RlcnMgPSBSZWdpc3RlclNldChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSwgUmVn
aXN0ZXJTZXQ6OmFsbEZQUnMoKSk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGNhbGxl
ZVNhdmVzLT5zaXplKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJD
b3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBjYWxsZWVTYXZl
cy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250U2F2ZVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkp
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHN0YWNrLnNldChjb250ZXh0LmZwKCks
IGVudHJ5Lm9mZnNldCgpLCBjb250ZXh0LmdwcjxVQ1BVUmVnaXN0ZXI+KGVudHJ5LnJlZygpLmdw
cigpKSk7Ci0gICAgfQotfQotCi0vLyBCYXNlZCBvbiBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVD
YWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigpLgotc3RhdGljIHZv
aWQgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENv
bnRleHQmIGNvbnRleHQpCi17Ci0gICAgVk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLQot
ICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBhbGxDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0Ojp2
bUNhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKLSAgICBSZWdpc3RlclNldCBkb250UmVzdG9y
ZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpOwotICAgIHVuc2lnbmVk
IHJlZ2lzdGVyQ291bnQgPSBhbGxDYWxsZWVTYXZlcy0+c2l6ZSgpOwotCi0gICAgVk1FbnRyeVJl
Y29yZCogZW50cnlSZWNvcmQgPSB2bUVudHJ5UmVjb3JkKHZtLnRvcEVudHJ5RnJhbWUpOwotICAg
IFVDUFVSZWdpc3RlciogY2FsbGVlU2F2ZUJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8VUNQVVJl
Z2lzdGVyKj4oZW50cnlSZWNvcmQtPmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXIpOwotCi0gICAg
Ly8gUmVzdG9yZSBhbGwgY2FsbGVlIHNhdmVzLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9
IGFsbENhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRSZXN0b3JlUmVnaXN0ZXJz
LmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgc2l6ZV90
IHVpbnRwdHJPZmZzZXQgPSBlbnRyeS5vZmZzZXQoKSAvIHNpemVvZihVQ1BVUmVnaXN0ZXIpOwot
ICAgICAgICBpZiAoZW50cnkucmVnKCkuaXNHUFIoKSkKLSAgICAgICAgICAgIGNvbnRleHQuZ3By
KGVudHJ5LnJlZygpLmdwcigpKSA9IGNhbGxlZVNhdmVCdWZmZXJbdWludHB0ck9mZnNldF07Ci0g
ICAgICAgIGVsc2UgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBjb250ZXh0LmZw
cihlbnRyeS5yZWcoKS5mcHIoKSkgPSBiaXR3aXNlX2Nhc3Q8ZG91YmxlPihjYWxsZWVTYXZlQnVm
ZmVyW3VpbnRwdHJPZmZzZXRdKTsKLSNlbHNlCi0gICAgICAgICAgICAvLyBGSVhNRTogPGh0dHBz
Oi8vd2Via2l0Lm9yZy9iLzE5MzI3NT4gc3VwcG9ydCBjYWxsZWUtc2F2ZWQgZmxvYXRpbmcgcG9p
bnQgcmVnaXN0ZXJzIG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzCi0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8v
IEJhc2VkIG9uIEFzc2VtYmx5SGVscGVyczo6Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcigpLgotc3RhdGljIHZvaWQgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihDb250ZXh0JiBjb250ZXh0KQotewotICAgIFZNJiB2bSA9
ICpjb250ZXh0LmFyZzxWTSo+KCk7Ci0gICAgYXV0byYgc3RhY2sgPSBjb250ZXh0LnN0YWNrKCk7
Ci0KLSAgICBWTUVudHJ5UmVjb3JkKiBlbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQodm0udG9w
RW50cnlGcmFtZSk7Ci0gICAgdm9pZCogY2FsbGVlU2F2ZUJ1ZmZlciA9IGVudHJ5UmVjb3JkLT5j
YWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyOwotCi0gICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFs
bENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygp
OwotICAgIFJlZ2lzdGVyU2V0IGRvbnRDb3B5UmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0YWNr
UmVnaXN0ZXJzKCk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGFsbENhbGxlZVNhdmVz
LT5zaXplKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsg
aSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBhbGxDYWxsZWVTYXZlcy0+
YXQoaSk7Ci0gICAgICAgIGlmIChkb250Q29weVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChlbnRyeS5yZWcoKS5pc0dQUigpKQot
ICAgICAgICAgICAgc3RhY2suc2V0KGNhbGxlZVNhdmVCdWZmZXIsIGVudHJ5Lm9mZnNldCgpLCBj
b250ZXh0LmdwcjxVQ1BVUmVnaXN0ZXI+KGVudHJ5LnJlZygpLmdwcigpKSk7Ci0gICAgICAgIGVs
c2UgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBzdGFjay5zZXQoY2FsbGVlU2F2
ZUJ1ZmZlciwgZW50cnkub2Zmc2V0KCksIGNvbnRleHQuZnByPFVDUFVSZWdpc3Rlcj4oZW50cnku
cmVnKCkuZnByKCkpKTsKLSNlbHNlCi0gICAgICAgICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Vi
a2l0Lm9yZy9iLzE5MzI3NT4gc3VwcG9ydCBjYWxsZWUtc2F2ZWQgZmxvYXRpbmcgcG9pbnQgcmVn
aXN0ZXJzIG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8vIEJhc2Vk
IG9uIEFzc2VtYmx5SGVscGVyczo6ZW1pdFNhdmVPckNvcHlDYWxsZWVTYXZlc0ZvcigpLgotc3Rh
dGljIHZvaWQgc2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKENvbnRleHQmIGNvbnRleHQsIENvZGVC
bG9jayogY29kZUJsb2NrLCBWaXJ0dWFsUmVnaXN0ZXIgb2Zmc2V0VmlydHVhbFJlZ2lzdGVyLCBi
b29sIHdhc0NhbGxlZFZpYVRhaWxDYWxsKQotewotICAgIEZyYW1lIGZyYW1lKGNvbnRleHQuZnAo
KSwgY29udGV4dC5zdGFjaygpKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrKTsKLQotICAgIGNvbnN0
IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlcyA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2
ZVJlZ2lzdGVycygpOwotICAgIFJlZ2lzdGVyU2V0IGRvbnRTYXZlUmVnaXN0ZXJzID0gUmVnaXN0
ZXJTZXQoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCksIFJlZ2lzdGVyU2V0OjphbGxGUFJz
KCkpOwotICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBjYWxsZWVTYXZlcy0+c2l6ZSgpOwot
Ci0gICAgUmVnaXN0ZXJTZXQgYmFzZWxpbmVDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpsbGlu
dEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVu
dHJ5ID0gY2FsbGVlU2F2ZXMtPmF0KGkpOwotICAgICAgICBpZiAoZG9udFNhdmVSZWdpc3RlcnMu
Z2V0KGVudHJ5LnJlZygpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHVpbnRw
dHJfdCBzYXZlZFJlZ2lzdGVyVmFsdWU7Ci0KLSAgICAgICAgaWYgKHdhc0NhbGxlZFZpYVRhaWxD
YWxsICYmIGJhc2VsaW5lQ2FsbGVlU2F2ZXMuZ2V0KGVudHJ5LnJlZygpKSkKLSAgICAgICAgICAg
IHNhdmVkUmVnaXN0ZXJWYWx1ZSA9IGZyYW1lLmdldDx1aW50cHRyX3Q+KGVudHJ5Lm9mZnNldCgp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2F2ZWRSZWdpc3RlclZhbHVlID0gY29udGV4
dC5ncHIoZW50cnkucmVnKCkuZ3ByKCkpOwotCi0gICAgICAgIGZyYW1lLnNldChvZmZzZXRWaXJ0
dWFsUmVnaXN0ZXIub2Zmc2V0SW5CeXRlcygpICsgZW50cnkub2Zmc2V0KCksIHNhdmVkUmVnaXN0
ZXJWYWx1ZSk7Ci0gICAgfQotfQotI2Vsc2UgLy8gbm90IE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNf
UkVHSVNURVJTID4gMAotCi1zdGF0aWMgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoQ29udGV4
dCYsIENvZGVCbG9jayopIHsgfQotc3RhdGljIHZvaWQgc2F2ZUNhbGxlZVNhdmVzRm9yKENvbnRl
eHQmLCBDb2RlQmxvY2sqKSB7IH0KLXN0YXRpYyB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21W
TUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihDb250ZXh0JikgeyB9Ci1zdGF0aWMgdm9pZCBj
b3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQmKSB7
IH0KLXN0YXRpYyB2b2lkIHNhdmVPckNvcHlDYWxsZWVTYXZlc0ZvcihDb250ZXh0JiwgQ29kZUJs
b2NrKiwgVmlydHVhbFJlZ2lzdGVyLCBib29sKSB7IH0KLQotI2VuZGlmIC8vIE5VTUJFUl9PRl9D
QUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAotCi1zdGF0aWMgSlNDZWxsKiBjcmVhdGVEaXJlY3RB
cmd1bWVudHNEdXJpbmdFeGl0KENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogY29kZUJsb2Nr
LCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgSlNGdW5jdGlvbiogY2FsbGVlLCBp
bnQzMl90IGFyZ3VtZW50Q291bnQpCi17Ci0gICAgVk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4o
KTsKLQotICAgIEFTU0VSVCh2bS5oZWFwLmlzRGVmZXJyZWQoKSk7Ci0KLSAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lKQotICAgICAgICBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGlu
ZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpOwotCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gYXJn
dW1lbnRDb3VudCAtIDE7Ci0gICAgdW5zaWduZWQgY2FwYWNpdHkgPSBzdGQ6Om1heChsZW5ndGgs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSAtIDEpKTsK
LSAgICBEaXJlY3RBcmd1bWVudHMqIHJlc3VsdCA9IERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlKAot
ICAgICAgICB2bSwgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZGlyZWN0QXJndW1lbnRzU3Ry
dWN0dXJlKCksIGxlbmd0aCwgY2FwYWNpdHkpOwotCi0gICAgcmVzdWx0LT5zZXRDYWxsZWUodm0s
IGNhbGxlZSk7Ci0KLSAgICB2b2lkKiBmcmFtZUJhc2UgPSBjb250ZXh0LmZwPFJlZ2lzdGVyKj4o
KSArIChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCk7
Ci0gICAgRnJhbWUgZnJhbWUoZnJhbWVCYXNlLCBjb250ZXh0LnN0YWNrKCkpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKLSAgICAgICAgcmVzdWx0LT5zZXRJbmRleFF1aWNr
bHkodm0sIGksIGZyYW1lLmFyZ3VtZW50KGkpKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LXN0YXRpYyBKU0NlbGwqIGNyZWF0ZUNsb25lZEFyZ3VtZW50c0R1cmluZ0V4aXQoQ29udGV4dCYg
Y29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIGludDMyX3QgYXJndW1lbnRDb3VudCkKLXsKLSAg
ICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0qPigpOwotCi0gICAgQVNTRVJUKHZtLmhlYXAuaXNE
ZWZlcnJlZCgpKTsKLQotICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIGNvZGVCbG9j
ayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7
Ci0KLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhcmd1bWVudENvdW50IC0gMTsKLSAgICBD
bG9uZWRBcmd1bWVudHMqIHJlc3VsdCA9IENsb25lZEFyZ3VtZW50czo6Y3JlYXRlRW1wdHkoCi0g
ICAgICAgIHZtLCBnbG9iYWxPYmplY3QtPmNsb25lZEFyZ3VtZW50c1N0cnVjdHVyZSgpLCBjYWxs
ZWUsIGxlbmd0aCk7Ci0KLSAgICB2b2lkKiBmcmFtZUJhc2UgPSBjb250ZXh0LmZwPFJlZ2lzdGVy
Kj4oKSArIChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDog
MCk7Ci0gICAgRnJhbWUgZnJhbWUoZnJhbWVCYXNlLCBjb250ZXh0LnN0YWNrKCkpOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJ
bmRleChnbG9iYWxPYmplY3QsIGksIGZyYW1lLmFyZ3VtZW50KGkpKTsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1zdGF0aWMgdm9pZCBlbWl0UmVzdG9yZUFyZ3VtZW50cyhDb250ZXh0JiBjb250
ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgREZHOjpKSVRDb2RlKiBkZmdKSVRDb2RlLCBjb25z
dCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMpCi17Ci0gICAgRnJhbWUgZnJhbWUo
Y29udGV4dC5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOwotCi0gICAgSGFzaE1hcDxNaW5pZmllZElE
LCBpbnQ+IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHM7IC8vIE1hcHMgcGhhbnRvbSBhcmd1bWVu
dHMgbm9kZSBJRCB0byBvcGVyYW5kLgotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXgg
PCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVy
eSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIGludCBvcGVyYW5kID0gb3Bl
cmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KTsKLQotICAgICAgICBpZiAocmVjb3ZlcnkudGVj
aG5pcXVlKCkgIT0gRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkCi0gICAgICAgICAg
ICAmJiByZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5vdENy
ZWF0ZWQpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBNaW5pZmllZElEIGlkID0g
cmVjb3Zlcnkubm9kZUlEKCk7Ci0gICAgICAgIGF1dG8gaXRlciA9IGFscmVhZHlBbGxvY2F0ZWRB
cmd1bWVudHMuZmluZChpZCk7Ci0gICAgICAgIGlmIChpdGVyICE9IGFscmVhZHlBbGxvY2F0ZWRB
cmd1bWVudHMuZW5kKCkpIHsKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwg
ZnJhbWUub3BlcmFuZChpdGVyLT52YWx1ZSkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9Ci0gICAg
ICAgICAgICBkZmdKSVRDb2RlLT5taW5pZmllZERGRy5hdChpZCktPmlubGluZUNhbGxGcmFtZSgp
OwotCi0gICAgICAgIGludCBzdGFja09mZnNldDsKLSAgICAgICAgaWYgKGlubGluZUNhbGxGcmFt
ZSkKLSAgICAgICAgICAgIHN0YWNrT2Zmc2V0ID0gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RhY2tPZmZzZXQgPSAwOwotCi0gICAgICAg
IEpTRnVuY3Rpb24qIGNhbGxlZTsKLSAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5s
aW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgY2FsbGVlID0ganNDYXN0
PEpTRnVuY3Rpb24qPihmcmFtZS5vcGVyYW5kKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKS5hc0NlbGwoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxlZSA9IGpz
Q2FzdDxKU0Z1bmN0aW9uKj4oaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeS5jb25zdGFu
dCgpLmFzQ2VsbCgpKTsKLQotICAgICAgICBpbnQzMl90IGFyZ3VtZW50Q291bnQ7Ci0gICAgICAg
IGlmICghaW5saW5lQ2FsbEZyYW1lIHx8IGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCi0g
ICAgICAgICAgICBhcmd1bWVudENvdW50ID0gZnJhbWUub3BlcmFuZDxpbnQzMl90PihzdGFja09m
ZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBQYXlsb2Fk
T2Zmc2V0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IGlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7Ci0KLSAgICAgICAgSlNDZWxs
KiBhcmd1bWVudHNPYmplY3Q7Ci0gICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkp
IHsKLSAgICAgICAgY2FzZSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAg
ICAgICAgICBhcmd1bWVudHNPYmplY3QgPSBjcmVhdGVEaXJlY3RBcmd1bWVudHNEdXJpbmdFeGl0
KGNvbnRleHQsIGNvZGVCbG9jaywgaW5saW5lQ2FsbEZyYW1lLCBjYWxsZWUsIGFyZ3VtZW50Q291
bnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2xvbmVkQXJndW1lbnRzVGhh
dFdlcmVOb3RDcmVhdGVkOgotICAgICAgICAgICAgYXJndW1lbnRzT2JqZWN0ID0gY3JlYXRlQ2xv
bmVkQXJndW1lbnRzRHVyaW5nRXhpdChjb250ZXh0LCBjb2RlQmxvY2ssIGlubGluZUNhbGxGcmFt
ZSwgY2FsbGVlLCBhcmd1bWVudENvdW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFu
ZCwgSlNWYWx1ZShhcmd1bWVudHNPYmplY3QpKTsKLQotICAgICAgICBhbHJlYWR5QWxsb2NhdGVk
QXJndW1lbnRzLmFkZChpZCwgb3BlcmFuZCk7Ci0gICAgfQotfQotCi0vLyBUaGUgZm9sbG93aW5n
IGlzIGEgbGlzdCBvZiBleHRyYSBpbml0aWFsaXphdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGRvbmUg
aW4gb3JkZXIKLS8vIG9mIG1vc3QgbGlrZWx5IG5lZWRlZCAobG93ZXIgZW51bSB2YWx1ZSkgdG8g
bGVhc3QgbGlrZWx5IG5lZWRlZCAoaGlnaGVyIGVudW0gdmFsdWUpLgotLy8gRWFjaCBsZXZlbCBp
bml0aWFsaXphdGlvbiBpbmNsdWRlcyB0aGUgcHJldmlvdXMgbG93ZXIgZW51bSB2YWx1ZSAoc2Vl
IHVzZSBvZiB0aGUKLS8vIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCB2YWx1ZSBiZWxvdykuCi1l
bnVtIGNsYXNzIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCB7Ci0gICAgTm9uZSwKLSAgICBTcGVj
dWxhdGlvblJlY292ZXJ5LAotICAgIFZhbHVlUHJvZmlsZVVwZGF0ZSwKLSAgICBBcnJheVByb2Zp
bGVVcGRhdGUsCi0gICAgT3RoZXIKLX07Ci0KLXZvaWQgT1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQo
Q29udGV4dCYgY29udGV4dCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0qPigpOwot
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gY29udGV4dC5mcDxDYWxsRnJhbWUqPigpOwotICAgIEFTU0VSVCgmY2Fs
bEZyYW1lLT5kZXByZWNhdGVkVk0oKSA9PSAmdm0pOwotICAgIGF1dG8mIGNwdSA9IGNvbnRleHQu
Y3B1OwotCi0gICAgaWYgKHZhbGlkYXRlREZHRG9lc0dDKSB7Ci0gICAgICAgIC8vIFdlJ3JlIGFi
b3V0IHRvIGV4aXQgb3B0aW1pemVkIGNvZGUuIFNvLCB0aGVyZSdzIG5vIGxvbmdlciBhbnkgb3B0
aW1pemVkCi0gICAgICAgIC8vIGNvZGUgcnVubmluZyB0aGF0IGV4cGVjdHMgbm8gR0MuCi0gICAg
ICAgIHZtLmhlYXAuc2V0RXhwZWN0RG9lc0dDKHRydWUpOwotICAgIH0KLQotICAgIGlmICh2bS5j
YWxsRnJhbWVGb3JDYXRjaCkgewotICAgICAgICBjYWxsRnJhbWUgPSB2bS5jYWxsRnJhbWVGb3JD
YXRjaDsKLSAgICAgICAgY29udGV4dC5mcCgpID0gY2FsbEZyYW1lOwotICAgIH0KLQotICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBBU1NFUlQo
Y29kZUJsb2NrKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6
REZHSklUKTsKLQotICAgIC8vIEl0J3Mgc29ydCBvZiBwcmVmZXJhYmxlIHRoYXQgd2UgZG9uJ3Qg
R0Mgd2hpbGUgaW4gaGVyZS4gQW55d2F5cywgZG9pbmcgc28gd291bGRuJ3QKLSAgICAvLyByZWFs
bHkgYmUgcHJvZml0YWJsZS4KLSAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7
Ci0KLSAgICB1aW50MzJfdCBleGl0SW5kZXggPSB2bS5vc3JFeGl0SW5kZXg7Ci0gICAgREZHOjpK
SVRDb2RlKiBkZmdKSVRDb2RlID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpOwotICAgIE9T
UkV4aXQmIGV4aXQgPSBkZmdKSVRDb2RlLT5vc3JFeGl0W2V4aXRJbmRleF07Ci0KLSAgICBBU1NF
UlQoIXZtLmNhbGxGcmFtZUZvckNhdGNoIHx8IGV4aXQubV9raW5kID09IEdlbmVyaWNVbndpbmQp
OwotICAgIEVYQ0VQVElPTl9BU1NFUlRfVU5VU0VEKHNjb3BlLCAhIXNjb3BlLmV4Y2VwdGlvbigp
IHx8ICFleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKTsKLQotICAgIGlmIChVTkxJS0VMWSghZXhp
dC5leGl0U3RhdGUpKSB7Ci0gICAgICAgIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCBleHRyYUlu
aXRpYWxpemF0aW9uTGV2ZWwgPSBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6Ok5vbmU7Ci0KLSAg
ICAgICAgLy8gV2Ugb25seSBuZWVkIHRvIGV4ZWN1dGUgdGhpcyBibG9jayBvbmNlIGZvciBlYWNo
IE9TUkV4aXQgcmVjb3JkLiBUaGUgY29tcHV0ZWQKLSAgICAgICAgLy8gcmVzdWx0cyB3aWxsIGJl
IGNhY2hlZCBpbiB0aGUgT1NSRXhpdFN0YXRlIHJlY29yZCBmb3IgdXNlIG9mIHRoZSByZXN0IG9m
IHRoZQotICAgICAgICAvLyBleGl0IHJhbXAgY29kZS4KLQotICAgICAgICBDb2RlQmxvY2sqIGJh
c2VsaW5lQ29kZUJsb2NrID0gY29kZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCk7Ci0gICAg
ICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShiYXNlbGluZUNvZGVCbG9jay0+aml0
VHlwZSgpKSk7Ci0KLSAgICAgICAgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkgPSBudWxs
cHRyOwotICAgICAgICBpZiAoZXhpdC5tX3JlY292ZXJ5SW5kZXggIT0gVUlOVF9NQVgpIHsKLSAg
ICAgICAgICAgIHJlY292ZXJ5ID0gJmRmZ0pJVENvZGUtPnNwZWN1bGF0aW9uUmVjb3ZlcnlbZXhp
dC5tX3JlY292ZXJ5SW5kZXhdOwotICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVs
ID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9u
TGV2ZWw6OlNwZWN1bGF0aW9uUmVjb3ZlcnkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFVO
TElLRUxZKGV4aXQubV9raW5kID09IEdlbmVyaWNVbndpbmQpKQotICAgICAgICAgICAgZXh0cmFJ
bml0aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBF
eHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6Ok90aGVyKTsKLQotICAgICAgICBBcnJheVByb2ZpbGUq
IGFycmF5UHJvZmlsZSA9IG51bGxwdHI7Ci0gICAgICAgIGlmICghIWV4aXQubV9qc1ZhbHVlU291
cmNlKSB7Ci0gICAgICAgICAgICBpZiAoZXhpdC5tX3ZhbHVlUHJvZmlsZSkKLSAgICAgICAgICAg
ICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0
aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6VmFsdWVQcm9maWxlVXBkYXRlKTsK
LSAgICAgICAgICAgIGlmIChleGl0Lm1fa2luZCA9PSBCYWRDYWNoZSB8fCBleGl0Lm1fa2luZCA9
PSBCYWRJbmRleGluZ1R5cGUpIHsKLSAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmln
aW4gPSBleGl0Lm1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlOwotICAgICAgICAgICAgICAgIENv
ZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFu
ZEJhc2VsaW5lQ29kZUJsb2NrKGNvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAg
ICAgICAgICAgICBhcnJheVByb2ZpbGUgPSBwcm9maWxlZENvZGVCbG9jay0+Z2V0QXJyYXlQcm9m
aWxlKGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoYXJy
YXlQcm9maWxlKQotICAgICAgICAgICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwg
PSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25M
ZXZlbDo6QXJyYXlQcm9maWxlVXBkYXRlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIGludDMyX3QgYWN0aXZlVGhyZXNob2xkID0gYmFzZWxpbmVDb2RlQmxvY2stPmFkanVz
dGVkQ291bnRlclZhbHVlKE9wdGlvbnM6OnRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2Fy
bVVwKCkpOwotICAgICAgICBkb3VibGUgYWRqdXN0ZWRUaHJlc2hvbGQgPSBhcHBseU1lbW9yeVVz
YWdlSGV1cmlzdGljc0FuZENvbnZlcnRUb0ludChhY3RpdmVUaHJlc2hvbGQsIGJhc2VsaW5lQ29k
ZUJsb2NrKTsKLSAgICAgICAgQVNTRVJUKGFkanVzdGVkVGhyZXNob2xkID4gMCk7Ci0gICAgICAg
IGFkanVzdGVkVGhyZXNob2xkID0gQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhy
ZXNob2xkKGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGFkanVzdGVkVGhyZXNob2xkKTsKLQot
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9ja0ZvckV4aXQgPSBiYXNlbGluZUNvZGVCbG9ja0Zv
ck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGV4aXQubV9jb2RlT3JpZ2luLCBiYXNlbGluZUNv
ZGVCbG9jayk7Ci0gICAgICAgIGJvb2wgZXhpdFRvTExJbnQgPSBPcHRpb25zOjpmb3JjZU9TUkV4
aXRUb0xMSW50KCkgfHwgY29kZUJsb2NrRm9yRXhpdC0+aml0VHlwZSgpID09IEpJVFR5cGU6Oklu
dGVycHJldGVyVGh1bms7Ci0gICAgICAgIHZvaWQqIGp1bXBUYXJnZXQ7Ci0gICAgICAgIGlmIChl
eGl0VG9MTEludCkgewotICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9
IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgICAgIGNvbnN0IElu
c3RydWN0aW9uJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1
Y3Rpb25zKCkuYXQoYnl0ZWNvZGVPZmZzZXQpLnB0cigpOwotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9uID0gTExJbnQ6OmdldENvZGVQ
dHI8SlNFbnRyeVB0clRhZz4oY3VycmVudEluc3RydWN0aW9uKTsKLSAgICAgICAgICAgIGp1bXBU
YXJnZXQgPSBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOyAgICAKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGNvbnN0IEpJVENvZGVNYXAmIGNvZGVNYXAgPSBjb2RlQmxvY2tG
b3JFeGl0LT5qaXRDb2RlTWFwKCk7Ci0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0Vu
dHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24gPSBjb2RlTWFwLmZpbmQoZXhpdC5tX2NvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChjb2RlTG9jYXRpb24pOwotICAg
ICAgICAgICAganVtcFRhcmdldCA9IGNvZGVMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ29tcHV0ZSB0aGUgdmFsdWUgcmVjb3Zlcmllcy4KLSAg
ICAgICAgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4gb3BlcmFuZHM7Ci0gICAgICAgIFZlY3RvcjxV
bmRlZmluZWRPcGVyYW5kU3Bhbj4gdW5kZWZpbmVkT3BlcmFuZFNwYW5zOwotICAgICAgICBkZmdK
SVRDb2RlLT52YXJpYWJsZUV2ZW50U3RyZWFtLnJlY29uc3RydWN0KGNvZGVCbG9jaywgZXhpdC5t
X2NvZGVPcmlnaW4sIGRmZ0pJVENvZGUtPm1pbmlmaWVkREZHLCBleGl0Lm1fc3RyZWFtSW5kZXgs
IG9wZXJhbmRzLCAmdW5kZWZpbmVkT3BlcmFuZFNwYW5zKTsKLSAgICAgICAgcHRyZGlmZl90IHN0
YWNrUG9pbnRlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KGNvZGVCbG9jay0+aml0
Q29kZSgpLT5kZmdDb21tb24oKS0+cmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCkgKiBzaXpl
b2YoUmVnaXN0ZXIpOwotCi0gICAgICAgIGV4aXQuZXhpdFN0YXRlID0gYWRvcHRSZWYobmV3IE9T
UkV4aXRTdGF0ZShleGl0LCBjb2RlQmxvY2ssIGJhc2VsaW5lQ29kZUJsb2NrLCBvcGVyYW5kcywg
V1RGTW92ZSh1bmRlZmluZWRPcGVyYW5kU3BhbnMpLCByZWNvdmVyeSwgc3RhY2tQb2ludGVyT2Zm
c2V0LCBhY3RpdmVUaHJlc2hvbGQsIGFkanVzdGVkVGhyZXNob2xkLCBqdW1wVGFyZ2V0LCBhcnJh
eVByb2ZpbGUsIGV4aXRUb0xMSW50KSk7Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLm1fcGVy
Qnl0ZWNvZGVQcm9maWxlciAmJiBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNv
bXBpbGF0aW9uKSkgewotICAgICAgICAgICAgUHJvZmlsZXI6OkRhdGFiYXNlJiBkYXRhYmFzZSA9
ICp2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXI7Ci0gICAgICAgICAgICBQcm9maWxlcjo6Q29tcGls
YXRpb24qIGNvbXBpbGF0aW9uID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5j
b21waWxhdGlvbi5nZXQoKTsKLQotICAgICAgICAgICAgUHJvZmlsZXI6Ok9TUkV4aXQqIHByb2Zp
bGVyRXhpdCA9IGNvbXBpbGF0aW9uLT5hZGRPU1JFeGl0KAotICAgICAgICAgICAgICAgIGV4aXRJ
bmRleCwgUHJvZmlsZXI6Ok9yaWdpblN0YWNrKGRhdGFiYXNlLCBjb2RlQmxvY2ssIGV4aXQubV9j
b2RlT3JpZ2luKSwKLSAgICAgICAgICAgICAgICBleGl0Lm1fa2luZCwgZXhpdC5tX2tpbmQgPT0g
VW5jb3VudGFibGVJbnZhbGlkYXRpb24pOwotICAgICAgICAgICAgZXhpdC5leGl0U3RhdGUtPnBy
b2ZpbGVyRXhpdCA9IHByb2ZpbGVyRXhpdDsKLSAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRp
b25MZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFs
aXphdGlvbkxldmVsOjpPdGhlcik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6cHJpbnRFYWNoT1NSRXhpdCgpKSkKLSAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6
YXRpb25MZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0
aWFsaXphdGlvbkxldmVsOjpPdGhlcik7Ci0KLSAgICAgICAgZXhpdC5leGl0U3RhdGUtPmV4dHJh
SW5pdGlhbGl6YXRpb25MZXZlbCA9IGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDsKLQotICAgICAg
ICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVyYm9zZU9TUigpIHx8IE9wdGlvbnM6OnZlcmJvc2VE
RkdPU1JFeGl0KCkpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nRigiREZHIE9TUiBleGl0ICMldSAo
JXMsICVzKSBmcm9tICVzLCB3aXRoIG9wZXJhbmRzID0gJXNcbiIsCi0gICAgICAgICAgICAgICAg
ZXhpdEluZGV4LCB0b0NTdHJpbmcoZXhpdC5tX2NvZGVPcmlnaW4pLmRhdGEoKSwKLSAgICAgICAg
ICAgICAgICBleGl0S2luZFRvU3RyaW5nKGV4aXQubV9raW5kKSwgdG9DU3RyaW5nKCpjb2RlQmxv
Y2spLmRhdGEoKSwKLSAgICAgICAgICAgICAgICB0b0NTdHJpbmcoaWdub3JpbmdDb250ZXh0PER1
bXBDb250ZXh0PihvcGVyYW5kcykpLmRhdGEoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBP
U1JFeGl0U3RhdGUmIGV4aXRTdGF0ZSA9ICpleGl0LmV4aXRTdGF0ZS5nZXQoKTsKLSAgICBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gZXhpdFN0YXRlLmJhc2VsaW5lQ29kZUJsb2NrOwot
ICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShiYXNlbGluZUNvZGVCbG9jay0+aml0
VHlwZSgpKSk7Ci0KLSAgICBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMgPSBleGl0
U3RhdGUub3BlcmFuZHM7Ci0gICAgVmVjdG9yPFVuZGVmaW5lZE9wZXJhbmRTcGFuPiYgdW5kZWZp
bmVkT3BlcmFuZFNwYW5zID0gZXhpdFN0YXRlLnVuZGVmaW5lZE9wZXJhbmRTcGFuczsKLQotICAg
IGNvbnRleHQuc3AoKSA9IGNvbnRleHQuZnA8dWludDhfdCo+KCkgKyBleGl0U3RhdGUuc3RhY2tQ
b2ludGVyT2Zmc2V0OwotCi0gICAgLy8gVGhlIG9ubHkgcmVhc29uIGZvciB1c2luZyB0aGlzIGRv
IHdoaWxlIGxvb3AgaXMgc28gd2UgY2FuIGJyZWFrIG91dCBtaWR3YXkgd2hlbiBhcHByb3ByaWF0
ZS4KLSAgICBkbyB7Ci0gICAgICAgIGF1dG8gZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3Rh
dGljX2Nhc3Q8RXh0cmFJbml0aWFsaXphdGlvbkxldmVsPihleGl0U3RhdGUuZXh0cmFJbml0aWFs
aXphdGlvbkxldmVsKTsKLQotICAgICAgICBpZiAoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID09
IEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6Tm9uZSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIC8vIEJlZ2luIGV4dHJhIGluaXRpbGl6YXRpb24gbGV2ZWw6IFNwZWN1bGF0aW9uUmVj
b3ZlcnkKLQotICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIHNwZWN1bGF0aW9uIHJlY292ZXJ5IGZp
cnN0IGJlY2F1c2UgYXJyYXkgcHJvZmlsaW5nIGFuZCB2YWx1ZSBwcm9maWxpbmcKLSAgICAgICAg
Ly8gbWF5IHJlbHkgb24gYSB2YWx1ZSB0aGF0IGl0IHJlY292ZXJzLiBIb3dldmVyLCB0aGF0IGRv
ZXNuJ3QgbWVhbiB0aGF0IGl0IGlzIGxpa2VseQotICAgICAgICAvLyB0byBoYXZlIGEgcmVjb3Zl
cnkgdmFsdWUuIFNvLCB3ZSdsbCBkZWNvcmF0ZSBpdCBhcyBVTkxJS0VMWS4KLSAgICAgICAgU3Bl
Y3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkgPSBleGl0U3RhdGUucmVjb3Zlcnk7Ci0gICAgICAg
IGlmIChVTkxJS0VMWShyZWNvdmVyeSkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAocmVjb3Zlcnkt
PnR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZDoKLSAgICAgICAgICAg
ICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID0gY3B1Lmdwcjx1aW50MzJfdD4ocmVjb3Zl
cnktPmRlc3QoKSkgLSBjcHUuZ3ByPHVpbnQzMl90PihyZWNvdmVyeS0+c3JjKCkpOwotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgQVNTRVJUKCEoY3B1LmdwcihyZWNvdmVyeS0+
ZGVzdCgpKSA+PiAzMikpOwotICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3Qo
KSkgfD0gSlNWYWx1ZTo6TnVtYmVyVGFnOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgICAgIGNhc2UgU3BlY3VsYXRpdmVBZGRTZWxmOgotICAgICAgICAgICAgICAg
IGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oY3B1Lmdw
cjxpbnQzMl90PihyZWNvdmVyeS0+ZGVzdCgpKSA+PiAxKSBeIDB4ODAwMDAwMDBVOwotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgQVNTRVJUKCEoY3B1LmdwcihyZWNvdmVyeS0+
ZGVzdCgpKSA+PiAzMikpOwotICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3Qo
KSkgfD0gSlNWYWx1ZTo6TnVtYmVyVGFnOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgICAgIGNhc2UgU3BlY3VsYXRpdmVBZGRJbW1lZGlhdGU6Ci0gICAgICAgICAg
ICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA9IChjcHUuZ3ByPHVpbnQzMl90PihyZWNv
dmVyeS0+ZGVzdCgpKSAtIHJlY292ZXJ5LT5pbW1lZGlhdGUoKSk7Ci0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICAgICAgICAgICAgICBBU1NFUlQoIShjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID4+
IDMyKSk7Ci0gICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSB8PSBKU1Zh
bHVlOjpOdW1iZXJUYWc7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAgICAgY2FzZSBCb29sZWFuU3BlY3VsYXRpb25DaGVjazoKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPSBjcHUuZ3ByKHJlY292
ZXJ5LT5kZXN0KCkpIF4gSlNWYWx1ZTo6VmFsdWVGYWxzZTsKLSNlbmRpZgotICAgICAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChleHRyYUluaXRpYWxpemF0
aW9uTGV2ZWwgPD0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpTcGVjdWxhdGlvblJlY292ZXJ5
KQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8gQmVnaW4gZXh0cmEgaW5pdGlsaXph
dGlvbiBsZXZlbDogVmFsdWVQcm9maWxlVXBkYXRlCi0gICAgICAgIEpTVmFsdWUgcHJvZmlsZWRW
YWx1ZTsKLSAgICAgICAgaWYgKCEhZXhpdC5tX2pzVmFsdWVTb3VyY2UpIHsKLSAgICAgICAgICAg
IHByb2ZpbGVkVmFsdWUgPSBqc1ZhbHVlRm9yKGNwdSwgZXhpdC5tX2pzVmFsdWVTb3VyY2UpOwot
ICAgICAgICAgICAgaWYgKE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGV4
aXQubV92YWx1ZVByb2ZpbGUpCi0gICAgICAgICAgICAgICAgcHJvZmlsZS5yZXBvcnRWYWx1ZShw
cm9maWxlZFZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXh0cmFJbml0aWFsaXphdGlv
bkxldmVsIDw9IEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6VmFsdWVQcm9maWxlVXBkYXRlKQot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8gQmVnaW4gZXh0cmEgaW5pdGlsaXphdGlv
biBsZXZlbDogQXJyYXlQcm9maWxlVXBkYXRlCi0gICAgICAgIGlmIChBcnJheVByb2ZpbGUqIGFy
cmF5UHJvZmlsZSA9IGV4aXRTdGF0ZS5hcnJheVByb2ZpbGUpIHsKLSAgICAgICAgICAgIEFTU0VS
VCghIWV4aXQubV9qc1ZhbHVlU291cmNlKTsKLSAgICAgICAgICAgIEFTU0VSVChleGl0Lm1fa2lu
ZCA9PSBCYWRDYWNoZSB8fCBleGl0Lm1fa2luZCA9PSBCYWRJbmRleGluZ1R5cGUpOwotICAgICAg
ICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9y
T3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soZXhpdC5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmls
ZSwgYmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uID0gcHJvZmlsZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGV4aXQubV9j
b2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUuYnl0ZWNvZGVJbmRleCgpKS5wdHIoKTsKLSAgICAgICAg
ICAgIGJvb2wgZG9Qcm9maWxlID0gIWluc3RydWN0aW9uLT5pczxPcEdldEJ5SWQ+KCkgfHwgaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKS5tZXRhZGF0YShwcm9maWxlZENvZGVCbG9jaykubV9t
b2RlTWV0YWRhdGEubW9kZSA9PSBHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGg7Ci0gICAgICAgICAg
ICBpZiAoZG9Qcm9maWxlKSB7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBwcm9maWxlZFZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICAgICAgICAg
IGFycmF5UHJvZmlsZS0+b2JzZXJ2ZVN0cnVjdHVyZShzdHJ1Y3R1cmUpOwotICAgICAgICAgICAg
ICAgIGFycmF5UHJvZmlsZS0+b2JzZXJ2ZUFycmF5TW9kZShhcnJheU1vZGVzRnJvbVN0cnVjdHVy
ZShzdHJ1Y3R1cmUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoZXh0
cmFJbml0aWFsaXphdGlvbkxldmVsIDw9IEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6QXJyYXlQ
cm9maWxlVXBkYXRlKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8gQmVnaW4gRXh0
cmEgaW5pdGlsaXphdGlvbiBsZXZlbDogT3RoZXIKLSAgICAgICAgaWYgKFVOTElLRUxZKGV4aXQu
bV9raW5kID09IEdlbmVyaWNVbndpbmQpKSB7Ci0gICAgICAgICAgICAvLyBXZSBhcmUgYWN0aW5n
IGFzIGEgZGVmYWN0byBvcF9jYXRjaCBiZWNhdXNlIHdlIGFycml2ZSBoZXJlIGZyb20gZ2VuZXJp
Y1Vud2luZCgpLgotICAgICAgICAgICAgLy8gU28sIHdlIG11c3QgcmVzdG9yZSBvdXIgY2FsbCBm
cmFtZSBhbmQgc3RhY2sgcG9pbnRlci4KLSAgICAgICAgICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zy
b21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihjb250ZXh0KTsKLSAgICAgICAgICAgIEFT
U0VSVChjb250ZXh0LmZwKCkgPT0gdm0uY2FsbEZyYW1lRm9yQ2F0Y2gpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGV4aXRTdGF0ZS5wcm9maWxlckV4aXQpCi0gICAgICAgICAgICBleGl0U3Rh
dGUucHJvZmlsZXJFeGl0LT5pbmNDb3VudCgpOwotCi0gICAgICAgIGlmIChVTkxJS0VMWShPcHRp
b25zOjpwcmludEVhY2hPU1JFeGl0KCkpKQotICAgICAgICAgICAgcHJpbnRPU1JFeGl0KGNvbnRl
eHQsIHZtLm9zckV4aXRJbmRleCwgZXhpdCk7Ci0KLSAgICB9IHdoaWxlIChmYWxzZSk7IC8vIEVu
ZCBleHRyYSBpbml0aWFsaXphdGlvbi4KLQotICAgIEZyYW1lIGZyYW1lKGNwdS5mcCgpLCBjb250
ZXh0LnN0YWNrKCkpOwotICAgIEFTU0VSVCghKGNvbnRleHQuZnA8dWludHB0cl90PigpICYgMHg3
KSk7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEFTU0VSVChjcHUuZ3ByPGludDY0X3Q+KEdQ
UkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKSA9PSBKU1ZhbHVlOjpOdW1iZXJUYWcpOwotICAgIEFT
U0VSVChjcHUuZ3ByPGludDY0X3Q+KEdQUkluZm86Om5vdENlbGxNYXNrUmVnaXN0ZXIpID09IEpT
VmFsdWU6Ok5vdENlbGxNYXNrKTsKLSNlbmRpZgotCi0gICAgLy8gRG8gYWxsIGRhdGEgZm9ybWF0
IGNvbnZlcnNpb25zIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBpbnRvIHRoZSBzdGFjay4KLSAgICAv
LyBOb3RlOiB3ZSBuZWVkIHRvIHJlY292ZXIgdmFsdWVzIGJlZm9yZSByZXN0b3JpbmcgY2FsbGVl
IHNhdmUgcmVnaXN0ZXJzIGJlbG93Ci0gICAgLy8gYmVjYXVzZSB0aGUgcmVjb3ZlcnkgbWF5IHJl
bHkgb24gdmFsdWVzIGluIHNvbWUgb2YgY2FsbGVlIHNhdmUgcmVnaXN0ZXJzLgotCi0gICAgaW50
IGNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycyA9IHN0YXRpY19jYXN0PGludD4oYmFz
ZWxpbmVDb2RlQmxvY2stPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKTsKLSAg
ICBzaXplX3QgbnVtYmVyT2ZPcGVyYW5kcyA9IG9wZXJhbmRzLnNpemUoKTsKLSAgICBzaXplX3Qg
bnVtVW5kZWZpbmVkT3BlcmFuZFNwYW5zID0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zLnNpemUoKTsK
LQotICAgIHNpemVfdCBuZXh0VW5kZWZpbmVkU3BhbkluZGV4ID0gMDsKLSAgICBzaXplX3QgbmV4
dFVuZGVmaW5lZE9wZXJhbmRJbmRleCA9IG51bWJlck9mT3BlcmFuZHM7Ci0gICAgaWYgKG51bVVu
ZGVmaW5lZE9wZXJhbmRTcGFucykKLSAgICAgICAgbmV4dFVuZGVmaW5lZE9wZXJhbmRJbmRleCA9
IHVuZGVmaW5lZE9wZXJhbmRTcGFuc1tuZXh0VW5kZWZpbmVkU3BhbkluZGV4XS5maXJzdEluZGV4
OwotCi0gICAgSlNWYWx1ZSB1bmRlZmluZWQgPSBqc1VuZGVmaW5lZCgpOwotICAgIGZvciAoc2l6
ZV90IHNwYW5JbmRleCA9IDA7IHNwYW5JbmRleCA8IG51bVVuZGVmaW5lZE9wZXJhbmRTcGFuczsg
KytzcGFuSW5kZXgpIHsKLSAgICAgICAgYXV0byYgc3BhbiA9IHVuZGVmaW5lZE9wZXJhbmRTcGFu
c1tzcGFuSW5kZXhdOwotICAgICAgICBpbnQgZmlyc3RPZmZzZXQgPSBzcGFuLm1pbk9mZnNldDsK
LSAgICAgICAgaW50IGxhc3RPZmZzZXQgPSBmaXJzdE9mZnNldCArIHNwYW4ubnVtYmVyT2ZSZWdp
c3RlcnM7Ci0KLSAgICAgICAgZm9yIChpbnQgb2Zmc2V0ID0gZmlyc3RPZmZzZXQ7IG9mZnNldCA8
IGxhc3RPZmZzZXQ7ICsrb2Zmc2V0KQotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvZmZz
ZXQsIHVuZGVmaW5lZCk7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRl
eCA8IG51bWJlck9mT3BlcmFuZHM7ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFsdWVSZWNv
dmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciByZWcgPSBvcGVyYW5kcy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChpbmRleCk7Ci0KLSAgICAg
ICAgaWYgKFVOTElLRUxZKGluZGV4ID09IG5leHRVbmRlZmluZWRPcGVyYW5kSW5kZXgpKSB7Ci0g
ICAgICAgICAgICBpbmRleCArPSB1bmRlZmluZWRPcGVyYW5kU3BhbnNbbmV4dFVuZGVmaW5lZFNw
YW5JbmRleCsrXS5udW1iZXJPZlJlZ2lzdGVycyAtIDE7Ci0gICAgICAgICAgICBpZiAobmV4dFVu
ZGVmaW5lZFNwYW5JbmRleCA8IG51bVVuZGVmaW5lZE9wZXJhbmRTcGFucykKLSAgICAgICAgICAg
ICAgICBuZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4ID0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zW25l
eHRVbmRlZmluZWRTcGFuSW5kZXhdLmZpcnN0SW5kZXg7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgbmV4dFVuZGVmaW5lZE9wZXJhbmRJbmRleCA9IG51bWJlck9mT3BlcmFuZHM7
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWcuaXNM
b2NhbCgpICYmIHJlZy50b0xvY2FsKCkgPCBjYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3Rl
cnMpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpbnQgb3BlcmFuZCA9IHJlZy5v
ZmZzZXQoKTsKLQotICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAg
ICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFu
ZChvcGVyYW5kLCBjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5V
bnNhZmVKU1ZhbHVlKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJbkZQ
UjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgY3B1LmZwcjxKU1ZhbHVl
PihyZWNvdmVyeS5mcHIoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgICAgICBjYXNlIEluR1BSOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChv
cGVyYW5kLCBjcHUuZ3ByPEpTVmFsdWU+KHJlY292ZXJ5LmdwcigpKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSNlbHNlCi0gICAgICAgIGNhc2UgSW5QYWlyOgotICAgICAgICAgICAgZnJhbWUuc2V0
T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8aW50MzJfdD4ocmVjb3ZlcnkudGFnR1BS
KCkpLCBjcHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5LnBheWxvYWRHUFIoKSkpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotI2VuZGlmCi0KLSAgICAgICAgY2FzZSBVbmJveGVkQ2VsbEluR1BSOgotICAg
ICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8SlNDZWxs
Kj4ocmVjb3ZlcnkuZ3ByKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNl
IENlbGxEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9w
ZXJhbmQsIEpTVmFsdWUoY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5h
c2FuVW5zYWZlVW5ib3hlZENlbGwoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQotICAgICAgICBjYXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6Ci0gICAgICAg
ICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGpzQm9vbGVhbihjcHUuZ3ByPGJvb2w+KHJl
Y292ZXJ5LmdwcigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLQotICAgICAgICBj
YXNlIEJvb2xlYW5EaXNwbGFjZWRJbkpTU3RhY2s6Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAg
ICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZp
cnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlSlNWYWx1ZSgpKTsKLSNlbHNlCi0gICAgICAgICAg
ICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGpzQm9vbGVhbihjYWxsRnJhbWUtPnIocmVjb3Zl
cnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVKU1ZhbHVlKCkucGF5bG9hZCgpKSk7Ci0j
ZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5H
UFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1Lmdw
cjxpbnQzMl90PihyZWNvdmVyeS5ncHIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRP
cGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdp
c3RlcigpKS5hc2FuVW5zYWZlVW5ib3hlZEludDMyKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgY2FzZSBVbmJveGVkSW50NTJJbkdQUjoKLSAg
ICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3ByPGludDY0
X3Q+KHJlY292ZXJ5LmdwcigpKSA+PiBKU1ZhbHVlOjppbnQ1MlNoaWZ0QW1vdW50KSk7Ci0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgot
ICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNhbGxGcmFtZS0+
cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZVVuYm94ZWRJbnQ1MigpKSk7
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFVuYm94ZWRTdHJpY3RJbnQ1Mklu
R1BSOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5n
cHI8aW50NjRfdD4ocmVjb3ZlcnkuZ3ByKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICBjYXNlIFN0cmljdEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJh
bWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0
dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZVVuYm94ZWRTdHJpY3RJbnQ1MigpKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSNlbmRpZgotCi0gICAgICAgIGNhc2UgVW5ib3hlZERvdWJsZUluRlBSOgot
ICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKEpTVmFsdWU6OkVu
Y29kZUFzRG91YmxlLCBwdXJpZnlOYU4oY3B1LmZwcihyZWNvdmVyeS5mcHIoKSkpKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluSlNTdGFjazoK
LSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShKU1ZhbHVlOjpF
bmNvZGVBc0RvdWJsZSwgcHVyaWZ5TmFOKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVn
aXN0ZXIoKSkuYXNhblVuc2FmZVVuYm94ZWREb3VibGUoKSkpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgIGNhc2UgQ29uc3RhbnQ6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5k
KG9wZXJhbmQsIHJlY292ZXJ5LmNvbnN0YW50KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgY2FzZSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgIGNh
c2UgQ2xvbmVkQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAgICAgICAgLy8gRG9u
J3QgZG8gdGhpcywgeWV0LgotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFJlc3RvcmUgdGhlIERGRyBjYWxsZWUg
c2F2ZXMgYW5kIHRoZW4gc2F2ZSB0aGUgb25lcyB0aGUgYmFzZWxpbmUgSklUIHVzZXMuCi0gICAg
cmVzdG9yZUNhbGxlZVNhdmVzRm9yKGNvbnRleHQsIGNvZGVCbG9jayk7Ci0gICAgc2F2ZUNhbGxl
ZVNhdmVzRm9yKGNvbnRleHQsIGJhc2VsaW5lQ29kZUJsb2NrKTsKLQotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgY3B1LmdwcihHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcikgPSBzdGF0aWNfY2Fz
dDxKU0M6OlVDUFVSZWdpc3Rlcj4oSlNWYWx1ZTo6TnVtYmVyVGFnKTsKLSAgICBjcHUuZ3ByKEdQ
UkluZm86Om5vdENlbGxNYXNrUmVnaXN0ZXIpID0gc3RhdGljX2Nhc3Q8SlNDOjpVQ1BVUmVnaXN0
ZXI+KEpTVmFsdWU6Ok5vdENlbGxNYXNrKTsKLSNlbmRpZgotCi0gICAgaWYgKGV4aXQuaXNFeGNl
cHRpb25IYW5kbGVyKCkpCi0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIoY29udGV4dCk7Ci0KLSAgICAvLyBOb3cgdGhhdCB0aGluZ3Mgb24gdGhl
IHN0YWNrIGFyZSByZWNvdmVyZWQsIGRvIHRoZSBhcmd1bWVudHMgcmVjb3ZlcnkuIFdlIGFzc3Vt
ZSB0aGF0IGFyZ3VtZW50cwotICAgIC8vIHJlY292ZXJpZXMgZG9uJ3QgcmVjdXJzaXZlbHkgcmVm
ZXIgdG8gZWFjaCBvdGhlci4gQnV0LCB3ZSBkb24ndCB0cnkgdG8gYXNzdW1lIHRoYXQgdGhleSBv
bmx5Ci0gICAgLy8gcmVmZXIgdG8gY2VydGFpbiByYW5nZXMgb2YgbG9jYWxzLiBIZW5jZSB3aHkg
d2UgbmVlZCB0byBkbyB0aGlzIGhlcmUsIG9uY2UgdGhlIHN0YWNrIGlzIHNlbnNpYmxlLgotICAg
IC8vIE5vdGUgdGhhdCB3ZSBhbHNvIHJvdWdobHkgYXNzdW1lIHRoYXQgdGhlIGFyZ3VtZW50cyBt
aWdodCBzdGlsbCBiZSBtYXRlcmlhbGl6ZWQgb3V0c2lkZSBvZiBpdHMKLSAgICAvLyBpbmxpbmUg
Y2FsbCBmcmFtZSBzY29wZSAtIGJ1dCBmb3Igbm93IHRoZSBERkcgd291bGRuJ3QgZG8gdGhhdC4K
LQotICAgIERGRzo6ZW1pdFJlc3RvcmVBcmd1bWVudHMoY29udGV4dCwgY29kZUJsb2NrLCBkZmdK
SVRDb2RlLCBvcGVyYW5kcyk7Ci0KLSAgICAvLyBBZGp1c3QgdGhlIG9sZCBKSVQncyBleGVjdXRl
IGNvdW50ZXIuIFNpbmNlIHdlIGFyZSBleGl0aW5nIE9TUiwgd2Uga25vdwotICAgIC8vIHRoYXQg
YWxsIG5ldyBjYWxscyBpbnRvIHRoaXMgY29kZSB3aWxsIGdvIHRvIHRoZSBuZXcgSklULCBzbyB0
aGUgZXhlY3V0ZQotICAgIC8vIGNvdW50ZXIgb25seSBhZmZlY3RzIGNhbGwgZnJhbWVzIHRoYXQg
cGVyZm9ybWVkIE9TUiBleGl0IGFuZCBjYWxsIGZyYW1lcwotICAgIC8vIHRoYXQgd2VyZSBzdGls
bCBleGVjdXRpbmcgdGhlIG9sZCBKSVQgYXQgdGhlIHRpbWUgb2YgYW5vdGhlciBjYWxsIGZyYW1l
J3MKLSAgICAvLyBPU1IgZXhpdC4gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGUgZm9sbG93aW5n
IGlzIHRydWU6Ci0gICAgLy8KLSAgICAvLyAoYSkgQ29kZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4
aXQgZ2V0cyBhIGNoYW5jZSB0byByZWVudGVyIG9wdGltaXplZAotICAgIC8vICAgICBjb2RlIGV2
ZW50dWFsbHksIHNpbmNlIG9wdGltaXplZCBjb2RlIGlzIGZhc3Rlci4gQnV0IHdlIGRvbid0Ci0g
ICAgLy8gICAgIHdhbnQgdG8gZG8gc3VjaCByZWVudGVyeSB0b28gYWdncmVzc2l2ZWx5IChzZWUg
KGMpIGJlbG93KS4KLSAgICAvLwotICAgIC8vIChiKSBJZiB0aGVyZSBpcyBjb2RlIG9uIHRoZSBj
YWxsIHN0YWNrIHRoYXQgaXMgc3RpbGwgcnVubmluZyB0aGUgb2xkCi0gICAgLy8gICAgIEpJVCdz
IGNvZGUgYW5kIGhhcyBuZXZlciBPU1InZCwgdGhlbiBpdCBzaG91bGQgZ2V0IGEgY2hhbmNlIHRv
Ci0gICAgLy8gICAgIHBlcmZvcm0gT1NSIGVudHJ5IGRlc3BpdGUgdGhlIGZhY3QgdGhhdCB3ZSd2
ZSBleGl0ZWQuCi0gICAgLy8KLSAgICAvLyAoYykgQ29kZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4
aXQgc2hvdWxkIG5vdCBpbW1lZGlhdGVseSByZXRyeSBPU1IKLSAgICAvLyAgICAgZW50cnksIHNp
bmNlIGJvdGggZm9ybXMgb2YgT1NSIGFyZSBleHBlbnNpdmUuIE9TUiBlbnRyeSBpcwotICAgIC8v
ICAgICBwYXJ0aWN1bGFybHkgZXhwZW5zaXZlLgotICAgIC8vCi0gICAgLy8gKGQpIEZyZXF1ZW50
IE9TUiBmYWlsdXJlcywgZXZlbiB0aG9zZSB0aGF0IGRvIG5vdCByZXN1bHQgaW4gdGhlIGNvZGUK
LSAgICAvLyAgICAgcnVubmluZyBpbiBhIGhvdCBsb29wLCByZXN1bHQgaW4gcmVjb21waWxhdGlv
biBnZXR0aW5nIHRyaWdnZXJlZC4KLSAgICAvLwotICAgIC8vIFRvIGVuc3VyZSAoYyksIHdlJ2Qg
bGlrZSB0byBzZXQgdGhlIGV4ZWN1dGUgY291bnRlciB0bwotICAgIC8vIGNvdW50ZXJWYWx1ZUZv
ck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4gVGhpcyBzZWVtcyBsaWtlIGl0IHdvdWxkIGVuZGFuZ2Vy
Ci0gICAgLy8gKGEpIGFuZCAoYiksIHNpbmNlIHRoZW4gZXZlcnkgT1NSIGV4aXQgd291bGQgZGVs
YXkgdGhlIG9wcG9ydHVuaXR5IGZvcgotICAgIC8vIGV2ZXJ5IGNhbGwgZnJhbWUgdG8gcGVyZm9y
bSBPU1IgZW50cnkuIEVzc2VudGlhbGx5LCBpZiBPU1IgZXhpdCBoYXBwZW5zCi0gICAgLy8gZnJl
cXVlbnRseSBhbmQgdGhlIGZ1bmN0aW9uIGhhcyBmZXcgbG9vcHMsIHRoZW4gdGhlIGNvdW50ZXIg
d2lsbCBuZXZlcgotICAgIC8vIGJlY29tZSBub24tbmVnYXRpdmUgYW5kIE9TUiBlbnRyeSB3aWxs
IG5ldmVyIGJlIHRyaWdnZXJlZC4gT1NSIGVudHJ5Ci0gICAgLy8gd2lsbCBvbmx5IGhhcHBlbiBp
ZiBhIGxvb3AgZ2V0cyBob3QgaW4gdGhlIG9sZCBKSVQsIHdoaWNoIGRvZXMgYSBwcmV0dHkKLSAg
ICAvLyBnb29kIGpvYiBvZiBlbnN1cmluZyAoYSkgYW5kIChiKS4gQnV0IHRoYXQgZG9lc24ndCB0
YWtlIGNhcmUgb2YgKGQpLAotICAgIC8vIHNpbmNlIGVhY2ggc3BlY3VsYXRpb24gZmFpbHVyZSB3
b3VsZCByZXNldCB0aGUgZXhlY3V0ZSBjb3VudGVyLgotICAgIC8vIFNvIHdlIGNoZWNrIGhlcmUg
aWYgdGhlIG51bWJlciBvZiBzcGVjdWxhdGlvbiBmYWlsdXJlcyBpcyBzaWduaWZpY2FudGx5Ci0g
ICAgLy8gbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiBzdWNjZXNzZXMgKHdlIHdhbnQgOTAlIHN1
Y2Nlc3MgcmF0ZSksIGFuZCBpZgotICAgIC8vIHRoZXJlIGhhdmUgYmVlbiBhIGxhcmdlIGVub3Vn
aCBudW1iZXIgb2YgZmFpbHVyZXMuIElmIHNvLCB3ZSBzZXQgdGhlCi0gICAgLy8gY291bnRlciB0
byAwOyBvdGhlcndpc2Ugd2Ugc2V0IHRoZSBjb3VudGVyIHRvCi0gICAgLy8gY291bnRlclZhbHVl
Rm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLgotCi0gICAgaWYgKFVOTElLRUxZKGNvZGVCbG9jay0+
dXBkYXRlT1NSRXhpdENvdW50ZXJBbmRDaGVja0lmTmVlZFRvUmVvcHRpbWl6ZShleGl0U3RhdGUp
ID09IENvZGVCbG9jazo6T3B0aW1pemVBY3Rpb246OlJlb3B0aW1pemVOb3cpKQotICAgICAgICB0
cmlnZ2VyUmVvcHRpbWl6YXRpb25Ob3coYmFzZWxpbmVDb2RlQmxvY2ssIGNvZGVCbG9jaywgJmV4
aXQpOwotCi0gICAgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhjb250ZXh0LCBiYXNlbGluZUNvZGVC
bG9jaywgZXhpdCk7Ci0gICAgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KGNvbnRleHQsIHZtLCBjb2Rl
QmxvY2ssIGJhc2VsaW5lQ29kZUJsb2NrLCBleGl0KTsKLX0KLQotc3RhdGljIHZvaWQgcmVpZnlJ
bmxpbmVkQ2FsbEZyYW1lcyhDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIG91dGVybW9zdEJh
c2VsaW5lQ29kZUJsb2NrLCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKLXsKLSAgICBhdXRvJiBj
cHUgPSBjb250ZXh0LmNwdTsKLSAgICBGcmFtZSBmcmFtZShjcHUuZnAoKSwgY29udGV4dC5zdGFj
aygpKTsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgbGVhdmUgaG9sZXMgb24gdGhlIHN0
YWNrIHdoZW4gcGVyZm9ybWluZyBhbiBPU1IgZXhpdAotICAgIC8vIGluIHByZXNlbmNlIG9mIGlu
bGluZWQgdGFpbCBjYWxscy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ3NTExCi0gICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKG91dGVy
bW9zdEJhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKLSAgICBmcmFtZS5zZXRPcGVyYW5k
PENvZGVCbG9jayo+KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgb3V0ZXJtb3N0QmFzZWxpbmVD
b2RlQmxvY2spOwotCi0gICAgY29uc3QgQ29kZU9yaWdpbiogY29kZU9yaWdpbjsKLSAgICBmb3Ig
KGNvZGVPcmlnaW4gPSAmZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4gJiYgY29kZU9yaWdp
bi0+aW5saW5lQ2FsbEZyYW1lKCk7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxs
RnJhbWUoKS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMoKSkgewotICAgICAgICBJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgp
OwotICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxv
Y2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jaygqY29kZU9yaWdpbiwgb3V0ZXJtb3N0QmFz
ZWxpbmVDb2RlQmxvY2spOwotICAgICAgICBJbmxpbmVDYWxsRnJhbWU6OktpbmQgdHJ1ZUNhbGxl
ckNhbGxLaW5kOwotICAgICAgICBDb2RlT3JpZ2luKiB0cnVlQ2FsbGVyID0gaW5saW5lQ2FsbEZy
YW1lLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygmdHJ1ZUNhbGxlckNhbGxLaW5kKTsKLSAg
ICAgICAgdm9pZCogY2FsbGVyRnJhbWUgPSBjcHUuZnAoKTsKLQotICAgICAgICBib29sIGNhbGxl
cklzTExJbnQgPSBmYWxzZTsKLQotICAgICAgICBpZiAoIXRydWVDYWxsZXIpIHsKLSAgICAgICAg
ICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWUtPmlzVGFpbCgpKTsKLSAgICAgICAgICAgIHZvaWQq
IHJldHVyblBDID0gZnJhbWUuZ2V0PHZvaWQqPihDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCkp
OwotI2lmIENQVShBUk02NEUpCi0gICAgICAgICAgICB2b2lkKiBvbGRFbnRyeVNQID0gY3B1LmZw
PHVpbnQ4X3QqPigpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwotICAgICAgICAgICAgdm9p
ZCogbmV3RW50cnlTUCA9IGNwdS5mcDx1aW50OF90Kj4oKSArIGlubGluZUNhbGxGcmFtZS0+cmV0
dXJuUENPZmZzZXQoKSArIHNpemVvZih2b2lkKik7Ci0gICAgICAgICAgICByZXR1cm5QQyA9IHJl
dGFnQ29kZVB0cihyZXR1cm5QQywgYml0d2lzZV9jYXN0PFB0clRhZz4ob2xkRW50cnlTUCksIGJp
dHdpc2VfY2FzdDxQdHJUYWc+KG5ld0VudHJ5U1ApKTsKLSNlbmRpZgotICAgICAgICAgICAgZnJh
bWUuc2V0PHZvaWQqPihpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCksIHJldHVyblBD
KTsKLSAgICAgICAgICAgIGNhbGxlckZyYW1lID0gZnJhbWUuZ2V0PHZvaWQqPihDYWxsRnJhbWU6
OmNhbGxlckZyYW1lT2Zmc2V0KCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGJhc2VsaW5lQ29kZUJsb2NrRm9y
T3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soKnRydWVDYWxsZXIsIG91dGVybW9zdEJhc2VsaW5l
Q29kZUJsb2NrKTsKLSAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXgg
PSB0cnVlQ2FsbGVyLT5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgICAgICB2b2lkKiBqdW1wVGFy
Z2V0ID0gY2FsbGVyUmV0dXJuUEMoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIsIGNhbGxCeXRl
Y29kZUluZGV4LCB0cnVlQ2FsbGVyQ2FsbEtpbmQsIGNhbGxlcklzTExJbnQpLnVudGFnZ2VkRXhl
Y3V0YWJsZUFkZHJlc3MoKTsKLQotICAgICAgICAgICAgaWYgKHRydWVDYWxsZXItPmlubGluZUNh
bGxGcmFtZSgpKQotICAgICAgICAgICAgICAgIGNhbGxlckZyYW1lID0gY3B1LmZwPHVpbnQ4X3Qq
PigpICsgdHJ1ZUNhbGxlci0+aW5saW5lQ2FsbEZyYW1lKCktPnN0YWNrT2Zmc2V0ICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKTsKLQotI2lmIENQVShBUk02NEUpCi0gICAgICAgICAgICB2b2lkKiBu
ZXdFbnRyeVNQID0gY3B1LmZwPHVpbnQ4X3QqPigpICsgaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5Q
Q09mZnNldCgpICsgc2l6ZW9mKHZvaWQqKTsKLSAgICAgICAgICAgIGp1bXBUYXJnZXQgPSB0YWdD
b2RlUHRyKGp1bXBUYXJnZXQsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KG5ld0VudHJ5U1ApKTsKLSNl
bmRpZgotICAgICAgICAgICAgZnJhbWUuc2V0PHZvaWQqPihpbmxpbmVDYWxsRnJhbWUtPnJldHVy
blBDT2Zmc2V0KCksIGp1bXBUYXJnZXQpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnJhbWUuc2V0
T3BlcmFuZDx2b2lkKj4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jaywgYmFzZWxpbmVDb2RlQmxvY2spOwotCi0gICAgICAgIC8vIFJlc3RvcmUg
dGhlIGlubGluZSBjYWxsIGZyYW1lJ3MgY2FsbGVlIHNhdmUgcmVnaXN0ZXJzLgotICAgICAgICAv
LyBJZiB0aGlzIGlubGluZWQgZnJhbWUgaXMgYSB0YWlsIGNhbGwgdGhhdCB3aWxsIHJldHVybiBi
YWNrIHRvIHRoZSBvcmlnaW5hbCBjYWxsZXIsIHdlIG5lZWQgdG8KLSAgICAgICAgLy8gY29weSB0
aGUgcHJpb3IgY29udGVudHMgb2YgdGhlIHRhZyByZWdpc3RlcnMgYWxyZWFkeSBzYXZlZCBmb3Ig
dGhlIG91dGVyIGZyYW1lIHRvIHRoaXMgZnJhbWUuCi0gICAgICAgIHNhdmVPckNvcHlDYWxsZWVT
YXZlc0Zvcihjb250ZXh0LCBiYXNlbGluZUNvZGVCbG9jaywgVmlydHVhbFJlZ2lzdGVyKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLCAhdHJ1ZUNhbGxlcik7Ci0KLSAgICAgICAgaWYgKGNh
bGxlcklzTExJbnQpIHsKLSAgICAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tG
b3JDYWxsZXIgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2Nr
KCp0cnVlQ2FsbGVyLCBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgICAgICBm
cmFtZS5zZXQ8Y29uc3Qgdm9pZCo+KGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFz
ZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpLm9mZnNl
dCwgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRhVGFibGUoKSk7Ci0jaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGZyYW1lLnNldDxjb25zdCB2b2lkKj4oY2FsbGVlU2F2
ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVy
czo6cGJHUFIpLm9mZnNldCwgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmluc3RydWN0aW9u
c1Jhd1BvaW50ZXIoKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaW5saW5l
Q2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWlu
dDMyX3Q+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcywgUGF5bG9hZE9mZnNldCwgaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7Ci0gICAgICAgIEFTU0VSVChjYWxsZXJGcmFtZSk7
Ci0gICAgICAgIGZyYW1lLnNldDx2b2lkKj4oaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9m
ZnNldCgpLCBjYWxsZXJGcmFtZSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdWludDMy
X3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4
KCkpLmJpdHMoKTsKLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJfdD4oaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCBUYWdPZmZzZXQsIGxvY2F0aW9uQml0cyk7Ci0gICAgICAgIGlmICghaW5saW5lQ2Fs
bEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBKU1ZhbHVl
KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSkpOwotI2Vsc2UgLy8gVVNFKEpTVkFM
VUU2NCkgLy8gc28gdGhpcyBpcyB0aGUgMzItYml0IHBhcnQKLSAgICAgICAgY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uID0gYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0
KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0gICAgICAgIHVpbnQzMl90IGxv
Y2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChiaXR3aXNlX2Nhc3Q8dWlu
dDMyX3Q+KGluc3RydWN0aW9uKSkpLmJpdHMoKTsKLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1
aW50MzJfdD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBUYWdPZmZzZXQsIGxvY2F0aW9uQml0cyk7Ci0gICAg
ICAgIGZyYW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUsIFRhZ09mZnNldCwgc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KEpTVmFsdWU6OkNlbGxUYWcpKTsKLSAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlz
Q2xvc3VyZUNhbGwpCi0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUsIFBheWxvYWRPZmZzZXQsIGlu
bGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSk7Ci0jZW5kaWYgLy8gVVNFKEpTVkFMVUU2
NCkgLy8gZW5kaW5nIHRoZSAjZWxzZSBwYXJ0LCBzbyBkaXJlY3RseSBhYm92ZSBpcyB0aGUgMzIt
Yml0IHBhcnQKLSAgICB9Ci0KLSAgICAvLyBEb24ndCBuZWVkIHRvIHNldCB0aGUgdG9wbGV2ZWwg
Y29kZSBvcmlnaW4gaWYgd2Ugb25seSBkaWQgaW5saW5lIHRhaWwgY2FsbHMKLSAgICBpZiAoY29k
ZU9yaWdpbikgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9u
Qml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5iaXRzKCk7
Ci0jZWxzZQotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBvdXRlcm1v
c3RCYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoY29kZU9yaWdpbi0+Ynl0ZWNv
ZGVJbmRleCgpKS5wdHIoKTsKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNp
dGVJbmRleChCeXRlY29kZUluZGV4KGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24p
KSkuYml0cygpOwotI2VuZGlmCi0gICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+KENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBUYWdPZmZzZXQsIGxvY2F0
aW9uQml0cyk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQo
Q29udGV4dCYgY29udGV4dCwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2Nr
KiBiYXNlbGluZUNvZGVCbG9jaywgT1NSRXhpdCYgZXhpdCkKLXsKLSAgICBPU1JFeGl0U3RhdGUq
IGV4aXRTdGF0ZSA9IGV4aXQuZXhpdFN0YXRlLmdldCgpOwotCi0gICAgV1RGOjpzdG9yZUxvYWRG
ZW5jZSgpOyAvLyBUaGUgb3B0aW1pemluZyBjb21waWxlciBleHBlY3RzIHRoYXQgdGhlIE9TUiBl
eGl0IG1lY2hhbmlzbSB3aWxsIGV4ZWN1dGUgdGhpcyBmZW5jZS4KLSAgICB2bS5oZWFwLndyaXRl
QmFycmllcihiYXNlbGluZUNvZGVCbG9jayk7Ci0KLSAgICAvLyBXZSBiYXJyaWVyIGFsbCBpbmxp
bmVkIGZyYW1lcyAtLSBhbmQgbm90IGp1c3QgdGhlIGN1cnJlbnQgaW5saW5lIHN0YWNrIC0tCi0g
ICAgLy8gYmVjYXVzZSB3ZSBkb24ndCBrbm93IHdoaWNoIGlubGluZWQgZnVuY3Rpb24gb3ducyB0
aGUgdmFsdWUgcHJvZmlsZSB0aGF0Ci0gICAgLy8gd2UnbGwgdXBkYXRlIHdoZW4gd2UgZXhpdC4g
SW4gdGhlIGNhc2Ugb2YgImYoKSB7IGEoKTsgYigpOyB9IiwgaWYgYm90aAotICAgIC8vIGEgYW5k
IGIgYXJlIGlubGluZWQsIHdlIG1pZ2h0IGV4aXQgaW5zaWRlIGIgZHVlIHRvIGEgYmFkIHZhbHVl
IGxvYWRlZAotICAgIC8vIGZyb20gYS4KLSAgICAvLyBGSVhNRTogTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZSBzaG91bGQgcmVtZW1iZXIgd2hpY2ggQ29kZUJsb2NrIG93bnMKLSAgICAvLyB0
aGUgdmFsdWUgcHJvZmlsZS4KLSAgICBJbmxpbmVDYWxsRnJhbWVTZXQqIGlubGluZUNhbGxGcmFt
ZXMgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlubGluZUNhbGxGcmFtZXMu
Z2V0KCk7Ci0gICAgaWYgKGlubGluZUNhbGxGcmFtZXMpIHsKLSAgICAgICAgZm9yIChJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA6ICppbmxpbmVDYWxsRnJhbWVzKQotICAgICAgICAg
ICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9j
ay5nZXQoKSk7Ci0gICAgfQotCi0gICAgYXV0byogZXhpdElubGluZUNhbGxGcmFtZSA9IGV4aXQu
bV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwotICAgIGlmIChleGl0SW5saW5lQ2FsbEZy
YW1lKQotICAgICAgICBjb250ZXh0LmZwKCkgPSBjb250ZXh0LmZwPHVpbnQ4X3QqPigpICsgZXhp
dElubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwot
Ci0gICAgdm9pZCoganVtcFRhcmdldCA9IGV4aXRTdGF0ZS0+anVtcFRhcmdldDsKLSAgICBBU1NF
UlQoanVtcFRhcmdldCk7Ci0KLSAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgewot
ICAgICAgICAvLyBTaW5jZSB3ZSdyZSBqdW1waW5nIHRvIG9wX2NhdGNoLCB3ZSBuZWVkIHRvIHNl
dCBjYWxsRnJhbWVGb3JDYXRjaC4KLSAgICAgICAgdm0uY2FsbEZyYW1lRm9yQ2F0Y2ggPSBjb250
ZXh0LmZwPENhbGxGcmFtZSo+KCk7Ci0gICAgfQotCi0gICAgdm0udG9wQ2FsbEZyYW1lID0gY29u
dGV4dC5mcDxDYWxsRnJhbWUqPigpOwotCi0gICAgaWYgKGV4aXRTdGF0ZS0+aXNKdW1wVG9MTElu
dCkgewotICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9ja0ZvckV4aXQgPSBiYXNlbGluZUNvZGVC
bG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGV4aXQubV9jb2RlT3JpZ2luLCBiYXNl
bGluZUNvZGVCbG9jayk7Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGV4
aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rp
b24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICpjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnMo
KS5hdChieXRlY29kZUluZGV4KS5wdHIoKTsKLQotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6
UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSKSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNv
ZGVCbG9ja0ZvckV4aXQtPm1ldGFkYXRhVGFibGUoKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICAgICAgY29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpID0gYml0d2lzZV9jYXN0
PHVpbnRwdHJfdD4oY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKTsK
LSAgICAgICAgY29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpID0gc3RhdGljX2Nh
c3Q8dWludHB0cl90PihleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkub2Zmc2V0KCkp
OwotI2Vsc2UKLSAgICAgICAgY29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpID0g
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oJmN1cnJlbnRJbnN0cnVjdGlvbik7Ci0jZW5kaWYKLQot
ICAgICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgICAgIHZtLnRh
cmdldEludGVycHJldGVyUENGb3JUaHJvdyA9ICZjdXJyZW50SW5zdHJ1Y3Rpb247Ci0gICAgfQot
Ci0gICAgY29udGV4dC5wYygpID0gdW50YWdDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGp1bXBUYXJn
ZXQpOwotfQotCi1zdGF0aWMgdm9pZCBwcmludE9TUkV4aXQoQ29udGV4dCYgY29udGV4dCwgdWlu
dDMyX3Qgb3NyRXhpdEluZGV4LCBjb25zdCBPU1JFeGl0JiBleGl0KQotewotICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gY29udGV4dC5mcDxDYWxsRnJhbWUqPigpOwotICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBDb2RlQmxvY2sqIGFsdGVy
bmF0aXZlID0gY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOwotICAgIEV4aXRLaW5kIGtpbmQgPSBl
eGl0Lm1fa2luZDsKLSAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gZXhpdC5tX2Nv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwotCi0gICAgZGF0YUxvZygiU3BlY3VsYXRpb24gZmFp
bHVyZSBpbiAiLCAqY29kZUJsb2NrKTsKLSAgICBkYXRhTG9nKCIgQCBleGl0ICMiLCBvc3JFeGl0
SW5kZXgsICIgKCIsIGJ5dGVjb2RlT2Zmc2V0LCAiLCAiLCBleGl0S2luZFRvU3RyaW5nKGtpbmQp
LCAiKSB3aXRoICIpOwotICAgIGlmIChhbHRlcm5hdGl2ZSkgewotICAgICAgICBkYXRhTG9nKAot
ICAgICAgICAgICAgImV4ZWN1dGVDb3VudGVyID0gIiwgYWx0ZXJuYXRpdmUtPmppdEV4ZWN1dGVD
b3VudGVyKCksCi0gICAgICAgICAgICAiLCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA9ICIs
IGFsdGVybmF0aXZlLT5yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpLAotICAgICAgICAgICAg
Iiwgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID0gIiwgYWx0ZXJuYXRpdmUtPm9wdGltaXphdGlv
bkRlbGF5Q291bnRlcigpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZGF0YUxvZygibm8gYWx0ZXJu
YXRpdmUgY29kZSBibG9jayAoaS5lLiB3ZSd2ZSBiZWVuIGpldHRpc29uZWQpIik7Ci0gICAgZGF0
YUxvZygiLCBvc3JFeGl0Q291bnRlciA9ICIsIGNvZGVCbG9jay0+b3NyRXhpdENvdW50ZXIoKSwg
IlxuIik7Ci0gICAgZGF0YUxvZygiICAgIEdQUnMgYXQgdGltZSBvZiBleGl0OiIpOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7
Ci0gICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAgICBk
YXRhTG9nKCIgIiwgY29udGV4dC5ncHJOYW1lKGdwciksICI6IiwgUmF3UG9pbnRlcihjb250ZXh0
Lmdwcjx2b2lkKj4oZ3ByKSkpOwotICAgIH0KLSAgICBkYXRhTG9nKCJcbiIpOwotICAgIGRhdGFM
b2coIiAgICBGUFJzIGF0IHRpbWUgb2YgZXhpdDoiKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgewotICAgICAgICBGUFJSZWcg
ZnByID0gRlBSSW5mbzo6dG9SZWdpc3RlcihpKTsKLSAgICAgICAgZGF0YUxvZygiICIsIGNvbnRl
eHQuZnByTmFtZShmcHIpLCAiOiIpOwotICAgICAgICB1aW50NjRfdCBiaXRzID0gY29udGV4dC5m
cHI8dWludDY0X3Q+KGZwcik7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSA9IGNvbnRleHQuZnByKGZw
cik7Ci0gICAgICAgIGRhdGFMb2dGKCIlbGx4OiVsZiIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4o
Yml0cyksIHZhbHVlKTsKLSAgICB9Ci0gICAgZGF0YUxvZygiXG4iKTsKLX0KLQotLy8gSklUIGJh
c2VkIE9TUiBFeGl0LgotCiBPU1JFeGl0OjpPU1JFeGl0KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVT
b3VyY2UganNWYWx1ZVNvdXJjZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSB2YWx1ZVBy
b2ZpbGUsIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHN0cmVhbUluZGV4LCB1bnNpZ25l
ZCByZWNvdmVyeUluZGV4KQogICAgIDogT1NSRXhpdEJhc2Uoa2luZCwgaml0LT5tX29yaWdpbi5m
b3JFeGl0LCBqaXQtPm1fb3JpZ2luLnNlbWFudGljLCBqaXQtPm1fb3JpZ2luLndhc0hvaXN0ZWQp
CiAgICAgLCBtX2pzVmFsdWVTb3VyY2UoanNWYWx1ZVNvdXJjZSkKQEAgLTk1OCwxNSArNzAsMTgg
QEAgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBPU1JFeGl0Ojpjb2RlTG9jYXRp
b25Gb3JSZXBhdGNoKCkgY29uc3QKIAogdm9pZCBPU1JFeGl0OjplbWl0UmVzdG9yZUFyZ3VtZW50
cyhDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5
PiYgb3BlcmFuZHMpCiB7Ci0gICAgSGFzaE1hcDxNaW5pZmllZElELCBpbnQ+IGFscmVhZHlBbGxv
Y2F0ZWRBcmd1bWVudHM7IC8vIE1hcHMgcGhhbnRvbSBhcmd1bWVudHMgbm9kZSBJRCB0byBvcGVy
YW5kLgorICAgIEhhc2hNYXA8TWluaWZpZWRJRCwgVmlydHVhbFJlZ2lzdGVyPiBhbHJlYWR5QWxs
b2NhdGVkQXJndW1lbnRzOyAvLyBNYXBzIHBoYW50b20gYXJndW1lbnRzIG5vZGUgSUQgdG8gb3Bl
cmFuZC4KICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgp
OyArK2luZGV4KSB7CiAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3Bl
cmFuZHNbaW5kZXhdOwotICAgICAgICBpbnQgb3BlcmFuZCA9IG9wZXJhbmRzLm9wZXJhbmRGb3JJ
bmRleChpbmRleCk7CiAKICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IERpcmVj
dEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZAogICAgICAgICAgICAgJiYgcmVjb3ZlcnkudGVj
aG5pcXVlKCkgIT0gQ2xvbmVkQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkKQogICAgICAgICAg
ICAgY29udGludWU7CiAKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gb3BlcmFuZHMub3BlcmFu
ZEZvckluZGV4KGluZGV4KTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCiAgICAgICAgIE1pbmlmaWVkSUQgaWQgPSByZWNvdmVyeS5ub2RlSUQo
KTsKICAgICAgICAgYXV0byBpdGVyID0gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5maW5kKGlk
KTsKICAgICAgICAgaWYgKGl0ZXIgIT0gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5lbmQoKSkg
ewpAQCAtOTg3LDcgKzEwMiw3IEBAIHZvaWQgT1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMo
Q0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT3BlcmFuZHM8VmFsCiAKICAgICAgICAg
aWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKSB7
CiAgICAgICAgICAgICBqaXQubG9hZFB0cigKLSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBl
cnM6OmFkZHJlc3NGb3Ioc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpLAorICAg
ICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIo
c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSwKICAgICAgICAgICAgICAgICBH
UFJJbmZvOjpyZWdUMCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBqaXQubW92ZSgK
QEAgLTk5Nyw3ICsxMTIsNyBAQCB2b2lkIE9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJndW1lbnRzKEND
YWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9wZXJhbmRzPFZhbAogCiAgICAgICAgIGlm
ICghaW5saW5lQ2FsbEZyYW1lIHx8IGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAg
ICAgICAgICAgIGppdC5sb2FkMzIoCi0gICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpw
YXlsb2FkRm9yKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpLAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihW
aXJ0dWFsUmVnaXN0ZXIoc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcykpLAogICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QxKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIGppdC5tb3ZlKApAQCAtMTAyMyw3ICsxMzgsNyBAQCB2
b2lkIE9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBWTSYg
dm0sIGNvbnN0IE9wZXJhbmRzPFZhbAogICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdH
UFIwLCBPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICBqaXQuc3RvcmVDZWxsKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkpOwogCi0g
ICAgICAgIGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuYWRkKGlkLCBvcGVyYW5kKTsKKyAgICAg
ICAgYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5hZGQoaWQsIG9wZXJhbmQudmlydHVhbFJlZ2lz
dGVyKCkpOwogICAgIH0KIH0KIApAQCAtMTQ2NiwxNiArNTgxLDc5IEBAIHZvaWQgT1NSRXhpdDo6
Y29tcGlsZUV4aXQoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT1NSRXhpdCYgZXhp
dCwgY29uc3QKICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKICAgICAgICAgaml0
LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5
RnJhbWUpOwogCisgICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZVN0YWNrQ29udGFpbnNB
Y3RpdmVDaGVja3BvaW50KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIHNob3VsZG4n
dCB1c2UgYSBwcm9iZSBidXQgZmlsbGluZyBhbGwgdGhlIHNpZGUgc3RhdGUgb2JqZWN0cyBpcyB0
cmlja3kgb3RoZXJ3aXNlLi4uCisgICAgICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiB2YWx1ZXMo
b3BlcmFuZHMubnVtYmVyT2ZUbXBzKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG9wZXJhbmRzLm51bWJlck9mVG1wcygpOyArK2kpCisgICAgICAgICAgICB2YWx1ZXNbaV0gPSBv
cGVyYW5kcy50bXAoaSk7CisKKyAgICAgICAgVk0qIHZtUHRyID0gJnZtOworICAgICAgICBhdXRv
KiB0bXBTY3JhdGNoID0gc2NyYXRjaCArIG9wZXJhbmRzLnRtcEluZGV4KDApOworICAgICAgICBq
aXQucHJvYmUoWz0sIHZhbHVlcyA9IFdURk1vdmUodmFsdWVzKV0gKFByb2JlOjpDb250ZXh0JiBj
b250ZXh0KSB7CisgICAgICAgICAgICBhdXRvIGFkZFNpZGVTdGF0ZSA9IFsmXSAoQ2FsbEZyYW1l
KiBmcmFtZSwgQnl0ZWNvZGVJbmRleCBpbmRleCwgc2l6ZV90IHRtcE9mZnNldCkgeworICAgICAg
ICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gc2lk
ZVN0YXRlID0gV1RGOjptYWtlVW5pcXVlPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPigpOwor
CisgICAgICAgICAgICAgICAgc2lkZVN0YXRlLT5ieXRlY29kZUluZGV4ID0gaW5kZXg7CisgICAg
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhOdW1DaGVja3BvaW50VG1wczsg
KytpKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHJlY292ZXJ5ID0gdmFsdWVzW2kgKyB0
bXBPZmZzZXRdOworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGRvIHdo
YXQgdGhlIEZUTCBkb2VzIGFuZCBtYXRlcmlhbGl6ZSBhbGwgdGhlIEpTVmFsdWVzIGludG8gdGhl
IHNjcmF0Y2ggYnVmZmVyLgorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRl
Y2huaXF1ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAg
ICAgICAgICAgICAgICAgICBzaWRlU3RhdGUtPnRtcHNbaV0gPSByZWNvdmVyeS5jb25zdGFudCgp
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJbnQzMkRp
c3BsYWNlZEluSlNTdGFjazogeworICAgICAgICAgICAgICAgICAgICAgICAgc2lkZVN0YXRlLT50
bXBzW2ldID0ganNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4odG1wU2NyYXRjaFtpICsgdG1w
T2Zmc2V0XSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBjYXNlIEJvb2xlYW5EaXNwbGFjZWRJbkpT
U3RhY2s6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVW5ib3hlZENlbGxJbkdQUjoKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICAgICAg
ICAgICAgICBjYXNlIEluR1BSOgorICAgICAgICAgICAgICAgICAgICBjYXNlIERpc3BsYWNlZElu
SlNTdGFjazogeworICAgICAgICAgICAgICAgICAgICAgICAgc2lkZVN0YXRlLT50bXBzW2ldID0g
cmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4odG1wU2NyYXRjaClbaSArIHRtcE9mZnNldF07Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OiAKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIHZtUHRyLT5hZGRDaGVja3BvaW50T1NSU2lkZVN0YXRlKGZyYW1lLCBXVEZNb3ZlKHNpZGVT
dGF0ZSkpOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgY29uc3QgQ29kZU9yaWdpbiog
Y29kZU9yaWdpbjsKKyAgICAgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY29udGV4dC5n
cHI8Q2FsbEZyYW1lKj4oR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICAgICAg
Zm9yIChjb2RlT3JpZ2luID0gJmV4aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2luICYmIGNvZGVP
cmlnaW4tPmlubGluZUNhbGxGcmFtZSgpOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi0+aW5saW5l
Q2FsbEZyYW1lKCktPmdldENhbGxlclNraXBwaW5nVGFpbENhbGxzKCkpIHsKKyAgICAgICAgICAg
ICAgICBCeXRlY29kZUluZGV4IGNhbGxCeXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+Ynl0ZWNv
ZGVJbmRleCgpOworICAgICAgICAgICAgICAgIGlmICghY2FsbEJ5dGVjb2RlSW5kZXguY2hlY2tw
b2ludCgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAg
IGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpOwor
ICAgICAgICAgICAgICAgIGFkZFNpZGVTdGF0ZShyZWludGVycHJldF9jYXN0PENhbGxGcmFtZSo+
KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNhbGxGcmFtZSkgKyBpbmxpbmVDYWxsRnJhbWUtPnJl
dHVyblBDT2Zmc2V0KCkgLSBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgY2FsbEJ5dGVjb2RlSW5kZXgs
IGlubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCFjb2RlT3JpZ2luKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAg
ICAgaWYgKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2Rl
SW5kZXgoKTsgYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICAgICAgYWRk
U2lkZVN0YXRlKGNhbGxGcmFtZSwgYnl0ZWNvZGVJbmRleCwgMCk7CisgICAgICAgIH0pOworICAg
IH0KKwogICAgIC8vIERvIGFsbCBkYXRhIGZvcm1hdCBjb252ZXJzaW9ucyBhbmQgc3RvcmUgdGhl
IHJlc3VsdHMgaW50byB0aGUgc3RhY2suCiAKICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGlu
ZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgIGNvbnN0IFZhbHVlUmVj
b3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVnID0gb3BlcmFuZHMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoaW5kZXgpOwotCi0gICAg
ICAgIGlmIChyZWcuaXNMb2NhbCgpICYmIHJlZy50b0xvY2FsKCkgPCBzdGF0aWNfY2FzdDxpbnQ+
KGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3Rl
cnMoKSkpCisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRl
eChpbmRleCk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICBpbnQgb3BlcmFuZCA9IHJlZy5vZmZzZXQoKTsKKyAgICAgICAgaWYg
KG9wZXJhbmQuaXNMb2NhbCgpICYmIG9wZXJhbmQudG9Mb2NhbCgpIDwgc3RhdGljX2Nhc3Q8aW50
PihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0
ZXJzKCkpKQorICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgc3dpdGNoIChyZWNvdmVy
eS50ZWNobmlxdWUoKSkgewogICAgICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKaW5kZXggYTdlNTg3OGMwNzE3MDhhMWRhNzZj
MGIwZWI1NGQ1NGYxYTA0ZWI4ZS4uOWU5YmNlYTQ4MWMxZDY4Nzc5NzJmMjU5ZDYyYzFhMjMwMGIy
YjE2MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKQEAgLTE1MCw4ICsx
NTAsNiBAQCBzdHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBPU1JFeGl0QmFzZSB7CiAKICAgICBmcmll
bmQgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBpbGVPU1JFeGl0KENhbGxGcmFtZSop
OwogCi0gICAgc3RhdGljIHZvaWQgZXhlY3V0ZU9TUkV4aXQoUHJvYmU6OkNvbnRleHQmKTsKLQog
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fcGF0Y2hhYmxlSnVtcExv
Y2F0aW9uOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxPU1JFeGl0UHRyVGFnPiBtX2NvZGU7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2Uu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAppbmRleCAzMTA5
NjNkODQ0MzZjNTMzMjc4NGYwYTI5MmE0OWNiZTFiODJhNTliLi4wMDNiNjE4Y2Q0NDBlNDAwYWJh
YWNlYzBhZmJjM2MxMjQzNWRiOTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRCYXNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0QmFzZS5oCkBAIC03MCw2ICs3MCwxMSBAQCBzdHJ1Y3QgT1NSRXhpdEJhc2UgewogICAg
ICAgICByZXR1cm4gbV9raW5kID09IEdlbmVyaWNVbndpbmQ7CiAgICAgfQogCisgICAgQUxXQVlT
X0lOTElORSBib29sIGlzRXhpdGluZ1RvQ2hlY2twb2ludEhhbmRsZXIoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgp
OworICAgIH0KKwogcHJvdGVjdGVkOgogICAgIHZvaWQgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50
RXhpdFNpdGUoQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaywgRXhpdGluZ0pJVFR5cGUgaml0
VHlwZSkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlckNvbW1vbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlckNvbW1vbi5jcHAKaW5kZXggN2JhNWQ2ZTIyYmU1ZmFiNDYyZTIwNWUwMDAw
ZDE4NWZmZDg4MDEyNC4uMjdlMmFhOGQ5OGY3N2MyY2JmZGQzN2UyYWNkYzcyZjQ4ZGM1ZTlkOSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcApAQCAtMjksMTIgKzI5LDE1IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAK
ICNpbmNsdWRlICJCeXRlY29kZXMuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVT
dGF0ZS5oIgogI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25z
LmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCisjaW5jbHVkZSAi
TExJbnRUaHVua3MuaCIKKyNpbmNsdWRlICJQcm9iZUNvbnRleHQuaCIKICNpbmNsdWRlICJTdHJ1
Y3R1cmVTdHViSW5mby5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC0x
NDIsNiArMTQ1LDEwIEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhWTSYgdm0sIENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPiBjYWxsZXJSZXR1cm5QQyhDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yQ2FsbGVyLCBCeXRlY29kZUluZGV4IGNhbGxCeXRlY29kZUluZGV4LCBJbmxpbmVDYWxsRnJh
bWU6OktpbmQgdHJ1ZUNhbGxlckNhbGxLaW5kLCBib29sJiBjYWxsZXJJc0xMSW50KQogewogICAg
IGNhbGxlcklzTExJbnQgPSBPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwgYmFzZWxp
bmVDb2RlQmxvY2tGb3JDYWxsZXItPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRo
dW5rOworCisgICAgaWYgKGNhbGxCeXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAg
cmV0dXJuIExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGNoZWNrcG9pbnRfb3NyX2V4
aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZSk7CisKICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4ganVtcFRhcmdldDsKIAogICAgIGlmIChjYWxsZXJJc0xMSW50
KSB7CkBAIC0yMzcsNyArMjQ0LDcgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICAgICAvLyBpbiBwcmVzZW5j
ZSBvZiBpbmxpbmVkIHRhaWwgY2FsbHMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0NzUxMQogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29k
ZShqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+aml0VHlwZSgpKSk7Ci0gICAgaml0LnN0b3JlUHRy
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKSks
IEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKUNhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jaykpOworICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoaml0LmJhc2VsaW5lQ29kZUJsb2NrKCkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7CiAKICAgICBjb25zdCBDb2RlT3JpZ2lu
KiBjb2RlT3JpZ2luOwogICAgIGZvciAoY29kZU9yaWdpbiA9ICZleGl0Lm1fY29kZU9yaWdpbjsg
Y29kZU9yaWdpbiAmJiBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsgY29kZU9yaWdpbiA9
IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxs
cygpKSB7CkBAIC0zMDQsMzMgKzMxMSwzNCBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAgICAgICAgICAg
aml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZv
cigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7CisgICAgICAgICAgICBqaXQu
c3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKFZp
cnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICAgICAgaml0LnN0b3JlUHRyKGNhbGxlckZyYW1lR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJl
c3NGb3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwot
ICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4t
PmJ5dGVjb2RlSW5kZXgoKSkuYml0cygpOwotICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0Zv
cigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7CisgICAgICAgIHVpbnQzMl90
IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYmFzZWxpbmVDb2RlQmxvY2stPmJ5dGVjb2Rl
SW5kZXhGb3JFeGl0KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkpLmJpdHMoKTsKKyAgICAg
ICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRz
KSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cykpKTsKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAg
ICAgICAgICBqaXQuc3RvcmU2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZShpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKSksIEFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICAgICAg
aml0LnN0b3JlNjQoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpKSkpLCBBc3NlbWJseUhl
bHBlcnM6OmFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0
KSAvLyBzbyB0aGlzIGlzIHRoZSAzMi1iaXQgcGFydAogICAgICAgICBqaXQuc3RvcmVQdHIoY2Fs
bGVyRnJhbWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5l
Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAgICAgICAgIGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiA9IGJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChj
b2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLnB0cigpOwotICAgICAgICB1aW50MzJfdCBsb2Nh
dGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQz
Ml90PihpbnN0cnVjdGlvbikpKS5iaXRzKCk7Ci0gICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFn
Rm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKLSAgICAgICAgaml0LnN0
b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEFz
c2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CisgICAgICAgIHVpbnQzMl90
IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoKS5iaXRzKCk7CisgICAgICAgIGppdC5zdG9y
ZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5
SGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7CisgICAg
ICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNl
bGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICAgICAgICAg
aWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICBqaXQuc3Rv
cmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZS0+Y2Fs
bGVlQ29uc3RhbnQoKSksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lz
dGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
KSkpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bVB0cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpLCBBc3NlbWJseUhlbHBlcnM6
OnBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkgLy8g
ZW5kaW5nIHRoZSAjZWxzZSBwYXJ0LCBzbyBkaXJlY3RseSBhYm92ZSBpcyB0aGUgMzItYml0IHBh
cnQKICAgICB9CiAKICAgICAvLyBEb24ndCBuZWVkIHRvIHNldCB0aGUgdG9wbGV2ZWwgY29kZSBv
cmlnaW4gaWYgd2Ugb25seSBkaWQgaW5saW5lIHRhaWwgY2FsbHMKICAgICBpZiAoY29kZU9yaWdp
bikgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9
IENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5iaXRzKCk7CisgICAg
ICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChj
b2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkub2Zmc2V0KCkpKS5iaXRzKCk7CiAjZWxzZQotICAg
ICAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBqaXQuYmFzZWxpbmVDb2RlQmxv
Y2soKS0+aW5zdHJ1Y3Rpb25zKCkuYXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5wdHIo
KTsKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChCeXRlY29k
ZUluZGV4KGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKSkuYml0cygpOworICAg
ICAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+Ynl0ZWNv
ZGVJbmRleEZvckV4aXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmlu
c3RydWN0aW9ucyhieXRlY29kZUluZGV4KS5hdCgpLnB0cigpOworICAgICAgICB1aW50MzJfdCBs
b2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oaW5zdHJ1
Y3Rpb24pKS5iaXRzKCk7CiAjZW5kaWYKLSAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Io
KFZpcnR1YWxSZWdpc3RlcikoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpKSk7CisgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMy
KGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgfQogfQogCkBAIC0zODUsNyArMzkzLDEx
IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgIGlmIChleGl0VG9MTEludCkgewogICAgICAg
ICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7
CiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJs
b2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbiA9IExM
SW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbjsKKyAg
ICAgICAgaWYgKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAgICAgZGVzdGlu
YXRpb24gPSBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjaGVja3BvaW50X29zcl9l
eGl0X3RyYW1wb2xpbmUpOworICAgICAgICBlbHNlIAorICAgICAgICAgICAgZGVzdGluYXRpb24g
PSBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwog
CiAgICAgICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKSB7CiAgICAgICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmN1cnJlbnRJbnN0cnVjdGlvbiks
IEdQUkluZm86OnJlZ1QyKTsKQEAgLTQwMSwxMCArNDEzLDE4IEBAIHZvaWQgYWRqdXN0QW5kSnVt
cFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBl
eGl0KQogI2VuZGlmCiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dlZDxP
U1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxvY2F0aW9uID0gY29kZUJs
b2NrRm9yRXhpdC0+aml0Q29kZU1hcCgpLmZpbmQoZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCgpKTsKLSAgICAgICAgQVNTRVJUKGNvZGVMb2NhdGlvbik7CisgICAgICAgIEJ5dGVjb2Rl
SW5kZXggZXhpdEluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZGVzdGluYXRpb247Cisg
ICAgICAgIGlmIChleGl0SW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAgICAgZGVzdGluYXRp
b24gPSBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjaGVja3BvaW50X29zcl9leGl0
X3RyYW1wb2xpbmUpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChjb2RlQmxv
Y2tGb3JFeGl0LT5ieXRlY29kZUluZGV4Rm9yRXhpdChleGl0SW5kZXgpID09IGV4aXRJbmRleCk7
CisgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IGNvZGVCbG9ja0ZvckV4aXQtPmppdENvZGVNYXAo
KS5maW5kKGV4aXRJbmRleCk7CisgICAgICAgIH0KIAotICAgICAgICBqdW1wVGFyZ2V0ID0gY29k
ZUxvY2F0aW9uLnJldGFnZ2VkPE9TUkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsK
KyAgICAgICAgQVNTRVJUKGRlc3RpbmF0aW9uKTsKKworICAgICAgICBqdW1wVGFyZ2V0ID0gZGVz
dGluYXRpb24ucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwog
ICAgIH0KIAogICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSklU
OjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrRm9yRXhpdCkgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKaW5kZXggYTk5NTk3ZjY2
NDM4Y2RhNzg0ZWUzOTZkMzFlNDE2OGFiM2Y5ODYxMS4uYjg1OTU5ODEwNzEwODA0YzI1Mjc3NjUy
NWU1MTI2YzYzYTI2ZTc2ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCkBAIC0yMjQyLDcg
KzIyNDIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG1faGVhcC5mb2xsb3coYXZhaWxh
YmlsaXR5Lm1fbG9jYWxzW2ldLm5vZGUoKSkgIT0gZXNjYXBlZSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBhdmFpbGFiaWxpdHkubV9sb2Nh
bHMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gYXZh
aWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9u
ZSwgTW92SGludCwgb3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksIE9wSW5mbyhvcGVyYW5k
KSwKICAgICAgICAgICAgICAgICBtYXRlcmlhbGl6YXRpb24tPmRlZmF1bHRFZGdlKCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcEluZm8uaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BJbmZvLmgKaW5kZXggZjM5YzE0YjlmMGE0NDg3ODlkNzcy
ZGMyN2RmMTU4ODFlNTA4Njg5NS4uNzdlZmNmYjI0ODAwMmE0YmY1ZWE2MGE2ZTY2NTIwZmUwNTE0
NGJjYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcEluZm8uaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wSW5mby5oCkBAIC00NCw3ICs0NCw3
IEBAIHN0cnVjdCBPcEluZm8gewogICAgIGV4cGxpY2l0IE9wSW5mbyhJbnRlZ3JhbFR5cGUgdmFs
dWUpCiAgICAgICAgIDogbV92YWx1ZShzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUpKSB7IH0K
ICAgICBleHBsaWNpdCBPcEluZm8oUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIDogbV92
YWx1ZShzdGF0aWNfY2FzdDx1aW50NjRfdD4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oc3RydWN0
dXJlKSkpIHsgfQotCisgICAgZXhwbGljaXQgT3BJbmZvKE9wZXJhbmQgb3ApIDogbV92YWx1ZShv
cC5hc0JpdHMoKSkgeyB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgICBleHBsaWNp
dCBPcEluZm8oVCogcHRyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAKaW5kZXggYmI1YzgzNTljMTI4NWFjYjM2MTFkYjUyNzY4ZjM1MDkwOGYwNGY2My4uY2Rh
ZjdiZThkY2ZhNDBiOTFlNjc2YjY3NTRjODBlNzRmNjVkMTNhMiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCkBAIC0yOTcxLDE3ICsyOTcxLDE4IEBAIGlu
dDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheUluZGV4T2ZWYWx1ZURvdWJsZShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqCiAgICAgcmV0dXJuIC0xOwogfQogCi12b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
aW50MzJfdCBmaXJzdEVsZW1lbnREZXN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJndW1lbnRz
LCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3QgbWFuZGF0b3J5TWlu
aW11bSkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Mb2FkVmFyYXJncyhKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IGZpcnN0RWxlbWVudERlc3QsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRBcmd1bWVudHMsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoSW5j
bHVkaW5nVGhpcywgdWludDMyX3QgbWFuZGF0b3J5TWluaW11bSkKIHsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZmlyc3RFbGVtZW50IHsgZmlyc3RFbGVtZW50RGVzdCB9OwogICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FM
TF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRBcmd1bWVudHMpOwogICAgIAotICAgIGxvYWRWYXJhcmdzKGdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIoZmlyc3RFbGVtZW50RGVzdCksIGFyZ3VtZW50
cywgb2Zmc2V0LCBsZW5ndGgpOworICAgIGxvYWRWYXJhcmdzKGdsb2JhbE9iamVjdCwgYml0d2lz
ZV9jYXN0PEpTVmFsdWUqPigmY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudCkpLCBhcmd1bWVudHMs
IG9mZnNldCwgbGVuZ3RoSW5jbHVkaW5nVGhpcyAtIDEpOwogICAgIAotICAgIGZvciAodWludDMy
X3QgaSA9IGxlbmd0aDsgaSA8IG1hbmRhdG9yeU1pbmltdW07ICsraSkKLSAgICAgICAgY2FsbEZy
YW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IGpzVW5kZWZpbmVkKCk7CisgICAgZm9yICh1
aW50MzJfdCBpID0gbGVuZ3RoSW5jbHVkaW5nVGhpcyAtIDE7IGkgPCBtYW5kYXRvcnlNaW5pbXVt
OyArK2kpCisgICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnQgKyBpKSA9IGpzVW5kZWZp
bmVkKCk7CiB9CiAKIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMoaW50
MzJfdCBhLCBpbnQzMl90IGIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAKaW5kZXggY2JjMmM4YmZhZTRlOTRkMDk1ZGRj
OTE1N2RiMzZhYjVhMGM2YWRjMi4uMmIxMDViMmNhZGU3YjdkNTU4OWZhZGVhZmIwMmJjMDk2NDVl
MDliYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tSW5z
ZXJ0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRv
bUluc2VydGlvblBoYXNlLmNwcApAQCAtNDMsMTEgKzQzLDggQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogCiBuYW1lc3BhY2UgewogCi1uYW1lc3BhY2UgREZHUGhhbnRvbUluc2Vy
dGlvblBoYXNlSW50ZXJuYWwgewotc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxz
ZTsKLX0KLQogY2xhc3MgUGhhbnRvbUluc2VydGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogcHVibGljOgogICAgIFBo
YW50b21JbnNlcnRpb25QaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgs
ICJwaGFudG9tIGluc2VydGlvbiIpCkBAIC02Miw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICAgICAg
Ly8gU2V0TG9jYWxzIGV4ZWN1dGUsIHdoaWNoIGlzIGluYWNjdXJhdGUuIFRoYXQgY2F1c2VzIHVz
IHRvIGluc2VydCB0b28gZmV3IFBoYW50b21zLgogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG51bGxwdHIsIG1fZ3JhcGgubV9yZWZDb3VudFN0YXRlID09IEV4YWN0UmVmQ291bnQpOwogICAg
ICAgICAKLSAgICAgICAgaWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJi
b3NlKSB7CisgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJHcmFw
aCBiZWZvcmUgUGhhbnRvbSBpbnNlcnRpb246XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVt
cCgpOwogICAgICAgICB9CkBAIC03Miw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkKICAgICAg
ICAgICAgIGhhbmRsZUJsb2NrKGJsb2NrKTsKICAgICAgICAgCi0gICAgICAgIGlmIChERkdQaGFu
dG9tSW5zZXJ0aW9uUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICBpZiAodmVyYm9z
ZSkgewogICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYWZ0ZXIgUGhhbnRvbSBpbnNlcnRpb246
XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CkBAIC0xMDMsMjIg
KzEwMCwyMiBAQCBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBsYXN0RXhpdGluZ0luZGV4ID0g
MDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9j
ay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgaWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFz
ZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBNb3ZI
aW50OgotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2Nh
bCgpKSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5v
cGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNh
c2UgWm9tYmllSGludDoKLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPnVu
bGlua2VkTG9jYWwoKSkgPSBudWxscHRyOworICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJh
bmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgIGNhc2UgU2V0
QXJndW1lbnREZWZpbml0ZWx5OgogICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudE1heWJlOgot
ICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBudWxscHRy
OworICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG51
bGxwdHI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICBkZWZhdWx0OgpAQCAtMTM0LDM4ICsxMzEsNDIgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAogICAgICAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAg
ICAgICAgWyZdIChFZGdlIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYo
dmVyYm9zZSwgIlVwZGF0aW5nIGVwb2NoIGZvciAiLCBlZGdlLCAiIHRvICIsIGN1cnJlbnRFcG9j
aCk7CiAgICAgICAgICAgICAgICAgICAgIGVkZ2UtPnNldEVwb2NoKGN1cnJlbnRFcG9jaCk7CiAg
ICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG5vZGUtPnNldEVw
b2NoKGN1cnJlbnRFcG9jaCk7CiAKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhbHJlYWR5
S2lsbGVkOworICAgICAgICAgICAgT3BlcmFuZCBhbHJlYWR5S2lsbGVkOwogCi0gICAgICAgICAg
ICBhdXRvIHByb2Nlc3NLaWxsZWRPcGVyYW5kID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2
ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgS2lsbGVkIG9wZXJhbmQ6
ICIsIHJlZywgIlxuIik7CisgICAgICAgICAgICBhdXRvIHByb2Nlc3NLaWxsZWRPcGVyYW5kID0g
WyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJi
b3NlLCAiICAgIEtpbGxlZCBvcGVyYW5kOiAiLCBvcGVyYW5kKTsKIAogICAgICAgICAgICAgICAg
IC8vIEFscmVhZHkgaGFuZGxlZCBmcm9tIFNldExvY2FsLgotICAgICAgICAgICAgICAgIGlmIChy
ZWcgPT0gYWxyZWFkeUtpbGxlZCkKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZCA9PSBhbHJl
YWR5S2lsbGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICIg
ICAgT3BlcmFuZCAiLCBvcGVyYW5kLCAiIGFscmVhZHkga2lsbGVkIGJ5IHNldCBsb2NhbCIpOwog
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGUqIGtpbGxlZE5vZGUgPSBtX3ZhbHVlcy5vcGVy
YW5kKHJlZyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFraWxsZWROb2RlKQorICAgICAgICAgICAg
ICAgIE5vZGUqIGtpbGxlZE5vZGUgPSBtX3ZhbHVlcy5vcGVyYW5kKG9wZXJhbmQpOyAKKyAgICAg
ICAgICAgICAgICBpZiAoIWtpbGxlZE5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxv
Z0xuSWYodmVyYm9zZSwgIiAgICBPcGVyYW5kICIsIG9wZXJhbmQsICIgd2FzIG5vdCBkZWZpbmVk
IGluIHRoaXMgYmxvY2suIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKHJlZykgPSBudWxs
cHRyOworICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQob3BlcmFuZCkgPSBudWxscHRy
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBp
bnNlcnQgYSBQaGFudG9tIGlmIHRoZSBub2RlIGhhc24ndCBiZWVuIHVzZWQgc2luY2UgdGhlIGxh
c3QKICAgICAgICAgICAgICAgICAvLyBleGl0LCBhbmQgd2FzIGJvcm4gYmVmb3JlIHRoZSBsYXN0
IGV4aXQuCi0gICAgICAgICAgICAgICAgaWYgKGtpbGxlZE5vZGUtPmVwb2NoKCkgPT0gY3VycmVu
dEVwb2NoKQorICAgICAgICAgICAgICAgIGlmIChraWxsZWROb2RlLT5lcG9jaCgpID09IGN1cnJl
bnRFcG9jaCkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiICAg
IE9wZXJhbmQgIiwgb3BlcmFuZCwgIiBoYXMgY3VycmVudCBlcG9jaCAiLCBjdXJyZW50RXBvY2gp
OwogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgaWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3NlKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAgICAgICAgICAgICAi
ICAgIEluc2VydGluZyBQaGFudG9tIG9uICIsIGtpbGxlZE5vZGUsICIgYWZ0ZXIgIiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hdChsYXN0RXhpdGluZ0luZGV4KSwgIlxuIik7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRhdGFM
b2dMbklmKHZlcmJvc2UsCisgICAgICAgICAgICAgICAgICAgICIgICAgSW5zZXJ0aW5nIFBoYW50
b20gb24gIiwga2lsbGVkTm9kZSwgIiBhZnRlciAiLAorICAgICAgICAgICAgICAgICAgICBibG9j
ay0+YXQobGFzdEV4aXRpbmdJbmRleCkpOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIC8vIFdlIGhhdmUgZXhhY3QgcmVmIGNvdW50cywgc28gY3JlYXRpbmcgYSBuZXcgdXNlIG1l
YW5zIHRoYXQgd2UgaGF2ZSB0bwogICAgICAgICAgICAgICAgIC8vIGluY3JlbWVudCB0aGUgcmVm
IGNvdW50LgogICAgICAgICAgICAgICAgIGtpbGxlZE5vZGUtPnBvc3RmaXhSZWYoKTsKQEAgLTE3
OSwxNCArMTgwLDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICBp
ZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkgewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBsb2NhbCA9IG5vZGUtPmxvY2FsKCk7CisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVy
YW5kID0gbm9kZS0+b3BlcmFuZCgpOwogICAgICAgICAgICAgICAgIGlmIChub2RlTWF5RXhpdCkg
ewogICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgU2V0TG9jYWwgZG9lcyBleGl0LCB3ZSBu
ZWVkIHRoZSBNb3ZIaW50IG9mIGl0cyBsb2NhbAogICAgICAgICAgICAgICAgICAgICAvLyB0byBi
ZSBsaXZlIHVudGlsIHRoZSBTZXRMb2NhbCBpcyBkb25lLgotICAgICAgICAgICAgICAgICAgICBw
cm9jZXNzS2lsbGVkT3BlcmFuZChsb2NhbCk7Ci0gICAgICAgICAgICAgICAgICAgIGFscmVhZHlL
aWxsZWQgPSBsb2NhbDsKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0tpbGxlZE9wZXJhbmQo
b3BlcmFuZCk7CisgICAgICAgICAgICAgICAgICAgIGFscmVhZHlLaWxsZWQgPSBvcGVyYW5kOwog
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKGxvY2Fs
KSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChvcGVyYW5kKSA9
IG51bGxwdHI7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZvckFsbEtpbGxlZE9wZXJh
bmRzKG1fZ3JhcGgsIG5vZGUsIGJsb2NrLT50cnlBdChub2RlSW5kZXggKyAxKSwgcHJvY2Vzc0tp
bGxlZE9wZXJhbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVjaXNlTG9jYWxDbG9iYmVyaXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWNpc2VMb2NhbENsb2JiZXJpemUuaAppbmRleCAxMjhjODQxZjBhYzdmOWRlYjYyZjdlNmZjNDYz
YTUyODczNGM3NTU5Li4yYTZhMDJmMmJiZGYwMWZhODkyMDMwYzljZGQxYTM5Njc5Njk2ZmMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2Ji
ZXJpemUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENs
b2JiZXJpemUuaApAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWxsSWZBcHBy
b3ByaWF0ZShtX3JlYWQsIFZpcnR1YWxSZWdpc3RlcihoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkp
KTsKKyAgICAgICAgICAgIGNhbGxJZkFwcHJvcHJpYXRlKG1fcmVhZCwgaGVhcC5vcGVyYW5kKCkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNjgsNyArNjgs
NyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFdlIGV4cGVjdCBzdGFjayB3cml0ZXMgdG8gYWxyZWFk
eSBiZSBwcmVjaXNlbHkgY2hhcmFjdGVyaXplZCBieSBERkc6OmNsb2JiZXJpemUoKS4KICAgICAg
ICAgaWYgKGhlYXAua2luZCgpID09IFN0YWNrKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VCghaGVhcC5wYXlsb2FkKCkuaXNUb3AoKSk7Ci0gICAgICAgICAgICBjYWxsSWZBcHByb3ByaWF0
ZShtX3VuY29uZGl0aW9uYWxXcml0ZSwgVmlydHVhbFJlZ2lzdGVyKGhlYXAucGF5bG9hZCgpLnZh
bHVlMzIoKSkpOworICAgICAgICAgICAgY2FsbElmQXBwcm9wcmlhdGUobV91bmNvbmRpdGlvbmFs
V3JpdGUsIGhlYXAub3BlcmFuZCgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICAKQEAgLTg3LDEyICs4NywxMiBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBS
RUxFQVNFX0FTU0VSVChsb2NhdGlvbi5oZWFwKCkua2luZCgpID09IFN0YWNrKTsKICAgICAgICAg
Ci0gICAgICAgIG1fZGVmKFZpcnR1YWxSZWdpc3Rlcihsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgp
LnZhbHVlMzIoKSksIG5vZGUpOworICAgICAgICBtX2RlZihsb2NhdGlvbi5oZWFwKCkub3BlcmFu
ZCgpLCBub2RlKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+Ci0gICAgdm9pZCBjYWxsSWZBcHByb3ByaWF0ZShjb25zdCBGdW5jdG9yJiBmdW5j
dG9yLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lkIGNhbGxJZkFwcHJvcHJpYXRl
KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAg
IGlmIChvcGVyYW5kLmlzTG9jYWwoKSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob3BlcmFuZC50
b0xvY2FsKCkpID49IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxv
Y2FscygpKQogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCmluZGV4IDQ0N2Uy
NGUyYTExNjMzN2M4M2UzYmFhMzEyNzM1NzkyYjkwNDcyOWQuLjViNGY5OTI5MzQxMTc5YzIwNDk5
NTJiZGMzODY5NjUyOWYwZmMzMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAKQEAgLTcyLDcgKzcyLDcg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY29uc3Qg
T3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzID0gbV9ncmFwaC5t
X3BsYW4ubXVzdEhhbmRsZVZhbHVlcygpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaW50
IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAg
ICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRl
eChpKTsKICAgICAgICAgICAgICAgICBPcHRpb25hbDxKU1ZhbHVlPiB2YWx1ZSA9IG11c3RIYW5k
bGVWYWx1ZXNbaV07CiAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IGYxMWNlNzY0YjM5NmQ5
YTNhOWZmN2E4ZDVlYzRjMThhZTExZTQ3MDcuLmY5MmFlOWRiMGJkN2QzODFlMGViNWZhMjc2MDc2
ZDFhNDE5ZDAzNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0xMzc0LDYgKzEzNzQsNyBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgWm9tYmllSGlu
dDoKICAgICAgICAgY2FzZSBFeGl0T0s6CisgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAg
ICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKICAg
ICAgICAgY2FzZSBQdXREeW5hbWljVmFyOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAppbmRleCA4NzI3NzYwYzZlY2JkYjMy
ZWFlNjAzYmFjYmQxMDAzNzRkODE0ZmU3Li5jOTc5MzM1YTMwMWVmNDZiOTkyM2VkZmY1NTZiZTcz
ZDU3ZjU4ZjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0
YWNrU2lua2luZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1
dFN0YWNrU2lua2luZ1BoYXNlLmNwcApAQCAtNDIsMTEgKzQyLDggQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogCiBuYW1lc3BhY2UgewogCi1uYW1lc3BhY2UgREZHUHV0U3RhY2tT
aW5raW5nUGhhc2VJbnRlcm5hbCB7Ci1zdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZh
bHNlOwotfQotCiBjbGFzcyBQdXRTdGFja1NpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIHB1YmxpYzoKICAgICBQ
dXRTdGFja1NpbmtpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgs
ICJQdXRTdGFjayBzaW5raW5nIikKQEAgLTczLDcgKzcwLDcgQEAgcHVibGljOgogICAgICAgICAv
LyB0aGUgc3RhY2suIEl0J3Mgbm90IGNsZWFyIHRvIG1lIGlmIHRoaXMgaXMgaW1wb3J0YW50IG9y
IG5vdC4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0NTI5NgogICAgICAgICAKLSAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50
ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRh
dGFMb2coIkdyYXBoIGJlZm9yZSBQdXRTdGFjayBzaW5raW5nOlxuIik7CiAgICAgICAgICAgICBt
X2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQpAQCAtODgsMTEgKzg1LDggQEAgcHVibGljOgogICAg
ICAgICBCbG9ja01hcDxPcGVyYW5kczxib29sPj4gbGl2ZUF0VGFpbChtX2dyYXBoKTsKICAgICAg
ICAgCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0
dXJhbE9yZGVyKCkpIHsKLSAgICAgICAgICAgIGxpdmVBdEhlYWRbYmxvY2tdID0gT3BlcmFuZHM8
Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAgICAg
IGxpdmVBdFRhaWxbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+
dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbGl2ZUF0SGVhZFti
bG9ja10uZmlsbChmYWxzZSk7Ci0gICAgICAgICAgICBsaXZlQXRUYWlsW2Jsb2NrXS5maWxsKGZh
bHNlKTsKKyAgICAgICAgICAgIGxpdmVBdEhlYWRbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3Bl
cmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkLCBmYWxzZSk7CisgICAgICAgICAgICBs
aXZlQXRUYWlsW2Jsb2NrXSA9IE9wZXJhbmRzPGJvb2w+KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZh
cmlhYmxlc0F0SGVhZCwgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBib29s
IGNoYW5nZWQ7CkBAIC0xMDcsMzMgKzEwMSwzNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
T3BlcmFuZHM8Ym9vbD4gbGl2ZSA9IGxpdmVBdFRhaWxbYmxvY2tdOwogICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7
CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6
OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiTGl2ZSBhdCAiLCBub2RlLCAiOiAiLCBsaXZlLCAiXG4iKTsK
ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIFZlY3RvcjxWaXJ0dWFs
UmVnaXN0ZXIsIDQ+IHJlYWRzOwotICAgICAgICAgICAgICAgICAgICBWZWN0b3I8VmlydHVhbFJl
Z2lzdGVyLCA0PiB3cml0ZXM7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxl
ciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAg
VmVjdG9yPE9wZXJhbmQsIDQ+IHJlYWRzOworICAgICAgICAgICAgICAgICAgICBWZWN0b3I8T3Bl
cmFuZCwgND4gd3JpdGVzOworICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIg
PSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9w
ZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5h
bDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAiLCBvcGVyYW5kLCAiIGlzIGxpdmUg
YXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICByZWFkcy5hcHBlbmQo
b3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICAgICAg
YXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBQdXRTdGFjayB8fCBub2RlLT5vcCgpID09IExv
YWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9
PSBLaWxsU3RhY2spOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBvcCA9IG5vZGUtPm9w
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChvcCA9PSBQdXRTdGFj
ayB8fCBvcCA9PSBMb2FkVmFyYXJncyB8fCBvcCA9PSBGb3J3YXJkVmFyYXJncyB8fCBvcCA9PSBL
aWxsU3RhY2spOwogICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVzLmFwcGVuZChvcGVyYW5k
KTsKICAgICAgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgICAgICAgICBwcmVjaXNl
TG9jYWxDbG9iYmVyaXplKAogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwg
ZXNjYXBlSGFuZGxlciwgd3JpdGVIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgWyZd
IChWaXJ0dWFsUmVnaXN0ZXIsIExhenlOb2RlKSB7IH0pOworICAgICAgICAgICAgICAgICAgICAg
ICAgWyZdIChPcGVyYW5kLCBMYXp5Tm9kZSkgeyB9KTsKIAotICAgICAgICAgICAgICAgICAgICBm
b3IgKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIDogd3JpdGVzKQorICAgICAgICAgICAgICAgICAg
ICBmb3IgKE9wZXJhbmQgb3BlcmFuZCA6IHdyaXRlcykKICAgICAgICAgICAgICAgICAgICAgICAg
IGxpdmUub3BlcmFuZChvcGVyYW5kKSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBmb3Ig
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIDogcmVhZHMpCisgICAgICAgICAgICAgICAgICAgIGZv
ciAoT3BlcmFuZCBvcGVyYW5kIDogcmVhZHMpCiAgICAgICAgICAgICAgICAgICAgICAgICBsaXZl
Lm9wZXJhbmQob3BlcmFuZCkgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAKQEAgLTIzNCw3ICsyMjksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgT3BlcmFu
ZHM8Rmx1c2hGb3JtYXQ+IGRlZmVycmVkID0gZGVmZXJyZWRBdEhlYWRbYmxvY2tdOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJEZWZlcnJlZCBhdCAiLCBub2RlLCAiOiIsIGRlZmVycmVkLCAi
XG4iKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5vcCgpID09IEdldFN0YWNrKSB7CkBAIC0yNjEsNyArMjU2LDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1MDM5OAogCiAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzQ29uZmxpY3Rpbmcg
PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+c3Rh
Y2tBY2Nlc3NEYXRhKCktPmxvY2FsKSA9PSBDb25mbGljdGluZ0ZsdXNoOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCkt
Pm9wZXJhbmQpID09IENvbmZsaWN0aW5nRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgIWlzQ29uZmxp
Y3RpbmcpOwpAQCAtMjc1LDE3ICsyNzAsMjAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gZnJvbS4KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPm9wKCkgPT0gUHV0U3RhY2spIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gbm9kZS0+c3RhY2tB
Y2Nlc3NEYXRhKCktPmxvY2FsOworICAgICAgICAgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVy
YW5kID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiU2V0dGluZyBmbHVzaCBmb3JtYXQgZm9yICIs
IG5vZGUsICIgYXQgb3BlcmFuZCAiLCBvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+Zm9y
bWF0OwogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAobm9kZS0+b3AoKSA9PSBLaWxsU3RhY2spIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gc2luayBhIFB1dFN0YWNrIHBhc3QgYSBLaWxs
U3RhY2suCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnVu
bGlua2VkTG9jYWwoKSkgPSBDb25mbGljdGluZ0ZsdXNoOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJL
aWxsaW5nIHN0YWNrIGZvciAiLCBub2RlLT51bmxpbmtlZE9wZXJhbmQoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSA9
IENvbmZsaWN0aW5nRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byBlc2NhcGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50
ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9
IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJGb3IgIiwgbm9kZSwg
IiBlc2NhcGluZyAiLCBvcGVyYW5kLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChvcGVyYW5kLmlzSGVhZGVyKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMjkzLDE2ICsyOTEsMTggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAgICAgICAgICAg
ICAgfTsKIAotICAgICAgICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhh
bmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKCFvcGVyYW5kLmlzVG1wKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9w
ZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IExvYWRW
YXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBWYXJhcmdzTGVuZ3RoIHx8IG5v
ZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyk7
CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiV3JpdGluZyBk
ZWFkIGZsdXNoIGZvciAiLCBub2RlLCAiIGF0IG9wZXJhbmQgIiwgb3BlcmFuZCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVhZEZsdXNoOwog
ICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSgKICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIsIHdyaXRlSGFuZGxlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyLCBMYXp5Tm9kZSkgeyB9KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCwgTGF6eU5vZGUpIHsgfSk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChkZWZlcnJl
ZCA9PSBkZWZlcnJlZEF0VGFpbFtibG9ja10pCkBAIC0zMTMsMTMgKzMxMywxMyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNj
ZXNzb3IgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSBkZWZlcnJlZC5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nICIsIFZpcnR1YWxSZWdp
c3RlcihkZWZlcnJlZC5vcGVyYW5kRm9ySW5kZXgoaSkpLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJs
b2NrKSwgIi0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yKSwgIjogIiwgZGVmZXJyZWRbaV0sICIg
YW5kICIsIGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0sICIgbWVyZ2VzIHRvICIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgIiwgZGVmZXJyZWQub3BlcmFuZEZvckluZGV4KGkp
LCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIi0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29y
KSwgIjogIiwgZGVmZXJyZWRbaV0sICIgYW5kICIsIGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1b
aV0sICIgbWVyZ2VzIHRvICIpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZEF0
SGVhZFtzdWNjZXNzb3JdW2ldID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZShk
ZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JdW2ldLCBkZWZlcnJlZFtpXSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1Npbmtp
bmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhkZWZlcnJlZEF0SGVh
ZFtzdWNjZXNzb3JdW2ldLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0KQEAgLTM1MiwxMCArMzUyLDEwIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAg
IE9wZXJhbmRzPFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKj4gb3BlcmFuZFRvVmFyaWFibGUoCiAg
ICAgICAgICAgICBPcGVyYW5kc0xpa2UsIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVh
ZCk7Ci0gICAgICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+IGluZGV4VG9PcGVyYW5kOworICAg
ICAgICBWZWN0b3I8T3BlcmFuZD4gaW5kZXhUb09wZXJhbmQ7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQuc2l6ZSgpOyBpLS07KSB7Ci0g
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZChtX2dyYXBoLmJsb2NrKDApLT52YXJp
YWJsZXNBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpKTsKLSAgICAgICAgICAgIAorICAgICAgICAg
ICAgT3BlcmFuZCBvcGVyYW5kID0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm9w
ZXJhbmRGb3JJbmRleChpKTsKKwogICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUq
IHZhcmlhYmxlID0gc3NhQ2FsY3VsYXRvci5uZXdWYXJpYWJsZSgpOwogICAgICAgICAgICAgb3Bl
cmFuZFRvVmFyaWFibGUub3BlcmFuZChvcGVyYW5kKSA9IHZhcmlhYmxlOwogICAgICAgICAgICAg
QVNTRVJUKGluZGV4VG9PcGVyYW5kLnNpemUoKSA9PSB2YXJpYWJsZS0+aW5kZXgoKSk7CkBAIC0z
NzAsMTIgKzM3MCwxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdGFjazoK
ICAgICAgICAgICAgICAgICAgICAgcHV0U3RhY2tzVG9TaW5rLmFkZChub2RlKTsKICAgICAgICAg
ICAgICAgICAgICAgc3NhQ2FsY3VsYXRvci5uZXdEZWYoCi0gICAgICAgICAgICAgICAgICAgICAg
ICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2Nh
bCksCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG5v
ZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSwKICAgICAgICAgICAgICAgICAgICAgICAg
IGJsb2NrLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOgogICAgICAgICAgICAgICAgICAgICBz
c2FDYWxjdWxhdG9yLm5ld0RlZigKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1Zh
cmlhYmxlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nl
c3NEYXRhKCktPm9wZXJhbmQpLAogICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2ssIG5vZGUp
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgpA
QCAtMzg2LDcgKzM4Niw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIHNzYUNhbGN1bGF0
b3IuY29tcHV0ZVBoaXMoCiAgICAgICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxl
KiB2YXJpYWJsZSwgQmFzaWNCbG9jayogYmxvY2spIC0+IE5vZGUqIHsKLSAgICAgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRl
eCgpXTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFt2
YXJpYWJsZS0+aW5kZXgoKV07CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYg
KCFsaXZlQXRIZWFkW2Jsb2NrXS5vcGVyYW5kKG9wZXJhbmQpKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKQEAgLTM5Nyw3ICszOTcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgaWYgKCFpc0NvbmNyZXRlKGZvcm1hdCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNl
SW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIkFkZGluZyBQaGkgZm9yICIsIG9wZXJhbmQsICIgYXQgIiwg
cG9pbnRlckR1bXAoYmxvY2spLCAiXG4iKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBOb2RlKiBwaGlOb2RlID0gbV9ncmFwaC5hZGROb2RlKFNwZWNIZWFwVG9wLCBQaGksIGJs
b2NrLT5hdCgwKS0+b3JpZ2luLndpdGhJbnZhbGlkRXhpdCgpKTsKQEAgLTQxMSw3ICs0MTEsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBtYXBwaW5nLmZpbGwobnVsbHB0cik7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtYXBwaW5nLnNpemUoKTsgaS0tOykgewot
ICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKG1hcHBpbmcub3BlcmFuZEZv
ckluZGV4KGkpKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQobWFwcGluZy5vcGVy
YW5kRm9ySW5kZXgoaSkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFNTQUNh
bGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQo
b3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6RGVmKiBkZWYgPSBzc2FD
YWxjdWxhdG9yLnJlYWNoaW5nRGVmQXRIZWFkKGJsb2NrLCB2YXJpYWJsZSk7CkBAIC00MjEsMTUg
KzQyMSwxNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG9wZXJh
bmQpID0gZGVmLT52YWx1ZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmcgYXQg
dG9wIG9mICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIjogIiwgbWFwcGluZywgIlxuIik7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBz
c2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhibG9jaykpIHsKLSAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3BoaURlZi0+dmFyaWFibGUoKS0+
aW5kZXgoKV07CisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gaW5kZXhUb09wZXJh
bmRbcGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KDAsIHBoaURlZi0+dmFsdWUoKSk7CiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNl
SW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIiAgIE1hcHBpbmcgIiwgb3BlcmFuZCwgIiB0byAiLCBwaGlE
ZWYtPnZhbHVlKCksICJcbiIpOwogICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChvcGVy
YW5kKSA9IHBoaURlZi0+dmFsdWUoKTsKICAgICAgICAgICAgIH0KQEAgLTQzNywxNSArNDM3LDE1
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGRlZmVycmVkID0gZGVmZXJyZWRBdEhlYWRbYmxvY2td
OwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBi
bG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBibG9jay0+YXQobm9kZUluZGV4KTsKLSAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tT
aW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiRGVmZXJyZWQgYXQgIiwgbm9kZSwgIjoi
LCBkZWZlcnJlZCwgIlxuIik7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdGFjazogewogICAg
ICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vz
c0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBk
YXRhLT5sb2NhbDsKKyAgICAgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gZGF0YS0+
b3BlcmFuZDsKICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9
IGRhdGEtPmZvcm1hdDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2lu
Z1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTWFwcGluZyAiLCBvcGVyYW5k
LCAiIHRvICIsIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgIiBhdCAiLCBub2RlLCAiXG4iKTsKICAg
ICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpID0gbm9kZS0+Y2hpbGQx
KCkubm9kZSgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTQ1MywxNiArNDUzLDE2
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBH
ZXRTdGFjazogewogICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBu
b2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQg
Zm9ybWF0ID0gZGVmZXJyZWQub3BlcmFuZChkYXRhLT5sb2NhbCk7CisgICAgICAgICAgICAgICAg
ICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCk7
CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNDb25jcmV0ZShmb3JtYXQpKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgsIG5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3Bl
cmFuZChkYXRhLT5sb2NhbCkgIT0gQ29uZmxpY3RpbmdGbHVzaCwgZGVmZXJyZWQub3BlcmFuZChk
YXRhLT5sb2NhbCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJh
bmQoZGF0YS0+b3BlcmFuZCkgIT0gQ29uZmxpY3RpbmdGbHVzaCwgZGVmZXJyZWQub3BlcmFuZChk
YXRhLT5vcGVyYW5kKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhlcmUgaXMgbm8gZGVmZXJyYWwuIE5vIGRlZmVycmFs
IG1lYW5zIHRoYXQgdGhlIG1vc3QKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF1dGhvcml0
YXRpdmUgdmFsdWUgZm9yIHRoaXMgc3RhY2sgc2xvdCBpcyB3aGF0IGlzIHN0b3JlZCBpbiB0aGUg
c3RhY2suIFNvLAogICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2VlcCB0aGUgR2V0U3RhY2su
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQoZGF0YS0+bG9jYWwpID0g
bm9kZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChkYXRhLT5vcGVy
YW5kKSA9IG5vZGU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTQ3MiwyMCArNDcyLDIwIEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBzdG9yZWQgYW5kIGdldCByaWQgb2Yg
dGhlIEdldFN0YWNrLgogICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5v
ZGUsIGZvcm1hdCA9PSBkYXRhLT5mb3JtYXQsIGZvcm1hdCwgZGF0YS0+Zm9ybWF0KTsKICAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5nID0gbWFw
cGluZy5vcGVyYW5kKGRhdGEtPmxvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogaW5j
b21pbmcgPSBtYXBwaW5nLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCk7CiAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMSgpID0gaW5jb21pbmctPmRlZmF1bHRFZGdlKCk7CiAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0lkZW50aXR5KCk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGNhc2UgS2lsbFN0
YWNrOiB7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+dW5saW5r
ZWRMb2NhbCgpKSA9IENvbmZsaWN0aW5nRmx1c2g7CisgICAgICAgICAgICAgICAgICAgIGRlZmVy
cmVkLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gQ29uZmxpY3RpbmdGbHVzaDsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgICAgICAgICAg
YXV0byBlc2NhcGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6
OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAo
T3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJGb3IgIiwgbm9kZSwgIiBlc2Nh
cGluZyAiLCBvcGVyYW5kLCAiXG4iKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9w
ZXJhbmQuaXNIZWFkZXIoKSkKQEAgLTQ5OSw3ICs0OTksNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gR290dGEgaW5zZXJ0IGEgUHV0U3RhY2suCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIkluc2VydGluZyBhIFB1dFN0YWNrIGZvciAiLCBvcGVyYW5kLCAiIGF0ICIsIG5v
ZGUsICJcbiIpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZyA9IG1h
cHBpbmcub3BlcmFuZChvcGVyYW5kKTsKQEAgLTUxMyw3ICs1MTMsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVhZEZsdXNo
OwogICAgICAgICAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gd3Jp
dGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAg
ICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvYWRW
YXJhcmdzIGFuZCBGb3J3YXJkVmFyYXJncyBhcmUgdW5jb25kaXRpb25hbCB3cml0ZXMgdG8gdGhl
IHN0YWNrCkBAIC01MjEsMTMgKzUyMSwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBsb2NhdGlvbnMgdGhleSB3cml0ZSB0by4gVGhpcyBtYWtlcyB0aG9zZSBzdGFjayBs
b2NhdGlvbnMgZGVhZCByaWdodCAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlZm9yZSBh
IExvYWRWYXJhcmdzL0ZvcndhcmRWYXJhcmdzLiBUaGlzIG1lYW5zIHdlIHNob3VsZCBuZXZlciBz
aW5rCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQdXRTdGFja3MgcmlnaHQgdG8gdGhpcyBw
b2ludC4KLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkg
PT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFZhcmFyZ3NMZW5n
dGggfHwgbm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZvcndhcmRW
YXJhcmdzKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFu
ZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgICAg
ICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSgKICAgICAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIsIHdyaXRlSGFuZGxlciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyLCBMYXp5Tm9kZSkgeyB9KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCwgTGF6eU5vZGUpIHsgfSk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0gfQogICAgICAgICAgICAgfQpAQCAt
NTM5LDggKzUzOSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0
b3I6OkRlZiogcGhpRGVmIDogc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soc3VjY2Vzc29yQmxv
Y2spKSB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBwaGlEZWYtPnZhbHVl
KCk7CiAgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJs
ZSA9IHBoaURlZi0+dmFyaWFibGUoKTsKLSAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFt2YXJpYWJsZS0+aW5kZXgoKV07Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3Nl
KQorICAgICAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFt2
YXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ3JlYXRpbmcgVXBzaWxvbiBmb3IgIiwgb3Bl
cmFuZCwgIiBhdCAiLCBwb2ludGVyRHVtcChibG9jayksICItPiIsIHBvaW50ZXJEdW1wKHN1Y2Nl
c3NvckJsb2NrKSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1h
dCA9IGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3NvckJsb2NrXS5vcGVyYW5kKG9wZXJhbmQpOwogICAg
ICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIGlzQ29uY3JldGUo
Zm9ybWF0KSwgZm9ybWF0KTsKQEAgLTU4NSw3ICs1ODUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQ
aGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAg
ICAgICBkYXRhTG9nKCJHcmFwaCBhZnRlciBQdXRTdGFjayBzaW5raW5nOlxuIik7CiAgICAgICAg
ICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCmluZGV4IDIzZDRiOTQ1MzEwNjY2
NTBhOGFkOTBlZTUxYWE1YmRiMmUyOWNlYzUuLmNhOTkwMjYxYzkzMzViOTkyZWQwNjI5OWY3NTEz
OTFlMGEyNzdmNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NB
Q29udmVyc2lvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NT
QUNvbnZlcnNpb25QaGFzZS5jcHAKQEAgLTE1OCw3ICsxNTgsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIGNoaWxkTm9kZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
LT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgICAgICAgICBHZXRTdGFjaywgbm9kZS0+
b3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdGFja0Fj
Y2Vzc0RhdGEuYWRkKHZhcmlhYmxlLT5sb2NhbCgpLCB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fc3RhY2tBY2Nlc3NE
YXRhLmFkZCh2YXJpYWJsZS0+b3BlcmFuZCgpLCB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkpKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKQogICAgICAgICAgICAgICAg
ICAgICAgICAgbV9hcmd1bWVudEdldHRlcnMuYWRkKGNoaWxkTm9kZSk7CiAgICAgICAgICAgICAg
ICAgICAgIG1fYXJndW1lbnRNYXBwaW5nLmFkZChub2RlLCBjaGlsZE5vZGUpOwpAQCAtMTc4LDcg
KzE3OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlID0gbV92YXJpYWJsZUZvclNTQUluZGV4W3NzYVZhcmlhYmxlLT5pbmRleCgpXTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBQcnVuZSBieSBsaXZlbmVzcy4gVGhp
cyBkb2Vzbid0IGJ1eSB1cyBtdWNoIG90aGVyIHRoYW4gY29tcGlsZSB0aW1lcy4KLSAgICAgICAg
ICAgICAgICBOb2RlKiBoZWFkTm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCh2
YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgICAgICAgICAgICAgTm9kZSogaGVhZE5vZGUgPSBibG9j
ay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSk7CiAgICAgICAg
ICAgICAgICAgaWYgKCFoZWFkTm9kZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKQEAgLTMwMCw3ICszMDAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoIW5vZGUtPnJlcGxhY2VtZW50KCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiTWFwcGluZzogIiwgVmlydHVhbFJlZ2lzdGVyKHZhbHVlRm9yT3BlcmFuZC5vcGVy
YW5kRm9ySW5kZXgoaSkpLCAiIC0+ICIsIG5vZGUsICJcbiIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiTWFwcGluZzogIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmRGb3JJbmRl
eChpKSwgIiAtPiAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JP
cGVyYW5kW2ldID0gbm9kZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0z
MTMsMTEgKzMxMywxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVGb3JTU0FJbmRleFtwaGlEZWYtPnZhcmlhYmxlKCkt
PmluZGV4KCldOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydChwaGlJbnNlcnRpb25Qb2ludCwgcGhpRGVmLT52YWx1ZSgpKTsKLSAgICAgICAg
ICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBwaGlE
ZWYtPnZhbHVlKCk7CisgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFy
aWFibGUtPm9wZXJhbmQoKSkgPSBwaGlEZWYtPnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAg
ICAgICAgcGhpSW5zZXJ0aW9uUG9pbnQsIFNwZWNOb25lLCBNb3ZIaW50LCBibG9jay0+YXQoMCkt
Pm9yaWdpbi53aXRoSW52YWxpZEV4aXQoKSwKLSAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZh
cmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKSwgcGhpRGVmLT52YWx1ZSgpLT5kZWZhdWx0RWRnZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmlhYmxlLT5vcGVyYW5kKCkpLCBwaGlE
ZWYtPnZhbHVlKCktPmRlZmF1bHRFZGdlKCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBpZiAoYmxvY2stPmF0KDApLT5vcmlnaW4uZXhpdE9LKQpAQCAtMzM3LDcgKzMzNyw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6IHsKICAgICAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGVJbmRleCwgU3BlY05vbmUsIEtpbGxTdGFjaywgbm9kZS0+b3JpZ2luLAotICAgICAgICAgICAg
ICAgICAgICAgICAgT3BJbmZvKG5vZGUtPnVubGlua2VkTG9jYWwoKS5vZmZzZXQoKSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSk7CiAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5leGl0T0sgPSBmYWxzZTsgLy8gS2lsbFN0
YWNrIGNsb2JiZXJzIGV4aXQuCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIH0KQEAgLTM0OSwxOSArMzQ5LDE5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgaWYgKCEhKG5vZGUtPmZsYWdzKCkgJiBOb2RlSXNGbHVzaGVkKSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUHV0U3RhY2soCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQoCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5sb2NhbCgpLCB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQo
KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+b3BlcmFuZCgp
LCB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlbW92ZShtX2dyYXBoKTsKICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiTWFwcGluZzogIiwgdmFyaWFibGUtPmxvY2FsKCksICIg
LT4gIiwgY2hpbGQsICJcbiIpOwotICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQu
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBjaGlsZDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIHZhcmlhYmxlLT5vcGVyYW5kKCksICIgLT4gIiwgY2hp
bGQsICJcbiIpOworICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2
YXJpYWJsZS0+b3BlcmFuZCgpKSA9IGNoaWxkOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRH
ZXR0ZXJzLmNvbnRhaW5zKG5vZGUpKTsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVy
YW5kLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSA9IG5vZGU7CisgICAg
ICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNz
RGF0YSgpLT5vcGVyYW5kKSA9IG5vZGU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC0zNzEsOCArMzcxLDggQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
cmVtb3ZlKG1fZ3JhcGgpOwogICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIlJlcGxhY2luZyBub2RlICIsIG5vZGUsICIgd2l0
aCAiLCB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSksICJcbiIpOwot
ICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRSZXBsYWNlbWVudCh2YWx1ZUZvck9wZXJhbmQu
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygiUmVwbGFjaW5nIG5vZGUgIiwgbm9kZSwgIiB3aXRoICIsIHZhbHVlRm9yT3BlcmFuZC5v
cGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAg
bm9kZS0+c2V0UmVwbGFjZW1lbnQodmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9w
ZXJhbmQoKSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMzg1LDcgKzM4NSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDogewogICAgICAgICAgICAgICAgICAgICBBU1NF
UlQobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpOwogICAgICAgICAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gdmFsdWVGb3JP
cGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLT5kZWZhdWx0RWRnZSgpOworICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZh
cmlhYmxlLT5vcGVyYW5kKCkpLT5kZWZhdWx0RWRnZSgpOwogICAgICAgICAgICAgICAgICAgICBu
b2RlLT5yZW1vdmUobV9ncmFwaCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KQEAgLTQyNSwxMiArNDI1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgLy8gaXMgbm90IGV4aXRPSy4KICAgICAgICAgICAgICAgICAgICAgVXNlS2luZCB1c2VL
aW5kID0gdW5jaGVja2VkVXNlS2luZEZvcihmb3JtYXQpOwogCi0gICAgICAgICAgICAgICAgICAg
IGRhdGFMb2dMbklmKHZlcmJvc2UsICJJbnNlcnRpbmcgVXBzaWxvbiBmb3IgIiwgdmFyaWFibGUt
PmxvY2FsKCksICIgcHJvcGFnYXRpbmcgIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFi
bGUtPmxvY2FsKCkpLCAiIHRvICIsIHBoaU5vZGUpOworICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nTG5JZih2ZXJib3NlLCAiSW5zZXJ0aW5nIFVwc2lsb24gZm9yICIsIHZhcmlhYmxlLT5vcGVy
YW5kKCksICIgcHJvcGFnYXRpbmcgIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUt
Pm9wZXJhbmQoKSksICIgdG8gIiwgcGhpTm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAg
ICAgICAgICAgICAgdXBzaWxvbkluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgVXBzaWxvbiwgdXBz
aWxvbk9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhwaGlOb2RlKSwgRWRn
ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2
YXJpYWJsZS0+bG9jYWwoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JP
cGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdXNlS2luZCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKaW5kZXggZjkxYmE0
OGY1ODg5ZDU0M2NmOTliZmFiZjQ3ZDFjMDMzOGE0OWVmZS4uMjAzMzg3YjY2NTY0ODZjMDY1Mzk5
ZTFlMWNkYmUwYjljMzU1ZTZlYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTYWZlVG9FeGVjdXRlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
YWZlVG9FeGVjdXRlLmgKQEAgLTMyMyw2ICszMjMsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJz
dHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdu
bwogICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICBjYXNlIFRhaWxD
YWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgIGNhc2UgQ29uc3RydWN0VmFyYXJn
czoKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBj
YXNlIENhbGxGb3J3YXJkVmFyYXJnczoKICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdz
OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApp
bmRleCBlYmYzYjZiY2VmOGE1MjdjOTNjOGZkMzhhM2RhMmJmNTFjNGU0ZWFiLi4wNzAyNGNkYjQw
NjU0OWIyNmFmMjc3ZjMzMzg5NTUyNWU2NGJkZTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtMTc3OCw3ICsxNzc4LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQoTm9kZSogbm9kZSkKICAgICBOb2RlKiBj
aGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICBub3RpY2VPU1JCaXJ0aChjaGlsZCk7
CiAgICAgCi0gICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50Ojptb3ZIaW50
KE1pbmlmaWVkSUQoY2hpbGQpLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKTsKKyAgICBtX3N0cmVh
bS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQoTWluaWZpZWRJRChjaGlsZCks
IG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVDaGVja05ldXRlcmVkKE5vZGUqIG5vZGUpCkBAIC0xODQzLDcgKzE4NDMsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKCkKICAgICBtX3N0YXRlLmJlZ2lu
QmFzaWNCbG9jayhtX2Jsb2NrKTsKICAgICAKICAgICBmb3IgKHNpemVfdCBpID0gbV9ibG9jay0+
dmFyaWFibGVzQXRIZWFkLnNpemUoKTsgaS0tOykgewotICAgICAgICBpbnQgb3BlcmFuZCA9IG1f
YmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgIE9wZXJh
bmQgb3BlcmFuZCA9IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kRm9ySW5kZXgoaSk7
CiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV07CiAgICAg
ICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBObyBuZWVkIHRvIHJlY29y
ZCBkZWFkIFNldExvY2FsJ3MuCkBAIC0xODUzLDExICsxODUzLDggQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jaygpCiAgICAgICAgIGlmICghbm9kZS0+cmVmQ291bnQo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBObyBuZWVkIHRvIHJlY29yZCBkZWFkIFNldExv
Y2FsJ3MuCiAgICAgICAgIGZvcm1hdCA9IGRhdGFGb3JtYXRGb3IodmFyaWFibGUtPmZsdXNoRm9y
bWF0KCkpOwotICAgICAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKAotICAgICAgICAgICAgVmFy
aWFibGVFdmVudDo6c2V0TG9jYWwoCi0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKG9w
ZXJhbmQpLAotICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwKLSAgICAg
ICAgICAgICAgICBmb3JtYXQpKTsKKyAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBu
b2RlLCAhb3BlcmFuZC5pc0FyZ3VtZW50KCkgfHwgb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS50
b0FyZ3VtZW50KCkgPj0gMCk7CisgICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFi
bGVFdmVudDo6c2V0TG9jYWwob3BlcmFuZCwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLCBmb3Jt
YXQpKTsKICAgICB9CiAKICAgICBtX29yaWdpbiA9IE5vZGVPcmlnaW4oKTsKQEAgLTE5MzcsNyAr
MTkzNCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcygpCiAgICAg
ICAgIGlmIChmb3JtYXQgPT0gRmx1c2hlZEpTVmFsdWUpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSB2YXJp
YWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCk7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXIgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIo
KTsKKyAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3Rlci5pc0FyZ3VtZW50KCkpOwogCiAgICAg
ICAgIEpTVmFsdWVTb3VyY2UgdmFsdWVTb3VyY2UgPSBKU1ZhbHVlU291cmNlKEpJVENvbXBpbGVy
OjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlcikpOwogICAgICAgICAKQEAgLTczNjAsNTQgKzcz
NTgsNTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNldEZ1bmN0aW9uTmFtZShOb2Rl
KiBub2RlKQogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlTG9hZFZhcmFyZ3MoTm9kZSogbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVWYXJhcmdzTGVuZ3RoKE5vZGUqIG5vZGUpCiB7CiAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRh
ID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAKICAgICBKU1ZhbHVlUmVncyBhcmd1bWVudHNS
ZWdzOwotICAgIHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgYXJndW1lbnRzUmVncyA9IGFyZ3VtZW50cy5qc1ZhbHVlUmVn
cygpOwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgIH0KKyAgICBsb2NrKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9k
ZS0+YXJndW1lbnRzQ2hpbGQoKSk7CisgICAgYXJndW1lbnRzUmVncyA9IGFyZ3VtZW50cy5qc1Zh
bHVlUmVncygpOworICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgdW5sb2NrKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKTsKIAogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2l6ZU9mVmFyYXJn
cywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBh
cmd1bWVudHNSZWdzLCBkYXRhLT5vZmZzZXQpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7
CiAKICAgICBsb2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICB7Ci0gICAgICAgIEpT
VmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIGFy
Z3VtZW50c1JlZ3MgPSBhcmd1bWVudHMuanNWYWx1ZVJlZ3MoKTsKLSAgICAgICAgZmx1c2hSZWdp
c3RlcnMoKTsKLSAgICB9CisgICAgR1BSVGVtcG9yYXJ5IGFyZ0NvdW50SW5jbHVkaW5nVGhpcyh0
aGlzKTsKKyAgICBHUFJSZWcgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSID0gYXJnQ291bnRJbmNs
dWRpbmdUaGlzLmdwcigpOwogICAgIHVubG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAK
LSAgICAvLyBGSVhNRTogVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSB3aWxsIGNhbGwgYW4gZWZm
ZWN0ZnVsIGxlbmd0aCBwcm9wZXJ0eSB0d2ljZS4gVGhpcyBpcyBzYWZlCi0gICAgLy8gZnJvbSB0
aGUgc3RhbmRwb2ludCBvZiB0aGUgVk0ncyBpbnRlZ3JpdHksIGJ1dCBpdCdzIHN1YnRseSB3cm9u
ZyBmcm9tIGEgc3BlYyBjb21wbGlhbmNlCi0gICAgLy8gc3RhbmRwb2ludC4gVGhlIGJlc3Qgc29s
dXRpb24gd291bGQgYmUgb25lIHdoZXJlIHdlIGNhbiBleGl0ICppbnRvKiB0aGUgb3BfY2FsbF92
YXJhcmdzIHJpZ2h0Ci0gICAgLy8gcGFzdCB0aGUgc2l6aW5nLgotICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE0NDgKKyAgICBtX2ppdC5hZGQzMihUcnVz
dGVkSW1tMzIoMSksIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBhcmdDb3VudEluY2x1ZGluZ1Ro
aXNHUFIpOwogCi0gICAgR1BSUmVnIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiA9Ci0gICAgICAg
IEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBh
cmd1bWVudHNSZWdzKTsKKyAgICBpbnQzMlJlc3VsdChhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIs
IG5vZGUpOyAgCit9CiAKLSAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIpOwordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKE5vZGUqIG5vZGUpCit7CisgICAgTG9hZFZhcmFy
Z3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisKKyAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgYXJndW1lbnRDb3VudCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7ICAg
IAorICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5hcmd1bWVudHNDaGls
ZCgpKTsKKyAgICBHUFJSZWcgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENv
dW50LmdwcigpOworICAgIEpTVmFsdWVSZWdzIGFyZ3VtZW50c1JlZ3MgPSBhcmd1bWVudHMuanNW
YWx1ZVJlZ3MoKTsKIAogICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgIFZhcmFyZ3NPdmVy
ZmxvdywgSlNWYWx1ZVNvdXJjZSgpLCBFZGdlKCksIG1faml0LmJyYW5jaDMyKAotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLAotICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsCi0gICAgICAgICAgICBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIpKTsKKyAgICAgICAg
VmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVkZ2UoKSwgbV9qaXQuYnJhbmNoVGVz
dDMyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisgICAgICAgICAgICBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogCiAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAg
ICAgVmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVkZ2UoKSwgbV9qaXQuYnJhbmNo
MzIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsCi0gICAgICAgICAgICBhcmdD
b3VudEluY2x1ZGluZ1RoaXNHUFIsCisgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywKICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihkYXRhLT5saW1pdCkpKTsKIAotICAgIG1f
aml0LnN0b3JlMzIoYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSLCBKSVRDb21waWxlcjo6cGF5bG9h
ZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKKyAgICBmbHVzaFJlZ2lzdGVycygpOworCisgICAg
bV9qaXQuc3RvcmUzMihhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgSklUQ29tcGlsZXI6OnBh
eWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CiAKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkxvYWRWYXJhcmdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgZGF0YS0+bWFjaGlu
ZVN0YXJ0Lm9mZnNldCgpLCBhcmd1bWVudHNSZWdzLCBkYXRhLT5vZmZzZXQsIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCBkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkxvYWRWYXJhcmdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgZGF0YS0+
bWFjaGluZVN0YXJ0Lm9mZnNldCgpLCBhcmd1bWVudHNSZWdzLCBkYXRhLT5vZmZzZXQsIGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCBkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKICAgICBtX2pp
dC5leGNlcHRpb25DaGVjaygpOwogCiAgICAgbm9SZXN1bHQobm9kZSk7CkBAIC03NDE3LDE3ICs3
NDE2LDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVGb3J3YXJkVmFyYXJncyhOb2Rl
KiBub2RlKQogewogICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdz
RGF0YSgpOwogICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lOwotICAgIGlmIChu
b2RlLT5jaGlsZDEoKSkKLSAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+Y2hpbGQxKCkt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICBpZiAobm9kZS0+YXJndW1l
bnRzQ2hpbGQoKSkKKyAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+YXJndW1lbnRzQ2hp
bGQoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogICAgIGVsc2UKICAgICAg
ICAgaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZSgpOwogCisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGFyZ3VtZW50Q291bnQodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSBsZW5ndGgodGhpcyk7CiAgICAg
SlNWYWx1ZVJlZ3NUZW1wb3JhcnkgdGVtcCh0aGlzKTsKLSAgICBHUFJSZWcgbGVuZ3RoR1BSID0g
bGVuZ3RoLmdwcigpOworICAgIEdQUlJlZyBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGFy
Z3VtZW50Q291bnQuZ3ByKCk7CisgICAgR1BSUmVnIGxlbmd0aEdQUiA9IGFyZ3VtZW50Q291bnQu
Z3ByKCk7CiAgICAgSlNWYWx1ZVJlZ3MgdGVtcFJlZ3MgPSB0ZW1wLnJlZ3MoKTsKLSAgICAgICAg
Ci0gICAgZW1pdEdldExlbmd0aChpbmxpbmVDYWxsRnJhbWUsIGxlbmd0aEdQUiwgLyogaW5jbHVk
ZVRoaXMgPSAqLyB0cnVlKTsKKyAgICAKKyAgICBtX2ppdC5tb3ZlKGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzLCBsZW5ndGhHUFIpOwogICAgIGlmIChkYXRhLT5vZmZzZXQpCiAgICAgICAgIG1f
aml0LnN1YjMyKFRydXN0ZWRJbW0zMihkYXRhLT5vZmZzZXQpLCBsZW5ndGhHUFIpOwogICAgICAg
ICAKQEAgLTc1ODYsNyArNzU4Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVh
dGVEaXJlY3RBcmd1bWVudHMoTm9kZSogbm9kZSkKICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUg
PSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgaWYgKGlubGlu
ZUNhbGxGcmFtZQogICAgICAgICAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewot
ICAgICAgICBrbm93bkxlbmd0aCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgLSAxOworICAgICAgICBrbm93bkxlbmd0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7CiAgICAg
ICAgIGxlbmd0aElzS25vd24gPSB0cnVlOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGtub3duTGVu
Z3RoID0gVUlOVF9NQVg7CkBAIC0xMjQ5MSw3ICsxMjQ5Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhOb2RlKiBub2RlKQogICAg
IGlmIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPmFyZ3VtZW50c0lu
bGluZUNhbGxGcmFtZSgpKQogICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKICAgICBlbHNlCi0gICAgICAgIGFyZ3Vt
ZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyk7CisgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAgIG1faml0LmxvYWQz
MihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIpLCByZXN1bHQu
Z3ByKCkpOwogICAgIGludDMyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKaW5kZXggMjIyMzAzNDQ3
ZWM0NmRjYTZmMDljNDc5OTg3OTM5Yjc2MmM4MzBiMi4uNGEyZjBmNzQ5NjkzOGFiY2IzYjYyYmIw
ZjY0MDQ0NTliOGYzYmMxZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaApAQCAtMTM5NSw2ICsxMzk1LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29t
cGlsZVNldEZ1bmN0aW9uTmFtZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTmV3UmVnZXhwKE5v
ZGUqKTsKICAgICB2b2lkIGNvbXBpbGVGb3J3YXJkVmFyYXJncyhOb2RlKik7CisgICAgdm9pZCBj
b21waWxlVmFyYXJnc0xlbmd0aChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTG9hZFZhcmFyZ3Mo
Tm9kZSopOwogICAgIHZvaWQgY29tcGlsZUNyZWF0ZUFjdGl2YXRpb24oTm9kZSopOwogICAgIHZv
aWQgY29tcGlsZUNyZWF0ZURpcmVjdEFyZ3VtZW50cyhOb2RlKik7CkBAIC0xNjczLDE1ICsxNjc0
LDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhZ2VUeXBlZEFycmF5U3RvcmFnZShHUFJSZWcsIEdQ
UlJlZyk7CiAgICAgCiAgICAgdm9pZCByZWNvcmRTZXRMb2NhbCgKLSAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGJ5dGVjb2RlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZywgRGF0YUZvcm1h
dCBmb3JtYXQpCisgICAgICAgIE9wZXJhbmQgYnl0ZWNvZGVSZWcsIFZpcnR1YWxSZWdpc3RlciBt
YWNoaW5lUmVnLCBEYXRhRm9ybWF0IGZvcm1hdCkKICAgICB7CisgICAgICAgIEFTU0VSVCghYnl0
ZWNvZGVSZWcuaXNBcmd1bWVudCgpIHx8IGJ5dGVjb2RlUmVnLnZpcnR1YWxSZWdpc3RlcigpLnRv
QXJndW1lbnQoKSA+PSAwKTsKICAgICAgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJs
ZUV2ZW50OjpzZXRMb2NhbChieXRlY29kZVJlZywgbWFjaGluZVJlZywgZm9ybWF0KSk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgcmVjb3JkU2V0TG9jYWwoRGF0YUZvcm1hdCBmb3JtYXQpCiAgICAg
ewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9jdXJyZW50Tm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIHJlY29yZFNldExvY2FsKHZhcmlhYmxlLT5s
b2NhbCgpLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCksIGZvcm1hdCk7CisgICAgICAgIHJlY29y
ZFNldExvY2FsKHZhcmlhYmxlLT5vcGVyYW5kKCksIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwg
Zm9ybWF0KTsKICAgICB9CiAKICAgICBHZW5lcmF0aW9uSW5mbyYgZ2VuZXJhdGlvbkluZm9Gcm9t
VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApp
bmRleCA5ZTY1MGM4MzIwNzFkZDcwZjI5OTRhYmM0YTI4Yjg1MGFiZDVmZjQwLi41MTYyOTE3Nzli
ZWE0NGExYTYxOGY3YTc1NmRjYWFmMzY3ZWFmNTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKQEAgLTE4MjgsNyArMTgy
OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
YnJlYWs7CiAKICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpOworICAgICAgICBBYnN0cmFjdFZh
bHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpOwogCiAgICAgICAg
IC8vIElmIHRoZSBDRkEgaXMgdHJhY2tpbmcgdGhpcyB2YXJpYWJsZSBhbmQgaXQgZm91bmQgdGhh
dCB0aGUgdmFyaWFibGUKICAgICAgICAgLy8gY2Fubm90IGhhdmUgYmVlbiBhc3NpZ25lZCwgdGhl
biBkb24ndCBhdHRlbXB0IHRvIHByb2NlZWQuCkBAIC0xOTEyLDcgKzE5MTIsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBj
YXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgcmVjb3JkU2V0TG9jYWwobV9jdXJyZW50Tm9kZS0+
dW5saW5rZWRMb2NhbCgpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdERlYWQpOworICAg
ICAgICByZWNvcmRTZXRMb2NhbChtX2N1cnJlbnROb2RlLT51bmxpbmtlZE9wZXJhbmQoKSwgVmly
dHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXREZWFkKTsKICAgICAgICAgbm9SZXN1bHQobm9kZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTM4MzQsNiArMzgzNCwxMSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGVtaXRDYWxsKG5vZGUpOwog
ICAgICAgICBicmVhazsKIAorICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAgICAgICBjb21w
aWxlVmFyYXJnc0xlbmd0aChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2Fz
ZSBMb2FkVmFyYXJnczogewogICAgICAgICBjb21waWxlTG9hZFZhcmFyZ3Mobm9kZSk7CiAgICAg
ICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAKaW5kZXggNDQ3MzkyNTQwNDcyOGRmYTYzNzE1NzExMzk5MWJmYzFmNDMzYjdj
Ni4uNDZiMTFkYWIyMWY1MTIzZDUwNmRmNTNjZTM1YjI0N2U1MWZlOGEzYSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBAIC0xOTM2
LDcgKzE5MzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICBBYnN0cmFjdFZh
bHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChub2RlLT5sb2NhbCgpKTsKKyAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKTsKIAog
ICAgICAgICAvLyBJZiB0aGUgQ0ZBIGlzIHRyYWNraW5nIHRoaXMgdmFyaWFibGUgYW5kIGl0IGZv
dW5kIHRoYXQgdGhlIHZhcmlhYmxlCiAgICAgICAgIC8vIGNhbm5vdCBoYXZlIGJlZW4gYXNzaWdu
ZWQsIHRoZW4gZG9uJ3QgYXR0ZW1wdCB0byBwcm9jZWVkLgpAQCAtMjAwNyw3ICsyMDA3LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAg
CiAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgIHJlY29yZFNldExvY2FsKG1fY3VycmVu
dE5vZGUtPnVubGlua2VkTG9jYWwoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXREZWFk
KTsKKyAgICAgICAgcmVjb3JkU2V0TG9jYWwobV9jdXJyZW50Tm9kZS0+dW5saW5rZWRPcGVyYW5k
KCksIFZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0RGVhZCk7CiAgICAgICAgIG5vUmVzdWx0
KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00NDc0LDYgKzQ0NzQsMTEgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBlbWl0Q2FsbChu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsKKyAgICAg
ICAgY29tcGlsZVZhcmFyZ3NMZW5ndGgobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwog
ICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKICAgICAgICAgY29tcGlsZUxvYWRWYXJhcmdzKG5vZGUp
OwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RhY2tMYXlvdXRQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
YWNrTGF5b3V0UGhhc2UuY3BwCmluZGV4IDE2OGIzZGY0MzM0NjU3ZTZhYWRiNjRiYmY2MzNlZWM1
YWZhMWIwNDQuLjZlMDk0OWIwZmE4YzA4NzExNzUzYmIxYzZhN2YyYTMyNmQwMmExOTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcApA
QCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIHRyZWF0IGEgdmFyaWFibGUgYXMg
YmVpbmcgInVzZWQiIGlmIHRoZXJlIGV4aXN0cyBhbiBhY2Nlc3MgdG8gaXQgKFNldExvY2FsLCBH
ZXRMb2NhbCwKICAgICAgICAgLy8gRmx1c2gsIFBoYW50b21Mb2NhbCkuCiAgICAgICAgIAotICAg
ICAgICBCaXRWZWN0b3IgdXNlZExvY2FsczsKKyAgICAgICAgT3BlcmFuZHM8Ym9vbD4gdXNlZE9w
ZXJhbmRzKDAsIGdyYXBoKCkubV9sb2NhbFZhcnMsIGdyYXBoKCkubV90bXBzLCBmYWxzZSk7CiAg
ICAgICAgIAogICAgICAgICAvLyBDb2xsZWN0IHRob3NlIHZhcmlhYmxlcyB0aGF0IGFyZSB1c2Vk
IGZyb20gSVIuCiAgICAgICAgIGJvb2wgaGFzTm9kZXNUaGF0TmVlZEZpeHVwID0gZmFsc2U7CkBA
IC02NywyMyArNjcsMjIgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CiAg
ICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6IHsKICAgICAgICAgICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OwotICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkuaXNBcmd1bWVudCgp
KQorICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPm9wZXJhbmQoKS5pc0FyZ3VtZW50
KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
dXNlZExvY2Fscy5zZXQodmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSwgdHJ1
ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAg
ICAgICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgIExv
YWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoZGF0YS0+Y291bnQuaXNMb2NhbCgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgdXNlZExvY2Fscy5zZXQoZGF0YS0+Y291bnQudG9Mb2NhbCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoZGF0YS0+Y291bnQsIHRydWUpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoZGF0YS0+c3RhcnQuaXNMb2NhbCgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBUaGlzIHBhcnQgcmVhbGx5IHJlbGllcyBvbiB0aGUgY29udGlndWl0
eSBvZiBzdGFjayBsYXlvdXQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2lnbm1lbnRz
LgogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5z
dGFydC5vZmZzZXQoKSArIGRhdGEtPmxpbWl0IC0gMSkuaXNMb2NhbCgpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KSAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoZGF0
YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS50b0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFy
dC5vZmZzZXQoKSArIGkpLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgfSAvLyB0aGUgZWxz
ZSBjYXNlIHNob3VsZG4ndCBoYXBwZW4uCiAgICAgICAgICAgICAgICAgICAgIGhhc05vZGVzVGhh
dE5lZWRGaXh1cCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTIsOSAr
OTEsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdGFjazoKICAgICAgICAg
ICAgICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNz
RGF0YSogc3RhY2sgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHN0YWNrLT5sb2NhbC5pc0FyZ3VtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIGlm
IChzdGFjay0+b3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoc3RhY2stPmxvY2FsLnRv
TG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKHN0
YWNrLT5vcGVyYW5kLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTEwOCwyMSArMTA3LDIxIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gKml0
ZXI7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFy
YXJncygpKSB7Ci0gICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVhbFJlZ2lzdGVy
KAotICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSk7CisgICAg
ICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKAorICAg
ICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLCB0cnVlKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IGlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRzV2l0aEZpeHVwLnNpemUoKTsgYXJndW1lbnQtLTspIHsKLSAg
ICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoCisgICAgICAgICAg
ICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKAogICAgICAgICAg
ICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkg
KwotICAgICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xv
Y2FsKCkpOworICAgICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
KSwgdHJ1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFZl
Y3Rvcjx1bnNpZ25lZD4gYWxsb2NhdGlvbih1c2VkTG9jYWxzLnNpemUoKSk7CisgICAgICAgIFZl
Y3Rvcjx1bnNpZ25lZD4gYWxsb2NhdGlvbih1c2VkT3BlcmFuZHMuc2l6ZSgpKTsKICAgICAgICAg
bV9ncmFwaC5tX25leHRNYWNoaW5lTG9jYWwgPSBjb2RlQmxvY2soKS0+Y2FsbGVlU2F2ZVNwYWNl
QXNWaXJ0dWFsUmVnaXN0ZXJzKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1
c2VkTG9jYWxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIXVzZWRMb2NhbHMuZ2V0
KGkpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkT3BlcmFuZHMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghdXNlZE9wZXJhbmRzLmdldEZvck9wZXJhbmRJ
bmRleChpKSkgewogICAgICAgICAgICAgICAgIGFsbG9jYXRpb25baV0gPSBVSU5UX01BWDsKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTEzNSw0OSArMTM0LDUw
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmICghdmFyaWFibGUtPmlzUm9vdCgpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFi
bGUtPmxvY2FsKCkuaXNBcmd1bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgdmFyaWFibGUtPm1h
Y2hpbmVMb2NhbCgpID0gdmFyaWFibGUtPmxvY2FsKCk7CisgICAgICAgICAgICBpZiAodmFyaWFi
bGUtPm9wZXJhbmQoKS5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICB2YXJpYWJsZS0+
bWFjaGluZUxvY2FsKCkgPSB2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpOwog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBzaXplX3QgbG9jYWwgPSB2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCk7Ci0g
ICAgICAgICAgICBpZiAobG9jYWwgPj0gYWxsb2NhdGlvbi5zaXplKCkpCisgICAgICAgICAgICBP
cGVyYW5kIG9wZXJhbmQgPSB2YXJpYWJsZS0+b3BlcmFuZCgpOworICAgICAgICAgICAgc2l6ZV90
IGluZGV4ID0gdXNlZE9wZXJhbmRzLm9wZXJhbmRJbmRleChvcGVyYW5kKTsKKyAgICAgICAgICAg
IGlmIChpbmRleCA+PSBhbGxvY2F0aW9uLnNpemUoKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25bbG9jYWxdID09IFVJ
TlRfTUFYKQorICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25baW5kZXhdID09IFVJTlRfTUFYKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICB2YXJp
YWJsZS0+bWFjaGluZUxvY2FsKCkgPSBhc3NpZ24oYWxsb2NhdGlvbiwgdmFyaWFibGUtPmxvY2Fs
KCkpOworICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gYXNzaWduKHVzZWRP
cGVyYW5kcywgYWxsb2NhdGlvbiwgdmFyaWFibGUtPm9wZXJhbmQoKSk7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIGZvciAoU3RhY2tBY2Nlc3NEYXRhKiBkYXRhIDogbV9ncmFwaC5tX3N0
YWNrQWNjZXNzRGF0YSkgewotICAgICAgICAgICAgaWYgKCFkYXRhLT5sb2NhbC5pc0xvY2FsKCkp
IHsKLSAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lTG9jYWwgPSBkYXRhLT5sb2NhbDsKKyAg
ICAgICAgICAgIGlmIChkYXRhLT5vcGVyYW5kLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAg
ICAgIGRhdGEtPm1hY2hpbmVMb2NhbCA9IGRhdGEtPm9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEtPmxvY2FsLnRvTG9jYWwo
KSkgPj0gYWxsb2NhdGlvbi5zaXplKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBpZiAoYWxsb2NhdGlvbltkYXRhLT5sb2NhbC50b0xvY2FsKCldID09IFVJTlRfTUFY
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGRhdGEtPm9wZXJh
bmQuaXNMb2NhbCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4o
ZGF0YS0+b3BlcmFuZC50b0xvY2FsKCkpID49IGFsbG9jYXRpb24uc2l6ZSgpKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoYWxsb2NhdGlvbltkYXRh
LT5vcGVyYW5kLnRvTG9jYWwoKV0gPT0gVUlOVF9NQVgpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBkYXRhLT5t
YWNoaW5lTG9jYWwgPSBhc3NpZ24oYWxsb2NhdGlvbiwgZGF0YS0+bG9jYWwpOworICAgICAgICAg
ICAgZGF0YS0+bWFjaGluZUxvY2FsID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwg
ZGF0YS0+b3BlcmFuZCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghbV9ncmFw
aC5uZWVkc1Njb3BlUmVnaXN0ZXIoKSkKICAgICAgICAgICAgIGNvZGVCbG9jaygpLT5zZXRTY29w
ZVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcigpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
Y29kZUJsb2NrKCktPnNldFNjb3BlUmVnaXN0ZXIoYXNzaWduKGFsbG9jYXRpb24sIGNvZGVCbG9j
aygpLT5zY29wZVJlZ2lzdGVyKCkpKTsKKyAgICAgICAgICAgIGNvZGVCbG9jaygpLT5zZXRTY29w
ZVJlZ2lzdGVyKGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIGNvZGVCbG9jaygpLT5z
Y29wZVJlZ2lzdGVyKCkpKTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1f
aW5saW5lVmFyaWFibGVEYXRhLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgSW5saW5lVmFy
aWFibGVEYXRhIGRhdGEgPSBtX2dyYXBoLm1faW5saW5lVmFyaWFibGVEYXRhW2ldOwogICAgICAg
ICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBkYXRhLmlubGluZUNhbGxG
cmFtZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNW
YXJhcmdzKCkpIHsKLSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnRSZWdpc3RlciA9IGFzc2lnbigKLSAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbiwgVmly
dHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKKyAgICAg
ICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlciA9IGFzc2ln
bih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpKTsKKwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IGlubGluZUNhbGxG
cmFtZS0+YXJndW1lbnRzV2l0aEZpeHVwLnNpemUoKTsgYXJndW1lbnQtLTspIHsKICAgICAgICAg
ICAgICAgICBBcmd1bWVudFBvc2l0aW9uJiBwb3NpdGlvbiA9IG1fZ3JhcGgubV9hcmd1bWVudFBv
c2l0aW9uc1sKICAgICAgICAgICAgICAgICAgICAgZGF0YS5hcmd1bWVudFBvc2l0aW9uU3RhcnQg
KyBhcmd1bWVudF07CkBAIC0yMTUsOCArMjE1LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEZvcndhcmRW
YXJhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEg
PSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEt
Pm1hY2hpbmVDb3VudCA9IGFzc2lnbihhbGxvY2F0aW9uLCBkYXRhLT5jb3VudCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lU3RhcnQgPSBhc3NpZ24oYWxsb2NhdGlvbiwg
ZGF0YS0+c3RhcnQpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZUNvdW50
ID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgZGF0YS0+Y291bnQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZVN0YXJ0ID0gYXNzaWduKHVzZWRPcGVyYW5k
cywgYWxsb2NhdGlvbiwgZGF0YS0+c3RhcnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIApAQCAt
MjMxLDE3ICsyMzEsMTYgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgYXNzaWduKGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIGFsbG9jYXRpb24sIFZpcnR1
YWxSZWdpc3RlciBzcmMpCisgICAgVmlydHVhbFJlZ2lzdGVyIGFzc2lnbihjb25zdCBPcGVyYW5k
czxib29sPiYgdXNlZE9wZXJhbmRzLCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBhbGxvY2F0aW9u
LCBPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
ID0gc3JjOwotICAgICAgICBpZiAocmVzdWx0LmlzTG9jYWwoKSkgewotICAgICAgICAgICAgdW5z
aWduZWQgbXlBbGxvY2F0aW9uID0gYWxsb2NhdGlvbltyZXN1bHQudG9Mb2NhbCgpXTsKLSAgICAg
ICAgICAgIGlmIChteUFsbG9jYXRpb24gPT0gVUlOVF9NQVgpCi0gICAgICAgICAgICAgICAgcmVz
dWx0ID0gVmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgcmVzdWx0ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobXlBbGxvY2F0aW9uKTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3Vt
ZW50KCkpCisgICAgICAgICAgICByZXR1cm4gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKKwor
ICAgICAgICBzaXplX3Qgb3BlcmFuZEluZGV4ID0gdXNlZE9wZXJhbmRzLm9wZXJhbmRJbmRleChv
cGVyYW5kKTsKKyAgICAgICAgdW5zaWduZWQgbXlBbGxvY2F0aW9uID0gYWxsb2NhdGlvbltvcGVy
YW5kSW5kZXhdOworICAgICAgICBpZiAobXlBbGxvY2F0aW9uID09IFVJTlRfTUFYKQorICAgICAg
ICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICByZXR1cm4gdmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwobXlBbGxvY2F0aW9uKTsKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcApp
bmRleCAxOGU2N2U3NjI1NzFjZGJhNWVlYmYxZTBmYzRmOTE4N2JmMzI1ZDU3Li5iM2U0MWQ4ZDdl
MWRlMzZlMjcxNjEzYTQ2MjU1NzZjOWY2NmU3NjJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAKQEAgLTI4NSwx
NyArMjg1LDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIE5vZGUqIHNldExvY2FsID0gbnVsbHB0cjsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBsb2NhbCA9IG1fbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFu
ZCA9IG1fbm9kZS0+b3BlcmFuZCgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX25vZGVJbmRleDsgaS0tOykgewogICAgICAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBtX2Jsb2NrLT5hdChpKTsKIAotICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09
IFNldExvY2FsICYmIG5vZGUtPmxvY2FsKCkgPT0gbG9jYWwpIHsKKyAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCAmJiBub2RlLT5vcGVyYW5kKCkgPT0gb3BlcmFuZCkg
ewogICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbCA9IG5vZGU7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChhY2Nl
c3Nlc092ZXJsYXAobV9ncmFwaCwgbm9kZSwgQWJzdHJhY3RIZWFwKFN0YWNrLCBsb2NhbCkpKQor
ICAgICAgICAgICAgICAgIGlmIChhY2Nlc3Nlc092ZXJsYXAobV9ncmFwaCwgbm9kZSwgQWJzdHJh
Y3RIZWFwKFN0YWNrLCBvcGVyYW5kKSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Ro
dW5rcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKaW5kZXgg
NmFjYWZiZjNiZjUzNWM5Njk2YmU2NDhhMjA3MGI2ZWU2ZjRmOGJmOS4uZjFiMWZmNjRkZGE1M2Nm
NDU5NjcwNGVlYjgzMTVmMTZiZmJlOTA5ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VGh1bmtzLmNwcApAQCAtNDAsMTQgKzQwLDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRU
aHVua0dlbmVyYXRvcihWTSYgdm0pCi17Ci0gICAgQ0NhbGxIZWxwZXJzIGppdChudWxscHRyKTsK
LSAgICBqaXQucHJvYmUoT1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQsICZ2bSk7Ci0gICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJTkFM
SVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiREZHIE9TUiBleGl0IHRodW5r
Iik7Ci19Ci0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdEdl
bmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdChu
dWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCmluZGV4IDA1YTUwYTU0
YjI1ZDUxZGJjYjE4NThmZTdhYWRjYTQ4NjgyMDVkOWUuLjhiNWMzZjAxYTQ4NTIwYjdhYWFhYWVi
YWZmOTNjM2IyNmNjZDk4NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVGh1bmtzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaApA
QCAtMzUsNyArMzUsNiBAQCBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIERGRyB7CiAKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5rR2VuZXJhdG9yKFZNJik7
CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRHZW5lcmF0aW9u
VGh1bmtHZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gb3NyRW50cnlUaHVua0dlbmVyYXRvcihWTSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAppbmRleCAwZTI1
ZDdkMTRiZTVmZDRhYTQwOTFmZDk4MTNmMTRkMGRjZjg2NmVkLi43NTI4ZTVlNDAyZjZhNDE4Mjhj
M2VjYmI5Y2JhZDhhZjU1NmQ5ZTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKQEAgLTE0Niw3ICsxNDYsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyLT52YWx1ZS5tX3N0cnVjdHVy
ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjaGVja09wID0gQ2hlY2tTdHJ1Y3R1
cmU7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU3BlY0NlbGxDaGVjayAmIFNwZWNFbXB0
eSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9
IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5sb2NhbCgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobG9jYWwgLSAo
aW5saW5lQ2FsbEZyYW1lID8gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDApKSA9PSB2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyB8dGhpc3wgY2FuIGJlIHRoZSBURFogdmFsdWUuIFRoZSBjYWxsIGVudHJ5cG9p
bnQgd29uJ3QgaGF2ZSB8dGhpc3wgYXMgVERaLApAQCAtMTY4LDggKzE2OCw4IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCi0gICAgICAgICAgICAgICAgICAgIGlmIChibG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID09IG5vZGUpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFy
aWFibGUtPmxvY2FsKCkpID0gZ2V0TG9jYWw7CisgICAgICAgICAgICAgICAgICAgIGlmIChibG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkgPT0gbm9kZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2
YXJpYWJsZS0+b3BlcmFuZCgpKSA9IGdldExvY2FsOwogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC5zdWJzdGl0dXRlR2V0TG9jYWwoKmJsb2NrLCBpbmRl
eEluQmxvY2ssIHZhcmlhYmxlLCBnZXRMb2NhbCk7CiAgICAgICAgICAgICAgICAgICAgIApAQCAt
NDQ4LDcgKzQ0OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1
ZXMgPSBtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzKCk7CiAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4
KGkpOworICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMu
b3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+
dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFu
b2RlKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYWxpZGF0ZS5jcHAKaW5kZXggN2VhOTM0ODlkZWFjMTc0YWU3MmVmNTY4ZjNhY2U2
NTVhYWRmZTk0Ny4uMzcxNWY3MjViNTViMjZjZjdjNjQ4MjVhMTRlZmMwMDRkOTBlM2U1NyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKQEAgLTQ4Myw3ICs0ODMs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+cGhpc1tp
XTsKICAgICAgICAgICAgICAgICBBU1NFUlQocGhpc0luVGhpc0Jsb2NrLmNvbnRhaW5zKG5vZGUp
KTsKICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG5vZGUtPm9wKCkgPT0gUGhpKTsK
LSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBub2RlLT5sb2NhbCgpOwor
ICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5vZGUtPm9wZXJhbmQoKTsKICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9ncmFwaC5udW1DaGlsZHJlbihu
b2RlKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFBoaSBjaGlsZHJlbiBpbiBMb2Fk
U3RvcmUgZm9ybSBhcmUgaW52YWxpZC4KICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
bV9mb3JtID09IExvYWRTdG9yZSAmJiBibG9jay0+aXNQaGlJbmRleChpKSkKQEAgLTUxOSwxMCAr
NTE5LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9
IDA7IGsgPCBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgKytrKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmV2QmxvY2sgPSBibG9jay0+cHJlZGVjZXNzb3JzW2td
OwogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGJsb2NrLT5wcmVkZWNlc3NvcnNb
a10pLCBwcmV2QmxvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogcHJldk5vZGUg
PSBwcmV2QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGxvY2FsKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIHByZXZOb2RlID0gcHJldkJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
b3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUg
YSBQaGkgdGhhdCBpcyBub3QgcmVmZXJyaW5nIHRvICp0aGlzKiBibG9jayB0aGVuIGFsbCBwcmVk
ZWNlc3NvcnMKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG11c3QgaGF2ZSB0aGF0IGxvY2Fs
IGF2YWlsYWJsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxv
Y2ssIGJsb2NrLT5wcmVkZWNlc3NvcnNba10pLCBwcmV2Tm9kZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgob3BlcmFuZCwgYmxvY2ssIGJsb2NrLT5wcmVkZWNlc3NvcnNba10p
LCBwcmV2Tm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHByZXZOb2RlLT5v
cCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKQEAgLTUzMywxMSArNTMzLDExIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+c2hvdWxkR2VuZXJhdGUo
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2st
PnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFZBTElEQVRFKChvcGVyYW5kLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUtPnNob3VsZEdlbmVy
YXRlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvY2FsLCBibG9jay0+
cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KG9wZXJhbmQsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRMb2NhbAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50RGVmaW5pdGVs
eQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFNldEFy
Z3VtZW50TWF5YmUKQEAgLTU0NywxOSArNTQ3LDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50IGl0IGNhbm5vdCByZWZlciBpbnRvIHRo
aXMgYmxvY2suCi0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2Nr
LT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwgIXByZXZCbG9jay0+aXNJbkJsb2NrKGVkZ2Uu
bm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgob3BlcmFuZCwgYmxv
Y2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLCAhcHJldkJsb2NrLT5pc0luQmxvY2soZWRn
ZS5ub2RlKCkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBmb3VuZCk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBP
cGVyYW5kczxzaXplX3Q+IGdldExvY2FsUG9zaXRpb25zKAotICAgICAgICAgICAgICAgIGJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwKLSAgICAgICAgICAgICAgICBi
bG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOwotICAgICAgICAgICAgT3Bl
cmFuZHM8c2l6ZV90PiBzZXRMb2NhbFBvc2l0aW9ucygKLSAgICAgICAgICAgICAgICBibG9jay0+
dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksCi0gICAgICAgICAgICAgICAgYmxv
Y2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgICAgIE9wZXJh
bmRzPHNpemVfdD4gZ2V0TG9jYWxQb3NpdGlvbnMoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFi
bGVzQXRIZWFkKTsKKyAgICAgICAgICAgIE9wZXJhbmRzPHNpemVfdD4gc2V0TG9jYWxQb3NpdGlv
bnMoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFibGVzQXRIZWFk
Lm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgewogICAgICAgICAgICAgICAgIFZBTElEQVRFKCh2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSwgYmxvY2spLCAhYmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5hcmd1bWVudChpKSB8fCBibG9jay0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpLT5h
Y2Nlc3Nlc1N0YWNrKG1fZ3JhcGgpKTsKQEAgLTY2OCwyNCArNjY0LDI0IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgIGlmICghbV9teVJlZkNvdW50cy5nZXQobm9kZSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
bV9mb3JtID09IFRocmVhZGVkQ1BTKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgobm9kZSwgYmxvY2spLCBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkp
ID09IG5vdFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgYmxv
Y2spLCBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPT0gbm90U2V0
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBibG9jayksICEhbm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGJs
b2NrKSwgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gU2V0QXJndW1lbnREZWZpbml0ZWx5IHx8IG5v
ZGUtPmNoaWxkMSgpLT5vcCgpID09IFBoaSk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9
IGk7CisgICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+
b3BlcmFuZCgpKSA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgcmVjb3JkIHRo
ZSBmaXJzdCBTZXRMb2NhbC4gVGhlcmUgbWF5IGJlIG11bHRpcGxlIFNldExvY2FscwogICAgICAg
ICAgICAgICAgICAgICAvLyBiZWNhdXNlIG9mIGZsdXNoaW5nLgotICAgICAgICAgICAgICAgICAg
ICBpZiAoc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSAhPSBub3RTZXQp
CisgICAgICAgICAgICAgICAgICAgIGlmIChzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUt
Pm9wZXJhbmQoKSkgIT0gbm90U2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwo
KSkgPSBpOworICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5v
ZGUtPm9wZXJhbmQoKSkgPSBpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICBjYXNlIFNldEFyZ3VtZW50RGVmaW5pdGVseToKICAgICAgICAgICAgICAgICAgICAg
Ly8gVGhpcyBhY3RzIGxpa2UgYSByZXNldC4gSXQncyBvayB0byBoYXZlIGEgc2Vjb25kIEdldExv
Y2FsIGZvciBhIGxvY2FsIGluIHRoZSBzYW1lCiAgICAgICAgICAgICAgICAgICAgIC8vIGJsb2Nr
IGlmIHdlIGhhZCBhIFNldEFyZ3VtZW50RGVmaW5pdGVseSBmb3IgdGhhdCBsb2NhbC4KLSAgICAg
ICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9
IG5vdFNldDsKLSAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChu
b2RlLT5sb2NhbCgpKSA9IG5vdFNldDsKKyAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3Np
dGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0gbm90U2V0OworICAgICAgICAgICAgICAg
ICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBub3RTZXQ7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgU2V0QXJn
dW1lbnRNYXliZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC05NjgsMjYgKzk2NCwy
NiBAQCBwcml2YXRlOgogICAgICAgICBkYXRhTG9nKG5vZGUsICIgLT4gIiwgZWRnZSk7CiAgICAg
fQogICAgIAotICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoVmlydHVhbFJlZ2lzdGVy
IGxvY2FsLCBCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250
ZXh0KE9wZXJhbmQgb3BlcmFuZCwgQmFzaWNCbG9jayogYmxvY2spCiAgICAgewogICAgICAgICBp
ZiAoIWJsb2NrKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKGxvY2FsLCAiIGluIG51bGwgQmxvY2sg
Iik7CisgICAgICAgICAgICBkYXRhTG9nKG9wZXJhbmQsICIgaW4gbnVsbCBCbG9jayAiKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGRhdGFMb2cobG9jYWwsICIg
aW4gQmxvY2sgIiwgKmJsb2NrKTsKKyAgICAgICAgZGF0YUxvZyhvcGVyYW5kLCAiIGluIEJsb2Nr
ICIsICpibG9jayk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRl
eHQoCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgQmFzaWNCbG9jayogc291cmNlQmxv
Y2ssIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uQmxvY2spCisgICAgICAgIE9wZXJhbmQgb3BlcmFu
ZCwgQmFzaWNCbG9jayogc291cmNlQmxvY2ssIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uQmxvY2sp
CiAgICAgewotICAgICAgICBkYXRhTG9nKGxvY2FsLCAiIGluIEJsb2NrICIsICpzb3VyY2VCbG9j
aywgIiAtPiAiLCAqZGVzdGluYXRpb25CbG9jayk7CisgICAgICAgIGRhdGFMb2cob3BlcmFuZCwg
IiBpbiBCbG9jayAiLCAqc291cmNlQmxvY2ssICIgLT4gIiwgKmRlc3RpbmF0aW9uQmxvY2spOwog
ICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KAotICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEJhc2ljQmxvY2sqIHNvdXJjZUJsb2NrLCBOb2RlKiBwcmV2
Tm9kZSkKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5kLCBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9jaywg
Tm9kZSogcHJldk5vZGUpCiAgICAgewotICAgICAgICBkYXRhTG9nKHByZXZOb2RlLCAiIGZvciAi
LCBsb2NhbCwgIiBpbiBCbG9jayAiLCAqc291cmNlQmxvY2spOworICAgICAgICBkYXRhTG9nKHBy
ZXZOb2RlLCAiIGZvciAiLCBvcGVyYW5kLCAiIGluIEJsb2NrICIsICpzb3VyY2VCbG9jayk7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoTm9kZSogbm9kZSwg
QmFzaWNCbG9jayogYmxvY2spCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAppbmRleCAwM2U4OTIwZjJmNmYzZWU4YmEx
NDg2YjBiZDc3NjU2MWYxMGU1OTRjLi43NGVhNjE4ZTkwMTEyOWE1N2UyYzgzYmI4OTJhNzViN2I4
MDYzM2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NG
b3J3YXJkaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFy
YXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKQEAgLTQxLDExICs0MSw5IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAogbmFtZXNwYWNlIHsKIAotbmFtZXNwYWNlIERGR1ZhcmFyZ3NG
b3J3YXJkaW5nUGhhc2VJbnRlcm5hbCB7Ci1zdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9
IGZhbHNlOwotfQogCiBjbGFzcyBWYXJhcmdzRm9yd2FyZGluZ1BoYXNlIDogcHVibGljIFBoYXNl
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogcHVibGljOgog
ICAgIFZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UoR3JhcGgmIGdyYXBoKQogICAgICAgICA6IFBoYXNl
KGdyYXBoLCAidmFyYXJncyBmb3J3YXJkaW5nIikKQEAgLTU2LDcgKzU0LDcgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCBtX2dyYXBoLm1fZm9y
bSAhPSBTU0EpOwogICAgICAgICAKLSAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhh
c2VJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAg
ICAgZGF0YUxvZygiR3JhcGggYmVmb3JlIHZhcmFyZ3MgZm9yd2FyZGluZzpcbiIpOwogICAgICAg
ICAgICAgbV9ncmFwaC5kdW1wKCk7CiAgICAgICAgIH0KQEAgLTg4LDcgKzg2LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgLy8gV2UgZXhwZWN0IGNhbGxzIGludG8gdGhpcyBmdW5jdGlvbiB0byBiZSBy
YXJlLiBTbywgdGhpcyBpcyB3cml0dGVuIGluIGEgc2ltcGxlIE8obikgbWFubmVyLgogICAgICAg
ICAKICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gYmxvY2stPmF0KGNhbmRpZGF0ZU5vZGVJbmRl
eCk7Ci0gICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJv
c2UpCisgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygiSGFuZGxpbmcg
Y2FuZGlkYXRlICIsIGNhbmRpZGF0ZSwgIlxuIik7CiAgICAgICAgIAogICAgICAgICAvLyBXZSBl
bGltaW5hdGUgR2V0QnV0dGVyZmx5IG92ZXIgQ3JlYXRlQ2xvbmVkQXJndW1lbnRzIGlmIHRoZSBi
dXR0ZXJmbHkgaXMgb25seQpAQCAtMTA1LDcgKzEwMyw3IEBAIHByaXZhdGU6CiAKICAgICAgICAg
ICAgIGF1dG8gZGVmYXVsdEVzY2FwZSA9IFsmXSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fZ3Jh
cGgudXNlcyhub2RlLCBjYW5kaWRhdGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdW
YXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEVz
Y2FwZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICAgICAgfQpAQCAtMTE3LDkgKzExNSwxMCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSAh
PSBjYW5kaWRhdGUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UoIW5vZGUtPnVubGlua2VkT3BlcmFuZCgpLmlzVG1wKCksICJX
ZSBkb24ndCBjdXJyZW50bHkgc3VwcG9ydCBhIHRtcCByZWZlcnJpbmcgdG8gYW4gYXJndW1lbnRz
IG9iamVjdC4iKTsKICAgICAgICAgICAgICAgICBsYXN0VXNlckluZGV4ID0gbm9kZUluZGV4Owot
ICAgICAgICAgICAgICAgIGlmICghcmVsZXZhbnRMb2NhbHMuY29udGFpbnMobm9kZS0+dW5saW5r
ZWRMb2NhbCgpKSkKLSAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbHMuYXBwZW5kKG5v
ZGUtPnVubGlua2VkTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFyZWxldmFudExvY2Fs
cy5jb250YWlucyhub2RlLT51bmxpbmtlZE9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSkpCisg
ICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxzLmFwcGVuZChub2RlLT51bmxpbmtlZE9w
ZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIENoZWNrVmFyYXJnczoKQEAgLTE0MCwxMyAr
MTM5LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBzYXdFc2NhcGUgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICBpZiAoc2F3RXNj
YXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNl
SW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEVzY2FwZSBhdCAiLCBub2RlLCAiXG4i
KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6
CiAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudXNlcyhub2RlLCBjYW5kaWRhdGUpKQogICAg
ICAgICAgICAgICAgICAgICBsYXN0VXNlckluZGV4ID0gbm9kZUluZGV4OwpAQCAtMTU3LDcgKzE1
Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKICAgICAg
ICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2FuZGlkYXRlIHx8IG5vZGUtPmNoaWxkMigpID09IGNh
bmRpZGF0ZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQ
aGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBFc2NhcGUgYXQgIiwgbm9kZSwg
IlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBA
IC0xNjcsNyArMTY3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
IGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNh
bmRpZGF0ZSAmJiBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNMb2FkZWRGcm9tKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5h
bDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRXNjYXBlIGF0ICIsIG5vZGUsICJcbiIpOwogICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtMjI2LDcgKzIy
Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIXZhbGlkR2V0QnlPZmZzZXQpIHsKICAg
ICAgICAgICAgICAgICBmb3IgKE5vZGUqIGJ1dHRlcmZseSA6IGNhbmRpZGF0ZUJ1dHRlcmZsaWVz
KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnVzZXMobm9kZSwgYnV0dGVyZmx5
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhh
c2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBCdXR0ZXJmbHkgZXNj
YXBlZCBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjM1LDExICsyMzUsMTEgQEAgcHJpdmF0ZToKIAog
ICAgICAgICAgICAgZm9yQWxsS2lsbGVkT3BlcmFuZHMoCiAgICAgICAgICAgICAgICAgbV9ncmFw
aCwgbm9kZSwgYmxvY2stPnRyeUF0KG5vZGVJbmRleCArIDEpLAotICAgICAgICAgICAgICAgIFsm
XSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFy
YXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiICAgIEtpbGxpbmcgIiwgcmVnLCAiIHdoaWxlIHdlIGFyZSBpbnRlcmVz
dGVkIGluICIsIGxpc3REdW1wKHJlbGV2YW50TG9jYWxzKSwgIlxuIik7CisgICAgICAgICAgICAg
ICAgWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgS2lsbGluZyAiLCBvcGVy
YW5kLCAiIHdoaWxlIHdlIGFyZSBpbnRlcmVzdGVkIGluICIsIGxpc3REdW1wKHJlbGV2YW50TG9j
YWxzKSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCByZWxldmFudExvY2Fscy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHJlbGV2YW50TG9jYWxzW2ldID09IHJlZykgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG9wZXJhbmQgPT0gcmVsZXZhbnRMb2NhbHNbaV0pIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZWxldmFudExvY2Fsc1tpLS1dID0gcmVsZXZhbnRMb2NhbHMubGFzdCgpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxzLnJlbW92ZUxhc3QoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0VXNlckluZGV4ID0gbm9kZUluZGV4OwpAQCAt
MjQ3LDcgKzI0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB9KTsKICAgICAgICAgfQotICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQ
aGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAg
IGRhdGFMb2coIlNlbGVjdGVkIGxhc3RVc2VySW5kZXggPSAiLCBsYXN0VXNlckluZGV4LCAiLCAi
LCBibG9jay0+YXQobGFzdFVzZXJJbmRleCksICJcbiIpOwogICAgICAgICAKICAgICAgICAgLy8g
V2UncmUgc3RpbGwgaW4gYnVzaW5lc3MuIERldGVybWluZSBpZiBiZXR3ZWVuIHRoZSBjYW5kaWRh
dGUgYW5kIHRoZSBsYXN0IHVzZXIgdGhlcmUgaXMgYW55CkBAIC0yNjMsMTYgKzI2MywxNiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAgICAgICAgY2FzZSBab21i
aWVIaW50OgogICAgICAgICAgICAgY2FzZSBLaWxsU3RhY2s6Ci0gICAgICAgICAgICAgICAgaWYg
KGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT51bmxpbmtlZExvY2Fs
KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNl
SW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVT
dGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICAgSW50ZXJmZXJlbmNlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRTdGFjazoKLSAgICAgICAgICAgICAg
ICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPnN0YWNrQWNj
ZXNzRGF0YSgpLT5sb2NhbCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NG
b3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAoYXJn
dW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgp
LT5vcGVyYW5kKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnRlcmZlcmVuY2UgYXQgIiwgbm9kZSwgIlxu
Iik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBAIC0y
ODAsOCArMjgwLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNh
c2UgU2V0TG9jYWw6CiAgICAgICAgICAgICBjYXNlIEZsdXNoOgotICAgICAgICAgICAgICAgIGlm
IChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+bG9jYWwoKSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5h
bDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xv
dChjYW5kaWRhdGUsIG5vZGUtPm9wZXJhbmQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgSW50ZXJmZXJl
bmNlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgfQpAQCAtMjk3LDEzICsyOTcsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWhlYXAucGF5bG9hZCgpLmlzVG9wKCkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyhoZWFwLnBheWxvYWQoKS52
YWx1ZTMyKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVT
dGFja1Nsb3QoY2FuZGlkYXRlLCByZWcpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFy
Z3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBoZWFwLm9wZXJhbmQoKSkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZG9lc0ludGVyZmVyZSA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgIE5vT3BDbG9iYmVyaXplKCkpOwogICAg
ICAgICAgICAgICAgIGlmIChkb2VzSW50ZXJmZXJlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
ICAgIEludGVyZmVyZW5jZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgICAgIH0KQEAgLTMxMSw3ICszMTAsNyBAQCBwcml2YXRlOgog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBXZSBjYW4gbWFrZSB0aGlzIHdvcmsuCi0g
ICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisg
ICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygiICAgIFdpbGwgZG8gZm9y
d2FyZGluZyFcbiIpOwogICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAKQEAgLTM0
MSw4ICszNDAsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVk
IHRvIGNoYW5nZSBhbnl0aGluZyB3aXRoIHRoZXNlLgogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkgIT0gY2FuZGlkYXRlKQorICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRU
b0lkZW50aXR5T24oZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKGluc2VydGlvblNl
dCwgY2FuZGlkYXRlLCBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbiwgLyogYWRkVGhpcyA9ICovIHRy
dWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAg
ICAgY2FzZSBMb2FkVmFyYXJnczoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkg
IT0gY2FuZGlkYXRlKQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcmd1bWVudHNDaGlsZCgp
ICE9IGNhbmRpZGF0ZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoRm9yd2FyZFZhcmFyZ3MpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YXJpYWJsZUFjY2Vzc0RhdGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJp
YWJsZUFjY2Vzc0RhdGEuY3BwCmluZGV4IDhlYmZmYjQzNWVkNGRiZjYwMmJkNjJhZWQ0YzM0MzJl
YTVhODI5MDIuLjJhYzJlZTM5YjRjY2FkMzA4MTI1YjRlNmVjYzg4YTg3YzdkMTc5ZDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5j
cHAKQEAgLTMxLDggKzMxLDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAog
VmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFjY2Vzc0RhdGEoKQotICAgIDogbV9sb2NhbChz
dGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWlu
KCkpKQotICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQorICAgIDogbV9wcmVkaWN0aW9uKFNw
ZWNOb25lKQogICAgICwgbV9hcmd1bWVudEF3YXJlUHJlZGljdGlvbihTcGVjTm9uZSkKICAgICAs
IG1fZmxhZ3MoMCkKICAgICAsIG1fc2hvdWxkTmV2ZXJVbmJveChmYWxzZSkKQEAgLTQ1LDEwICs0
NCwxMCBAQCBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNzRGF0YSgpCiAgICAgY2xl
YXJWb3RlcygpOwogfQogCi1WYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNzRGF0YShW
aXJ0dWFsUmVnaXN0ZXIgbG9jYWwpCi0gICAgOiBtX2xvY2FsKGxvY2FsKQotICAgICwgbV9wcmVk
aWN0aW9uKFNwZWNOb25lKQorVmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFjY2Vzc0RhdGEo
T3BlcmFuZCBvcGVyYW5kKQorICAgIDogbV9wcmVkaWN0aW9uKFNwZWNOb25lKQogICAgICwgbV9h
cmd1bWVudEF3YXJlUHJlZGljdGlvbihTcGVjTm9uZSkKKyAgICAsIG1fb3BlcmFuZChvcGVyYW5k
KQogICAgICwgbV9mbGFncygwKQogICAgICwgbV9zaG91bGROZXZlclVuYm94KGZhbHNlKQogICAg
ICwgbV9zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKGZhbHNlKQpAQCAtODcsNyArODYsNyBA
QCBib29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6c2hvdWxkVXNlRG91YmxlRm9ybWF0QWNjb3JkaW5n
VG9Wb3RlKCkKIHsKICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHRoaXMgZmFjaWxpdHkgZm9yIGFy
Z3VtZW50cywgeWV0LgogICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgd29yayBmb3IgYXJndW1lbnRz
LgotICAgIGlmIChsb2NhbCgpLmlzQXJndW1lbnQoKSkKKyAgICBpZiAob3BlcmFuZCgpLmlzQXJn
dW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAvLyBJZiB0aGUg
dmFyaWFibGUgaXMgbm90IGEgbnVtYmVyIHByZWRpY3Rpb24sIHRoZW4gdGhpcyBkb2Vzbid0CkBA
IC0xMjEsNyArMTIwLDcgQEAgYm9vbCBWYXJpYWJsZUFjY2Vzc0RhdGE6OnRhbGx5Vm90ZXNGb3JT
aG91bGRVc2VEb3VibGVGb3JtYXQoKQogewogICAgIEFTU0VSVChpc1Jvb3QoKSk7CiAgICAgICAg
IAotICAgIGlmIChsb2NhbCgpLmlzQXJndW1lbnQoKSB8fCBzaG91bGROZXZlclVuYm94KCkKKyAg
ICBpZiAob3BlcmFuZCgpLmlzQXJndW1lbnQoKSB8fCBzaG91bGROZXZlclVuYm94KCkKICAgICAg
ICAgfHwgKGZsYWdzKCkgJiBOb2RlQnl0ZWNvZGVVc2VzQXNBcnJheUluZGV4KSkKICAgICAgICAg
cmV0dXJuIERGRzo6bWVyZ2VEb3VibGVGb3JtYXRTdGF0ZShtX2RvdWJsZUZvcm1hdFN0YXRlLCBO
b3RVc2luZ0RvdWJsZUZvcm1hdCk7CiAgICAgCkBAIC0xNzYsNyArMTc1LDcgQEAgYm9vbCBWYXJp
YWJsZUFjY2Vzc0RhdGE6OmNvdWxkUmVwcmVzZW50SW50NTJJbXBsKCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAogICAgIC8vIFdlIHB1bnQgZm9yIG1hY2hpbmUgYXJndW1lbnRzLgotICAg
IGlmIChtX2xvY2FsLmlzQXJndW1lbnQoKSkKKyAgICBpZiAob3BlcmFuZCgpLmlzQXJndW1lbnQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIFRoZSBhcmd1bWVudC1hd2Fy
ZSBwcmVkaWN0aW9uIC0tIHdoaWNoIG1lcmdlcyBhbGwgb2YgYW4gKGlubGluZWQgb3IgbWFjaGlu
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nl
c3NEYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0
YS5oCmluZGV4IDFkMzg5MmY5ZWMwOWNiYTIwNDNmYTI1NGU2MDk0MjMyMDE0YTI4NGUuLmJlMmZi
NTQwMTM1MjY1NWI5YzdhY2IxM2JkYWVhNzU1NzNmY2VmZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaApAQCAtNDgsMTIgKzQ4LDEy
IEBAIGNsYXNzIFZhcmlhYmxlQWNjZXNzRGF0YSA6IHB1YmxpYyBVbmlvbkZpbmQ8VmFyaWFibGVB
Y2Nlc3NEYXRhPiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVmFyaWFibGVBY2Nlc3NEYXRh
KTsKIHB1YmxpYzoKICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEoVmlydHVhbFJlZ2lzdGVyIGxvY2FsKTsKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoT3Bl
cmFuZCk7CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsKCkKKyAgICBPcGVyYW5kIG9w
ZXJhbmQoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fbG9jYWwgPT0gZmluZCgpLT5tX2xvY2Fs
KTsKLSAgICAgICAgcmV0dXJuIG1fbG9jYWw7CisgICAgICAgIEFTU0VSVChtX29wZXJhbmQgPT0g
ZmluZCgpLT5tX29wZXJhbmQpOworICAgICAgICByZXR1cm4gbV9vcGVyYW5kOwogICAgIH0KICAg
ICAKICAgICBWaXJ0dWFsUmVnaXN0ZXImIG1hY2hpbmVMb2NhbCgpCkBAIC0yMDgsMTAgKzIwOCwx
MCBAQCBwcml2YXRlOgogICAgIC8vIHB1dHRpbmcgdGhlbSBoZXJlIHNpbXBsaWZpZXMgdGhlIGNv
ZGUsIGFuZCB3ZSBkb24ndCBleHBlY3QgREZHIHNwYWNlCiAgICAgLy8gdXNhZ2UgZm9yIHZhcmlh
YmxlIGFjY2VzcyBub2RlcyBkbyBiZSBzaWduaWZpY2FudC4KIAotICAgIFZpcnR1YWxSZWdpc3Rl
ciBtX2xvY2FsOwotICAgIFZpcnR1YWxSZWdpc3RlciBtX21hY2hpbmVMb2NhbDsKICAgICBTcGVj
dWxhdGVkVHlwZSBtX3ByZWRpY3Rpb247CiAgICAgU3BlY3VsYXRlZFR5cGUgbV9hcmd1bWVudEF3
YXJlUHJlZGljdGlvbjsKKyAgICBPcGVyYW5kIG1fb3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgbV9tYWNoaW5lTG9jYWw7CiAgICAgTm9kZUZsYWdzIG1fZmxhZ3M7CiAKICAgICBib29sIG1f
c2hvdWxkTmV2ZXJVbmJveDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyaWFibGVFdmVudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zhcmlh
YmxlRXZlbnQuY3BwCmluZGV4IGQzYjY2Y2JhYTYxMWZjNDA1ZWU0ZmVjMDgxMDYzN2E4OTY3OGQx
MmUuLjljZTBmNjdmOTc5NTE5OWMwNWJmMTAwODk0Zjk4NTlhZjM0OThlNmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcApAQCAtNjAsMTEgKzYw
LDExIEBAIHZvaWQgVmFyaWFibGVFdmVudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAog
ICAgICAgICBvdXQucHJpbnQoIkRlYXRoKCIsIGlkKCksICIpIik7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgTW92SGludEV2ZW50OgotICAgICAgICBvdXQucHJpbnQoIk1vdkhpbnQoIiwgaWQo
KSwgIiwgIiwgYnl0ZWNvZGVSZWdpc3RlcigpLCAiKSIpOworICAgICAgICBvdXQucHJpbnQoIk1v
dkhpbnQoIiwgaWQoKSwgIiwgIiwgb3BlcmFuZCgpLCAiKSIpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIFNldExvY2FsRXZlbnQ6CiAgICAgICAgIG91dC5wcmludCgKLSAgICAgICAgICAgICJT
ZXRMb2NhbChtYWNoaW5lOiIsIG1hY2hpbmVSZWdpc3RlcigpLCAiIC0+IGJ5dGVjb2RlOiIsIGJ5
dGVjb2RlUmVnaXN0ZXIoKSwKKyAgICAgICAgICAgICJTZXRMb2NhbChtYWNoaW5lOiIsIG1hY2hp
bmVSZWdpc3RlcigpLCAiIC0+IGJ5dGVjb2RlOiIsIG9wZXJhbmQoKSwKICAgICAgICAgICAgICIs
ICIsIGRhdGFGb3JtYXRUb1N0cmluZyhkYXRhRm9ybWF0KCkpLCAiKSIpOwogICAgICAgICBicmVh
azsKICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJpYWJsZUV2ZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxl
RXZlbnQuaAppbmRleCBjZTJjYWMwMTkyM2Y4Njg0OWIxNzhmZTA2Zjc2NzkwMzE1MTlmMDgxLi43
Yzk5MjJjOTA2YWI0NGQ3YjAzNzVmNTY5ZmNmM2UyNWU0ZjhkOGU2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaApAQCAtNjksNiArNjksMTAgQEAgZW51
bSBWYXJpYWJsZUV2ZW50S2luZCA6IHVpbnQ4X3QgewogfTsKIAogdW5pb24gVmFyaWFibGVSZXBy
ZXNlbnRhdGlvbiB7CisgICAgVmFyaWFibGVSZXByZXNlbnRhdGlvbigpIAorICAgICAgICA6IG9w
ZXJhbmQoKSAKKyAgICB7IH0KKwogICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGdwcjsK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEIGZwcjsKICNpZiBVU0UoSlNWQUxVRTMy
XzY0KQpAQCAtNzcsNyArODEsNyBAQCB1bmlvbiBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHsKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcGF5bG9hZEdQUjsKICAgICB9IHBhaXI7
CiAjZW5kaWYKLSAgICBpbnQzMl90IHZpcnR1YWxSZWc7CisgICAgT3BlcmFuZCBvcGVyYW5kOwog
fTsKIAogY2xhc3MgVmFyaWFibGVFdmVudCB7CkBAIC0xNjMsNyArMTY3LDcgQEAgcHVibGljOgog
ICAgICAgICBXaGljaFR5cGUgd2hpY2g7CiAgICAgICAgIHdoaWNoLmlkID0gaWQuYml0cygpOwog
ICAgICAgICBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uOwotICAgICAgICBy
ZXByZXNlbnRhdGlvbi52aXJ0dWFsUmVnID0gdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpOworICAg
ICAgICByZXByZXNlbnRhdGlvbi5vcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyOwogICAgICAgICBl
dmVudC5tX2tpbmQgPSBraW5kOwogICAgICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBmb3JtYXQ7
CiAgICAgICAgIGV2ZW50Lm1fd2hpY2ggPSBXVEZNb3ZlKHdoaWNoKTsKQEAgLTE4MiwxMyArMTg2
LDEzIEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgc2V0
TG9jYWwoCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBieXRlY29kZVJlZywgVmlydHVhbFJlZ2lz
dGVyIG1hY2hpbmVSZWcsIERhdGFGb3JtYXQgZm9ybWF0KQorICAgICAgICBPcGVyYW5kIGJ5dGVj
b2RlT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWcsIERhdGFGb3JtYXQgZm9ybWF0
KQogICAgIHsKICAgICAgICAgVmFyaWFibGVFdmVudCBldmVudDsKICAgICAgICAgV2hpY2hUeXBl
IHdoaWNoOwogICAgICAgICB3aGljaC52aXJ0dWFsUmVnID0gbWFjaGluZVJlZy5vZmZzZXQoKTsK
ICAgICAgICAgVmFyaWFibGVSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbjsKLSAgICAgICAg
cmVwcmVzZW50YXRpb24udmlydHVhbFJlZyA9IGJ5dGVjb2RlUmVnLm9mZnNldCgpOworICAgICAg
ICByZXByZXNlbnRhdGlvbi5vcGVyYW5kID0gYnl0ZWNvZGVPcGVyYW5kOwogICAgICAgICBldmVu
dC5tX2tpbmQgPSBTZXRMb2NhbEV2ZW50OwogICAgICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBm
b3JtYXQ7CiAgICAgICAgIGV2ZW50Lm1fd2hpY2ggPSBXVEZNb3ZlKHdoaWNoKTsKQEAgLTE5Niwx
MyArMjAwLDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGV2ZW50OwogICAgIH0KICAgICAK
LSAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBtb3ZIaW50KE1pbmlmaWVkSUQgaWQsIFZpcnR1YWxS
ZWdpc3RlciBieXRlY29kZVJlZykKKyAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBtb3ZIaW50KE1p
bmlmaWVkSUQgaWQsIE9wZXJhbmQgYnl0ZWNvZGVSZWcpCiAgICAgewogICAgICAgICBWYXJpYWJs
ZUV2ZW50IGV2ZW50OwogICAgICAgICBXaGljaFR5cGUgd2hpY2g7CiAgICAgICAgIHdoaWNoLmlk
ID0gaWQuYml0cygpOwogICAgICAgICBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0
aW9uOwotICAgICAgICByZXByZXNlbnRhdGlvbi52aXJ0dWFsUmVnID0gYnl0ZWNvZGVSZWcub2Zm
c2V0KCk7CisgICAgICAgIHJlcHJlc2VudGF0aW9uLm9wZXJhbmQgPSBieXRlY29kZVJlZzsKICAg
ICAgICAgZXZlbnQubV9raW5kID0gTW92SGludEV2ZW50OwogICAgICAgICBldmVudC5tX3doaWNo
ID0gV1RGTW92ZSh3aGljaCk7CiAgICAgICAgIGV2ZW50Lm1fcmVwcmVzZW50YXRpb24gPSBXVEZN
b3ZlKHJlcHJlc2VudGF0aW9uKTsKQEAgLTI2NiwxMyArMjcwLDEzIEBAIHB1YmxpYzoKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3BpbGxSZWdpc3RlcigpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NF
UlQobV9raW5kID09IEJpcnRoVG9TcGlsbCB8fCBtX2tpbmQgPT0gU3BpbGwpOwotICAgICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG1fcmVwcmVzZW50YXRpb24uZ2V0KCkudmlydHVhbFJlZyk7
CisgICAgICAgIHJldHVybiBtX3JlcHJlc2VudGF0aW9uLmdldCgpLm9wZXJhbmQudmlydHVhbFJl
Z2lzdGVyKCk7CiAgICAgfQotICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciBieXRlY29kZVJlZ2lz
dGVyKCkgY29uc3QKKworICAgIE9wZXJhbmQgb3BlcmFuZCgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQobV9raW5kID09IFNldExvY2FsRXZlbnQgfHwgbV9raW5kID09IE1vdkhpbnRFdmVu
dCk7Ci0gICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIobV9yZXByZXNlbnRhdGlvbi5nZXQo
KS52aXJ0dWFsUmVnKTsKKyAgICAgICAgcmV0dXJuIG1fcmVwcmVzZW50YXRpb24uZ2V0KCkub3Bl
cmFuZDsKICAgICB9CiAgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWdpc3Rlcigp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxl
RXZlbnRTdHJlYW0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2
ZW50U3RyZWFtLmNwcAppbmRleCA0YjI2Y2IwMmM5M2E5ZTgxY2ZmNDA3NDZjNjdlNzA1Y2Q1ZDIx
MGM1Li5lZjcwODc0NTFiMDM0NDcxZmFiNjE5OWYyZTEzYzA4ZWEyYWZmYzcxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAK
QEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpsb2dFdmVudChjb25z
dCBWYXJpYWJsZUV2ZW50JiBldmVudCkKIHsKICAgICBkYXRhTG9nRigic2VxIyV1OiIsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzaXplKCkpKTsKICAgICBldmVudC5kdW1wKFdURjo6ZGF0YUZpbGUo
KSk7Ci0gICAgZGF0YUxvZ0YoIiAiKTsKKyAgICBkYXRhTG9nTG4oIiAiKTsKIH0KIAogbmFtZXNw
YWNlIHsKQEAgLTEyMCwxMCArMTIwLDEyIEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06
OnJlY29uc3RydWN0KAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sIE1pbmlmaWVkR3JhcGgmIGdyYXBoLAogICAgIHVuc2lnbmVkIGluZGV4LCBPcGVyYW5k
czxWYWx1ZVJlY292ZXJ5PiYgdmFsdWVSZWNvdmVyaWVzLCBWZWN0b3I8VW5kZWZpbmVkT3BlcmFu
ZFNwYW4+KiB1bmRlZmluZWRPcGVyYW5kU3BhbnMpIGNvbnN0CiB7CisgICAgY29uc3RleHByIGJv
b2wgdmVyYm9zZSA9IGZhbHNlOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBK
SVRUeXBlOjpERkdKSVQpOwogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2Rl
QmxvY2stPmJhc2VsaW5lVmVyc2lvbigpOwogCiAgICAgdW5zaWduZWQgbnVtVmFyaWFibGVzOwor
ICAgIHVuc2lnbmVkIG51bVRtcHM7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBpbnZh
bGlkSW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CiAgICAgdW5z
aWduZWQgZmlyc3RVbmRlZmluZWQgPSBpbnZhbGlkSW5kZXg7CiAgICAgYm9vbCBmaXJzdFVuZGVm
aW5lZElzQXJndW1lbnQgPSBmYWxzZTsKQEAgLTEzMSwzNyArMTMzLDQyIEBAIHVuc2lnbmVkIFZh
cmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgIGF1dG8gZmx1c2hVbmRlZmluZWRP
cGVyYW5kU3BhbiA9IFsmXSAodW5zaWduZWQgaSkgewogICAgICAgICBpZiAoZmlyc3RVbmRlZmlu
ZWQgPT0gaW52YWxpZEluZGV4KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpbnQgZmly
c3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoZmlyc3RV
bmRlZmluZWQpLm9mZnNldCgpOwotICAgICAgICBpbnQgbGFzdE9mZnNldCA9IHZhbHVlUmVjb3Zl
cmllcy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChpIC0gMSkub2Zmc2V0KCk7CisgICAgICAgIGlu
dCBmaXJzdE9mZnNldCA9IHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9ySW5kZXgoZmlyc3RVbmRl
ZmluZWQpLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpOworICAgICAgICBpbnQgbGFzdE9mZnNl
dCA9IHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9ySW5kZXgoaSAtIDEpLnZpcnR1YWxSZWdpc3Rl
cigpLm9mZnNldCgpOwogICAgICAgICBpbnQgbWluT2Zmc2V0ID0gc3RkOjptaW4oZmlyc3RPZmZz
ZXQsIGxhc3RPZmZzZXQpOwogICAgICAgICB1bmRlZmluZWRPcGVyYW5kU3BhbnMtPmFwcGVuZCh7
IGZpcnN0VW5kZWZpbmVkLCBtaW5PZmZzZXQsIGkgLSBmaXJzdFVuZGVmaW5lZCB9KTsKICAgICAg
ICAgZmlyc3RVbmRlZmluZWQgPSBpbnZhbGlkSW5kZXg7CiAgICAgfTsKICAgICBhdXRvIHJlY29y
ZFVuZGVmaW5lZE9wZXJhbmQgPSBbJl0gKHVuc2lnbmVkIGkpIHsKICAgICAgICAgLy8gV2Ugd2Fu
dCB0byBzZXBhcmF0ZSB0aGUgc3BhbiBvZiBhcmd1bWVudHMgZnJvbSB0aGUgc3BhbiBvZiBsb2Nh
bHMgZXZlbiBpZiB0aGV5IGhhdmUgYWRqYWNlbnQgb3BlcmFuZHMgaW5kZXhlcy4KLSAgICAgICAg
aWYgKGZpcnN0VW5kZWZpbmVkICE9IGludmFsaWRJbmRleCAmJiBmaXJzdFVuZGVmaW5lZElzQXJn
dW1lbnQgIT0gdmFsdWVSZWNvdmVyaWVzLmlzQXJndW1lbnQoaSkpCisgICAgICAgIGlmIChmaXJz
dFVuZGVmaW5lZCAhPSBpbnZhbGlkSW5kZXggJiYgZmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ICE9
IHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9ySW5kZXgoaSkuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgZmx1c2hVbmRlZmluZWRPcGVyYW5kU3BhbihpKTsKIAogICAgICAgICBpZiAoZmlyc3RV
bmRlZmluZWQgPT0gaW52YWxpZEluZGV4KSB7CiAgICAgICAgICAgICBmaXJzdFVuZGVmaW5lZCA9
IGk7Ci0gICAgICAgICAgICBmaXJzdFVuZGVmaW5lZElzQXJndW1lbnQgPSB2YWx1ZVJlY292ZXJp
ZXMuaXNBcmd1bWVudChpKTsKKyAgICAgICAgICAgIGZpcnN0VW5kZWZpbmVkSXNBcmd1bWVudCA9
IHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9ySW5kZXgoaSkuaXNBcmd1bWVudCgpOwogICAgICAg
ICB9CiAgICAgfTsKIAogICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKCk7Ci0gICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgbnVtVmFy
aWFibGVzID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZy
YW1lKS0+bnVtQ2FsbGVlTG9jYWxzKCkgKyBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCkudG9Mb2NhbCgpICsgMTsKLSAgICBlbHNlCisgICAgaWYgKGlubGluZUNh
bGxGcmFtZSkgeworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJs
b2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIG51bVZhcmlh
YmxlcyA9IGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkgKyBWaXJ0dWFsUmVnaXN0ZXIoaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgpICsgMTsKKyAgICAgICAgbnVtVG1w
cyA9IGNvZGVCbG9jay0+bnVtVG1wcygpICsgaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQ7Cisg
ICAgfSBlbHNlIHsKICAgICAgICAgbnVtVmFyaWFibGVzID0gYmFzZWxpbmVDb2RlQmxvY2stPm51
bUNhbGxlZUxvY2FscygpOworICAgICAgICBudW1UbXBzID0gYmFzZWxpbmVDb2RlQmxvY2stPm51
bVRtcHMoKTsKKyAgICB9CiAgICAgCiAgICAgLy8gQ3Jhenkgc3BlY2lhbCBjYXNlOiBpZiB3ZSdy
ZSBhdCBpbmRleCA9PSAwIHRoZW4gdGhpcyBtdXN0IGJlIGFuIGFyZ3VtZW50IGNoZWNrCiAgICAg
Ly8gZmFpbHVyZSwgaW4gd2hpY2ggY2FzZSBhbGwgdmFyaWFibGVzIGFyZSBhbHJlYWR5IHNldCB1
cC4gVGhlIHJlY292ZXJpZXMgc2hvdWxkCiAgICAgLy8gcmVmbGVjdCB0aGlzLgogICAgIGlmICgh
aW5kZXgpIHsKLSAgICAgICAgdmFsdWVSZWNvdmVyaWVzID0gT3BlcmFuZHM8VmFsdWVSZWNvdmVy
eT4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcmlhYmxlcyk7CisgICAgICAgIC8v
IFdlIGRvbid0IGluY2x1ZGUgdG1wcyBoZXJlIGJlY2F1c2UgdGhleSBjYW4ndCBiZSB1c2VkIHll
dC4KKyAgICAgICAgdmFsdWVSZWNvdmVyaWVzID0gT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4oY29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcmlhYmxlcywgMCk7CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVSZWNvdmVyaWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAg
ICAgICB2YWx1ZVJlY292ZXJpZXNbaV0gPSBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3Rh
Y2soCi0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKHZhbHVlUmVjb3Zlcmllcy5vcGVy
YW5kRm9ySW5kZXgoaSkpLCBEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAgICAgIHZhbHVlUmVj
b3Zlcmllcy5vcGVyYW5kRm9ySW5kZXgoaSkudmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXRK
Uyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bVZhcmlhYmxlczsKICAgICB9CkBAIC0x
NzIsMTIgKzE3OSwxMyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVj
dCgKICAgICAgICAgc3RhcnRJbmRleC0tOwogICAgIAogICAgIC8vIFN0ZXAgMjogQ3JlYXRlIGEg
bW9jay11cCBvZiB0aGUgREZHJ3Mgc3RhdGUgYW5kIGV4ZWN1dGUgdGhlIGV2ZW50cy4KLSAgICBP
cGVyYW5kczxWYWx1ZVNvdXJjZT4gb3BlcmFuZFNvdXJjZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCksIG51bVZhcmlhYmxlcyk7CisgICAgT3BlcmFuZHM8VmFsdWVTb3VyY2U+IG9wZXJhbmRT
b3VyY2VzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJpYWJsZXMsIG51bVRtcHMp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IG9wZXJhbmRTb3VyY2VzLnNpemUoKTsgaS0tOykKICAg
ICAgICAgb3BlcmFuZFNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShTb3VyY2VJc0RlYWQpOwogICAg
IEhhc2hNYXA8TWluaWZpZWRJRCwgTWluaWZpZWRHZW5lcmF0aW9uSW5mbz4gZ2VuZXJhdGlvbklu
Zm9zOwogICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBpbmRleDsgKytpKSB7
CiAgICAgICAgIGNvbnN0IFZhcmlhYmxlRXZlbnQmIGV2ZW50ID0gYXQoaSk7CisgICAgICAgIGRh
dGFMb2dMbklmKHZlcmJvc2UsICJQcm9jZXNzaW5nIGV2ZW50ICIsIGV2ZW50KTsKICAgICAgICAg
c3dpdGNoIChldmVudC5raW5kKCkpIHsKICAgICAgICAgY2FzZSBSZXNldDoKICAgICAgICAgICAg
IC8vIG5vdGhpbmcgdG8gZG8uCkBAIC0xOTksMjEgKzIwNywyMyBAQCB1bnNpZ25lZCBWYXJpYWJs
ZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgTW92SGludEV2ZW50OgotICAgICAgICAgICAgaWYgKG9wZXJhbmRTb3Vy
Y2VzLmhhc09wZXJhbmQoZXZlbnQuYnl0ZWNvZGVSZWdpc3RlcigpKSkKLSAgICAgICAgICAgICAg
ICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5kKGV2ZW50LmJ5dGVjb2RlUmVnaXN0ZXIoKSwgVmFs
dWVTb3VyY2UoZXZlbnQuaWQoKSkpOworICAgICAgICAgICAgaWYgKG9wZXJhbmRTb3VyY2VzLmhh
c09wZXJhbmQoZXZlbnQub3BlcmFuZCgpKSkKKyAgICAgICAgICAgICAgICBvcGVyYW5kU291cmNl
cy5zZXRPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSwgVmFsdWVTb3VyY2UoZXZlbnQuaWQoKSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU2V0TG9jYWxFdmVudDoKLSAgICAgICAg
ICAgIGlmIChvcGVyYW5kU291cmNlcy5oYXNPcGVyYW5kKGV2ZW50LmJ5dGVjb2RlUmVnaXN0ZXIo
KSkpCi0gICAgICAgICAgICAgICAgb3BlcmFuZFNvdXJjZXMuc2V0T3BlcmFuZChldmVudC5ieXRl
Y29kZVJlZ2lzdGVyKCksIFZhbHVlU291cmNlOjpmb3JEYXRhRm9ybWF0KGV2ZW50Lm1hY2hpbmVS
ZWdpc3RlcigpLCBldmVudC5kYXRhRm9ybWF0KCkpKTsKKyAgICAgICAgICAgIGlmIChvcGVyYW5k
U291cmNlcy5oYXNPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSkpCisgICAgICAgICAgICAgICAgb3Bl
cmFuZFNvdXJjZXMuc2V0T3BlcmFuZChldmVudC5vcGVyYW5kKCksIFZhbHVlU291cmNlOjpmb3JE
YXRhRm9ybWF0KGV2ZW50Lm1hY2hpbmVSZWdpc3RlcigpLCBldmVudC5kYXRhRm9ybWF0KCkpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgfQorCisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk9wZXJhbmQgc291cmNlczogIiwgb3Bl
cmFuZFNvdXJjZXMpOwogICAgIAogICAgIC8vIFN0ZXAgMzogQ29tcHV0ZSB2YWx1ZSByZWNvdmVy
aWVzIQotICAgIHZhbHVlUmVjb3ZlcmllcyA9IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+KGNvZGVC
bG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJpYWJsZXMpOworICAgIHZhbHVlUmVjb3Zlcmll
cyA9IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+KE9wZXJhbmRzTGlrZSwgb3BlcmFuZFNvdXJjZXMp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvcGVyYW5kU291cmNlcy5zaXplKCk7ICsr
aSkgewogICAgICAgICBWYWx1ZVNvdXJjZSYgc291cmNlID0gb3BlcmFuZFNvdXJjZXNbaV07CiAg
ICAgICAgIGlmIChzb3VyY2UuaXNUcml2aWFsbHlSZWNvdmVyYWJsZSgpKSB7CkBAIC0yMzEsNiAr
MjQxLDcgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAg
ICAgIE1pbmlmaWVkTm9kZSogbm9kZSA9IGdyYXBoLmF0KHNvdXJjZS5pZCgpKTsKICAgICAgICAg
TWluaWZpZWRHZW5lcmF0aW9uSW5mbyBpbmZvID0gZ2VuZXJhdGlvbkluZm9zLmdldChzb3VyY2Uu
aWQoKSk7CiAgICAgICAgIGlmICghaW5mby5hbGl2ZSkgeworICAgICAgICAgICAgZGF0YUxvZ0xu
SWYodmVyYm9zZSwgIk9wZXJhbmQgIiwgdmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChp
KSwgIiBpcyBkZWFkLiIpOwogICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0gVmFsdWVS
ZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICBpZiAoc3R5bGUg
PT0gUmVjb25zdHJ1Y3Rpb25TdHlsZTo6U2VwYXJhdGVkKQogICAgICAgICAgICAgICAgIHJlY29y
ZFVuZGVmaW5lZE9wZXJhbmQoaSk7CkBAIC0yMzgsNiArMjQ5LDcgQEAgdW5zaWduZWQgVmFyaWFi
bGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgICAgIH0KIAogICAgICAgICBpZiAodHJ5
VG9TZXRDb25zdGFudFJlY292ZXJ5KHZhbHVlUmVjb3Zlcmllc1tpXSwgbm9kZSkpIHsKKyAgICAg
ICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJPcGVyYW5kICIsIHZhbHVlUmVjb3Zlcmllcy5v
cGVyYW5kRm9ySW5kZXgoaSksICIgaXMgY29uc3RhbnQuIik7CiAgICAgICAgICAgICBpZiAoc3R5
bGUgPT0gUmVjb25zdHJ1Y3Rpb25TdHlsZTo6U2VwYXJhdGVkKSB7CiAgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmhhc0NvbnN0YW50KCkgJiYgbm9kZS0+Y29uc3RhbnQoKSA9PSBqc1VuZGVmaW5l
ZCgpKQogICAgICAgICAgICAgICAgICAgICByZWNvcmRVbmRlZmluZWRPcGVyYW5kKGkpOwpAQCAt
MjY3LDcgKzI3OSw3IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0
KAogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2YWx1ZVJlY292ZXJpZXNbaV0gPQotICAg
ICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKHN0YXRpY19jYXN0PFZp
cnR1YWxSZWdpc3Rlcj4oaW5mby51LnZpcnR1YWxSZWcpLCBpbmZvLmZvcm1hdCk7CisgICAgICAg
ICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soaW5mby51Lm9wZXJhbmQudmly
dHVhbFJlZ2lzdGVyKCksIGluZm8uZm9ybWF0KTsKICAgICB9CiAgICAgaWYgKHN0eWxlID09IFJl
Y29uc3RydWN0aW9uU3R5bGU6OlNlcGFyYXRlZCkKICAgICAgICAgZmx1c2hVbmRlZmluZWRPcGVy
YW5kU3BhbihvcGVyYW5kU291cmNlcy5zaXplKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaAppbmRleCAwMTU3MzAwN2VkZGRkNzBm
MzFkMTdhYzBkOTlmNzhlYmY1ZWE2ZWJjLi5lOWU0M2FiZmVjNDg1ZmVjN2U2NjMxNTFjMWMyMmVj
NTE4OTc0MTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zhcmlh
YmxlRXZlbnRTdHJlYW0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zhcmlh
YmxlRXZlbnRTdHJlYW0uaApAQCAtNDIsOSArNDIsMTIgQEAgc3RydWN0IFVuZGVmaW5lZE9wZXJh
bmRTcGFuIHsKIH07CiAKIGNsYXNzIFZhcmlhYmxlRXZlbnRTdHJlYW0gOiBwdWJsaWMgVmVjdG9y
PFZhcmlhYmxlRXZlbnQ+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZh
bHNlOwogcHVibGljOgogICAgIHZvaWQgYXBwZW5kQW5kTG9nKGNvbnN0IFZhcmlhYmxlRXZlbnQm
IGV2ZW50KQogICAgIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBsb2dFdmVu
dChldmVudCk7CiAgICAgICAgIGFwcGVuZChldmVudCk7CiAgICAgfQogICAgIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCmluZGV4IDRlN2EzYzE3NDli
MGFlZTVhYTA2MjQxOGQ1MjljZjNjMzA3ZmE4NmQuLmI5NTNjZmVjNzE1YzZhYWRkMmI2MjEzODFk
YTE1YWExMWMyZmNjNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q2FwYWJpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFi
aWxpdGllcy5jcHAKQEAgLTE5Myw2ICsxOTMsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNh
bkNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CiAg
ICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICBjYXNlIENv
bnN0cnVjdEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICBjYXNl
IExvYWRWYXJhcmdzOgogICAgIGNhc2UgVmFsdWVUb0ludDMyOgogICAgIGNhc2UgQnJhbmNoOgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENv
ZGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUu
Y3BwCmluZGV4IDMwODBkYzM0NTA5YzczMzMyNGI4MTQzZDJhOTU0ZjA4ZWRhZjEzZmIuLmMwMDRm
YWNjYzFhZDA1ZDM2Y2VkYmVkZjk2NzgyYWFiN2RjYjk4MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAKQEAgLTMxLDggKzMx
LDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogRm9yT1NSRW50cnlKSVRD
b2RlOjpGb3JPU1JFbnRyeUpJVENvZGUoKQotICAgIDogbV9ieXRlY29kZUluZGV4KFVJTlRfTUFY
KQotICAgICwgbV9lbnRyeUZhaWx1cmVDb3VudCgwKQorICAgIDogbV9lbnRyeUZhaWx1cmVDb3Vu
dCgwKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAKaW5kZXggNGYyY2M4Mjg4ZDkzMGUzZDVlYmNhODIwNTA3YzNhM2RlOTdhMDYxZC4uODU0
ZDRmMTI5ODkxNTkxNzA5OGM5M2Y5MTcwMzEwNzg2N2JhZGVmMiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApAQCAtMjA5LDcgKzIwOSw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5jbGVhclN0YWNrRnJhbWUoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIs
IEdQUkluZm86OnJlZ1QwLCBjb2RlLmZyYW1lU2l6ZSgpKTsKIAogICAgICAgICAgICAgICAgICAg
ICBqaXQuZW1pdFNhdmUoY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoY29kZUJsb2Nr
LCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAgICAgICAgICAgICAgICAgICBqaXQuZW1p
dFB1dFRvQ2FsbEZyYW1lSGVhZGVyKGNvZGVCbG9jaywgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jaykpOwogICAgICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGNhdGNoRW50cnlwb2ludEluZGV4IDogbV9ncmFwaC5tX2VudHJ5cG9pbnRJ
bmRleFRvQ2F0Y2hCeXRlY29kZUluZGV4LmtleXMoKSkgewpAQCAtMjc1LDcgKzI3NSw3IEBAIHB1
YmxpYzoKICAgICAgICAgCiAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdGhlIENvZGVCbG9jayB0
byBoYXZlIGEgd2VhayBwb2ludGVyIHRvIGl0c2VsZiBiZWNhdXNlCiAgICAgICAgIC8vIHRoYXQg
d291bGQgY2F1c2UgaXQgdG8gYWx3YXlzIGdldCBjb2xsZWN0ZWQuCi0gICAgICAgIG1fb3V0LnN0
b3JlUHRyKG1fb3V0LmNvbnN0SW50UHRyKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oY29kZUJsb2Nr
KCkpKSwgYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKKyAgICAgICAgbV9v
dXQuc3RvcmVQdHIobV9vdXQuY29uc3RJbnRQdHIoYml0d2lzZV9jYXN0PGludHB0cl90Pihjb2Rl
QmxvY2soKSkpLCBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spKSk7CiAKICAgICAgICAgLy8gU3RhY2sgT3ZlcmZsb3cgQ2hlY2suCiAgICAgICAgIHVu
c2lnbmVkIGV4aXRGcmFtZVNpemUgPSBtX2dyYXBoLnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4
aXQoKSAqIHNpemVvZihSZWdpc3Rlcik7CkBAIC0zNTYsNyArMzU2LDcgQEAgcHVibGljOgogCiAg
ICAgICAgICAgICAvLyBDaGVjayBBcmd1bWVudHMuCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlN
YXAoKS5jbGVhcigpOwotICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBP
cGVyYW5kczxBdmFpbGFiaWxpdHk+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDApOwor
ICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFi
aWxpdHk+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDAsIDApOwogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykgewog
ICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkpID0K
ICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1
ZSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpKTsKQEAgLTEyOTEsNiArMTI5MSw5IEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ2FsbEV2YWw6CiAgICAgICAgICAgICBjb21waWxlQ2Fs
bEV2YWwoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6
CisgICAgICAgICAgICBjb21waWxlVmFyYXJnc0xlbmd0aCgpOworICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgICAgICBjb21waWxlTG9hZFZhcmFy
Z3MoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTk2Nyw3ICsxOTcwLDcgQEAgcHJpdmF0ZToK
ICAgICB7CiAgICAgICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNv
ZGVkSlNWYWx1ZSo+KAogICAgICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5mdGxGb3JPU1JF
bnRyeSgpLT5lbnRyeUJ1ZmZlcigpLT5kYXRhQnVmZmVyKCkpOwotICAgICAgICBzZXRKU1ZhbHVl
KG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZShidWZmZXIgKyBtX25vZGUtPnVubGlua2VkTG9j
YWwoKS50b0xvY2FsKCkpKSk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KG1fb3V0
LmFic29sdXRlKGJ1ZmZlciArIG1fbm9kZS0+dW5saW5rZWRPcGVyYW5kKCkudmlydHVhbFJlZ2lz
dGVyKCkudG9Mb2NhbCgpKSkpOwogICAgIH0KIAogICAgIHZvaWQgY29tcGlsZUV4dHJhY3RDYXRj
aExvY2FsKCkKQEAgLTE5ODYsNyArMTk4OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxl
R2V0U3RhY2soKQogICAgIHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ub2Rl
LT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0
YXRlLm9wZXJhbmQoZGF0YS0+bG9jYWwpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9
IG1fc3RhdGUub3BlcmFuZChkYXRhLT5vcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAgIERGR19B
U1NFUlQobV9ncmFwaCwgbV9ub2RlLCBpc0NvbmNyZXRlKGRhdGEtPmZvcm1hdCksIGRhdGEtPmZv
cm1hdCk7CiAgICAgICAgIApAQCAtNzk4MSwxMyArNzk4NCwxMyBAQCBwcml2YXRlOgogICAgIAog
ICAgIHZvaWQgY29tcGlsZUdldENhbGxlZSgpCiAgICAgewotICAgICAgICBzZXRKU1ZhbHVlKG1f
b3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CisgICAgICAg
IHNldEpTVmFsdWUobV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90OjpjYWxsZWUpKSkpOwogICAgIH0KIAogICAgIHZvaWQgY29tcGlsZVNldENhbGxl
ZSgpCiAgICAgewogICAgICAgICBhdXRvIGNhbGxlZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlUHRyKGNhbGxlZSwgcGF5bG9hZEZvcihDYWxsRnJhbWVT
bG90OjpjYWxsZWUpKTsKKyAgICAgICAgbV9vdXQuc3RvcmVQdHIoY2FsbGVlLCBwYXlsb2FkRm9y
KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgY29tcGlsZUdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKQEAgLTgwMDIs
NyArODAwNSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNvbXBpbGVTZXRBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcygpCiAgICAgewotICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0
SW50MzIobV9ub2RlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSwgcGF5bG9hZEZvcihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworICAgICAgICBtX291
dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcygpKSwgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdl
dFNjb3BlKCkKQEAgLTk1OTcsNTEgKzk2MDAsNTEgQEAgcHJpdmF0ZToKICAgICAgICAgc2V0SlNW
YWx1ZShwYXRjaHBvaW50KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb21waWxlTG9hZFZhcmFy
Z3MoKQorICAgIHZvaWQgY29tcGlsZVZhcmFyZ3NMZW5ndGgoKQogICAgIHsKICAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9u
b2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAgICAgTFZhbHVlIGpzQXJndW1lbnRzID0gbG93
SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgCisgICAgICAgIExWYWx1ZSBqc0Fy
Z3VtZW50cyA9IGxvd0pTVmFsdWUobV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpKTsKKwogICAgICAg
ICBMVmFsdWUgbGVuZ3RoID0gdm1DYWxsKAogICAgICAgICAgICAgSW50MzIsIG9wZXJhdGlvblNp
emVPZlZhcmFyZ3MsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGpzQXJndW1lbnRzLAogICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5vZmZzZXQpKTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZl
Y3RmdWwgbGVuZ3RoIHByb3BlcnR5IHR3aWNlLiBUaGlzIGlzIHNhZmUKLSAgICAgICAgLy8gZnJv
bSB0aGUgc3RhbmRwb2ludCBvZiB0aGUgVk0ncyBpbnRlZ3JpdHksIGJ1dCBpdCdzIHN1YnRseSB3
cm9uZyBmcm9tIGEgc3BlYyBjb21wbGlhbmNlCi0gICAgICAgIC8vIHN0YW5kcG9pbnQuIFRoZSBi
ZXN0IHNvbHV0aW9uIHdvdWxkIGJlIG9uZSB3aGVyZSB3ZSBjYW4gZXhpdCAqaW50byogdGhlIG9w
X2NhbGxfdmFyYXJncyByaWdodAotICAgICAgICAvLyBwYXN0IHRoZSBzaXppbmcuCi0gICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE0NDgKLSAgICAg
ICAgCisKICAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5hZGQobGVu
Z3RoLCBtX291dC5pbnQzMk9uZSk7CiAKLSAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAg
VmFyYXJnc092ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsCi0gICAgICAgICAgICBtX291dC5h
Ym92ZShsZW5ndGgsIGxlbmd0aEluY2x1ZGluZ1RoaXMpKTsKKyAgICAgICAgc2V0SW50MzIobGVu
Z3RoSW5jbHVkaW5nVGhpcyk7CisgICAgfQogCisgICAgdm9pZCBjb21waWxlTG9hZFZhcmFyZ3Mo
KQorICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgTG9hZFZh
cmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgTFZh
bHVlIGpzQXJndW1lbnRzID0gbG93SlNWYWx1ZShtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkpOwor
ICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IGxvd0ludDMyKG1fbm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICAKICAgICAgICAgc3BlY3VsYXRlKAogICAgICAgICAgICAgVmFyYXJn
c092ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsCi0gICAgICAgICAgICBtX291dC5hYm92ZShs
ZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5jb25zdEludDMyKGRhdGEtPmxpbWl0KSkpOwotICAg
ICAgICAKKyAgICAgICAgICAgIG1fb3V0LmJpdE9yKG1fb3V0LmlzWmVybzMyKGxlbmd0aEluY2x1
ZGluZ1RoaXMpLCBtX291dC5hYm92ZShsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5jb25zdElu
dDMyKGRhdGEtPmxpbWl0KSkpKTsgCisKICAgICAgICAgbV9vdXQuc3RvcmUzMihsZW5ndGhJbmNs
dWRpbmdUaGlzLCBwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3VudCkpOwogICAgICAgICAKLSAg
ICAgICAgLy8gRklYTUU6IFRoaXMgY29tcHV0YXRpb24gaXMgcmF0aGVyIHNpbGx5LiBJZiBvcGVy
YXRpb25MYW9kVmFyYXJncyBqdXN0IHRvb2sgYSBwb2ludGVyIGluc3RlYWQKKyAgICAgICAgLy8g
RklYTUU6IFRoaXMgY29tcHV0YXRpb24gaXMgcmF0aGVyIHNpbGx5LiBJZiBvcGVyYXRpb25Mb2Fk
VmFyYXJncyBqdXN0IHRvb2sgYSBwb2ludGVyIGluc3RlYWQKICAgICAgICAgLy8gb2YgYSBWaXJ0
dWFsUmVnaXN0ZXIsIHdlIHdvdWxkbid0IGhhdmUgdG8gZG8gdGhpcy4KICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTY2MAogICAgICAgICBMVmFs
dWUgbWFjaGluZVN0YXJ0ID0gbV9vdXQubFNocigKLSAgICAgICAgICAgIG1fb3V0LnN1YihhZGRy
ZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQoKSkudmFsdWUoKSwgbV9jYWxsRnJhbWUp
LAorICAgICAgICAgICAgbV9vdXQuc3ViKGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZVN0YXJ0KS52
YWx1ZSgpLCBtX2NhbGxGcmFtZSksCiAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cigzKSk7
CiAgICAgICAgIAogICAgICAgICB2bUNhbGwoCiAgICAgICAgICAgICBWb2lkLCBvcGVyYXRpb25M
b2FkVmFyYXJncywgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwKICAgICAgICAgICAgIG1fb3V0
LmNhc3RUb0ludDMyKG1hY2hpbmVTdGFydCksIGpzQXJndW1lbnRzLCBtX291dC5jb25zdEludDMy
KGRhdGEtPm9mZnNldCksCi0gICAgICAgICAgICBsZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoZGF0
YS0+bWFuZGF0b3J5TWluaW11bSkpOworICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcywg
bV9vdXQuY29uc3RJbnQzMihkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKSk7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgY29tcGlsZUZvcndhcmRWYXJhcmdzKCkKICAgICB7Ci0gICAgICAgIGlmIChtX25v
ZGUtPmNoaWxkMSgpKSB7Ci0gICAgICAgICAgICBOb2RlKiBhcmd1bWVudHMgPSBtX25vZGUtPmNo
aWxkMSgpLm5vZGUoKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSkgewor
ICAgICAgICAgICAgTm9kZSogYXJndW1lbnRzID0gbV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpLm5v
ZGUoKTsKICAgICAgICAgICAgIGlmIChhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5
V2l0aFNwcmVhZCB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5QnVmZmVyIHx8
IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tU3ByZWFkKSB7CiAgICAgICAgICAgICAgICAgY29t
cGlsZUZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZCgpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
QEAgLTk2NTAsNTAgKzk2NTMsMjEgQEAgcHJpdmF0ZToKIAogICAgICAgICBMb2FkVmFyYXJnc0Rh
dGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAgICAgICBJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZTsKLSAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkpCi0g
ICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBtX25vZGUtPmNoaWxkMSgpLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CisgICAgICAgIGlmIChtX25vZGUtPmFyZ3VtZW50c0No
aWxkKCkpCisgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBtX25vZGUtPmFyZ3VtZW50c0No
aWxkKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5s
aW5lQ2FsbEZyYW1lKCk7CiAKLSAgICAgICAgTFZhbHVlIGxlbmd0aCA9IG51bGxwdHI7IAotICAg
ICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG51bGxwdHI7Ci0gICAgICAgIEFyZ3Vt
ZW50c0xlbmd0aCBhcmd1bWVudHNMZW5ndGggPSBnZXRBcmd1bWVudHNMZW5ndGgoaW5saW5lQ2Fs
bEZyYW1lKTsKLSAgICAgICAgaWYgKGFyZ3VtZW50c0xlbmd0aC5pc0tub3duKSB7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBrbm93bkxlbmd0aCA9IGFyZ3VtZW50c0xlbmd0aC5rbm93bjsKLSAgICAg
ICAgICAgIGlmIChrbm93bkxlbmd0aCA+PSBkYXRhLT5vZmZzZXQpCi0gICAgICAgICAgICAgICAg
a25vd25MZW5ndGggPSBrbm93bkxlbmd0aCAtIGRhdGEtPm9mZnNldDsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBrbm93bkxlbmd0aCA9IDA7Ci0gICAgICAgICAgICBsZW5ndGgg
PSBtX291dC5jb25zdEludDMyKGtub3duTGVuZ3RoKTsKLSAgICAgICAgICAgIGxlbmd0aEluY2x1
ZGluZ1RoaXMgPSBtX291dC5jb25zdEludDMyKGtub3duTGVuZ3RoICsgMSk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHBlcmZvcm0gdGhlIHNhbWUgbG9naWNh
bCBvcGVyYXRpb24gYXMgdGhlIGNvZGUgYWJvdmUsIGJ1dCB0aHJvdWdoIGR5bmFtaWMgb3BlcmF0
aW9ucy4KLSAgICAgICAgICAgIGlmICghZGF0YS0+b2Zmc2V0KQotICAgICAgICAgICAgICAgIGxl
bmd0aCA9IGFyZ3VtZW50c0xlbmd0aC52YWx1ZTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGlzTGFyZ2VyID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAg
ICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwot
Ci0gICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc21hbGxlck9yRXF1YWxMZW5ndGhSZXN1
bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQzMigwKSk7Ci0gICAgICAgICAgICAgICAg
bV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgICAgICBtX291dC5hYm92ZShhcmd1bWVudHNM
ZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0KSksIHVuc3VyZShpc0xh
cmdlciksIHVuc3VyZShjb250aW51YXRpb24pKTsKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9j
ayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzTGFyZ2VyLCBjb250aW51YXRpb24pOwotICAg
ICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGxhcmdlckxlbmd0aFJlc3VsdCA9IG1fb3V0LmFu
Y2hvcihtX291dC5zdWIoYXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKGRh
dGEtPm9mZnNldCkpKTsKLSAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
Ci0KLSAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0
KTsKLSAgICAgICAgICAgICAgICBsZW5ndGggPSBtX291dC5waGkoSW50MzIsIHNtYWxsZXJPckVx
dWFsTGVuZ3RoUmVzdWx0LCBsYXJnZXJMZW5ndGhSZXN1bHQpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFkZChsZW5ndGgsIG1fb3V0LmNv
bnN0SW50MzIoMSkpOwotICAgICAgICB9CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwID0gZGF0YS0+b2Zmc2V0OworICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5n
VGhpcyA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwogCisgICAgICAgIExWYWx1ZSBsZW5n
dGggPSBtX291dC5zdWIobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuaW50MzJPbmUpOwogICAg
ICAgICBzcGVjdWxhdGUoCiAgICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIG5vVmFsdWUoKSwg
bnVsbHB0ciwKICAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1f
b3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7CiAgICAgICAgIAogICAgICAgICBtX291dC5z
dG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMsIHBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50
KSk7CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9
IGRhdGEtPm9mZnNldDsKICAgICAgICAgTFZhbHVlIHNvdXJjZVN0YXJ0ID0gZ2V0QXJndW1lbnRz
U3RhcnQoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCk7CiAgICAgICAg
IExWYWx1ZSB0YXJnZXRTdGFydCA9IGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZVN0YXJ0KS52YWx1
ZSgpOwogCkBAIC05NzUyLDY1ICs5NzI2LDIwIEBAIHByaXZhdGU6CiAgICAgICAgIC8vIFdlIG5l
ZWQgdG8gcGVyZm9ybSB0aGUgc2FtZSBsb2dpY2FsIG9wZXJhdGlvbiBhcyB0aGUgY29kZSBhYm92
ZSwgYnV0IHRocm91Z2ggZHluYW1pYyBvcGVyYXRpb25zLgogICAgICAgICBpZiAoIW51bWJlck9m
QXJndW1lbnRzVG9Ta2lwKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50c0xlbmd0aC52YWx1
ZTsKKyAgICAgICAgCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bWJlck9mQXJndW1lbnRzVG9T
a2lwIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KElOVDMyX01JTikpOwogCi0gICAgICAgIExCYXNp
Y0Jsb2NrIGlzTGFyZ2VyID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgTEJhc2ljQmxvY2sg
Y29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKLQotICAgICAgICBWYWx1ZUZyb21CbG9j
ayBzbWFsbGVyT3JFcXVhbExlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdElu
dDMyKDApKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQuYWJvdmUo
YXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1lbnRz
VG9Ta2lwKSksIHVuc3VyZShpc0xhcmdlciksIHVuc3VyZShjb250aW51YXRpb24pKTsKLSAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0xhcmdlciwgY29udGlu
dWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VyTGVuZ3RoUmVzdWx0ID0gbV9v
dXQuYW5jaG9yKG1fb3V0LnN1Yihhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50
MzIobnVtYmVyT2ZBcmd1bWVudHNUb1NraXApKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKKyAgICAgICAgTFZhbHVlIGZpeGVkTGVuZ3RoID0gbV9vdXQuc3ViKGFyZ3VtZW50
c0xlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkp
OwogCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAg
ICAgICByZXR1cm4gbV9vdXQucGhpKEludDMyLCBzbWFsbGVyT3JFcXVhbExlbmd0aFJlc3VsdCwg
bGFyZ2VyTGVuZ3RoUmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnNlbGVjdChtX291dC5n
cmVhdGVyVGhhbk9yRXF1YWwoZml4ZWRMZW5ndGgsIG1fb3V0LmludDMyWmVybyksIGZpeGVkTGVu
Z3RoLCBtX291dC5pbnQzMlplcm8sIFNlbGVjdFByZWRpY3RhYmlsaXR5OjpQcmVkaWN0YWJsZSk7
CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkKCkKICAg
ICB7Ci0gICAgICAgIEhhc2hNYXA8SW5saW5lQ2FsbEZyYW1lKiwgTFZhbHVlLCBXVEY6OkRlZmF1
bHRIYXNoPElubGluZUNhbGxGcmFtZSo+OjpIYXNoLCBXVEY6Ok51bGxhYmxlSGFzaFRyYWl0czxJ
bmxpbmVDYWxsRnJhbWUqPj4gY2FjaGVkU3ByZWFkTGVuZ3RoczsKLQotICAgICAgICBOb2RlKiBh
cmd1bWVudHMgPSBtX25vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgTm9kZSogYXJndW1l
bnRzID0gbV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpLm5vZGUoKTsKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQgfHwgYXJn
dW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZlciB8fCBhcmd1bWVudHMtPm9wKCkg
PT0gUGhhbnRvbVNwcmVhZCk7CiAKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZTdGF0aWNBcmd1
bWVudHMgPSAwOwotICAgICAgICBWZWN0b3I8TFZhbHVlLCAyPiBzcHJlYWRMZW5ndGhzOwotCi0g
ICAgICAgIGF1dG8gY29sbGVjdEFyZ3VtZW50Q291bnQgPSByZWN1cnNhYmxlTGFtYmRhKFsmXShh
dXRvIHNlbGYsIE5vZGUqIHRhcmdldCkgLT4gdm9pZCB7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0
LT5vcCgpID09IFBoYW50b21TcHJlYWQpIHsKLSAgICAgICAgICAgICAgICBzZWxmKHRhcmdldC0+
Y2hpbGQxKCkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNw
cmVhZCkgewotICAgICAgICAgICAgICAgIEJpdFZlY3RvciogYml0VmVjdG9yID0gdGFyZ2V0LT5i
aXRWZWN0b3IoKTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFy
Z2V0LT5udW1DaGlsZHJlbigpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJpdFZl
Y3Rvci0+Z2V0KGkpKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZihtX2dyYXBoLnZhckFy
Z0NoaWxkKHRhcmdldCwgaSkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICAgICAgKytudW1iZXJPZlN0YXRpY0FyZ3VtZW50czsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBpZiAodGFyZ2V0LT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZlcikgewotICAg
ICAgICAgICAgICAgIG51bWJlck9mU3RhdGljQXJndW1lbnRzICs9IHRhcmdldC0+Y2FzdE9wZXJh
bmQ8SlNJbW11dGFibGVCdXR0ZXJmbHkqPigpLT5sZW5ndGgoKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVCh0YXJnZXQtPm9wKCkg
PT0gUGhhbnRvbUNyZWF0ZVJlc3QpOwotICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUgPSB0YXJnZXQtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsK
LSAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gdGFyZ2V0LT5u
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwotICAgICAgICAgICAgc3ByZWFkTGVuZ3Rocy5hcHBl
bmQoY2FjaGVkU3ByZWFkTGVuZ3Rocy5lbnN1cmUoaW5saW5lQ2FsbEZyYW1lLCBbJl0gKCkgewot
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLT5nZXRTcHJlYWRMZW5ndGhGcm9tSW5saW5lQ2Fs
bEZyYW1lKGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApOwotICAgICAg
ICAgICAgfSkuaXRlcmF0b3ItPnZhbHVlKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgY29sbGVj
dEFyZ3VtZW50Q291bnQoYXJndW1lbnRzKTsKLSAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGlu
Z1RoaXMgPSBtX291dC5jb25zdEludDMyKDEgKyBudW1iZXJPZlN0YXRpY0FyZ3VtZW50cyk7Ci0g
ICAgICAgIGZvciAoTFZhbHVlIGxlbmd0aCA6IHNwcmVhZExlbmd0aHMpCi0gICAgICAgICAgICBs
ZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aEluY2x1ZGluZ1RoaXMsIGxlbmd0
aCk7CisgICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbG93SW50MzIobV9ub2Rl
LT5jaGlsZDEoKSk7CiAKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5s
b2FkVmFyYXJnc0RhdGEoKTsKICAgICAgICAgc3BlY3VsYXRlKApAQCAtOTgyMSw3ICs5NzUwLDcg
QEAgcHJpdmF0ZToKIAogICAgICAgICBMVmFsdWUgdGFyZ2V0U3RhcnQgPSBhZGRyZXNzRm9yKGRh
dGEtPm1hY2hpbmVTdGFydCkudmFsdWUoKTsKIAotICAgICAgICBhdXRvIGZvcndhcmRTcHJlYWQg
PSByZWN1cnNhYmxlTGFtYmRhKFt0aGlzLCAmY2FjaGVkU3ByZWFkTGVuZ3RocywgJnRhcmdldFN0
YXJ0XShhdXRvIHNlbGYsIE5vZGUqIHRhcmdldCwgTFZhbHVlIHN0b3JlSW5kZXgpIC0+IExWYWx1
ZSB7CisgICAgICAgIGF1dG8gZm9yd2FyZFNwcmVhZCA9IHJlY3Vyc2FibGVMYW1iZGEoW3RoaXMs
ICZ0YXJnZXRTdGFydF0oYXV0byBzZWxmLCBOb2RlKiB0YXJnZXQsIExWYWx1ZSBzdG9yZUluZGV4
KSAtPiBMVmFsdWUgewogICAgICAgICAgICAgaWYgKHRhcmdldC0+b3AoKSA9PSBQaGFudG9tU3By
ZWFkKQogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmKHRhcmdldC0+Y2hpbGQxKCkubm9kZSgp
LCBzdG9yZUluZGV4KTsKIApAQCAtOTg1Myw4ICs5NzgyLDkgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHRhcmdldC0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CiAg
ICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IHRhcmdldC0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogCi0gICAgICAgICAgICBMVmFsdWUgc291
cmNlU3RhcnQgPSB0aGlzLT5nZXRBcmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUsIHRhcmdl
dC0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgc3ByZWFk
TGVuZ3RoID0gbV9vdXQuemVyb0V4dFB0cihjYWNoZWRTcHJlYWRMZW5ndGhzLmdldChpbmxpbmVD
YWxsRnJhbWUpKTsKKyAgICAgICAgICAgIGF1dG8gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSB0
YXJnZXQtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CisgICAgICAgICAgICBMVmFsdWUgc291
cmNlU3RhcnQgPSB0aGlzLT5nZXRBcmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUsIG51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwKTsKKyAgICAgICAgICAgIExWYWx1ZSBzcHJlYWRMZW5ndGggPSBt
X291dC56ZXJvRXh0UHRyKGdldFNwcmVhZExlbmd0aEZyb21JbmxpbmVDYWxsRnJhbWUoaW5saW5l
Q2FsbEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpOwogCiAgICAgICAgICAgICBMQmFz
aWNCbG9jayBsb29wID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC0xMjM2Niw4ICsxMjI5Niw4IEBA
IHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSBzY29wZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEo
KSk7CiAKICAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9jYWxsRnJhbWUsIHBhY2tldCwgbV9oZWFw
cy5TaGFkb3dDaGlja2VuX1BhY2tldF9mcmFtZSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlUHRyKG1f
b3V0LmxvYWRQdHIoYWRkcmVzc0ZvcigwKSksIHBhY2tldCwgbV9oZWFwcy5TaGFkb3dDaGlja2Vu
X1BhY2tldF9jYWxsZXJGcmFtZSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmxvYWRQ
dHIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSwgcGFja2V0LCBtX2hlYXBzLlNo
YWRvd0NoaWNrZW5fUGFja2V0X2NhbGxlZSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0
LmxvYWRQdHIoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoMCkpKSwgcGFja2V0LCBtX2hlYXBz
LlNoYWRvd0NoaWNrZW5fUGFja2V0X2NhbGxlckZyYW1lKTsKKyAgICAgICAgbV9vdXQuc3RvcmVQ
dHIobV9vdXQubG9hZFB0cihwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpKSksIHBhY2tldCwgbV9oZWFwcy5TaGFkb3dDaGlja2VuX1BhY2tldF9jYWxsZWUp
OwogICAgICAgICBtX291dC5zdG9yZVB0cihzY29wZSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0No
aWNrZW5fUGFja2V0X3Njb3BlKTsKICAgICB9CiAgICAgCkBAIC0xMjQyOCw3ICsxMjM1OCw3IEBA
IHByaXZhdGU6CiAgICAgICAgIEFyZ3VtZW50c0xlbmd0aCBsZW5ndGg7CiAKICAgICAgICAgaWYg
KGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewotICAg
ICAgICAgICAgbGVuZ3RoLmtub3duID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyAtIDE7CisgICAgICAgICAgICBsZW5ndGgua25vd24gPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEp
OwogICAgICAgICAgICAgbGVuZ3RoLmlzS25vd24gPSB0cnVlOwogICAgICAgICAgICAgbGVuZ3Ro
LnZhbHVlID0gbV9vdXQuY29uc3RJbnQzMihsZW5ndGgua25vd24pOwogICAgICAgICB9IGVsc2Ug
ewpAQCAtMTI0NTgsNyArMTIzODgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVy
biBtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoZnJhbWUtPmNhbGxlZVJlY292ZXJ5LnZpcnR1YWxS
ZWdpc3RlcigpKSk7CiAgICAgICAgICAgICByZXR1cm4gd2Vha1BvaW50ZXIoZnJhbWUtPmNhbGxl
ZVJlY292ZXJ5LmNvbnN0YW50KCkuYXNDZWxsKCkpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAg
ICAgIHJldHVybiBtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSkpKTsKICAgICB9CiAgICAgCiAgICAgTFZhbHVlIGdldEFyZ3VtZW50
c1N0YXJ0KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCB1bnNpZ25lZCBvZmZzZXQg
PSAwKQpAQCAtMTc3MjMsNyArMTc2NTMsNyBAQCBwcml2YXRlOgogICAgICAgICBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlSW5kZXggPSBtX2Z0bFN0YXRlLmppdENvZGUtPmNvbW1vbi5hZGRDb2RlT3Jp
Z2luKGNvZGVPcmlnaW4pOwogICAgICAgICBtX291dC5zdG9yZTMyKAogICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQzMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksCi0gICAgICAgICAgICB0YWdGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICAgICAgICAg
IHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpKSk7CiAjaWYgIVVTRShCVUlMVElOX0ZSQU1FX0FERFJFU1MpIHx8IEFTU0VSVF9F
TkFCTEVECiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fY2FsbEZyYW1lLCBtX291dC5hYnNvbHV0
ZSgmdm0oKS50b3BDYWxsRnJhbWUpKTsKICNlbmRpZgpAQCAtMTc4MzEsNyArMTc3NjEsOCBAQCBw
cml2YXRlOgogICAgICAgICByZXR1cm4gJm1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdERlc2Ny
aXB0b3JzLmFsbG9jKAogICAgICAgICAgICAgbG93VmFsdWUuZm9ybWF0KCksIHByb2ZpbGUsCiAg
ICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50cygp
LAotICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMo
KSk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2Fs
cygpLAorICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZUbXBz
KCkpOwogICAgIH0KIAogICAgIHZvaWQgYXBwZW5kT1NSRXhpdCgKQEAgLTE3OTM2LDE1ICsxNzg2
NywxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgfSk7CiAgICAgICAgIAogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhpdERlc2NyaXB0b3ItPm1fdmFsdWVzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVlcy5v
cGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBleGl0RGVz
Y3JpcHRvci0+bV92YWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gYXZhaWxhYmlsaXR5TWFwLm1fbG9j
YWxzW2ldOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVG
VExPU1JFeGl0TGl2ZW5lc3MoKQogICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgubV9wbGFuLm1v
ZGUoKSAhPSBGVExGb3JPU1JFbnRyeU1vZGUpIHsKIAotICAgICAgICAgICAgICAgIGlmIChhdmFp
bGFiaWxpdHkuaXNEZWFkKCkgJiYgbV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdp
c3RlcihvcGVyYW5kKSwgZXhpdE9yaWdpbikpCi0gICAgICAgICAgICAgICAgICAgIERGR19DUkFT
SChtX2dyYXBoLCBtX25vZGUsIHRvQ1N0cmluZygiTGl2ZSBieXRlY29kZSBsb2NhbCBub3QgYXZh
aWxhYmxlOiBvcGVyYW5kID0gIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCAiLCBhdmFpbGFi
aWxpdHkgPSAiLCBhdmFpbGFiaWxpdHksICIsIG9yaWdpbiA9ICIsIGV4aXRPcmlnaW4pLmRhdGEo
KSk7CisgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5pc0RlYWQoKSAmJiBtX2dyYXBo
LmlzTGl2ZUluQnl0ZWNvZGUob3BlcmFuZCwgZXhpdE9yaWdpbikpCisgICAgICAgICAgICAgICAg
ICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsIHRvQ1N0cmluZygiTGl2ZSBieXRlY29kZSBs
b2NhbCBub3QgYXZhaWxhYmxlOiBvcGVyYW5kID0gIiwgb3BlcmFuZCwgIiwgYXZhaWxhYmlsaXR5
ID0gIiwgYXZhaWxhYmlsaXR5LCAiLCBvcmlnaW4gPSAiLCBleGl0T3JpZ2luKS5kYXRhKCkpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgRXhpdFZhbHVlIGV4aXRWYWx1ZSA9IGV4aXRWYWx1
ZUZvckF2YWlsYWJpbGl0eShhcmd1bWVudHMsIG1hcCwgYXZhaWxhYmlsaXR5KTsKICAgICAgICAg
ICAgIGlmIChleGl0VmFsdWUuaGFzSW5kZXhJblN0YWNrbWFwTG9jYXRpb25zKCkpCkBAIC0xODI0
NCwzOSArMTgxNzUsMzkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fb3V0LmFscmVhZHlS
ZWdpc3RlcmVkV2Vha1BvaW50ZXIobV9ncmFwaCwgc3RydWN0dXJlLmdldCgpKTsKICAgICB9CiAg
ICAgCi0gICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoTFZhbHVlIGJhc2UsIGludCBvcGVyYW5k
LCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKKyAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihMVmFs
dWUgYmFzZSwgT3BlcmFuZCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBtX291dC5hZGRyZXNzKGJhc2UsIG1faGVhcHMudmFyaWFibGVzW29wZXJh
bmRdLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gbV9vdXQuYWRkcmVzcyhiYXNlLCBtX2hlYXBz
LnZhcmlhYmxlc1tvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpXSwgb2Zmc2V0KTsK
ICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoTFZhbHVlIGJhc2UsIGludCBvcGVy
YW5kKQorICAgIFR5cGVkUG9pbnRlciBwYXlsb2FkRm9yKExWYWx1ZSBiYXNlLCBPcGVyYW5kIG9w
ZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihiYXNlLCBvcGVyYW5kLCBQ
YXlsb2FkT2Zmc2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihMVmFsdWUgYmFz
ZSwgaW50IG9wZXJhbmQpCisgICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihMVmFsdWUgYmFzZSwgT3Bl
cmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IoYmFzZSwgb3Bl
cmFuZCwgVGFnT2Zmc2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoaW50
IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQorICAgIFR5cGVkUG9pbnRlciBhZGRyZXNz
Rm9yKE9wZXJhbmQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksIG9mZnNldCk7Cisg
ICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCksIG9mZnNl
dCk7CiAgICAgfQogICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7CiAgICAgICAgIGlmIChvcGVyYW5k
LmlzTG9jYWwoKSkKLSAgICAgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG1fY2FwdHVyZWQsIG9w
ZXJhbmQub2Zmc2V0KCksIG9mZnNldCk7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG1fY2Fs
bEZyYW1lLCBvcGVyYW5kLm9mZnNldCgpLCBvZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuIGFk
ZHJlc3NGb3IobV9jYXB0dXJlZCwgb3BlcmFuZCwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGFk
ZHJlc3NGb3IobV9jYWxsRnJhbWUsIG9wZXJhbmQsIG9mZnNldCk7CiAgICAgfQotICAgIFR5cGVk
UG9pbnRlciBwYXlsb2FkRm9yKGludCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciBwYXlsb2Fk
Rm9yKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBwYXlsb2FkRm9yKFZp
cnR1YWxSZWdpc3RlcihvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiBwYXlsb2FkRm9yKG9wZXJh
bmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KICAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZv
cihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRyZXNz
Rm9yKG9wZXJhbmQsIFBheWxvYWRPZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgdGFn
Rm9yKGludCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoT3BlcmFuZCBvcGVyYW5k
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkp
OworICAgICAgICByZXR1cm4gdGFnRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAg
IH0KICAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAg
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKaW5kZXggOTMzMTc3
MTBmNmQwNjg2MDkxOWJjMDAyNTMxM2ExMzIxOTA0NDkxOS4uMDkxZTdmM2M5YjQ5ODM0MDc2YThk
NmY5MTc0MmNjYjVjYWQ1ZWE5NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFbnRyeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JF
bnRyeS5jcHAKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KAogICAgICAg
ICBkYXRhTG9nKCIgICAgVmFsdWVzIGF0IGVudHJ5OiAiLCB2YWx1ZXMsICJcbiIpOwogICAgIAog
ICAgIGZvciAoaW50IGFyZ3VtZW50ID0gdmFsdWVzLm51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3Vt
ZW50LS07KSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWVPblN0YWNrID0gY2FsbEZyYW1lLT5yKHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZzZXQoKSkuYXNhblVuc2FmZUpT
VmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZU9uU3RhY2sgPSBjYWxsRnJhbWUtPnIodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKS5hc2FuVW5zYWZlSlNWYWx1ZSgpOwog
ICAgICAgICBPcHRpb25hbDxKU1ZhbHVlPiByZWNvbnN0cnVjdGVkVmFsdWUgPSB2YWx1ZXMuYXJn
dW1lbnQoYXJndW1lbnQpOwogICAgICAgICBpZiAoKHJlY29uc3RydWN0ZWRWYWx1ZSAmJiB2YWx1
ZU9uU3RhY2sgPT0gcmVjb25zdHJ1Y3RlZFZhbHVlLnZhbHVlKCkpIHx8ICFhcmd1bWVudCkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFeGl0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5j
cHAKaW5kZXggMDk5NThkMmM0ZjlhNWQ4OWI1ZmJiYjY1Zjg2YmI2ZGFiY2RmMThlMy4uMDRjODU3
OTllNGQ0NjkyM2EzMTg2NzE4ZTE5ZjI0YmRmZmRhYmE0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE9TUkV4aXQuY3BwCkBAIC00NywxMCArNDcsMTAgQEAgdXNpbmcgbmFtZXNwYWNl
IERGRzsKIAogT1NSRXhpdERlc2NyaXB0b3I6Ok9TUkV4aXREZXNjcmlwdG9yKAogICAgIERhdGFG
b3JtYXQgcHJvZmlsZURhdGFGb3JtYXQsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgdmFs
dWVQcm9maWxlLAotICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzLCB1bnNpZ25lZCBudW1i
ZXJPZkxvY2FscykKKyAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVt
YmVyT2ZMb2NhbHMsIHVuc2lnbmVkIG51bWJlck9mVG1wcykKICAgICA6IG1fcHJvZmlsZURhdGFG
b3JtYXQocHJvZmlsZURhdGFGb3JtYXQpCiAgICAgLCBtX3ZhbHVlUHJvZmlsZSh2YWx1ZVByb2Zp
bGUpCi0gICAgLCBtX3ZhbHVlcyhudW1iZXJPZkFyZ3VtZW50cywgbnVtYmVyT2ZMb2NhbHMpCisg
ICAgLCBtX3ZhbHVlcyhudW1iZXJPZkFyZ3VtZW50cywgbnVtYmVyT2ZMb2NhbHMsIG51bWJlck9m
VG1wcykKIHsKIH0KIApAQCAtMTE3LDUgKzExNywzIEBAIENvZGVMb2NhdGlvbkp1bXA8SlNJbnRl
cm5hbFB0clRhZz4gT1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqIGZ0
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
LQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCmluZGV4IGRhODdjY2YzMjcz
ZmU0YmUzNjA2ODNiOGFmM2JiZjUxNmQ2MjI1ZWIuLmZkN2Y5ZjA1YmM0ODljMWY2YWVjZTA5N2Fk
OGE0ZDFlMjdiODAzMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRXhpdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCkBA
IC02OSw3ICs2OSw3IEBAIHN0cnVjdCBPU1JFeGl0SGFuZGxlOwogc3RydWN0IE9TUkV4aXREZXNj
cmlwdG9yIHsKICAgICBPU1JFeGl0RGVzY3JpcHRvcigKICAgICAgICAgRGF0YUZvcm1hdCBwcm9m
aWxlRGF0YUZvcm1hdCwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSwKLSAgICAgICAgdW5z
aWduZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzKTsKKyAgICAg
ICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzLCB1
bnNpZ25lZCBudW1iZXJPZlRtcHMpOwogCiAgICAgLy8gVGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRo
ZSBleGl0IGNhbGwgbWF5IGJlIGEgdmFsdWUgd2Ugd2lzaCB0byBwcm9maWxlLgogICAgIC8vIElm
IHRoYXQncyB0aGUgY2FzZSwgdGhlIGZvcm1hdCB3aWxsIGJlIG5vdCBJbnZhbGlkIGFuZCB3ZSds
bCBoYXZlIGEKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhp
dENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBp
bGVyLmNwcAppbmRleCA2NjRkM2I5ODhhZjdlYTgzZjZmYjgyYmNiM2E4YzBhODgxNzZlZTcyLi4y
MTcxNWQzZGQyMmMzODc5ZWIwNGZiNmI3OGU3OTUyODRmNWUwMzk0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCkBAIC0yOSw2ICsyOSw3
IEBACiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIK
KyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR09T
UkV4aXRDb21waWxlckNvbW1vbi5oIgogI2luY2x1ZGUgIkZUTEV4aXRBcmd1bWVudEZvck9wZXJh
bmQuaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCkBAIC0zNywxMCArMzgsMTEgQEAKICNpbmNs
dWRlICJGVExPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRlRMU3RhdGUuaCIKICNpbmNsdWRlICJG
VExTYXZlUmVzdG9yZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJMaW5r
QnVmZmVyLmgiCiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKICNp
bmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5j
bHVkZSAiUHJvYmVDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsK
IApAQCAtNDc0LDE2ICs0NzYsNTIgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoVk0mIHZtLCB1
bnNpZ25lZCBleGl0SUQsIEpJVENvZGUqIGppdENvZGUsIE9TUkV4aXQmIGV4aXQKIAogICAgIHNp
emVfdCBiYXNlbGluZVZpcnR1YWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlcyA9IGJhc2VsaW5lQ29k
ZUJsb2NrLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsKIAorICAgIGlmIChl
eGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCgpKSB7
CisgICAgICAgIEpTVmFsdWUqIHRtcFNjcmF0Y2ggPSByZWludGVycHJldF9jYXN0PEpTVmFsdWUq
PihzY3JhdGNoICsgZXhpdC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLnRtcEluZGV4KDApKTsKKyAg
ICAgICAgVk0qIHZtUHRyID0gJnZtOworICAgICAgICBqaXQucHJvYmUoWz1dIChQcm9iZTo6Q29u
dGV4dCYgY29udGV4dCkgeworICAgICAgICAgICAgYXV0byBhZGRTaWRlU3RhdGUgPSBbJl0gKENh
bGxGcmFtZSogZnJhbWUsIEJ5dGVjb2RlSW5kZXggaW5kZXgsIHNpemVfdCB0bXBPZmZzZXQpIHsK
KyAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3Rh
dGU+IHNpZGVTdGF0ZSA9IFdURjo6bWFrZVVuaXF1ZTxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0
ZT4oKTsKKworICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+Ynl0ZWNvZGVJbmRleCA9IGluZGV4
OworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4TnVtQ2hlY2twb2lu
dFRtcHM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgc2lkZVN0YXRlLT50bXBzW2ldID0gdG1w
U2NyYXRjaFtpICsgdG1wT2Zmc2V0XTsKKworICAgICAgICAgICAgICAgIHZtUHRyLT5hZGRDaGVj
a3BvaW50T1NSU2lkZVN0YXRlKGZyYW1lLCBXVEZNb3ZlKHNpZGVTdGF0ZSkpOworICAgICAgICAg
ICAgfTsKKworICAgICAgICAgICAgY29uc3QgQ29kZU9yaWdpbiogY29kZU9yaWdpbjsKKyAgICAg
ICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY29udGV4dC5ncHI8Q2FsbEZyYW1lKj4oR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICAgICAgZm9yIChjb2RlT3JpZ2luID0g
JmV4aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2luICYmIGNvZGVPcmlnaW4tPmlubGluZUNhbGxG
cmFtZSgpOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCktPmdldENh
bGxlclNraXBwaW5nVGFpbENhbGxzKCkpIHsKKyAgICAgICAgICAgICAgICBCeXRlY29kZUluZGV4
IGNhbGxCeXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpOworICAgICAg
ICAgICAgICAgIGlmICghY2FsbEJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGF1dG8qIGlubGluZUNhbGxG
cmFtZSA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpOworICAgICAgICAgICAgICAgIGFk
ZFNpZGVTdGF0ZShyZWludGVycHJldF9jYXN0PENhbGxGcmFtZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KGNhbGxGcmFtZSkgKyBpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkgLSBz
aXplb2YoQ1BVUmVnaXN0ZXIpKSwgY2FsbEJ5dGVjb2RlSW5kZXgsIGlubGluZUNhbGxGcmFtZS0+
dG1wT2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFjb2RlT3JpZ2lu
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKTsgYnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICAgICAgYWRkU2lkZVN0YXRlKGNhbGxGcmFt
ZSwgYnl0ZWNvZGVJbmRleCwgMCk7CisgICAgICAgIH0pOworICAgIH0KKwogICAgIC8vIE5vdyBn
ZXQgc3RhdGUgb3V0IG9mIHRoZSBzY3JhdGNoIGJ1ZmZlciBhbmQgcGxhY2UgaXQgYmFjayBpbnRv
IHRoZSBzdGFjay4gVGhlIHZhbHVlcyBhcmUKICAgICAvLyBhbHJlYWR5IHJlYm94ZWQgc28gd2Ug
anVzdCBtb3ZlIHRoZW0uCiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IGV4aXQubV9kZXNjcmlw
dG9yLT5tX3ZhbHVlcy5zaXplKCk7IGluZGV4LS07KSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciByZWcgPSBleGl0Lm1fZGVzY3JpcHRvci0+bV92YWx1ZXMudmlydHVhbFJlZ2lzdGVyRm9ySW5k
ZXgoaW5kZXgpOworICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBleGl0Lm1fZGVzY3JpcHRvci0+
bV92YWx1ZXMub3BlcmFuZEZvckluZGV4KGluZGV4KTsKKworICAgICAgICBpZiAob3BlcmFuZC5p
c1RtcCgpKQorICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKHJlZy5pc0xvY2Fs
KCkgJiYgcmVnLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGludD4oYmFzZWxpbmVWaXJ0dWFsUmVn
aXN0ZXJzRm9yQ2FsbGVlU2F2ZXMpKQorICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkgJiYg
b3BlcmFuZC50b0xvY2FsKCkgPCBzdGF0aWNfY2FzdDxpbnQ+KGJhc2VsaW5lVmlydHVhbFJlZ2lz
dGVyc0ZvckNhbGxlZVNhdmVzKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGpp
dC5sb2FkNjQoc2NyYXRjaCArIGluZGV4LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgIGppdC5z
dG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IocmVnKSk7
CisgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFk
ZHJlc3NGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSkpOwogICAgIH0KICAgICAKICAgICBo
YW5kbGVFeGl0Q291bnRzKHZtLCBqaXQsIGV4aXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT3BlcmF0aW9ucy5jcHAKaW5kZXggNDQ3YzAwYTczZDU1ZDBlMGI5NmE0MWNiNTBhN2Zj
MjZjMGJkZjYwNS4uMDA2OWEzYTZlNmZlMWRlZjY5Njg5YjM4YjIyM2FmMDQ0YjE4Mjk2ZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCkBAIC01NDEsNyAr
NTQxLDcgQEAgZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWF0ZXJp
YWxpemVPYmplY3RJbk9TUihKU0dsb2JhbE9iamVjdCoKICAgICAgICAgICAgIC8vIFdlIGFsc28g
Y2Fubm90IGFsbG9jYXRlIGEgbmV3IGJ1dHRlcmZseSBmcm9tIGNvbXBpbGF0aW9uIHRocmVhZHMg
c2luY2UgaXQncyBpbnZhbGlkIHRvIGFsbG9jYXRlIGNlbGxzIGZyb20KICAgICAgICAgICAgIC8v
IGEgY29tcGlsYXRpb24gdGhyZWFkLgogICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2Uo
KTsKLSAgICAgICAgICAgIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihuZXdBcnJheUJ1ZmZl
ci5tX2ltbXV0YWJsZUJ1dHRlcmZseS5vZmZzZXQoKSkuc2V0KHZtLCBjb2RlQmxvY2ssIGltbXV0
YWJsZUJ1dHRlcmZseSk7CisgICAgICAgICAgICBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIo
bmV3QXJyYXlCdWZmZXIubV9pbW11dGFibGVCdXR0ZXJmbHkpLnNldCh2bSwgY29kZUJsb2NrLCBp
bW11dGFibGVCdXR0ZXJmbHkpOwogICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsK
ICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91
dHB1dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAKaW5kZXgg
NzQ5MzNkYzYwNTE1YzVkYTAwZWExOGZjN2Q1ZGIzYWQ5Y2U1ZTljZi4uZDU3ZmIxZWVhODA0NGEz
NGI3OTE3NjhhOTA5NzY5ODk5OGFjMzM5MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPdXRwdXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T3V0cHV0LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTY1NSwxNSArNjU1LDM3IEBAIExWYWx1ZSBPdXRwdXQ6Om5vdFplcm82
NChMVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+
KG1fcHJvYywgQjM6Ok5vdEVxdWFsLCBvcmlnaW4oKSwgdmFsdWUsIGludDY0WmVybyk7CiB9CiAK
LUxWYWx1ZSBPdXRwdXQ6OnNlbGVjdChMVmFsdWUgdmFsdWUsIExWYWx1ZSB0YWtlbiwgTFZhbHVl
IG5vdFRha2VuKQorTFZhbHVlIE91dHB1dDo6c2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIGxl
ZnQsIExWYWx1ZSByaWdodCwgU2VsZWN0UHJlZGljdGFiaWxpdHkgcHJlZGljdGFiaWxpdHkpCiB7
CiAgICAgaWYgKHZhbHVlLT5oYXNJbnQzMigpKSB7CiAgICAgICAgIGlmICh2YWx1ZS0+YXNJbnQz
MigpKQotICAgICAgICAgICAgcmV0dXJuIHRha2VuOworICAgICAgICAgICAgcmV0dXJuIGxlZnQ7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBub3RUYWtlbjsKKyAgICAgICAgICAg
IHJldHVybiByaWdodDsKICAgICB9Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6
VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksIHZhbHVlLCB0YWtlbiwgbm90VGFr
ZW4pOworCisgICAgaWYgKHByZWRpY3RhYmlsaXR5ID09IFNlbGVjdFByZWRpY3RhYmlsaXR5OjpO
b3RQcmVkaWN0YWJsZSkKKyAgICAgICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFs
dWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksIHZhbHVlLCBsZWZ0LCByaWdodCk7CisK
KyAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBuZXdCbG9jaygpOworICAgIExCYXNpY0Js
b2NrIGxlZnRUYWtlbkJsb2NrID0gbmV3QmxvY2soKTsKKyAgICBMQmFzaWNCbG9jayByaWdodFRh
a2VuQmxvY2sgPSBuZXdCbG9jaygpOworCisgICAgbV9ibG9jay0+YXBwZW5kTmV3Q29udHJvbFZh
bHVlKAorICAgICAgICBtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLCB2YWx1ZSwKKyAgICAg
ICAgRnJlcXVlbnRlZEJsb2NrKGxlZnRUYWtlbkJsb2NrLCBwcmVkaWN0YWJpbGl0eSAhPSBTZWxl
Y3RQcmVkaWN0YWJpbGl0eTo6UmlnaHRMaWtlbHkgPyBGcmVxdWVuY3lDbGFzczo6Tm9ybWFsIDog
RnJlcXVlbmN5Q2xhc3M6OlJhcmUpLAorICAgICAgICBGcmVxdWVudGVkQmxvY2socmlnaHRUYWtl
bkJsb2NrLCBwcmVkaWN0YWJpbGl0eSAhPSBTZWxlY3RQcmVkaWN0YWJpbGl0eTo6TGVmdExpa2Vs
eSA/IEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWwgOiBGcmVxdWVuY3lDbGFzczo6UmFyZSkpOworCisg
ICAgTFZhbHVlIHBoaSA9IGNvbnRpbnVhdGlvbi0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9j
LCBCMzo6UGhpLCBsZWZ0LT50eXBlKCksIG9yaWdpbigpKTsKKworICAgIGxlZnRUYWtlbkJsb2Nr
LT5hcHBlbmROZXc8QjM6OlVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgbGVmdCwgcGhp
KTsKKyAgICBsZWZ0VGFrZW5CbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgQjM6
Okp1bXAsIG9yaWdpbigpLCBCMzo6RnJlcXVlbnRlZEJsb2NrKGNvbnRpbnVhdGlvbikpOworCisg
ICAgcmlnaHRUYWtlbkJsb2NrLT5hcHBlbmROZXc8QjM6OlVwc2lsb25WYWx1ZT4obV9wcm9jLCBv
cmlnaW4oKSwgcmlnaHQsIHBoaSk7CisgICAgcmlnaHRUYWtlbkJsb2NrLT5hcHBlbmROZXdDb250
cm9sVmFsdWUobV9wcm9jLCBCMzo6SnVtcCwgb3JpZ2luKCksIEIzOjpGcmVxdWVudGVkQmxvY2so
Y29udGludWF0aW9uKSk7CisKKyAgICBtX2Jsb2NrID0gY29udGludWF0aW9uOworICAgIHJldHVy
biBwaGk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmF0b21pY1hjaGdBZGQoTFZhbHVlIG9wZXJhbmQs
IFR5cGVkUG9pbnRlciBwb2ludGVyLCBXaWR0aCB3aWR0aCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE91dHB1dC5oCmluZGV4IGM1NmI0ZWY3ZTA2MGY5MzYyYjNiZGNhMGZkNDZhMDNhYTU3MGNh
MmUuLjRjMDJiMzQwODUxNDZmN2RmMDI1NjI3ZDVmZjMxYzc4MTBkOGZiNzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkZU
TEFiYnJldmlhdGVkVHlwZXMuaCIKICNpbmNsdWRlICJGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5
LmgiCiAjaW5jbHVkZSAiRlRMQ29tbW9uVmFsdWVzLmgiCisjaW5jbHVkZSAiRlRMU2VsZWN0UHJl
ZGljdGFiaWxpdHkuaCIKICNpbmNsdWRlICJGVExTdGF0ZS5oIgogI2luY2x1ZGUgIkZUTFN3aXRj
aENhc2UuaCIKICNpbmNsdWRlICJGVExUeXBlZFBvaW50ZXIuaCIKQEAgLTM2NSw3ICszNjYsNyBA
QCBwdWJsaWM6CiAgICAgTFZhbHVlIHRlc3RJc1plcm9QdHIoTFZhbHVlIHZhbHVlLCBMVmFsdWUg
bWFzaykgeyByZXR1cm4gaXNOdWxsKGJpdEFuZCh2YWx1ZSwgbWFzaykpOyB9CiAgICAgTFZhbHVl
IHRlc3ROb25aZXJvUHRyKExWYWx1ZSB2YWx1ZSwgTFZhbHVlIG1hc2spIHsgcmV0dXJuIG5vdE51
bGwoYml0QW5kKHZhbHVlLCBtYXNrKSk7IH0KIAotICAgIExWYWx1ZSBzZWxlY3QoTFZhbHVlIHZh
bHVlLCBMVmFsdWUgdGFrZW4sIExWYWx1ZSBub3RUYWtlbik7CisgICAgTFZhbHVlIHNlbGVjdChM
VmFsdWUgdmFsdWUsIExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2VuLCBTZWxlY3RQcmVkaWN0
YWJpbGl0eSA9IFNlbGVjdFByZWRpY3RhYmlsaXR5OjpOb3RQcmVkaWN0YWJsZSk7CiAgICAgCiAg
ICAgLy8gVGhlc2UgYXJlIHJlbGF4ZWQgYXRvbWljcyBieSBkZWZhdWx0LiBVc2UgQWJzdHJhY3RI
ZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVGZW5jZWRBY2Nlc3MoKSB3aXRoIGEKICAgICAvLyBub24t
bnVsbCBoZWFwIHRvIG1ha2UgdGhlbSBzZXFfY3N0IGZlbmNlZC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
NjAyYWNmZmU0MDQ0NTU1MTAwZWI0NWQ4ZjZhMDMwOWYzNTgxMWQ1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oCkBA
IC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpT
Qzo6RlRMIHsKKworZW51bSBjbGFzcyBTZWxlY3RQcmVkaWN0YWJpbGl0eSA6IHVpbnQ4X3Qgewor
ICAgIC8vIFVzZSB0aGlzIHdoZW4gd2UgZXhwZWN0IGl0IHRvIGJlIHZlcnkgdW5saWtlbHkgdGhl
IGJyYW5jaCBwcmVkaWN0b3Igd2lsbCBiZSBhYmxlIHRvIGd1ZXNzIHdoaWNoIHNpZGUgb2YgdGhl
IHNlbGVjdCB3aWxsIGJlIGNob3Nlbi4gVGhpcyB0ZWxscyBCMyB0byB0cnkgdG8gZW1pdCB0aGUg
c2VsZWN0IGFzIGEgY29uZGl0aW9uYWwgbW92ZSwgd2hpY2ggKHVzdWFsbHkpIGlzIG5vdCBzcGVj
dWxhdGVkIGJ5IHRoZSBDUFUuCisgICAgTm90UHJlZGljdGFibGUsCisgICAgLy8gVXNlIHRoaXMg
d2hlbiBpdCdzIHBvc3NpYmxlIGEgYnJhbmNoIHByZWRpY3RvciB3aWxsIGRvIGEgZ29vZCBqb2Ig
Z3Vlc3NpbmcgdGhlIHNlbGVjdGVkIHZhbHVlIGJ1dCB3ZSBkb24ndCBrbm93IGEgcHJpb3JpIHdo
aWNoIHNpZGUgaXMgbW9yZSBsaWtlbHkuCisgICAgUHJlZGljdGFibGUsCisgICAgLy8gVXNlIHRo
ZXNlIHdoZW4gd2UgYXJlIHZlcnkgc3VyZSBvbmUgb2YgdGhlIHR3byBzaWRlcyBpcyBzdWJzdGFu
dGlhbGx5IG1vcmUgbGlrZWx5IHRoYW4gdGhlIG90aGVyLgorICAgIExlZnRMaWtlbHksCisgICAg
UmlnaHRMaWtlbHksCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8g
RU5BQkxFKEZUTF9KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFNsb3dQYXRoQ2FsbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENh
bGwuaAppbmRleCBmZTJhNGVjNzI2Y2VjZWQzNDEzMDkzOTk0OTRlYTllYjdlNmI0YjVmLi43MGQy
ODhlMDNmMWQ4ZDgxZjI3N2Y2YjgyMTdhYzlmM2ZhODBjMTJhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgKQEAgLTEwMCw3ICsxMDAsNyBAQCBTbG93UGF0
aENhbGwgY2FsbE9wZXJhdGlvbigKICAgICBpZiAoY2FsbFNpdGVJbmRleCkgewogICAgICAgICBq
aXQuc3RvcmUzMigKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxT
aXRlSW5kZXguYml0cygpKSwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpKSk7CiAgICAgfQogICAgIHJldHVybiBjYWxsT3BlcmF0aW9uKHZt
LCB1c2VkUmVnaXN0ZXJzLCBqaXQsIGV4Y2VwdGlvblRhcmdldCwgZnVuY3Rpb24sIHJlc3VsdEdQ
UiwgYXJndW1lbnRzLi4uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9n
ZW5lcmF0b3IvQ2hlY2twb2ludHMucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9y
L0NoZWNrcG9pbnRzLnJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2YTVmNTI3N2RkNjMxYWNkNGNjYmVjZDE0YjI0
Y2M1ZDRhMzlhMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2Vu
ZXJhdG9yL0NoZWNrcG9pbnRzLnJiCkBAIC0wLDAgKzEsNjQgQEAKKyMgQ29weXJpZ2h0IChDKSAy
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
IyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKK2NsYXNzIENoZWNrcG9pbnQKKyAgICBhdHRyX3JlYWRlciA6
dXNlcworICAgIGF0dHJfcmVhZGVyIDpkZWZzCisgICAgYXR0cl9yZWFkZXIgOm5hbWUKKyAgICBh
dHRyX3JlYWRlciA6aW5kZXgKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUsIGluZGV4LCB0bXBz
KQorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQGluZGV4ID0gaW5kZXgKKyAgICAgICAg
QHVzZXMgPSB0bXBzLmZpbHRlciB7IHwodG1wLCB1c2VEZWYpfCB1c2VEZWYgPT0gOnVzZSB9Cisg
ICAgICAgIEBkZWZzID0gdG1wcy5maWx0ZXIgeyB8KHRtcCwgdXNlRGVmKXwgdXNlRGVmID09IDpk
ZWZpbmUgfQorICAgIGVuZAorCisgICAgZGVmIGxpdmVuZXNzKG5hbWVzcGFjZSkKKyAgICAgICAg
RU9GPC0tCisgICAgY2FzZSAje25hbWVzcGFjZX06OiN7bmFtZX06CitFT0YKKyAgICBlbmQKK2Vu
ZAorCitjbGFzcyBDaGVja3BvaW50cworICAgIGRlZiBpbml0aWFsaXplKG9wY29kZSwgdG1wcywg
Y2hlY2twb2ludHMpCisgICAgICAgIEBvcGNvZGUgPSBvcGNvZGUKKyAgICAgICAgQHRtcHMgPSB0
bXBzCisgICAgICAgIEBjaGVja3BvaW50cyA9IGNoZWNrcG9pbnRzLm1hcF93aXRoX2luZGV4IHsg
fChuYW1lLCB0bXBzKSwgaW5kZXh8IENoZWNrcG9pbnQubmV3KG5hbWUsIGluZGV4LCB0bXBzKSB9
CisgICAgZW5kCisKKyAgICBkZWYgbGl2ZW5lc3MKKyAgICAgICAgQGNoZWNrcG9pbnRzLmVhY2gg
ZG8gfGNoZWNrcG9pbnR8CisKKyAgICAgICAgZW5kCisgICAgICAgIEVPRjwtLQorQml0TWFwPG1h
eE51bVRtcHM+IHRtcExpdmVuZXNzRm9yI3tAb3Bjb2RlLmNhcGl0YWxpemVkX25hbWV9KHVpbnQ4
X3QgY2hlY2twb2ludCkKK3sKKyAgICBzd2l0Y2ggKGNoZWNrcG9pbnQpIHsKKworICAgIH0KK30K
K0VPRgorICAgIGVuZAorZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2Vu
ZXJhdG9yL09wY29kZS5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2Rl
LnJiCmluZGV4IDY4NGIzMDBlOWQ5ODE0MTQxNjE1NzNjMDY2YTliMTJkNjcxNzBmYzIuLjgyMzc0
YjdmYmU4NmQ1Nzg4YjNhNDA1ODE1OGE4OThkNmE2YTIwOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJiCkBAIC0zMCw2ICszMCw3IEBAIGNsYXNzIE9wY29kZQog
ICAgIGF0dHJfcmVhZGVyIDphcmdzCiAgICAgYXR0cl9yZWFkZXIgOm1ldGFkYXRhCiAgICAgYXR0
cl9yZWFkZXIgOmV4dHJhcworICAgIGF0dHJfcmVhZGVyIDpjaGVja3BvaW50cwogCiAgICAgbW9k
dWxlIFNpemUKICAgICAgICAgTmFycm93ID0gIk9wY29kZVNpemU6Ok5hcnJvdyIKQEAgLTQ1LDEy
ICs0NiwxNCBAQCBjbGFzcyBPcGNvZGUKICAgICAgICAgdGlkCiAgICAgZW5kCiAKLSAgICBkZWYg
aW5pdGlhbGl6ZShzZWN0aW9uLCBuYW1lLCBleHRyYXMsIGFyZ3MsIG1ldGFkYXRhLCBtZXRhZGF0
YV9pbml0aWFsaXplcnMpCisgICAgZGVmIGluaXRpYWxpemUoc2VjdGlvbiwgbmFtZSwgZXh0cmFz
LCBhcmdzLCBtZXRhZGF0YSwgbWV0YWRhdGFfaW5pdGlhbGl6ZXJzLCB0bXBzLCBjaGVja3BvaW50
cykKICAgICAgICAgQHNlY3Rpb24gPSBzZWN0aW9uCiAgICAgICAgIEBuYW1lID0gbmFtZQogICAg
ICAgICBAZXh0cmFzID0gZXh0cmFzIHx8IHt9CiAgICAgICAgIEBtZXRhZGF0YSA9IE1ldGFkYXRh
Lm5ldyBtZXRhZGF0YSwgbWV0YWRhdGFfaW5pdGlhbGl6ZXJzCiAgICAgICAgIEBhcmdzID0gYXJn
cy5tYXAud2l0aF9pbmRleCB7IHwoYXJnX25hbWUsIHR5cGUpLCBpbmRleHwgQXJndW1lbnQubmV3
IGFyZ19uYW1lLCB0eXBlLCBpbmRleCB9IHVubGVzcyBhcmdzLm5pbD8KKyAgICAgICAgQHRtcHMg
PSB0bXBzCisgICAgICAgIEBjaGVja3BvaW50cyA9IGNoZWNrcG9pbnRzLm1hcCB7IHwoY2hlY2tw
b2ludCwgXyl8IGNoZWNrcG9pbnQgfSB1bmxlc3MgY2hlY2twb2ludHMubmlsPwogICAgIGVuZAog
CiAgICAgZGVmIGNyZWF0ZV9pZCEKQEAgLTEyNyw2ICsxMzAsOCBAQCBjbGFzcyBPcGNvZGUKICAg
ICAgICAgPDwtRU9GCiBzdHJ1Y3QgI3tjYXBpdGFsaXplZF9uYW1lfSA6IHB1YmxpYyBJbnN0cnVj
dGlvbiB7CiAgICAgI3tvcGNvZGVJRH0KKyAgICAje3RlbXBzfQorICAgICN7Y2hlY2twb2ludFZh
bHVlc30KIAogI3tlbWl0dGVyfQogI3tkdW1wZXJ9CkBAIC0xNDEsNiArMTQ2LDE4IEBAIEVPRgog
ICAgICAgICAic3RhdGljIGNvbnN0ZXhwciAje29wY29kZUlEVHlwZX0gb3Bjb2RlSUQgPSAje25h
bWV9OyIKICAgICBlbmQKIAorICAgIGRlZiBjaGVja3BvaW50VmFsdWVzCisgICAgICAgIHJldHVy
biBpZiBAY2hlY2twb2ludHMubmlsPworCisgICAgICAgIFsiZW51bSBDaGVja3BvaW50cyA6IHVp
bnQ4X3QgeyJdLmNvbmNhdChjaGVja3BvaW50cy5tYXB7IHxjaGVja3BvaW50fCAiICAgICAgICAj
e2NoZWNrcG9pbnR9LCIgfSkuY29uY2F0KFsiICAgICAgICBudW1iZXJPZkNoZWNrcG9pbnRzLCIs
ICIgICAgfTsiXSkuam9pbigiXG4iKQorICAgIGVuZAorCisgICAgZGVmIHRlbXBzCisgICAgICAg
IHJldHVybiBpZiBAdG1wcy5uaWw/CisKKyAgICAgICAgWyJlbnVtIFRtcHMgOiB1aW50OF90IHsi
XS5jb25jYXQoQHRtcHMubWFwIHt8KHRtcCwgdHlwZSl8ICIgICAgICAgICN7dG1wfSwifSkucHVz
aCgiICAgIH07Iikuam9pbigiXG4iKQorICAgIGVuZAorCiAgICAgZGVmIGVtaXR0ZXIKICAgICAg
ICAgb3Bfd2lkZTE2ID0gQXJndW1lbnQubmV3KHdpZGUxNiwgb3Bjb2RlSURUeXBlLCAwKQogICAg
ICAgICBvcF93aWRlMzIgPSBBcmd1bWVudC5uZXcod2lkZTMyLCBvcGNvZGVJRFR5cGUsIDApCkBA
IC0yMDksNiArMjI2LDcgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxPcGNvZGVTaXplIF9fc2l6
ZSwgYm9vbCByZWNvcmRPcGNvZGUsIHR5cGVuYW1lIEJ5dGVjb2RlR2VuZXJhdG9yPgogICAgIHN0
YXRpYyBib29sIGVtaXRJbXBsKEJ5dGVjb2RlR2VuZXJhdG9yKiBnZW4je3R5cGVkX2FyZ3N9I3tt
ZXRhZGF0YV9wYXJhbX0pCiAgICAgeworICAgICAgICAjeyFAY2hlY2twb2ludHMubmlsPyA/ICJn
ZW4tPnNldFVzZXNDaGVja3BvaW50cygpOyIgOiAiIn0KICAgICAgICAgaWYgKF9fc2l6ZSA9PSBP
cGNvZGVTaXplOjpXaWRlMTYpCiAgICAgICAgICAgICBnZW4tPmFsaWduV2lkZU9wY29kZTE2KCk7
CiAgICAgICAgIGVsc2UgaWYgKF9fc2l6ZSA9PSBPcGNvZGVTaXplOjpXaWRlMzIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL1NlY3Rpb24ucmIgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL1NlY3Rpb24ucmIKaW5kZXggMjA0YWM3NTllMTNlZmYx
NTFmOGNkMTc3ZjNiZjFiNzBlMDc3OWNhYS4uNjY4NTViYTY1MDA4MGU0YzIzY2MwZWJlYzEwZTc5
NDljZGU3NjhiOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9T
ZWN0aW9uLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlvbi5y
YgpAQCAtNDMsNyArNDMsNyBAQCBjbGFzcyBTZWN0aW9uCiAgIGVuZAogCiAgIGRlZiBjcmVhdGVf
b3Bjb2RlKG5hbWUsIGNvbmZpZykKLSAgICAgIE9wY29kZS5uZXcoc2VsZiwgbmFtZSwgY29uZmln
WzpleHRyYXNdLCBjb25maWdbOmFyZ3NdLCBjb25maWdbOm1ldGFkYXRhXSwgY29uZmlnWzptZXRh
ZGF0YV9pbml0aWFsaXplcnNdKQorICAgICAgT3Bjb2RlLm5ldyhzZWxmLCBuYW1lLCBjb25maWdb
OmV4dHJhc10sIGNvbmZpZ1s6YXJnc10sIGNvbmZpZ1s6bWV0YWRhdGFdLCBjb25maWdbOm1ldGFk
YXRhX2luaXRpYWxpemVyc10sIGNvbmZpZ1s6dG1wc10sIGNvbmZpZ1s6Y2hlY2twb2ludHNdKQog
ICBlbmQKIAogICBkZWYgYWRkX29wY29kZV9ncm91cChuYW1lLCBvcGNvZGVzLCBjb25maWcpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCmluZGV4IDY3NTQwZDkwN2ZkZmQ3ZTVmOWE0YjZj
MTkwNzE5MWQ2OGZjYjYxNzMuLjQzOTYzMDUwN2Q2NDMwNzBjYTc0YWEwNTkxN2IzMTNjNzM4ZDkz
ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC03MjEsNiArNzIxLDcgQEAg
dm9pZCBIZWFwOjpnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIHJv
b3RzKQogICAgIGlmICghVk06OmNhblVzZUpJVCgpKQogICAgICAgICByZXR1cm47CiAgICAgbV92
bS5nYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMocm9vdHMpOworICAgIG1fdm0uc2NhblNpZGVTdGF0
ZShyb290cyk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShyb290cyk7CiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKaW5kZXggMjQx
MDFjMDdlODAzMWQ2NGUzMmYyODU0Zjk0NjI5NzhmZmYwMjIwYi4uMmM3NzVmOTQ0ZjhlZTc0ZDQx
Y2U5OTIzNjI1YjU4Mjc2NzRlY2JmNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0NhbGxGcmFtZS5jcHAKQEAgLTkwLDIyICs5MCwyMiBAQCBib29sIENhbGxGcmFt
ZTo6Y2FsbFNpdGVCaXRzQXJlQ29kZU9yaWdpbkluZGV4KCkgY29uc3QKIAogdW5zaWduZWQgQ2Fs
bEZyYW1lOjpjYWxsU2l0ZUFzUmF3Qml0cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRoaXNbQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNdLnRhZygpOworICAgIHJldHVy
biB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpXS50YWcoKTsKIH0KIAogU1VQUFJFU1NfQVNBTiB1bnNpZ25lZCBDYWxsRnJhbWU6
OnVuc2FmZUNhbGxTaXRlQXNSYXdCaXRzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdGhpc1tDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc10udW5zYWZlVGFnKCk7CisgICAg
cmV0dXJuIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyldLnVuc2FmZVRhZygpOwogfQogCiBDYWxsU2l0ZUluZGV4IENhbGxGcmFt
ZTo6Y2FsbFNpdGVJbmRleCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0
ZWNvZGVJbmRleChjYWxsU2l0ZUFzUmF3Qml0cygpKSk7CisgICAgcmV0dXJuIENhbGxTaXRlSW5k
ZXg6OmZyb21CaXRzKGNhbGxTaXRlQXNSYXdCaXRzKCkpOwogfQogCiBTVVBQUkVTU19BU0FOIENh
bGxTaXRlSW5kZXggQ2FsbEZyYW1lOjp1bnNhZmVDYWxsU2l0ZUluZGV4KCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KHVuc2FmZUNhbGxTaXRlQXNSYXdC
aXRzKCkpKTsKKyAgICByZXR1cm4gQ2FsbFNpdGVJbmRleDo6ZnJvbUJpdHModW5zYWZlQ2FsbFNp
dGVBc1Jhd0JpdHMoKSk7CiB9CiAKIGNvbnN0IEluc3RydWN0aW9uKiBDYWxsRnJhbWU6OmN1cnJl
bnRWUEMoKSBjb25zdApAQCAtMTE3LDcgKzExNyw4IEBAIGNvbnN0IEluc3RydWN0aW9uKiBDYWxs
RnJhbWU6OmN1cnJlbnRWUEMoKSBjb25zdAogdm9pZCBDYWxsRnJhbWU6OnNldEN1cnJlbnRWUEMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIHZwYykKIHsKICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlKGNv
ZGVCbG9jaygpLT5ieXRlY29kZUluZGV4KHZwYykpOwotICAgIHRoaXNbQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNdLnRhZygpID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4o
Y2FsbFNpdGUuYml0cygpKTsKKyAgICB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpXS50YWcoKSA9IGNhbGxTaXRlLmJpdHMoKTsK
KyAgICBBU1NFUlQoY3VycmVudFZQQygpID09IHZwYyk7CiB9CiAKIHVuc2lnbmVkIENhbGxGcmFt
ZTo6Y2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNldCgpIGNvbnN0CkBAIC0xNDQsNyArMTQ1LDcg
QEAgQnl0ZWNvZGVJbmRleCBDYWxsRnJhbWU6OmJ5dGVjb2RlSW5kZXgoKQogICAgIH0KICNlbmRp
ZgogICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpKTsKLSAgICByZXR1
cm4gQnl0ZWNvZGVJbmRleChjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCkpOworICAgIHJl
dHVybiBjYWxsU2l0ZUluZGV4KCkuYnl0ZWNvZGVJbmRleCgpOwogfQogCiBDb2RlT3JpZ2luIENh
bGxGcmFtZTo6Y29kZU9yaWdpbigpCkBAIC0xNTgsNyArMTU5LDcgQEAgQ29kZU9yaWdpbiBDYWxs
RnJhbWU6OmNvZGVPcmlnaW4oKQogICAgICAgICByZXR1cm4gY29kZUJsb2NrKCktPmNvZGVPcmln
aW4oaW5kZXgpOwogICAgIH0KICNlbmRpZgotICAgIHJldHVybiBDb2RlT3JpZ2luKEJ5dGVjb2Rl
SW5kZXgoY2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNldCgpKSk7CisgICAgcmV0dXJuIENvZGVP
cmlnaW4oY2FsbFNpdGVJbmRleCgpLmJ5dGVjb2RlSW5kZXgoKSk7CiB9CiAKIFJlZ2lzdGVyKiBD
YWxsRnJhbWU6OnRvcE9mRnJhbWVJbnRlcm5hbCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKaW5kZXggOGFiZGRiODEwNmI0MWIxYWUwM2Q3NTc2YTgw
MWQ3YmY5MWYyMTZjOC4uN2Q1NmZjNzU0NmJjZmUwMTI5ZTI3MGIxM2ZlZDYwNDlhYmViYzY3YyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaApAQCAt
MjksNiArMjksNyBAQAogI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgogI2luY2x1ZGUgIlZNLmgi
CiAjaW5jbHVkZSAiVk1FbnRyeVJlY29yZC5oIgorI2luY2x1ZGUgPHd0Zi9FbnVtQ2xhc3NPcGVy
YXRvck92ZXJsb2Fkcy5oPgogCiBuYW1lc3BhY2UgSlNDICB7CiAKQEAgLTQ2LDE4ICs0NywyNCBA
QCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIENhbGxTaXRlSW5kZXgoKSA9IGRlZmF1bHQ7CiAg
ICAgICAgIAogICAgICAgICBleHBsaWNpdCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCkKLSAgICAgICAgICAgIDogbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgp
CisgICAgICAgICAgICA6IG1fYml0cyhieXRlY29kZUluZGV4Lm9mZnNldCgpKQorICAgICAgICB7
IAorICAgICAgICAgICAgQVNTRVJUKCFieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgZXhwbGljaXQgQ2FsbFNpdGVJbmRleCh1aW50MzJfdCBiaXRzKQorICAg
ICAgICAgICAgOiBtX2JpdHMoYml0cykKICAgICAgICAgeyB9CiAKLSAgICAgICAgZXhwbGljaXQg
b3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9ieXRlY29kZUluZGV4OyB9Ci0gICAg
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxsU2l0ZUluZGV4JiBvdGhlcikgY29uc3QgeyBy
ZXR1cm4gbV9ieXRlY29kZUluZGV4ID09IG90aGVyLm1fYnl0ZWNvZGVJbmRleDsgfQorICAgICAg
ICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2JpdHM7IH0KKyAg
ICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGxTaXRlSW5kZXgmIG90aGVyKSBjb25zdCB7
IHJldHVybiBtX2JpdHMgPT0gb3RoZXIubV9iaXRzOyB9CiAKLSAgICAgICAgdWludDMyX3QgYml0
cygpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKTsgfQorICAgICAgICB1
aW50MzJfdCBiaXRzKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzOyB9CisgICAgICAgIHN0YXRpYyBD
YWxsU2l0ZUluZGV4IGZyb21CaXRzKHVpbnQzMl90IGJpdHMpIHsgcmV0dXJuIENhbGxTaXRlSW5k
ZXgoYml0cyk7IH0KIAotICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBjb25z
dCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXg7IH0KKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gQnl0ZWNvZGVJbmRleChiaXRzKCkpOyB9CiAKICAg
ICBwcml2YXRlOgotICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAg
ICAgdWludDMyX3QgbV9iaXRzIHsgQnl0ZWNvZGVJbmRleCgpLm9mZnNldCgpIH07CiAgICAgfTsK
IAogICAgIGNsYXNzIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4IDogcHVibGljIENhbGxTaXRlSW5k
ZXggewpAQCAtNjUsNyArNzIsNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIERpc3Bvc2Fi
bGVDYWxsU2l0ZUluZGV4KCkgPSBkZWZhdWx0OwogCiAgICAgICAgIGV4cGxpY2l0IERpc3Bvc2Fi
bGVDYWxsU2l0ZUluZGV4KHVpbnQzMl90IGJpdHMpCi0gICAgICAgICAgICA6IENhbGxTaXRlSW5k
ZXgoQnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHMoYml0cykpCisgICAgICAgICAgICA6IENhbGxTaXRl
SW5kZXgoYml0cykKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTc4LDI0ICs4NSwyNyBAQCBu
YW1lc3BhY2UgSlNDICB7CiAgICAgLy8gYXJtNjRfMzIgZXhwZWN0cyBjYWxsZXIgZnJhbWUgYW5k
IHJldHVybiBwYyB0byB1c2UgOCBieXRlcyAKICAgICBzdHJ1Y3QgQ2FsbGVyRnJhbWVBbmRQQyB7
CiAgICAgICAgIGFsaWduYXMoQ1BVUmVnaXN0ZXIpIENhbGxGcmFtZSogY2FsbGVyRnJhbWU7Ci0g
ICAgICAgIGFsaWduYXMoQ1BVUmVnaXN0ZXIpIGNvbnN0IEluc3RydWN0aW9uKiByZXR1cm5QQzsK
KyAgICAgICAgYWxpZ25hcyhDUFVSZWdpc3Rlcikgdm9pZCogcmV0dXJuUEM7CiAgICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgaW50IHNpemVJblJlZ2lzdGVycyA9IDIgKiBzaXplb2YoQ1BVUmVnaXN0
ZXIpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB9OwogICAgIHN0YXRpY19hc3NlcnQoQ2FsbGVy
RnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzID09IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAv
IHNpemVvZihSZWdpc3RlciksICJDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMgaXMg
aW5jb3JyZWN0LiIpOwogCi0gICAgc3RydWN0IENhbGxGcmFtZVNsb3QgewotICAgICAgICBzdGF0
aWMgY29uc3RleHByIGludCBjb2RlQmxvY2sgPSBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdp
c3RlcnM7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGNhbGxlZSA9IGNvZGVCbG9jayAr
IDE7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzID0gY2FsbGVlICsgMTsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgdGhpc0FyZ3Vt
ZW50ID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyAxOwotICAgICAgICBzdGF0aWMgY29u
c3RleHByIGludCBmaXJzdEFyZ3VtZW50ID0gdGhpc0FyZ3VtZW50ICsgMTsKKyAgICBlbnVtIGNs
YXNzIENhbGxGcmFtZVNsb3QgOiBpbnQgeworICAgICAgICBjb2RlQmxvY2sgPSBDYWxsZXJGcmFt
ZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMsCisgICAgICAgIGNhbGxlZSA9IGNvZGVCbG9jayArIDEs
CisgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbGVlICsgMSwKKyAgICAg
ICAgdGhpc0FyZ3VtZW50ID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyAxLAorICAgICAg
ICBmaXJzdEFyZ3VtZW50ID0gdGhpc0FyZ3VtZW50ICsgMSwKICAgICB9OwogCisgICAgT1ZFUkxP
QURfTUFUSF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0lUSF9JTlRFR1JBTFMoQ2FsbEZyYW1l
U2xvdCkKKyAgICBPVkVSTE9BRF9SRUxBVElPTkFMX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19X
SVRIX0lOVEVHUkFMUyhDYWxsRnJhbWVTbG90KQorCiAgICAgLy8gUmVwcmVzZW50cyB0aGUgY3Vy
cmVudCBzdGF0ZSBvZiBzY3JpcHQgZXhlY3V0aW9uLgogICAgIC8vIFBhc3NlZCBhcyB0aGUgZmly
c3QgYXJndW1lbnQgdG8gbW9zdCBmdW5jdGlvbnMuCiAgICAgY2xhc3MgQ2FsbEZyYW1lIDogcHJp
dmF0ZSBSZWdpc3RlciB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgY29uc3RleHByIGlu
dCBoZWFkZXJTaXplSW5SZWdpc3RlcnMgPSBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyArIDE7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGhlYWRlclNpemVJ
blJlZ2lzdGVycyA9IHN0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpICsgMTsKIAogICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBv
bmx5IGJlIGNhbGxlZCBpbiB2ZXJ5IHNwZWNpZmljIGNpcmN1bXN0YW5jZXMKICAgICAgICAgLy8g
d2hlbiB5b3UndmUgZ3VhcmFudGVlZCB0aGUgY2FsbGVlIGNhbid0IGJlIGEgV2FzbSBjYWxsZWUs
IGFuZCBjYW4KQEAgLTEwNiwxMCArMTE2LDEwIEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAg
Ly8gdG8gc2VlIGlmIGl0J3MgYSBjZWxsLCBhbmQgaWYgaXQncyBub3QsIHdlIHRocm93IGFuIGV4
Y2VwdGlvbi4KICAgICAgICAgaW5saW5lIEpTVmFsdWUgZ3VhcmFudGVlZEpTVmFsdWVDYWxsZWUo
KSBjb25zdDsKICAgICAgICAgaW5saW5lIEpTT2JqZWN0KiBqc0NhbGxlZSgpIGNvbnN0OwotICAg
ICAgICBDYWxsZWVCaXRzIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIENhbGxlZUJpdHModGhpc1tD
YWxsRnJhbWVTbG90OjpjYWxsZWVdLnBvaW50ZXIoKSk7IH0KLSAgICAgICAgU1VQUFJFU1NfQVNB
TiBDYWxsZWVCaXRzIHVuc2FmZUNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIENhbGxlZUJpdHModGhp
c1tDYWxsRnJhbWVTbG90OjpjYWxsZWVdLmFzYW5VbnNhZmVQb2ludGVyKCkpOyB9CisgICAgICAg
IENhbGxlZUJpdHMgY2FsbGVlKCkgY29uc3QgeyByZXR1cm4gQ2FsbGVlQml0cyh0aGlzW3N0YXRp
Y19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKV0ucG9pbnRlcigpKTsgfQorICAgICAg
ICBTVVBQUkVTU19BU0FOIENhbGxlZUJpdHMgdW5zYWZlQ2FsbGVlKCkgY29uc3QgeyByZXR1cm4g
Q2FsbGVlQml0cyh0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKV0u
YXNhblVuc2FmZVBvaW50ZXIoKSk7IH0KICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBj
b25zdDsKLSAgICAgICAgQ29kZUJsb2NrKiogYWRkcmVzc09mQ29kZUJsb2NrKCkgY29uc3QgeyBy
ZXR1cm4gYml0d2lzZV9jYXN0PENvZGVCbG9jayoqPih0aGlzICsgQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKTsgfQorICAgICAgICBDb2RlQmxvY2sqKiBhZGRyZXNzT2ZDb2RlQmxvY2soKSBjb25z
dCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKio+KHRoaXMgKyBzdGF0aWNfY2FzdDxp
bnQ+KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOyB9CiAgICAgICAgIGlubGluZSBTVVBQUkVT
U19BU0FOIENvZGVCbG9jayogdW5zYWZlQ29kZUJsb2NrKCkgY29uc3Q7CiAgICAgICAgIGlubGlu
ZSBKU1Njb3BlKiBzY29wZShpbnQgc2NvcGVSZWdpc3Rlck9mZnNldCkgY29uc3Q7CiAKQEAgLTE4
MiwxNSArMTkyLDEzIEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgc3RhdGljIHZvaWQgaW5p
dERlcHJlY2F0ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dlcihDYWxsRnJhbWUqIGdsb2JhbEV4ZWMsIEpT
Q2FsbGVlKiBnbG9iYWxDYWxsZWUpOwogCiAgICAgICAgIC8vIFJlYWQgYSByZWdpc3RlciBmcm9t
IHRoZSBjb2RlZnJhbWUgKG9yIGNvbnN0YW50IGZyb20gdGhlIENvZGVCbG9jaykuCi0gICAgICAg
IFJlZ2lzdGVyJiByKGludCk7CiAgICAgICAgIFJlZ2lzdGVyJiByKFZpcnR1YWxSZWdpc3Rlcik7
Ci0gICAgICAgIC8vIFJlYWQgYSByZWdpc3RlciBmb3IgYSBub24tY29uc3RhbnQKLSAgICAgICAg
UmVnaXN0ZXImIHVuY2hlY2tlZFIoaW50KTsKKyAgICAgICAgLy8gUmVhZCBhIHJlZ2lzdGVyIGZv
ciBhIGtub3duIG5vbi1jb25zdGFudAogICAgICAgICBSZWdpc3RlciYgdW5jaGVja2VkUihWaXJ0
dWFsUmVnaXN0ZXIpOwogCiAgICAgICAgIC8vIEFjY2VzcyB0byBhcmd1bWVudHMgYXMgcGFzc2Vk
LiAoQWZ0ZXIgY2FwdHVyZSwgYXJndW1lbnRzIG1heSBtb3ZlIHRvIGEgZGlmZmVyZW50IGxvY2F0
aW9uLikKICAgICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQoKSBjb25zdCB7IHJldHVybiBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcygpIC0gMTsgfQotICAgICAgICBzaXplX3QgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMoKSBjb25zdCB7IHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzXS5wYXlsb2FkKCk7IH0KKyAgICAgICAgc2l6ZV90IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgY29uc3QgeyByZXR1cm4gdGhpc1tzdGF0aWNfY2Fz
dDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKV0ucGF5bG9h
ZCgpOyB9CiAgICAgICAgIHN0YXRpYyBpbnQgYXJndW1lbnRPZmZzZXQoaW50IGFyZ3VtZW50KSB7
IHJldHVybiAoQ2FsbEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVudCArIGFyZ3VtZW50KTsgfQogICAg
ICAgICBzdGF0aWMgaW50IGFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhpbnQgYXJndW1lbnQp
IHsgcmV0dXJuIChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBhcmd1bWVudCk7IH0KIApA
QCAtMjM5LDcgKzI0Nyw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKIAogICAgICAgICBKU1ZhbHVlIGFy
Z3VtZW50QWZ0ZXJDYXB0dXJlKHNpemVfdCBhcmd1bWVudCk7CiAKLSAgICAgICAgc3RhdGljIGlu
dCBvZmZzZXRGb3Ioc2l6ZV90IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSB7IHJldHVybiBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAt
IDE7IH0KKyAgICAgICAgc3RhdGljIGludCBvZmZzZXRGb3Ioc2l6ZV90IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKSB7IHJldHVybiBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7IH0KIAogICAgICAgICBzdGF0aWMgQ2FsbEZyYW1l
KiBub0NhbGxlcigpIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICAgICAgYm9vbCBpc0RlcHJlY2F0
ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dlcigpIGNvbnN0CkBAIC0yNTEsMTAgKzI1OSwxMCBAQCBuYW1l
c3BhY2UgSlNDICB7CiAgICAgICAgIGJvb2wgaXNTdGFja092ZXJmbG93RnJhbWUoKSBjb25zdDsK
ICAgICAgICAgYm9vbCBpc1dhc21GcmFtZSgpIGNvbnN0OwogCi0gICAgICAgIHZvaWQgc2V0QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoaW50IGNvdW50KSB7IHN0YXRpY19jYXN0PFJlZ2lzdGVy
Kj4odGhpcylbQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNdLnBheWxv
YWQoKSA9IGNvdW50OyB9CisgICAgICAgIHZvaWQgc2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMoaW50IGNvdW50KSB7IHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbc3RhdGljX2Nhc3Q8
aW50PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyldLnBheWxvYWQo
KSA9IGNvdW50OyB9CiAgICAgICAgIGlubGluZSB2b2lkIHNldENhbGxlZShKU09iamVjdCopOwog
ICAgICAgICBpbmxpbmUgdm9pZCBzZXRDb2RlQmxvY2soQ29kZUJsb2NrKik7Ci0gICAgICAgIHZv
aWQgc2V0UmV0dXJuUEModm9pZCogdmFsdWUpIHsgY2FsbGVyRnJhbWVBbmRQQygpLnJldHVyblBD
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBJbnN0cnVjdGlvbio+KHZhbHVlKTsgfQorICAgICAg
ICB2b2lkIHNldFJldHVyblBDKHZvaWQqIHZhbHVlKSB7IGNhbGxlckZyYW1lQW5kUEMoKS5yZXR1
cm5QQyA9IHZhbHVlOyB9CiAKICAgICAgICAgU3RyaW5nIGZyaWVuZGx5RnVuY3Rpb25OYW1lKCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJh
bWVJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1l
SW5saW5lcy5oCmluZGV4IGE5N2RlY2E1M2JjZTE3OTI4OWIwYzM4MGQwNGU4ZjJhODYwNDc3ZDEu
LmVlN2VjMmFiMTA0YTdhMzRkOThiMGY0MzhmNjQ0YzJkY2ExYzUxNjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaApAQCAt
MzIsNTAgKzMyLDM5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgUmVnaXN0ZXImIENh
bGxGcmFtZTo6cihpbnQgaW5kZXgpCi17Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlz
LT5jb2RlQmxvY2soKTsKLSAgICBpZiAoY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRl
eChpbmRleCkpCi0gICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KCZj
b2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpKTsKLSAgICByZXR1cm4gdGhpc1tpbmRl
eF07Ci19Ci0KIGlubGluZSBSZWdpc3RlciYgQ2FsbEZyYW1lOjpyKFZpcnR1YWxSZWdpc3RlciBy
ZWcpCiB7Ci0gICAgcmV0dXJuIHIocmVnLm9mZnNldCgpKTsKLX0KLQotaW5saW5lIFJlZ2lzdGVy
JiBDYWxsRnJhbWU6OnVuY2hlY2tlZFIoaW50IGluZGV4KQotewotICAgIFJFTEVBU0VfQVNTRVJU
KGluZGV4IDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgIHJldHVybiB0aGlzW2lu
ZGV4XTsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PFJlZ2lzdGVyKj4oJnRoaXMtPmNvZGVCbG9jaygpLT5jb25zdGFudFJlZ2lzdGVy
KHJlZykpOworICAgIHJldHVybiB0aGlzW3JlZy5vZmZzZXQoKV07CiB9CiAKIGlubGluZSBSZWdp
c3RlciYgQ2FsbEZyYW1lOjp1bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAg
cmV0dXJuIHVuY2hlY2tlZFIocmVnLm9mZnNldCgpKTsKKyAgICBBU1NFUlQoIXJlZy5pc0NvbnN0
YW50KCkpOworICAgIHJldHVybiB0aGlzW3JlZy5vZmZzZXQoKV07CiB9CiAKIGlubGluZSBKU1Zh
bHVlIENhbGxGcmFtZTo6Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKSBjb25zdAogewogICAgIEFT
U0VSVCghY2FsbGVlKCkuaXNXYXNtKCkpOwotICAgIHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6
OmNhbGxlZV0uanNWYWx1ZSgpOworICAgIHJldHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKV0uanNWYWx1ZSgpOwogfQogCiBpbmxpbmUgSlNPYmplY3QqIENh
bGxGcmFtZTo6anNDYWxsZWUoKSBjb25zdAogewogICAgIEFTU0VSVCghY2FsbGVlKCkuaXNXYXNt
KCkpOwotICAgIHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0ub2JqZWN0KCk7Cisg
ICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXS5v
YmplY3QoKTsKIH0KIAogaW5saW5lIENvZGVCbG9jayogQ2FsbEZyYW1lOjpjb2RlQmxvY2soKSBj
b25zdAogewotICAgIHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNvZGVCbG9ja10uUmVnaXN0
ZXI6OmNvZGVCbG9jaygpOworICAgIHJldHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKV0uUmVnaXN0ZXI6OmNvZGVCbG9jaygpOwogfQogCiBpbmxpbmUg
U1VQUFJFU1NfQVNBTiBDb2RlQmxvY2sqIENhbGxGcmFtZTo6dW5zYWZlQ29kZUJsb2NrKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2tdLlJlZ2lzdGVy
Ojphc2FuVW5zYWZlQ29kZUJsb2NrKCk7CisgICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nhc3Q8aW50
PihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spXS5SZWdpc3Rlcjo6YXNhblVuc2FmZUNvZGVCbG9j
aygpOwogfQogCiBpbmxpbmUgSlNHbG9iYWxPYmplY3QqIENhbGxGcmFtZTo6bGV4aWNhbEdsb2Jh
bE9iamVjdChWTSYgdm0pIGNvbnN0CkBAIC0xMDIsMTIgKzkxLDEyIEBAIGlubGluZSBib29sIENh
bGxGcmFtZTo6aXNXYXNtRnJhbWUoKSBjb25zdAogCiBpbmxpbmUgdm9pZCBDYWxsRnJhbWU6OnNl
dENhbGxlZShKU09iamVjdCogY2FsbGVlKQogewotICAgIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4o
dGhpcylbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXSA9IGNhbGxlZTsKKyAgICBzdGF0aWNfY2FzdDxS
ZWdpc3Rlcio+KHRoaXMpW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKV0g
PSBjYWxsZWU7CiB9CiAKIGlubGluZSB2b2lkIENhbGxGcmFtZTo6c2V0Q29kZUJsb2NrKENvZGVC
bG9jayogY29kZUJsb2NrKQogewotICAgIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrXSA9IGNvZGVCbG9jazsKKyAgICBzdGF0aWNfY2FzdDxSZWdp
c3Rlcio+KHRoaXMpW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKV0g
PSBjb2RlQmxvY2s7CiB9CiAKIGlubGluZSB2b2lkIENhbGxGcmFtZTo6c2V0U2NvcGUoaW50IHNj
b3BlUmVnaXN0ZXJPZmZzZXQsIEpTU2NvcGUqIHNjb3BlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2hlY2twb2ludE9TUkV4aXRTaWRlU3Rh
dGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44OTM4OWQ4ODkxM2EyZDBhNTZhN2JjMTJkNGQxYzBjNGQ4MGRkMWZh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0No
ZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIkJ5dGVjb2RlSW5kZXguaCIKKyNpbmNsdWRlICJPcGVyYW5kcy5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworc3RydWN0IENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlIHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleDsKKyAgICBKU1ZhbHVlIHRtcHNbbWF4TnVtQ2hlY2twb2ludFRtcHNdIHsgfTsKK307CisK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwCmluZGV4IDU3MGIwYWZhM2JhMDg2YTQ1MDhhNTFlYmNlODBiZmI1YmY1OWNkMjUuLjM0MDY1
ODZkZTk1ZGU4YzYyZDExMWUxZWZmODY5ZWFmYmU5MGJlM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApAQCAtMzQsNiArMzQsNyBA
QAogI2luY2x1ZGUgIkJ5dGVjb2Rlcy5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZUNsb3N1cmUuaCIK
ICNpbmNsdWRlICJDYXRjaFNjb3BlLmgiCisjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRl
U3RhdGUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb2RlQ2FjaGUuaCIK
ICNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKQEAgLTEyMyw3ICsxMjQsNyBAQCBKU1ZhbHVl
IGV2YWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CiAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsK
ICAgICBDYWxsU2l0ZUluZGV4IGNhbGxlckNhbGxTaXRlSW5kZXggPSBjYWxsZXJGcmFtZS0+Y2Fs
bFNpdGVJbmRleCgpOwogICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJh
bWUtPmNvZGVCbG9jaygpOwotICAgIEpTU2NvcGUqIGNhbGxlclNjb3BlQ2hhaW4gPSBjYWxsZXJG
cmFtZS0+dW5jaGVja2VkUihjYWxsZXJDb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKS5vZmZzZXQo
KSkuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogY2FsbGVyU2NvcGVDaGFpbiA9IGNh
bGxlckZyYW1lLT51bmNoZWNrZWRSKGNhbGxlckNvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpKS5S
ZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBVbmxpbmtlZENvZGVCbG9jayogY2FsbGVyVW5saW5rZWRD
b2RlQmxvY2sgPSBjYWxsZXJDb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCk7CiAKICAgICBi
b29sIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQgPSBjYWxsZXJVbmxpbmtlZENvZGVCbG9jay0+aXNB
cnJvd0Z1bmN0aW9uKCkgfHwgY2FsbGVyVW5saW5rZWRDb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlv
bkNvbnRleHQoKTsKQEAgLTIxNSw2ICsyMTYsOSBAQCB1bnNpZ25lZCBzaXplT2ZWYXJhcmdzKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdAog
ICAgIH0KICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKICAgICAKKyAgICBpZiAo
bGVuZ3RoID4gbWF4QXJndW1lbnRzKQorICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlKTsKKwogICAgIGlmIChsZW5ndGggPj0gZmlyc3RWYXJBcmdPZmZz
ZXQpCiAgICAgICAgIGxlbmd0aCAtPSBmaXJzdFZhckFyZ09mZnNldDsKICAgICBlbHNlCkBAIC0y
NTEsNyArMjU1LDcgQEAgdW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFyYXJncyhKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwKICAgICByZXR1cm4gbGVuZ3Ro
OwogfQogCi12b2lkIGxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgSlNW
YWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoKQordm9pZCBs
b2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVs
ZW1lbnREZXN0LCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBs
ZW5ndGgpCiB7CiAgICAgaWYgKFVOTElLRUxZKCFhcmd1bWVudHMuaXNDZWxsKCkpIHx8ICFsZW5n
dGgpCiAgICAgICAgIHJldHVybjsKQEAgLTI2MywzMSArMjY3LDMxIEBAIHZvaWQgbG9hZFZhcmFy
Z3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZp
cnR1YWxSZWdpCiAgICAgc3dpdGNoIChjZWxsLT50eXBlKCkpIHsKICAgICBjYXNlIERpcmVjdEFy
Z3VtZW50c1R5cGU6CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAganNDYXN0PERp
cmVjdEFyZ3VtZW50cyo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAganNDYXN0
PERpcmVjdEFyZ3VtZW50cyo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBm
aXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgIHJldHVybjsKICAgICBj
YXNlIFNjb3BlZEFyZ3VtZW50c1R5cGU6CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAg
ICAganNDYXN0PFNjb3BlZEFyZ3VtZW50cyo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAg
ICAgICAganNDYXN0PFNjb3BlZEFyZ3VtZW50cyo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xv
YmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIEpTSW1tdXRhYmxlQnV0dGVyZmx5VHlwZToKICAgICAgICAgc2NvcGUu
cmVsZWFzZSgpOwotICAgICAgICBqc0Nhc3Q8SlNJbW11dGFibGVCdXR0ZXJmbHkqPihjZWxsKS0+
Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0
LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgICAgIGpzQ2FzdDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+
KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBv
ZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgIHJldHVybjsgCiAgICAgZGVmYXVsdDogewogICAgICAg
ICBBU1NFUlQoYXJndW1lbnRzLmlzT2JqZWN0KCkpOwogICAgICAgICBKU09iamVjdCogb2JqZWN0
ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CiAgICAgICAgIGlmIChpc0pTQXJyYXkob2JqZWN0
KSkgewogICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICAgICAganNDYXN0PEpT
QXJyYXkqPihvYmplY3QpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUs
IGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAgICAgIGpzQ2FzdDxK
U0FycmF5Kj4ob2JqZWN0KS0+Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgZmlyc3RFbGVt
ZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIHVuc2lnbmVkIGk7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGggJiYg
b2JqZWN0LT5jYW5HZXRJbmRleFF1aWNrbHkoaSArIG9mZnNldCk7ICsraSkKLSAgICAgICAgICAg
IGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBvYmplY3QtPmdldEluZGV4UXVp
Y2tseShpICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSBvYmpl
Y3QtPmdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsKICAgICAgICAgZm9yICg7IGkgPCBsZW5n
dGg7ICsraSkgewogICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0KGdsb2Jh
bE9iamVjdCwgaSArIG9mZnNldCk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOwotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3Qg
KyBpKSA9IHZhbHVlOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IHZhbHVlOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9IH0KQEAgLTI5OSw4ICszMDMsNyBAQCB2
b2lkIHNldHVwVmFyYXJnc0ZyYW1lKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBDYWxsRgogICAgIAogICAgIGxvYWRWYXJhcmdzKAogICAgICAgICBn
bG9iYWxPYmplY3QsCi0gICAgICAgIGNhbGxGcmFtZSwKLSAgICAgICAgY2FsbGVlRnJhbWVPZmZz
ZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApLAorICAgICAgICBiaXR3aXNlX2Nhc3Q8
SlNWYWx1ZSo+KCZjYWxsRnJhbWUtPnIoY2FsbGVlRnJhbWVPZmZzZXQgKyBDYWxsRnJhbWU6OmFy
Z3VtZW50T2Zmc2V0KDApKSksCiAgICAgICAgIGFyZ3VtZW50cywgb2Zmc2V0LCBsZW5ndGgpOwog
ICAgIAogICAgIG5ld0NhbGxGcmFtZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMobGVu
Z3RoICsgMSk7CkBAIC01NDAsOCArNTQzLDEzIEBAIHB1YmxpYzoKICAgICAgICAgbV9jb2RlQmxv
Y2sgPSB2aXNpdG9yLT5jb2RlQmxvY2soKTsKIAogICAgICAgICBtX2hhbmRsZXIgPSBudWxscHRy
OwotICAgICAgICBpZiAoIW1faXNUZXJtaW5hdGlvbikgewotICAgICAgICAgICAgaWYgKG1fY29k
ZUJsb2NrKSB7CisgICAgICAgIGlmIChtX2NvZGVCbG9jaykgeworICAgICAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBzdXBwb3J0IGV4Y2VwdGlvbiBoYW5kbGluZyBpbiBjaGVja3BvaW50cy4K
KyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAgICAgICAgIGlmIChyZW1vdmVDb2RlUHRyVGFnKG1f
cmV0dXJuUEMpID09IExMSW50OjpnZXRDb2RlUHRyPE5vUHRyVGFnPihjaGVja3BvaW50X29zcl9l
eGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpCisg
ICAgICAgICAgICAgICAgbV9jb2RlQmxvY2stPnZtKCkuZmluZENoZWNrcG9pbnRPU1JTaWRlU3Rh
dGUobV9jYWxsRnJhbWUpOworI2VuZGlmCisgICAgICAgICAgICBpZiAoIW1faXNUZXJtaW5hdGlv
bikgewogICAgICAgICAgICAgICAgIG1faGFuZGxlciA9IGZpbmRFeGNlcHRpb25IYW5kbGVyKHZp
c2l0b3IsIG1fY29kZUJsb2NrLCBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRsZXIpOwogICAgICAg
ICAgICAgICAgIGlmIChtX2hhbmRsZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTdGFj
a1Zpc2l0b3I6OkRvbmU7CkBAIC01NjMsNiArNTcxLDcgQEAgcHVibGljOgogICAgICAgICBpZiAo
c2hvdWxkU3RvcFVud2luZGluZykKICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRv
bmU7CiAKKyAgICAgICAgbV9yZXR1cm5QQyA9IG1fY2FsbEZyYW1lLT5yZXR1cm5QQygpLnZhbHVl
KCk7CiAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwogICAgIH0KIApAQCAt
NTk5LDYgKzYwOCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzVGVybWluYXRpb247CiAgICAg
Q29kZUJsb2NrKiYgbV9jb2RlQmxvY2s7CiAgICAgSGFuZGxlckluZm8qJiBtX2hhbmRsZXI7Cisg
ICAgbXV0YWJsZSBjb25zdCB2b2lkKiBtX3JldHVyblBDIHsgbnVsbHB0ciB9OwogfTsKIAogTkVW
RVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dW53aW5kKFZNJiB2bSwgQ2FsbEZy
YW1lKiYgY2FsbEZyYW1lLCBFeGNlcHRpb24qIGV4Y2VwdGlvbikKQEAgLTg2OCw3ICs4NzgsNyBA
QCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlQ2FsbChKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNPYmplY3QqCiAgICAgfQogCiAgICAgVk1FbnRyeVNjb3BlIGVudHJ5
U2NvcGUodm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgaWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1Jl
Y3Vyc2VTb2Z0KCkpKQorICAgIGlmIChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29mdCgp
IHx8IGFyZ3Muc2l6ZSgpID4gbWF4QXJndW1lbnRzKSkKICAgICAgICAgcmV0dXJuIGNoZWNrZWRS
ZXR1cm4odGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKSk7
CiAKICAgICBpZiAoaXNKU0NhbGwpIHsKQEAgLTkzNyw3ICs5NDcsNyBAQCBKU09iamVjdCogSW50
ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTTwogICAgIH0KIAogICAgIFZNRW50cnlTY29wZSBlbnRyeVNjb3BlKHZtLCBnbG9i
YWxPYmplY3QpOwotICAgIGlmIChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29mdCgpKSkg
eworICAgIGlmIChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29mdCgpIHx8IGFyZ3Muc2l6
ZSgpID4gbWF4QXJndW1lbnRzKSkgewogICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihn
bG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCmlu
ZGV4IDE4MTEyOTdiMThhZGMyZDczZmY2ZmUxZGY5NTgwMmE2YTBiMTVkYzUuLmU4M2Y0ODkyZTQ2
MzlhMTIzNmNlZTM5ZGNkYTk5ZmVjOGFkYzA1OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCkBAIC0xNzEsNyArMTcxLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhBcmd1bWVudHMgPSAw
eDEwMDAwOwogICAgIHVuc2lnbmVkIHNpemVGcmFtZUZvclZhcmFyZ3MoSlNHbG9iYWxPYmplY3Qq
LCBDYWxsRnJhbWUqLCBWTSYsIEpTVmFsdWUgYXJndW1lbnRzLCB1bnNpZ25lZCBudW1Vc2VkU3Rh
Y2tTbG90cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpOwogICAgIHVuc2lnbmVkIHNpemVG
cmFtZUZvckZvcndhcmRBcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWTSYs
IHVuc2lnbmVkIG51bVVzZWRTdGFja1Nsb3RzKTsKLSAgICB2b2lkIGxvYWRWYXJhcmdzKEpTR2xv
YmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RF
bGVtZW50RGVzdCwgSlNWYWx1ZSBzb3VyY2UsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVu
Z3RoKTsKKyAgICB2b2lkIGxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmly
c3RFbGVtZW50RGVzdCwgSlNWYWx1ZSBzb3VyY2UsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qg
bGVuZ3RoKTsKICAgICB2b2lkIHNldHVwVmFyYXJnc0ZyYW1lKEpTR2xvYmFsT2JqZWN0KiwgQ2Fs
bEZyYW1lKiBleGVjQ2FsbGVyLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUgYXJndW1l
bnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCwgdWludDMyX3QgbGVuZ3RoKTsKICAgICB2
b2lkIHNldHVwVmFyYXJnc0ZyYW1lQW5kU2V0VGhpcyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFt
ZSogZXhlY0NhbGxlciwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
SlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0LCB1aW50MzJfdCBs
ZW5ndGgpOwogICAgIHZvaWQgc2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWUoSlNHbG9iYWxPYmpl
Y3QqLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIENhbGxGcmFtZSogZXhlY0NhbGxlZSwgdWludDMy
X3QgbGVuZ3RoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9TdGFja1Zpc2l0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0
YWNrVmlzaXRvci5jcHAKaW5kZXggZDcxYTU5NzFkZGM4ZjBmNWVhNjc4ZDVmY2U0OGUzOTZlMjJh
ODc1NC4uNzVkZGQyMDNmNzNiZTA1NzZkNmRkNzQ4YjY1Y2JhYTlhYmJmYzczMiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKQEAg
LTIwOCw3ICsyMDgsNyBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFtZShDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgQ29kZU9yaWdpbiogY29kZU9yaWdpbgogICAgICAgICBtX2ZyYW1l
Lm1fY2FsbEZyYW1lID0gY2FsbEZyYW1lOwogICAgICAgICBtX2ZyYW1lLm1faW5saW5lQ2FsbEZy
YW1lID0gaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudENvdW50UmVnaXN0ZXIuaXNWYWxpZCgpKQotICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZyYW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudFJlZ2lzdGVyLm9mZnNldCgpKS51bmJveGVkSW50MzIoKTsKKyAgICAgICAgICAg
IG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGNhbGxGcmFtZS0+cihpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcikudW5ib3hlZEludDMyKCk7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CiAgICAgICAg
IG1fZnJhbWUubV9jb2RlQmxvY2sgPSBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2Nr
LmdldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKaW5k
ZXggMjgyMGNiMTc4NDVjZmNmYzg5ZjU1OTZhMWI2NDk3NTg0YmZmMDYxZS4uYTNhZmRjNDIzYjYz
MWYxZWFjMTlmYmIwYTUwNzZjNDlhNzFlNzZlYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC02NDcsMjggKzY0NywyOCBAQCBwdWJsaWM6CiAgICAg
fQogI2VuZGlmCiAKLSAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKGludCBl
bnRyeSwgR1BSUmVnIHRvLCBHUFJSZWcgZnJvbSA9IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
KQorICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoVmlydHVhbFJlZ2lzdGVy
IGVudHJ5LCBHUFJSZWcgdG8sIEdQUlJlZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIpCiAgICAgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MoZnJvbSwgZW50cnkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgdG8pOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoZnJvbSwgZW50cnkub2Zm
c2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOwogICAgIH0KLSAgICB2b2lkIGVtaXRHZXRG
cm9tQ2FsbEZyYW1lSGVhZGVyMzIoaW50IGVudHJ5LCBHUFJSZWcgdG8sIEdQUlJlZyBmcm9tID0g
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCisgICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFt
ZUhlYWRlcjMyKFZpcnR1YWxSZWdpc3RlciBlbnRyeSwgR1BSUmVnIHRvLCBHUFJSZWcgZnJvbSA9
IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQogICAgIHsKLSAgICAgICAgbG9hZDMyKEFkZHJl
c3MoZnJvbSwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOworICAgICAgICBsb2FkMzIo
QWRkcmVzcyhmcm9tLCBlbnRyeS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CiAg
ICAgfQogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlcjY0KGludCBlbnRyeSwgR1BSUmVnIHRvLCBHUFJSZWcgZnJvbSA9IEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyKQorICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2NChWaXJ0
dWFsUmVnaXN0ZXIgZW50cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlcikKICAgICB7Ci0gICAgICAgIGxvYWQ2NChBZGRyZXNzKGZyb20sIGVudHJ5
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKKyAgICAgICAgbG9hZDY0KEFkZHJlc3MoZnJvbSwg
ZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOwogICAgIH0KICNlbmRpZiAv
LyBVU0UoSlNWQUxVRTY0KQotICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUlJl
ZyBmcm9tLCBpbnQgZW50cnkpCisgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoR1BS
UmVnIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKICAgICB7Ci0gICAgICAgIHN0b3JlUHRy
KGZyb20sIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5ICogc2l6ZW9m
KFJlZ2lzdGVyKSkpOworICAgICAgICBzdG9yZVB0cihmcm9tLCBBZGRyZXNzKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBlbnRyeS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpKTsKICAg
ICB9CiAKLSAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwgaW50
IGVudHJ5KQorICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBW
aXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewotICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1t
UHRyKHZhbHVlKSwgQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZW50cnkgKiBz
aXplb2YoUmVnaXN0ZXIpKSk7CisgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIodmFsdWUp
LCBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBlbnRyeS5vZmZzZXQoKSAqIHNp
emVvZihSZWdpc3RlcikpKTsKICAgICB9CiAKICAgICB2b2lkIGVtaXRHZXRDYWxsZXJGcmFtZUZy
b21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJJRCB0bykKQEAgLTY5NiwxOSArNjk2LDE5IEBA
IHB1YmxpYzoKICAgICAvLyBjYWxsZXIncyBmcmFtZSBwb2ludGVyLiBPbiBzb21lIHBsYXRmb3Jt
cywgdGhlIGNhbGxlZSBpcyByZXNwb25zaWJsZSBmb3IgcHVzaGluZyB0aGUKICAgICAvLyAibGlu
ayByZWdpc3RlciIgY29udGFpbmluZyB0aGUgcmV0dXJuIGFkZHJlc3MgaW4gdGhlIGZ1bmN0aW9u
IHByb2xvZ3VlLgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJh
bWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShHUFJSZWcgZnJvbSwgaW50IGVudHJ5KQorICAgIHZvaWQg
ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJvbG9ndWUoR1BSUmVnIGZyb20sIFZpcnR1
YWxSZWdpc3RlciBlbnRyeSkKICAgICB7Ci0gICAgICAgIHN0b3JlUHRyKGZyb20sIEFkZHJlc3Mo
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVudHJ5ICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXpl
b2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEoKSkpOworICAgICAgICBz
dG9yZVB0cihmcm9tLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBlbnRyeS5vZmZzZXQo
KSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBwcm9sb2d1ZVN0
YWNrUG9pbnRlckRlbHRhKCkpKTsKICAgICB9CiAjZWxzZQotICAgIHZvaWQgZW1pdFB1dFBheWxv
YWRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKEdQUlJlZyBmcm9tLCBpbnQgZW50cnkp
CisgICAgdm9pZCBlbWl0UHV0UGF5bG9hZFRvQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJvbG9ndWUo
R1BSUmVnIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKICAgICB7Ci0gICAgICAgIHN0b3Jl
UHRyKGZyb20sIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVudHJ5ICogc3RhdGljX2Nh
c3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVs
dGEoKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5
bG9hZCkpKTsKKyAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdp
c3RlciwgZW50cnkub2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdp
c3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpICsgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwogICAgIH0KIAotICAgIHZv
aWQgZW1pdFB1dFRhZ1RvQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJvbG9ndWUoVHJ1c3RlZEltbTMy
IHRhZywgaW50IGVudHJ5KQorICAgIHZvaWQgZW1pdFB1dFRhZ1RvQ2FsbEZyYW1lSGVhZGVyQmVm
b3JlUHJvbG9ndWUoVHJ1c3RlZEltbTMyIHRhZywgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQogICAg
IHsKLSAgICAgICAgc3RvcmVQdHIodGFnLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBl
bnRyeSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBwcm9sb2d1
ZVN0YWNrUG9pbnRlckRlbHRhKCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnRhZykpKTsKKyAgICAgICAgc3RvcmVQdHIodGFnLCBBZGRyZXNzKHN0YWNr
UG9pbnRlclJlZ2lzdGVyLCBlbnRyeS5vZmZzZXQoKSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
c2l6ZW9mKFJlZ2lzdGVyKSkgLSBwcm9sb2d1ZVN0YWNrUG9pbnRlckRlbHRhKCkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKICAgICB9CiAj
ZW5kaWYKICAgICAKQEAgLTExNDgsOSArMTE0OCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VS
VCh2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKTsKICAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSAqIHNpemVv
ZihSZWdpc3RlcikpOwogICAgIH0KLSAgICBzdGF0aWMgQWRkcmVzcyBhZGRyZXNzRm9yKGludCBv
cGVyYW5kKQorICAgIHN0YXRpYyBBZGRyZXNzIGFkZHJlc3NGb3IoT3BlcmFuZCBvcGVyYW5kKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lz
dGVyPihvcGVyYW5kKSk7CisgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc1RtcCgpKTsKKyAgICAg
ICAgcmV0dXJuIGFkZHJlc3NGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQog
CiAgICAgc3RhdGljIEFkZHJlc3MgdGFnRm9yKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIsIEdQUlJlZyBiYXNlR1BSKQpAQCAtMTE2Myw5ICsxMTY0LDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgQVNTRVJUKHZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCkpOwogICAgICAgICByZXR1cm4gQWRk
cmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgp
ICogc2l6ZW9mKFJlZ2lzdGVyKSArIFRhZ09mZnNldCk7CiAgICAgfQotICAgIHN0YXRpYyBBZGRy
ZXNzIHRhZ0ZvcihpbnQgb3BlcmFuZCkKKyAgICBzdGF0aWMgQWRkcmVzcyB0YWdGb3IoT3BlcmFu
ZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0
dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKKyAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzVG1wKCkp
OworICAgICAgICByZXR1cm4gdGFnRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAg
IH0KIAogICAgIHN0YXRpYyBBZGRyZXNzIHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlciwgR1BSUmVnIGJhc2VHUFIpCkBAIC0xMTc4LDMwICsxMTgwLDMxIEBAIHB1Ymxp
YzoKICAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCkpOwogICAgICAgICBy
ZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgdmlydHVhbFJlZ2lzdGVy
Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQpOwogICAgIH0KLSAg
ICBzdGF0aWMgQWRkcmVzcyBwYXlsb2FkRm9yKGludCBvcGVyYW5kKQorICAgIHN0YXRpYyBBZGRy
ZXNzIHBheWxvYWRGb3IoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHBh
eWxvYWRGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7CisgICAgICAg
IEFTU0VSVCghb3BlcmFuZC5pc1RtcCgpKTsKKyAgICAgICAgcmV0dXJuIHBheWxvYWRGb3Iob3Bl
cmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogCiAgICAgLy8gQWNjZXNzIHRvIG91ciBm
aXhlZCBjYWxsZWUgQ2FsbEZyYW1lLgotICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lU2xv
dChpbnQgc2xvdCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVNsb3QoVmlydHVhbFJl
Z2lzdGVyIHNsb3QpCiAgICAgewotICAgICAgICBBU1NFUlQoc2xvdCA+PSBDYWxsZXJGcmFtZUFu
ZFBDOjpzaXplSW5SZWdpc3RlcnMpOwotICAgICAgICByZXR1cm4gQWRkcmVzcyhzdGFja1BvaW50
ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIChzbG90IC0gQ2FsbGVyRnJhbWVBbmRQQzo6
c2l6ZUluUmVnaXN0ZXJzKSk7CisgICAgICAgIEFTU0VSVChzbG90Lm9mZnNldCgpID49IENhbGxl
ckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycyk7CisgICAgICAgIHJldHVybiBBZGRyZXNzKHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogKHNsb3QgLSBDYWxsZXJGcmFt
ZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMpLm9mZnNldCgpKTsKICAgICB9CiAKICAgICAvLyBBY2Nl
c3MgdG8gb3VyIGZpeGVkIGNhbGxlZSBDYWxsRnJhbWUuCiAgICAgc3RhdGljIEFkZHJlc3MgY2Fs
bGVlQXJndW1lbnRTbG90KGludCBhcmd1bWVudCkKICAgICB7Ci0gICAgICAgIHJldHVybiBjYWxs
ZWVGcmFtZVNsb3QodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpLm9mZnNldCgp
KTsKKyAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChhcmd1bWVudCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1l
VGFnU2xvdChpbnQgc2xvdCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVRhZ1Nsb3Qo
VmlydHVhbFJlZ2lzdGVyIHNsb3QpCiAgICAgewogICAgICAgICByZXR1cm4gY2FsbGVlRnJhbWVT
bG90KHNsb3QpLndpdGhPZmZzZXQoVGFnT2Zmc2V0KTsKICAgICB9CiAKLSAgICBzdGF0aWMgQWRk
cmVzcyBjYWxsZWVGcmFtZVBheWxvYWRTbG90KGludCBzbG90KQorICAgIHN0YXRpYyBBZGRyZXNz
IGNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoVmlydHVhbFJlZ2lzdGVyIHNsb3QpCiAgICAgewogICAg
ICAgICByZXR1cm4gY2FsbGVlRnJhbWVTbG90KHNsb3QpLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNl
dCk7CiAgICAgfQpAQCAtMTIxOCw3ICsxMjIxLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIEFk
ZHJlc3MgY2FsbGVlRnJhbWVDYWxsZXJGcmFtZSgpCiAgICAgewotICAgICAgICByZXR1cm4gY2Fs
bGVlRnJhbWVTbG90KDApLndpdGhPZmZzZXQoQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgp
KTsKKyAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdChWaXJ0dWFsUmVnaXN0ZXIoMCkpLndp
dGhPZmZzZXQoQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKTsKICAgICB9CiAKICAgICBz
dGF0aWMgR1BSUmVnIHNlbGVjdFNjcmF0Y2hHUFIoUmVnaXN0ZXJTZXQgcHJlc2VydmVkKQpAQCAt
MTUyNyw3ICsxNTMwLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKCFpbmxpbmVD
YWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSk7CiAgICAgICAgIGlmICgh
aW5saW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CisgICAgICAgICAgICByZXR1
cm4gQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CiAgICAgICAgIHJl
dHVybiBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKaW5kZXgg
NWRmYjJmMTFkMzY1ZDYzYTEzZjY3MTYxNWI2YjY1MDc0NmQ3NDIwZS4uZDhkMDZjZmQ0ZDNlZmE3
YWZlODFjZTBhZjljZDczZTViZDdjYzEwMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKQEAgLTYxLDcgKzYxLDcgQEAgQ2FsbEZyYW1lU2h1
ZmZsZXI6OkNhbGxGcmFtZVNodWZmbGVyKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBDYWxsRnJh
bWVTaHVmZmxlRGEKICNlbmRpZgogCiAgICAgQVNTRVJUKCFkYXRhLmNhbGxlZS5pc0luSlNTdGFj
aygpIHx8IGRhdGEuY2FsbGVlLnZpcnR1YWxSZWdpc3RlcigpLmlzTG9jYWwoKSk7Ci0gICAgYWRk
TmV3KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpLCBkYXRhLmNhbGxlZSk7
CisgICAgYWRkTmV3KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgZGF0YS5jYWxsZWUpOwogCiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXRhLmFyZ3Muc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
QVNTRVJUKCFkYXRhLmFyZ3NbaV0uaXNJbkpTU3RhY2soKSB8fCBkYXRhLmFyZ3NbaV0udmlydHVh
bFJlZ2lzdGVyKCkuaXNMb2NhbCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2Fs
bEZyYW1lU2h1ZmZsZXIuaAppbmRleCA2MjQzOWJkZjM0NDNiODdiZTk5OTYwMmZkOWMzZWJjOTZh
ZjZhOWY1Li40YzZhYTMyZjRmNTg3NjM4MzEwOTM4ZjAwZjkyYzA5OThkNjZmOTQyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCkBAIC0xMjgsNyAr
MTI4LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKGlzVW5kZWNpZGVkKCkpOwog
ICAgICAgICBBU1NFUlQoIWdldE5ldyhqc1ZhbHVlUmVncykpOwotICAgICAgICBDYWNoZWRSZWNv
dmVyeSogY2FjaGVkUmVjb3ZlcnkgeyBnZXROZXcoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSkpIH07CisgICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSB7
IGdldE5ldyhDYWxsRnJhbWVTbG90OjpjYWxsZWUpIH07CiAgICAgICAgIEFTU0VSVChjYWNoZWRS
ZWNvdmVyeSk7CiAgICAgICAgIGFkZE5ldyhqc1ZhbHVlUmVncywgY2FjaGVkUmVjb3ZlcnktPnJl
Y292ZXJ5KCkpOwogICAgIH0KQEAgLTE0MSw3ICsxNDEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBh
c3N1bWVDYWxsZWVJc0NlbGwoKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAg
ICBDYWNoZWRSZWNvdmVyeSYgY2FsbGVlQ2FjaGVkUmVjb3ZlcnkgPSAqZ2V0TmV3KFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKyAgICAgICAgQ2FjaGVkUmVjb3Zlcnkm
IGNhbGxlZUNhY2hlZFJlY292ZXJ5ID0gKmdldE5ldyhDYWxsRnJhbWVTbG90OjpjYWxsZWUpOwog
ICAgICAgICBzd2l0Y2ggKGNhbGxlZUNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkudGVjaG5pcXVl
KCkpIHsKICAgICAgICAgY2FzZSBJblBhaXI6CiAgICAgICAgICAgICB1cGRhdGVSZWNvdmVyeSgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IDU2NTY2NzVjMzY1ZDk5ZTYxZDQwZGQ4NjNlOWFl
MDc3NmMyZjM1YWQuLmY2ZjA5YjkyYTBjY2YyNjcwZWE3ZjZjMGVmYjBiZDE3MTUyMDc1NTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtMzMxLDE2ICszMzEsMTYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQgY29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0aW9u
KiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlKTsKICAgICAgICAgZW51bSBjbGFzcyBDb21waWxlT3BF
cVR5cGUgeyBFcSwgTkVxIH07CiAgICAgICAgIHZvaWQgY29tcGlsZU9wRXFKdW1wU2xvdyhWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQ29tcGlsZU9wRXFUeXBlLCBpbnQganVtcFRh
cmdldCk7Ci0gICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnREb3VibGUoaW50IHNyYyk7Cisg
ICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyKTsKICAg
ICAgICAgCi0gICAgICAgIHZvaWQgZW1pdExvYWREb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVy
SUQgdmFsdWUpOwotICAgICAgICB2b2lkIGVtaXRMb2FkSW50MzJUb0RvdWJsZShpbnQgaW5kZXgs
IEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW1pdExvYWREb3VibGUoVmlydHVh
bFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQgdmFsdWUpOworICAgICAgICB2b2lkIGVtaXRMb2FkSW50
MzJUb0RvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CiAKICAgICAg
ICAgZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgU2hv
dWxkRmlsdGVyQmFzZSwgU2hvdWxkRmlsdGVyVmFsdWUsIFNob3VsZEZpbHRlckJhc2VBbmRWYWx1
ZSB9OwogICAgICAgICAvLyB2YWx1ZSByZWdpc3RlciBpbiB3cml0ZSBiYXJyaWVyIGlzIHVzZWQg
YmVmb3JlIGFueSBzY3JhdGNoIHJlZ2lzdGVycwogICAgICAgICAvLyBzbyBtYXkgc2FmZWx5IGJl
IHRoZSBzYW1lIGFzIGVpdGhlciBvZiB0aGUgc2NyYXRjaCByZWdpc3RlcnMuCi0gICAgICAgIHZv
aWQgZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRl
QmFycmllck1vZGUpOwotICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25l
ciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOworICAgICAgICB2b2lkIGVtaXRX
cml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUs
IFdyaXRlQmFycmllck1vZGUpOworICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxs
KiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKICAgICAg
ICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpOwogCiAgICAgICAgIC8vIFRo
aXMgYXNzdW1lcyB0aGF0IHRoZSB2YWx1ZSB0byBwcm9maWxlIGlzIGluIHJlZ1QwIGFuZCB0aGF0
IHJlZ1QzIGlzIGF2YWlsYWJsZSBmb3IKQEAgLTQwNCwzMiArNDA0LDMyIEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIGVudW0gRmluYWxPYmplY3RNb2RlIHsgTWF5QmVGaW5hbCwgS25vd25O
b3RGaW5hbCB9OwogCi0gICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3Jj
LCBKU1ZhbHVlUmVncyBkc3QpOwotICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
aW50IGRzdCwgSlNWYWx1ZVJlZ3Mgc3JjKTsKKyAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVSZWdzIGRzdCk7CisgICAgICAgIHZv
aWQgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBKU1ZhbHVlUmVn
cyBzcmMpOwogCi0gICAgICAgIGludDMyX3QgZ2V0T3BlcmFuZENvbnN0YW50SW50KGludCBzcmMp
OwotICAgICAgICBkb3VibGUgZ2V0T3BlcmFuZENvbnN0YW50RG91YmxlKGludCBzcmMpOworICAg
ICAgICBpbnQzMl90IGdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKTsK
KyAgICAgICAgZG91YmxlIGdldE9wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIg
c3JjKTsKIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGJvb2wgZ2V0T3BlcmFuZENv
bnN0YW50SW50KGludCBvcDEsIGludCBvcDIsIGludCYgb3AsIGludDMyX3QmIGNvbnN0YW50KTsK
KyAgICAgICAgYm9vbCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIG9wMSwg
VmlydHVhbFJlZ2lzdGVyIG9wMiwgaW50JiBvcCwgaW50MzJfdCYgY29uc3RhbnQpOwogCi0gICAg
ICAgIHZvaWQgZW1pdExvYWRUYWcoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZyk7Ci0gICAgICAg
IHZvaWQgZW1pdExvYWRQYXlsb2FkKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKKyAg
ICAgICAgdm9pZCBlbWl0TG9hZFRhZyhWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnKTsK
KyAgICAgICAgdm9pZCBlbWl0TG9hZFBheWxvYWQoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklE
IHBheWxvYWQpOwogCiAgICAgICAgIHZvaWQgZW1pdExvYWQoY29uc3QgSlNWYWx1ZSYgdiwgUmVn
aXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCk7Ci0gICAgICAgIHZvaWQgZW1pdExvYWQo
aW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklE
IGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgZW1pdExvYWQyKGludCBp
bmRleDEsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwgaW50IGluZGV4Miwg
UmVnaXN0ZXJJRCB0YWcyLCBSZWdpc3RlcklEIHBheWxvYWQyKTsKKyAgICAgICAgdm9pZCBlbWl0
TG9hZChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQs
IFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgdm9pZCBlbWl0
TG9hZDIoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZzEsIFJlZ2lzdGVySUQgcGF5bG9h
ZDEsIFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcyLCBSZWdpc3RlcklEIHBheWxvYWQy
KTsKIAotICAgICAgICB2b2lkIGVtaXRTdG9yZShpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBS
ZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsK
LSAgICAgICAgdm9pZCBlbWl0U3RvcmUoaW50IGluZGV4LCBjb25zdCBKU1ZhbHVlIGNvbnN0YW50
LCBSZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgZW1p
dFN0b3JlSW50MzIoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0lu
dDMyID0gZmFsc2UpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZUludDMyKGludCBpbmRleCwgVHJ1
c3RlZEltbTMyIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyID0gZmFsc2UpOwotICAgICAgICB2
b2lkIGVtaXRTdG9yZUNlbGwoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5k
ZXhJc0NlbGwgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQm9vbChpbnQgaW5kZXgs
IFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQm9vbCA9IGZhbHNlKTsKLSAgICAgICAg
dm9pZCBlbWl0U3RvcmVEb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpOworICAg
ICAgICB2b2lkIGVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnLCBSZWdp
c3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAg
ICAgICAgdm9pZCBlbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyLCBjb25zdCBKU1ZhbHVlIGNvbnN0
YW50LCBSZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIHZvaWQg
ZW1pdFN0b3JlSW50MzIoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wg
aW5kZXhJc0ludDMyID0gZmFsc2UpOworICAgICAgICB2b2lkIGVtaXRTdG9yZUludDMyKFZpcnR1
YWxSZWdpc3RlciwgVHJ1c3RlZEltbTMyIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyID0gZmFs
c2UpOworICAgICAgICB2b2lkIGVtaXRTdG9yZUNlbGwoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3Rl
cklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0NlbGwgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZW1p
dFN0b3JlQm9vbChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRl
eElzQm9vbCA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVEb3VibGUoVmlydHVhbFJl
Z2lzdGVyLCBGUFJlZ2lzdGVySUQgdmFsdWUpOwogCi0gICAgICAgIHZvaWQgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCk7Ci0gICAgICAgIHZvaWQg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVn
aXN0ZXJJRCB0YWcpOworICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChW
aXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnKTsKIAogICAgICAgICB2b2lkIGNvbXBp
bGVHZXRCeUlkSG90UGF0aChjb25zdCBJZGVudGlmaWVyKik7CiAKQEAgLTQzOCwxNyArNDM4LDEw
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRCaW5hcnlEb3VibGVPcChjb25z
dCBJbnN0cnVjdGlvbiAqLCBPcGVyYW5kVHlwZXMsIEp1bXBMaXN0JiBub3RJbnQzMk9wMSwgSnVt
cExpc3QmIG5vdEludDMyT3AyLCBib29sIG9wMUlzSW5SZWdpc3RlcnMgPSB0cnVlLCBib29sIG9w
MklzSW5SZWdpc3RlcnMgPSB0cnVlKTsKIAogI2Vsc2UgLy8gVVNFKEpTVkFMVUUzMl82NCkKLSAg
ICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMsIFJlZ2lzdGVySUQgZHN0
KTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBz
cmMsIFJlZ2lzdGVySUQgZHN0KTsKLSAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhpbnQgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBpbnQgc3JjMiwgUmVnaXN0ZXJJRCBkc3QyKTsK
ICAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhWaXJ0dWFsUmVnaXN0ZXIgc3Jj
MSwgUmVnaXN0ZXJJRCBkc3QxLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiwgUmVnaXN0ZXJJRCBkc3Qy
KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGludCBkc3QsIFJlZ2lzdGVy
SUQgZnJvbSA9IHJlZ1QwKTsKICAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZp
cnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSA9IHJlZ1QwKTsKLSAgICAgICAgdm9p
ZCBlbWl0U3RvcmVDZWxsKGludCBkc3QsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCAvKiBvbmx5
IHVzZWQgaW4gSlNWYWx1ZTMyXzY0ICovID0gZmFsc2UpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBwYXlsb2FkKTsKLSAgICAgICAgfQotICAgICAg
ICB2b2lkIGVtaXRTdG9yZUNlbGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBwYXls
b2FkKQorICAgICAgICB2b2lkIGVtaXRTdG9yZUNlbGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVn
aXN0ZXJJRCBwYXlsb2FkLCBib29sIC8qIG9ubHkgdXNlZCBpbiBKU1ZhbHVlMzJfNjQgKi8gPSBm
YWxzZSkKICAgICAgICAgewogICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHBheWxvYWQpOwogICAgICAgICB9CkBAIC00NTYsMjkgKzQ0OSwyOSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgSnVtcCBlbWl0SnVtcElmQm90aEpTQ2VsbHMoUmVnaXN0ZXJJRCwgUmVnaXN0
ZXJJRCwgUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmSlNDZWxs
KFJlZ2lzdGVySUQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChS
ZWdpc3RlcklEKTsKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVn
aXN0ZXJJRCwgaW50IFZSZWcpOworICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChSZWdpc3RlcklELCBWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBKdW1wIGVtaXRKdW1w
SWZOb3RJbnQoUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCBzY3JhdGNoKTsKICAg
ICAgICAgUGF0Y2hhYmxlSnVtcCBlbWl0UGF0Y2hhYmxlSnVtcElmTm90SW50KFJlZ2lzdGVySUQp
OwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChSZWdpc3RlcklEKTsKICAg
ICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3ROdW1iZXIoUmVnaXN0ZXJJRCk7CiAgICAg
ICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQs
IFJlZ2lzdGVySUQgc2NyYXRjaCk7CiAKLSAgICAgICAgdm9pZCBjb21waWxlR2V0QnlJZEhvdFBh
dGgoaW50IGJhc2VWUmVnLCBjb25zdCBJZGVudGlmaWVyKik7CisgICAgICAgIHZvaWQgY29tcGls
ZUdldEJ5SWRIb3RQYXRoKFZpcnR1YWxSZWdpc3RlciBiYXNlUmVnLCBjb25zdCBJZGVudGlmaWVy
Kik7CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVB
bmRKdW1wSW1wbChpbnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxD
b25kaXRpb24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxS
ZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRp
b25hbENvbmRpdGlvbik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2
b2lkIGVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENv
bmRpdGlvbik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKGludCBkc3Qs
IGludCBvcDEsIGludCBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24pOworICAgICAgICB2b2lkIGVt
aXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0
ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWdu
ZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiwgUmVsYXRpb25hbENvbmRpdGlvbik7Ci0gICAg
ICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChpbnQgb3AxLCBpbnQgb3Ay
LCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOworICAgICAgICB2b2lkIGVt
aXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVh
bFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklU
X09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKGludCBvcDEs
IGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91Ymxl
Q29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmpl
Y3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1
bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlvblNpemUsIERvdWJsZUNvbmRpdGlvbiwg
c2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgYXNzZXJ0U3RhY2tQb2lu
dGVyT2Zmc2V0KCk7CiAKQEAgLTY4Niw4ICs2NzksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29t
bW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNo
ZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICB2b2lkIGVtaXRSZXNv
bHZlQ2xvc3VyZShpbnQgZHN0LCBpbnQgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MsIHVuc2lnbmVkIGRlcHRoKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVD
aGVjayhpbnQgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOworICAgICAgICB2b2lk
IGVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsKKyAg
ICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
ICAgIHZvaWQgZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyk7
CiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoSlNWYWx1ZSoqIG9w
ZXJhbmQsIEdQUlJlZyk7CkBAIC02OTUsMjAgKzY4OCwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFu
ZCwgR1BSUmVnIHRhZywgR1BSUmVnIHBheWxvYWQpOwogICAgICAgICB2b2lkIGVtaXRHZXRWYXJG
cm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9hZCk7
CiAjZW5kaWYKLSAgICAgICAgdm9pZCBlbWl0R2V0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRw
dHJfdCBvcGVyYW5kKTsKKyAgICAgICAgdm9pZCBlbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVn
aXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5
V3JpdGUoV2F0Y2hwb2ludFNldCopOwogICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShHUFJS
ZWcgcG9pbnRlclRvU2V0KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNW
YWx1ZSogb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7Ci0gICAgICAgIHZvaWQg
ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQs
IGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKLSAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3Vy
ZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRT
ZXQqKTsKKyAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFu
ZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CisgICAgICAgIHZvaWQg
ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKKyAgICAgICAgdm9pZCBl
bWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5k
LCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKIAotICAgICAgICB2b2lk
IGVtaXRJbml0UmVnaXN0ZXIoaW50IGRzdCk7CisgICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3Rl
cihWaXJ0dWFsUmVnaXN0ZXIpOwogCi0gICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1l
SGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgaW50IGVudHJ5KTsKKyAgICAgICAgdm9pZCBlbWl0UHV0
SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwog
Ci0gICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKGludCBzcmMpOwotICAgICAgICBi
b29sIGlzT3BlcmFuZENvbnN0YW50SW50KGludCBzcmMpOwotICAgICAgICBib29sIGlzT3BlcmFu
ZENvbnN0YW50Q2hhcihpbnQgc3JjKTsKKyAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJh
bmQoVmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudEludChW
aXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0
dWFsUmVnaXN0ZXIpOwogCiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUg
R2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOb25Qcm9maWxl
ZEZ1bmN0aW9uPgogICAgICAgICB2b2lkIGVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPEdl
bmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkRnVuY3Rpb24sIE5vblByb2Zp
bGVkRnVuY3Rpb24pOwpAQCAtNzM1LDcgKzcyOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAgICAgQVNTRVJUKCFpdGVyLT5mcm9tLmlzU2V0KCkpOwogICAgICAgICAgICAgKytpdGVyOwog
ICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYsIGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCk7CisgICAg
ICAgIHZvaWQgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYsIFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNl
c0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsCiAgICAg
ICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZU9mZnNldCk7CiAKQEAgLTc1NSwxMyArNzQ4LDEzIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
QW5kU2xvd1BhdGhSZXR1cm5UeXBlKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4p
OwogI2VuZGlmCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoQ2Fs
bEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+KTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiwgaW50KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE1ldGFkYXRhPgotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiwgY29uc3Qg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgaW50KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRo
UHJvZmlsZShNZXRhZGF0YSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZp
cnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAgICAgICAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgc3RkOjplbmFibGVf
aWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbD4KLSAgICAgICAgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlv
biwgaW50IHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9uKE9wZXJh
dGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3Mp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFy
Z3MuLi4pOwogICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRKU1ZhbHVlUmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKQEAgLTgwNSw3ICs3OTgsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YSwgdHlw
ZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgc3RkOjplbmFi
bGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbD4KLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRh
JiBtZXRhZGF0YSwgT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIGludCByZXN1bHQsIEFyZ3MuLi4g
YXJncykKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0
YSwgT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3Mu
Li4gYXJncykKICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9u
VHlwZT4oYXJncy4uLik7CiAgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uLCBy
ZXN1bHQpOwpAQCAtODY1LDcgKzg1OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAKICNp
Zm5kZWYgTkRFQlVHCi0gICAgICAgIHZvaWQgcHJpbnRCeXRlY29kZU9wZXJhbmRUeXBlcyhpbnQg
c3JjMSwgaW50IHNyYzIpOworICAgICAgICB2b2lkIHByaW50Qnl0ZWNvZGVPcGVyYW5kVHlwZXMo
VmlydHVhbFJlZ2lzdGVyIHNyYzEsIFZpcnR1YWxSZWdpc3RlciBzcmMyKTsKICNlbmRpZgogCiAj
aWYgRU5BQkxFKFNBTVBMSU5HX0ZMQUdTKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
QXJpdGhtZXRpYy5jcHAKaW5kZXggMzQ1ODc0NGZiY2RkNTNhY2Y5YTQzMzI4YmM0OTRiMGZlZGNi
ODkzZi4uM2EzMmMzMjYxODlmYWIxOTdkN2NmOWY5MWQ1ZjZiNGIzMTAyMDJjNCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCkBAIC0xNTgsOCArMTU4LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfamJlbG93ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3Vuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BVbnNpZ25lZD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChy
ZWdUMCk7CkBAIC0xNzIsMTMgKzE3MiwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0
KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0g
Ynl0ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgZW1pdF9jb21wYXJlQW5kSnVtcElt
cGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRp
b25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcElt
cGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFy
Z2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICAvLyBXZSBnZW5lcmF0
ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgZmFzdCBwYXRoOgog
ICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCkBAIC0yMzAs
MTMgKzIzMCwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0X2NvbXBh
cmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAg
ICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29k
ZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJ
bXBsKG9wMSwgb3AyLCB0YXJnZXQsIGNvbmRpdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0X2Nv
bXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdl
dCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
VW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIg
b3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewog
ICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CkBAIC0yNTYsMTMgKzI1NiwxMyBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGRzdCA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZz
ZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9y
aHM7CiAgICAgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKGRzdCwgb3AxLCBvcDIsIGNvbmRpdGlv
bik7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoaW50IGRzdCwgaW50
IG9wMSwgaW50IG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdp
c3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0
aW9uKQogewogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7CiAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CkBAIC0yODQsMTMgKzI4NCwxMyBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24s
IHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3A+KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAg
IGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2Rl
Lm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChv
cDEsIG9wMiwgdGFyZ2V0LCBpbnN0cnVjdGlvbi0+c2l6ZSgpLCBjb25kaXRpb24sIG9wZXJhdGlv
biwgaW52ZXJ0LCBpdGVyKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93
SW1wbChpbnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlv
blNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAq
b3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3Ax
LCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIHNpemVfdCBpbnN0cnVjdGlv
blNpemUsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAq
b3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewogCiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2Fz
ZXMgaW4gdGhlIHNsb3cgcGF0aDoKQEAgLTM4Nyw3ICszODcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwg
c2l6ZV90CiB2b2lkIEpJVDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEluYz4oKTsKLSAgICBpbnQgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Qub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQocmVnVDApOwpAQCAtMzk5LDcgKzM5OSw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2luYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVt
aXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWM+KCk7Ci0gICAgaW50
IHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjRHN0LCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsK
QEAgLTQxNSw5ICs0MTUsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0g
ICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0
ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwog
CiAgICAgLy8gTWFrZSBzdXJlIHJlZ2lzdGVycyBhcmUgY29ycmVjdCBmb3IgeDg2IElESVYgaW5z
dHJ1Y3Rpb25zLgogICAgIEFTU0VSVChyZWdUMCA9PSBYODZSZWdpc3RlcnM6OmVheCk7CkBAIC00
OTEsOSArNDkxLDkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIFNuaXBwZXRHZW5l
cmF0b3I+CiB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsaW5nUG9saWN5IHByb2ZpbGluZ1BvbGljeSkK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAg
ICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5
dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1
ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CkBAIC01MzgsOCArNTM4LDggQEAg
dm9pZCBKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGkKIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQml0bm90PigpOwotICAgIGludCByZXN1bHQgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsK
QEAgLTU5OSw5ICs1OTksOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0
UmlnaHRTaGlmdEZhc3RQYXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3I6OlNoaWZ0VHlwZSBzbmlwcGV0U2hpZnRUeXBlKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGlu
dCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNv
ZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVn
cyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKQEAgLTY3NCw4ICs2NzQsOCBAQCB0ZW1w
bGF0ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRG
dW5jdGlvbiwgdHlwZW5hbWUgTgogdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0
aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0
aW9uIG5vblByb2ZpbGVkRnVuY3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOwotICAgIGludCBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgLy8gQXJpdGhOZWdhdGUgYmVuZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdp
c3RlciBhcyBzcmMgYW5kIGRzdC4KQEAgLTcyNCw5ICs3MjQsOSBAQCB0ZW1wbGF0ZSA8dHlwZW5h
bWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlw
ZW5hbWUgTgogdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0
b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2Zp
bGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbiBub25Qcm9m
aWxlZEZ1bmN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVj
b2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYgVVNFKEpTVkFMVUU2
NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKQEAgLTc5
OSw3ICs3OTksNyBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2Vu
ZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogYwogICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSk7CkBAIC04NDUsOSArODQ1LDkgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNT
bG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9u
KgogICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGlu
dCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNv
ZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9w
MiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVn
cyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKQEAgLTkwNiw5ICs5MDYsOSBAQCB2b2lk
IEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywg
Y29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcERpdj4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGlu
dCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2Rl
Lm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAppbmRleCBjM2Y4YWEwYzdm
YWY0ZWFkNDM0NjdkNTQyNzI2YWU4YWM5MjU4N2RmLi44ZGQ3OTZmYTk1NjRhYzU0MGFjMGE1MTRk
Y2ZmZDhmYWIzYzExYmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKQEAg
LTUxLDcgKzUxLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENh
bGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02Niw3
ICs2Niw3IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxs
TGlua0luZm8qKQogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxpbnQ+KGJ5
dGVjb2RlLm1fYXJndik7CiAKICAgICBpZiAoT3A6Om9wY29kZUlEID09IG9wX2NhbGwgJiYgc2hv
dWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocmVn
aXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSwg
cmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcihy
ZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDAp
KSwgcmVnVDApOwogICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwog
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVnVDApOwogICAgICAgICBzdG9yZTMyKHJlZ1QwLCBtZXRhZGF0YS5tX2NhbGxMaW5rSW5m
by5tX2FycmF5UHJvZmlsZS5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwpAQCAtODUs
OSArODUsOSBAQCBzdGQ6OmVuYWJsZV9pZl90PAogLCB2b2lkPgogSklUOjpjb21waWxlU2V0dXBG
cmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbykKIHsKLSAgICBpbnQg
dGhpc1ZhbHVlID0gYnl0ZWNvZGUubV90aGlzVmFsdWUub2Zmc2V0KCk7Ci0gICAgaW50IGFyZ3Vt
ZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzLm9mZnNldCgpOwotICAgIGludCBmaXJzdEZyZWVS
ZWdpc3RlciA9IGJ5dGVjb2RlLm1fZmlyc3RGcmVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CisgICAgaW50IGZpcnN0RnJlZVJl
Z2lzdGVyID0gYnl0ZWNvZGUubV9maXJzdEZyZWUub2Zmc2V0KCk7IC8vIEZJWE1FOiBXaHkgaXMg
dGhpcyBhIHZpcnR1YWwgcmVnaXN0ZXIgaWYgd2UgbmV2ZXIgdXNlIGl0IGFzIG9uZS4uLgogICAg
IGludCBmaXJzdFZhckFyZ09mZnNldCA9IGJ5dGVjb2RlLm1fZmlyc3RWYXJBcmc7CiAKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDEpOwpAQCAtMjA2LDcgKzIwNiw3
IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kCiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBP
cDo6b3Bjb2RlSUQ7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsK
LSAgICBpbnQgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWUub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOwogCiAgICAgLyogQ2FsbGVyIGFs
d2F5czoKICAgICAgICAgLSBVcGRhdGVzIGNhbGxGcmFtZVJlZ2lzdGVyIHRvIGNhbGxlZSBjYWxs
RnJhbWUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlv
bnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAppbmRl
eCBiN2QwY2EyMzU4YmU1MjUwMThhM2Y0ZTk2MTZkOWNiODQ4ZmZmNTIxLi5lMDdhODMzZDRjODUz
YjljN2EwMmRlOGI3NDYwMWRmMzA2NmJhZTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklURXhjZXB0aW9ucy5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBnZW5lcmljVW53aW5k
KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgaWYgKE9wdGlvbnM6OmJyZWFrT25U
aHJvdygpKSB7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gdG9wSlNDYWxsRnJhbWUt
PmNvZGVCbG9jaygpOwogICAgICAgICBkYXRhTG9nKCJJbiBjYWxsIGZyYW1lICIsIFJhd1BvaW50
ZXIodG9wSlNDYWxsRnJhbWUpLCAiIGZvciBjb2RlIGJsb2NrICIsIGNvZGVCbG9jaywgIlxuIik7
Ci0gICAgICAgIENSQVNIKCk7CisgICAgICAgIFdURkJyZWFrcG9pbnRUcmFwKCk7CiAgICAgfQog
ICAgIAogICAgIGlmIChhdXRvKiBzaGFkb3dDaGlja2VuID0gdm0uc2hhZG93Q2hpY2tlbigpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAppbmRleCBmY2U4YmI3NDc2NjM3ODM3
OThjOTk3NTZlOGRmN2Y4OWUwOWJiODViLi45YzExNzM0MzQwYzM2NDcyMWIzNThiOTUxNmY2ODcw
OTMzNGM1YTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaApAQCAtNDgs
MTkgKzQ4LDIwIEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IEpJVDo6
ZW1pdExvYWRGb3JBcnJheU1vZGUoY29uc3QgSW5zdHJ1Y3RpCiAgICAgcmV0dXJuIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCgpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJh
bmRDb25zdGFudERvdWJsZShpbnQgc3JjKQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVy
YW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gbV9j
b2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykgJiYgZ2V0Q29uc3RhbnRPcGVy
YW5kKHNyYykuaXNEb3VibGUoKTsKKyAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRD
b25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOwogfQogCi1BTFdBWVNfSU5MSU5FIEpTVmFs
dWUgSklUOjpnZXRDb25zdGFudE9wZXJhbmQoaW50IHNyYykKK0FMV0FZU19JTkxJTkUgSlNWYWx1
ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIEFT
U0VSVChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSk7CisgICAgQVNT
RVJUKHNyYy5pc0NvbnN0YW50KCkpOwogICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQoc3JjKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dEludFRvQ2FsbEZy
YW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgaW50IGVudHJ5KQorQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVh
bFJlZ2lzdGVyIGVudHJ5KQogeworICAgIEFTU0VSVChlbnRyeS5pc0hlYWRlcigpKTsKICNpZiBV
U0UoSlNWQUxVRTMyXzY0KQogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMy
VGFnKSwgdGFnRm9yKGVudHJ5KSk7CiAgICAgc3RvcmUzMihmcm9tLCBwYXlsb2FkRm9yKGVudHJ5
KSk7CkBAIC0xNDMsNyArMTQ0LDcgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBKSVQ6OmFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGkKICAgICByZXR1
cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIGludCBkc3QpCitBTFdBWVNfSU5MSU5FIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwg
VmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKQEAgLTE1NSw3ICsxNTYsNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZQogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBmdW5jdGlvbiwgaW50IGRzdCkKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSk7CkBAIC0xNjcsOSArMTY4LDkgQEAg
QUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmUKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlciwgaW50IHZSZWcpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjps
aW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25v
d25Ob3RJbW1lZGlhdGUodlJlZykpCisgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdElt
bWVkaWF0ZShyZWcpKQogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAKQEAgLTI4NCw5
ICsyODUsOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzYW1wbGVDb2RlQmxvY2soQ29kZUJs
b2NrKiBjb2RlQmxvY2spCiAjZW5kaWYKICNlbmRpZgogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklU
Ojppc09wZXJhbmRDb25zdGFudENoYXIoaW50IHNyYykKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6
OmlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVy
biBtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChz
cmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKKyAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQo
KSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENv
bnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKIH0KIAogaW5saW5l
IHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9m
aWxlKQpAQCAtMzYzLDI2ICszNjQsMjYgQEAgaW5saW5lIEpJVEFycmF5TW9kZSBKSVQ6OmNob29z
ZUFycmF5TW9kZShBcnJheVByb2ZpbGUqIHByb2ZpbGUpCiAgICAgcmV0dXJuIEpJVENvbnRpZ3Vv
dXM7CiB9CiAKLUFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudElu
dChpbnQgc3JjKQorQUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50
SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmFzSW50MzIoKTsKIH0KIAotQUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVy
YW5kQ29uc3RhbnREb3VibGUoaW50IHNyYykKK0FMV0FZU19JTkxJTkUgZG91YmxlIEpJVDo6Z2V0
T3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgcmV0dXJu
IGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoaW50IGRzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBzdG9yZVRy
dXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKGRzdCkpOwogfQogCiAjaWYgVVNF
KEpTVkFMVUUzMl82NCkKIAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFRhZyhpbnQgaW5kZXgs
IFJlZ2lzdGVySUQgdGFnKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFRhZyhWaXJ0dWFsUmVn
aXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKIHsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29u
c3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgeworICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7
CiAgICAgICAgIG1vdmUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKGluZGV4KS50YWcoKSksIHRh
Zyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zOTAsOSArMzkxLDkgQEAgaW5saW5lIHZv
aWQgSklUOjplbWl0TG9hZFRhZyhpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnKQogICAgIGxvYWQz
Mih0YWdGb3IoaW5kZXgpLCB0YWcpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkUGF5
bG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCkKK2lubGluZSB2b2lkIEpJVDo6ZW1p
dExvYWRQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCkKIHsK
LSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgewor
ICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIG1vdmUoSW1tMzIoZ2V0Q29uc3Rh
bnRPcGVyYW5kKGluZGV4KS5wYXlsb2FkKCkpLCBwYXlsb2FkKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTQwNiwxMzYgKzQwNywxMzMgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZChj
b25zdCBKU1ZhbHVlJiB2LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkKQogICAg
IG1vdmUoSW1tMzIodi50YWcoKSksIHRhZyk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgSlNWYWx1ZVJlZ3MgZHN0KQorQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldChWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBKU1ZhbHVlUmVn
cyBkc3QpCiB7CiAgICAgZW1pdExvYWQoc3JjLCBkc3QudGFnR1BSKCksIGRzdC5wYXlsb2FkR1BS
KCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGludCBkc3QsIEpTVmFsdWVSZWdzIGZyb20pCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIGZyb20p
CiB7CiAgICAgZW1pdFN0b3JlKGRzdCwgZnJvbS50YWdHUFIoKSwgZnJvbS5wYXlsb2FkR1BSKCkp
OwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0
YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlKQoraW5saW5lIHZvaWQgSklU
OjplbWl0TG9hZChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJ
RCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodGFnICE9
IHBheWxvYWQpOwogCiAgICAgaWYgKGJhc2UgPT0gY2FsbEZyYW1lUmVnaXN0ZXIpIHsKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQocGF5bG9hZCAhPSBiYXNlKTsKLSAgICAgICAgZW1pdExvYWRQYXls
b2FkKGluZGV4LCBwYXlsb2FkKTsKLSAgICAgICAgZW1pdExvYWRUYWcoaW5kZXgsIHRhZyk7Cisg
ICAgICAgIGVtaXRMb2FkUGF5bG9hZChyZWcsIHBheWxvYWQpOworICAgICAgICBlbWl0TG9hZFRh
ZyhyZWcsIHRhZyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgdGFyZ2V0IHsgaW5kZXggfTsKICAgICBpZiAocGF5bG9hZCA9PSBiYXNlKSB7IC8vIGF2b2lk
IHN0b21waW5nIGJhc2UKLSAgICAgICAgbG9hZDMyKHRhZ0Zvcih0YXJnZXQsIGJhc2UpLCB0YWcp
OwotICAgICAgICBsb2FkMzIocGF5bG9hZEZvcih0YXJnZXQsIGJhc2UpLCBwYXlsb2FkKTsKKyAg
ICAgICAgbG9hZDMyKHRhZ0ZvcihyZWcsIGJhc2UpLCB0YWcpOworICAgICAgICBsb2FkMzIocGF5
bG9hZEZvcihyZWcsIGJhc2UpLCBwYXlsb2FkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGxvYWQzMihwYXlsb2FkRm9yKHRhcmdldCwgYmFzZSksIHBheWxvYWQpOwotICAgIGxvYWQz
Mih0YWdGb3IodGFyZ2V0LCBiYXNlKSwgdGFnKTsKKyAgICBsb2FkMzIocGF5bG9hZEZvcihyZWcs
IGJhc2UpLCBwYXlsb2FkKTsKKyAgICBsb2FkMzIodGFnRm9yKHJlZywgYmFzZSksIHRhZyk7CiB9
CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQyKGludCBpbmRleDEsIFJlZ2lzdGVySUQgdGFn
MSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwgaW50IGluZGV4MiwgUmVnaXN0ZXJJRCB0YWcyLCBSZWdp
c3RlcklEIHBheWxvYWQyKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZDIoVmlydHVhbFJlZ2lz
dGVyIHJlZzEsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwgVmlydHVhbFJl
Z2lzdGVyIHJlZzIsIFJlZ2lzdGVySUQgdGFnMiwgUmVnaXN0ZXJJRCBwYXlsb2FkMikKIHsKLSAg
ICBlbWl0TG9hZChpbmRleDIsIHRhZzIsIHBheWxvYWQyKTsKLSAgICBlbWl0TG9hZChpbmRleDEs
IHRhZzEsIHBheWxvYWQxKTsKKyAgICBlbWl0TG9hZChyZWcyLCB0YWcyLCBwYXlsb2FkMik7Cisg
ICAgZW1pdExvYWQocmVnMSwgdGFnMSwgcGF5bG9hZDEpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6
OmVtaXRMb2FkRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZv
aWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQg
dmFsdWUpCiB7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChp
bmRleCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9
IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGluZGV4KTsKKyAgICBpZiAocmVnLmlzQ29u
c3RhbnQoKSkgeworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29s
ID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJs
ZShUcnVzdGVkSW1tUHRyKCZpbkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKLSAg
ICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKGluZGV4KSwgdmFsdWUpOworICAgICAgICBsb2Fk
RG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVt
aXRMb2FkSW50MzJUb0RvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKK2lubGlu
ZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQ
UmVnaXN0ZXJJRCB2YWx1ZSkKIHsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdp
c3RlckluZGV4KGluZGV4KSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29u
c3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpOworICAgIGlm
IChyZWcuaXNDb25zdGFudCgpKSB7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5D
b25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAg
ICBjaGFyKiBieXRlUG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZpbkNvbnN0YW50
UG9vbCk7CiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKEFic29sdXRlQWRkcmVzcyhieXRl
UG9pbnRlciArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHZh
bHVlKTsKICAgICB9IGVsc2UKLSAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocGF5bG9hZEZv
cihpbmRleCksIHZhbHVlKTsKKyAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocGF5bG9hZEZv
cihyZWcpLCB2YWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKGludCBpbmRl
eCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlKQor
aW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJ
RCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlKQogewotICAgIFZpcnR1
YWxSZWdpc3RlciB0YXJnZXQgeyBpbmRleCB9OwotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9h
ZEZvcih0YXJnZXQsIGJhc2UpKTsKLSAgICBzdG9yZTMyKHRhZywgdGFnRm9yKHRhcmdldCwgYmFz
ZSkpOworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcsIGJhc2UpKTsKKyAgICBz
dG9yZTMyKHRhZywgdGFnRm9yKHJlZywgYmFzZSkpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVt
aXRTdG9yZUludDMyKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNJ
bnQzMikKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoVmlydHVhbFJlZ2lzdGVyIHJl
ZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMikKIHsKLSAgICBzdG9yZTMy
KHBheWxvYWQsIHBheWxvYWRGb3IoaW5kZXgpKTsKKyAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxv
YWRGb3IocmVnKSk7CiAgICAgaWYgKCFpbmRleElzSW50MzIpCi0gICAgICAgIHN0b3JlMzIoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKGluZGV4KSk7CisgICAgICAgIHN0
b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKHJlZykpOwogfQog
Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMyKGludCBpbmRleCwgVHJ1c3RlZEltbTMy
IHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQoraW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVJ
bnQzMihWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRl
eElzSW50MzIpCiB7Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKGluZGV4KSk7Cisg
ICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZykpOwogICAgIGlmICghaW5kZXhJc0lu
dDMyKQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRh
Z0ZvcihpbmRleCkpOworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQz
MlRhZyksIHRhZ0ZvcihyZWcpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVDZWxs
KGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNDZWxsKQoraW5saW5l
IHZvaWQgSklUOjplbWl0U3RvcmVDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQg
cGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCkKIHsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxv
YWRGb3IoaW5kZXgpKTsKKyAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVnKSk7CiAg
ICAgaWYgKCFpbmRleElzQ2VsbCkKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6Q2VsbFRhZyksIHRhZ0ZvcihpbmRleCkpOworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKHJlZykpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6
OmVtaXRTdG9yZUJvb2woaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJ
c0Jvb2wpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUJvb2woVmlydHVhbFJlZ2lzdGVyIHJl
ZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29sKQogewotICAgIHN0b3JlMzIo
cGF5bG9hZCwgcGF5bG9hZEZvcihpbmRleCkpOworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9h
ZEZvcihyZWcpKTsKICAgICBpZiAoIWluZGV4SXNCb29sKQotICAgICAgICBzdG9yZTMyKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgdGFnRm9yKGluZGV4KSk7CisgICAgICAgIHN0
b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLCB0YWdGb3IocmVnKSk7CiB9
CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3Rl
cklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVEb3VibGUoVmlydHVhbFJlZ2lz
dGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewotICAgIHN0b3JlRG91YmxlKHZhbHVlLCBh
ZGRyZXNzRm9yKGluZGV4KSk7CisgICAgc3RvcmVEb3VibGUodmFsdWUsIGFkZHJlc3NGb3IocmVn
KSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKGludCBpbmRleCwgY29uc3QgSlNW
YWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBiYXNlKQoraW5saW5lIHZvaWQgSklUOjplbWl0U3Rv
cmUoVmlydHVhbFJlZ2lzdGVyIHJlZywgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJ
RCBiYXNlKQogewotICAgIFZpcnR1YWxSZWdpc3RlciB0YXJnZXQgeyBpbmRleCB9OwotICAgIHN0
b3JlMzIoSW1tMzIoY29uc3RhbnQucGF5bG9hZCgpKSwgcGF5bG9hZEZvcih0YXJnZXQsIGJhc2Up
KTsKLSAgICBzdG9yZTMyKEltbTMyKGNvbnN0YW50LnRhZygpKSwgdGFnRm9yKHRhcmdldCwgYmFz
ZSkpOworICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQucGF5bG9hZCgpKSwgcGF5bG9hZEZvcihy
ZWcsIGJhc2UpKTsKKyAgICBzdG9yZTMyKEltbTMyKGNvbnN0YW50LnRhZygpKSwgdGFnRm9yKHJl
ZywgYmFzZSkpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewogICAgIGlmICghbV9j
b2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUodmlydHVhbFJlZ2lzdGVySW5kZXgpKSB7Ci0g
ICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgodmlydHVhbFJl
Z2lzdGVySW5kZXgpKQorICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGVtaXRKdW1wSWZOb3RKU0NlbGwodmlydHVhbFJlZ2lzdGVySW5kZXgpKTsKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnKSk7CiAgICAgfQogfQogCi1p
bmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpbnQgdmlydHVhbFJl
Z2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgdGFnKQoraW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcpCiB7
CiAgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZSh2aXJ0dWFsUmVnaXN0
ZXJJbmRleCkpIHsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJ
bmRleCh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpCisgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgp
KQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHRhZykpOwogICAgIH0KIH0KIAotQUxX
QVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYykKK0FMV0FZ
U19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBz
cmMpCiB7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChz
cmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKKyAgICByZXR1cm4gc3Jj
LmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7CiB9CiAK
LUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChpbnQgb3AxLCBp
bnQgb3AyLCBpbnQmIG9wLCBpbnQzMl90JiBjb25zdGFudCkKK0FMV0FZU19JTkxJTkUgYm9vbCBK
SVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVn
aXN0ZXIgb3AyLCBpbnQmIG9wLCBpbnQzMl90JiBjb25zdGFudCkKIHsKICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQob3AxKSkgewogICAgICAgICBjb25zdGFudCA9IGdldENvbnN0YW50T3Bl
cmFuZChvcDEpLmFzSW50MzIoKTsKQEAgLTU1NSwxMSArNTUzLDExIEBAIEFMV0FZU19JTkxJTkUg
Ym9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChpbnQgb3AxLCBpbnQgb3AyLCBpbnQmIG9w
LCBpbnQzMl90CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAvLyBnZXQgYXJnIHB1dHMg
YW4gYXJnIGZyb20gdGhlIFNGIHJlZ2lzdGVyIGFycmF5IGludG8gYSBoL3cgcmVnaXN0ZXIKLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgUmVn
aXN0ZXJJRCBkc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KQogewogICAgIEFTU0VSVCht
X2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVy
aW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMg
c2V0LgogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMp
KSB7CisgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVt
YmVyKCkpCiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFs
dWUpKSwgZHN0KTsKQEAgLTU3MSw0NyArNTY5LDMyIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBkc3QpCiAgICAgbG9h
ZDY0KGFkZHJlc3NGb3Ioc3JjKSwgZHN0KTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBKU1ZhbHVlUmVncyBkc3QpCitBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBz
cmMsIEpTVmFsdWVSZWdzIGRzdCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywg
ZHN0LnBheWxvYWRHUFIoKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpCi17Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMub2Zmc2V0KCksIGRzdCk7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGludCBzcmMxLCBSZWdp
c3RlcklEIGRzdDEsIGludCBzcmMyLCBSZWdpc3RlcklEIGRzdDIpCitBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhWaXJ0dWFsUmVnaXN0ZXIgc3JjMSwgUmVn
aXN0ZXJJRCBkc3QxLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiwgUmVnaXN0ZXJJRCBkc3QyKQogewog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgZHN0MSk7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMyLCBkc3QyKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoVmlydHVhbFJlZ2lzdGVyIHNyYzEsIFJlZ2lzdGVySUQgZHN0
MSwgVmlydHVhbFJlZ2lzdGVyIHNyYzIsIFJlZ2lzdGVySUQgZHN0MikKLXsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhzcmMxLm9mZnNldCgpLCBkc3QxLCBzcmMyLm9mZnNldCgpLCBkc3Qy
KTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoaW50
IHNyYykKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1
YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVn
aXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKKyAg
ICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0lu
dDMyKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoaW50IGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIGZyb20p
CiB7CiAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGRzdCkpOwogfQogCi1BTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGludCBkc3QsIEpTVmFsdWVSZWdz
IGZyb20pCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZp
cnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIGZyb20pCiB7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIGZyb20ucGF5bG9hZEdQUigpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdp
c3RlcklEIGZyb20pCi17Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qub2Zmc2V0KCks
IGZyb20pOwotfQotCiBBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZCb3Ro
SlNDZWxscyhSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVnMiwgUmVnaXN0ZXJJRCBzY3Jh
dGNoKQogewogICAgIG1vdmUocmVnMSwgc2NyYXRjaCk7CkBAIC02MjksMjggKzYxMiwyOCBAQCBB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0
ZXJJRCByZWcpCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZykpOwogfQogCi1B
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0
ZXJJRCByZWcsIGludCB2UmVnKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdlJlZykKIHsK
ICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHZSZWcpKQogICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnKTsKIH0KIAotaW5saW5lIHZvaWQgSklU
OjplbWl0TG9hZERvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKK2lubGluZSB2
b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklE
IHZhbHVlKQogewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgo
aW5kZXgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wg
PSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCk7CisgICAgaWYgKHJlZy5pc0Nv
bnN0YW50KCkpIHsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9v
bCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3Vi
bGUoVHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCi0g
ICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihpbmRleCksIHZhbHVlKTsKKyAgICAgICAgbG9h
ZERvdWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjpl
bWl0TG9hZEludDMyVG9Eb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCitpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRMb2FkSW50MzJUb0RvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBG
UFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVn
aXN0ZXJJbmRleChpbmRleCkpIHsKLSAgICAgICAgQVNTRVJUKGlzT3BlcmFuZENvbnN0YW50SW50
KGluZGV4KSk7Ci0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKEltbTMyKGdldENvbnN0YW50
T3BlcmFuZChpbmRleCkuYXNJbnQzMigpKSwgdmFsdWUpOworICAgIGlmIChyZWcuaXNDb25zdGFu
dCgpKSB7CisgICAgICAgIEFTU0VSVChpc09wZXJhbmRDb25zdGFudEludChyZWcpKTsKKyAgICAg
ICAgY29udmVydEludDMyVG9Eb3VibGUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKHJlZykuYXNJ
bnQzMigpKSwgdmFsdWUpOwogICAgIH0gZWxzZQotICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJs
ZShhZGRyZXNzRm9yKGluZGV4KSwgdmFsdWUpOworICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJs
ZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKIH0KIAogQUxXQVlTX0lOTElORSBKSVQ6OlBhdGNo
YWJsZUp1bXAgSklUOjplbWl0UGF0Y2hhYmxlSnVtcElmTm90SW50KFJlZ2lzdGVySUQgcmVnKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKaW5kZXggODgyNjhkOWIzYzM0
YmU4MWQ0NzM2ZDdhMjgxODFmYTUyMjg2MzMyNy4uN2YzNThjMTIwM2JkZWFlOTBkNDRhMmM3ZmI4
ODk5NzgwODljYTg1ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
CkBAIC01NiwxMCArNTYsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJVDo6ZW1pdF9vcF9t
b3YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE1vdj4oKTsKLSAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fc3JjLm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBpZiAobV9jb2RlQmxv
Y2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpIHsKKyAgICBpZiAoc3JjLmlzQ29uc3Rh
bnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50
KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKICAgICAgICAgICAgIHN0b3Jl
NjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkp
OwpAQCAtNzcsNyArNzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEVuZD4oKTsKICAgICBSRUxFQVNFX0FTU0VSVChyZXR1cm5WYWx1ZUdQ
UiAhPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3ZhbHVlLm9mZnNldCgpLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFJl
c3RvcmVDYWxsZWVTYXZlcygpOwogICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgcmV0
KCk7CkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgICAgICBlbWl0QWxsb2NhdGVK
U09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxs
b2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJl
Zywgc2xvd0Nhc2VzKTsKICAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3Vs
dFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgYWRkU2xvd0Nhc2Uo
c2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QpOwogICAgIH0KIH0KIApAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09i
amVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHN0
cnVjdHVyZSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKQEAgLTEy
OSw5ICsxMjksOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8Uwogdm9pZCBKSVQ6OmVtaXRfb3Bf
b3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wT3Zl
cnJpZGVzSGFzSW5zdGFuY2U+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOwotICAgIGludCBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3Iub2Zmc2V0
KCk7Ci0gICAgaW50IGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFs
dWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0lu
c3RhbmNlVmFsdWU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFs
dWUsIHJlZ1QwKTsKIApAQCAtMTU1LDkgKzE1NSw5IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJy
aWRlc19oYXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEluc3RhbmNlb2Y+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7Ci0gICAgaW50IHBy
b3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90
b3R5cGU7CiAKICAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2
YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgogICAgIC8vIFdlIHVzZSByZWdUMCBm
b3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2Ug
Y2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgpAQCAtMTg2LDcgKzE4Niw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7
Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIAogICAgIEpJVElu
c3RhbmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1faW5zdGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgr
K107CiAgICAgCkBAIC0yMDQsOCArMjA0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2Vv
Zl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHko
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCk7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIGNvbXBhcmU2NChFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1Qw
KTsKQEAgLTIxNyw4ICsyMTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5k
ZWZpbmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZD4oKTsKLSAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0
ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQ7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAg
IEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKQEAgLTI0Niw4ICsyNDYsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKTsKLSAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUu
bV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKQEAgLTI2MSw4ICsy
NjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVh
bihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5t
X29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAg
ICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgeG9yNjQo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CkBAIC0yNzQsOCArMjc0
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIHRlc3Q2NChOb25aZXJvLCByZWdU
MCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKQEAgLTI4Niw4ICsyODYsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgaW50IHR5cGUgPSBi
eXRlY29kZS5tX3R5cGU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7CkBAIC0zMDcsOCArMzA3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0
X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCk7
Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAg
IEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKQEAgLTMzMiw3ICszMzIs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIAogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluICVlYXguCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpLCByZXR1cm5WYWx1ZUdQUik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1
ZUdQUik7CiAKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM0Myw4ICszNDMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9y
ZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0
X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRp
dmU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBz
cmMgPSBieXRlY29kZS5tX3NyYy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3Jj
OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKICAgICAKQEAgLTM3
NywxNSArMzc3LDE1IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1
bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFt
ZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24ub2Zm
c2V0KCksIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFt
ZS5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9mdW5jdGlvbiwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9uYW1lLCByZWdUMSk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5h
bWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BOb3Q+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29w
ZXJhbmQub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fb3BlcmFuZCwgcmVnVDApOwogCiAgICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShm
YWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0
cyB3aWxsIGJlCiAgICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2ls
bCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCkBAIC0z
OTQsNyArMzk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJv
LCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKICAgICB4
b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOwogCi0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDA3LDE0
ICs0MDcsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CiAgICAgYm9v
bCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbi5vZmZzZXQoKSwgdmFsdWUpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsK
ICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2Ny
YXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKZXFOdWxsPigpOwotICAgIGludCBzcmMgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CkBAIC00
MzgsNyArNDM4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcU51bGw+KCk7Ci0gICAgaW50IHNyYyA9IGJ5
dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVj
b2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMsIHJlZ1QwKTsKQEAgLTQ2Miw3ICs0NjIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQg
SklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSnVuZGVmaW5lZE9yTnVsbD4oKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwpAQCAtNDc0LDcgKzQ3NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2p1bmRl
ZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9p
ZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSm51bmRlZmluZWRPck51bGw+KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKQEAgLTQ4Nyw4ICs0ODcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9q
bmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQg
c3JjID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKLSAgICBKU1ZhbHVlIHNwZWNpYWxQb2lu
dGVyID0gZ2V0Q29uc3RhbnRPcGVyYW5kKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIub2Zmc2V0
KCkpOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIEpT
VmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVj
aWFsUG9pbnRlcik7CiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CiAgICAgCkBAIC01MDIsMTggKzUwMiwxOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9p
ZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpLCByZWdU
MCwgYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CiAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAgIGNv
bXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpLCByZWdUMCwgYnl0ZWNvZGUu
bV9yaHMub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRl
Y29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CiAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAgIGFkZEp1bXAoYnJhbmNo
MzIoRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CiB9CkBAIC01MjcsMjYgKzUyNywyNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIEdQUlJlZyBzY3JhdGNo
MiA9IHJlZ1QyOwogICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
dHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLm9m
ZnNldCgpLCB2YWx1ZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Nv
bmRpdGlvbiwgdmFsdWUpOwogICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1
ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNv
ZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jocy5vZmZzZXQoKSwgcmVnVDEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0
ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAs
IHJlZ1QxLCByZWdUMik7CiAgICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJl
Z1QwKTsKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogCi0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1f
bGhzLm9mZnNldCgpLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCksIHJlZ1QxKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2Rl
Lm1fcmhzLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdU
MSwgcmVnVDIpOwogICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSks
IHRhcmdldCk7CiB9CkBAIC01NTYsNyArNTU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3co
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRocm93PigpOwogICAgIEFTU0VSVChyZWdUMCA9
PSByZXR1cm5WYWx1ZUdQUik7CiAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgp
KTsKIH0KQEAgLTU2NSw5ICs1NjUsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklU
Ojpjb21waWxlT3BTdHJpY3RFcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBDb21waWxlT3BTdHJpY3RFcVR5cGUgdHlwZSkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7Ci0gICAgaW50IHNyYzEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBp
bnQgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2Rl
Lm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOwogICAg
IApAQCAtNjA5LDggKzYwOSw4IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgaW50IHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBzcmMy
ID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBi
eXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhz
OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1Qx
KTsKIApAQCAtNjY3LDggKzY2Nyw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiB2b2lkIEpJ
VDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVt
YmVyPigpOwotICAgIGludCBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAg
aW50IHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
VlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
Y1ZSZWcsIHJlZ1QwKTsKICAgICAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihy
ZWdUMCkpOwpAQCAtNjgxLDggKzY4MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bf
dG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigpOwot
ICAgIGludCBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyY1ZS
ZWcgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJl
Z1QwKTsKIAogICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKQEAg
LTcwMSwyMCArNzAxLDIwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3RvX3N0cmlu
Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCk7Ci0gICAgaW50IHNy
Y1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmNWUmVnLCByZWdUMCk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVn
VDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOwogCi0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7CisgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCk7
Ci0gICAgaW50IGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3Jj
VlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywg
cmVnVDApOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CkBAIC03
NDUsMTAgKzc0NSwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3ZtKSwgcmVn
VDMpOwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkpLCBy
ZWdUMCk7CiAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUo
KSkpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkpKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZXhjZXB0aW9uLm9mZnNldCgpKTsKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZXhjZXB0aW9uKTsKIAogICAgIGxvYWQ2NChB
ZGRyZXNzKHJlZ1QwLCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Rocm93blZhbHVlLm9mZnNldCgpKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhyb3duVmFsdWUpOwogCiAjaWYg
RU5BQkxFKERGR19KSVQpCiAgICAgLy8gRklYTUU6IGNvbnNpZGVyIGlubGluZSBjYWNoaW5nIHRo
ZSBwcm9jZXNzIG9mIGRvaW5nIE9TUiBlbnRyeSwgaW5jbHVkaW5nCkBAIC03NTYsNyArNzU2LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc1NTk4CiAKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKLSAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0
YS5tX2J1ZmZlcjsKKyAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1
ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwogICAgIGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQ
cm9maWxpbmcoKSkKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlPU1JFbnRlckF0
Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGVsc2UKQEAgLTc2
Niw3ICs3NjYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlv
bkhhbmRsZXJQdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwogICAgIGlmIChi
dWZmZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1ZmZlci0+Zm9yRWFj
aChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgYnVmZmVy
LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7
CiAgICAgICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QwKTsKICAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJlZ3MpOwogICAgICAgICAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGUmPihwcm9maWxl
KSk7CkBAIC03ODMsMTAgKzc4MywxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pZGVudGl0eV93aXRo
X3Byb2ZpbGUoY29uc3QgSW5zdHJ1Y3Rpb24qKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVu
dF9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCk7
Ci0gICAgaW50IGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVtaXRT
dG9yZUNlbGwoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0U3RvcmVD
ZWxsKGJ5dGVjb2RlLm1fZHN0LCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRj
aF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTc5NCw3ICs3
OTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BTd2l0Y2hJbW0+KCk7CiAgICAgc2l6ZV90IHRhYmxlSW5kZXggPSBieXRlY29kZS5t
X3RhYmxlSW5kZXg7CiAgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX2RlZmF1bHRPZmZzZXQpOwotICAgIHVuc2lnbmVk
IHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlLm9mZnNldCgpOworICAgIFZpcnR1YWxS
ZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0
ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBz
dGF0ZW1lbnQuCiAgICAgU2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2st
PnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKQEAgLTgxMSw3ICs4MTEsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNo
Q2hhcj4oKTsKICAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsK
ICAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgdW5zaWduZWQgc2NydXRpbmVlID0g
Ynl0ZWNvZGUubV9zY3J1dGluZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0
aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUg
Zm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAg
ICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpOwpAQCAtODI4LDcgKzgyOCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3
aXRjaF9zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN3aXRjaFN0cmluZz4oKTsK
ICAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsKICAgICB1bnNp
Z25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgdW5zaWduZWQgc2NydXRpbmVlID0gYnl0ZWNvZGUu
bV9zY3J1dGluZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5
dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRj
aCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBTdHJpbmdK
dW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOwpAQCAtODUxLDggKzg1MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlYnVn
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9v
cF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCk7Ci0gICAg
aW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMxID0gYnl0ZWNv
ZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwogICAgIEp1bXAgaXNJ
bW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtODg0LDggKzg4NCw4IEBAIHZv
aWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BOZXFOdWxsPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YzEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YzEsIHJlZ1QwKTsKICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKQEAgLTkyMCw3ICs5MjAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0
cnVjdGlvbiopCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNz
dXJlLgogICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7CiAgICAgZm9y
IChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmly
dHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKLSAgICAgICAgZW1pdEluaXRSZWdpc3Rl
cih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKS5vZmZzZXQoKSk7CisgICAgICAgIGVtaXRJbml0
UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOwogCiAgICAgZW1pdFdyaXRlQmFy
cmllcihtX2NvZGVCbG9jayk7CiAKQEAgLTkzMCw3ICs5MzAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigpOwotICAgIGludCBkc3Qg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0
aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJlZ1QwKTsKICAgICBlbWl0U3RvcmVDZWxsKGRz
dCwgcmVnVDApOwpAQCAtOTQxLDcgKzk0MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBTdHJ1Y3R1cmVJRCogY2Fj
aGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0Lm9mZnNldCgpLCByZWdUMSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOwogCiAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKIApAQCAtOTU0LDcgKzk1NCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BDcmVhdGVUaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZS5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7
CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0
YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAg
IFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsKQEAgLTk4MiwxMyArOTgyLDEzIEBAIHZv
aWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5s
aW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRJbml0aWFsaXplSW5s
aW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dD
YXNlcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQo
KSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Q2hlY2tUZHo+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Rhcmdl
dFZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiB9CiAKQEAgLTEwMDIsNyArMTAwMiw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BFcT4oKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVF
cSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJu
VmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTAxMyw3ICsxMDEzLDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2UKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwog
ICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihyZXR1
cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpLCByZXR1cm5WYWx1ZUdQUik7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVH
UFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CkBAIC0xMDQxLDEwICsxMDQxLDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9m
X2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWCiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQo
KTsKLSAgICBpbnQgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yLm9mZnNldCgp
OwotICAgIGludCBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVl
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIFZpcnR1YWxS
ZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7
CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDEpOwpAQCAtMTEyMSw4ICsxMTIxLDgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGUKIHZvaWQgSklUOjplbWl0X29wX25ld19yZWdleHAo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHJlZ2V4cCA9IGJ5dGVjb2RlLm1f
cmVnZXhwLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7CiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25z
dGFudChyZWdleHApKSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsK
IH0KQEAgLTExMzIsMTIgKzExMzIsMTIgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgSnVtcCBsYXp5SnVt
cDsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKICNlbHNlCi0g
ICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QwKTsKKyAg
ICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOwogI2VuZGlmCiAgICAg
RnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2wo
Ynl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogCkBAIC0xMTc4LDExICsxMTc4LDExIEBAIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
c2NvcGUub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fc2NvcGUsIHJlZ1QwKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2Rl
Lm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUu
bV9zY29wZSwgcmVnVDApOwogI2VuZGlmCiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0
aW9uID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7
CkBAIC0xMjI0LDEwICsxMjI0LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCk7CiAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZXNJbmRleCA9IGJ5dGVjb2RlLm1fYXJn
di5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGlu
dCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVz
SW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKKyAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwKICAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZSwgcmVnVDAsIHNpemUpOwogfQpAQCAtMTIzNiw4ICsxMjM2LDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TmV3QXJyYXlXaXRoU2l6ZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
Ci0gICAgaW50IHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoLm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
c2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLApAQCAtMTI1Myw5ICsxMjUzLDkgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzU3RydWN0dXJlUHJvcGVydHk+KCk7
Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUu
bV9lbnVtZXJhdG9yLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKIAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwpAQCAtMTI5OSw5ICsxMjk5LDkgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0g
ICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0
ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+
YWRkQnlWYWxJbmZvKCk7CiAgICAgCkBAIC0xMzQ3LDkgKzEzNDcsOSBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKLSAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9w
ZXJ0eS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBCeVZhbEluZm8q
IGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5k
ZXhdLmJ5VmFsSW5mbzsKIAogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKQEAgLTEzNjYs
MTAgKzEzNjYsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24KIHZvaWQgSklUOjplbWl0X29w
X2dldF9kaXJlY3RfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldERpcmVj
dFBuYW1lPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBp
bnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgaW5kZXggPSBieXRl
Y29kZS5tX2luZGV4Lm9mZnNldCgpOwotICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9l
bnVtZXJhdG9yLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OworICAgIFZpcnR1YWxSZWdp
c3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCiAgICAgLy8gQ2hlY2sg
dGhhdCBiYXNlIGlzIGEgY2VsbAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwpAQCAtMTQwNyw5ICsxNDA3LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9w
bmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVt
aXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1l
cmF0b3Iub2Zmc2V0KCk7Ci0gICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleC5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1l
cmF0b3IsIHJlZ1QxKTsKQEAgLTE0MzEsOSArMTQzMSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2Vu
dW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3RpCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZW5lcmljUG5hbWU+KCk7Ci0gICAgaW50
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBlbnVtZXJhdG9yID0gYnl0
ZWNvZGUubV9lbnVtZXJhdG9yLm9mZnNldCgpOwotICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1f
aW5kZXgub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9y
OworICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CkBAIC0xNDU3LDcgKzE0NTcsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2Zp
bGVUeXBlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEu
bV90eXBlTG9jYXRpb247Ci0gICAgaW50IHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJn
ZXRWaXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Q
cm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlVG9Qcm9maWxlLCByZWdUMCk7CiAKQEAgLTE1MjYsNyArMTUy
Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0CiAgICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0g
bm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgogICAg
IEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwogICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNr
ZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDMp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOwog
ICAgIGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHNjcmF0
Y2gxUmVnLCByZWdUMyk7CiB9CiAKQEAgLTE1NDAsOCArMTU0MCw4IEBAIHZvaWQgSklUOjplbWl0
X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBt
dXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgogICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9
IHJlZ1QyOwogICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0
UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUub2Zmc2V0KCksIHJlZ1QyKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QzKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7CiAgICAgbG9nU2hh
ZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiks
IHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0K
IApAQCAtMTU2Miw3ICsxNTYyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9s
X2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjpl
bWl0X29wX2FyZ3VtZW50X2NvdW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBcmd1
bWVudENvdW50PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgbG9hZDMyKHBheWxv
YWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7
CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7CkBA
IC0xNTczLDcgKzE1NzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9hcmd1bWVudF9jb3VudChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3Ro
PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgdW5zaWduZWQgbnVtUGFyYW1zVG9T
a2lwID0gYnl0ZWNvZGUubV9udW1QYXJhbWV0ZXJzVG9Ta2lwOwogICAgIGxvYWQzMihwYXlsb2Fk
Rm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOwog
ICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwpAQCAtMTYwMyw3ICsxNjAzLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50PigpOwotICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICNpZiBVU0UoSlNWQUxV
RTY0KQogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDApOwpAQCAtMTYxMyw3ICsxNjEz
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QyKTsKICAgICBKdW1wIGFyZ3VtZW50
T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1t
MzIoaW5kZXgpKTsKLSAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojp0aGlz
QXJndW1lbnQgKyBpbmRleCksIHJlc3VsdFJlZ3MpOworICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9y
KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCBy
ZXN1bHRSZWdzKTsKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKICAgICBhcmd1bWVudE91dE9m
Qm91bmRzLmxpbmsodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAKaW5kZXggYzFiYjY1N2EwN2MzYzg3ZGUyOGRkNThiY2QyMjYwNTU4MDk3M2Fl
OC4uMzAyODZjZDMyOWIzMWY5NzRiOGVkODRmNTFhZjZmYmM3NjM4MGM0MyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcApAQCAtOTUwLDcgKzk1MCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NTU5OAogCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7Ci0gICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gbWV0YWRh
dGEubV9idWZmZXI7CisgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBi
dWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKICAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0
UHJvZmlsaW5nKCkpCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJB
dENhdGNoLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBlbHNlCkBAIC05
NjAsNyArOTYwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRh
Zyk7CiAgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7CiAgICAgaWYgKGJ1ZmZlciAmJiBzaG91
bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQ
cm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgICAgICBidWZmZXItPmZvckVhY2goWyZd
IChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAgICAgICAg
IEpTVmFsdWVSZWdzIHJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJlZ3MpOwogICAgICAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGUmPihwcm9maWxlKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCAwODJhNzgz
MDg0ZDJmYzVhMDczNmIxZTZiNzFhOGEwNmQzMDM2ZjdlLi42ZmY4ODAyMTEzODJlOTYwYmQ3MjFh
Y2QzODUwOWU4YzI4NTYwNjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAKQEAgLTE2NTUsMTggKzE2NTUsMTggQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uT3B0aW1pemUoVk0qIHZtUG9pbnRlciwgdWludDMyX3QgYnl0
ZWMKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkpCiAgICAgICAg
ICAgICBkYXRhTG9nKCJUcmlnZ2VyaW5nIG9wdGltaXplZCBjb21waWxhdGlvbiBvZiAiLCAqY29k
ZUJsb2NrLCAiXG4iKTsKIAotICAgICAgICB1bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlczsKKyAg
ICAgICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXMgPSAwOwogICAgICAgICBpZiAoYnl0ZWNv
ZGVJbmRleCkKICAgICAgICAgICAgIG51bVZhcnNXaXRoVmFsdWVzID0gY29kZUJsb2NrLT5udW1D
YWxsZWVMb2NhbHMoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbnVtVmFyc1dpdGhWYWx1
ZXMgPSAwOwotICAgICAgICBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4gbXVzdEhhbmRsZVZh
bHVlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyc1dpdGhWYWx1ZXMpOworCisg
ICAgICAgIE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiBtdXN0SGFuZGxlVmFsdWVzKGNvZGVC
bG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJzV2l0aFZhbHVlcywgMCk7CiAgICAgICAgIGlu
dCBsb2NhbHNVc2VkRm9yQ2FsbGVlU2F2ZXMgPSBzdGF0aWNfY2FzdDxpbnQ+KENvZGVCbG9jazo6
bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKTsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvcklu
ZGV4KGkpOwotICAgICAgICAgICAgaWYgKG9wZXJhbmRJc0xvY2FsKG9wZXJhbmQpICYmIFZpcnR1
YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCkgPCBsb2NhbHNVc2VkRm9yQ2FsbGVlU2F2ZXMp
CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRG
b3JJbmRleChpKTsKKworICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpICYmIG9wZXJh
bmQudG9Mb2NhbCgpIDwgbG9jYWxzVXNlZEZvckNhbGxlZVNhdmVzKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVlc1tpXSA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVlKCk7CisgICAgICAgICAgICBtdXN0SGFuZGxlVmFs
dWVzW2ldID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkp
LmpzVmFsdWUoKTsKICAgICAgICAgfQogCiAgICAgICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnRD
b2RlQmxvY2sgPSBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCk7CkBAIC0xNzg0LDcgKzE3ODQs
NyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZh
bHVlUHJvZmlsZShWTSogdm1Qb2ludGVyLCB1aQogICAgIGNvZGVCbG9jay0+ZW5zdXJlQ2F0Y2hM
aXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgp
LT5hczxPcENhdGNoPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
Y29kZUJsb2NrKTsKLSAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJv
ZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFj
aChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAg
ICBwcm9maWxlLm1fYnVja2V0c1swXSA9IEpTVmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPnVuY2hl
Y2tlZFIocHJvZmlsZS5tX29wZXJhbmQpLmpzVmFsdWUoKSk7CiAgICAgfSk7CiAKQEAgLTE5MDgs
OCArMTkwOCw4IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qb3BTY29wZShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHNjb3BlCiAgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3Vl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAotICAgIEpTU2NvcGUqIHNj
b3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNjb3BlUmVnKS5SZWdpc3Rlcjo6c2NvcGUoKTsK
LSAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc2NvcGVSZWcpID0gc2NvcGUtPm5leHQoKTsKKyAg
ICBhdXRvJiBzY29wZVNsb3QgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVy
KHNjb3BlUmVnKSk7CisgICAgc2NvcGVTbG90ID0gc2NvcGVTbG90LlJlZ2lzdGVyOjpzY29wZSgp
LT5uZXh0KCk7CiB9CiAKIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25JbnN0YW5jZU9m
Q3VzdG9tKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkSGFz
SW5zdGFuY2UpCkBAIC0yNDE3LDcgKzI0MTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkdldEZyb21TY29wZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAog
CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Zh
cik7Ci0gICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oY2FsbEZyYW1lLT51
bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLmpzVmFsdWUoKSk7CisgICAgSlNP
YmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5
dGVjb2RlLm1fc2NvcGUpLmpzVmFsdWUoKSk7CiAgICAgR2V0UHV0SW5mbyYgZ2V0UHV0SW5mbyA9
IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9nZXRQdXRJbmZvOwogCiAgICAgLy8gTW9k
dWxlVmFyIGlzIGFsd2F5cyBjb252ZXJ0ZWQgdG8gQ2xvc3VyZVZhciBmb3IgZ2V0X2Zyb21fc2Nv
cGUuCkBAIC0yNDYwLDggKzI0NjAsOCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
VG9TY29wZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJbnN0cgogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKIAogICAgIGNvbnN0
IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFy
KTsKLSAgICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNPYmplY3QqPihjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSkuanNWYWx1ZSgpKTsKLSAgICBKU1Zh
bHVlIHZhbHVlID0gY2FsbEZyYW1lLT5yKGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCkpLmpzVmFs
dWUoKTsKKyAgICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNPYmplY3QqPihjYWxsRnJhbWUt
PnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuanNWYWx1ZSgpKTsKKyAgICBKU1ZhbHVlIHZh
bHVlID0gY2FsbEZyYW1lLT5yKGJ5dGVjb2RlLm1fdmFsdWUpLmpzVmFsdWUoKTsKICAgICBHZXRQ
dXRJbmZvJiBnZXRQdXRJbmZvID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvOwogCiAgICAgLy8gTW9k
dWxlVmFyIGRvZXMgbm90IGtlZXAgdGhlIHNjb3BlIHJlZ2lzdGVyIHZhbHVlIGFsaXZlIGluIERG
Ry4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAK
aW5kZXggYzY1NWRiOGJkMmQyMTI0MGUyY2E4NmE5MWE5NjIxNjA0MDg0ZTkzNy4uYWJmNTJmNzEz
ZThhYTBhZmI1ZTgwNWM3Y2YzZjFkMzg4MzcxYzJmNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAgLTU3LDkgKzU3LDkgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlWYWw+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAg
QXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBAIC05Myw3ICs5Myw3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiB7CiAgICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkg
ewogICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
VmFsPigpOwotICAgICAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgICAgIEFycmF5
UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIApAQCAtMTE3LDgg
KzExNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsK
LSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZv
ID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbygpOwogCkBAIC0xNzcsNyArMTc3LDcgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1
b3VzUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5n
VHlwZSBpbmRleGluZ1NoYXBlKQogewogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAg
ICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAg
CiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwpAQCAtMjA4LDcgKzIwOCw3IEBAIEpJVDo6SnVtcExp
c3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hh
YmxlSnVtcCYgYmFkCiAgICAgfQogICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgogICAgICAgICBz
dG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSk7Ci0gICAg
ICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCB2YWx1ZSwgU2hv
dWxkRmlsdGVyVmFsdWUpOworICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFz
ZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgQ1JBU0goKTsKQEAgLTIzNSw3ICsyMzUsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KIEpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3AgYnl0
ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCiB7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJv
ZmlsZTsKICAgICAKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CkBAIC0yNDksNyArMjQ5LDcgQEAg
SklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChPcCBieXRlY29kZSwg
UGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKICAgICBMYWJlbCBzdG9yZVJlc3VsdCh0aGlzKTsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMyk7CiAgICAgc3RvcmU2NChyZWdU
MywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0
b3JPZmZzZXQoKSkpOwotICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNl
dCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0
ZWNvZGUubV9iYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgIEp1bXAgZW5kID0g
anVtcCgpOwogICAgIAogICAgIGVtcHR5LmxpbmsodGhpcyk7CkBAIC0yNzQsOCArMjc0LDggQEAg
SklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbElu
Zm8qIGJ5VmFsSW5mbywgT3AgYnl0ZWMKICAgICAvLyBwcm9wZXJ0eTogcmVnVDEKICAgICAvLyBz
Y3JhdGNoOiByZWdUMgogCi0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7
Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwogCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5v
dENlbGwocmVnVDEpKTsKICAgICBlbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soYnlWYWxJbmZvLCBy
ZWdUMSwgcmVnVDEsIHByb3BlcnR5TmFtZSwgc2xvd0Nhc2VzKTsKQEAgLTMwNCwxNCArMzA0LDE0
IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlW
YWxJbmZvKiBieVZhbEluZm8sIE9wIGJ5dGVjCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGJvb2wgaXNEaXJlY3QgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7Ci0gICAgaW50
IGJhc2U7Ci0gICAgaW50IHByb3BlcnR5OwotICAgIGludCB2YWx1ZTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlOwogCiAgICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKLSAg
ICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICAgICAgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOwotICAgICAgICB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWUub2Zmc2V0KCk7CisgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAg
ICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKKyAgICAgICAgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC0zMzcsMzYgKzMz
NywzNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8Uwogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dl
dHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlJZD4o
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwg
cmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdU
MCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvci5vZmZzZXQoKSwgcmVnVDEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEp
OwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dFNldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YWNjZXNzb3Iub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwo
KSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3Nl
dHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyU2V0dGVy
QnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZz
ZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNl
LCByZWdUMCk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlci5vZmZzZXQoKSwg
cmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIub2Zm
c2V0KCksIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0
dGVyLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRl
ciwgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwg
cmVnVDEsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5VmFsPigpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpLCBy
ZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1Qw
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1Qx
KTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7CiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1Qy
KTsKQEAgLTM3NSwxOCArMzc1LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
U2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2Uub2Zmc2V0KCksIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YWNjZXNzb3Iub2Zmc2V0KCksIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7Ci0g
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRl
QnlJZEpTUmVzdWx0LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCkpOwpA
QCAtMzk1LDkgKzM5NSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7Ci0gICAgaW50IGRz
dCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlLm9mZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwg
cmVnVDEpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxKU1Jlc3VsdCwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CkBAIC00MDYsOCArNDA2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bf
dHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4o
KTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGlu
dCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
VlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwpAQCAtNDMwLDcgKzQzMCw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4o
KTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9n
ZXRCeUlkSW5kZXgrK107CkBAIC00NDUsOCArNDQ1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG8KIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcs
IHJlZ1QwKTsKQEAgLTQ2OSw3ICs0NjksNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZQogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwpAQCAtNDg1LDgg
KzQ4NSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwpA
QCAtNTEzLDkgKzUxMyw5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlz
PigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAg
aW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCB0aGlzVlJl
ZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVn
ID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVj
b2RlLm1fdGhpc1ZhbHVlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CkBAIC01MzksNyArNTM5LDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2wKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGlu
dCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRl
eCsrXTsKQEAgLTU1Niw3ICs1NTYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLAogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRX
aXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhU
aGlzSW5kZXgrK107CkBAIC01NzEsOCArNTcxLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwK
IHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0QnlJZD4oKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0
KCk7Ci0gICAgaW50IHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0g
ISEoYnl0ZWNvZGUubV9mbGFncyAmIFB1dEJ5SWRJc0RpcmVjdCk7CiAKICAgICAvLyBJbiBvcmRl
ciB0byBiZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qg
b2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKQEAgLTYxNSw4ICs2MTUsOCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywg
cmVnVDApOwpAQCAtNjM4LDcgKzYzOCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvCiAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9y
JiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKQEAgLTY1Nyw3ICs2NTcsNyBAQCB2
b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MpCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNz
T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0UmVzb2x2ZUNsb3N1cmUoaW50IGRzdCwgaW50IHNjb3BlLCBib29sIG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKK3ZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1
cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKIHsKICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NvcGUsIHJlZ1QwKTsKQEAgLTY3MCw4ICs2NzAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2Nv
cGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzY29w
ZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1f
c2NvcGU7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVU
eXBlOwogICAgIHVuc2lnbmVkIGRlcHRoID0gbWV0YWRhdGEubV9sb2NhbFNjb3BlRGVwdGg7CiAK
QEAgLTc3MCw3ICs3NzAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgfQogfQogCi12b2lkIEpJVDo6
ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soaW50IHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1
cmVTbG90KQordm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdp
c3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkKIHsKICAgICBsb2FkUHRyKHN0
cnVjdHVyZVNsb3QsIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBy
ZWdUMCk7CkBAIC03OTAsNyArNzkwLDcgQEAgdm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9tSW5kaXJl
Y3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcgcmVnKQogICAgIGxvYWRQdHIocmVn
LCByZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50
cHRyX3Qgb3BlcmFuZCkKK3ZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NvcGUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVu
dmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3Rl
cikpLCByZWdUMCk7CkBAIC04MDAsOCArODAwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsK
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNjb3BlID0gYnl0
ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsK
ICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNv
bHZlVHlwZSgpOwogICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0
cnVjdHVyZS5zbG90KCk7CiAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CkBAIC05MTksMTcgKzkxOSwx
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21T
Y29wZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21T
Y29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1
cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUo
SlNWYWx1ZSogb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCit2b2lkIEpJ
VDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKICAgICBzdG9yZVB0
cihyZWdUMCwgb3BlcmFuZCk7CiB9Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5k
aXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCoqIGluZGlyZWN0V2F0Y2hwb2ludFNldCkKK3ZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFi
bGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQogewogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKGluZGlyZWN0V2F0
Y2hwb2ludFNldCwgcmVnVDEpOwpAQCAtOTM4LDcgKzkzOCw3IEBAIHZvaWQgSklUOjplbWl0UHV0
R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgaW50IHZh
bHVlLCBXCiAgICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRQ
dXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0
Y2hwb2ludFNldCogc2V0KQordm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdp
c3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0
Y2hwb2ludFNldCogc2V0KQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CkBAIC05NTAs
OCArOTUwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLm1f
c2NvcGUub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOworICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgR2V0UHV0SW5mbyBn
ZXRQdXRJbmZvID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSk7CiAgICAgUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUgPSBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CiAgICAgU3RydWN0dXJlKiog
c3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKQEAgLTEwODYsOCAr
MTA4Niw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
ZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21Bcmd1
bWVudHM+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGlu
dCBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50cy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3Vt
ZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1f
aW5kZXg7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1Qw
KTsKQEAgLTEwOTksOSArMTA5OSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3Vt
ZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
VG9Bcmd1bWVudHM+KCk7Ci0gICAgaW50IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRz
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2Fy
Z3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwotICAgIGludCB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFy
Z3VtZW50cywgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qx
KTsKQEAgLTExMTAsNyArMTExMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVu
dHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0V3JpdGVC
YXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0
ZUJhcnJpZXJNb2RlIG1vZGUpCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVn
aXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2Rl
KQogewogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRl
clZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7CkBAIC0xMTMzLDcg
KzExMzMsNyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25lciwgdW5z
aWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZQogICAgICAgICB2YWx1ZU5vdENlbGwu
bGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25l
ciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKK3ZvaWQgSklUOjplbWl0
V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVC
YXJyaWVyTW9kZSBtb2RlKQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKQEAgLTExNTAsOCArMTE1MCw4IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zm
c2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9p
bmRleDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwpAQCAtMTE2
NCw4ICsxMTY0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
aW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEludGVybmFs
RmllbGQ+KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAg
aW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsK
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtMTE3Niw3ICsx
MTc2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCiAK
LXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1
ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmly
dHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1v
ZGUgbW9kZSkKIHsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91
bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewpAQCAt
MTE5OSw3ICsxMTk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3du
ZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUKICAgICAgICAgdmFsdWVO
b3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2Vs
bCogb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit2b2lkIEpJ
VDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUs
IFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBp
ZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkgewpAQCAtMTQyNSw3ICsxNDI1LDcgQEAgSklU
OjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBh
dGNoYWJsZUp1bXAmIGJhZFR5cGUKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRh
dGEubV9hcnJheVByb2ZpbGU7CiAgICAgQVNTRVJUKGlzSW50KHR5cGUpKTsKICAgICAKLSAgICBp
bnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIFJl
Z2lzdGVySUQgYmFzZSA9IHJlZ1QwOwpAQCAtMTUwMSw3ICsxNTAxLDcgQEAgSklUOjpKdW1wTGlz
dCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHkKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CiAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwogICAgIAotICAgIGludCB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgUmVnaXN0ZXJJ
RCBiYXNlID0gcmVnVDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pT
SW50ZXJmYWNlSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklU
LmgKaW5kZXggMmNmOTE5OGY0MGVkYWFmNTNhNjFkYmYzMzkwYTZjN2RiMjg2YTVjMS4uNTgyNzEz
ZTY0MDg3YTUxZjU5MzliOTBiOTg1NDVkZjEzM2QwYzZhYSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaApAQCAtNDUsMTggKzQ1LDE4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBpbmxpbmUgSnVtcCBlbWl0TG9h
ZEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2Fk
KTsKLSAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRJbnQzMih1bnNpZ25lZCB2aXJ0dWFsUmVn
aXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBkc3QpOwotICAgICAgICBpbmxpbmUgSnVtcCBlbWl0TG9h
ZERvdWJsZSh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgRlBSZWdpc3RlcklEIGRzdCwg
UmVnaXN0ZXJJRCBzY3JhdGNoKTsKKyAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRKU0NlbGwo
VmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBheWxvYWQpOworICAgICAgICBpbmxpbmUgSnVt
cCBlbWl0TG9hZEludDMyKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBkc3QpOworICAgICAg
ICBpbmxpbmUgSnVtcCBlbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJ
RCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCk7CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAg
ICAgICBpbmxpbmUgSnVtcCBlbWl0SnVtcElmTm90SlNDZWxsKHVuc2lnbmVkIHZpcnR1YWxSZWdp
c3RlckluZGV4KTsKKyAgICAgICAgaW5saW5lIEp1bXAgZW1pdEp1bXBJZk5vdEpTQ2VsbChWaXJ0
dWFsUmVnaXN0ZXIpOwogI2VuZGlmCiAKLSAgICAgICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFt
ZUhlYWRlclB0cihpbnQgZW50cnksIFJlZ2lzdGVySUQgdG8sIFJlZ2lzdGVySUQgZnJvbSA9IGNh
bGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIo
UmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkpOwotICAgICAgICB2b2lkIGVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwgaW50IGVudHJ5KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0
Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgaW50IGVudHJ5KTsKKyAgICAg
ICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihWaXJ0dWFsUmVnaXN0ZXIgZW50
cnksIFJlZ2lzdGVySUQgdG8sIFJlZ2lzdGVySUQgZnJvbSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsK
KyAgICAgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBW
aXJ0dWFsUmVnaXN0ZXIgZW50cnkpOworICAgICAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhl
YWRlcih2b2lkKiB2YWx1ZSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KTsKKyAgICAgICAgdm9pZCBl
bWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lz
dGVyIGVudHJ5KTsKIAogICAgICAgICBWTSogdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9CiAK
QEAgLTY0LDM2ICs2NCwzNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAjaWYgVVNFKEpT
VkFMVUUzMl82NCkKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VK
SVQ6OmVtaXRMb2FkSlNDZWxsKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3Rl
cklEIHBheWxvYWQpCisgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNl
SklUOjplbWl0TG9hZEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdp
c3RlcklEIHBheWxvYWQpCiAgICAgewotICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVh
bFJlZ2lzdGVySW5kZXgpLCBwYXlsb2FkKTsKLSAgICAgICAgcmV0dXJuIGVtaXRKdW1wSWZOb3RK
U0NlbGwodmlydHVhbFJlZ2lzdGVySW5kZXgpOworICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3Io
dmlydHVhbFJlZ2lzdGVyKSwgcGF5bG9hZCk7CisgICAgICAgIHJldHVybiBlbWl0SnVtcElmTm90
SlNDZWxsKHZpcnR1YWxSZWdpc3Rlcik7CiAgICAgfQogCi0gICAgaW5saW5lIEpTSW50ZXJmYWNl
SklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0SnVtcElmTm90SlNDZWxsKHVuc2lnbmVkIHZp
cnR1YWxSZWdpc3RlckluZGV4KQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0lu
dGVyZmFjZUpJVDo6ZW1pdEp1bXBJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
Z2lzdGVyKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4odmlydHVhbFJl
Z2lzdGVySW5kZXgpIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgICAgICByZXR1
cm4gYnJhbmNoMzIoTm90RXF1YWwsIHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CisgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0
ZXIgPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAgICAgIHJldHVybiBicmFuY2gz
MihOb3RFcXVhbCwgdGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSk7CiAgICAgfQogICAgIAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVt
cCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRJbnQzMih1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJ
bmRleCwgUmVnaXN0ZXJJRCBkc3QpCisgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpT
SW50ZXJmYWNlSklUOjplbWl0TG9hZEludDMyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGlu
dD4odmlydHVhbFJlZ2lzdGVySW5kZXgpIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwot
ICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOwot
ICAgICAgICByZXR1cm4gYnJhbmNoMzIoTm90RXF1YWwsIHRhZ0ZvcihzdGF0aWNfY2FzdDxpbnQ+
KHZpcnR1YWxSZWdpc3RlckluZGV4KSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykp
OworICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVy
SW5kZXgpOworICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0
KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVxdWFsLCB0YWdGb3IodmlydHVhbFJlZ2lz
dGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7CiAgICAgfQogCi0gICAgaW5s
aW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZSh1
bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgRlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJ
RCBzY3JhdGNoKQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJ
VDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgRlBSZWdp
c3RlcklEIGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHN0
YXRpY19jYXN0PGludD4odmlydHVhbFJlZ2lzdGVySW5kZXgpIDwgRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXgpOwotICAgICAgICBsb2FkUHRyKHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCks
IHNjcmF0Y2gpOworICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyIDwgRmlyc3RDb25zdGFu
dFJlZ2lzdGVySW5kZXgpOworICAgICAgICBsb2FkUHRyKHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIp
LCBzY3JhdGNoKTsKICAgICAgICAgSnVtcCBpc0RvdWJsZSA9IGJyYW5jaDMyKEJlbG93LCBzY3Jh
dGNoLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSk7CiAgICAgICAgIEp1bXAgbm90
SW50ID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJ
bnQzMlRhZykpOwotICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVySW5k
ZXgpLCBzY3JhdGNoKTsKKyAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3Rl
ciksIHNjcmF0Y2gpOwogICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShzY3JhdGNoLCBkc3Qp
OwogICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgICAgIGlzRG91YmxlLmxpbmsodGhp
cyk7Ci0gICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCks
IGRzdCk7CisgICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBk
c3QpOwogICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAgICAgIHJldHVybiBub3RJbnQ7CiAg
ICAgfQpAQCAtMTAxLDIzICsxMDEsMjMgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJm
YWNlSklUOjplbWl0TG9hZEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVn
aXN0ZXJJRCBkc3QpCisgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNl
SklUOjplbWl0TG9hZEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdp
c3RlcklEIGRzdCkKICAgICB7Ci0gICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdp
c3RlckluZGV4KSwgZHN0KTsKKyAgICAgICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lz
dGVyKSwgZHN0KTsKICAgICAgICAgcmV0dXJuIGJyYW5jaElmTm90Q2VsbChkc3QpOwogICAgIH0K
ICAgICAKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVt
aXRMb2FkSW50MzIodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0
KQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExv
YWRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIGRzdCkK
ICAgICB7Ci0gICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwg
ZHN0KTsKKyAgICAgICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsK
ICAgICAgICAgSnVtcCBub3RJbnQzMiA9IGJyYW5jaElmTm90SW50MzIoZHN0KTsKICAgICAgICAg
emVyb0V4dGVuZDMyVG9QdHIoZHN0LCBkc3QpOwogICAgICAgICByZXR1cm4gbm90SW50MzI7CiAg
ICAgfQogCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjpl
bWl0TG9hZERvdWJsZSh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgRlBSZWdpc3RlcklE
IGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVt
cCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWdpc3RlciwgRlBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogICAgIHsKLSAg
ICAgICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBzY3JhdGNoKTsK
KyAgICAgICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgc2NyYXRjaCk7CiAg
ICAgICAgIEp1bXAgbm90TnVtYmVyID0gYnJhbmNoSWZOb3ROdW1iZXIoc2NyYXRjaCk7CiAgICAg
ICAgIEp1bXAgbm90SW50ID0gYnJhbmNoSWZOb3RJbnQzMihzY3JhdGNoKTsKICAgICAgICAgY29u
dmVydEludDMyVG9Eb3VibGUoc2NyYXRjaCwgZHN0KTsKQEAgLTEyOSwxMiArMTI5LDEyIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIH0KICNlbmRpZgogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIEpT
SW50ZXJmYWNlSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihpbnQgZW50cnksIFJl
Z2lzdGVySUQgdG8sIFJlZ2lzdGVySUQgZnJvbSkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJ
bnRlcmZhY2VKSVQ6OmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFZpcnR1YWxSZWdpc3Rl
ciBlbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tKQogICAgIHsKLSAgICAgICAg
bG9hZFB0cihBZGRyZXNzKGZyb20sIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKKyAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKGZyb20sIGVudHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lz
dGVyKSksIHRvKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VK
SVQ6OmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIGludCBlbnRyeSkK
KyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRUb0NhbGxGcmFt
ZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKICAgICB7CiAj
aWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgc3RvcmVQdHIoZnJvbSwgcGF5bG9hZEZvcihl
bnRyeSkpOwpAQCAtMTQzLDEyICsxNDMsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAg
ICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRUb0Nh
bGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwgaW50IGVudHJ5KQorICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVl
LCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewogICAgICAgICBzdG9yZVB0cihUcnVzdGVk
SW1tUHRyKHZhbHVlKSwgYWRkcmVzc0ZvcihlbnRyeSkpOwogICAgIH0KIAotICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihS
ZWdpc3RlcklEIGZyb20sIGludCBlbnRyeSkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRl
cmZhY2VKSVQ6OmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBW
aXJ0dWFsUmVnaXN0ZXIgZW50cnkpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAg
ICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB0YWdGb3IoZW50cnkp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJh
bWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAK
aW5kZXggMDk1MjU5MWVlOWY3ZDVkNGZjMjE3MGM3MTY5M2NlYjY2OTc3NGI0Yi4uNDlmNTRjNWRh
NTY3MjUwM2ExZTA3NmYyMmQ5ZDM4MDI5YmIwOWZjYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAKQEAgLTEyOCw3ICsxMjgsNyBAQCB2b2lk
IGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQs
IEdQUlJlZyBudW1Vc2VkU2xvdAogICAgICAgICAgICAgZmlyc3RBcmd1bWVudFJlZyA9IFZpcnR1
YWxSZWdpc3RlcigwKTsKICAgICB9IGVsc2UgewogICAgICAgICBhcmd1bWVudENvdW50UmVjb3Zl
cnkgPSBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCi0gICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCBE
YXRhRm9ybWF0SW50MzIpOworICAgICAgICAgICAgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsIERhdGFGb3JtYXRJbnQzMik7CiAgICAgICAgIGZpcnN0QXJndW1lbnRS
ZWcgPSBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgwKSk7CiAgICAg
fQogICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKHZtLCBqaXQsIG51bVVzZWRTbG90
c0dQUiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgYXJndW1lbnRDb3Vu
dFJlY292ZXJ5LCBmaXJzdEFyZ3VtZW50UmVnLCBmaXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2Up
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5r
SklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaApp
bmRleCBhMTE2MjJlZWJkYmU0Nzg1ZWYwNmFkYzM5MzQ3MWY1YzIxZjcyNDAzLi5lMTU2MDMwZTQx
NDM3OGFjYjM1NWRhYTcyY2U1YzQ1MjBlZGMxZWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaApAQCAtNTUsMTMgKzU1LDEzIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBsb2FkRG91YmxlQXJndW1lbnQoaW50
IGFyZ3VtZW50LCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNyYyA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQo
YXJndW1lbnQpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAgICAgIG1fZmFpbHVyZXMuYXBwZW5k
KGVtaXRMb2FkRG91YmxlKHNyYywgZHN0LCBzY3JhdGNoKSk7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIHZvaWQgbG9hZENlbGxBcmd1bWVudChpbnQgYXJndW1lbnQsIFJlZ2lzdGVySUQg
ZHN0KQogICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMgPSBDYWxsRnJhbWU6OmFy
Z3VtZW50T2Zmc2V0KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgICAgICBtX2Zh
aWx1cmVzLmFwcGVuZChlbWl0TG9hZEpTQ2VsbChzcmMsIGRzdCkpOwogICAgICAgICB9CiAgICAg
ICAgIApAQCAtNzMsNyArNzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAg
IHZvaWQgbG9hZEludDMyQXJndW1lbnQoaW50IGFyZ3VtZW50LCBSZWdpc3RlcklEIGRzdCwgSnVt
cCYgZmFpbFRhcmdldCkKICAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc3JjID0gQ2Fs
bEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVudCk7CisgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpOwogICAgICAg
ICAgICAgZmFpbFRhcmdldCA9IGVtaXRMb2FkSW50MzIoc3JjLCBkc3QpOwogICAgICAgICB9CiAg
ICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVy
YXRvcnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3Bw
CmluZGV4IGI4MTQ2ZDIxNzY2MTQ4MGVkNGIyYTc2YTBlYTFkZmEzMWYzMWYxZjIuLjcxYTRhYzdh
NzUwYzFkNWRmZjg0ZTM2NTdjMDE1ZDRmNmQ5NzUyMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKQEAgLTEwMzYsOCArMTAzNiw4IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYWJzVGh1bmtHZW5lcmF0b3IoVk0mIHZt
KQogICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6
Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHZtLmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSk7
CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4
ID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgwKTsKLSAgICBqaXQubG9hZDY0KEFzc2VtYmx5
SGVscGVyczo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoMCk7CisgICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NG
b3IodmlydHVhbFJlZ2lzdGVyKSwgR1BSSW5mbzo6cmVnVDApOwogICAgIGF1dG8gbm90SW50ZWdl
ciA9IGppdC5icmFuY2hJZk5vdEludDMyKEdQUkluZm86OnJlZ1QwKTsKIAogICAgIC8vIEFicyBJ
bnQzMi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQ
YXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
CmluZGV4IGFjNzJhYmM1NzM4NzA2MjU3OTQzZTEyZTY0ZjU3ZjdlZjU5MmYwZTIuLjJiYjYxNWY1
NGE4OGU4ZTQ4NmM5ZGU0OTI3N2EzMmQyZmU1OTljMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1
ZGUgIkFycmF5Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgog
I2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0
YXRlLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIK
ICNpbmNsdWRlICJFcnJvckhhbmRsaW5nU2NvcGUuaCIKQEAgLTk4LDggKzk5LDggQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBMTEludCB7CiAgICAgTExJTlRfQkVHSU5fTk9fU0VUX1BDKCk7
ICAgICAgICAgICAgICAgICAgICBcCiAgICAgTExJTlRfU0VUX1BDX0ZPUl9TVFVCUygpCiAKLWlu
bGluZSBKU1ZhbHVlIGdldE5vbkNvbnN0YW50T3BlcmFuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
Y29uc3QgVmlydHVhbFJlZ2lzdGVyJiBvcGVyYW5kKSB7IHJldHVybiBjYWxsRnJhbWUtPnVuY2hl
Y2tlZFIob3BlcmFuZC5vZmZzZXQoKSkuanNWYWx1ZSgpOyB9Ci1pbmxpbmUgSlNWYWx1ZSBnZXRP
cGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBWaXJ0dWFsUmVnaXN0ZXImIG9wZXJh
bmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+cihvcGVyYW5kLm9mZnNldCgpKS5qc1ZhbHVlKCk7IH0K
K2lubGluZSBKU1ZhbHVlIGdldE5vbkNvbnN0YW50T3BlcmFuZChDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dW5jaGVja2Vk
UihvcGVyYW5kKS5qc1ZhbHVlKCk7IH0KK2lubGluZSBKU1ZhbHVlIGdldE9wZXJhbmQoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7IHJldHVybiBjYWxsRnJh
bWUtPnIob3BlcmFuZCkuanNWYWx1ZSgpOyB9CiAKICNkZWZpbmUgTExJTlRfUkVUVVJOX1RXTyhm
aXJzdCwgc2Vjb25kKSBkbyB7ICAgICAgIFwKICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChm
aXJzdCwgc2Vjb25kKTsgICAgICAgIFwKQEAgLTE1NzEsNyArMTU3Miw3IEBAIGlubGluZSBTbG93
UGF0aFJldHVyblR5cGUgZ2VuZXJpY0NhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENhbGxGcmFt
ZSogY2FsbEZyYW1lCiAgICAgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSA9IGNhbGxGcmFtZSAtIGJ5
dGVjb2RlLm1fYXJndjsKICAgICAKICAgICBjYWxsZWVGcmFtZS0+c2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMoYnl0ZWNvZGUubV9hcmdjKTsKLSAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2Vk
UihDYWxsRnJhbWVTbG90OjpjYWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKKyAgICBjYWxsZWVGcmFt
ZS0+dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkgPSBj
YWxsZWVBc1ZhbHVlOwogICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFtZShjYWxsRnJhbWUp
OwogICAgIAogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2Nr
KTsKQEAgLTE2ODksNyArMTY5MCw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmFyYXJn
c1NldHVwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbioKICAgICAgICAg
c2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWVBbmRTZXRUaGlzKGdsb2JhbE9iamVjdCwgY2FsbEZy
YW1lLCBjYWxsZWVGcmFtZSwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fdGhpc1Zh
bHVlKSwgdm0udmFyYXJnc0xlbmd0aCk7CiAKICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVyRnJh
bWUoY2FsbEZyYW1lKTsKLSAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKKyAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihW
aXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkgPSBjYWxsZWVBc1ZhbHVlOwog
ICAgIGNhbGxGcmFtZS0+c2V0Q3VycmVudFZQQyhwYyk7CiAKICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgc2V0VXBDYWxsKGNhbGxlZUZyYW1lLCBraW5kLCBjYWxsZWVBc1ZhbHVl
KSk7CkBAIC0xNzI1LDcgKzE3MjYsNyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGNvbW1v
bkNhbGxFdmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbgogICAgIAog
ICAgIGNhbGxlZUZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhieXRlY29kZS5t
X2FyZ2MpOwogICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFtZShjYWxsRnJhbWUpOwotICAg
IGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgPSBjYWxsZWVB
c1ZhbHVlOworICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CiAgICAgY2FsbGVlRnJhbWUtPnNl
dFJldHVyblBDKHJldHVyblBvaW50LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIGNhbGxlZUZy
YW1lLT5zZXRDb2RlQmxvY2sobnVsbHB0cik7CiAgICAgY2FsbEZyYW1lLT5zZXRDdXJyZW50VlBD
KHBjKTsKQEAgLTE5MjYsNyArMTkyNyw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9wcm9maWxlX2NhdGNoKQogCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcENhdGNoPigp
OwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKLSAg
ICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQm
IHByb2ZpbGUpIHsKKyAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICBwcm9maWxlLm1fYnVj
a2V0c1swXSA9IEpTVmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPnVuY2hlY2tlZFIocHJvZmlsZS5t
X29wZXJhbmQpLmpzVmFsdWUoKSk7CiAgICAgfSk7CiAKQEAgLTE5NTcsMTEgKzE5NTgsMTI0IEBA
IExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9vdXRfb2ZfbGluZV9qdW1wX3RhcmdldCkK
ICAgICBMTElOVF9FTkRfSU1QTCgpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGU+Citz
dGF0aWMgdm9pZCBoYW5kbGVWYXJhcmdzQ2hlY2twb2ludChWTSYgdm0sIENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBPcGNvZGUmIGJ5dGVj
b2RlLCBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZSYgc2lkZVN0YXRlKQoreworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICB1bnNpZ25lZCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyA9IHNpZGVTdGF0ZS50bXBzW09wY29kZTo6YXJnQ291bnRJbmNsdWRp
bmdUaGlzXS5hc1VJbnQzMigpOworICAgIHVuc2lnbmVkIGZpcnN0VmFyQXJnID0gYnl0ZWNvZGUu
bV9maXJzdFZhckFyZzsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJn
cy5maWxsKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSwgWyZdIChKU1ZhbHVlKiBidWZm
ZXIpIHsKKyAgICAgICAgbG9hZFZhcmFyZ3MoZ2xvYmFsT2JqZWN0LCBidWZmZXIsIGNhbGxGcmFt
ZS0+cihieXRlY29kZS5tX2FyZ3VtZW50cykuanNWYWx1ZSgpLCBmaXJzdFZhckFyZywgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsKKyAgICB9KTsKKyAgICBpZiAoYXJncy5oYXNPdmVy
Zmxvd2VkKCkpIHsKKyAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgdm9pZCgpKTsKKworICAgIEpTVmFsdWUgcmVzdWx0OworICAgIGlmIChP
cGNvZGU6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzKQorICAgICAgICByZXN1bHQg
PSBjYWxsKGdsb2JhbE9iamVjdCwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fY2Fs
bGVlKSwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fdGhpc1ZhbHVlKSwgYXJncywg
IiIpOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ID0gY29uc3RydWN0KGdsb2JhbE9iamVjdCwg
Z2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fY2FsbGVlKSwgZ2V0T3BlcmFuZChjYWxs
RnJhbWUsIGJ5dGVjb2RlLm1fdGhpc1ZhbHVlKSwgYXJncywgIiIpOworCisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKyAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0
ZWNvZGUubV9kc3QpID0gcmVzdWx0OworfQorCitpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGRp
c3BhdGNoVG9OZXh0SW5zdHJ1Y3Rpb24oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0aW9u
U3RyZWFtOjpSZWYgcGMpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWNvZGVCbG9jay0+dm0oKS5l
eGNlcHRpb25Gb3JJbnNwZWN0aW9uKCkpOworICAgIGlmIChPcHRpb25zOjpmb3JjZU9TUkV4aXRU
b0xMSW50KCkgfHwgY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJU
aHVuaykgeworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogbmV4dFBDID0gcGMubmV4dCgpLnB0
cigpOworICAgICAgICBhdXRvIG5leHRCeXRlY29kZSA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50
cnlQdHJUYWc+KCpwYy5uZXh0KCkucHRyKCkpOworICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0
KG5leHRQQywgbmV4dEJ5dGVjb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIH0KKworI2lm
IEVOQUJMRShKSVQpCisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6
OkJhc2VsaW5lSklUKTsKKyAgICBCeXRlY29kZUluZGV4IG5leHRCeXRlY29kZUluZGV4ID0gcGMu
bmV4dCgpLmluZGV4KCk7CisgICAgYXV0byBuZXh0Qnl0ZWNvZGUgPSBjb2RlQmxvY2stPmppdENv
ZGVNYXAoKS5maW5kKG5leHRCeXRlY29kZUluZGV4KTsKKyAgICByZXR1cm4gZW5jb2RlUmVzdWx0
KG51bGxwdHIsIG5leHRCeXRlY29kZS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyNlbmRpZgorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2V4dGVybiAiQyIgU2xvd1BhdGhS
ZXR1cm5UeXBlIHNsb3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxs
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBFbmNvZGVkSlNWYWx1ZSByZXN1bHQpCit7CisgICAgLy8g
U2luY2UgYWxsIG91ciBjYWxsaW5nIGNoZWNrcG9pbnRzIGRvIHJpZ2h0IG5vdyBpcyBtb3ZlIHJl
c3VsdCBpbnRvIG91ciBkZXN0IHdlIGNhbiBqdXN0IGRvIHRoYXQgaGVyZSBhbmQgcmV0dXJuLgor
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICBW
TSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CisgICAgU2xvd1BhdGhGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGNhbGxGcmFtZSk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRT
aWRlU3RhdGU+IHNpZGVTdGF0ZSA9IHZtLmZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRlKGNhbGxG
cmFtZSk7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gc2lkZVN0YXRlLT5ieXRl
Y29kZUluZGV4OworICAgIGF1dG8gcGMgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5
dGVjb2RlSW5kZXgpOworCisgICAgYXV0byBvcGNvZGUgPSBwYy0+b3Bjb2RlSUQoKTsKKyAgICBz
d2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOiB7CisgICAgICAgIGNh
bGxGcmFtZS0+dW5jaGVja2VkUihwYy0+YXM8T3BDYWxsVmFyYXJncz4oKS5tX2RzdCkgPSBKU1Zh
bHVlOjpkZWNvZGUocmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ugb3Bf
Y29uc3RydWN0X3ZhcmFyZ3M6IHsKKyAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKHBjLT5h
czxPcENvbnN0cnVjdFZhcmFyZ3M+KCkubV9kc3QpID0gSlNWYWx1ZTo6ZGVjb2RlKHJlc3VsdCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvLyBvcF90YWlsX2NhbGxfdmFyYXJncyBzaG91
bGQgbmV2ZXIgcmV0dXJuIGlmIHRoZSB0aGluZyBpdCB3YXMgY2FsbGluZyB3YXMgaW5saW5lZC4K
KyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZGlzcGF0Y2hUb05leHRJbnN0cnVjdGlv
bihjb2RlQmxvY2ssIHBjKTsKK30KKworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgc2xv
d19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEVuY29kZWRK
U1ZhbHVlIC8qIG5lZWRlZCBmb3IgY0NhbGwyIGluIENMb29wICovKQoreworICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICBWTSYgdm0gPSBjb2Rl
QmxvY2stPnZtKCk7CisgICAgU2xvd1BhdGhGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFt
ZSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7CisK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IHNpZGVTdGF0
ZSA9IHZtLmZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRlKGNhbGxGcmFtZSk7CisgICAgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4ID0gc2lkZVN0YXRlLT5ieXRlY29kZUluZGV4OworICAgIEFT
U0VSVChieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSk7CisKKyAgICBhdXRvIHBjID0gY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KTsKKworICAgIGF1dG8gb3Bjb2Rl
ID0gcGMtPm9wY29kZUlEKCk7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIG9wX2Nh
bGxfdmFyYXJnczoKKyAgICAgICAgaGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQodm0sIGNhbGxGcmFt
ZSwgZ2xvYmFsT2JqZWN0LCBwYy0+YXM8T3BDYWxsVmFyYXJncz4oKSwgKnNpZGVTdGF0ZS5nZXQo
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6CisgICAg
ICAgIGhhbmRsZVZhcmFyZ3NDaGVja3BvaW50KHZtLCBjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwg
cGMtPmFzPE9wQ29uc3RydWN0VmFyYXJncz4oKSwgKnNpZGVTdGF0ZS5nZXQoKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIEFTU0VSVF9X
SVRIX01FU1NBR0UocGMubmV4dCgpLT5vcGNvZGVJRCgpID09IG9wX3JldCB8fCBwYy5uZXh0KCkt
Pm9wY29kZUlEKCkgPT0gb3Bfam1wLCAiV2Ugc3Ryb25nbHkgYXNzdW1lIGFsbCB0YWlsIGNhbGxz
IGFyZSBmb2xsb3dlZCBieSBhbiBvcF9yZXQgKG9yIHNvbWV0aW1lcyBhIGptcCB0byBhIHJldCku
Iik7CisgICAgICAgIGhhbmRsZVZhcmFyZ3NDaGVja3BvaW50KHZtLCBjYWxsRnJhbWUsIGdsb2Jh
bE9iamVjdCwgcGMtPmFzPE9wVGFpbENhbGxWYXJhcmdzPigpLCAqc2lkZVN0YXRlLmdldCgpKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChyZXR1cm5Ub1Ro
cm93KHZtKSwgMCk7CisKKyAgICByZXR1cm4gZGlzcGF0Y2hUb05leHRJbnN0cnVjdGlvbihjb2Rl
QmxvY2ssIHBjKTsKK30KKwogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdGhy
b3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IoVk0qIHZtLCBQcm90b0NhbGxGcmFtZSogcHJvdG9GcmFt
ZSkKIHsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHZtLT50b3BDYWxsRnJhbWU7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKLQogICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBudWxscHRyOwogICAgIGlmIChjYWxsRnJhbWUpCiAgICAgICAg
IGdsb2JhbE9iamVjdCA9IGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgqdm0pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAppbmRleCAyZmYyOGIw
MDZiYzIyMzMzMGNjNjc4NjVhMTY3OTRhOTBlN2U3YWFlLi43Yzc1ZGIzYmY0OTlhNDRkNTBhZGI5
MDE4Y2YxZTZlOWRkYTUwNWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRTbG93UGF0aHMuaApAQCAtMTM2LDYgKzEzNiw4IEBAIExMSU5UX1NMT1dfUEFUSF9ISURERU5f
REVDTChzbG93X3BhdGhfc3VwZXJfc2FtcGxlcl9iZWdpbik7CiBMTElOVF9TTE9XX1BBVEhfSElE
REVOX0RFQ0woc2xvd19wYXRoX3N1cGVyX3NhbXBsZXJfZW5kKTsKIExMSU5UX1NMT1dfUEFUSF9I
SURERU5fREVDTChzbG93X3BhdGhfb3V0X29mX2xpbmVfanVtcF90YXJnZXQpOwogZXh0ZXJuICJD
IiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IoVk0q
LCBQcm90b0NhbGxGcmFtZSopIFdURl9JTlRFUk5BTDsKK2V4dGVybiAiQyIgU2xvd1BhdGhSZXR1
cm5UeXBlIHNsb3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0KENhbGxGcmFtZSogY2FsbEZyYW1l
LCBFbmNvZGVkSlNWYWx1ZSB1bnVzZWQpIFdURl9JTlRFUk5BTDsKK2V4dGVybiAiQyIgU2xvd1Bh
dGhSZXR1cm5UeXBlIHNsb3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9j
YWxsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBFbmNvZGVkSlNWYWx1ZSBjYWxsUmVzdWx0KSBXVEZf
SU5URVJOQUw7CiAjaWYgRU5BQkxFKENfTE9PUCkKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5U
eXBlIGxsaW50X3N0YWNrX2NoZWNrX2F0X3ZtX2VudHJ5KFZNKiwgUmVnaXN0ZXIqKSBXVEZfSU5U
RVJOQUw7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQppbmRleCBhNzMyNTliOWUwMWU1ZmQ1MmFiOGU4NzlmNDU2YjQ3
MzVjYzNkNDE4Li40ZjdlMzg3ZTU5ZGI2YTdjMmMyYzg1NTY5NDQ1MzE0OTU2YmE1YWMyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtCkBAIC0xMTE4LDcgKzExMTgsNyBAQCBtYWNybyBnZXR0ZXJTZXR0ZXJPU1JFeGl0UmV0dXJu
UG9pbnQob3BOYW1lLCBzaXplKQogICAgIGRlZmluZU9TUkV4aXRSZXR1cm5MYWJlbChvcE5hbWUs
IHNpemUpCiAKICAgICByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKLSAgICBsb2FkaSBB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIFRhZ09mZnNldFtjZnJdLCBQQworICAgIGxvYWRp
IExMSW50UmV0dXJuUENbY2ZyXSwgUEMKIGVuZAogCiBtYWNybyBhcnJheVByb2ZpbGUob2Zmc2V0
LCBjZWxsQW5kSW5kZXhpbmdUeXBlLCBtZXRhZGF0YSwgc2NyYXRjaCkKQEAgLTE4NjksMTMgKzE4
NjksMTcgQEAgZW5kKQogY2FsbE9wKGNvbnN0cnVjdCwgT3BDb25zdHJ1Y3QsIHByZXBhcmVGb3JS
ZWd1bGFyQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKSBlbmQpCiAKIAotbWFjcm8gZG9DYWxs
VmFyYXJncyhvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNoLCBmcmFtZVNs
b3dQYXRoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCi0gICAgY2FsbFNsb3dQYXRoKGZyYW1lU2xv
d1BhdGgpCittYWNybyBicmFuY2hJZkV4Y2VwdGlvbihleGNlcHRpb25UYXJnZXQpCiAgICAgbG9h
ZHAgQ29kZUJsb2NrW2Nmcl0sIHQzCiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX3ZtW3QzXSwgdDMK
ICAgICBidHB6IFZNOjptX2V4Y2VwdGlvblt0M10sIC5ub0V4Y2VwdGlvbgotICAgIGptcCBfbGxp
bnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZQotLm5vRXhjZXB0aW9uOgorICAgIGpt
cCBleGNlcHRpb25UYXJnZXQKKy5ub0V4Y2VwdGlvbjogICAgCitlbmQKKworbWFjcm8gZG9DYWxs
VmFyYXJncyhvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNoLCBmcmFtZVNs
b3dQYXRoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCisgICAgY2FsbFNsb3dQYXRoKGZyYW1lU2xv
d1BhdGgpCisgICAgYnJhbmNoSWZFeGNlcHRpb24oX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRo
X3RyYW1wb2xpbmUpCiAgICAgIyBjYWxsZWVGcmFtZSBpbiByMQogICAgIGlmIEpTVkFMVUU2NAog
ICAgICAgICBtb3ZlIHIxLCBzcApAQCAtMjAzMCw2ICsyMDM0LDQwIEBAIG9wKGxsaW50X2ludGVy
bmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lLCBtYWNybyAoKQogZW5kKQogCiAKK29w
KGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZSwgbWFjcm8g
KCkKKyAgICBpZiBKU1ZBTFVFNjQgYW5kIG5vdCAoQ19MT09QIG9yIENfTE9PUF9XSU4pCisgICAg
ICAgIHJlc3RvcmVTdGFja1BvaW50ZXJBZnRlckNhbGwoKQorCisgICAgICAgICMgTWFrZSBzdXJl
IHdlIG1vdmUgcjAgdG8gYTEgZmlyc3Qgc2luY2UgcjAgbWlnaHQgYmUgdGhlIHNhbWUgYXMgYTAs
IGZvciBpbnN0YW5jZSwgb24gYXJtLgorICAgICAgICBtb3ZlIHIwLCBhMQorICAgICAgICBtb3Zl
IGNmciwgYTAKKyAgICAgICAgIyBXZSBkb24ndCBjYWxsIHNhdmVTdGF0ZUZvckNDYWxsKCkgYmVj
YXVzZSB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBieXRlY29kZUluZGV4IGZyb20gb3VyIHNpZGUg
c3RhdGUuCisgICAgICAgIGNDYWxsMihfc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJv
bV9pbmxpbmVkX2NhbGwpCisgICAgICAgIHJlc3RvcmVTdGF0ZUFmdGVyQ0NhbGwoKQorICAgICAg
ICBicmFuY2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGlu
ZSkKKyAgICAgICAgam1wIHIxLCBKU0VudHJ5UHRyVGFnCisgICAgZWxzZQorICAgICAgICBub3RT
dXBwb3J0ZWQoKQorICAgIGVuZAorZW5kKQorCitvcChjaGVja3BvaW50X29zcl9leGl0X3RyYW1w
b2xpbmUsIG1hY3JvICgpCisgICAgIyBGSVhNRTogV2UgY2FuIHByb2JhYmx5IGRpc3BhdGNoIHRv
IHRoZSBjaGVja3BvaW50IGhhbmRsZXIgZGlyZWN0bHkgYnV0IHRoaXMgd2FzIGVhc2llciAKKyAg
ICAjIGFuZCBwcm9iYWJseSBkb2Vzbid0IG1hdHRlciBmb3IgcGVyZm9ybWFuY2UuCisgICAgaWYg
SlNWQUxVRTY0IGFuZCBub3QgKENfTE9PUCBvciBDX0xPT1BfV0lOKQorICAgICAgICByZXN0b3Jl
U3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKKworICAgICAgICBtb3ZlIGNmciwgYTAKKyAgICAgICAg
IyBXZSBkb24ndCBjYWxsIHNhdmVTdGF0ZUZvckNDYWxsKCkgYmVjYXVzZSB3ZSBhcmUgZ29pbmcg
dG8gdXNlIHRoZSBieXRlY29kZUluZGV4IGZyb20gb3VyIHNpZGUgc3RhdGUuCisgICAgICAgIGND
YWxsMihfc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQpCisgICAgICAgIHJlc3RvcmVTdGF0
ZUFmdGVyQ0NhbGwoKQorICAgICAgICBicmFuY2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3dfZnJv
bV9zbG93X3BhdGhfdHJhbXBvbGluZSkKKyAgICAgICAgam1wIHIxLCBKU0VudHJ5UHRyVGFnCisg
ICAgZWxzZQorICAgICAgICBub3RTdXBwb3J0ZWQoKQorICAgIGVuZAorZW5kKQorCiAjIExhc3Rs
eSwgbWFrZSBzdXJlIHRoYXQgd2UgY2FuIGxpbmsgZXZlbiB0aG91Z2ggd2UgZG9uJ3Qgc3VwcG9y
dCBhbGwgb3Bjb2Rlcy4KICMgVGhlc2Ugb3Bjb2RlcyBzaG91bGQgbmV2ZXIgYXJpc2Ugd2hlbiB1
c2luZyBMTEludCBvciBlaXRoZXIgSklULiBXZSBhc3NlcnQKICMgYXMgbXVjaC4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQu
YXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82
NC5hc20KaW5kZXggOTNjMjkwMjViMGQ5MzA1ZDk5NTcxMDNlMTY1YjdhYTg5MTRjYmIxZC4uMDdj
MmVlOWQyZGYwZGVhYzkzZTNiNjJmNmM2MGUzYTVkYjcyN2QxYyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20K
QEAgLTE0Miw3ICsxNDIsNyBAQCBlbmQKIG1hY3JvIGNhbGxTbG93UGF0aChzbG93UGF0aCkKICAg
ICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCiAgICAgbW92ZSBjZnIsIGEwCi0gICAgbW92ZSBQQywg
YTEKKyAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCiAgICAgY0NhbGwyKHNsb3dQYXRoKQogICAg
IHJlc3RvcmVTdGF0ZUFmdGVyQ0NhbGwoKQogZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbSBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCmluZGV4IDBmN2U2YzNjNTcx
MTc3YmFiZjNjOTRlNzE4ZGFmMzk1MjUzYzk5MGUuLmI2ZWU5OWUzNjNhZjFmZmQ0MWI5MTI1NDRj
NTBkZTkyZjFhNGYyZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCkBAIC0yMyw2ICsyMywxMyBAQAogCiAKICMgVXRp
bGl0aWVzLgorbWFjcm8gc3RvcmVQQygpCisgICAgc3RvcmVpIFBDLCBMTEludFJldHVyblBDW2Nm
cl0KK2VuZAorCittYWNybyBsb2FkUEMoKQorICAgIGxvYWRpIExMSW50UmV0dXJuUENbY2ZyXSwg
UEMKK2VuZAogCiBtYWNybyBnZXR1T3BlcmFuZE5hcnJvdyhvcGNvZGVTdHJ1Y3QsIGZpZWxkTmFt
ZSwgZHN0KQogICAgIGxvYWRiIGNvbnN0ZXhwciAlb3Bjb2RlU3RydWN0JV8lZmllbGROYW1lJV9p
bmRleCArIE9wY29kZUlETmFycm93U2l6ZVtQQiwgUEMsIDFdLCBkc3QKQEAgLTc0LDcgKzgxLDcg
QEAgZW5kCiAKICMgQWZ0ZXIgY2FsbGluZywgY2FsbGluZyBieXRlY29kZSBpcyBjbGFpbWluZyBp
bnB1dCByZWdpc3RlcnMgYXJlIG5vdCB1c2VkLgogbWFjcm8gZGlzcGF0Y2hBZnRlckNhbGwoc2l6
ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCkKLSAgICBsb2FkaSBBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyArIFRhZ09mZnNldFtjZnJdLCBQQworICAgIGxvYWRQQygpCiAgICAgbG9hZHAgQ29k
ZUJsb2NrW2Nmcl0sIFBCCiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2luc3RydWN0aW9uc1Jhd1Bv
aW50ZXJbUEJdLCBQQgogICAgIGdldChzaXplLCBvcGNvZGVTdHJ1Y3QsIG1fZHN0LCB0MSkKQEAg
LTM3Miw3ICszNzksNyBAQCBlbmQKIAogIyBDYWxsIGEgc2xvdyBwYXRoIGZvciBjYWxsIG9wY29k
ZXMuCiBtYWNybyBjYWxsQ2FsbFNsb3dQYXRoKHNsb3dQYXRoLCBhY3Rpb24pCi0gICAgc3RvcmVp
IFBDLCBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIFRhZ09mZnNldFtjZnJdCisgICAgc3Rv
cmVQQygpCiAgICAgcHJlcGFyZVN0YXRlRm9yQ0NhbGwoKQogICAgIG1vdmUgY2ZyLCBhMAogICAg
IG1vdmUgUEMsIGExCkBAIC0zODEsMjAgKzM4OCwyMCBAQCBtYWNybyBjYWxsQ2FsbFNsb3dQYXRo
KHNsb3dQYXRoLCBhY3Rpb24pCiBlbmQKIAogbWFjcm8gY2FsbFRyYXBIYW5kbGVyKHRocm93SGFu
ZGxlcikKLSAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgVGFnT2Zm
c2V0W2Nmcl0KKyAgICBzdG9yZVBDKCkKICAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCiAgICAg
bW92ZSBjZnIsIGEwCiAgICAgbW92ZSBQQywgYTEKICAgICBjQ2FsbDIoX2xsaW50X3Nsb3dfcGF0
aF9oYW5kbGVfdHJhcHMpCiAgICAgYnRwbnogcjAsIHRocm93SGFuZGxlcgotICAgIGxvYWRpIEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCisgICAgbG9hZGkg
TExJbnRSZXR1cm5QQ1tjZnJdLCBQQwogZW5kCiAKIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JM
b29wKCkKICAgICBjaGVja1N3aXRjaFRvSklUKAogICAgICAgICAxLAogICAgICAgICBtYWNybygp
Ci0gICAgICAgICAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgVGFn
T2Zmc2V0W2Nmcl0KKyAgICAgICAgICAgIHN0b3JlUEMoKQogICAgICAgICAgICAgcHJlcGFyZVN0
YXRlRm9yQ0NhbGwoKQogICAgICAgICAgICAgbW92ZSBjZnIsIGEwCiAgICAgICAgICAgICBtb3Zl
IFBDLCBhMQpAQCAtNDAzLDcgKzQxMCw3IEBAIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29w
KCkKICAgICAgICAgICAgIG1vdmUgcjEsIHNwCiAgICAgICAgICAgICBqbXAgcjAsIEpTRW50cnlQ
dHJUYWcKICAgICAgICAgLnJlY292ZXI6Ci0gICAgICAgICAgICBsb2FkaSBBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyArIFRhZ09mZnNldFtjZnJdLCBQQworICAgICAgICAgICAgbG9hZFBDKCkK
ICAgICAgICAgZW5kKQogZW5kCiAKQEAgLTIwNDcsNyArMjA1NCw3IEBAIG1hY3JvIGNvbW1vbkNh
bGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJv
bG9ndWUpCiAgICAgICAgIGFkZHAgY2ZyLCB0MwogICAgICAgICBzdG9yZXEgdDIsIENhbGxlZVt0
M10KICAgICAgICAgZ2V0dShzaXplLCBvcGNvZGVTdHJ1Y3QsIG1fYXJnYywgdDIpCi0gICAgICAg
IHN0b3JlaSBQQywgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBUYWdPZmZzZXRbY2ZyXQor
ICAgICAgICBzdG9yZVBDKCkKICAgICAgICAgc3RvcmVpIHQyLCBBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyArIFBheWxvYWRPZmZzZXRbdDNdCiAgICAgICAgIG1vdmUgdDMsIHNwCiAgICAgICAg
IHByZXBhcmVDYWxsKCVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9t
YWNoaW5lQ29kZVRhcmdldFt0NV0sIHQyLCB0MywgdDQsIEpTRW50cnlQdHJUYWcpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgKaW5kZXggZmFkYTNkNjlkYTU4OWY5N2I3MzYz
ZTMyYTkxOTQ1ZDdiYWU4MGRkNS4uOTQ5YjliMDkxYTlmNWEzNWNmMDVjZTRjYWZlMjc0Mjg0MzBm
MmE2ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaApAQCAtMTMzLDYg
KzEzMywxNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIG92ZXJmbG93Q2hlY2tOb3ROZWVkZWQoKSB7
IGNsZWFyTmVlZHNPdmVyZmxvd0NoZWNrKCk7IH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+CisgICAgdm9pZCBmaWxsKHNpemVfdCBjb3VudCwgY29uc3QgRnVuY3RvciYgZnVuYykK
KyAgICB7CisgICAgICAgIEFTU0VSVCghbV9zaXplKTsKKyAgICAgICAgZW5zdXJlQ2FwYWNpdHko
Y291bnQpOworICAgICAgICBpZiAoQmFzZTo6aGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBtX3NpemUgPSBjb3VudDsKKyAgICAgICAgZnVuYyhyZWludGVycHJl
dF9jYXN0PEpTVmFsdWUqPigmc2xvdEZvcigwKSkpOworICAgIH0KKwogcHJpdmF0ZToKICAgICB2
b2lkIGV4cGFuZENhcGFjaXR5KCk7CiAgICAgdm9pZCBleHBhbmRDYXBhY2l0eShpbnQgbmV3Q2Fw
YWNpdHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVk
VHlwZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3Bw
CmluZGV4IGIzYzczY2ZmMjg0MWRjODkyNTExOTdhZTA3ZTI0MzMxYjZmMGU5MGMuLmE4MjY2MWEw
NmI1OTI0NjFmZjJhNjdmNmNmNDBlMmIxOTZmNTAxOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKQEAgLTE3OTQsNiArMTc5NCw3IEBAIHB1Ymxp
YzoKICAgICB1bnNpZ25lZCBuZWVkc0NsYXNzRmllbGRJbml0aWFsaXplcigpIGNvbnN0IHsgcmV0
dXJuIG1fbmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXI7IH0KICAgICB1bnNpZ25lZCBldmFsQ29u
dGV4dFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2V2YWxDb250ZXh0VHlwZTsgfQogICAgIHVuc2ln
bmVkIGhhc1RhaWxDYWxscygpIGNvbnN0IHsgcmV0dXJuIG1faGFzVGFpbENhbGxzOyB9CisgICAg
dW5zaWduZWQgaGFzQ2hlY2twb2ludHMoKSBjb25zdCB7IHJldHVybiBtX2hhc0NoZWNrcG9pbnRz
OyB9CiAgICAgdW5zaWduZWQgbGluZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQ291bnQ7
IH0KICAgICB1bnNpZ25lZCBlbmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX2VuZENvbHVtbjsg
fQogCkBAIC0xODI3LDYgKzE4MjgsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fZXZhbENv
bnRleHRUeXBlIDogMjsKICAgICB1bnNpZ25lZCBtX2hhc1RhaWxDYWxscyA6IDE7CiAgICAgdW5z
aWduZWQgbV9jb2RlVHlwZSA6IDI7CisgICAgdW5zaWduZWQgbV9oYXNDaGVja3BvaW50cyA6IDE7
CiAKICAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsKICAgICBTb3VyY2VQYXJzZU1vZGUgbV9w
YXJzZU1vZGU7CkBAIC0yMDI1LDYgKzIwMjcsNyBAQCBBTFdBWVNfSU5MSU5FIFVubGlua2VkQ29k
ZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhEZWNvZGVyJiBkZWNvZGVyLCBTdHJ1Y3R1cmUqCiAK
ICAgICAsIG1fZGlkT3B0aW1pemUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KE1peGVkVHJpU3RhdGUp
KQogICAgICwgbV9hZ2UoMCkKKyAgICAsIG1faGFzQ2hlY2twb2ludHMoY2FjaGVkQ29kZUJsb2Nr
Lmhhc0NoZWNrcG9pbnRzKCkpCiAKICAgICAsIG1fZmVhdHVyZXMoY2FjaGVkQ29kZUJsb2NrLmZl
YXR1cmVzKCkpCiAgICAgLCBtX3BhcnNlTW9kZShjYWNoZWRDb2RlQmxvY2sucGFyc2VNb2RlKCkp
CkBAIC0yMjE1LDYgKzIyMTgsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgQ2FjaGVkQ29kZUJsb2Nr
PENvZGVCbG9ja1R5cGU+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29ucwogICAgIG1fcGFy
c2VNb2RlID0gY29kZUJsb2NrLm1fcGFyc2VNb2RlOwogICAgIG1fY29kZUdlbmVyYXRpb25Nb2Rl
ID0gY29kZUJsb2NrLm1fY29kZUdlbmVyYXRpb25Nb2RlOwogICAgIG1fY29kZVR5cGUgPSBjb2Rl
QmxvY2subV9jb2RlVHlwZTsKKyAgICBtX2hhc0NoZWNrcG9pbnRzID0gY29kZUJsb2NrLm1faGFz
Q2hlY2twb2ludHM7CiAKICAgICBtX21ldGFkYXRhLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2su
bV9tZXRhZGF0YS5nZXQoKSk7CiAgICAgbV9yYXJlRGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJs
b2NrLm1fcmFyZURhdGEuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKaW5kZXggODc1YjMwMjdiMmM4Y2U4NzZjOThhMjM1NmI0
NzhjNmZlZTMwM2Y2MC4uMmEzM2JkMzM1NmRmY2E5NDQ0YWEwYmVmMmM3OGVlNjliMmM3MDdkNiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMu
Y3BwCkBAIC05OCw4ICs5OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIEJFR0lOX05PX1NFVF9Q
QygpOyAgICAgICAgICAgICAgICAgICAgXAogICAgIFNFVF9QQ19GT1JfU1RVQlMoKQogCi0jZGVm
aW5lIEdFVChvcGVyYW5kKSAoY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQub2Zmc2V0KCkp
KQotI2RlZmluZSBHRVRfQyhvcGVyYW5kKSAoY2FsbEZyYW1lLT5yKG9wZXJhbmQub2Zmc2V0KCkp
KQorI2RlZmluZSBHRVQob3BlcmFuZCkgKGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kKSkK
KyNkZWZpbmUgR0VUX0Mob3BlcmFuZCkgKGNhbGxGcmFtZS0+cihvcGVyYW5kKSkKIAogI2RlZmlu
ZSBSRVRVUk5fVFdPKGZpcnN0LCBzZWNvbmQpIGRvIHsgICAgICAgXAogICAgICAgICByZXR1cm4g
ZW5jb2RlUmVzdWx0KGZpcnN0LCBzZWNvbmQpOyAgICAgICAgXApAQCAtMTE1OSw4ICsxMTU5LDcg
QEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50KQog
ewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcENyZWF0ZUxleGlj
YWxFbnZpcm9ubWVudD4oKTsKLSAgICBpbnQgc2NvcGVSZWcgPSBieXRlY29kZS5tX3Njb3BlLm9m
ZnNldCgpOwotICAgIEpTU2NvcGUqIGN1cnJlbnRTY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
UihzY29wZVJlZykuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogY3VycmVudFNjb3Bl
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29w
ZSgpOwogICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+
KEdFVF9DKGJ5dGVjb2RlLm1fc3ltYm9sVGFibGUpLmpzVmFsdWUoKSk7CiAgICAgSlNWYWx1ZSBp
bml0aWFsVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2luaXRpYWxWYWx1ZSkuanNWYWx1ZSgpOwog
ICAgIEFTU0VSVChpbml0aWFsVmFsdWUgPT0ganNVbmRlZmluZWQoKSB8fCBpbml0aWFsVmFsdWUg
PT0ganNURFpWYWx1ZSgpKTsKQEAgLTExNzUsOCArMTE3NCw3IEBAIFNMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9wdXNoX3dpdGhfc2NvcGUpCiAgICAgSlNPYmplY3QqIG5ld1Njb3BlID0gR0VUX0Mo
Ynl0ZWNvZGUubV9uZXdTY29wZSkuanNWYWx1ZSgpLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAg
ICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKLSAgICBpbnQgc2NvcGVSZWcgPSBieXRlY29kZS5tX2N1
cnJlbnRTY29wZS5vZmZzZXQoKTsKLSAgICBKU1Njb3BlKiBjdXJyZW50U2NvcGUgPSBjYWxsRnJh
bWUtPnVuY2hlY2tlZFIoc2NvcGVSZWcpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpTU2NvcGUq
IGN1cnJlbnRTY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX2N1cnJlbnRT
Y29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgUkVUVVJOKEpTV2l0aFNjb3BlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgY3VycmVudFNjb3BlLCBuZXdTY29wZSkpOwogfQogCkBAIC0xMTg1
LDcgKzExODMsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcmVzb2x2ZV9zY29wZV9mb3Jf
aG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWwpCiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVj
b2RlID0gcGMtPmFzPE9wUmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbD4oKTsK
ICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KTsKLSAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVj
a2VkUihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBK
U1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5S
ZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBKU1ZhbHVlIHJlc29sdmVkU2NvcGUgPSBKU1Njb3BlOjpy
ZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsKGdsb2JhbE9iamVjdCwgc2NvcGUs
IGlkZW50KTsKIAogICAgIENIRUNLX0VYQ0VQVElPTigpOwpAQCAtMTE5OSw3ICsxMTk3LDcgQEAg
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfc2NvcGUpCiAgICAgYXV0byBieXRlY29k
ZSA9IHBjLT5hczxPcFJlc29sdmVTY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBj
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOwotICAgIEpTU2NvcGUqIHNjb3Bl
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLlJlZ2lz
dGVyOjpzY29wZSgpOworICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRS
KGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIEpTT2JqZWN0KiByZXNv
bHZlZFNjb3BlID0gSlNTY29wZTo6cmVzb2x2ZShnbG9iYWxPYmplY3QsIHNjb3BlLCBpZGVudCk7
CiAgICAgLy8gUHJveHkgY2FuIHRocm93IGFuIGVycm9yIGhlcmUsIGUuZy4gUHJveHkgaW4gd2l0
aCBzdGF0ZW1lbnQncyBAdW5zY29wYWJsZXMuCiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CkBAIC0x
NDQ0LDcgKzE0NDIsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2FycmF5X2J1ZmZl
cikKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BOZXdBcnJh
eUJ1ZmZlcj4oKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRl
eChieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRlcmZseS5vZmZzZXQoKSkpOworICAgIEFTU0VSVChi
eXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRlcmZseS5pc0NvbnN0YW50KCkpOwogICAgIEpTSW1tdXRh
YmxlQnV0dGVyZmx5KiBpbW11dGFibGVCdXR0ZXJmbHkgPSBiaXR3aXNlX2Nhc3Q8SlNJbW11dGFi
bGVCdXR0ZXJmbHkqPihHRVRfQyhieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRlcmZseSkuanNWYWx1
ZSgpLmFzQ2VsbCgpKTsKICAgICBhdXRvJiBwcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEoY29k
ZUJsb2NrKS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGU7CiAKQEAgLTE0NjMsNyArMTQ2MSw3IEBA
IFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfYXJyYXlfYnVmZmVyKQogICAgICAgICAvLyBX
ZSBhbHNvIGNhbm5vdCBhbGxvY2F0ZSBhIG5ldyBidXR0ZXJmbHkgZnJvbSBjb21waWxhdGlvbiB0
aHJlYWRzIHNpbmNlIGl0J3MgaW52YWxpZCB0byBhbGxvY2F0ZSBjZWxscyBmcm9tCiAgICAgICAg
IC8vIGEgY29tcGlsYXRpb24gdGhyZWFkLgogICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgp
OwotICAgICAgICBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoYnl0ZWNvZGUubV9pbW11dGFi
bGVCdXR0ZXJmbHkub2Zmc2V0KCkpLnNldCh2bSwgY29kZUJsb2NrLCBpbW11dGFibGVCdXR0ZXJm
bHkpOworICAgICAgICBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoYnl0ZWNvZGUubV9pbW11
dGFibGVCdXR0ZXJmbHkpLnNldCh2bSwgY29kZUJsb2NrLCBpbW11dGFibGVCdXR0ZXJmbHkpOwog
ICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcAppbmRleCA0YmQxOTJhNmM3N2Vm
YzAyNmU3YTk1YTViN2JlYzcxMjQzNjc3ZTc4Li40N2IyNDc0MThjYTg4ZWZkMWI3OGU2MzExYjY3
NWQxZWZhNWE1ZmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b25zdHJ1Y3REYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25z
dHJ1Y3REYXRhLmNwcApAQCAtMzUsNiArMzUsMTEgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBKU09i
amVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgY29u
c3RydWN0b3JPYmplY3QsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGNvbnN0IGNoYXIqIGVycm9yTWVz
c2FnZSkKK3sKKyAgICByZXR1cm4gY29uc3RydWN0KGdsb2JhbE9iamVjdCwgY29uc3RydWN0b3JP
YmplY3QsIGNvbnN0cnVjdG9yT2JqZWN0LCBhcmdzLCBlcnJvck1lc3NhZ2UpOworfQorCitKU09i
amVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgY29u
c3RydWN0b3JPYmplY3QsIEpTVmFsdWUgbmV3VGFyZ2V0LCBjb25zdCBBcmdMaXN0JiBhcmdzLCBj
b25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTQ2LDEw
ICs1MSw5IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgY29uCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY29uc3RydWN0KGdsb2Jh
bE9iamVjdCwgY29uc3RydWN0b3JPYmplY3QsIGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEs
IGFyZ3MsIGNvbnN0cnVjdG9yT2JqZWN0KSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rvck9iamVjdCwgY29uc3RydWN0VHlw
ZSwgY29uc3RydWN0RGF0YSwgYXJncywgbmV3VGFyZ2V0KSk7ICAKIH0KIAotCiBKU09iamVjdCog
Y29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgY29uc3RydWN0
b3JPYmplY3QsIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3RydWN0RGF0
YSYgY29uc3RydWN0RGF0YSwgY29uc3QgQXJnTGlzdCYgYXJncywgSlNWYWx1ZSBuZXdUYXJnZXQp
CiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5oCmluZGV4IGQwYWUwMGJhMTFkN2NlZTI0ZGZm
YWU5MTkxMTk2N2UwMmFhNmVkZTMuLmZiNjE5NzRhN2RiMzljNDkxZjlmOTNiYWViNmNhYzEyNjIx
ZjNiYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVj
dERhdGEuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRh
LmgKQEAgLTYwLDYgKzYwLDggQEAgc3RydWN0IENvbnN0cnVjdERhdGEgewogCiAvLyBDb252ZW5p
ZW5jZSB3cmFwcGVyIHNvIHlvdSBkb24ndCBuZWVkIHRvIGRlYWwgd2l0aCBDYWxsRGF0YSBhbmQg
Q2FsbFR5cGUgdW5sZXNzIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZW0uCiBKU19FWFBPUlRfUFJJ
VkFURSBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBmdW5jdGlv
bk9iamVjdCwgY29uc3QgQXJnTGlzdCYsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSk7CitKU19F
WFBPUlRfUFJJVkFURSBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSBmdW5jdGlvbk9iamVjdCwgSlNWYWx1ZSBuZXdUYXJnZXQsIGNvbnN0IEFyZ0xpc3QmLCBjb25z
dCBjaGFyKiBlcnJvck1lc3NhZ2UpOworCiBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY29u
c3RydWN0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBjb25zdHJ1Y3RvciwgQ29uc3RydWN0VHlw
ZSwgY29uc3QgQ29uc3RydWN0RGF0YSYsIGNvbnN0IEFyZ0xpc3QmLCBKU1ZhbHVlIG5ld1Rhcmdl
dCk7CiAKIEFMV0FZU19JTkxJTkUgSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0LCBDb25zdHJ1Y3RUeXBlIGNv
bnN0cnVjdFR5cGUsIGNvbnN0IENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
aXJlY3RBcmd1bWVudHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0
QXJndW1lbnRzLmNwcAppbmRleCBhNjc5NWRhMWVkY2NmMzEwMjJhYzJkZDlhZWZhZmQ0M2EwMWE1
Yzg1Li40YjM0NjFkZTIyZTc2ZjdkYmUzMTgzOTQyNDVhOTNjNTc1MDlmMzg3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAKQEAgLTEz
NywyMCArMTM3LDE5IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRzOjp1bm1hcEFyZ3VtZW50KFZNJiB2
bSwgdW5zaWduZWQgaW5kZXgpCiAgICAgbV9tYXBwZWRBcmd1bWVudHMuYXQoaW5kZXgsIGludGVy
bmFsTGVuZ3RoKCkpID0gdHJ1ZTsKIH0KIAotdm9pZCBEaXJlY3RBcmd1bWVudHM6OmNvcHlUb0Fy
Z3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKQordm9pZCBEaXJlY3RBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBpZiAoIW1fbWFwcGVkQXJndW1l
bnRzKSB7CiAgICAgICAgIHVuc2lnbmVkIGxpbWl0ID0gc3RkOjptaW4obGVuZ3RoICsgb2Zmc2V0
LCBtX2xlbmd0aCk7CiAgICAgICAgIHVuc2lnbmVkIGk7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBzdGFydCA9IGZpcnN0RWxlbWVudERlc3QgLSBvZmZzZXQ7CiAgICAgICAgIGZvciAoaSA9IG9m
ZnNldDsgaSA8IGxpbWl0OyArK2kpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoc3RhcnQgKyBp
KSA9IHN0b3JhZ2UoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaSAt
IG9mZnNldF0gPSBzdG9yYWdlKClbaV0uZ2V0KCk7CiAgICAgICAgIGZvciAoOyBpIDwgbGVuZ3Ro
OyArK2kpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoc3RhcnQgKyBpKSA9IGdldChnbG9iYWxP
YmplY3QsIGkpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IGdl
dChnbG9iYWxPYmplY3QsIGkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgR2VuZXJp
Y0FyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJz
dEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgR2VuZXJpY0FyZ3VtZW50czo6Y29w
eVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5n
dGgpOwogfQogCiB1bnNpZ25lZCBEaXJlY3RBcmd1bWVudHM6Om1hcHBlZEFyZ3VtZW50c1NpemUo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1l
bnRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaApp
bmRleCAwYTZiMWEwNjYwOTBlMmNhNWY1NmY1MGE5YzUzYTJjZmNlNzcyZTBhLi44ZDk2NDJhMmM5
NDA0MDgwYjkxM2FjMjcwY2QwMTNjMzllY2RhODE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaApAQCAtMTQ0LDcgKzE0NCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIEdlbmVyaWNBcmd1bWVudHM8RGlyZWN0QXJndW1lbnRzPjo6aXNN
b2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcihpbmRleCwgbV9sZW5ndGgpOwogICAgIH0KIAotICAg
IHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVh
bFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKTsKKyAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUq
IGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAog
ICAgIERFQ0xBUkVfSU5GTzsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0dlbmVyaWNBcmd1bWVudHMuaAppbmRleCBiMzFiNzBhYmQwMGNlZWFmNWViYjdlZTFkNDY3
ZGE0ODg3MGQ1MWMxLi4wNzRjMjE2MmQ4ZGExNjQ3MDZmNDAwNGJkYWIzZGFlZWIyNzJjYmJjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5o
CkBAIC01OSw3ICs1OSw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNldE1vZGlmaWVkQXJndW1l
bnREZXNjcmlwdG9yKFZNJiwgdW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAg
Ym9vbCBpc01vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKHVuc2lnbmVkIGluZGV4LCB1bnNpZ25l
ZCBsZW5ndGgpOwogCi0gICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBD
YWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpOwogCiAgICAgdXNpbmcgTW9kaWZpZWRBcmd1bWVudHNQdHIgPSBDYWdlZEJh
cnJpZXJQdHI8R2lnYWNhZ2U6OlByaW1pdGl2ZSwgYm9vbD47CiAgICAgTW9kaWZpZWRBcmd1bWVu
dHNQdHIgbV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAppbmRleCAy
MTgyYTYyYjEzMDM0M2FmNTY3MjE3MzYzYTNmNWMxYjg4NjE4MWZmLi5lMGFhYmY1ZjJlZTE4NWI3
ZDEzMzE2MDM3ZDhjMWQ4ODg0MjQ2ODUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKQEAgLTI5Nyw3ICsyOTcs
NyBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmlzTW9kaWZpZWRBcmd1bWVudERlc2Ny
aXB0b3IodW5zaWduZWQgaW5kZXgsIHVuc2lnbgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBl
Pgotdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3Rl
ciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3Zv
aWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0zMDUsOSArMzA1
LDkgQEAgdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEYKICAgICBUeXBlKiB0aGlzT2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8VHlwZSo+KHRoaXMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgewogICAgICAgICBpZiAodGhpc09iamVjdC0+aXNNYXBwZWRBcmd1bWVudChpICsg
b2Zmc2V0KSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkg
PSB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaSArIG9mZnNldCk7CisgICAgICAgICAgICBm
aXJzdEVsZW1lbnREZXN0W2ldID0gdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZz
ZXQpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1l
bnREZXN0ICsgaSkgPSBnZXQoZ2xvYmFsT2JqZWN0LCBpICsgb2Zmc2V0KTsKKyAgICAgICAgICAg
IGZpcnN0RWxlbWVudERlc3RbaV0gPSBnZXQoZ2xvYmFsT2JqZWN0LCBpICsgb2Zmc2V0KTsKICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIH0K
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCmluZGV4IDQ0
YzdlNTIwZjFjMGEyNDBhOGI2NjY1YTI3NGE1MTQ0NTkzODc2NjAuLjZkMDc1OTE3MTFlZWRiYzI4
ZTBlNGRhNzg0OTgyMmFiOGQ2NmY1ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuY3BwCkBAIC0xMjMwLDcgKzEyMzAsNyBAQCB2b2lkIEpTQXJyYXk6OmZpbGxBcmdM
aXN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBh
cgogICAgICAgICBhcmdzLmFwcGVuZChnZXQoZ2xvYmFsT2JqZWN0LCBpKSk7CiB9CiAKLXZvaWQg
SlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3Vt
ZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnRE
ZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwpAQCAtMTI2OSw3ICsxMjY5LDcgQEAgdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUKICAgICAg
ICAgICAgIGRvdWJsZSB2ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCkuYXQodGhpcywg
aSk7CiAgICAgICAgICAgICBpZiAodiAhPSB2KQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpIC0gb2Zmc2V0KSA9IEpT
VmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHYpOworICAgICAgICAgICAgZmlyc3RFbGVt
ZW50RGVzdFtpIC0gb2Zmc2V0XSA9IEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHYp
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEyOTQsMTEgKzEyOTQsMTEg
QEAgdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
JiB2ID0gdmVjdG9yW2ldOwogICAgICAgICBpZiAoIXYpCiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpIC0gb2Zmc2V0KSA9IHYuZ2V0
KCk7CisgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaSAtIG9mZnNldF0gPSB2LmdldCgpOwogICAg
IH0KICAgICAKICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGNhbGxGcmFt
ZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSAtIG9mZnNldCkgPSBnZXQoZ2xvYmFsT2JqZWN0LCBp
KTsKKyAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IGdldChnbG9iYWxPYmpl
Y3QsIGkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAg
IH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAppbmRleCAzMTc5NDlj
NTcyYTExYjc1YWRjMTgzYWM5ZTQxNDRmNjZjZjZhYjUwLi4zMTE2NWI1ZmY0OTI1NGNjMWE2YzQ3
OTAyYjc5MTBhYzRhN2Q5YmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5oCkBAIC0xNjMsNyArMTYzLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZmlsbEFyZ0xpc3QoSlNHbG9iYWxPYmplY3QqLCBNYXJrZWRBcmd1bWVudEJ1
ZmZlciYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xv
YmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3Qs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxl
bWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIEpTX0VY
UE9SVF9QUklWQVRFIGJvb2wgaXNJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUo
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFi
bGVCdXR0ZXJmbHkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFi
bGVCdXR0ZXJmbHkuY3BwCmluZGV4IGUzMmU5NDk3ZDQ3ODI5NTAzM2RhYTk5YTU5MzZkZWExOWEx
YzQ5YzAuLmU0OTA5NzU2MTZkYWQzOTExNDIzODJjOTkzZTc4ZDEyYzE5MTFjMmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZs
eS5jcHAKQEAgLTQ2LDEzICs0NiwxMyBAQCB2b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdmlzaXRv
ci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpLCBidXR0
ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKIH0KIAotdm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6
Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZp
cnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCkKK3ZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OmNvcHlUb0FyZ3VtZW50cyhKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkgewogICAgICAgICBpZiAoKGkgKyBvZmZzZXQpIDwgcHVibGljTGVuZ3RoKCkpCi0gICAg
ICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0gZ2V0KGkgKyBvZmZz
ZXQpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IGdldChpICsgb2Zmc2V0KTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3Qg
KyBpKSA9IGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0g
anNVbmRlZmluZWQoKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCmluZGV4IGFjYjY4NDgxOTFhMTkwMzUy
MmI5YjNlNGQwMGY5NjllNDBiNzgxNWEuLjA3ZTFhOGExMGMzY2RjNzExN2FjYTNkYzU0M2VkN2Rk
YjBkNDFmM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1t
dXRhYmxlQnV0dGVyZmx5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJ
bW11dGFibGVCdXR0ZXJmbHkuaApAQCAtMTQ3LDcgKzE0Nyw3IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIHZv
aWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJl
Z2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KTsKKyAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZp
cnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lLCBTdWJzcGFjZUFjY2Vzcz4KICAgICBzdGF0aWMgQ29tcGxldGVT
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTG9jay5jcHAKaW5kZXggYTZlYjBlYTVmNmFhZGViMzdkMjc3OTRmN2M5MTNmNjgxNjgzNDk3
ZS4uMTZhYTM2OWY0ODUwNzA2MWMwNjM2MTUxOGFlMTVkMmJjNjhmYjZkZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCkBAIC0yMDQsNiArMjA0LDcgQEAgdm9pZCBK
U0xvY2s6OndpbGxSZWxlYXNlTG9jaygpCiB7ICAgCiAgICAgUmVmUHRyPFZNPiB2bSA9IG1fdm07
CiAgICAgaWYgKHZtKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRSghdm0t
Pmhhc0NoZWNrcG9pbnRPU1JTaWRlU3RhdGUoKSwgIlJlbGVhc2luZyBKU0xvY2sgYnV0IHBlbmRp
bmcgY2hlY2twb2ludCBzaWRlIHN0YXRlIHN0aWxsIGF2YWlsYWJsZSIpOwogICAgICAgICB2bS0+
ZHJhaW5NaWNyb3Rhc2tzKCk7CiAKICAgICAgICAgaWYgKCF2bS0+dG9wQ2FsbEZyYW1lKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1
dGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4
ZWN1dGFibGUuY3BwCmluZGV4IGRiMDUyNTQ4ODI1MzM5YTZiMTMyYmE0ZTQ0MmIyMTFkNmRlMzdi
YTAuLjU5NjgwOGNhZmMwYjBmNGM4NDcwYmQ3NTllZDlmNDkxNmM2NjQ0ODUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZS5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIE1vZHVs
ZVByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE8KIAogICAg
IGV4ZWN1dGFibGUtPm1fdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLnNldChnbG9iYWxP
YmplY3QtPnZtKCksIGV4ZWN1dGFibGUsIHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGUpOwogCi0g
ICAgZXhlY3V0YWJsZS0+bV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlLnNldChnbG9iYWxP
YmplY3QtPnZtKCksIGV4ZWN1dGFibGUsIGpzQ2FzdDxTeW1ib2xUYWJsZSo+KHVubGlua2VkTW9k
dWxlUHJvZ3JhbUNvZGUtPmNvbnN0YW50UmVnaXN0ZXIodW5saW5rZWRNb2R1bGVQcm9ncmFtQ29k
ZS0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSku
Z2V0KCkpLT5jbG9uZVNjb3BlUGFydChnbG9iYWxPYmplY3QtPnZtKCkpKTsKKyAgICBleGVjdXRh
YmxlLT5tX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUuc2V0KGdsb2JhbE9iamVjdC0+dm0o
KSwgZXhlY3V0YWJsZSwganNDYXN0PFN5bWJvbFRhYmxlKj4odW5saW5rZWRNb2R1bGVQcm9ncmFt
Q29kZS0+Y29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIodW5saW5rZWRNb2R1bGVQcm9n
cmFtQ29kZS0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZz
ZXQoKSkpLmdldCgpKS0+Y2xvbmVTY29wZVBhcnQoZ2xvYmFsT2JqZWN0LT52bSgpKSk7CiAKICAg
ICByZXR1cm4gZXhlY3V0YWJsZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5jcHAKaW5kZXggMTc2Zjk5ZDQ5ZTk4MDFmYjczODFkMmFhZTE3YTFjYzBkNTZhYmFiYy4u
NzRjY2RlYjI3OTRjZTVmNGJhYTc3MTQxMDIzODgxNWY4NzYzMzAwZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKQEAgLTUwOSwxMSArNTA5LDkgQEAgc3RhdGlj
IHZvaWQgcmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygpCiAgICAgaWYgKE9wdGlvbnM6OnNvZnRS
ZXNlcnZlZFpvbmVTaXplKCkgPCBPcHRpb25zOjpyZXNlcnZlZFpvbmVTaXplKCkgKyBtaW5pbXVt
UmVzZXJ2ZWRab25lU2l6ZSkKICAgICAgICAgT3B0aW9uczo6c29mdFJlc2VydmVkWm9uZVNpemUo
KSA9IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNpemUoKSArIG1pbmltdW1SZXNlcnZlZFpvbmVTaXpl
OwogCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAvLyBGSVhNRTogTWFrZSBwcm9iZSBPU1Ig
ZXhpdCB3b3JrIG9uIDMyLWJpdDoKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTc3OTU2CiAgICAgT3B0aW9uczo6dXNlUHJvYmVPU1JFeGl0KCkgPSBmYWxz
ZTsKLSNlbmRpZgogCiAgICAgaWYgKCFPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkKICAgICAgICAg
T3B0aW9uczo6ZGlza0NhY2hlUGF0aCgpID0gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCmluZGV4IDA4MWQ5NzhhN2IyYTYy
NjZhYzU1MmMzNzlkMzg0NTAwNWRjMTFmMTAuLjNjNzQwZDQ4ZjYyNDFiMDI2MDVmYmY1MjViZGRm
MjMxOTJkMDlkYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nj
b3BlZEFyZ3VtZW50cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2Nv
cGVkQXJndW1lbnRzLmNwcApAQCAtMTQ4LDkgKzE0OCw5IEBAIHZvaWQgU2NvcGVkQXJndW1lbnRz
Ojp1bm1hcEFyZ3VtZW50KFZNJiB2bSwgdWludDMyX3QgaSkKICAgICAgICAgc3RvcmFnZSgpW2kg
LSBuYW1lZExlbmd0aF0uY2xlYXIoKTsKIH0KIAotdm9pZCBTY29wZWRBcmd1bWVudHM6OmNvcHlU
b0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKQordm9pZCBTY29wZWRBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1
bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBHZW5lcmljQXJndW1lbnRz
Ojpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERl
c3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBHZW5lcmljQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVu
dHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2NvcGVkQXJndW1lbnRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
Y29wZWRBcmd1bWVudHMuaAppbmRleCBmODVlNDdkZmJlZThjYTdjMzcwNGYyOWVkNGNiMWI0ZTk3
MjA0NDU3Li5lNThjYjIyZWZkNDhjNjc0YmY1YjFiMTEyODBiNTFhYmMwZGUwODRiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaApAQCAtMTQy
LDcgKzE0Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEdlbmVyaWNBcmd1bWVudHM8U2Nv
cGVkQXJndW1lbnRzPjo6aXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcihpbmRleCwgbV90YWJs
ZS0+bGVuZ3RoKCkpOwogICAgIH0KIAotICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFs
T2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIGNvcHlUb0FyZ3VtZW50
cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCBhOWZlNzRhNGI3ZjQ0Mjk1OWNiMGU4N2E2
ZTBmNTg5OTdhNjI2NmY2Li41N2MyYTc4MjkzODk5MjZhZGY5OGZhN2NlYTMyYjFjNmFlNDJlMmMx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0zNCw2ICszNCw3IEBACiAj
aW5jbHVkZSAiQm9vbGVhbk9iamVjdC5oIgogI2luY2x1ZGUgIkJ1aWx0aW5FeGVjdXRhYmxlcy5o
IgogI2luY2x1ZGUgIkJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJDaGVj
a3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50cy5oIgog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgpAQCAtMTA2Miw4
ICsxMDYzLDMxIEBAIHZvaWQgVk06OmdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhDb25zZXJ2YXRp
dmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCiAgICAgICAgIH0KICAgICB9CiB9CisKK3ZvaWQg
Vk06OnNjYW5TaWRlU3RhdGUoQ29uc2VydmF0aXZlUm9vdHMmIHJvb3RzKSBjb25zdAoreworICAg
IEFTU0VSVChoZWFwLndvcmxkSXNTdG9wcGVkKCkpOworICAgIGZvciAoY29uc3QgYXV0byYgaXRl
ciA6IG1fY2hlY2twb2ludFNpZGVTdGF0ZSkgeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVv
ZihpdGVyLnZhbHVlLT50bXBzKSAvIHNpemVvZihKU1ZhbHVlKSA9PSBtYXhOdW1DaGVja3BvaW50
VG1wcyk7CisgICAgICAgIHJvb3RzLmFkZChpdGVyLnZhbHVlLT50bXBzLCBpdGVyLnZhbHVlLT50
bXBzICsgbWF4TnVtQ2hlY2twb2ludFRtcHMpOworICAgIH0KK30KICNlbmRpZgogCit2b2lkIFZN
OjphZGRDaGVja3BvaW50T1NSU2lkZVN0YXRlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBzdGQ6OnVu
aXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+JiYgcGF5bG9hZCkKK3sKKyAgICBB
U1NFUlQoY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgYXV0byBhZGRSZXN1
bHQgPSBtX2NoZWNrcG9pbnRTaWRlU3RhdGUuYWRkKGNhbGxGcmFtZSwgV1RGTW92ZShwYXlsb2Fk
KSk7CisgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsK
K30KKworc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBWTTo6Zmlu
ZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgQVNT
RVJUKGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIGF1dG8gc2lkZVN0YXRl
ID0gbV9jaGVja3BvaW50U2lkZVN0YXRlLnRha2UoY2FsbEZyYW1lKTsKKyAgICByZXR1cm4gc2lk
ZVN0YXRlOworfQorCiB2b2lkIGxvZ1Nhbml0aXplU3RhY2soVk0mIHZtKQogewogICAgIGlmIChP
cHRpb25zOjp2ZXJib3NlU2FuaXRpemVTdGFjaygpICYmIHZtLnRvcENhbGxGcmFtZSkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggZjc3MWQwOTI1NmFmOTE1MDMwZGE1OWVlMzE4
MjgwZjM0ZGY3MTBhZi4uN2RhMzJhNzI2MjRmMGJmYWFmNGU1OWE1ZjdkYTQ0YzI3MjNkYzU3OCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0xMDMsMTAgKzEwMywxMiBAQCBuYW1l
c3BhY2UgSlNDIHsKIGNsYXNzIEJ1aWx0aW5FeGVjdXRhYmxlczsKIGNsYXNzIEJ5dGVjb2RlSW50
cmluc2ljUmVnaXN0cnk7CiBjbGFzcyBDYWxsRnJhbWU7CitzdHJ1Y3QgQ2hlY2twb2ludE9TUkV4
aXRTaWRlU3RhdGU7CiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBDb2RlQ2FjaGU7CiBjbGFzcyBD
b21tb25JZGVudGlmaWVyczsKIGNsYXNzIENvbXBhY3RWYXJpYWJsZU1hcDsKK2NsYXNzIENvbnNl
cnZhdGl2ZVJvb3RzOwogY2xhc3MgQ3VzdG9tR2V0dGVyU2V0dGVyOwogY2xhc3MgRE9NQXR0cmli
dXRlR2V0dGVyU2V0dGVyOwogY2xhc3MgRGF0ZUluc3RhbmNlOwpAQCAtOTU4LDYgKzk2MCwxMSBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhDb25zZXJ2YXRp
dmVSb290cyYpOwogCisgICAgdm9pZCBhZGRDaGVja3BvaW50T1NSU2lkZVN0YXRlKENhbGxGcmFt
ZSosIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4mJik7CisgICAg
c3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBmaW5kQ2hlY2twb2lu
dE9TUlNpZGVTdGF0ZShDYWxsRnJhbWUqKTsKKyAgICBib29sIGhhc0NoZWNrcG9pbnRPU1JTaWRl
U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2NoZWNrcG9pbnRTaWRlU3RhdGUuc2l6ZSgpOyB9Cisg
ICAgdm9pZCBzY2FuU2lkZVN0YXRlKENvbnNlcnZhdGl2ZVJvb3RzJikgY29uc3Q7CisKICAgICBW
TUVudHJ5U2NvcGUqIGVudHJ5U2NvcGU7CiAKICAgICBKU09iamVjdCogc3RyaW5nUmVjdXJzaW9u
Q2hlY2tGaXJzdE9iamVjdCB7IG51bGxwdHIgfTsKQEAgLTEyMDgsNiArMTIxNSw3IEBAIHByaXZh
dGU6CiAgICAgTG9jayBtX3NjcmF0Y2hCdWZmZXJMb2NrOwogICAgIFZlY3RvcjxTY3JhdGNoQnVm
ZmVyKj4gbV9zY3JhdGNoQnVmZmVyczsKICAgICBzaXplX3QgbV9zaXplT2ZMYXN0U2NyYXRjaEJ1
ZmZlciB7IDAgfTsKKyAgICBIYXNoTWFwPENhbGxGcmFtZSosIHN0ZDo6dW5pcXVlX3B0cjxDaGVj
a3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4+IG1fY2hlY2twb2ludFNpZGVTdGF0ZTsKICAgICBJbmxp
bmVXYXRjaHBvaW50U2V0IG1fcHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkOwogICAgIEZ1bmN0aW9u
SGFzRXhlY3V0ZWRDYWNoZSBtX2Z1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZTsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q29udHJvbEZsb3dQcm9maWxlcj4gbV9jb250cm9sRmxvd1Byb2ZpbGVyOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5jcHAKaW5kZXggODFjOWYxZjY3
NDcwNzllZDgzMTI2NjJjMDgzMDBjNmNjMzYyOGUzNy4uZTE0ODQwMGQ0ODdkZmM2NGU0NDA1NGRk
YWRiMDg1ODk3MmUzOWEyNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L1ZNSW5zcGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNw
ZWN0b3IuY3BwCkBAIC0zOTcsOCArMzk3LDggQEAgdm9pZCBWTUluc3BlY3Rvcjo6ZHVtcFJlZ2lz
dGVycyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBjb25zdCBSZWdpc3RlciogaXQ7CiAgICAg
Y29uc3QgUmVnaXN0ZXIqIGVuZDsKIAotICAgIGl0ID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSAr
IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgp
OwotICAgIGVuZCA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBDYWxsRnJhbWVTbG90Ojp0aGlz
QXJndW1lbnQgLSAxOworICAgIGl0ID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIChDYWxsRnJh
bWVTbG90Ojp0aGlzQXJndW1lbnQgKyBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7CisgICAg
ZW5kID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1l
bnQgLSAxKTsKICAgICB3aGlsZSAoaXQgPiBlbmQpIHsKICAgICAgICAgSlNWYWx1ZSB2ID0gaXQt
PmpzVmFsdWUoKTsKICAgICAgICAgaW50IHJlZ2lzdGVyTnVtYmVyID0gaXQgLSBjYWxsRnJhbWUt
PnJlZ2lzdGVycygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZ1bmN0aW9uQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVu
Y3Rpb25Db2RlQmxvY2suaAppbmRleCBmNjg4YTdjOWU5NDI2ZDllMGJlYTNhZjBjZmZhZjJjMjdk
ZDVhNTY3Li4yZjRiMWM3ZGU2YTg3Yzc0MTFlODZlODdlN2YxOTI0NzM1MmMwZjhiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaApA
QCAtNzIsMTEgKzcyLDExIEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8dWludDY0X3Q+JiBj
b25zdGFudHMoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50czsgfQogICAgIGNvbnN0IEluc3Ry
dWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiAqbV9pbnN0cnVjdGlv
bnM7IH0KIAotICAgIEFMV0FZU19JTkxJTkUgdWludDY0X3QgZ2V0Q29uc3RhbnQoaW50IGluZGV4
KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4XTsgfQotICAgIEFMV0FZU19JTkxJTkUgVHlwZSBnZXRDb25zdGFudFR5cGUoaW50IGlu
ZGV4KSBjb25zdAorICAgIEFMV0FZU19JTkxJTkUgdWludDY0X3QgZ2V0Q29uc3RhbnQoVmlydHVh
bFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNbcmVnLnRvQ29uc3RhbnRJ
bmRleCgpXTsgfQorICAgIEFMV0FZU19JTkxJTkUgVHlwZSBnZXRDb25zdGFudFR5cGUoVmlydHVh
bFJlZ2lzdGVyIHJlZykgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChPcHRpb25zOjpkdW1w
R2VuZXJhdGVkV2FzbUJ5dGVjb2RlcygpKTsKLSAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRUeXBl
c1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsKKyAgICAgICAgcmV0dXJuIG1f
Y29uc3RhbnRUeXBlc1tyZWcudG9Db25zdGFudEluZGV4KCldOwogICAgIH0KIAogICAgIHZvaWQg
c2V0SW5zdHJ1Y3Rpb25zKHN0ZDo6dW5pcXVlX3B0cjxJbnN0cnVjdGlvblN0cmVhbT4pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKaW5k
ZXggZGQxYTBmNzk5NjU2YTZkOTQwZTA2OWIwZTZlZGNiNmZlYmYyZDdhYy4uNTc5ZDI3YmI3ZDEy
MTllNzJjMDNlYzNmNWNkODI2MDQ2ZmI1MDc3MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCkBAIC0yNDIsNiArMjQyLDkgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8TExJbnRHZW5lcmF0b3I+
KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CiAKKyAgICAvLyBXZSBuZWVkIHRoaXMg
Zm9yIGF1dG9nZW5lcmF0ZWQgdGVtcGxhdGVzIHVzZWQgYnkgSlMgYnl0ZWNvZGVzLgorICAgIHZv
aWQgc2V0VXNlc0NoZWNrcG9pbnRzKCkgY29uc3QgeyBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0o
KTsgfQorCiAgICAgdm9pZCBkdW1wKGNvbnN0IENvbnRyb2xTdGFjayYsIGNvbnN0IFN0YWNrKikg
eyB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0
aW9ucy5jcHAKaW5kZXggZGJmYjUwMGNlNTU4ZjI5ZWIyNmUxZGRkMTBlYjk1MTZlMDAyZjU5OS4u
NTZjYTU0N2E3NGEzN2U5YTAxMDY1MWE2YjYxMzQ3MmVmM2ZjMzZhYSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcApAQCAtNzQ0LDcgKzc0NCw3IEBA
IHZvaWQqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRpb24oQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIFdhc206OkV4Y2VwCiAgICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9h
ZCBjYWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBp
bmcKICAgICAvLyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdlIGRpZCB0aGlzLCB3ZSBj
b3VsZCByZW1vdmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKLSAgICBiaXR3aXNlX2Nhc3Q8dWludDY0X3Qq
PihjYWxsRnJhbWUpW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0gPSBiaXR3aXNlX2Nhc3Q8dWludDY0
X3Q+KGluc3RhbmNlLT5tb2R1bGUoKSk7CisgICAgYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oY2Fs
bEZyYW1lKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldID0gYml0d2lz
ZV9jYXN0PHVpbnQ2NF90PihpbnN0YW5jZS0+bW9kdWxlKCkpOwogICAgIHJldHVybiB2bS50YXJn
ZXRNYWNoaW5lUENGb3JUaHJvdzsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtU2xvd1BhdGhzLmNwcAppbmRleCA5MjdhNjk4NGEzYmUwMTRjZjNlYTdkNjdmMDM0NTg0ZWVi
ZWI2MGNlLi41NGY2MzZhYzFiNTA3NWQxYzY2N2IzOGE5MDMxMzI5MGQ1ZjMzM2NlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcApAQCAtNzYsNyArNzYs
NyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIExMSW50IHsKIAogI2RlZmluZSBSRUFEKHZp
cnR1YWxSZWdpc3RlcikgXAogICAgICh2aXJ0dWFsUmVnaXN0ZXIuaXNDb25zdGFudCgpIFwKLSAg
ICAgICAgPyBKU1ZhbHVlOjpkZWNvZGUoQ09ERV9CTE9DSygpLT5nZXRDb25zdGFudCh2aXJ0dWFs
UmVnaXN0ZXIub2Zmc2V0KCkpKSBcCisgICAgICAgID8gSlNWYWx1ZTo6ZGVjb2RlKENPREVfQkxP
Q0soKS0+Z2V0Q29uc3RhbnQodmlydHVhbFJlZ2lzdGVyKSkgXAogICAgICAgICA6IGNhbGxGcmFt
ZS0+cih2aXJ0dWFsUmVnaXN0ZXIpKQogCiBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1
cmlzdGljcyhXYXNtOjpMTEludENhbGxlZSogY2FsbGVlLCBXYXNtOjpGdW5jdGlvbkNvZGVCbG9j
ayogY29kZUJsb2NrLCBXYXNtOjpJbnN0YW5jZSogaW5zdGFuY2UpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4MDkzMTM2MzI0MGUyNWYxYjAzODdlZTc3ZmZk
YjQ3NTk5ZTBkYTMzLi42NzQwMTllMGUyYWQ5ZDliNDY0YWZhNTA5ZTk2ODNlZmY0NGY1MjM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM5Myw2ICszOTMs
NyBAQAogCQk1MzExQkQ1NzFFQTdFMUExMDA1MjUyODEgLyogU2lnbmFscy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTaWduYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUzMTFCRDU5MUVBODFBOTYwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZE1lc3NhZ2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTMxMUJENUIxRUE4MjJGOTAwNTI1MjgxIC8qIFRocmVhZE1lc3Nh
Z2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkTWVzc2Fn
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMzhFQkE0MjNBQjA0RDEwMDM4
MjY2MiAvKiBFbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBFbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MzUzNEYyOTFFQzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4Y2VwdGlv
bnMuZGVmcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUubWlnOyBwYXRoID0gTWFjaEV4Y2VwdGlvbnMu
ZGVmczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM5RUIwNjIxRDU1Mjg0MjAwQzgy
RUY3IC8qIExFQkRlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTEVC
RGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0VDMjUzQzFFOTVBRDMw
MDAwODMxQjkgLyogUHJpb3JpdHlRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQcmlvcml0eVF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05ODYs
NiArOTg3LDcgQEAKIAkJCQlBOEE0NzI5ODE1MUE4MjVBMDA0MTIzRkYgLyogZHRvYS5oICovLAog
CQkJCUZFMDVGQUU2MUZEQjIxNDMwMDA5MzIzMCAvKiBEdW1iUHRyVHJhaXRzLmggKi8sCiAJCQkJ
QUQ2NTNEQTgyMDA2QjZDMjAwRDgyMEQ3IC8qIER1bWJWYWx1ZVRyYWl0cy5oICovLAorCQkJCTUz
MzhFQkE0MjNBQjA0RDEwMDM4MjY2MiAvKiBFbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oICov
LAogCQkJCTFBRUE4OEUxMUQ2QkJDRjQwMEU1QUQ2NCAvKiBFbnVtVHJhaXRzLmggKi8sCiAJCQkJ
QUQ3QzQzNEExREQyQTRBNzAwMjY4ODhCIC8qIEV4cGVjdGVkLmggKi8sCiAJCQkJQThBNDcyOUYx
NTFBODI1QTAwNDEyM0ZGIC8qIEV4cG9ydE1hY3Jvcy5oICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvQml0bWFwLmggYi9Tb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAppbmRleCA0YzZmNWQ0
NDI2MzJjM2VmYzAwMGJkMThlOWUzNjk0NTJmYWYxYzEwLi5iNDZkYTllODVhYjliNjg2MjQzOGE2
OTJlMzY2YTc1MDU0ZGNjNmMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaApAQCAtNTEsNiArNTEsNyBAQCBwdWJsaWM6CiAg
ICAgc2l6ZV90IG5leHRQb3NzaWJseVVuc2V0KHNpemVfdCkgY29uc3Q7CiAgICAgdm9pZCBjbGVh
cihzaXplX3QpOwogICAgIHZvaWQgY2xlYXJBbGwoKTsKKyAgICB2b2lkIGludmVydCgpOwogICAg
IGludDY0X3QgZmluZFJ1bk9mWmVyb3Moc2l6ZV90IHJ1bkxlbmd0aCkgY29uc3Q7CiAgICAgc2l6
ZV90IGNvdW50KHNpemVfdCBzdGFydCA9IDApIGNvbnN0OwogICAgIHNpemVfdCBpc0VtcHR5KCkg
Y29uc3Q7CkBAIC0xMDIsNiArMTAzLDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAh
KCp0aGlzID09IG90aGVyKTsKICAgICAgICAgfQogCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRv
cj0oYm9vbCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbV9iaXRtYXAtPnNldChtX2lu
ZGV4LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKwogICAg
IHByaXZhdGU6CiAgICAgICAgIGNvbnN0IEJpdG1hcCogbV9iaXRtYXA7CiAgICAgICAgIHNpemVf
dCBtX2luZGV4OwpAQCAtMTExLDYgKzExOCw5IEBAIHB1YmxpYzoKICAgICBpdGVyYXRvciBiZWdp
bigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBmaW5kQml0KDAsIHRydWUpKTsgfQog
ICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBiaXRtYXBT
aXplKTsgfQogICAgIAorICAgIGl0ZXJhdG9yIG9wZXJhdG9yW10oc2l6ZV90KTsKKyAgICBjb25z
dCBpdGVyYXRvciBvcGVyYXRvcltdKHNpemVfdCkgY29uc3Q7CisKICAgICB2b2lkIG1lcmdlQW5k
Q2xlYXIoQml0bWFwJik7CiAgICAgdm9pZCBzZXRBbmRDbGVhcihCaXRtYXAmKTsKICAgICAKQEAg
LTIyNCw2ICsyMzQsMTMgQEAgaW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBl
Pjo6Y2xlYXJBbGwoKQogICAgIG1lbXNldChiaXRzLmRhdGEoKSwgMCwgc2l6ZW9mKGJpdHMpKTsK
IH0KIAordGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgoraW5s
aW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6aW52ZXJ0KCkKK3sKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmRzOyArK2kpCisgICAgICAgIGJpdHNbaV0gPSB+Yml0
c1tpXTsKK30KKwogdGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBl
PgogaW5saW5lIHNpemVfdCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpuZXh0UG9zc2li
bHlVbnNldChzaXplX3Qgc3RhcnQpIGNvbnN0CiB7CkBAIC00MDksNiArNDI2LDE5IEBAIGlubGlu
ZSBib29sIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om9wZXJhdG9yIT0oY29uc3QgQml0
bWFwJiBvdGhlcikgY29uc3QKICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CiB9CiAKK3Rl
bXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KK2lubGluZSBhdXRv
IEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSAt
PiBpdGVyYXRvcgoreworICAgIEFTU0VSVChpbmRleCA8IHNpemUoKSk7CisgICAgcmV0dXJuIGl0
ZXJhdG9yKCp0aGlzLCBpbmRleCk7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0
eXBlbmFtZSBXb3JkVHlwZT4KK2lubGluZSBhdXRvIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlw
ZT46Om9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCAtPiBjb25zdCBpdGVyYXRvcgorewor
ICAgIHJldHVybiAoKmNvbnN0X2Nhc3Q8Qml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPio+KHRo
aXMpKVtpbmRleF07Cit9CisKIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBX
b3JkVHlwZT4KIGlubGluZSB1bnNpZ25lZCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+Ojpo
YXNoKCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0
IGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXggZDFjNTk5OWI4ZjE3OGM0YzMy
NTc0YjFiNmVkMzk0ZWVhOWYzMzc0OS4uY2UzMzMyYTg1NDE4YzFjY2M1YzRkOWIyMTlhOWI2YTAw
OWRlZWVkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIv
U291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTU2LDYgKzU2LDcgQEAgc2V0KFdURl9Q
VUJMSUNfSEVBREVSUwogICAgIERvdWJseUxpbmtlZExpc3QuaAogICAgIER1bWJQdHJUcmFpdHMu
aAogICAgIER1bWJWYWx1ZVRyYWl0cy5oCisgICAgRW51bUNsYXNzT3BlcmF0b3JPdmVybG9hZHMu
aAogICAgIEVudW1UcmFpdHMuaAogICAgIEV4cGVjdGVkLmgKICAgICBFeHBvcnRNYWNyb3MuaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRW51bUNsYXNzT3BlcmF0b3JPdmVybG9hZHMuaCBi
L1NvdXJjZS9XVEYvd3RmL0VudW1DbGFzc09wZXJhdG9yT3ZlcmxvYWRzLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MzU3YmEyZmEyZjc5MjlhNmE5OThhOWE0ZWYxNGQyYmU1NzU0NjM3MQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XVEYvd3RmL0VudW1DbGFzc09wZXJhdG9yT3ZlcmxvYWRzLmgKQEAgLTAsMCAr
MSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorCisjZGVmaW5lIE9WRVJMT0FE
X09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIG9wLCBlbmFibGVFeHByZXNz
aW9uKSBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gXAorICAgIGNvbnN0ZXhwciBhdXRvIG9w
ZXJhdG9yIG9wKGVudW1OYW1lIGVudW1FbnRyeSwgVCB2YWx1ZSkgLT4gc3RkOjplbmFibGVfaWZf
dDwoZW5hYmxlRXhwcmVzc2lvbiksIFQ+IFwKKyAgICB7IFwKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFQ+KGVudW1FbnRyeSkgb3AgdmFsdWU7IFwKKyAgICB9IFwKKyAgICBcCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gXAorICAgIGNvbnN0ZXhwciBhdXRvIG9wZXJhdG9yIG9wKFQgdmFs
dWUsIGVudW1OYW1lIGVudW1FbnRyeSkgLT4gc3RkOjplbmFibGVfaWZfdDwoZW5hYmxlRXhwcmVz
c2lvbiksIFQ+IFwKKyAgICB7IFwKKyAgICAgICAgcmV0dXJuIHZhbHVlIG9wIHN0YXRpY19jYXN0
PFQ+KGVudW1FbnRyeSk7IFwKKyAgICB9IFwKKworI2RlZmluZSBPVkVSTE9BRF9NQVRIX09QRVJB
VE9SU19GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCBlbmFibGVFeHByZXNzaW9uKSBcCisg
ICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgKywgZW5h
YmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dI
RU4oZW51bU5hbWUsIC0sIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRP
Ul9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCAqLCBlbmFibGVFeHByZXNzaW9uKSBcCisg
ICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgLywgZW5h
YmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dI
RU4oZW51bU5hbWUsICUsIGVuYWJsZUV4cHJlc3Npb24pIFwKKworI2RlZmluZSBPVkVSTE9BRF9N
QVRIX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSVRIX0lOVEVHUkFMUyhlbnVtTmFtZSkgT1ZF
UkxPQURfTUFUSF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgc3RkOjpp
c19pbnRlZ3JhbF92PFQ+KQorCisjZGVmaW5lIE9WRVJMT0FEX1JFTEFUSU9OQUxfT1BFUkFUT1JT
X0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBP
VkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCA9PSwgZW5hYmxl
RXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4o
ZW51bU5hbWUsICE9LCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1Jf
Rk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgPCwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAg
IE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIDw9LCBlbmFi
bGVFeHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hF
TihlbnVtTmFtZSwgPiwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9S
X0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsID49LCBlbmFibGVFeHByZXNzaW9uKSBcCisK
KyNkZWZpbmUgT1ZFUkxPQURfUkVMQVRJT05BTF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0lU
SF9JTlRFR1JBTFMoZW51bU5hbWUpIE9WRVJMT0FEX1JFTEFUSU9OQUxfT1BFUkFUT1JTX0ZPUl9F
TlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIHN0ZDo6aXNfaW50ZWdyYWxfdjxUPikKKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oIGIvU291cmNlL1dURi93dGYvRmFz
dEJpdFZlY3Rvci5oCmluZGV4IDczM2M2NWMwNzY1MGJjOGM0YmMwODFkYzA1MmNhNGMzODlmOGRj
ZWQuLjk2ZGNjZTFjZGJjMzg3NGUzNjJiMzcwMGIyOGE0Zjk0NDMzODRhYzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9GYXN0
Qml0VmVjdG9yLmgKQEAgLTQ1Miw3ICs0NTIsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAot
ICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAgIG9wZXJhdG9yIGJvb2woKSBj
b25zdAogICAgIHsKICAgICAgICAgcmV0dXJuICEhKCptX3dvcmQgJiBtX21hc2spOwogICAgIH0K
QEAgLTQ2Niw2ICs0NjYsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9
CiAKKyAgICBGYXN0Qml0UmVmZXJlbmNlJiBvcGVyYXRvcnw9KGJvb2wgdmFsdWUpIHsgcmV0dXJu
IHZhbHVlID8gKnRoaXMgPSB2YWx1ZSA6ICp0aGlzOyB9CisgICAgRmFzdEJpdFJlZmVyZW5jZSYg
b3BlcmF0b3ImPShib29sIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA/ICp0aGlzIDogKnRoaXMgPSB2
YWx1ZTsgfQorCiBwcml2YXRlOgogICAgIHVpbnQzMl90KiBtX3dvcmQgeyBudWxscHRyIH07CiAg
ICAgdWludDMyX3QgbV9tYXNrIHsgMCB9OwpAQCAtNTExLDcgKzUxNCwxMSBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICBtX3dvcmRzLmNsZWFyQWxsKCk7CiAgICAgfQotICAgIAorCisgICAgLy8g
Rm9yIHRlbXBsYXRpbmcgYXMgVmVjdG9yPGJvb2w+CisgICAgdm9pZCBmaWxsKGJvb2wgdmFsdWUp
IHsgdmFsdWUgPyBzZXRBbGwoKSA6IGNsZWFyQWxsKCk7IH0KKyAgICB2b2lkIGdyb3coc2l6ZV90
IG5ld1NpemUpIHsgcmVzaXplKG5ld1NpemUpOyB9CisKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCBjbGVhclJhbmdlKHNpemVfdCBiZWdpbiwgc2l6ZV90IGVuZCk7CiAKICAgICAvLyBSZXR1
cm5zIHRydWUgaWYgdGhlIGNvbnRlbnRzIG9mIHRoaXMgYml0dmVjdG9yIGNoYW5nZWQuCkBAIC01
OTEsNCArNTk4LDUgQEAgcHVibGljOgogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAordXNpbmcgV1RG
OjpGYXN0Qml0UmVmZXJlbmNlOwogdXNpbmcgV1RGOjpGYXN0Qml0VmVjdG9yOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvVW5hbGlnbmVkQWNjZXNzLmggYi9Tb3VyY2UvV1RGL3d0Zi9VbmFs
aWduZWRBY2Nlc3MuaAppbmRleCA1YTRlOWVmNDQ5NGVmNDZjYTllNGVlZjc3ZmRjYzBkNjBmYWE0
YTExLi4zYTM1YjM4ZjRjMDIzNjc5YWM3Y2ZjOWM0NjU2MDg0YTM5MTQ4M2IyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9VbmFsaWduZWRBY2Nlc3MuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9V
bmFsaWduZWRBY2Nlc3MuaApAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgV1RGIHsKIHRlbXBs
YXRlPHR5cGVuYW1lIFR5cGU+CiBpbmxpbmUgVHlwZSB1bmFsaWduZWRMb2FkKGNvbnN0IHZvaWQq
IHBvaW50ZXIpCiB7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWw8VHlwZT46OnZh
bHVlLCAiIik7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9jb3B5YWJsZTxU
eXBlPjo6dmFsdWUsICIiKTsKICAgICBUeXBlIHJlc3VsdCB7IH07CiAgICAgbWVtY3B5KCZyZXN1
bHQsIHBvaW50ZXIsIHNpemVvZihUeXBlKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTQzLDcg
KzQzLDcgQEAgaW5saW5lIFR5cGUgdW5hbGlnbmVkTG9hZChjb25zdCB2b2lkKiBwb2ludGVyKQog
dGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KIGlubGluZSB2b2lkIHVuYWxpZ25lZFN0b3JlKHZvaWQq
IHBvaW50ZXIsIFR5cGUgdmFsdWUpCiB7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZp
YWw8VHlwZT46OnZhbHVlLCAiIik7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxs
eV9jb3B5YWJsZTxUeXBlPjo6dmFsdWUsICIiKTsKICAgICBtZW1jcHkocG9pbnRlciwgJnZhbHVl
LCBzaXplb2YoVHlwZSkpOwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29s
cy9DaGFuZ2VMb2cKaW5kZXggYmU4ZWVmNWI2NjU4ZjQzZDViMTgzMjdmOGU2NWM0N2ZiNjBhOWM0
My4uMjllZWY4NTkzMWFjMGQ2NzUxZDgyYzNlZTE1N2M0YjViYzBkY2ZjOCAxMDA2NDQKLS0tIGEv
VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisy
MDIwLTAxLTE2ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAg
ICAgIFJlbGFuZCBieXRlY29kZSBjaGVja3BvaW50cyBzaW5jZSBidWdzIGhhdmUgYmVlbiBmaXhl
ZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2MzYx
CisKKyAgICAgICAgVW5yZXZpZXdlZCwgcmVsYW5kLgorCisgICAgICAgIFRoaXMgd2F0Y2ggYnVn
cyBoYXZlIGJlZW4gZml4ZWQgYnkgaHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzI1
NDY3NAorCisgICAgICAgICogU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0czoKKwogMjAyMC0w
MS0xNiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBoaWxuQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dT
dHJlYW1lcl1bV1BFXSBDbGllbnQtc2lkZSB2aWRlbyByZW5kZXJpbmcgc3VwcG9ydApkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMv
cnVuLWpzYy1zdHJlc3MtdGVzdHMKaW5kZXggMTI4OTYwN2I0MWFmOTRlNGE4NmYyOWFkZmMyMTc5
YTM2NmZjOGNjMi4uMDllNGYxN2MyOGIwM2Q3MzFiYzAzMjI4ODIzMDA4YTRmYjI3N2YxMSAxMDA3
NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cworKysgYi9Ub29scy9T
Y3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCkBAIC00OTgsNyArNDk4LDYgQEAgTk9fQ0pJVF9P
UFRJT05TID0gWyItLXVzZUNvbmN1cnJlbnRKSVQ9ZmFsc2UiLCAiLS10aHJlc2hvbGRGb3JKSVRB
ZnRlcldhcm1VcD0xMDAKIEIzTzFfT1BUSU9OUyA9IFsiLS1kZWZhdWx0QjNPcHRMZXZlbD0xIl0K
IEIzTzBfT1BUSU9OUyA9IFsiLS1tYXhERkdOb2Rlc0luQmFzaWNCbG9ja0ZvclByZWNpc2VBbmFs
eXNpcz0xMDAiLCAiLS1kZWZhdWx0QjNPcHRMZXZlbD0wIl0KIEZUTF9PUFRJT05TID0gWyItLXVz
ZUZUTEpJVD10cnVlIl0KLVBST0JFX09TUl9FWElUX09QVElPTiA9IFsiLS11c2VQcm9iZU9TUkV4
aXQ9dHJ1ZSJdCiBGT1JDRV9MTElOVF9FWElUX09QVElPTlMgPSBbIi0tZm9yY2VPU1JFeGl0VG9M
TEludD10cnVlIl0KIAogcmVxdWlyZV9yZWxhdGl2ZSAid2Via2l0cnVieS9qc2Mtc3RyZXNzLXRl
c3Qtd3JpdGVyLSN7JHRlc3RXcml0ZXJ9IgpAQCAtNzEzLDcgKzcxMiw3IEBAIGRlZiBydW5GVExO
b0NKSVRCM08wKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCiBlbmQKIAogZGVmIHJ1bkZU
TE5vQ0pJVFZhbGlkYXRlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAgcnVuKCJm
dGwtbm8tY2ppdC12YWxpZGF0ZS1zYW1wbGluZy1wcm9maWxlciIsICItLXZhbGlkYXRlR3JhcGg9
dHJ1ZSIsICItLXVzZVNhbXBsaW5nUHJvZmlsZXI9dHJ1ZSIsICItLWFpckZvcmNlSVJDQWxsb2Nh
dG9yPXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgUFJPQkVfT1NSX0VY
SVRfT1BUSU9OICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICBydW4oImZ0bC1u
by1jaml0LXZhbGlkYXRlLXNhbXBsaW5nLXByb2ZpbGVyIiwgIi0tdmFsaWRhdGVHcmFwaD10cnVl
IiwgIi0tdXNlU2FtcGxpbmdQcm9maWxlcj10cnVlIiwgIi0tYWlyRm9yY2VJUkNBbGxvY2F0b3I9
dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGlvbnMpKQogZW5kCiAKIGRlZiBydW5GVExOb0NKSVROb1B1dFN0YWNrVmFsaWRhdGUo
Km9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKQEAgLTcyOSw3ICs3MjgsNyBAQCBkZWYgcnVu
RlRMTm9DSklUT1NSVmFsaWRhdGlvbigqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQogZW5k
CiAKIGRlZiBydW5ERkdFYWdlcigqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQotICAgIHJ1
bigiZGZnLWVhZ2VyIiwgKihFQUdFUl9PUFRJT05TICsgQ09MTEVDVF9DT05USU5VT1VTTFlfT1BU
SU9OUyArIFBST0JFX09TUl9FWElUX09QVElPTiArIEZPUkNFX0xMSU5UX0VYSVRfT1BUSU9OUyAr
IG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgcnVuKCJkZmctZWFnZXIiLCAqKEVB
R0VSX09QVElPTlMgKyBDT0xMRUNUX0NPTlRJTlVPVVNMWV9PUFRJT05TICsgRk9SQ0VfTExJTlRf
RVhJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCiBkZWYg
cnVuREZHRWFnZXJOb0NKSVRWYWxpZGF0ZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCAx
YTBhNTI5NzNlOTIyY2RiMDM4OTkwY2Q4ZmJlNTZkYmIyYWE0NmI0Li4zMGU1ODc0NzBlNjRhNTQw
YWIwOGZhYWQzNzY2YWYwMTNjMTZlNDZlIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZwor
KysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIwLTAxLTE2ICBLZWl0
aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlbGFuZCBieXRl
Y29kZSBjaGVja3BvaW50cyBzaW5jZSBidWdzIGhhdmUgYmVlbiBmaXhlZAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2MzYxCisKKyAgICAgICAgVW5y
ZXZpZXdlZCwgcmVsYW5kLgorCisgICAgICAgIFRoaXMgd2F0Y2ggYnVncyBoYXZlIGJlZW4gZml4
ZWQgYnkgaHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzI1NDY3NAorCisgICAgICAg
ICogc3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2UtZXhjZXB0aW9u
cy1vY2Nhc2lvbmFsbHkuanM6IEFkZGVkLgorICAgICAgICAoZXhwZWN0ZWRBcmdDb3VudCk6Cisg
ICAgICAgIChjYWxsZWUpOgorICAgICAgICAodGVzdCk6CisgICAgICAgIChsZXQuYXJyYXkuZ2V0
IGxlbmd0aCk6CisgICAgICAgICogc3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVu
Z3RoLW9uY2UuanM6IEFkZGVkLgorICAgICAgICAoZXhwZWN0ZWRBcmdDb3VudCk6CisgICAgICAg
IChjYWxsZWUpOgorICAgICAgICAodGVzdCk6CisgICAgICAgIChsZXQuYXJyYXkuZ2V0IGxlbmd0
aCk6CisgICAgICAgICogc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1hbmQt
ZXhpdC1zdHJpY3QuanM6CisgICAgICAgIChjaGVja0VxdWFsKToKKyAgICAgICAgKiBzdHJlc3Mv
cmVjdXJzaXZlLXRhaWwtY2FsbC13aXRoLWRpZmZlcmVudC1hcmd1bWVudC1jb3VudC5qczoKKyAg
ICAgICAgKiBzdHJlc3MvcmVzdC12YXJhcmdzLW9zci1leGl0LXRvLWNoZWNrcG9pbnQuanM6IEFk
ZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGJhcik6CisKIDIwMjAtMDEtMTYgIE1hcmsg
TGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIG9wZXJhdGlvblRvT2JqZWN0KCkg
c2hvdWxkIGNoZWNrIGZvciBhIG51bGwgZXJyb3JNZXNzYWdlLgpkaWZmIC0tZ2l0IGEvSlNUZXN0
cy9zdHJlc3MvYXBwbHktb3NyLWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS1leGNlcHRpb25z
LW9jY2FzaW9uYWxseS5qcyBiL0pTVGVzdHMvc3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1n
ZXQtbGVuZ3RoLW9uY2UtZXhjZXB0aW9ucy1vY2Nhc2lvbmFsbHkuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjNm
MTVhNmViOGMyN2NjMGFkMmU5ZjU5NTQxZmZlMmM1MGFjMGEyMwotLS0gL2Rldi9udWxsCisrKyBi
L0pTVGVzdHMvc3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2UtZXhj
ZXB0aW9ucy1vY2Nhc2lvbmFsbHkuanMKQEAgLTAsMCArMSwzNiBAQAorCitsZXQgY3VycmVudEFy
Z0NvdW50OworZnVuY3Rpb24gZXhwZWN0ZWRBcmdDb3VudCgpIHsKKyAgICByZXR1cm4gY3VycmVu
dEFyZ0NvdW50OworfQorbm9JbmxpbmUoZXhwZWN0ZWRBcmdDb3VudCk7CisKK2Z1bmN0aW9uIGNh
bGxlZSgpIHsKKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSBleHBlY3RlZEFyZ0NvdW50KCkp
CisgICAgICAgIHRocm93IG5ldyBFcnJvcigpOworfQorCitmdW5jdGlvbiB0ZXN0KGFycmF5KSB7
CisgICAgY2FsbGVlLmFwcGx5KHVuZGVmaW5lZCwgYXJyYXkpOworfQorbm9JbmxpbmUodGVzdCk7
CisKK2xldCBsZW5ndGhDYWxscyA9IDA7CitjdXJyZW50QXJnQ291bnQgPSAyOworbGV0IGFycmF5
ID0geyAwOiAxLCAxOiAyLCBnZXQgbGVuZ3RoKCkgeworICAgIGlmIChsZW5ndGhDYWxscysrICUg
MTAgPT0gMSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ0aHJvd2luZyBhbiBleGNlcHRpb24g
aW4gbGVuZ3RoIik7CisgICAgcmV0dXJuIGN1cnJlbnRBcmdDb3VudAorfSB9Citmb3IgKGxldCBp
ID0gMDsgaSA8IDFlNjsgaSsrKSB7CisgICAgdHJ5IHsKKyAgICAgICAgdGVzdChhcnJheSk7Cisg
ICAgfSBjYXRjaCB7IH0KK30KKworY3VycmVudEFyZ0NvdW50ID0gMTAwOworbGVuZ3RoQ2FsbHMg
PSAwOwordGVzdChhcnJheSk7CisKK2lmIChsZW5ndGhDYWxscyAhPT0gMSkKKyAgICB0aHJvdyBu
ZXcgRXJyb3IobGVuZ3RoQ2FsbHMpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvYXBwbHkt
b3NyLWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS5qcyBiL0pTVGVzdHMvc3RyZXNzL2FwcGx5
LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGJlZTQ1Y2Ux
YzcyODM2NTM4MjcwNWQ5OWQzMDFhZTZiY2I4ZDg3YQotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVz
dHMvc3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2UuanMKQEAgLTAs
MCArMSwzMSBAQAorCitsZXQgY3VycmVudEFyZ0NvdW50OworZnVuY3Rpb24gZXhwZWN0ZWRBcmdD
b3VudCgpIHsKKyAgICByZXR1cm4gY3VycmVudEFyZ0NvdW50OworfQorbm9JbmxpbmUoZXhwZWN0
ZWRBcmdDb3VudCk7CisKK2Z1bmN0aW9uIGNhbGxlZSgpIHsKKyAgICBpZiAoYXJndW1lbnRzLmxl
bmd0aCAhPSBleHBlY3RlZEFyZ0NvdW50KCkpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigpOwor
fQorCitmdW5jdGlvbiB0ZXN0KGFycmF5KSB7CisgICAgY2FsbGVlLmFwcGx5KHVuZGVmaW5lZCwg
YXJyYXkpOworfQorbm9JbmxpbmUodGVzdCk7CisKK2xldCBsZW5ndGhDYWxscyA9IDA7CitjdXJy
ZW50QXJnQ291bnQgPSAyOworbGV0IGFycmF5ID0geyAwOiAxLCAxOiAyLCBnZXQgbGVuZ3RoKCkg
eyBsZW5ndGhDYWxscysrOyByZXR1cm4gY3VycmVudEFyZ0NvdW50IH0gfQorZm9yIChsZXQgaSA9
IDA7IGkgPCAxZTU7IGkrKykKKyAgICB0ZXN0KGFycmF5KTsKKworCit0ZXN0KGFycmF5KTsKK2N1
cnJlbnRBcmdDb3VudCA9IDEwMDsKK2xlbmd0aENhbGxzID0gMDsKK3Rlc3QoYXJyYXkpOworCitp
ZiAobGVuZ3RoQ2FsbHMgIT09IDEpCisgICAgdGhyb3cgbmV3IEVycm9yKGxlbmd0aENhbGxzKTsK
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2Fs
bC1hbmQtZXhpdC1zdHJpY3QuanMgYi9KU1Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1p
bmxpbmVkLWNhbGwtYW5kLWV4aXQtc3RyaWN0LmpzCmluZGV4IDM2MThmOGNiYjNkMzIxMTM0MGU2
YTA3MjA3MmYxNDNlNWM0NmMyNDIuLmFhNzMyMzE5MGNmNDlkODhlM2ZmZTkxMmIxZTE2YWE0N2Q1
MGY5NGIgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGlu
ZWQtY2FsbC1hbmQtZXhpdC1zdHJpY3QuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvbG9hZC12YXJh
cmdzLXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qcwpAQCAtMTgsOCArMTgsOCBA
QCBmdW5jdGlvbiBjaGVja0VxdWFsKGEsIGIpIHsKICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQg
dmFsdWUgb2YgYTogIiArIGEuYSArICIgdmVyc3VzICIgKyBiLmE7CiAgICAgaWYgKGEuYiAhPSBi
LmIpCiAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGI6ICIgKyBhLmIgKyAiIHZl
cnN1cyAiICsgYi5iOwotICAgIGlmIChhLmMubGVuZ3RoICE9IGIuYy5sZW5ndGgpCi0gICAgICAg
IHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGMsIGxlbmd0aCBtaXNtYXRjaDogIiArIGEuYyAr
ICIgdmVyc3VzICIgKyBiLmM7CisgICAgaWYgKGEuYy5sZW5ndGggIT09IGIuYy5sZW5ndGgpCisg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGMsIGxlbmd0aCBtaXNtYXRjaDogIiAr
IGEuYy5sZW5ndGggKyAiIHZlcnN1cyAiICsgYi5jLmxlbmd0aDsKICAgICBmb3IgKHZhciBpID0g
YS5jLmxlbmd0aDsgaS0tOykgewogICAgICAgICBpZiAoYS5jW2ldICE9IGIuY1tpXSkKICAgICAg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGMsIG1pc21hdGNoIGF0IGkgPSAiICsg
aSArICI6ICIgKyBhLmMgKyAiIHZlcnN1cyAiICsgYi5jOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9z
dHJlc3MvcmVjdXJzaXZlLXRhaWwtY2FsbC13aXRoLWRpZmZlcmVudC1hcmd1bWVudC1jb3VudC5q
cyBiL0pTVGVzdHMvc3RyZXNzL3JlY3Vyc2l2ZS10YWlsLWNhbGwtd2l0aC1kaWZmZXJlbnQtYXJn
dW1lbnQtY291bnQuanMKaW5kZXggMDQ3ZmIwMWY4ODMxNDVjYzc1NTRmNWNmNzAxYTcwNzRmMjY3
ZGVlZS4uNTNkNzUyZGVjZDdkMGYzMWJjMmYxZDc4OTkxYzY5MTAxZjA4YmZmMyAxMDA2NDQKLS0t
IGEvSlNUZXN0cy9zdHJlc3MvcmVjdXJzaXZlLXRhaWwtY2FsbC13aXRoLWRpZmZlcmVudC1hcmd1
bWVudC1jb3VudC5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9yZWN1cnNpdmUtdGFpbC1jYWxsLXdp
dGgtZGlmZmVyZW50LWFyZ3VtZW50LWNvdW50LmpzCkBAIC0xOCw4ICsxOCw4IEBAIG5vSW5saW5l
KGJhcik7CiBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKICAgICB2YXIgcmVzdWx0
ID0gZm9vKDQwLCAyKTsKICAgICBpZiAocmVzdWx0ICE9PSA0MikKLSAgICAgICAgdGhyb3cgIldy
b25nIHJlc3VsdCBmb3IgZm9vLCBleHBlY3RlZCA0MiwgZ290ICIgKyByZXN1bHQ7CisgICAgICAg
IHRocm93IEVycm9yKCJXcm9uZyByZXN1bHQgZm9yIGZvbywgZXhwZWN0ZWQgNDIsIGdvdCAiICsg
cmVzdWx0KTsKICAgICByZXN1bHQgPSBiYXIoNDAsIDIpOwogICAgIGlmIChyZXN1bHQgIT09IDQy
KQotICAgICAgICB0aHJvdyAiV3JvbmcgcmVzdWx0IGZvciBiYXIsIGV4cGVjdGVkIDQyLCBnb3Qg
IiArIHJlc3VsdDsKKyAgICAgICAgdGhyb3cgRXJyb3IoIldyb25nIHJlc3VsdCBmb3IgYmFyLCBl
eHBlY3RlZCA0MiwgZ290ICIgKyByZXN1bHQpOwogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJl
c3MvcmVzdC12YXJhcmdzLW9zci1leGl0LXRvLWNoZWNrcG9pbnQuanMgYi9KU1Rlc3RzL3N0cmVz
cy9yZXN0LXZhcmFyZ3Mtb3NyLWV4aXQtdG8tY2hlY2twb2ludC5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44N2Jh
MDU1MWQzZWU5NDhmMDk0Y2YzODBmOGNlYmZjNjc5OTA0MmRjCi0tLSAvZGV2L251bGwKKysrIGIv
SlNUZXN0cy9zdHJlc3MvcmVzdC12YXJhcmdzLW9zci1leGl0LXRvLWNoZWNrcG9pbnQuanMKQEAg
LTAsMCArMSwyMSBAQAorInVzZSBzdHJpY3QiOworCitmdW5jdGlvbiBmb28oYSwgYiwgLi4ucmVz
dCkgeworICAgIHJldHVybiByZXN0Lmxlbmd0aDsKK30KKworZnVuY3Rpb24gYmFyKGEsIGIsIC4u
LnJlc3QpIHsKKyAgICByZXR1cm4gZm9vLmNhbGwoLi4ucmVzdCk7Cit9Citub0lubGluZShiYXIp
OworCitsZXQgYXJyYXkgPSBuZXcgQXJyYXkoMTApOworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7
ICsraSkgeworICAgIGxldCByZXN1bHQgPSBiYXIoLi4uYXJyYXkpOworICAgIGlmIChyZXN1bHQg
IT09IGFycmF5Lmxlbmd0aCAtIGJhci5sZW5ndGggLSBmb28ubGVuZ3RoIC0gMSkKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKGkgKyAiICIgKyByZXN1bHQpOworfQorCithcnJheS5sZW5ndGggPSAx
MDAwMDsKK2lmIChiYXIoLi4uYXJyYXkpICE9PSBhcnJheS5sZW5ndGggLSBiYXIubGVuZ3RoIC0g
Zm9vLmxlbmd0aCAtIDEpCisgICAgdGhyb3cgbmV3IEVycm9yKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387953</attachid>
            <date>2020-01-16 13:41:58 -0800</date>
            <delta_ts>2020-01-16 15:47:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206361-20200116134157.patch</filename>
            <type>text/plain</type>
            <size>744770</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0NzAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
ZjE4MmQwNmI3OWE5NTE3NDk5ZTVhMzMzMzk3ZDY1Y2M5NGYzMWQ4Li44OGNjMTg2NDZiMzAyYzgx
NjczZmU2OTJjZGM1N2JjZDNiZmYwMmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3ODAgQEAKKzIwMjAtMDEtMTYgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmVsYW5kIGJ5dGVjb2RlIGNoZWNrcG9pbnRzIHNpbmNlIGJ1Z3Mg
aGF2ZSBiZWVuIGZpeGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDYzNjEKKworICAgICAgICBVbnJldmlld2VkLCByZWxhbmQuCisKKyAgICAgICAg
VGhlIHdhdGNoIGJ1Z3MgaGF2ZSBiZWVuIGZpeGVkIGJ5IGh0dHBzOi8vdHJhYy53ZWJraXQub3Jn
L2NoYW5nZXNldC8yNTQ2NzQKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAq
IERlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJDb2RlUmVmLmg6CisgICAgICAgICogYXNzZW1ibGVyL1Byb2JlRnJhbWUuaDoKKyAg
ICAgICAgKEpTQzo6UHJvYmU6OkZyYW1lOjpvcGVyYW5kKToKKyAgICAgICAgKEpTQzo6UHJvYmU6
OkZyYW1lOjpzZXRPcGVyYW5kKToKKyAgICAgICAgKiBiMy90ZXN0YjMuaDoKKyAgICAgICAgKHBv
cHVsYXRlV2l0aEludGVyZXN0aW5nVmFsdWVzKToKKyAgICAgICAgKGZsb2F0aW5nUG9pbnRPcGVy
YW5kcyk6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHA6CisgICAgICAgIChKU0M6
OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZVNuaXBwZXRQYXJhbXMuY3BwOgorICAgICAgICAoSlNDOjpTbG93UGF0aENhbGxHZW5lcmF0b3JX
aXRoQXJndW1lbnRzOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2Rl
RHVtcGVyLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVEdW1wZXJCYXNlOjpkdW1wVmFsdWUp
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUR1bXBlcjxCbG9jaz46OnJlZ2lzdGVyTmFtZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6Y29uc3RhbnROYW1lIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6Qnl0ZWNvZGVEdW1wZXI6OmNvbnN0YW50TmFtZSBj
b25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaDoKKyAgICAgICAgKiBi
eXRlY29kZS9CeXRlY29kZUluZGV4LmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6
ZHVtcCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUluZGV4OjpCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVJbmRleDo6b2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6
Y2hlY2twb2ludCBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmFzQml0cyBj
b25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6Omhhc2ggY29uc3QpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUluZGV4OjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVJbmRleDo6cGFjayk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmZy
b21CaXRzKToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpc3QucmI6CisgICAgICAgICog
Ynl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcDoKKyAgICAgICAgKEpTQzo6ZW51
bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbCk6CisgICAgICAgIChKU0M6OnRtcExpdmVuZXNzRm9yQ2hl
Y2twb2ludCk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmg6
CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjp2aXJ0dWFsUmVnaXN0ZXJJc0Fsd2F5c0xpdmUpOgorICAgICAgICAoSlND
Ojp2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKToKKyAgICAgICAgKEpT
Qzo6dmlydHVhbFJlZ2lzdGVySXNMaXZlKToKKyAgICAgICAgKEpTQzo6b3BlcmFuZElzQWx3YXlz
TGl2ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Om9wZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZl
SXNMaXZlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmFuZElzTGl2ZSk6IERlbGV0ZWQu
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Ynl0ZWNvZGVJ
bmRleEZvckV4aXQgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmVuc3VyZUNhdGNo
TGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRleFNsb3cpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVz
cyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6bnVtVG1wcyBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aXNLbm93bk5v
dEltbWVkaWF0ZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aXNUZW1wb3JhcnlSZWdpc3Rl
cik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29uc3RhbnRSZWdpc3Rlcik6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6Z2V0Q29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpyZXBsYWNlQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmlzVGVtcG9yYXJ5UmVnaXN0ZXJJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6aXNDb25zdGFudFJlZ2lzdGVySW5kZXgpOiBEZWxldGVkLgorICAgICAgICAqIGJ5
dGVjb2RlL0NvZGVPcmlnaW4uaDoKKyAgICAgICAgKiBieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZl
bmVzcy5oOgorICAgICAgICAoSlNDOjpGdWxsQnl0ZWNvZGVMaXZlbmVzczo6dmlydHVhbFJlZ2lz
dGVySXNMaXZlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6Om9w
ZXJhbmRJc0xpdmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUNh
bGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OklubGluZUNhbGxGcmFt
ZSk6CisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6c2V0VG1wT2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6Q29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2sgY29uc3QpOgorICAgICAgICAo
SlNDOjpDb2RlT3JpZ2luOjppbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCBjb25z
dCk6CisgICAgICAgIChKU0M6OnJlbWFwT3BlcmFuZCk6CisgICAgICAgIChKU0M6OnVubWFwT3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oOgorICAg
ICAgICAoSlNDOjpMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleTo6TGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGVLZXkpOgorICAgICAgICAoSlNDOjpMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleTo6aGFz
aCBjb25zdCk6CisgICAgICAgIChKU0M6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5OjpvcGVy
YW5kIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlLmNwcDoKKyAgICAgICAgKEpTQzo6TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZnJv
bUxhenlPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZTo6ZW1pdFJlcG9ydFZhbHVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZTo6cmVwb3J0VmFsdWUpOgorICAgICAgICAqIGJ5dGVjb2RlL01ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKiBieXRlY29kZS9PcGVyYW5kcy5oOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kOjpPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6
dG1wKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6a2luZCBjb25zdCk6CisgICAgICAgIChKU0M6
Ok9wZXJhbmQ6OnZhbHVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6dmlydHVhbFJl
Z2lzdGVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6YXNCaXRzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6T3BlcmFuZDo6aXNUbXAgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
Ojppc0FyZ3VtZW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6aXNMb2NhbCBjb25z
dCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzSGVhZGVyIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6T3BlcmFuZDo6aXNDb25zdGFudCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OnRv
QXJndW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjp0b0xvY2FsIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6T3BlcmFuZDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6
Ok9wZXJhbmQ6OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjpmcm9tQml0
cyk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpPcGVyYW5kcyk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzOjpudW1iZXJPZkxvY2FscyBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpu
dW1iZXJPZlRtcHMgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6dG1wSW5kZXggY29u
c3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJndW1lbnRJbmRleCBjb25zdCk6CisgICAg
ICAgIChKU0M6Ok9wZXJhbmRzOjpsb2NhbEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3Bl
cmFuZHM6OnRtcCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjp0bXAgY29uc3QpOgorICAgICAg
ICAoSlNDOjpPcGVyYW5kczo6YXJndW1lbnQpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJn
dW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6bG9jYWwpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kczo6bG9jYWwgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2l6
ZUZvciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdEZvcik6CisgICAgICAgIChK
U0M6Ok9wZXJhbmRzOjphdEZvciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjplbnN1
cmVMb2NhbHMpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6ZW5zdXJlVG1wcyk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmRzOjpnZXRGb3JPcGVyYW5kSW5kZXgpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kczo6Z2V0Rm9yT3BlcmFuZEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6
Om9wZXJhbmRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kKToK
KyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpP
cGVyYW5kczo6aGFzT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpzZXRP
cGVyYW5kKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmF0IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6T3BlcmFuZHM6OmF0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhdG9yW10gY29u
c3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6
Ok9wZXJhbmRzOjpvcGVyYW5kRm9ySW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
czo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjppc0FyZ3VtZW50
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmlzTG9jYWwgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6dmlydHVhbFJlZ2lzdGVyRm9ySW5k
ZXggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2V0T3BlcmFuZEZp
cnN0VGltZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmg6
CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmR1bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kczxUPjo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzPFQ+
OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6
CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayk6Cisg
ICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6Omhhc0NoZWNrcG9pbnRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6OnNldEhhc0NoZWNrcG9pbnRzKToKKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2s6OmNvbnN0YW50UmVnaXN0ZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9jazo6Z2V0Q29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZENvZGVCbG9jazo6aXNDb25zdGFudFJlZ2lzdGVySW5kZXggY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI6OlZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rl
ckJ1ZmZlcik6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1
ZmZlcjo6flZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcik6CisgICAgICAgIChK
U0M6OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI6OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRC
dWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVm
ZmVyOjp+VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI6OmZvckVhY2gpOiBEZWxldGVkLgorICAg
ICAgICAqIGJ5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwOgorICAgICAgICAoSlNDOjpWYWx1ZVJl
Y292ZXJ5OjpyZWNvdmVyIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9WYWx1ZVJlY292ZXJ5
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmg6CisgICAgICAgIChKU0M6
OnZpcnR1YWxSZWdpc3RlcklzTG9jYWwpOgorICAgICAgICAoSlNDOjp2aXJ0dWFsUmVnaXN0ZXJJ
c0FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6VmlydHVhbFJlZ2lzdGVyOjpWaXJ0dWFsUmVnaXN0
ZXIpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzVmFsaWQgY29uc3QpOgorICAg
ICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzTG9jYWwgY29uc3QpOgorICAgICAgICAoSlND
OjpWaXJ0dWFsUmVnaXN0ZXI6OmlzQXJndW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpWaXJ0
dWFsUmVnaXN0ZXI6OmlzQ29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVn
aXN0ZXI6OnRvQ29uc3RhbnRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Om9wZXJhbmRJc0xv
Y2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmFuZElzQXJndW1lbnQpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplTmV4dFBhcmFtZXRlcik6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplUGFyYW1ldGVycyk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKToKKyAgICAgICAgKiBi
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OnNldFVzZXNDaGVja3BvaW50cyk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL1Jl
Z2lzdGVySUQuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJJRDo6c2V0SW5kZXgpOgorICAgICAg
ICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
SGVhcDo6UGF5bG9hZDo6ZHVtcEFzT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RIZWFwOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RIZWFw
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpQYXlsb2FkKToK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OkFic3RyYWN0SGVhcCk6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpvcGVyYW5kIGNvbnN0KToKKyAgICAgICAgKiBkZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAg
ICAgICAqIGRmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmg6CisgICAgICAgIChKU0M6OkRGRzo6QXJn
dW1lbnRQb3NpdGlvbjo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0
aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OmFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QpOgorICAgICAgICAo
SlNDOjpERkc6OmVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCk6CisgICAgICAgICog
ZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oOgorICAgICAgICAqIGRmZy9ERkdBdFRhaWxBYnN0
cmFjdFN0YXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6b3Bl
cmFuZCk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6QXZhaWxhYmlsaXR5TWFwOjpwcnVuZUJ5TGl2ZW5lc3MpOgorICAgICAgICAqIGRm
Zy9ERkdBdmFpbGFiaWxpdHlNYXAuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHlN
YXA6OmNsb3NlU3RhcnRpbmdXaXRoTG9jYWwpOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2Nr
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjplbnN1cmVUbXBzKToKKyAgICAgICAgKiBkZmcvREZH
QmFzaWNCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydCk6CisgICAgICAgICog
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6Qnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjplbnN1cmVUbXBzKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cHJvZ3Jl
c3NUb05leHRDaGVja3BvaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
bmV3VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6Z2V0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0KToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0RGlyZWN0KToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbik6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsT3JUbXApOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRMb2NhbE9yVG1wKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpmaW5kQXJndW1lbnRQb3NpdGlvbkZvckxvY2FsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6ZmluZEFyZ3VtZW50UG9zaXRpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaEltcGwpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaEZvclRlcm1pbmFsSW1wbCk6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZsdXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Zmx1c2hEaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjphZGRGbHVzaE9yUGhhbnRvbUxvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6cGhhbnRvbUxvY2FsRGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6Zmx1c2hGb3JUZXJtaW5hbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmFkZFRvR3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJ
bmxpbmVTdGFja0VudHJ5OjpyZW1hcE9wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpEZWxheWVkU2V0TG9jYWw6OkRlbGF5ZWRTZXRMb2NhbCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OkRlbGF5ZWRTZXRMb2NhbDo6ZXhlY3V0ZSk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVGFyZ2V0YWJsZUJs
b2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVVbnRhcmdl
dGFibGVCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVJl
Y3Vyc2l2ZVRhaWxDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aW5s
aW5lQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFy
Z3NJbmxpbmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlu
bGluaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6Oklu
bGluZVN0YWNrRW50cnkpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0TG9jYWwpOiBEZWxldGVk
LgorICAgICAgICAqIGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZB
UGhhc2U6OmluamVjdE9TUik6CisgICAgICAgICogZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OnJ1bik6CisgICAg
ICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplR2V0TG9jYWwp
OgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUZs
dXNoT3JQaGFudG9tTG9jYWxGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5n
UGhhc2U6OmNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWwpOgorICAgICAgICAoSlNDOjpE
Rkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZVNldCk6CisgICAgICAgIChKU0M6
OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplTG9jYWxzSW5CbG9jayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cHJvcGFnYXRlUGhpcyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cGhpU3RhY2tGb3IpOgorICAg
ICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGll
cy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y2FwYWJpbGl0eUxldmVsKToKKyAgICAgICAgKiBk
ZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAg
ICAgICAqIGRmZy9ERkdDb21iaW5lZExpdmVuZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjph
ZGRCeXRlY29kZUxpdmVuZXNzKToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6YWRkQ29kZU9yaWdpbik6CisgICAgICAgIChK
U0M6OkRGRzo6Q29tbW9uRGF0YTo6YWRkVW5pcXVlQ2FsbFNpdGVJbmRleCk6CisgICAgICAgIChK
U0M6OkRGRzo6Q29tbW9uRGF0YTo6bGFzdENhbGxTaXRlIGNvbnN0KToKKyAgICAgICAgKiBkZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50
Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGVJbXBsKToKKyAgICAgICAgKiBkZmcvREZH
Rml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2Rl
KToKKyAgICAgICAgKiBkZmcvREZHRm9yQWxsS2lsbHMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpm
b3JBbGxLaWxsZWRPcGVyYW5kcyk6CisgICAgICAgIChKU0M6OkRGRzo6Zm9yQWxsS2lsbGVkTm9k
ZXNBdE5vZGVJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6Zm9yQWxsS2lsbHNJbkJsb2NrKToK
KyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpk
dW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6c3Vic3RpdHV0ZUdldExvY2FsKToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6aXNMaXZlSW5CeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6
OmxvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6
Om1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IpOgorICAgICAgICAoSlNDOjpERkc6Okdy
YXBoOjpsb2NhbHNMaXZlSW5CeXRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0dy
YXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmZvckFsbExvY2Fsc0FuZFRtcHNMaXZl
SW5CeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmZvckFsbExpdmVJbkJ5dGVj
b2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6Zm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNv
ZGUpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6OkluUGxhY2VBYnN0cmFj
dFN0YXRlKToKKyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6b3BlcmFuZCk6CisgICAgICAgICog
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6
bGlua09TUkV4aXRzKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bm90aWNlT1NS
RW50cnkpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvbXBpbGVyOjplbWl0U3RvcmVDYWxsU2l0ZUluZGV4KToKKyAgICAgICAgKiBkZmcv
REZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6TGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZTo6aXNWYWxpZEZsdXNoTG9j
YXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkxpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9u
UGhhc2U6OmhhbmRsZUJsb2NrRm9yVHJ5Q2F0Y2gpOgorICAgICAgICAoSlNDOjpERkc6OkxpdmVD
YXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2U6Om5ld1ZhcmlhYmxlQWNjZXNzRGF0YSk6Cisg
ICAgICAgICogZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9E
RkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6U3RhY2tBY2Nlc3NEYXRhOjpTdGFja0FjY2Vz
c0RhdGEpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0FyZ3VtZW50c0NoaWxkKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjphcmd1bWVudHNDaGlsZCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6b3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzVW5saW5rZWRP
cGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp1bmxpbmtlZE9wZXJhbmQpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0xvYWRWYXJhcmdzRGF0YSk6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZTo6bG9jYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhh
c1VubGlua2VkTG9jYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnVubGlu
a2VkTG9jYWwpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAg
ICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlOjpydW4pOgorICAgICAgICAoSlND
OjpERkc6OkxvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUpOgorICAg
ICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZU9T
UkVudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlQ2F0Y2hPU1JFbnRyeSk6CisgICAg
ICAgICogZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcv
REZHT1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6ZW1pdFJlc3RvcmVB
cmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmNvbXBpbGVFeGl0KToKKyAg
ICAgICAgKEpTQzo6REZHOjpqc1ZhbHVlRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZH
OjpyZXN0b3JlQ2FsbGVlU2F2ZXNGb3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnNh
dmVDYWxsZWVTYXZlc0Zvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6cmVzdG9yZUNh
bGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpzYXZlT3JDb3B5Q2FsbGVlU2F2
ZXNGb3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OmNyZWF0ZURpcmVjdEFyZ3VtZW50
c0R1cmluZ0V4aXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OmNyZWF0ZUNsb25lZEFy
Z3VtZW50c0R1cmluZ0V4aXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OmVtaXRSZXN0
b3JlQXJndW1lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpleGVj
dXRlT1NSRXhpdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6cmVpZnlJbmxpbmVkQ2Fs
bEZyYW1lcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6YWRqdXN0QW5kSnVtcFRvVGFy
Z2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpwcmludE9TUkV4aXQpOiBEZWxldGVk
LgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Lmg6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRC
YXNlLmg6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdEJhc2U6OmlzRXhpdGluZ1RvQ2hlY2tw
b2ludEhhbmRsZXIgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhbGxlclJldHVyblBDKToKKyAgICAgICAgKEpT
Qzo6REZHOjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKEpTQzo6REZHOjphZGp1
c3RBbmRKdW1wVG9UYXJnZXQpOgorICAgICAgICAqIGRmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lu
a2luZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT3BJbmZvLmg6CisgICAgICAgIChKU0M6
OkRGRzo6T3BJbmZvOjpPcEluZm8pOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoK
KyAgICAgICAgKiBkZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBk
ZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OlByZWNp
c2VMb2NhbENsb2JiZXJpemVBZGFwdG9yOjpyZWFkKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVj
aXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6d3JpdGUpOgorICAgICAgICAoSlNDOjpERkc6OlBy
ZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9yOjpkZWYpOgorICAgICAgICAoSlNDOjpERkc6OlBy
ZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9yOjpjYWxsSWZBcHByb3ByaWF0ZSk6CisgICAgICAg
ICogZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJlZGljdGlvbkluamVjdGlvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1B1dFN0YWNrU2lu
a2luZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OnJ1bik6CisgICAgICAgICog
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRl
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2spOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFyYXJnc0xlbmd0aCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVGb3J3YXJkVmFyYXJncyk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVEaXJlY3RBcmd1bWVudHMpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpyZWNvcmRTZXRMb2NhbCk6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAg
ICAqIGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTdGFj
a0xheW91dFBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlN0YWNrTGF5b3V0UGhhc2U6
OmFzc2lnbik6CisgICAgICAgICogZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlN0cmVuZ3RoUmVkdWN0aW9uUGhhc2U6OmhhbmRsZU5vZGUpOgor
ICAgICAgICAqIGRmZy9ERkdUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om9zckV4aXRU
aHVua0dlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1RodW5rcy5oOgorICAg
ICAgICAqIGRmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlR5
cGVDaGVja0hvaXN0aW5nUGhhc2U6OmRpc2FibGVIb2lzdGluZ0Fjcm9zc09TUkVudHJpZXMpOgor
ICAgICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1ZhcmFyZ3NG
b3J3YXJkaW5nUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nl
c3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OnNob3VsZFVz
ZURvdWJsZUZvcm1hdEFjY29yZGluZ1RvVm90ZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFi
bGVBY2Nlc3NEYXRhOjp0YWxseVZvdGVzRm9yU2hvdWxkVXNlRG91YmxlRm9ybWF0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OmNvdWxkUmVwcmVzZW50SW50NTJJbXBs
KToKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg6CisgICAgICAgIChKU0M6
OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpvcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpW
YXJpYWJsZUFjY2Vzc0RhdGE6OmxvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHVmFy
aWFibGVFdmVudC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6ZHVtcCBj
b25zdCk6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpWYXJpYWJsZUV2ZW50OjpzcGlsbCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVF
dmVudDo6c2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om1vdkhp
bnQpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OnNwaWxsUmVnaXN0ZXIgY29u
c3QpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om9wZXJhbmQgY29uc3QpOgor
ICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OmJ5dGVjb2RlUmVnaXN0ZXIgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtOjpsb2dFdmVudCk6CisgICAgICAg
IChKU0M6OkRGRzo6VmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QgY29uc3QpOgorICAg
ICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmg6CisgICAgICAgIChKU0M6OkRGRzo6
VmFyaWFibGVFdmVudFN0cmVhbTo6YXBwZW5kQW5kTG9nKToKKyAgICAgICAgKiBmdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAg
KiBmdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpGb3JP
U1JFbnRyeUpJVENvZGU6OkZvck9TUkVudHJ5SklUQ29kZSk6CisgICAgICAgICogZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxv
d2VyKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5vZGUp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlRXh0cmFjdE9T
UkVudHJ5TG9jYWwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlR2V0U3RhY2spOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlR2V0Q2FsbGVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29t
cGlsZVNldENhbGxlZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNv
bXBpbGVTZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVWYXJhcmdzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUxvYWRWYXJhcmdzKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUZvcndhcmRWYXJhcmdzKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Z2V0U3ByZWFkTGVuZ3RoRnJvbUlubGlu
ZUNhbGxGcmFtZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBp
bGVGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0IzOjpjb21waWxlTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Z2V0QXJndW1lbnRzTGVuZ3RoKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Z2V0Q3VycmVudENhbGxlZSk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNhbGxQcmVmbGlnaHQpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphcHBlbmRPU1JFeGl0RGVzY3JpcHRvcik6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmJ1aWxkRXhpdEFyZ3VtZW50cyk6
CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFkZHJlc3NGb3IpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpwYXlsb2FkRm9yKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6dGFnRm9yKToKKyAgICAgICAgKiBmdGwvRlRM
T1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OnByZXBhcmVPU1JFbnRyeSk6CisgICAg
ICAgICogZnRsL0ZUTE9TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXREZXNj
cmlwdG9yOjpPU1JFeGl0RGVzY3JpcHRvcik6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoK
KyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRM
Ojpjb21waWxlU3R1Yik6CisgICAgICAgICogZnRsL0ZUTE9wZXJhdGlvbnMuY3BwOgorICAgICAg
ICAoSlNDOjpGVEw6Om9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IpOgorICAgICAgICAq
IGZ0bC9GVExPdXRwdXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6c2VsZWN0KToK
KyAgICAgICAgKiBmdGwvRlRMT3V0cHV0Lmg6CisgICAgICAgICogZnRsL0ZUTFNlbGVjdFByZWRp
Y3RhYmlsaXR5Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9y
T1NSRW50cnlKSVRDb2RlLmNwcC4KKyAgICAgICAgKiBmdGwvRlRMU2xvd1BhdGhDYWxsLmg6Cisg
ICAgICAgIChKU0M6OkZUTDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgICogZ2VuZXJhdG9yL0No
ZWNrcG9pbnRzLnJiOiBBZGRlZC4KKyAgICAgICAgKiBnZW5lcmF0b3IvT3Bjb2RlLnJiOgorICAg
ICAgICAqIGdlbmVyYXRvci9TZWN0aW9uLnJiOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6Cisg
ICAgICAgIChKU0M6OkhlYXA6OmdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyk6CisgICAgICAgICog
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpjYWxs
U2l0ZUFzUmF3Qml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5zYWZlQ2Fs
bFNpdGVBc1Jhd0JpdHMgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRl
SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRlSW5k
ZXggY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldEN1cnJlbnRWUEMpOgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWU6OmJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWU6OmNvZGVPcmlnaW4pOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgor
ICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpDYWxsU2l0ZUluZGV4KToKKyAgICAgICAgKEpT
Qzo6Q2FsbFNpdGVJbmRleDo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChKU0M6OkNh
bGxTaXRlSW5kZXg6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUlu
ZGV4OjpiaXRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6ZnJvbUJpdHMp
OgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpieXRlY29kZUluZGV4IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6RGlzcG9zYWJsZUNhbGxTaXRlSW5kZXg6OkRpc3Bvc2FibGVDYWxsU2l0ZUlu
ZGV4KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpjYWxsZWUgY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWU6OnVuc2FmZUNhbGxlZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxG
cmFtZTo6YWRkcmVzc09mQ29kZUJsb2NrIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1l
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxG
cmFtZTo6b2Zmc2V0Rm9yKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpzZXRBcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0UmV0dXJuUEMp
OgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6Q2FsbEZyYW1lOjpyKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjp1bmNoZWNrZWRSKToK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpndWFyYW50ZWVkSlNWYWx1ZUNhbGxlZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6anNDYWxsZWUgY29uc3QpOgorICAgICAgICAoSlND
OjpDYWxsRnJhbWU6OmNvZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6
dW5zYWZlQ29kZUJsb2NrIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpzZXRDYWxs
ZWUpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldENvZGVCbG9jayk6CisgICAgICAgICog
aW50ZXJwcmV0ZXIvQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaDogQ29waWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaC4KKyAgICAgICAgKiBpbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OmV2YWwpOgorICAgICAgICAoSlNDOjpz
aXplT2ZWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6bG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlND
OjpzZXR1cFZhcmFyZ3NGcmFtZSk6CisgICAgICAgIChKU0M6OlVud2luZEZ1bmN0b3I6Om9wZXJh
dG9yKCkgY29uc3QpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwpOgor
ICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdCk6CisgICAgICAgICog
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja1Zp
c2l0b3IuY3BwOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OnJlYWRJbmxpbmVkRnJhbWUp
OgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cik6CisgICAgICAgIChKU0M6
OkFzc2VtYmx5SGVscGVyczo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMik6CisgICAgICAg
IChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2NCk6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKToK
KyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXJC
ZWZvcmVQcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFB1dFBh
eWxvYWRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibHlIZWxwZXJzOjplbWl0UHV0VGFnVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZSk6
CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcik6CisgICAgICAgIChK
U0M6OkFzc2VtYmx5SGVscGVyczo6dGFnRm9yKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjpwYXlsb2FkRm9yKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVG
cmFtZVNsb3QpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50
U2xvdCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y2FsbGVlRnJhbWVUYWdTbG90
KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZVBheWxvYWRTbG90
KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZUNhbGxlckZyYW1l
KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjphcmd1bWVudENvdW50KToKKyAgICAg
ICAgKiBqaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVT
aHVmZmxlcjo6Q2FsbEZyYW1lU2h1ZmZsZXIpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVm
Zmxlci5oOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c2V0Q2FsbGVlSlNWYWx1
ZVJlZ3MpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6YXNzdW1lQ2FsbGVlSXND
ZWxsKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdW5zaWduZWQpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25l
ZEFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVt
cEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvd0ltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5jKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9tb2QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2JpdG5vdCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ0Zh
c3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2Rpdik6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxl
U2V0dXBGcmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAg
ICogaml0L0pJVEV4Y2VwdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmljVW53aW5kKToK
KyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFu
ZENvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjpnZXRDb25zdGFudE9wZXJhbmQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcik6CisgICAg
ICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1
bHQpOgorICAgICAgICAoSlNDOjpKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRK
U1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmtTbG93Q2Fz
ZUlmTm90SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFudENoYXIp
OgorICAgICAgICAoSlNDOjpKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludCk6CisgICAgICAgIChK
U0M6OkpJVDo6Z2V0T3BlcmFuZENvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0SW5pdFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZFRhZyk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdExvYWRQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
R2V0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0TG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWQyKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZERvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdExvYWRJbnQzMlRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTdG9yZUludDMyKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U3RvcmVDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmVCb29sKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U3RvcmVEb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29u
c3RhbnRJbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKToKKyAgICAgICAgKiBq
aXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb3YpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3Qp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lz
X2VtcHR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2lzX251bWJlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlw
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19vYmplY3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfcmV0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3ByaW1p
dGl2ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9ub3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfamZhbHNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2plcV9udWxsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9qdW5kZWZpbmVkX29yX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam51
bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX3B0cik6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9qZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXEp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpKSVQ6
OmNvbXBpbGVPcFN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BTdHJpY3RF
cUp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3RvX251bWVyaWMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfdG9fc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX29iamVjdCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9nZXRfcGFyZW50X3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRj
aF9pbW0pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25lcV9udWxsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2dldF9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b190aGlzKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2NoZWNrX3Rkeik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25lcSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfbmV3X3JlZ2V4cCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmNDb21t
b24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfbmV3X2FycmF5X3dpdGhfc2l6ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNf
c3RydWN0dXJlX3Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19pbmRl
eGVkX3Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhl
ZF9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1l
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1l
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2dldF9yZXN0X2xlbmd0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYXJndW1l
bnQpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAg
ICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
UHV0QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Rl
bF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X2lkX2RpcmVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX2RpcmVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRSZXNvbHZlQ2xvc3VyZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXNvbHZl
X3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldENsb3N1cmVWYXIpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX2dldF9mcm9tX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsVmFy
aWFibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0Q2xvc3VyZVZhcik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X2Zyb21fYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF90b19h
cmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRXcml0ZUJhcnJpZXIpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dEludFR5cGVkQXJyYXlQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlw
ZWRBcnJheVB1dEJ5VmFsKToKKyAgICAgICAgKiBqaXQvSlNJbnRlcmZhY2VKSVQuaDoKKyAgICAg
ICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSlNDZWxsKToKKyAgICAgICAgKEpTQzo6
SlNJbnRlcmZhY2VKSVQ6OmVtaXRKdW1wSWZOb3RKU0NlbGwpOgorICAgICAgICAoSlNDOjpKU0lu
dGVyZmFjZUpJVDo6ZW1pdExvYWRJbnQzMik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklU
OjplbWl0TG9hZERvdWJsZSk6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjpl
bWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6
ZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcik6CisgICAgICAgICogaml0L1NldHVwVmFyYXJn
c0ZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6ZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2Up
OgorICAgICAgICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6CisgICAgICAgIChKU0M6OlNw
ZWNpYWxpemVkVGh1bmtKSVQ6OmxvYWREb3VibGVBcmd1bWVudCk6CisgICAgICAgIChKU0M6OlNw
ZWNpYWxpemVkVGh1bmtKSVQ6OmxvYWRDZWxsQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpTcGVj
aWFsaXplZFRodW5rSklUOjpsb2FkSW50MzJBcmd1bWVudCk6CisgICAgICAgICogaml0L1RodW5r
R2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OmFic1RodW5rR2VuZXJhdG9yKToKKyAgICAg
ICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpnZXRO
b25Db25zdGFudE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpMTEludDo6Z2V0T3BlcmFuZCk6Cisg
ICAgICAgIChKU0M6OkxMSW50OjpnZW5lcmljQ2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50Ojp2
YXJhcmdzU2V0dXApOgorICAgICAgICAoSlNDOjpMTEludDo6Y29tbW9uQ2FsbEV2YWwpOgorICAg
ICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpM
TEludDo6aGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQpOgorICAgICAgICAoSlNDOjpMTEludDo6ZGlz
cGF0Y2hUb05leHRJbnN0cnVjdGlvbik6CisgICAgICAgIChKU0M6OkxMSW50OjpzbG93X3BhdGhf
Y2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbCk6CisgICAgICAgIChKU0M6OkxM
SW50OjpzbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdCk6CisgICAgICAgIChKU0M6OkxMSW50
OjpsbGludF90aHJvd19zdGFja19vdmVyZmxvd19lcnJvcik6CisgICAgICAgICogbGxpbnQvTExJ
bnRTbG93UGF0aHMuaDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToK
KyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICAq
IGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9BcmdM
aXN0Lmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyOjpmaWxsKToKKyAgICAg
ICAgKiBydW50aW1lL0NhY2hlZFR5cGVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJs
b2NrOjpoYXNDaGVja3BvaW50cyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJs
b2NrOjpVbmxpbmtlZENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazxD
b2RlQmxvY2tUeXBlPjo6ZW5jb2RlKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHA6CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1l
L0NvbnN0cnVjdERhdGEuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3QpOgorICAgICAgICAq
IHJ1bnRpbWUvQ29uc3RydWN0RGF0YS5oOgorICAgICAgICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1l
bnRzLmNwcDoKKyAgICAgICAgKEpTQzo6RGlyZWN0QXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMp
OgorICAgICAgICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmg6CisgICAgICAgICogcnVudGlt
ZS9HZW5lcmljQXJndW1lbnRzLmg6CisgICAgICAgICogcnVudGltZS9HZW5lcmljQXJndW1lbnRz
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9B
cmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5Lmg6
CisgICAgICAgICogcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHA6CisgICAgICAgIChK
U0M6OkpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaDoKKyAgICAgICAgKiBydW50aW1lL0pTTG9jay5j
cHA6CisgICAgICAgIChKU0M6OkpTTG9jazo6d2lsbFJlbGVhc2VMb2NrKToKKyAgICAgICAgKiBy
dW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6TW9kdWxl
UHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmNw
cDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucyk6CisgICAgICAgICog
cnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwOgorICAgICAgICAoSlNDOjpTY29wZWRBcmd1bWVu
dHM6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9TY29wZWRBcmd1bWVudHMu
aDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OnNjYW5TaWRl
U3RhdGUgY29uc3QpOgorICAgICAgICAoSlNDOjpWTTo6YWRkQ2hlY2twb2ludE9TUlNpZGVTdGF0
ZSk6CisgICAgICAgIChKU0M6OlZNOjpmaW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSk6CisgICAg
ICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6aGFzQ2hlY2twb2ludE9TUlNp
ZGVTdGF0ZSBjb25zdCk6CisgICAgICAgICogdG9vbHMvVk1JbnNwZWN0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpWTUluc3BlY3Rvcjo6ZHVtcFJlZ2lzdGVycyk6CisgICAgICAgICogd2FzbS9XYXNt
RnVuY3Rpb25Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxv
Y2s6OmdldENvbnN0YW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2Rl
QmxvY2s6OmdldENvbnN0YW50VHlwZSBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRH
ZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6c2V0VXNl
c0NoZWNrcG9pbnRzIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21PcGVyYXRpb25zLmNwcDoK
KyAgICAgICAgKEpTQzo6V2FzbTo6b3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRpb24pOgorICAgICAg
ICAqIHdhc20vV2FzbVNsb3dQYXRocy5jcHA6CisKIDIwMjAtMDEtMTYgIERvbiBPbG1zdGVhZCAg
PGRvbi5vbG1zdGVhZEBzb255LmNvbT4KIAogICAgICAgICBOb24tdW5pZmllZCBidWlsZCBmaXhl
cyBtaWQgSmFudWFyeSAyMDIwIGVkaXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggZjM2ZDY1NzA4MzVlNmQ4OGEyODlkNmIw
ZjljNzY2NzEyMDRmMmNiOS4uMzc1YzhiNjdmNDFkMDBkZGYwYmJjYmY1NmUxOGNkOGZjNTg4MDI5
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAyMC0wMS0xNiAgS2VpdGggTWlsbGVyICA8a2VpdGhf
bWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZWxhbmQgYnl0ZWNvZGUgY2hlY2twb2ludHMg
c2luY2UgYnVncyBoYXZlIGJlZW4gZml4ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwNjM2MQorCisgICAgICAgIFVucmV2aWV3ZWQsIHJlbGFuZC4K
KworICAgICAgICBUaGUgd2F0Y2ggYnVncyBoYXZlIGJlZW4gZml4ZWQgYnkgaHR0cHM6Ly90cmFj
LndlYmtpdC5vcmcvY2hhbmdlc2V0LzI1NDY3NAorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0JpdG1hcC5oOgorICAgICAgICAoV1RGOjpX
b3JkVHlwZT46OmludmVydCk6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6b3BlcmF0b3IpOgor
ICAgICAgICAoV1RGOjpXb3JkVHlwZT46Om9wZXJhdG9yIGNvbnN0IGNvbnN0KToKKyAgICAgICAg
KiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3RmL0VudW1DbGFzc09wZXJhdG9yT3Zl
cmxvYWRzLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9GYXN0Qml0VmVjdG9yLmg6CisgICAgICAg
IChXVEY6OkZhc3RCaXRSZWZlcmVuY2U6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAo
V1RGOjpGYXN0Qml0UmVmZXJlbmNlOjpvcGVyYXRvcnw9KToKKyAgICAgICAgKFdURjo6RmFzdEJp
dFJlZmVyZW5jZTo6b3BlcmF0b3ImPSk6CisgICAgICAgIChXVEY6OkZhc3RCaXRWZWN0b3I6OmZp
bGwpOgorICAgICAgICAoV1RGOjpGYXN0Qml0VmVjdG9yOjpncm93KToKKyAgICAgICAgKiB3dGYv
VW5hbGlnbmVkQWNjZXNzLmg6CisgICAgICAgIChXVEY6OnVuYWxpZ25lZExvYWQpOgorICAgICAg
ICAoV1RGOjp1bmFsaWduZWRTdG9yZSk6CisKIDIwMjAtMDEtMTYgIFNhbSBXZWluaWcgIDx3ZWlu
aWdAYXBwbGUuY29tPgogCiAgICAgICAgIFBsYXRmb3JtLmggaXMgb3V0IG9mIGNvbnRyb2wgUGFy
dCA2OiBTcGxpdCBVU0VfKiBtYWNybyBkZWZpbml0aW9ucyBvdXQgb2YgUGxhdGZvcm0uaCBhbmQg
aW50byBhIG5ldyBQbGF0Zm9ybVVzZS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQK
aW5kZXggYjkxN2JjNTg5MDY5NzVhMzQ3ZWVmMWE3YzVhNmJmMDVhOWM1NGI2Yi4uOTFlNDI3YzMw
YzUxMTYzZWRkOWYxMDZkNDJmOTVlMDlkMDJiZTljNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dApAQCAtNTI2LDYgKzUyNiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRF
X0ZSQU1FV09SS19IRUFERVJTCiAgICAgYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24u
aAogICAgIGJ5dGVjb2RlL09wY29kZS5oCiAgICAgYnl0ZWNvZGUvT3Bjb2RlU2l6ZS5oCisgICAg
Ynl0ZWNvZGUvT3BlcmFuZHMuaAogICAgIGJ5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgKICAg
ICBieXRlY29kZS9QdXRCeUlkRmxhZ3MuaAogICAgIGJ5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54
Y2ZpbGVsaXN0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0Lnhj
ZmlsZWxpc3QKaW5kZXggZjhjMWI0YWU1NTZiNTM0YzJhYjEwMWFjMzkwYmE3MTFiNDVjYmFlYS4u
OWVhZDY1M2ZhYWFiMTg5M2ViOTJkZDAyZTk3NTc5NjZkZmE5OWFjNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKQEAg
LTY0LDYgKzY0LDcgQEAgJChQUk9KRUNUX0RJUikvZGlzYXNzZW1ibGVyL3VkaXM4Ni9vcHRhYmxl
LnhtbAogJChQUk9KRUNUX0RJUikvZGlzYXNzZW1ibGVyL3VkaXM4Ni91ZF9pdGFiLnB5CiAkKFBS
T0pFQ1RfRElSKS9nZW5lcmF0b3IvQXJndW1lbnQucmIKICQoUFJPSkVDVF9ESVIpL2dlbmVyYXRv
ci9Bc3NlcnRpb24ucmIKKyQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9DaGVja3BvaW50cy5yYgog
JChQUk9KRUNUX0RJUikvZ2VuZXJhdG9yL0RTTC5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9y
L0ZpdHMucmIKICQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9HZW5lcmF0ZWRGaWxlLnJiCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDM5NDBmMWQzNGMzNGQ5YTAzYjUxZGNiNWNjOTU5
MjRhNWM3MWI5ZDguLjY2ZjkzNWRkYjE5MjllY2EzMmQ2ZmNlMTEyYjM5MTE2NjEyNzczOWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05MzEsNiArOTMxLDggQEAKIAkJNTMzM0JC
REIyMTEwRjdEMjAwNzYxOEVDIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY4ODBGMUIxNDMyOEJCOTAw
QjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwICovOyB9OwogCQk1MzMzQkJEQzIx
MTBGN0Q5MDA3NjE4RUMgLyogREZHU3BlY3VsYXRpdmVKSVQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQzlEQzIxMzI4REY4MjAwMkIyQUQ3IC8q
IERGR1NwZWN1bGF0aXZlSklULmNwcCAqLzsgfTsKIAkJNTMzM0JCREQyMTEwRjdFMTAwNzYxOEVD
IC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODY4ODBGNEMxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0
aXZlSklUNjQuY3BwICovOyB9OworCQk1MzM4RTJBNzIzOTZFRkZCMDBDNjFCQUQgLyogQ2hlY2tw
b2ludE9TUkV4aXRTaWRlU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzMzhFMkE2MjM5NkVGRUMwMEM2MUJBRCAvKiBDaGVja3BvaW50T1NSRXhp
dFNpZGVTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTUzMzhFQkEzMjNBQjA0QjgwMDM4MjY2MiAvKiBGVExTZWxlY3RQcmVkaWN0YWJpbGl0
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMzOEVC
QTIyM0FCMDRBMzAwMzgyNjYyIC8qIEZUTFNlbGVjdFByZWRpY3RhYmlsaXR5LmggKi87IH07CiAJ
CTUzNDFGQzcyMURBQzM0M0MwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQxRkM3MTFEQUMz
NDNDMDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oICovOyB9OwogCQk1MzQ2Mzg3
MTFFNzBDRjNEMDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYzODcwMUU3MENGM0QwMEYxMkFDMSAvKiBK
U1J1bkxvb3BUaW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTUzNDYzODc1MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlVGltZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYzODc0MUU3MERE
RUMwMEYxMkFDMSAvKiBQcm9taXNlVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzYwMSw2ICszNjAzLDggQEAKIAkJNTMxODA0NUQyMkVB
QUYwRjAwNEE3MzQyIC8qIEIzRXh0cmFjdFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIz
RXh0cmFjdFZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzRXh0cmFjdFZhbHVlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMxRDRFMTkxRjU5Q0REMjAwRUM4MzZDIC8qIHRlc3RhcGku
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGFwaS5jcHA7IHBhdGggPSBBUEkvdGVzdHMvdGVz
dGFwaS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMjYzMUIzMjE4Nzc3QTUw
MDdCODE5MSAvKiBKYXZhU2NyaXB0Q29yZS5tb2R1bGVtYXAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSAic291cmNlY29k
ZS5tb2R1bGUtbWFwIjsgcGF0aCA9IEphdmFTY3JpcHRDb3JlLm1vZHVsZW1hcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMzOEUyQTYyMzk2RUZFQzAwQzYxQkFEIC8qIENoZWNrcG9p
bnRPU1JFeGl0U2lkZVN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENo
ZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUzMzhFQkEyMjNBQjA0QTMwMDM4MjY2MiAvKiBGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5o
OyBwYXRoID0gZnRsL0ZUTFNlbGVjdFByZWRpY3RhYmlsaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUzM0IxNURFMURDN0Y0NjMwMDRENTAwQSAvKiBXYXNtT3BzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21PcHMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTM0MUZDNkYxREFDMzNFNTAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNr
VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNXYXNtQm91
bmRzQ2hlY2tWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0MUZDNzExREFDMzQzQzAwRTdFNEQ3IC8q
IEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oOyBwYXRoID0gYjMvQjNXYXNtQm91bmRzQ2hlY2tW
YWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzYxNSw2ICszNjE5LDkgQEAK
IAkJNTM0QzQ1N0ExQkM3MDNEQzAwNzQ3NkE3IC8qIFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qcyAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFR5cGVkQXJyYXlDb25zdHJ1
Y3Rvci5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0QzQ1N0IxQkM3MjQxMTAw
NzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0QzQ1N0QxQkM3MjU0OTAwNzQ3NkE3IC8qIEpTVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1MzREOUJGODIzNjNDNTVEMDA1NDUyNEQgLyogU2V0SXRlcmF0b3JQcm90b3R5
cGUuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBTZXRJdGVyYXRv
clByb3RvdHlwZS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0RDlCRjkyMzYz
QzU1RDAwNTQ1MjREIC8qIEl0ZXJhdG9ySGVscGVycy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
amF2YXNjcmlwdDsgcGF0aCA9IEl0ZXJhdG9ySGVscGVycy5qczsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTM0RDlCRkEyMzYzQzU1RDAwNTQ1MjREIC8qIE1hcEl0ZXJhdG9yUHJvdG90
eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gTWFwSXRlcmF0
b3JQcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEUwMzREMUU0
RDRCMTYwMDIxM0Y2NCAvKiBBY2Nlc3NDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFjY2Vzc0Nhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0RTAz
NEYxRTREOTVFRDAwMjEzRjY0IC8qIEFjY2Vzc0Nhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzQ2FzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUzNEUwMzUzMUU1M0JEMjkwMDIxM0Y2NCAvKiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3ND
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludHJpbnNpY0dldHRlckFj
Y2Vzc0Nhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU1MzQsNiArNTU0MSw3
IEBACiAJCQkJMEY0ODUzMjYxODdERkRFQzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmgg
Ki8sCiAJCQkJMEZDRUZBQTkxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCAq
LywKIAkJCQkwRkNFRkFBQTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuaCAqLywK
KwkJCQk1MzM4RUJBMjIzQUIwNEEzMDAzODI2NjIgLyogRlRMU2VsZWN0UHJlZGljdGFiaWxpdHku
aCAqLywKIAkJCQkwRjI1RjFBQTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmNw
cCAqLywKIAkJCQkwRjI1RjFBQjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmgg
Ki8sCiAJCQkJMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5j
cHAgKi8sCkBAIC01OTYwLDYgKzU5NjgsNyBAQAogCQkJCTE0MjlEOERDMEVEMjIwNUIwMEI4OTYx
OSAvKiBDYWxsRnJhbWUuaCAqLywKIAkJCQlBN0Y4NjlFQzBGOTVDMkVDMDA1NTg2OTcgLyogQ2Fs
bEZyYW1lQ2xvc3VyZS5oICovLAogCQkJCUZFQTNCQkE3MjEyQjY1NTgwMEU5M0FEMSAvKiBDYWxs
RnJhbWVJbmxpbmVzLmggKi8sCisJCQkJNTMzOEUyQTYyMzk2RUZFQzAwQzYxQkFEIC8qIENoZWNr
cG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggKi8sCiAJCQkJMTQyOUQ4NUIwRUQyMThFOTAwQjg5NjE5
IC8qIENMb29wU3RhY2suY3BwICovLAogCQkJCTE0RDc5MjY0MERBQTAzRkIwMDFBOUYwNSAvKiBD
TG9vcFN0YWNrLmggKi8sCiAJCQkJQTdDMUVBRUIxNzk4N0FCNjAwMjk5REIyIC8qIENMb29wU3Rh
Y2tJbmxpbmVzLmggKi8sCkBAIC04NjAwLDcgKzg2MDksOSBAQAogCQkJCUE1MjcwNDg1MUQwMjdD
ODgwMDM1NEMzNyAvKiBHbG9iYWxPcGVyYXRpb25zLmpzICovLAogCQkJCUUzNUUwMzYxMUI3QUI0
ODUwMDczQUQyQSAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuanMgKi8sCiAJCQkJ
RTMzRjUwODgxQjg0NEExQTAwNDEzODU2IC8qIEludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmpz
ICovLAorCQkJCTUzNEQ5QkY5MjM2M0M1NUQwMDU0NTI0RCAvKiBJdGVyYXRvckhlbHBlcnMuanMg
Ki8sCiAJCQkJN0NGOUJDNUIxQjY1RDlBMzAwOURCMUVGIC8qIEl0ZXJhdG9yUHJvdG90eXBlLmpz
ICovLAorCQkJCTUzNEQ5QkZBMjM2M0M1NUQwMDU0NTI0RCAvKiBNYXBJdGVyYXRvclByb3RvdHlw
ZS5qcyAqLywKIAkJCQk3MDM1NTg3QzFDNDE4NDE5MDA0QkQ3QkYgLyogTWFwUHJvdG90eXBlLmpz
ICovLAogCQkJCUUzMDY3Nzk3MUI4QkM2RjUwMDNGODdGMCAvKiBNb2R1bGVMb2FkZXIuanMgKi8s
CiAJCQkJQTUyNzA0ODYxRDAyN0M4ODAwMzU0QzM3IC8qIE51bWJlckNvbnN0cnVjdG9yLmpzICov
LApAQCAtODYxMSw2ICs4NjIyLDcgQEAKIAkJCQk3Q0Y5QkM1RjFCNjVEOUIxMDA5REIxRUYgLyog
UmVmbGVjdE9iamVjdC5qcyAqLywKIAkJCQk2NTQ3ODg0MjFDOTM3RDJDMDAwNzgxQTAgLyogUmVn
RXhwUHJvdG90eXBlLmpzICovLAogCQkJCTg0OTI1QTlDMjJCMzBDQzgwMEQxREZGRiAvKiBSZWdF
eHBTdHJpbmdJdGVyYXRvclByb3RvdHlwZS5qcyAqLywKKwkJCQk1MzREOUJGODIzNjNDNTVEMDA1
NDUyNEQgLyogU2V0SXRlcmF0b3JQcm90b3R5cGUuanMgKi8sCiAJCQkJNzAzNTU4N0QxQzQxODQx
OTAwNEJEN0JGIC8qIFNldFByb3RvdHlwZS5qcyAqLywKIAkJCQk3Q0Y5QkM2MDFCNjVEOUIxMDA5
REIxRUYgLyogU3RyaW5nQ29uc3RydWN0b3IuanMgKi8sCiAJCQkJN0NGOUJDNjExQjY1RDlCMTAw
OURCMUVGIC8qIFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmpzICovLApAQCAtOTExMyw2ICs5MTI1
LDcgQEAKIAkJCQlGRTFCRDAyMTFFNzIwMjc5MDAxMzRCQzkgLyogQ2VsbFByb2ZpbGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUZFQzE2MDMyMjMzOUU5RjkwMEEwNENCOCAvKiBDZWxsU2l6ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYxQzNEREExQkJDRTA5RTAwRTUyM0U0IC8qIENlbGxTdGF0ZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNTMzOEUyQTcyMzk2RUZGQjAwQzYxQkFEIC8qIENoZWNrcG9p
bnRPU1JFeGl0U2lkZVN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzZBQUFFNTBFMUY0MjY1
MDBBRDg3RDggLyogQ2xhc3NJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAyNjFBQTkw
OTU2MDBEMzNCMzMgLyogQ2xvbmVkQXJndW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzQ1RTBFMTZGNUNEMDBCMzQ0NjAgLyogQ0xvb3BTdGFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC05
NDU4LDYgKzk0NzEsNyBAQAogCQkJCTBGOUQ0QzExMUMzRTJDNzQwMDZDRDk4NCAvKiBGVExQYXRj
aHBvaW50RXhjZXB0aW9uSGFuZGxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ4NTMyQTE4N0RG
REVDMDA4M0I2ODcgLyogRlRMUmVjb3ZlcnlPcGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
Q0VGQUFDMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNTMzOEVCQTMyM0FCMDRCODAwMzgyNjYyIC8qIEZUTFNlbGVjdFByZWRpY3RhYmlsaXR5
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI1RjFCMjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xv
d1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI1RjFCNDE4MTYzNUYzMDA1MjJGMzkg
LyogRlRMU2xvd1BhdGhDYWxsS2V5LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzIyRTVBNzFEQTY0
NEE4MDA2RTc3MDkgLyogRlRMU25pcHBldFBhcmFtcy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJl
Zi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVS
ZWYuaAppbmRleCA1NmQ4YTA3ZGJmY2RlZmRlYzc2MDg5YTEzZGZiNTAxMWI2NGIyNWQzLi42ODg0
MDgzZTBmYzE3NmEyMTNjZDY2ODI3NjRiMmY0ZWIzMGM2ZjZjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKQEAg
LTIzOSwxMyArMjM5LDYgQEAgcHVibGljOgogICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lO
VEVSKG1fdmFsdWUpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+Ci0gICAgZXhw
bGljaXQgUmV0dXJuQWRkcmVzc1B0cihGdW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9uKQotICAgICAg
ICA6IG1fdmFsdWUodW50YWdDb2RlUHRyPHRhZz4oZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3Mo
KSkpCi0gICAgewotICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwot
ICAgIH0KLQogICAgIGNvbnN0IHZvaWQqIHZhbHVlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJl
dHVybiBtX3ZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9Qcm9iZUZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlRnJh
bWUuaAppbmRleCBjYWIzNjhkYzdjZDBmM2I0Zjg1Yjc2OWI3ODhkNDBkNjNlYTU2Mzc3Li40MjI5
YTBkMDk5N2E0YjBmNTgzYWNhZWEzYTBmMTY1NzI5ZjQ2ZTA1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlRnJhbWUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlRnJhbWUuaApAQCAtNDYsMTQgKzQ2LDE0IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIGdldDxUPihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3Vt
ZW50KSAqIHNpemVvZihSZWdpc3RlcikpOwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
ID0gSlNWYWx1ZT4KLSAgICBUIG9wZXJhbmQoaW50IG9wZXJhbmQpCisgICAgVCBvcGVyYW5kKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdldDxUPihzdGF0
aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lz
dGVyKSk7CisgICAgICAgIHJldHVybiBnZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVvZihS
ZWdpc3RlcikpOwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KLSAg
ICBUIG9wZXJhbmQoaW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQpCisgICAgVCBvcGVyYW5k
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0KQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGdldDxUPihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpLm9m
ZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIG9mZnNldCk7CisgICAgICAgIHJldHVybiBnZXQ8
VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBvZmZzZXQpOwogICAgIH0K
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC02MiwxNCArNjIsMTQgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gc2V0PFQ+KENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1lbnQp
ICogc2l6ZW9mKFJlZ2lzdGVyKSwgdmFsdWUpOwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotICAgIHZvaWQgc2V0T3BlcmFuZChpbnQgb3BlcmFuZCwgVCB2YWx1ZSkKKyAgICB2b2lk
IHNldE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIFQgdmFsdWUpCiAgICAgewotICAg
ICAgICBzZXQ8VD4oc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKS5vZmZzZXQo
KSAqIHNpemVvZihSZWdpc3RlciksIHZhbHVlKTsKKyAgICAgICAgc2V0PFQ+KG9wZXJhbmQub2Zm
c2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpLCB2YWx1ZSk7CiAgICAgfQogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZXRPcGVyYW5kKGludCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zm
c2V0LCBUIHZhbHVlKQorICAgIHZvaWQgc2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCwgcHRyZGlmZl90IG9mZnNldCwgVCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHNldDxUPihzdGF0
aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lz
dGVyKSArIG9mZnNldCwgdmFsdWUpOworICAgICAgICBzZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAq
IHNpemVvZihSZWdpc3RlcikgKyBvZmZzZXQsIHZhbHVlKTsKICAgICB9CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy90ZXN0YjMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAppbmRleCAz
NWQwMTc1NmQ1MzJhNzFlYzA3ZmU0MDNlZjdhNTI1MGI1ZmM2ZjYxLi40MWJjOTYxYTE1MzA4NWZi
YTg1NTA2NWMzOWI2YzZkYTZmYjJhODBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCkBA
IC0yNjMsMjAgKzI2MywyMCBAQCBpbmxpbmUgdm9pZCBjaGVja0RvZXNOb3RVc2VJbnN0cnVjdGlv
bihDb21waWxhdGlvbiYgY29tcGlsYXRpb24sIGNvbnN0IGNoYXIqIHRleAogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUeXBlPgotc3RydWN0IE9wZXJhbmQgeworc3RydWN0IEIzT3BlcmFuZCB7CiAg
ICAgY29uc3QgY2hhciogbmFtZTsKICAgICBUeXBlIHZhbHVlOwogfTsKIAotdHlwZWRlZiBPcGVy
YW5kPGludDY0X3Q+IEludDY0T3BlcmFuZDsKLXR5cGVkZWYgT3BlcmFuZDxpbnQzMl90PiBJbnQz
Mk9wZXJhbmQ7Ci10eXBlZGVmIE9wZXJhbmQ8aW50MTZfdD4gSW50MTZPcGVyYW5kOwotdHlwZWRl
ZiBPcGVyYW5kPGludDhfdD4gSW50OE9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQ2NF90
PiBJbnQ2NE9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQzMl90PiBJbnQzMk9wZXJhbmQ7
Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQxNl90PiBJbnQxNk9wZXJhbmQ7Cit0eXBlZGVmIEIzT3Bl
cmFuZDxpbnQ4X3Q+IEludDhPcGVyYW5kOwogCi0jZGVmaW5lIE1BS0VfT1BFUkFORCh2YWx1ZSkg
T3BlcmFuZDxkZWNsdHlwZSh2YWx1ZSk+IHsgI3ZhbHVlLCB2YWx1ZSB9CisjZGVmaW5lIE1BS0Vf
T1BFUkFORCh2YWx1ZSkgQjNPcGVyYW5kPGRlY2x0eXBlKHZhbHVlKT4geyAjdmFsdWUsIHZhbHVl
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRmxvYXRUeXBlPgotdm9pZCBwb3B1bGF0ZVdpdGhJbnRl
cmVzdGluZ1ZhbHVlcyhWZWN0b3I8T3BlcmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMpCit2b2lk
IHBvcHVsYXRlV2l0aEludGVyZXN0aW5nVmFsdWVzKFZlY3RvcjxCM09wZXJhbmQ8RmxvYXRUeXBl
Pj4mIG9wZXJhbmRzKQogewogICAgIG9wZXJhbmRzLmFwcGVuZCh7ICIwLiIsIHN0YXRpY19jYXN0
PEZsb2F0VHlwZT4oMC4pIH0pOwogICAgIG9wZXJhbmRzLmFwcGVuZCh7ICItMC4iLCBzdGF0aWNf
Y2FzdDxGbG9hdFR5cGU+KC0wLikgfSk7CkBAIC0zMDIsOSArMzAyLDkgQEAgdm9pZCBwb3B1bGF0
ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhWZWN0b3I8T3BlcmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFu
ZHMpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZsb2F0VHlwZT4KLVZlY3RvcjxPcGVyYW5kPEZs
b2F0VHlwZT4+IGZsb2F0aW5nUG9pbnRPcGVyYW5kcygpCitWZWN0b3I8QjNPcGVyYW5kPEZsb2F0
VHlwZT4+IGZsb2F0aW5nUG9pbnRPcGVyYW5kcygpCiB7Ci0gICAgVmVjdG9yPE9wZXJhbmQ8Rmxv
YXRUeXBlPj4gb3BlcmFuZHM7CisgICAgVmVjdG9yPEIzT3BlcmFuZDxGbG9hdFR5cGU+PiBvcGVy
YW5kczsKICAgICBwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhvcGVyYW5kcyk7CiAgICAg
cmV0dXJuIG9wZXJhbmRzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BY2Nlc3NDYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlLmNwcAppbmRleCBjOGI1MmI4ODI2YWU5ODIyOGVlODQ0NDk2YjFlZTdhOGU5YTdk
MzNhLi44OTRkMzcyMWIyZDJmMzg1ZTlmZmExM2U5NTVhNzQ1YTBhYWE1NTNiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCkBAIC0xNTIwLDcgKzE1
MjAsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3Rh
dGUmIHN0YXRlKQogCiAgICAgICAgIGppdC5zdG9yZTMyKAogICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5n
T3JPcmlnaW5hbCgpLmJpdHMoKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0Zvcihz
dGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKSkpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKIAogICAgICAgICBpZiAobV90
eXBlID09IEdldHRlciB8fCBtX3R5cGUgPT0gU2V0dGVyKSB7CiAgICAgICAgICAgICBhdXRvJiBh
Y2Nlc3MgPSB0aGlzLT5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpOwpAQCAtMTYwNCwxMyAr
MTYwNCwxMyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9u
U3RhdGUmIHN0YXRlKQogCiAgICAgICAgICAgICBqaXQuc3RvcmVDZWxsKAogICAgICAgICAgICAg
ICAgIHRoaXNHUFIsCi0gICAgICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpKTsK
KyAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50SW5jbHVkaW5nVGhpcygwKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpKTsK
IAogICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBTZXR0ZXIpIHsKICAgICAgICAgICAgICAgICBq
aXQuc3RvcmVWYWx1ZSgKICAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAogICAgICAgICAg
ICAgICAgICAgICBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICAg
ICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0
ZXIpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dEluY2x1ZGluZ1RoaXMoMSkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93Q2FzZSA9IGppdC5i
cmFuY2hQdHJXaXRoUGF0Y2goCkBAIC0xODA5LDcgKzE4MDksNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6
OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAg
ICAgIGppdC5zdG9yZTMyKAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmNhbGxTaXRlSW5kZXhGb3JF
eGNlcHRpb25IYW5kbGluZ09yT3JpZ2luYWwoKS5iaXRzKCkpLAotICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpOworICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcykpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGppdC5tYWtl
U3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICAgICAgICAgICAgICAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZVNuaXBwZXRQYXJhbXMu
Y3BwCmluZGV4IGIxZDQwNGExNDViZDIxNDFiM2EwYTljNDMxOTE4YTU4ZjlhZjE4OWYuLjY5YjVl
ZTEwNmIyZTgxNzU1Nzc3OTcxYmUyNzE0YzRhMWE5OGNiYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNw
cApAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgaml0LnN0b3JlMzIoCiAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0ZS5jYWxsU2l0ZUluZGV4Rm9y
RXhjZXB0aW9uSGFuZGxpbmdPck9yaWdpbmFsKCkuYml0cygpKSwKLSAgICAgICAgICAgIENDYWxs
SGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7CisgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwog
CiAgICAgICAgIGppdC5tYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAKaW5kZXggNjA1OGZi
MDYyMDM5NDZjNGNkNTZlZjZhOTgzODc5ZDJkNmM4MWZiNi4uODM2NTExNWY0MjE3OTFhNWM2NjQ4
M2E1YTc5MDVjYWU1YzBlZTNlMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgQnl0ZWNvZGVE
dW1wZXJCYXNlOjpwcmludExvY2F0aW9uQW5kT3AoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBs
b2NhdGlvbiwKIAogdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OmR1bXBWYWx1ZShWaXJ0dWFsUmVn
aXN0ZXIgcmVnKQogewotICAgIG1fb3V0LnByaW50ZigiJXMiLCByZWdpc3Rlck5hbWUocmVnLm9m
ZnNldCgpKS5kYXRhKCkpOworICAgIG1fb3V0LnByaW50ZigiJXMiLCByZWdpc3Rlck5hbWUocmVn
KS5kYXRhKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUcmFpdHM+CkBAIC04MywxMiArODMs
MTIgQEAgdGVtcGxhdGUgdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OmR1bXBWYWx1ZShHZW5lcmlj
Qm91bmRMYWJlbDxXYXNtOjpHZW5lcmF0b3JUcmEKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgotQ1N0cmluZyBCeXRlY29kZUR1bXBlcjxCbG9j
az46OnJlZ2lzdGVyTmFtZShpbnQgcikgY29uc3QKK0NTdHJpbmcgQnl0ZWNvZGVEdW1wZXI8Qmxv
Y2s+OjpyZWdpc3Rlck5hbWUoVmlydHVhbFJlZ2lzdGVyIHIpIGNvbnN0CiB7Ci0gICAgaWYgKGlz
Q29uc3RhbnRSZWdpc3RlckluZGV4KHIpKQorICAgIGlmIChyLmlzQ29uc3RhbnQoKSkKICAgICAg
ICAgcmV0dXJuIGNvbnN0YW50TmFtZShyKTsKIAotICAgIHJldHVybiB0b0NTdHJpbmcoVmlydHVh
bFJlZ2lzdGVyKHIpKTsKKyAgICByZXR1cm4gdG9DU3RyaW5nKHIpOwogfQogCiB0ZW1wbGF0ZSA8
Y2xhc3MgQmxvY2s+CkBAIC05OCwxMCArOTgsMTAgQEAgaW50IEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
Pjo6b3V0T2ZMaW5lSnVtcE9mZnNldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IG9mZnNldCkK
IH0KIAogdGVtcGxhdGU8Y2xhc3MgQmxvY2s+Ci1DU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
Pjo6Y29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3QKK0NTdHJpbmcgQnl0ZWNvZGVEdW1wZXI8
QmxvY2s+Ojpjb25zdGFudE5hbWUoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKIHsKLSAgICBh
dXRvIHZhbHVlID0gYmxvY2soKS0+Z2V0Q29uc3RhbnQoaW5kZXgpOwotICAgIHJldHVybiB0b0NT
dHJpbmcodmFsdWUsICIoIiwgVmlydHVhbFJlZ2lzdGVyKGluZGV4KSwgIikiKTsKKyAgICBhdXRv
IHZhbHVlID0gYmxvY2soKS0+Z2V0Q29uc3RhbnQocmVnKTsKKyAgICByZXR1cm4gdG9DU3RyaW5n
KHZhbHVlLCAiKCIsIHJlZywgIikiKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgQmxvY2s+CkBAIC0z
MzUsNyArMzM1LDcgQEAgdm9pZCBCeXRlY29kZUR1bXBlcjo6ZHVtcENvbnN0YW50cygpCiAgICAg
fQogfQogCi1DU3RyaW5nIEJ5dGVjb2RlRHVtcGVyOjpjb25zdGFudE5hbWUoaW50IGluZGV4KSBj
b25zdAorQ1N0cmluZyBCeXRlY29kZUR1bXBlcjo6Y29uc3RhbnROYW1lKFZpcnR1YWxSZWdpc3Rl
ciBpbmRleCkgY29uc3QKIHsKICAgICBGdW5jdGlvbkNvZGVCbG9jayogYmxvY2sgPSB0aGlzLT5i
bG9jaygpOwogICAgIGF1dG8gdmFsdWUgPSBmb3JtYXRDb25zdGFudChibG9jay0+Z2V0Q29uc3Rh
bnRUeXBlKGluZGV4KSwgYmxvY2stPmdldENvbnN0YW50KGluZGV4KSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCmluZGV4IDBkNzE2NzUwMzk0
YjE1ZDRlYjVlODdjNWE4ODI1MTA3NWVmZTAzZWUuLmVkYjExMjkyMWFmNzUzZTYzZDg2MTM3MmZi
ZGUwZWVmODlmY2ExNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUR1bXBlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUR1bXBlci5oCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXBW
YWx1ZShUIHYpIHsgbV9vdXQucHJpbnQodik7IH0KIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwg
Q1N0cmluZyByZWdpc3Rlck5hbWUoaW50KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBDU3RyaW5n
IHJlZ2lzdGVyTmFtZShWaXJ0dWFsUmVnaXN0ZXIpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGlu
dCBvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQpIGNvbnN0ID0g
MDsKIAogICAgIEJ5dGVjb2RlRHVtcGVyQmFzZShQcmludFN0cmVhbSYgb3V0KQpAQCAtOTEsMTEg
KzkxLDExIEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgZHVtcEJ5dGVjb2RlKGNvbnN0IEluc3Ry
dWN0aW9uU3RyZWFtOjpSZWYmIGl0LCBjb25zdCBJQ1N0YXR1c01hcCYpOwogCi0gICAgQ1N0cmlu
ZyByZWdpc3Rlck5hbWUoaW50IHIpIGNvbnN0IG92ZXJyaWRlOworICAgIENTdHJpbmcgcmVnaXN0
ZXJOYW1lKFZpcnR1YWxSZWdpc3RlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgaW50IG91dE9mTGlu
ZUp1bXBPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZzZXQpIGNvbnN0IG92ZXJy
aWRlOwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgQ1N0cmluZyBjb25zdGFudE5hbWUoaW50IGlu
ZGV4KSBjb25zdDsKKyAgICB2aXJ0dWFsIENTdHJpbmcgY29uc3RhbnROYW1lKFZpcnR1YWxSZWdp
c3RlcikgY29uc3Q7CiAKICAgICBCbG9jayogbV9ibG9jazsKIH07CkBAIC0xMzUsNyArMTM1LDcg
QEAgcHJpdmF0ZToKICAgICB1c2luZyBKU0M6OkJ5dGVjb2RlRHVtcGVyPEZ1bmN0aW9uQ29kZUJs
b2NrPjo6Qnl0ZWNvZGVEdW1wZXI7CiAKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKLSAgICBD
U3RyaW5nIGNvbnN0YW50TmFtZShpbnQgaW5kZXgpIGNvbnN0IG92ZXJyaWRlOworICAgIENTdHJp
bmcgY29uc3RhbnROYW1lKFZpcnR1YWxSZWdpc3RlciBpbmRleCkgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgQ1N0cmluZyBmb3JtYXRDb25zdGFudChUeXBlLCB1aW50NjRfdCkgY29uc3Q7CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0
b3JpZmljYXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
R2VuZXJhdG9yaWZpY2F0aW9uLmNwcAppbmRleCAzM2QyYmVlZDIwMjc3YTQzM2U1MTAxMGQxYWY0
Y2QzMDkyNjhmYmRlLi5kZmUyZmM3YzM1NGE1OGQ4MDBkM2VkMDVkOTJmZDlmM2I3OTY2MGZmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0
b3JpZmljYXRpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHAKQEAgLTIyNCw3ICsyMjQsNyBAQCB2b2lkIEJ5dGVj
b2RlR2VuZXJhdG9yaWZpY2F0aW9uOjpydW4oKQogICAgIHsKICAgICAgICAgYXV0byBuZXh0VG9F
bnRlclBvaW50ID0gZW50ZXJQb2ludCgpLm5leHQoKTsKICAgICAgICAgdW5zaWduZWQgc3dpdGNo
VGFibGVJbmRleCA9IG1fY29kZUJsb2NrLT5udW1iZXJPZlN3aXRjaEp1bXBUYWJsZXMoKTsKLSAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHN0YXRlID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
c3RhdGljX2Nhc3Q8aW50MzJfdD4oSlNHZW5lcmF0b3I6OkdlbmVyYXRvckFyZ3VtZW50OjpTdGF0
ZSkpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3RhdGUgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoc3RhdGljX2Nhc3Q8aW50MzJfdD4oSlNHZW5lcmF0b3I6Okdl
bmVyYXRvckFyZ3VtZW50OjpTdGF0ZSkpOwogICAgICAgICBhdXRvJiBqdW1wVGFibGUgPSBtX2Nv
ZGVCbG9jay0+YWRkU3dpdGNoSnVtcFRhYmxlKCk7CiAgICAgICAgIGp1bXBUYWJsZS5taW4gPSAw
OwogICAgICAgICBqdW1wVGFibGUuYnJhbmNoT2Zmc2V0cy5yZXNpemUobV95aWVsZHMuc2l6ZSgp
ICsgMSk7CkBAIC0yMzksNyArMjM5LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlv
bjo6cnVuKCkKICAgICB9CiAKICAgICBmb3IgKGNvbnN0IFlpZWxkRGF0YSYgZGF0YSA6IG1feWll
bGRzKSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KHN0YXRpY19jYXN0PGludDMyX3Q+KEpTR2VuZXJhdG9yOjpHZW5lcmF0b3JBcmd1
bWVudDo6RnJhbWUpKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKHN0YXRpY19jYXN0PGludDMyX3Q+KEpTR2Vu
ZXJhdG9yOjpHZW5lcmF0b3JBcmd1bWVudDo6RnJhbWUpKTsKIAogICAgICAgICBhdXRvIGluc3Ry
dWN0aW9uID0gbV9pbnN0cnVjdGlvbnMuYXQoZGF0YS5wb2ludCk7CiAgICAgICAgIC8vIEVtaXQg
c2F2ZSBzZXF1ZW5jZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUluZGV4LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUluZGV4LmNwcAppbmRleCAxNWQ2MWJhOTA0MDFhNzExN2RjMGY5ZjI2ZTE5MTM3ZWIyYzMx
NTliLi5hMmMxZjQxNWIxOTdkNDZiZDY4MTRhMjAxMTFjODdjNTA4NzIyMjRmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwCkBAIC0yNSw2
ICsyNSw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJCeXRlY29kZUluZGV4
LmgiCisKICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBA
IC0zMiw2ICszMyw4IEBAIG5hbWVzcGFjZSBKU0Mgewogdm9pZCBCeXRlY29kZUluZGV4OjpkdW1w
KFdURjo6UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQoImJjIyIsIG9m
ZnNldCgpKTsKKyAgICBpZiAoY2hlY2twb2ludCgpKQorICAgICAgICBvdXQucHJpbnQoImNwIyIs
IGNoZWNrcG9pbnQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgKaW5kZXggNTI5NWMyOWIxMjI4MTMx
ZjcyYWMyMDczMWMxZDNiY2U5MzUxNThkZi4uMTBmYmE0NDA1OGVjOWRmZWQyNTQ4MDlhNmQ3ODMz
N2QwMTFhNGI2MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlSW5kZXguaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVJbmRleC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHd0
Zi9IYXNoVHJhaXRzLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNl
IFdURiB7CiBjbGFzcyBQcmludFN0cmVhbTsKQEAgLTM3LDI0ICszOCwzMyBAQCBjbGFzcyBCeXRl
Y29kZUluZGV4IHsKIHB1YmxpYzoKICAgICBCeXRlY29kZUluZGV4KCkgPSBkZWZhdWx0OwogICAg
IEJ5dGVjb2RlSW5kZXgoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6
IG1fb2Zmc2V0KGRlbGV0ZWRWYWx1ZSgpLmFzQml0cygpKQorICAgICAgICA6IG1fcGFja2VkQml0
cyhkZWxldGVkVmFsdWUoKS5hc0JpdHMoKSkKICAgICB7CiAgICAgfQotICAgIGV4cGxpY2l0IEJ5
dGVjb2RlSW5kZXgodWludDMyX3QgYnl0ZWNvZGVPZmZzZXQpCi0gICAgICAgIDogbV9vZmZzZXQo
Ynl0ZWNvZGVPZmZzZXQpCi0gICAgeyB9CiAKLSAgICB1aW50MzJfdCBvZmZzZXQoKSBjb25zdCB7
IHJldHVybiBtX29mZnNldDsgfQotICAgIHVpbnQzMl90IGFzQml0cygpIGNvbnN0IHsgcmV0dXJu
IG1fb2Zmc2V0OyB9CisgICAgZXhwbGljaXQgQnl0ZWNvZGVJbmRleCh1aW50MzJfdCBieXRlY29k
ZU9mZnNldCwgdWludDhfdCBjaGVja3BvaW50ID0gMCkKKyAgICAgICAgOiBtX3BhY2tlZEJpdHMo
cGFjayhieXRlY29kZU9mZnNldCwgY2hlY2twb2ludCkpCisgICAgeworICAgICAgICBBU1NFUlQo
KnRoaXMpOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgbnVtYmVyT2ZD
aGVja3BvaW50cyA9IDQ7CisgICAgc3RhdGljX2Fzc2VydChoYXNPbmVCaXRTZXQobnVtYmVyT2ZD
aGVja3BvaW50cyksICJudW1iZXJPZkNoZWNrcG9pbnRzIHNob3VsZCBiZSBhIHBvd2VyIG9mIDIi
KTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IGNoZWNrcG9pbnRNYXNrID0gbnVtYmVy
T2ZDaGVja3BvaW50cyAtIDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBjaGVja3Bv
aW50U2hpZnQgPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihudW1iZXJPZkNoZWNrcG9pbnRzKTsK
KworICAgIHVpbnQzMl90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyA+PiBj
aGVja3BvaW50U2hpZnQ7IH0KKyAgICB1aW50OF90IGNoZWNrcG9pbnQoKSBjb25zdCB7IHJldHVy
biBtX3BhY2tlZEJpdHMgJiBjaGVja3BvaW50TWFzazsgfQorICAgIHVpbnQzMl90IGFzQml0cygp
IGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0czsgfQogCi0gICAgdW5zaWduZWQgaGFzaCgpIGNv
bnN0IHsgcmV0dXJuIFdURjo6aW50SGFzaChtX29mZnNldCk7IH0KKyAgICB1bnNpZ25lZCBoYXNo
KCkgY29uc3QgeyByZXR1cm4gV1RGOjppbnRIYXNoKG1fcGFja2VkQml0cyk7IH0KICAgICBzdGF0
aWMgQnl0ZWNvZGVJbmRleCBkZWxldGVkVmFsdWUoKSB7IHJldHVybiBmcm9tQml0cyhpbnZhbGlk
T2Zmc2V0IC0gMSk7IH0KICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gKnRoaXMgPT0gZGVsZXRlZFZhbHVlKCk7IH0KIAogICAgIHN0YXRpYyBCeXRlY29k
ZUluZGV4IGZyb21CaXRzKHVpbnQzMl90IGJpdHMpOwogCiAgICAgLy8gQ29tcGFyaXNvbiBvcGVy
YXRvcnMuCi0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zm
c2V0ICE9IGludmFsaWRPZmZzZXQgJiYgbV9vZmZzZXQgIT0gZGVsZXRlZFZhbHVlKCkub2Zmc2V0
KCk7IH0KKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9wYWNr
ZWRCaXRzICE9IGludmFsaWRPZmZzZXQgJiYgbV9wYWNrZWRCaXRzICE9IGRlbGV0ZWRWYWx1ZSgp
Lm9mZnNldCgpOyB9CiAgICAgYm9vbCBvcGVyYXRvciA9PShjb25zdCBCeXRlY29kZUluZGV4JiBv
dGhlcikgY29uc3QgeyByZXR1cm4gYXNCaXRzKCkgPT0gb3RoZXIuYXNCaXRzKCk7IH0KICAgICBi
b29sIG9wZXJhdG9yICE9KGNvbnN0IEJ5dGVjb2RlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVy
biAhKCp0aGlzID09IG90aGVyKTsgfQogCkBAIC02OSwxMyArNzksMjIgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IGludmFsaWRPZmZzZXQgPSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7CiAKLSAgICB1aW50MzJfdCBtX29mZnNl
dCB7IGludmFsaWRPZmZzZXQgfTsKKyAgICBzdGF0aWMgdWludDMyX3QgcGFjayh1aW50MzJfdCBi
eXRlY29kZUluZGV4LCB1aW50OF90IGNoZWNrcG9pbnQpOworCisgICAgdWludDMyX3QgbV9wYWNr
ZWRCaXRzIHsgaW52YWxpZE9mZnNldCB9OwogfTsKIAoraW5saW5lIHVpbnQzMl90IEJ5dGVjb2Rl
SW5kZXg6OnBhY2sodWludDMyX3QgYnl0ZWNvZGVJbmRleCwgdWludDhfdCBjaGVja3BvaW50KQor
eworICAgIEFTU0VSVChjaGVja3BvaW50IDwgbnVtYmVyT2ZDaGVja3BvaW50cyk7CisgICAgQVNT
RVJUKChieXRlY29kZUluZGV4IDw8IGNoZWNrcG9pbnRTaGlmdCkgPj4gY2hlY2twb2ludFNoaWZ0
ID09IGJ5dGVjb2RlSW5kZXgpOworICAgIHJldHVybiBieXRlY29kZUluZGV4IDw8IGNoZWNrcG9p
bnRTaGlmdCB8IGNoZWNrcG9pbnQ7Cit9CisKIGlubGluZSBCeXRlY29kZUluZGV4IEJ5dGVjb2Rl
SW5kZXg6OmZyb21CaXRzKHVpbnQzMl90IGJpdHMpCiB7CiAgICAgQnl0ZWNvZGVJbmRleCByZXN1
bHQ7Ci0gICAgcmVzdWx0Lm1fb2Zmc2V0ID0gYml0czsKKyAgICByZXN1bHQubV9wYWNrZWRCaXRz
ID0gYml0czsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgppbmRleCA4NjJjY2Q4Y2NmZDQwYmYwZWViNzM0
MjVlZjZkMjhiNDc5NjgwODljLi4zNDgzNDdjNmI0Y2Q3NTQ2ODBjMTI2YTBmNzI3NTM2ZjFiZTM3
YzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVM
aXN0LnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3Qu
cmIKQEAgLTU5LDcgKzU5LDcgQEAgdHlwZXMgWwogICAgIDpXYXRjaHBvaW50U2V0LAogCiAgICAg
OlZhbHVlUHJvZmlsZSwKLSAgICA6VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciwKKyAgICA6
VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyLAogICAgIDpVbmFyeUFyaXRoUHJv
ZmlsZSwKICAgICA6QmluYXJ5QXJpdGhQcm9maWxlLAogICAgIDpBcnJheVByb2ZpbGUsCkBAIC03
OTYsNiArNzk2LDEzIEBAIG9wIDpjYWxsX3ZhcmFyZ3MsCiAgICAgbWV0YWRhdGE6IHsKICAgICAg
ICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJv
ZmlsZSwKKyAgICB9LAorICAgIHRtcHM6IHsKKyAgICAgICAgYXJnQ291bnRJbmNsdWRpbmdUaGlz
OiB1bnNpZ25lZCwKKyAgICB9LAorICAgIGNoZWNrcG9pbnRzOiB7CisgICAgICAgIGRldGVybWlu
aW5nQXJnQ291bnQ6IG5pbCwKKyAgICAgICAgbWFrZUNhbGw6IG5pbCwKICAgICB9CiAKIG9wIDp0
YWlsX2NhbGxfdmFyYXJncywKQEAgLTgxMCw2ICs4MTcsMTMgQEAgb3AgOnRhaWxfY2FsbF92YXJh
cmdzLAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxl
LAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgfSwKKyAgICB0bXBzOiB7Cisg
ICAgICAgIGFyZ0NvdW50SW5jbHVkaW5nVGhpczogdW5zaWduZWQKKyAgICB9LAorICAgIGNoZWNr
cG9pbnRzOiB7CisgICAgICAgIGRldGVybWluaW5nQXJnQ291bnQ6IG5pbCwKKyAgICAgICAgbWFr
ZUNhbGw6IG5pbCwKICAgICB9CiAKIG9wIDp0YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsCkBA
IC04NTAsNiArODY0LDEzIEBAIG9wIDpjb25zdHJ1Y3RfdmFyYXJncywKICAgICBtZXRhZGF0YTog
ewogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTog
VmFsdWVQcm9maWxlLAorICAgIH0sCisgICAgdG1wczogeworICAgICAgICBhcmdDb3VudEluY2x1
ZGluZ1RoaXM6IHVuc2lnbmVkCisgICAgfSwKKyAgICBjaGVja3BvaW50czogeworICAgICAgICBk
ZXRlcm1pbmluZ0FyZ0NvdW50OiBuaWwsCisgICAgICAgIG1ha2VDYWxsOiBuaWwsCiAgICAgfQog
CiBvcCA6cmV0LApAQCAtMTAwMyw3ICsxMDI0LDcgQEAgb3AgOmNhdGNoLAogICAgICAgICB0aHJv
d25WYWx1ZTogVmlydHVhbFJlZ2lzdGVyLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAg
ICAgYnVmZmVyOiBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyLiosCisgICAgICAgIGJ1ZmZl
cjogVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyLiosCiAgICAgfQogCiBvcCA6
dGhyb3csCkBAIC0xMjQ5LDYgKzEyNzAsOCBAQCBvcCA6bGxpbnRfbmF0aXZlX2NhbGxfdHJhbXBv
bGluZQogb3AgOmxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZQogb3AgOmxsaW50X2lu
dGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZQogb3AgOmxsaW50X2ludGVybmFsX2Z1bmN0
aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lCitvcCA6Y2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lu
bGluZWRfY2FsbF90cmFtcG9saW5lCitvcCA6Y2hlY2twb2ludF9vc3JfZXhpdF90cmFtcG9saW5l
CiBvcCA6aGFuZGxlVW5jYXVnaHRFeGNlcHRpb24KIG9wIDpvcF9jYWxsX3JldHVybl9sb2NhdGlv
bgogb3AgOm9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAK
aW5kZXggOTE4ZTFkMjEzNGE2MGI2Y2ZmMTAxMTQzYWI1NTQzM2I4YjQzZjQ0MC4uNzk3NWZlZjNj
ODgxNDMxODE1N2E1OWRiZThiZTU1NDgzODhmZTM2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAK
QEAgLTIwMSw0ICsyMDEsMzkgQEAgdm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmR1bXBS
ZXN1bHRzKENvZGVCbG9jayogY29kZUJsb2NrKQogICAgIH0KIH0KIAordGVtcGxhdGU8dHlwZW5h
bWUgRW51bVR5cGUxLCB0eXBlbmFtZSBFbnVtVHlwZTI+Citjb25zdGV4cHIgYm9vbCBlbnVtVmFs
dWVzRXF1YWxBc0ludGVncmFsKEVudW1UeXBlMSB2MSwgRW51bVR5cGUyIHYyKQoreworICAgIHVz
aW5nIEludFR5cGUxID0gdHlwZW5hbWUgc3RkOjp1bmRlcmx5aW5nX3R5cGU8RW51bVR5cGUxPjo6
dHlwZTsKKyAgICB1c2luZyBJbnRUeXBlMiA9IHR5cGVuYW1lIHN0ZDo6dW5kZXJseWluZ190eXBl
PEVudW1UeXBlMj46OnR5cGU7CisgICAgaWYgY29uc3RleHByIChzaXplb2YoSW50VHlwZTEpID4g
c2l6ZW9mKEludFR5cGUyKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEludFR5cGUxPih2
MSkgPT0gc3RhdGljX2Nhc3Q8SW50VHlwZTE+KHYyKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxJbnRUeXBlMj4odjEpID09IHN0YXRpY19jYXN0PEludFR5cGUyPih2Mik7
Cit9CisKK0JpdG1hcDxtYXhOdW1DaGVja3BvaW50VG1wcz4gdG1wTGl2ZW5lc3NGb3JDaGVja3Bv
aW50KGNvbnN0IENvZGVCbG9jayYgY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXgpCit7CisgICAgQml0bWFwPG1heE51bUNoZWNrcG9pbnRUbXBzPiByZXN1bHQ7CisgICAgdWlu
dDhfdCBjaGVja3BvaW50ID0gYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7CisKKyAgICBpZiAo
IWNoZWNrcG9pbnQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBzd2l0Y2ggKGNvZGVC
bG9jay5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS0+b3Bjb2RlSUQoKSkgeworICAg
IGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6Cisg
ICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KGVu
dW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6bWFrZUNhbGwsIE9wVGFpbENh
bGxWYXJhcmdzOjptYWtlQ2FsbCkgJiYgZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChPcENhbGxW
YXJhcmdzOjphcmdDb3VudEluY2x1ZGluZ1RoaXMsIE9wVGFpbENhbGxWYXJhcmdzOjphcmdDb3Vu
dEluY2x1ZGluZ1RoaXMpKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChlbnVtVmFsdWVzRXF1YWxB
c0ludGVncmFsKE9wQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsLCBPcENvbnN0cnVjdFZhcmFyZ3M6Om1h
a2VDYWxsKSAmJiBlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKE9wQ2FsbFZhcmFyZ3M6OmFyZ0Nv
dW50SW5jbHVkaW5nVGhpcywgT3BDb25zdHJ1Y3RWYXJhcmdzOjphcmdDb3VudEluY2x1ZGluZ1Ro
aXMpKTsKKyAgICAgICAgaWYgKGNoZWNrcG9pbnQgPT0gT3BDYWxsVmFyYXJnczo6bWFrZUNhbGwp
CisgICAgICAgICAgICByZXN1bHQuc2V0KE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50SW5jbHVkaW5n
VGhpcyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAppbmRleCA3Mzc5YjNjOWJjNzIz
MjU5MTA5YzYxZTdhZGE1MzNkOWU3ZDJmMmM5Li4zZTVlZGMwYTY4YWU0NGRmNjUxNWNkYmZkNGI0
MjdlZjY5ZWVmMTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5j
bHVkZSAiQnl0ZWNvZGVCYXNpY0Jsb2NrLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVHcmFwaC5oIgog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KICNpbmNsdWRl
IDx3dGYvRmFzdEJpdFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTk3LDYgKzk4LDgg
QEAgcHJpdmF0ZToKICAgICBCeXRlY29kZUdyYXBoIG1fZ3JhcGg7CiB9OwogCitCaXRtYXA8bWF4
TnVtQ2hlY2twb2ludFRtcHM+IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludChjb25zdCBDb2RlQmxv
Y2smLCBCeXRlY29kZUluZGV4KTsKKwogaW5saW5lIGJvb2wgb3BlcmFuZElzQWx3YXlzTGl2ZShp
bnQgb3BlcmFuZCk7CiBpbmxpbmUgYm9vbCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2
ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKTsKIGlubGluZSBib29sIG9w
ZXJhbmRJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAppbmRleCAzZDEyZTE5NWM2OTllZmJmOTYzNmEyYjk3
NGU3OTQ0Y2RhZWQ3MmMwLi5kZTZjYThkYzkxMDliNzg5NjdmMTA1NTAwOWRhMzBlODk5ODQ4Mjgy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKQEAgLTMzLDIyICszMywyMiBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIGJvb2wgb3BlcmFuZElzQWx3YXlzTGl2ZShpbnQg
b3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3RlcklzQWx3YXlzTGl2ZShWaXJ0dWFs
UmVnaXN0ZXIgcmVnKQogewotICAgIHJldHVybiAhVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLmlz
TG9jYWwoKTsKKyAgICByZXR1cm4gIXJlZy5pc0xvY2FsKCk7CiB9CiAKLWlubGluZSBib29sIG9w
ZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwg
aW50IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNOb3RBbHdheXNM
aXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgVmlydHVhbFJlZ2lzdGVyIHJlZykK
IHsKLSAgICB1bnNpZ25lZCBsb2NhbCA9IFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2Fs
KCk7CisgICAgdW5zaWduZWQgbG9jYWwgPSByZWcudG9Mb2NhbCgpOwogICAgIGlmIChsb2NhbCA+
PSBvdXQubnVtQml0cygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIG91dFts
b2NhbF07CiB9CiAKLWlubGluZSBib29sIG9wZXJhbmRJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3Rv
ciYgb3V0LCBpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3RlcklzTGl2ZShj
b25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogewotICAg
IHJldHVybiBvcGVyYW5kSXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IG9wZXJhbmRUaGF0SXNOb3RB
bHdheXNMaXZlSXNMaXZlKG91dCwgb3BlcmFuZCk7CisgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3Rl
cklzQWx3YXlzTGl2ZShvcGVyYW5kKSB8fCB2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNOb3RBbHdheXNM
aXZlSXNMaXZlKG91dCwgb3BlcmFuZCk7CiB9CiAKIGlubGluZSBib29sIGlzVmFsaWRSZWdpc3Rl
ckZvckxpdmVuZXNzKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCAzZjMyZmU4N2U0YzBhYzI3MjJkNjk0
YjQxZjE5YmVjNGQ3ZDU5N2QyLi5mMmMzOTgzZjE5OTJlN2IxZTU4MjViMTcwY2I1NDk5ZGNlMTZj
OWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApA
QCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUg
IkJ5dGVjb2RlVXNlRGVmLmgiCiAjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKKyNpbmNsdWRl
ICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja0lubGlu
ZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tTZXQuaCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRp
ZXMuaCIKQEAgLTQwOSw3ICs0MTAsNyBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjbG9uZWRTeW1ib2xUYWJsZS0+bV9sb2Nr
KTsKICAgICAgICAgICAgIGNsb25lZFN5bWJvbFRhYmxlLT5wcmVwYXJlRm9yVHlwZVByb2ZpbGlu
Zyhsb2NrZXIpOwogICAgICAgICB9Ci0gICAgICAgIHJlcGxhY2VDb25zdGFudCh1bmxpbmtlZE1v
ZHVsZVByb2dyYW1Db2RlQmxvY2stPm1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFu
dFJlZ2lzdGVyT2Zmc2V0KCksIGNsb25lZFN5bWJvbFRhYmxlKTsKKyAgICAgICAgcmVwbGFjZUNv
bnN0YW50KFZpcnR1YWxSZWdpc3Rlcih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2stPm1v
ZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0KCkpLCBjbG9u
ZWRTeW1ib2xUYWJsZSk7CiAgICAgfQogCiAgICAgYm9vbCBzaG91bGRVcGRhdGVGdW5jdGlvbkhh
c0V4ZWN1dGVkQ2FjaGUgPSBtX3VubGlua2VkQ29kZS0+d2FzQ29tcGlsZWRXaXRoVHlwZVByb2Zp
bGVyT3Bjb2RlcygpIHx8IG1fdW5saW5rZWRDb2RlLT53YXNDb21waWxlZFdpdGhDb250cm9sRmxv
d1Byb2ZpbGVyT3Bjb2RlcygpOwpAQCAtNjQzLDcgKzY0NCw3IEBAIGJvb2wgQ29kZUJsb2NrOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwg
VW5saW5rCiAgICAgICAgICAgICBpZiAoYnl0ZWNvZGUubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBl
KCkgPT0gTG9jYWxDbG9zdXJlVmFyKSB7CiAgICAgICAgICAgICAgICAgLy8gT25seSBkbyB3YXRj
aGluZyBpZiB0aGUgcHJvcGVydHkgd2UncmUgcHV0dGluZyB0byBpcyBub3QgYW5vbnltb3VzLgog
ICAgICAgICAgICAgICAgIGlmIChieXRlY29kZS5tX3ZhciAhPSBVSU5UX01BWCkgewotICAgICAg
ICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFi
bGUqPihnZXRDb25zdGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlT3JTY29wZURlcHRoLnN5bWJv
bFRhYmxlKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5
bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9z
eW1ib2xUYWJsZU9yU2NvcGVEZXB0aC5zeW1ib2xUYWJsZSgpKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7
CiAgICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3ltYm9sVGFi
bGUtPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IHN5bWJvbFRhYmxl
LT5maW5kKGxvY2tlciwgaWRlbnQuaW1wbCgpKTsKQEAgLTcxMSw4ICs3MTIsNyBAQCBib29sIENv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4
ZWN1dGFibGUsIFVubGluawogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZUJ5dGVjb2RlTG9jYWxseVJlc29sdmVkOiB7Ci0g
ICAgICAgICAgICAgICAgaW50IHN5bWJvbFRhYmxlSW5kZXggPSBieXRlY29kZS5tX3N5bWJvbFRh
YmxlT3JTY29wZURlcHRoLnN5bWJvbFRhYmxlKCkub2Zmc2V0KCk7Ci0gICAgICAgICAgICAgICAg
U3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29uc3Rh
bnQoc3ltYm9sVGFibGVJbmRleCkpOworICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1i
b2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3lt
Ym9sVGFibGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUoKSkpOwogICAgICAgICAgICAgICAgIGNv
bnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29kZS5tX2lkZW50aWZpZXIp
OwogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUt
Pm1fbG9jayk7CiAgICAgICAgICAgICAgICAgLy8gSWYgb3VyIHBhcmVudCBzY29wZSB3YXMgY3Jl
YXRlZCB3aGlsZSBwcm9maWxpbmcgd2FzIGRpc2FibGVkLCBpdCB3aWxsIG5vdCBoYXZlIHByZXBh
cmVkIGZvciBwcm9maWxpbmcgeWV0LgpAQCAtMTA4OCw2ICsxMDg4LDE1IEBAIHN0YXRpYyBib29s
IHNob3VsZE1hcmtUcmFuc2l0aW9uKFZNJiB2bSwgREZHOjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlv
biYgdHJhbnNpdGlvCiAgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CisKK0J5dGVjb2RlSW5kZXgg
Q29kZUJsb2NrOjpieXRlY29kZUluZGV4Rm9yRXhpdChCeXRlY29kZUluZGV4IGV4aXRJbmRleCkg
Y29uc3QKK3sKKyAgICBpZiAoZXhpdEluZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICBjb25z
dCBhdXRvJiBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmF0KGV4aXRJbmRleCk7CisgICAg
ICAgIGV4aXRJbmRleCA9IGluc3RydWN0aW9uLm5leHQoKS5pbmRleCgpOworICAgIH0KKyAgICBy
ZXR1cm4gZXhpdEluZGV4OworfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiB2b2lkIENv
ZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC0xODE0LDEyICsxODIzLDEyIEBAIHZvaWQgQ29kZUJs
b2NrOjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXhTbG93KGNv
bnN0IE9wQ2F0Y2gmCiAgICAgfSk7CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhcmFt
ZXRlcnMoKTsgKytpKQotICAgICAgICBsaXZlT3BlcmFuZHMuYXBwZW5kKHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KGkpKTsKKyAgICAgICAgbGl2ZU9wZXJhbmRzLmFwcGVuZCh2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkpOwogCi0gICAgYXV0byBwcm9maWxlcyA9
IG1ha2VVbmlxdWU8VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcj4obGl2ZU9wZXJhbmRzLnNp
emUoKSk7CisgICAgYXV0byBwcm9maWxlcyA9IG1ha2VVbmlxdWU8VmFsdWVQcm9maWxlQW5kVmly
dHVhbFJlZ2lzdGVyQnVmZmVyPihsaXZlT3BlcmFuZHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FT
U0VSVChwcm9maWxlcy0+bV9zaXplID09IGxpdmVPcGVyYW5kcy5zaXplKCkpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBwcm9maWxlcy0+bV9zaXplOyArK2kpCi0gICAgICAgIHByb2Zp
bGVzLT5tX2J1ZmZlci5nZXQoKVtpXS5tX29wZXJhbmQgPSBsaXZlT3BlcmFuZHNbaV0ub2Zmc2V0
KCk7CisgICAgICAgIHByb2ZpbGVzLT5tX2J1ZmZlci5nZXQoKVtpXS5tX29wZXJhbmQgPSBsaXZl
T3BlcmFuZHNbaV07CiAKICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7CiAKQEAgLTI3
MTgsNyArMjcyNyw3IEBAIHZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVk
aWN0aW9uc0FuZENvdW50TGl2ZW5lc3ModW5zaWduZWQmIG51bWJlCiAKICAgICBpZiAoYXV0byog
cmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7CiAgICAgICAgIGZvciAoYXV0byYgcHJvZmls
ZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmlsZXMpIHsKLSAgICAgICAgICAgIHByb2Zp
bGVCdWNrZXQtPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7
CisgICAgICAgICAgICBwcm9maWxlQnVja2V0LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5k
VmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgICAgICAgICAgcHJvZmlsZS5jb21w
dXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKaW5kZXggMGY5YmJl
YWMyNzYxYTYzZWQ0MDk4ZTIyNWFlOGJlNDY3OGM3ZWNhNy4uNjhmZDAxZmQ5MTRjNWU0MTllYjg4
MzkyNzlmNTdhZjYwYzRkNjYwYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaApAQCAtMTYzLDYgKzE2Myw3IEBAIHB1YmxpYzoKICAgICBpbnQgbnVtQ2FsbGVl
TG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxsZWVMb2NhbHM7IH0KIAogICAgIGludCBu
dW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CisgICAgaW50IG51bVRtcHMoKSBj
b25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+aGFzQ2hlY2twb2ludHMoKSAqIG1heE51bUNo
ZWNrcG9pbnRUbXBzOyB9CiAKICAgICBpbnQqIGFkZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7IHJl
dHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51
bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bVBh
cmFtZXRlcnMpOyB9CkBAIC0yMzEsMjAgKzIzMiwyMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNJ
bnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0OwogICAgIGJvb2wgaW5zdGFsbFZNVHJh
cEJyZWFrcG9pbnRzKCk7CiAKLSAgICBpbmxpbmUgYm9vbCBpc0tub3duTm90SW1tZWRpYXRlKGlu
dCBpbmRleCkKKyAgICBpbmxpbmUgYm9vbCBpc0tub3duTm90SW1tZWRpYXRlKFZpcnR1YWxSZWdp
c3RlciByZWcpCiAgICAgewotICAgICAgICBpZiAoaW5kZXggPT0gdGhpc1JlZ2lzdGVyKCkub2Zm
c2V0KCkgJiYgIWlzU3RyaWN0TW9kZSgpKQorICAgICAgICBpZiAocmVnID09IHRoaXNSZWdpc3Rl
cigpICYmICFpc1N0cmljdE1vZGUoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
ICAgIGlmIChpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpCi0gICAgICAgICAgICByZXR1
cm4gZ2V0Q29uc3RhbnQoaW5kZXgpLmlzQ2VsbCgpOworICAgICAgICBpZiAocmVnLmlzQ29uc3Rh
bnQoKSkKKyAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFudChyZWcpLmlzQ2VsbCgpOwogCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNU
ZW1wb3JhcnlSZWdpc3RlckluZGV4KGludCBpbmRleCkKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wg
aXNUZW1wb3JhcnlSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGluZGV4ID49IG1fbnVtVmFyczsKKyAgICAgICAgcmV0dXJuIHJlZy5vZmZzZXQoKSA+
PSBtX251bVZhcnM7CiAgICAgfQogCiAgICAgSGFuZGxlckluZm8qIGhhbmRsZXJGb3JCeXRlY29k
ZUluZGV4KEJ5dGVjb2RlSW5kZXgsIFJlcXVpcmVkSGFuZGxlciA9IFJlcXVpcmVkSGFuZGxlcjo6
QW55SGFuZGxlcik7CkBAIC01ODMsMTAgKzU4NCw5IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBj
b25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7
IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9Ci0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+
JiBjb25zdGFudFJlZ2lzdGVyKGludCBpbmRleCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVy
c1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQotICAgIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIGJvb2wgaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW50IGluZGV4KSB7IHJldHVy
biBpbmRleCA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQotICAgIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZSBnZXRDb25zdGFudChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3Rh
bnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0uZ2V0KCk7IH0K
LSAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRz
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXhdOyB9CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlciByZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3Rh
bnRJbmRleCgpXTsgfQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0
dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50
b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihWaXJ0dWFsUmVn
aXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbltyZWcudG9Db25zdGFudEluZGV4KCldOyB9CiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNsc1tpbmRleF0u
Z2V0KCk7IH0KICAgICBpbnQgbnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV9mdW5j
dGlvbkRlY2xzLnNpemUoKTsgfQpAQCAtNzc2LDYgKzc3Niw3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgc2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KENvbXBp
bGF0aW9uUmVzdWx0KTsKICAgICAKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXhGb3JF
eGl0KEJ5dGVjb2RlSW5kZXgpIGNvbnN0OwogICAgIHVpbnQzMl90IG9zckV4aXRDb3VudGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9vc3JFeGl0Q291bnRlcjsgfQogCiAgICAgdm9pZCBjb3VudE9TUkV4
aXQoKSB7IG1fb3NyRXhpdENvdW50ZXIrKzsgfQpAQCAtODc2LDcgKzg3Nyw3IEBAIHB1YmxpYzoK
ICAgICAgICAgVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwogICAg
ICAgICBWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAK
LSAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVm
ZmVyPj4gbV9jYXRjaFByb2ZpbGVzOworICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFZh
bHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcj4+IG1fY2F0Y2hQcm9maWxlczsKIAog
ICAgICAgICBEaXJlY3RFdmFsQ29kZUNhY2hlIG1fZGlyZWN0RXZhbENvZGVDYWNoZTsKICAgICB9
OwpAQCAtOTQzLDEwICs5NDQsMTAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2V0Q29uc3RhbnRS
ZWdpc3RlcnMoY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50cywg
Y29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbiwgU2NyaXB0RXhlY3V0YWJsZSogdG9wTGV2ZWxFeGVjdXRhYmxlKTsK
IAotICAgIHZvaWQgcmVwbGFjZUNvbnN0YW50KGludCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSkKKyAg
ICB2b2lkIHJlcGxhY2VDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBKU1ZhbHVlIHZhbHVl
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSAm
JiBzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgp
IDwgbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkpOwotICAgICAgICBtX2NvbnN0YW50UmVnaXN0
ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdLnNldCgqbV92bSwgdGhpcywg
dmFsdWUpOworICAgICAgICBBU1NFUlQocmVnLmlzQ29uc3RhbnQoKSAmJiBzdGF0aWNfY2FzdDxz
aXplX3Q+KHJlZy50b0NvbnN0YW50SW5kZXgoKSkgPCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUo
KSk7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5z
ZXQoKm1fdm0sIHRoaXMsIHZhbHVlKTsKICAgICB9CiAKICAgICBib29sIHNob3VsZFZpc2l0U3Ry
b25nbHkoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVPcmlnaW4uaAppbmRleCAyMTA2ODEzZjBhMWVhYTUxMzRkMGYzOWJkNzUx
YzczMThlYmMwNDMxLi5mOTgyOWEyODZmOGFhYmY0ZDMzMmZmZjFlNzFlYTNjODNmOWJjNjBhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKQEAgLTE2MCw3
ICsxNjAsOSBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgYXBwcm94aW1hdGVIYXNoKElubGluZUNh
bGxGcmFtZSogdGVybWluYWwgPSBudWxscHRyKSBjb25zdDsKIAogICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBGdW5jdGlvbj4KLSAgICB2b2lkIHdhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9u
Jik7CisgICAgdm9pZCB3YWxrVXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlvbiYpIGNvbnN0Owor
CisgICAgaW5saW5lIGJvb2wgaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSBj
b25zdDsKICAgICAKICAgICAvLyBHZXQgdGhlIGlubGluZSBzdGFjay4gVGhpcyBpcyBzbG93LCBh
bmQgaXMgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZyBvbmx5LgogICAgIFZlY3RvcjxDb2RlT3JpZ2lu
PiBpbmxpbmVTdGFjaygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaAppbmRleCBlNGE1NzViMDNhN2QxYjU5OWFk
MGQ1NmNlZGRkYWY0YmEwNTAyZjNhLi40N2M2NTdjOGRmOTAzODNhZjY1ZWI1YzNiOGE4YjA1OTRk
MGM0ZGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5
dGVjb2RlTGl2ZW5lc3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVs
bEJ5dGVjb2RlTGl2ZW5lc3MuaApAQCAtMjYsMTIgKzI2LDE2IEBACiAjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgorI2luY2x1ZGUgIk9wZXJhbmRz
LmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAK
IGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczsKK2NsYXNzIENvZGVCbG9jazsKIAorLy8g
Tm90ZTogRnVsbCBieXRlY29kZSBsaXZlbmVzcyBkb2VzIG5vdCB0cmFjayBhbnkgaW5mb3JtYXRp
b24gYWJvdXQgdGhlIGxpdmVuZXNzIG9mIHRlbXBzLgorLy8gSWYgeW91IHdhbnQgdG1wIGxpdmVu
ZXNzIGZvciBhIGNoZWNrcG9pbnQgYXNrIHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludC4KIGNsYXNz
IEZ1bGxCeXRlY29kZUxpdmVuZXNzIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKQEAgLTQ3LDE1ICs1MSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgb3BlcmFuZElzTGl2ZShpbnQg
b3BlcmFuZCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBMaXZlbmVzc0NhbGN1bGF0aW9u
UG9pbnQgcG9pbnQpIGNvbnN0CisgICAgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJJc0xpdmUoVmlydHVh
bFJlZ2lzdGVyIHJlZywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBMaXZlbmVzc0NhbGN1
bGF0aW9uUG9pbnQgcG9pbnQpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gb3BlcmFuZElz
QWx3YXlzTGl2ZShvcGVyYW5kKSB8fCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShn
ZXRMaXZlbmVzcyhieXRlY29kZUluZGV4LCBwb2ludCksIG9wZXJhbmQpOworICAgICAgICByZXR1
cm4gdmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZlKHJlZykgfHwgdmlydHVhbFJlZ2lzdGVyVGhh
dElzTm90QWx3YXlzTGl2ZUlzTGl2ZShnZXRMaXZlbmVzcyhieXRlY29kZUluZGV4LCBwb2ludCks
IHJlZyk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzOwogICAgIAotICAgIC8vIEZJWE1FOiBVc2UgRmFzdEJpdFZlY3Rvcidz
IHZpZXcgbWVjaGFuc2ltIHRvIG1ha2UgdGhlbSBjb21wYWN0LgorICAgIC8vIEZJWE1FOiBVc2Ug
RmFzdEJpdFZlY3RvcidzIHZpZXcgbWVjaGFuaXNtIHRvIG1ha2UgdGhlbSBjb21wYWN0LgogICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ0Mjc8UGFzdGU+
CiAgICAgVmVjdG9yPEZhc3RCaXRWZWN0b3IsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2Jl
Zm9yZVVzZVZlY3RvcjsKICAgICBWZWN0b3I8RmFzdEJpdFZlY3RvciwgMCwgVW5zYWZlVmVjdG9y
T3ZlcmZsb3c+IG1fYWZ0ZXJVc2VWZWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgKaW5kZXggOTc1MDhiYmYwYzQ1Y2I5N2E0Nzg1MTU5
NzA0MTcxZGRmNmRkMWRhMy4uZTI5ZjM4NGQxZDA2NzJmZWVhMDcxMjA1YmNhYTI4MWE2NDliMjIy
OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxG
cmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJh
bWUuaApAQCAtMTc5LDcgKzE3OSw4IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIFdy
aXRlQmFycmllcjxDb2RlQmxvY2s+IGJhc2VsaW5lQ29kZUJsb2NrOwogICAgIENvZGVPcmlnaW4g
ZGlyZWN0Q2FsbGVyOwogCi0gICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
eyAwIH07IC8vIERvIG5vdCBpbmNsdWRlIGZpeHVwcy4KKyAgICB1bnNpZ25lZCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyA6IDIyOyAvLyBEbyBub3QgaW5jbHVkZSBmaXh1cHMuCisgICAgdW5z
aWduZWQgdG1wT2Zmc2V0IDogMTA7CiAgICAgc2lnbmVkIHN0YWNrT2Zmc2V0IDogMjg7CiAgICAg
dW5zaWduZWQga2luZCA6IDM7IC8vIHJlYWwgdHlwZSBpcyBLaW5kCiAgICAgYm9vbCBpc0Nsb3N1
cmVDYWxsIDogMTsgLy8gSWYgZmFsc2UgdGhlbiB3ZSBrbm93IHRoYXQgY2FsbGVlL3Njb3BlIGFy
ZSBjb25zdGFudHMgYW5kIHRoZSBERkcgd29uJ3QgdHJlYXQgdGhlbSBhcyB2YXJpYWJsZXMsIGku
ZS4gdGhleSBoYXZlIHRvIGJlIHJlY292ZXJlZCBtYW51YWxseS4KQEAgLTE5MSw3ICsxOTIsOSBA
QCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICAvLyBJbmxpbmVDYWxsRnJhbWUncyBmaWVs
ZHMuIFRoaXMgY29uc3RydWN0b3IgaXMgaGVyZSBqdXN0IHRvIHJlZHVjZSBjb25mdXNpb24gaWYK
ICAgICAvLyB3ZSBmb3Jnb3QgdG8gaW5pdGlhbGl6ZSBleHBsaWNpdGx5LgogICAgIElubGluZUNh
bGxGcmFtZSgpCi0gICAgICAgIDogc3RhY2tPZmZzZXQoMCkKKyAgICAgICAgOiBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcygwKQorICAgICAgICAsIHRtcE9mZnNldCgwKQorICAgICAgICAsIHN0
YWNrT2Zmc2V0KDApCiAgICAgICAgICwga2luZChDYWxsKQogICAgICAgICAsIGlzQ2xvc3VyZUNh
bGwoZmFsc2UpCiAgICAgewpAQCAtMjE5LDYgKzIyMiwxMiBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZy
YW1lIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGljX2Nhc3Q8c2lnbmVkPihzdGFja09m
ZnNldCkgPT0gb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIHNldFRtcE9mZnNldCh1bnNpZ25l
ZCBvZmZzZXQpCisgICAgeworICAgICAgICB0bXBPZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bXBPZmZzZXQpID09IG9mZnNldCk7
CisgICAgfQorCiAgICAgcHRyZGlmZl90IGNhbGxlckZyYW1lT2Zmc2V0KCkgY29uc3QgeyByZXR1
cm4gc3RhY2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgQ2FsbEZyYW1lOjpjYWxsZXJGcmFt
ZU9mZnNldCgpOyB9CiAgICAgcHRyZGlmZl90IHJldHVyblBDT2Zmc2V0KCkgY29uc3QgeyByZXR1
cm4gc3RhY2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgQ2FsbEZyYW1lOjpyZXR1cm5QQ09m
ZnNldCgpOyB9CiAKQEAgLTI0Nyw5ICsyNTYsOSBAQCBpbmxpbmUgQ29kZUJsb2NrKiBiYXNlbGlu
ZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGNvbnN0IENvZGVPcmlnaQog
ICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9jazsKIH0KIAotLy8gVGhpcyBmdW5jdGlvbiBpcyBk
ZWZpbmVkIGhlcmUgYW5kIG5vdCBpbiBDb2RlT3JpZ2luIGJlY2F1c2UgaXQgbmVlZHMgYWNjZXNz
IHRvIHRoZSBkaXJlY3RDYWxsZXIgZmllbGQgaW4gSW5saW5lQ2FsbEZyYW1lCisvLyBUaGVzZSBm
dW5jdGlvbiBpcyBkZWZpbmVkIGhlcmUgYW5kIG5vdCBpbiBDb2RlT3JpZ2luIGJlY2F1c2UgaXQg
bmVlZHMgYWNjZXNzIHRvIHRoZSBkaXJlY3RDYWxsZXIgZmllbGQgaW4gSW5saW5lQ2FsbEZyYW1l
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+Ci1pbmxpbmUgdm9pZCBDb2RlT3JpZ2luOjp3
YWxrVXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlvbiYgZnVuY3Rpb24pCitpbmxpbmUgdm9pZCBD
b2RlT3JpZ2luOjp3YWxrVXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlvbiYgZnVuY3Rpb24pIGNv
bnN0CiB7CiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gKnRoaXM7CiAgICAgd2hpbGUgKHRy
dWUpIHsKQEAgLTI2MSwxMSArMjcwLDM4IEBAIGlubGluZSB2b2lkIENvZGVPcmlnaW46OndhbGtV
cElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikKICAgICB9CiB9CiAKLUFMV0FZ
U19JTkxJTkUgVmlydHVhbFJlZ2lzdGVyIHJlbWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK2lubGluZSBib29sIENvZGVPcmln
aW46OmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50KCkgY29uc3QKK3sKKyAgICBi
b29sIHJlc3VsdCA9IGZhbHNlOworICAgIHdhbGtVcElubGluZVN0YWNrKFsmXSAoQ29kZU9yaWdp
biBvcmlnaW4pIHsKKyAgICAgICAgaWYgKG9yaWdpbi5ieXRlY29kZUluZGV4KCkuY2hlY2twb2lu
dCgpKQorICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitBTFdBWVNfSU5MSU5FIE9wZXJhbmQgcmVtYXBPcGVyYW5kKElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpCit7CisgICAgaWYgKGlubGlu
ZUNhbGxGcmFtZSkKKyAgICAgICAgcmV0dXJuIG9wZXJhbmQuaXNUbXAoKSA/IE9wZXJhbmQ6OnRt
cChvcGVyYW5kLnZhbHVlKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCkgOiBvcGVyYW5k
LnZpcnR1YWxSZWdpc3RlcigpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKKyAgICBy
ZXR1cm4gb3BlcmFuZDsKK30KKworQUxXQVlTX0lOTElORSBPcGVyYW5kIHJlbWFwT3BlcmFuZChJ
bmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK3sK
KyAgICByZXR1cm4gcmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZChyZWcpKTsK
K30KKworQUxXQVlTX0lOTElORSBPcGVyYW5kIHVubWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZCBvcGVyYW5kKQogewogICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUpCi0gICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIocmVnLm9mZnNldCgpICsgaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCk7Ci0gICAgcmV0dXJuIHJlZzsKKyAgICAgICAgcmV0
dXJuIG9wZXJhbmQuaXNUbXAoKSA/IE9wZXJhbmQ6OnRtcChvcGVyYW5kLnZhbHVlKCkgLSBpbmxp
bmVDYWxsRnJhbWUtPnRtcE9mZnNldCkgOiBPcGVyYW5kKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVy
KCkgLSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKKyAgICByZXR1cm4gb3BlcmFuZDsK
K30KKworQUxXQVlTX0lOTElORSBPcGVyYW5kIHVubWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK3sKKyAgICByZXR1cm4gdW5t
YXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZChyZWcpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9M
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCmluZGV4IGJmYjk0YjM1ZmNkNjM5YTRhMWYxZDAwYzhh
YmIxNDVlYjFjNjRhNTkuLjgxZjVhMGM0ODljNGVmNmRkY2JhNmUxYjQ2MmQ3MmQ5ZTk4NjQ2ZDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZh
bHVlUHJvZmlsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3Bl
cmFuZFZhbHVlUHJvZmlsZS5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgIkNvbmN1cnJlbnRKU0xvY2suaCIKKyNpbmNsdWRlICJPcGVyYW5kcy5oIgogI2luY2x1
ZGUgIlZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC00OSw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogICAgIAotICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGVLZXkoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBPcGVyYW5kIG9wZXJhbmQp
CiAgICAgICAgIDogbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICwgbV9v
cGVyYW5kKG9wZXJhbmQpCiAgICAgewpAQCAtNjksNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9ieXRlY29k
ZUluZGV4Lmhhc2goKSArIG1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICAgICAgcmV0dXJuIG1fYnl0
ZWNvZGVJbmRleC5oYXNoKCkgKyBtX29wZXJhbmQudmFsdWUoKSArIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihtX29wZXJhbmQua2luZCgpKTsKICAgICB9CiAgICAgCiAgICAgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4KCkgY29uc3QKQEAgLTc4LDcgKzc5LDcgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gbV9ieXRlY29kZUluZGV4OwogICAgIH0KIAotICAgIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKCkgY29uc3QKKyAgICBPcGVyYW5kIG9wZXJhbmQoKSBjb25zdAogICAgIHsKICAgICAgICAg
QVNTRVJUKCEhKnRoaXMpOwogICAgICAgICByZXR1cm4gbV9vcGVyYW5kOwpAQCAtOTAsNyArOTEs
NyBAQCBwdWJsaWM6CiAgICAgfQogcHJpdmF0ZTogCiAgICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVj
b2RlSW5kZXg7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICBPcGVyYW5kIG1f
b3BlcmFuZDsKIH07CiAKIHN0cnVjdCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleUhhc2ggewpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCmluZGV4IDJiNjlmMzZjN2ZiZGExMDU1Nzg5ZGZm
ZGU2N2YzOTZmODZlMmI1MDMuLjcwMWMzMzA4OWI5NTZmNzk3ODZlYzg3YWEyYzY5YThiYzA2NzA0
NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKQEAgLTQyLDcgKzQyLDcgQEAgTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpm
cm9tTGF6eU9wZXJhbmQoCiAgICAgcmVzdWx0Lm1fa2luZCA9IExhenlPcGVyYW5kOwogICAgIHJl
c3VsdC51LmxhenlPcGVyYW5kLmNvZGVCbG9jayA9IGNvZGVCbG9jazsKICAgICByZXN1bHQudS5s
YXp5T3BlcmFuZC5ieXRlY29kZU9mZnNldCA9IGtleS5ieXRlY29kZUluZGV4KCk7Ci0gICAgcmVz
dWx0LnUubGF6eU9wZXJhbmQub3BlcmFuZCA9IGtleS5vcGVyYW5kKCkub2Zmc2V0KCk7CisgICAg
cmVzdWx0LnUubGF6eU9wZXJhbmQub3BlcmFuZCA9IGtleS5vcGVyYW5kKCk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIApAQCAtNTcsNyArNTcsNyBAQCB2b2lkIE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGU6OmVtaXRSZXBvcnRWYWx1ZShDQ2FsbEhlbHBlcnMmIGppdCwgSlNWYWx1ZVJlZwog
ICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgTGF6eU9wZXJhbmQ6IHsKLSAgICAg
ICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNvZGVP
ZmZzZXQsIFZpcnR1YWxSZWdpc3Rlcih1LmxhenlPcGVyYW5kLm9wZXJhbmQpKTsKKyAgICAgICAg
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNvZGVPZmZz
ZXQsIHUubGF6eU9wZXJhbmQub3BlcmFuZCk7CiAgICAgICAgIAogICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKHUubGF6eU9wZXJhbmQuY29kZUJsb2NrLT5tX2xvY2spOwogICAgICAg
ICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9CkBAIC05MSw3ICs5MSw3IEBAIHZv
aWQgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6cmVwb3J0VmFsdWUoSlNWYWx1ZSB2YWx1
ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBMYXp5T3BlcmFuZDogewotICAgICAgICBM
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkodS5sYXp5T3BlcmFuZC5ieXRlY29kZU9mZnNl
dCwgVmlydHVhbFJlZ2lzdGVyKHUubGF6eU9wZXJhbmQub3BlcmFuZCkpOworICAgICAgICBMYXp5
T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkodS5sYXp5T3BlcmFuZC5ieXRlY29kZU9mZnNldCwg
dS5sYXp5T3BlcmFuZC5vcGVyYW5kKTsKIAogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKHUubGF6eU9wZXJhbmQuY29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICBMYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaAppbmRleCA1
N2I0YjE3NzJmMDRmYmRmMzM2ODUwNTQzNjU3YzE1ZDljNDFkYjRlLi5lOGI2NWVhZDQ2ZTQ3NTA1
MzVjZDBhOWRiZjgwYWUzOWIwYjRhMWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgKQEAg
LTEwNyw3ICsxMDcsNyBAQCBwcml2YXRlOgogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2s7CiAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
T2Zmc2V0OwotICAgICAgICAgICAgaW50IG9wZXJhbmQ7CisgICAgICAgICAgICBPcGVyYW5kIG9w
ZXJhbmQ7CiAgICAgICAgIH0gbGF6eU9wZXJhbmQ7CiAgICAgfSB1OwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKaW5kZXggZjI5ZmY5Zjk3MzZhZWIzNzM0NTk0
NDZkYzc0Y2QxMjAyNzU2MjU3Ni4uYWNlZmY1Nzk4NzEwMmRmYTY0MmE3YzZmMTc5NzQzNjI3ODkz
ZDdjNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
NSwxMTEgKzM1LDIyNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IE9wZXJhbmRWYWx1ZVRyYWl0czsKIAotZW51bSBPcGVyYW5kS2luZCB7IEFyZ3VtZW50
T3BlcmFuZCwgTG9jYWxPcGVyYW5kIH07Citjb25zdGV4cHIgdW5zaWduZWQgbWF4TnVtQ2hlY2tw
b2ludFRtcHMgPSA0OworCisvLyBBIE9wZXJhbmRLaW5kOjpUbXAgaXMgb25lIHRoYXQgZXhpc3Rz
IGZvciBleGl0aW5nIHRvIGEgY2hlY2twb2ludCBidXQgZG9lcyBub3QgZXhpc3QgYmV0d2VlbiBi
eXRlY29kZXMuCitlbnVtIGNsYXNzIE9wZXJhbmRLaW5kIHsgQXJndW1lbnQsIExvY2FsLCBUbXAg
fTsKKworY2xhc3MgT3BlcmFuZCB7CitwdWJsaWM6CisgICAgT3BlcmFuZCgpID0gZGVmYXVsdDsK
KyAgICBPcGVyYW5kKGNvbnN0IE9wZXJhbmQmKSA9IGRlZmF1bHQ7CisKKyAgICBPcGVyYW5kKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICA6IG1fa2luZChvcGVyYW5kLmlzTG9jYWwo
KSA/IE9wZXJhbmRLaW5kOjpMb2NhbCA6IE9wZXJhbmRLaW5kOjpBcmd1bWVudCkKKyAgICAgICAg
LCBtX29wZXJhbmQob3BlcmFuZC5vZmZzZXQoKSkKKyAgICB7IH0KKworICAgIE9wZXJhbmQoT3Bl
cmFuZEtpbmQga2luZCwgaW50IG9wZXJhbmQpCisgICAgICAgIDogbV9raW5kKGtpbmQpCisgICAg
ICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCisgICAgeyAKKyAgICAgICAgQVNTRVJUKGtpbmQgPT0g
T3BlcmFuZEtpbmQ6OlRtcCB8fCBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkuaXNMb2NhbCgpID09
IChraW5kID09IE9wZXJhbmRLaW5kOjpMb2NhbCkpOworICAgIH0KKyAgICBzdGF0aWMgT3BlcmFu
ZCB0bXAodWludDMyX3QgaW5kZXgpIHsgcmV0dXJuIE9wZXJhbmQoT3BlcmFuZEtpbmQ6OlRtcCwg
aW5kZXgpOyB9CisKKyAgICBPcGVyYW5kS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5k
OyB9CisgICAgaW50IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYW5kOyB9CisgICAgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQobV9raW5kICE9IE9wZXJhbmRLaW5kOjpUbXApOworICAgICAgICByZXR1cm4gVmlydHVhbFJl
Z2lzdGVyKG1fb3BlcmFuZCk7CisgICAgfQorICAgIHVpbnQ2NF90IGFzQml0cygpIGNvbnN0IHsg
cmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oKnRoaXMpOyB9CisgICAgc3RhdGljIE9wZXJh
bmQgZnJvbUJpdHModWludDY0X3QgdmFsdWUpOworCisgICAgYm9vbCBpc1RtcCgpIGNvbnN0IHsg
cmV0dXJuIGtpbmQoKSA9PSBPcGVyYW5kS2luZDo6VG1wOyB9CisgICAgYm9vbCBpc0FyZ3VtZW50
KCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IE9wZXJhbmRLaW5kOjpBcmd1bWVudDsgfQorICAg
IGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBPcGVyYW5kS2luZDo6TG9j
YWwgJiYgdmlydHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgpOyB9CisgICAgYm9vbCBpc0hlYWRlcigp
IGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBPcGVyYW5kS2luZDo6VG1wICYmIHZpcnR1YWxSZWdp
c3RlcigpLmlzSGVhZGVyKCk7IH0KKyAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVy
biBraW5kKCkgIT0gT3BlcmFuZEtpbmQ6OlRtcCAmJiB2aXJ0dWFsUmVnaXN0ZXIoKS5pc0NvbnN0
YW50KCk7IH0KKworICAgIGludCB0b0FyZ3VtZW50KCkgY29uc3QgeyBBU1NFUlQoaXNBcmd1bWVu
dCgpKTsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpLnRvQXJndW1lbnQoKTsgfQorICAgIGludCB0
b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNMb2NhbCgpKTsgcmV0dXJuIHZpcnR1YWxSZWdpc3Rl
cigpLnRvTG9jYWwoKTsgfQorCisgICAgaW5saW5lIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworCisg
ICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPcGVyYW5kJikgY29uc3Q7CisKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBPcGVyYW5kS2lu
ZCBtX2tpbmQgeyBPcGVyYW5kS2luZDo6QXJndW1lbnQgfTsKKyAgICBpbnQgbV9vcGVyYW5kIHsg
VmlydHVhbFJlZ2lzdGVyOjppbnZhbGlkVmlydHVhbFJlZ2lzdGVyIH07Cit9OworCitBTFdBWVNf
SU5MSU5FIGJvb2wgT3BlcmFuZDo6b3BlcmF0b3I9PShjb25zdCBPcGVyYW5kJiBvdGhlcikgY29u
c3QKK3sKKyAgICBpZiAoa2luZCgpICE9IG90aGVyLmtpbmQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChpc1RtcCgpKQorICAgICAgICByZXR1cm4gdmFsdWUoKSA9PSBvdGhlci52
YWx1ZSgpOworICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXIoKSA9PSBvdGhlci52aXJ0dWFsUmVn
aXN0ZXIoKTsKK30KKworaW5saW5lIGJvb2wgT3BlcmFuZDo6aXNWYWxpZCgpIGNvbnN0Cit7Cisg
ICAgaWYgKGlzVG1wKCkpCisgICAgICAgIHJldHVybiB2YWx1ZSgpID49IDA7CisgICAgcmV0dXJu
IHZpcnR1YWxSZWdpc3RlcigpLmlzVmFsaWQoKTsKK30KKworaW5saW5lIE9wZXJhbmQgT3BlcmFu
ZDo6ZnJvbUJpdHModWludDY0X3QgdmFsdWUpCit7CisgICAgT3BlcmFuZCByZXN1bHQgPSBiaXR3
aXNlX2Nhc3Q8T3BlcmFuZD4odmFsdWUpOworICAgIEFTU0VSVChyZXN1bHQuaXNWYWxpZCgpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWNfYXNzZXJ0KHNpemVvZihPcGVyYW5kKSA9
PSBzaXplb2YodWludDY0X3QpLCAiT3BlcmFuZDo6YXNCaXRzKCkgcmVsaWVzIG9uIHRoaXMuIik7
CiAKIGVudW0gT3BlcmFuZHNMaWtlVGFnIHsgT3BlcmFuZHNMaWtlIH07CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CiBjbGFzcyBPcGVyYW5kcyB7CiBwdWJsaWM6Ci0gICAgT3BlcmFuZHMoKQotICAg
ICAgICA6IG1fbnVtQXJndW1lbnRzKDApIHsgfQotICAgIAotICAgIGV4cGxpY2l0IE9wZXJhbmRz
KHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMpCisgICAgdXNpbmcgU3RvcmFn
ZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgRmFzdEJpdFZl
Y3RvciwgVmVjdG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93Pj47CisgICAgdXNpbmcgUmVm
VHlwZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgRmFzdEJp
dFJlZmVyZW5jZSwgVCY+OworICAgIHVzaW5nIENvbnN0UmVmVHlwZSA9IHN0ZDo6Y29uZGl0aW9u
YWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgYm9vbCwgY29uc3QgVCY+OworCisgICAgT3Bl
cmFuZHMoKSA9IGRlZmF1bHQ7CisKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcykKICAgICAgICAgOiBtX251
bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCisgICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxz
KQogICAgIHsKLSAgICAgICAgaWYgKFdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxp
emF0aW9uKSB7Ci0gICAgICAgICAgICBtX3ZhbHVlcy5yZXNpemUobnVtQXJndW1lbnRzICsgbnVt
TG9jYWxzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fdmFsdWVzLmZpbGwoVCgp
LCBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMpOwotICAgICAgICB9CisgICAgICAgIHNpemVfdCBz
aXplID0gbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtVG1wczsKKyAgICAgICAgbV92YWx1
ZXMuZ3JvdyhzaXplKTsKKyAgICAgICAgaWYgKCFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJ
bml0aWFsaXphdGlvbikKKyAgICAgICAgICAgIG1fdmFsdWVzLmZpbGwoVCgpKTsKICAgICB9CiAK
LSAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9j
YWxzLCBjb25zdCBUJiBpbml0aWFsVmFsdWUpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90
IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNvbnN0IFQm
IGluaXRpYWxWYWx1ZSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCisg
ICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMu
ZmlsbChpbml0aWFsVmFsdWUsIG51bUFyZ3VtZW50cyArIG51bUxvY2Fscyk7CisgICAgICAgIG1f
dmFsdWVzLmdyb3cobnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtVG1wcyk7CisgICAgICAg
IG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4KLSAgICBleHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5kc0xpa2VUYWcsIGNvbnN0
IE9wZXJhbmRzPFU+JiBvdGhlcikKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5kc0xpa2VU
YWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhlciwgY29uc3QgVCYgaW5pdGlhbFZhbHVlID0gVCgp
KQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkpCisg
ICAgICAgICwgbV9udW1Mb2NhbHMob3RoZXIubnVtYmVyT2ZMb2NhbHMoKSkKICAgICB7Ci0gICAg
ICAgIG1fdmFsdWVzLmZpbGwoVCgpLCBvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpICsgb3RoZXIu
bnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsK
KyAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KLSAgICAKKwogICAg
IHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJndW1lbnRz
OyB9Ci0gICAgc2l6ZV90IG51bWJlck9mTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMu
c2l6ZSgpIC0gbV9udW1Bcmd1bWVudHM7IH0KLSAgICAKKyAgICBzaXplX3QgbnVtYmVyT2ZMb2Nh
bHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQorICAgIHNpemVfdCBudW1iZXJPZlRt
cHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBudW1iZXJPZkFyZ3VtZW50cygp
IC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorCisgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOworICAg
ICAgICByZXR1cm4gaWR4ICsgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7
CisgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAg
ewotICAgICAgICBBU1NFUlQoaWR4IDwgbV9udW1Bcmd1bWVudHMpOworICAgICAgICBBU1NFUlQo
aWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgICAgIHJldHVybiBpZHg7CiAgICAgfQog
ICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gbV9udW1Bcmd1bWVudHMgKyBpZHg7CisgICAgICAgIEFTU0VSVChpZHggPCBu
dW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBp
ZHg7CiAgICAgfQorCisgICAgUmVmVHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1
ZXNbdG1wSW5kZXgoaWR4KV07IH0KKyAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWVzW3RtcEluZGV4KGlkeCldOyB9CiAgICAgCi0gICAgVCYgYXJn
dW1lbnQoc2l6ZV90IGlkeCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlc1thcmd1bWVu
dEluZGV4KGlkeCldOwotICAgIH0KLSAgICBjb25zdCBUJiBhcmd1bWVudChzaXplX3QgaWR4KSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07
Ci0gICAgfQorICAgIFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1
ZXNbYXJndW1lbnRJbmRleChpZHgpXTsgfQorICAgIENvbnN0UmVmVHlwZSBhcmd1bWVudChzaXpl
X3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CiAg
ICAgCi0gICAgVCYgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRl
eChpZHgpXTsgfQotICAgIGNvbnN0IFQmIGxvY2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KKyAgICBSZWZUeXBlIGxvY2FsKHNpemVfdCBp
ZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KKyAgICBDb25zdFJlZlR5
cGUgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAg
IHNpemVfdCBzaXplRm9yKCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kS2luZCA9
PSBBcmd1bWVudE9wZXJhbmQpCisgICAgICAgIHN3aXRjaCAob3BlcmFuZEtpbmQpIHsKKyAgICAg
ICAgY2FzZSBPcGVyYW5kS2luZDo6VG1wOgorICAgICAgICAgICAgcmV0dXJuIG51bWJlck9mVG1w
cygpOworICAgICAgICBjYXNlIE9wZXJhbmRLaW5kOjpBcmd1bWVudDoKICAgICAgICAgICAgIHJl
dHVybiBudW1iZXJPZkFyZ3VtZW50cygpOwotICAgICAgICByZXR1cm4gbnVtYmVyT2ZMb2NhbHMo
KTsKKyAgICAgICAgY2FzZSBPcGVyYW5kS2luZDo6TG9jYWw6CisgICAgICAgICAgICByZXR1cm4g
bnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgdGVtcGxhdGU8T3BlcmFu
ZEtpbmQgb3BlcmFuZEtpbmQ+Ci0gICAgVCYgYXRGb3Ioc2l6ZV90IGlkeCkKKyAgICBSZWZUeXBl
IGF0Rm9yKHNpemVfdCBpZHgpCiAgICAgewotICAgICAgICBpZiAob3BlcmFuZEtpbmQgPT0gQXJn
dW1lbnRPcGVyYW5kKQorICAgICAgICBzd2l0Y2ggKG9wZXJhbmRLaW5kKSB7CisgICAgICAgIGNh
c2UgT3BlcmFuZEtpbmQ6OlRtcDoKKyAgICAgICAgICAgIHJldHVybiB0bXAoaWR4KTsKKyAgICAg
ICAgY2FzZSBPcGVyYW5kS2luZDo6QXJndW1lbnQ6CiAgICAgICAgICAgICByZXR1cm4gYXJndW1l
bnQoaWR4KTsKLSAgICAgICAgcmV0dXJuIGxvY2FsKGlkeCk7CisgICAgICAgIGNhc2UgT3BlcmFu
ZEtpbmQ6OkxvY2FsOgorICAgICAgICAgICAgcmV0dXJuIGxvY2FsKGlkeCk7CisgICAgICAgIH0K
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHRt
cCgwKTsKICAgICB9CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+Ci0gICAg
Y29uc3QgVCYgYXRGb3Ioc2l6ZV90IGlkeCkgY29uc3QKKyAgICBDb25zdFJlZlR5cGUgYXRGb3Io
c2l6ZV90IGlkeCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1
bWVudE9wZXJhbmQpCisgICAgICAgIHN3aXRjaCAob3BlcmFuZEtpbmQpIHsKKyAgICAgICAgY2Fz
ZSBPcGVyYW5kS2luZDo6VG1wOgorICAgICAgICAgICAgcmV0dXJuIHRtcChpZHgpOworICAgICAg
ICBjYXNlIE9wZXJhbmRLaW5kOjpBcmd1bWVudDoKICAgICAgICAgICAgIHJldHVybiBhcmd1bWVu
dChpZHgpOwotICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAgICAgY2FzZSBPcGVyYW5k
S2luZDo6TG9jYWw6CisgICAgICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAgICAgfQor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gdG1w
KDApOwogICAgIH0KLSAgICAKLSAgICB2b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSkKKwor
ICAgIHZvaWQgZW5zdXJlTG9jYWxzKHNpemVfdCBzaXplLCBjb25zdCBUJiBlbnN1cmVkVmFsdWUg
PSBUKCkpCiAgICAgewotICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsK
LSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBtX251bUFyZ3VtZW50cyArIHNpemU7Ci0gICAgICAg
IGlmIChuZXdTaXplIDw9IG9sZFNpemUpCisgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9j
YWxzKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBu
dW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXpl
X3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgc2l6ZV90IG9sZE51
bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXplKTsK
LSAgICAgICAgaWYgKCFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikg
ewotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX3ZhbHVlcy5zaXpl
KCk7ICsraSkKLSAgICAgICAgICAgICAgICBtX3ZhbHVlc1tpXSA9IFQoKTsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBvbGROdW1UbXBzOyArK2kpCisgICAgICAgICAgICBtX3ZhbHVl
c1tuZXdTaXplIC0gMSAtIGldID0gbV92YWx1ZXNbdG1wSW5kZXgob2xkTnVtVG1wcyAtIDEgLSBp
KV07CisKKyAgICAgICAgbV9udW1Mb2NhbHMgPSBzaXplOworICAgICAgICBpZiAoZW5zdXJlZFZh
bHVlICE9IFQoKSB8fCAhV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24p
IHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSAtIG9sZE51bUxvY2Fs
czsgKytpKQorICAgICAgICAgICAgICAgIG1fdmFsdWVzW2xvY2FsSW5kZXgob2xkTnVtTG9jYWxz
ICsgaSldID0gZW5zdXJlZFZhbHVlOwogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBlbnN1
cmVMb2NhbHMoc2l6ZV90IHNpemUsIGNvbnN0IFQmIGVuc3VyZWRWYWx1ZSkKKyAgICB2b2lkIGVu
c3VyZVRtcHMoc2l6ZV90IHNpemUsIGNvbnN0IFQmIGVuc3VyZWRWYWx1ZSA9IFQoKSkKICAgICB7
Ci0gICAgICAgIHNpemVfdCBvbGRTaXplID0gbV92YWx1ZXMuc2l6ZSgpOwotICAgICAgICBzaXpl
X3QgbmV3U2l6ZSA9IG1fbnVtQXJndW1lbnRzICsgc2l6ZTsKLSAgICAgICAgaWYgKG5ld1NpemUg
PD0gb2xkU2l6ZSkKKyAgICAgICAgaWYgKHNpemUgPD0gbnVtYmVyT2ZUbXBzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKKyAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOwogICAgICAgICBtX3ZhbHVlcy5ncm93KG5ld1NpemUpOwotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG1fdmFsdWVzLnNpemUoKTsgKytpKQotICAg
ICAgICAgICAgbV92YWx1ZXNbaV0gPSBlbnN1cmVkVmFsdWU7CisKKyAgICAgICAgaWYgKGVuc3Vy
ZWRWYWx1ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0
aW9uKSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG5ld1NpemU7
ICsraSkKKyAgICAgICAgICAgICAgICBtX3ZhbHVlc1tpXSA9IGVuc3VyZWRWYWx1ZTsKKyAgICAg
ICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIHNldExvY2FsKHNpemVfdCBpZHgsIGNvbnN0IFQm
IHZhbHVlKQpAQCAtMTY0LDg0ICsyODAsNzYgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoaWR4
ID49IG51bWJlck9mTG9jYWxzKCkgfHwgbG9jYWwoaWR4KSA9PSBUKCkpOwogICAgICAgICBzZXRM
b2NhbChpZHgsIHZhbHVlKTsKICAgICB9Ci0gICAgCi0gICAgc2l6ZV90IG9wZXJhbmRJbmRleChp
bnQgb3BlcmFuZCkgY29uc3QKKworICAgIFJlZlR5cGUgZ2V0Rm9yT3BlcmFuZEluZGV4KHNpemVf
dCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgQ29uc3RSZWZUeXBlIGdl
dEZvck9wZXJhbmRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8
T3BlcmFuZHMqPih0aGlzKS0+Z2V0Rm9yT3BlcmFuZEluZGV4KGluZGV4KTsgfQorCisgICAgc2l6
ZV90IG9wZXJhbmRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKLSAgICAgICAgICAgIHJldHVy
biBhcmd1bWVudEluZGV4KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0FyZ3VtZW50KCkpOwot
ICAgICAgICByZXR1cm4gbG9jYWxJbmRleChWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2Nh
bCgpKTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgcmV0
dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICByZXR1cm4g
bG9jYWxJbmRleChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogICAgIAotICAgIHNpemVfdCBv
cGVyYW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikgY29uc3QKKyAgICBz
aXplX3Qgb3BlcmFuZEluZGV4KE9wZXJhbmQgb3ApIGNvbnN0CiAgICAgewotICAgICAgICByZXR1
cm4gb3BlcmFuZEluZGV4KHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSk7CisgICAgICAgIGlmICgh
b3AuaXNUbXAoKSkKKyAgICAgICAgICAgIHJldHVybiBvcGVyYW5kSW5kZXgob3AudmlydHVhbFJl
Z2lzdGVyKCkpOworICAgICAgICByZXR1cm4gdG1wSW5kZXgob3AudmFsdWUoKSk7CiAgICAgfQog
ICAgIAotICAgIFQmIG9wZXJhbmQoaW50IG9wZXJhbmQpCisgICAgUmVmVHlwZSBvcGVyYW5kKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3Vt
ZW50KG9wZXJhbmQpKQotICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KFZpcnR1YWxSZWdpc3Rl
cihvcGVyYW5kKS50b0FyZ3VtZW50KCkpOwotICAgICAgICByZXR1cm4gbG9jYWwoVmlydHVhbFJl
Z2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKSk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1l
bnQoKSkKKyAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChvcGVyYW5kLnRvQXJndW1lbnQoKSk7
CisgICAgICAgIHJldHVybiBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCi0gICAg
VCYgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQorICAgIFJlZlR5cGUg
b3BlcmFuZChPcGVyYW5kIG9wKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wZXJhbmQodmlydHVh
bFJlZ2lzdGVyLm9mZnNldCgpKTsKKyAgICAgICAgaWYgKCFvcC5pc1RtcCgpKQorICAgICAgICAg
ICAgcmV0dXJuIG9wZXJhbmQob3AudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICByZXR1cm4g
dG1wKG9wLnZhbHVlKCkpOwogICAgIH0KIAotICAgIGNvbnN0IFQmIG9wZXJhbmQoaW50IG9wZXJh
bmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29uc3QgVCY+KGNvbnN0X2Nhc3Q8T3BlcmFu
ZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKSk7IH0KLSAgICBjb25zdCBUJiBvcGVyYW5kKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PGNvbnN0IFQm
Pihjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCkpOyB9CisgICAg
Q29uc3RSZWZUeXBlIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0IHsgcmV0
dXJuIGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKTsgfQorICAg
IENvbnN0UmVmVHlwZSBvcGVyYW5kKE9wZXJhbmQgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29u
c3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQpOyB9CiAgICAgCi0gICAg
Ym9vbCBoYXNPcGVyYW5kKGludCBvcGVyYW5kKSBjb25zdAorICAgIGJvb2wgaGFzT3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5k
SXNBcmd1bWVudChvcGVyYW5kKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXpl
X3Q+KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMo
KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkp
IDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9Ci0gICAgYm9vbCBoYXNPcGVyYW5kKFZpcnR1YWxS
ZWdpc3RlciByZWcpIGNvbnN0CisgICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0
CiAgICAgewotICAgICAgICByZXR1cm4gaGFzT3BlcmFuZChyZWcub2Zmc2V0KCkpOworICAgICAg
ICBpZiAob3AuaXNUbXAoKSkgeworICAgICAgICAgICAgQVNTRVJUKG9wLnZhbHVlKCkgPj0gMCk7
CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcC52YWx1ZSgpKSA8IG51
bWJlck9mVG1wcygpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBoYXNPcGVyYW5kKG9wLnZp
cnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRPcGVyYW5kKGludCBv
cGVyYW5kLCBjb25zdCBUJiB2YWx1ZSkKKyAgICB2b2lkIHNldE9wZXJhbmQoT3BlcmFuZCBvcGVy
YW5kLCBjb25zdCBUJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIHRoaXMtPm9wZXJhbmQob3BlcmFu
ZCkgPSB2YWx1ZTsKICAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRPcGVyYW5kKFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIsIGNvbnN0IFQmIHZhbHVlKQotICAgIHsKLSAgICAgICAgc2V0
T3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCksIHZhbHVlKTsKLSAgICB9CiAKICAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQotICAgIGNvbnN0
IFQmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9Ci0g
ICAgVCYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KLSAgICBj
b25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgp
OyB9Ci0gICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGF0KGluZGV4KTsg
fQotCi0gICAgYm9vbCBpc0FyZ3VtZW50KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5k
ZXggPCBtX251bUFyZ3VtZW50czsgfQotICAgIGJvb2wgaXNMb2NhbChzaXplX3QgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuICFpc0FyZ3VtZW50KGluZGV4KTsgfQotICAgIGludCBvcGVyYW5kRm9ySW5k
ZXgoc2l6ZV90IGluZGV4KSBjb25zdAorICAgIENvbnN0UmVmVHlwZSBhdChzaXplX3QgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIFJlZlR5cGUgYXQoc2l6ZV90
IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBDb25zdFJlZlR5cGUgb3Bl
cmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIFJl
ZlR5cGUgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisg
ICAgT3BlcmFuZCBvcGVyYW5kRm9ySW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAogICAgIHsKICAg
ICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSkKLSAgICAgICAgICAgIHJldHVy
biB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCkub2Zmc2V0KCk7Ci0gICAgICAgIHJl
dHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG51bWJlck9mQXJndW1lbnRzKCkp
Lm9mZnNldCgpOwotICAgIH0KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9y
SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxS
ZWdpc3RlcihvcGVyYW5kRm9ySW5kZXgoaW5kZXgpKTsKKyAgICAgICAgICAgIHJldHVybiB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaW5kZXgpOworICAgICAgICBlbHNl
IGlmIChpbmRleCA8IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKQorICAg
ICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4IC0gbnVtYmVyT2ZB
cmd1bWVudHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpKTsKICAgICB9Ci0gICAgCi0gICAgdm9p
ZCBzZXRPcGVyYW5kRmlyc3RUaW1lKGludCBvcGVyYW5kLCBjb25zdCBUJiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgewotICAgICAgICAgICAg
c2V0QXJndW1lbnRGaXJzdFRpbWUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvQXJndW1lbnQo
KSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBzZXRMb2NhbEZpcnN0VGltZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgp
LCB2YWx1ZSk7Ci0gICAgfQotICAgIAorCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCiAgICAgewog
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFsdWVzLnNpemUoKTsgKytpKQpAQCAt
MjU3LDYgKzM2NSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChudW1iZXJPZkFy
Z3VtZW50cygpID09IG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkpOwogICAgICAgICBBU1NFUlQo
bnVtYmVyT2ZMb2NhbHMoKSA9PSBvdGhlci5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgQVNT
RVJUKG51bWJlck9mVG1wcygpID09IG90aGVyLm51bWJlck9mVG1wcygpKTsKICAgICAgICAgCiAg
ICAgICAgIHJldHVybiBtX3ZhbHVlcyA9PSBvdGhlci5tX3ZhbHVlczsKICAgICB9CkBAIC0yNjUs
OSArMzc0LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3Q7CiAgICAgCiBwcml2YXRlOgotICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBt
X3ZhbHVlcyBhcmUgYXJndW1lbnRzLCB0aGUgcmVzdCBhcmUgbG9jYWxzLgotICAgIFZlY3RvcjxU
LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV92YWx1ZXM7Ci0gICAgdW5zaWduZWQgbV9udW1B
cmd1bWVudHM7CisgICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFy
ZSBhcmd1bWVudHMsIHRoZSBuZXh0IG1fbnVtTG9jYWxzIGFyZSBsb2NhbHMsIGFuZCB0aGUgcmVz
dCBhcmUgdG1wcy4KKyAgICBTdG9yYWdlIG1fdmFsdWVzOworICAgIHVuc2lnbmVkIG1fbnVtQXJn
dW1lbnRzIHsgMCB9OworICAgIHVuc2lnbmVkIG1fbnVtTG9jYWxzIHsgMCB9OwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHNJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bl
cmFuZHNJbmxpbmVzLmgKaW5kZXggNjVmZWRkYTA3MzBhODM5MWY4MzE1NjNkYmRlYjgxNmFmOTI1
NjZmZC4uMGIxY2MxZjJkMTk3YWQwODM2NWE4Zjc4NTYxZmRmNjdhN2Q5ZWRkZCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaApAQCAtMzAs
NiArMzAsMTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2lubGluZSB2b2lkIE9wZXJhbmQ6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoaXNUbXAoKSkKKyAgICAgICAg
b3V0LnByaW50KCJ0bXAiLCB2YWx1ZSgpKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludCh2
aXJ0dWFsUmVnaXN0ZXIoKSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIE9wZXJh
bmRzPFQ+OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250
ZXh0KSBjb25zdAogewpAQCAtNDQsNiArNTIsMTEgQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcElu
Q29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJsb2MiLCBsb2Nh
bEluZGV4LCAiOiIsIGluQ29udGV4dChsb2NhbChsb2NhbEluZGV4KSwgY29udGV4dCkpOwogICAg
IH0KKyAgICBmb3IgKHNpemVfdCB0bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbnVtYmVyT2ZUbXBz
KCk7ICsrdG1wSW5kZXgpIHsKKyAgICAgICAgaWYgKCF0bXAodG1wSW5kZXgpKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcEluZGV4LCAi
OiIsIGluQ29udGV4dCh0bXAodG1wSW5kZXgpLCBjb250ZXh0KSk7CisgICAgfQogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgpAQCAtNjAsNiArNzMsMTEgQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IG91dC5wcmludChjb21tYSwgImxvYyIsIGxvY2FsSW5kZXgsICI6IiwgbG9jYWwobG9jYWxJbmRl
eCkpOwogICAgIH0KKyAgICBmb3IgKHNpemVfdCB0bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbnVt
YmVyT2ZUbXBzKCk7ICsrdG1wSW5kZXgpIHsKKyAgICAgICAgaWYgKCF0bXAodG1wSW5kZXgpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRt
cEluZGV4LCAiOiIsIHRtcCh0bXBJbmRleCkpOworICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmNwcAppbmRleCAyMDk5M2UyMTJkMmNkNjhiNDFhZmNiZDBkZmI2ODYwMzJkMWNkZGIz
Li5kZGI0MTIxMTkxZmFmN2I0MjE1MzFlOGUyZTA1MjAyNWE2MTI3ZTM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKQEAg
LTcyLDYgKzcyLDcgQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGUKICAgICAsIG1fY29kZVR5cGUo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVUeXBlKSkKICAgICAsIG1fZGlkT3B0aW1pemUoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KE1peGVkVHJpU3RhdGUpKQogICAgICwgbV9hZ2UoMCkKKyAgICAs
IG1faGFzQ2hlY2twb2ludHMoZmFsc2UpCiAgICAgLCBtX3BhcnNlTW9kZShpbmZvLnBhcnNlTW9k
ZSgpKQogICAgICwgbV9jb2RlR2VuZXJhdGlvbk1vZGUoY29kZUdlbmVyYXRpb25Nb2RlKQogICAg
ICwgbV9tZXRhZGF0YShVbmxpbmtlZE1ldGFkYXRhVGFibGU6OmNyZWF0ZSgpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAppbmRleCAz
ZDlmYjNjNTdkNWYzZDRlMmFlZGNiMWUzNTY3YTc0YjhjNzEzYzJiLi4zMTkyMTcwOWFjODMwNmJm
NGRlNGQ5NzM5OTJlMTRhMGQwMzBkYWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaApAQCAtMTQxLDYgKzE0MSw5IEBAIHB1Ymxp
YzoKICAgICBib29sIGhhc0V4cHJlc3Npb25JbmZvKCkgeyByZXR1cm4gbV9leHByZXNzaW9uSW5m
by5zaXplKCk7IH0KICAgICBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4mIGV4cHJl
c3Npb25JbmZvKCkgeyByZXR1cm4gbV9leHByZXNzaW9uSW5mbzsgfQogCisgICAgYm9vbCBoYXND
aGVja3BvaW50cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2hlY2twb2ludHM7IH0KKyAgICB2b2lk
IHNldEhhc0NoZWNrcG9pbnRzKCkgeyBtX2hhc0NoZWNrcG9pbnRzID0gdHJ1ZTsgfQorCiAgICAg
Ly8gU3BlY2lhbCByZWdpc3RlcnMKICAgICB2b2lkIHNldFRoaXNSZWdpc3RlcihWaXJ0dWFsUmVn
aXN0ZXIgdGhpc1JlZ2lzdGVyKSB7IG1fdGhpc1JlZ2lzdGVyID0gdGhpc1JlZ2lzdGVyOyB9CiAg
ICAgdm9pZCBzZXRTY29wZVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyKSB7
IG1fc2NvcGVSZWdpc3RlciA9IHNjb3BlUmVnaXN0ZXI7IH0KQEAgLTE5OCw5ICsyMDEsOCBAQCBw
dWJsaWM6CiAgICAgfQogCiAgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4m
IGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQotICAg
IGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihpbnQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleF07IH0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNDb25zdGFudFJlZ2lz
dGVySW5kZXgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBpbmRleCA+PSBGaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleDsgfQotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChp
bnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleF0uZ2V0KCk7IH0KKyAgICBjb25zdCBXcml0ZUJhcnJpZXI8
VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyBy
ZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAg
QUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNv
bnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5n
ZXQoKTsgfQogICAgIGNvbnN0IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25z
dGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbjsgfQogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZDb25zdGFudElk
ZW50aWZpZXJTZXRzKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1f
Y29uc3RhbnRJZGVudGlmaWVyU2V0cy5zaXplKCkgOiAwOyB9CkBAIC00MjYsNiArNDI4LDcgQEAg
cHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2RpZE9wdGltaXplIDogMjsKICAgICB1bnNpZ25lZCBt
X2FnZSA6IDM7CiAgICAgc3RhdGljX2Fzc2VydCgoKDFVIDw8IDMpIC0gMSkgPj0gbWF4QWdlKTsK
KyAgICBib29sIG1faGFzQ2hlY2twb2ludHMgOiAxOwogcHVibGljOgogICAgIENvbmN1cnJlbnRK
U0xvY2sgbV9sb2NrOwogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYWx1ZVByb2ZpbGUuaAppbmRleCBkZmEwNzc2NGE2YWIwMjE5ZDc4YWQ3YWJlZmVhNmEzYjdj
ODE3YmViLi45MGY5M2RkMWM5MTExY2UzYmNhZmIwYWIzYjAzZDhiN2RiYmY5ZmRkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCkBAIC0xNzYsMjgg
KzE3NiwyOCBAQCBpbmxpbmUgQnl0ZWNvZGVJbmRleCBnZXRSYXJlQ2FzZVByb2ZpbGVCeXRlY29k
ZUluZGV4KFJhcmVDYXNlUHJvZmlsZSogcmFyZUNhc2VQcgogICAgIHJldHVybiByYXJlQ2FzZVBy
b2ZpbGUtPm1fYnl0ZWNvZGVJbmRleDsKIH0KIAotc3RydWN0IFZhbHVlUHJvZmlsZUFuZE9wZXJh
bmQgOiBwdWJsaWMgVmFsdWVQcm9maWxlIHsKLSAgICBpbnQgbV9vcGVyYW5kOworc3RydWN0IFZh
bHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgeworICAg
IFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CiB9OwogCi1zdHJ1Y3QgVmFsdWVQcm9maWxlQW5k
T3BlcmFuZEJ1ZmZlciB7CitzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVm
ZmVyIHsKICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CiAKLSAgICBWYWx1ZVBy
b2ZpbGVBbmRPcGVyYW5kQnVmZmVyKHVuc2lnbmVkIHNpemUpCisgICAgVmFsdWVQcm9maWxlQW5k
VmlydHVhbFJlZ2lzdGVyQnVmZmVyKHVuc2lnbmVkIHNpemUpCiAgICAgICAgIDogbV9zaXplKHNp
emUpCiAgICAgewogICAgICAgICAvLyBGSVhNRTogVmFsdWVQcm9maWxlIGhhcyBtb3JlIHN0dWZm
IHRoYW4gd2UgbmVlZC4gV2UgY291bGQgb3B0aW1pemUgdGhlc2UgdmFsdWUgcHJvZmlsZXMKICAg
ICAgICAgLy8gdG8gYmUgbW9yZSBzcGFjZSBlZmZpY2llbnQuCiAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU0MTMKLSAgICAgICAgbV9idWZmZXIg
PSBNYWxsb2NQdHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZCwgVk1NYWxsb2M+OjptYWxsb2MobV9z
aXplICogc2l6ZW9mKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQpKTsKKyAgICAgICAgbV9idWZmZXIg
PSBNYWxsb2NQdHI8VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyLCBWTU1hbGxvYz46Om1h
bGxvYyhtX3NpemUgKiBzaXplb2YoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyKSk7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NpemU7ICsraSkKLSAgICAgICAgICAg
IG5ldyAoJm1fYnVmZmVyLmdldCgpW2ldKSBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kKCk7CisgICAg
ICAgICAgICBuZXcgKCZtX2J1ZmZlci5nZXQoKVtpXSkgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJl
Z2lzdGVyKCk7CiAgICAgfQogCi0gICAgflZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIoKQor
ICAgIH5WYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIoKQogICAgIHsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKQotICAgICAgICAgICAgbV9i
dWZmZXIuZ2V0KClbaV0uflZhbHVlUHJvZmlsZUFuZE9wZXJhbmQoKTsKKyAgICAgICAgICAgIG1f
YnVmZmVyLmdldCgpW2ldLn5WYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIoKTsKICAgICB9
CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CkBAIC0yMDgsNyArMjA4LDcgQEAg
c3RydWN0IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIgewogICAgIH0KIAogICAgIHVuc2ln
bmVkIG1fc2l6ZTsKLSAgICBNYWxsb2NQdHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZCwgVk1NYWxs
b2M+IG1fYnVmZmVyOworICAgIE1hbGxvY1B0cjxWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXIsIFZNTWFsbG9jPiBtX2J1ZmZlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCmluZGV4IGM1
Y2E0ZGUxZTRiMzYxMTIxNGMzNWFiMWVhMzJkYzFjYmY0NWYzZTkuLmIxMzk0N2YwZTE4ZGYwNjNh
ODhiM2YyMjdjZGNkYmZlZmZlZGMzMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5jcHAKQEAgLTM1LDIyICszNSwyMiBAQCBKU1ZhbHVlIFZh
bHVlUmVjb3Zlcnk6OnJlY292ZXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIGNvbnN0CiB7CiAgICAg
c3dpdGNoICh0ZWNobmlxdWUoKSkgewogICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgotICAg
ICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS5qc1Zh
bHVlKCk7CisgICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLmpz
VmFsdWUoKTsKICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICByZXR1
cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51bmJv
eGVkSW50MzIoKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcihjYWxsRnJhbWUtPnIodmlydHVh
bFJlZ2lzdGVyKCkpLnVuYm94ZWRJbnQzMigpKTsKICAgICBjYXNlIEludDUyRGlzcGxhY2VkSW5K
U1N0YWNrOgotICAgICAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdp
c3RlcigpLm9mZnNldCgpKS51bmJveGVkSW50NTIoKSk7CisgICAgICAgIHJldHVybiBqc051bWJl
cihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRJbnQ1MigpKTsKICAgICBj
YXNlIFN0cmljdEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICByZXR1cm4ganNOdW1i
ZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51bmJveGVkU3RyaWN0
SW50NTIoKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcihjYWxsRnJhbWUtPnIodmlydHVhbFJl
Z2lzdGVyKCkpLnVuYm94ZWRTdHJpY3RJbnQ1MigpKTsKICAgICBjYXNlIERvdWJsZURpc3BsYWNl
ZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHB1cmlmeU5hTihjYWxsRnJhbWUt
PnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94ZWREb3VibGUoKSkpOworICAgICAg
ICByZXR1cm4ganNOdW1iZXIocHVyaWZ5TmFOKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIo
KSkudW5ib3hlZERvdWJsZSgpKSk7CiAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgot
ICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51
bmJveGVkQ2VsbCgpOworICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3Rl
cigpKS51bmJveGVkQ2VsbCgpOwogICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxS
ZWdpc3RlcigpLm9mZnNldCgpKS5qc1ZhbHVlKCk7CisgICAgICAgIHJldHVybiBjYWxsRnJhbWUt
PnIodmlydHVhbFJlZ2lzdGVyKCkpLmpzVmFsdWUoKTsKICNlbHNlCi0gICAgICAgIHJldHVybiBq
c0Jvb2xlYW4oY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51bmJveGVk
Qm9vbGVhbigpKTsKKyAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihjYWxsRnJhbWUtPnIodmlydHVh
bFJlZ2lzdGVyKCkpLnVuYm94ZWRCb29sZWFuKCkpOwogI2VuZGlmCiAgICAgY2FzZSBDb25zdGFu
dDoKICAgICAgICAgcmV0dXJuIGNvbnN0YW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAppbmRleCBkOGYxOGMzZmU4NTU5NGYzMmEyOTNhZmQ4
OTA5MjIzNjEzNjJlYTYzLi41ZTQzYmM3MmJiY2M0ZmY5N2E2OGY4M2RhODMwOTRlNThkYTNiMzE0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVy
eS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1
YWxSZWdpc3Rlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdp
c3Rlci5oCmluZGV4IDM2MTk1Mjk0MmQyYjg2YmFiMTJmNmNjYzdjYzFiYTAyMWY1YWQwNDguLmZi
OTFhZjE5MDJiMTYxNzg0Y2FjZmFhYmJmMzQ2NjYyZGRmYTY0NzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKQEAgLTMxLDEyICszMSwx
MiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIGJvb2wgb3BlcmFuZElzTG9jYWwoaW50
IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJJc0xvY2FsKGludCBvcGVyYW5k
KQogewogICAgIHJldHVybiBvcGVyYW5kIDwgMDsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmFuZElz
QXJndW1lbnQoaW50IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJJc0FyZ3Vt
ZW50KGludCBvcGVyYW5kKQogewogICAgIHJldHVybiBvcGVyYW5kID49IDA7CiB9CkBAIC00Nywy
NyArNDcsMzQgQEAgY2xhc3MgUmVnaXN0ZXJJRDsKIGNsYXNzIFZpcnR1YWxSZWdpc3RlciB7CiBw
dWJsaWM6CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChpbnQpOwotICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGludCwgaW50KTsKKworICAgIHN0YXRpYyBjb25z
dGV4cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOworICAgIHN0YXRp
YyBjb25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFu
dFJlZ2lzdGVySW5kZXg7CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIoUmVnaXN0ZXJJRCopOwogICAg
IFZpcnR1YWxSZWdpc3RlcihSZWZQdHI8UmVnaXN0ZXJJRD4pOwogCiAgICAgVmlydHVhbFJlZ2lz
dGVyKCkKLSAgICAgICAgOiBtX3ZpcnR1YWxSZWdpc3RlcihzX2ludmFsaWRWaXJ0dWFsUmVnaXN0
ZXIpCisgICAgICAgIDogbV92aXJ0dWFsUmVnaXN0ZXIoaW52YWxpZFZpcnR1YWxSZWdpc3RlcikK
ICAgICB7IH0KIAogICAgIGV4cGxpY2l0IFZpcnR1YWxSZWdpc3RlcihpbnQgdmlydHVhbFJlZ2lz
dGVyKQogICAgICAgICA6IG1fdmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlcikKICAgICB7
IH0KIAotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3Rl
ciAhPSBzX2ludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0xvY2FsKCkgY29u
c3QgeyByZXR1cm4gb3BlcmFuZElzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9v
bCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4gb3BlcmFuZElzQXJndW1lbnQobV92aXJ0dWFs
UmVnaXN0ZXIpOyB9CisgICAgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Qgc2xvdCkKKyAg
ICAgICAgOiBtX3ZpcnR1YWxSZWdpc3RlcihzdGF0aWNfY2FzdDxpbnQ+KHNsb3QpKQorICAgIHsg
fQorCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gKG1fdmlydHVhbFJlZ2lzdGVy
ICE9IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgYm9vbCBpc0xvY2FsKCkgY29uc3Qg
eyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNMb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KKyAg
ICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0FyZ3Vt
ZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQogICAgIGJvb2wgaXNIZWFkZXIoKSBjb25zdCB7IHJl
dHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSAwICYmIG1fdmlydHVhbFJlZ2lzdGVyIDwgQ2FsbEZy
YW1lU2xvdDo6dGhpc0FyZ3VtZW50OyB9Ci0gICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3QgeyBy
ZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gc19maXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsg
fQorICAgIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVy
ID49IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9CiAgICAgaW50IHRvTG9jYWwoKSBjb25z
dCB7IEFTU0VSVChpc0xvY2FsKCkpOyByZXR1cm4gb3BlcmFuZFRvTG9jYWwobV92aXJ0dWFsUmVn
aXN0ZXIpOyB9CiAgICAgaW50IHRvQXJndW1lbnQoKSBjb25zdCB7IEFTU0VSVChpc0FyZ3VtZW50
KCkpOyByZXR1cm4gb3BlcmFuZFRvQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAg
aW50IHRvQ29uc3RhbnRJbmRleCgpIGNvbnN0IHsgQVNTRVJUKGlzQ29uc3RhbnQoKSk7IHJldHVy
biBtX3ZpcnR1YWxSZWdpc3RlciAtIHNfZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KKyAg
ICBpbnQgdG9Db25zdGFudEluZGV4KCkgY29uc3QgeyBBU1NFUlQoaXNDb25zdGFudCgpKTsgcmV0
dXJuIG1fdmlydHVhbFJlZ2lzdGVyIC0gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KICAg
ICBpbnQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXI7IH0KICAgICBp
bnQgb2Zmc2V0SW5CeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyICogc2l6
ZW9mKFJlZ2lzdGVyKTsgfQogCkBAIC0xMDYsOSArMTEzLDYgQEAgcHVibGljOgogICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgY29u
c3RleHByIGludCBzX2ludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgaW50IHNfZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggPSBGaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleDsKLQogICAgIHN0YXRpYyBpbnQgbG9jYWxUb09wZXJhbmQoaW50
IGxvY2FsKSB7IHJldHVybiAtMSAtIGxvY2FsOyB9CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KQEAgLTEyNCw3ICsxMjgsNyBAQCBpbmxpbmUg
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGludCBsb2NhbCkKICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6bG9jYWxUb09wZXJhbmQobG9j
YWwpKTsKIH0KIAotaW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChpbnQgYXJndW1lbnQsIGludCBvZmZzZXQgPSAwKQoraW5saW5lIFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaW50IGFyZ3VtZW50LCBp
bnQgb2Zmc2V0ID0gMCkKIHsKICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3Rlcjo6YXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAKaW5kZXggOTEwMWQxMGRkOGVjNGZjMjI5YTdmOGEwOTE2OGM3Yzg0NWUyNjkxMS4uYzFm
ODYzOWFhNDhiOGJmYzVkZGI3MTRjZDAyNDE1NzEzYjk4ZmVhMiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAK
QEAgLTUxMiw3ICs1MTIsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3Io
Vk0mIHZtLCBGdW5jdGlvbk5vZGUqIGZ1bmN0aW9uTm9kZSwgVW5saW5rZQogICAgICAgICAgICAg
ICAgICAgICBlbnRyeS5kaXNhYmxlV2F0Y2hpbmcobV92bSk7CiAgICAgICAgICAgICAgICAgICAg
IGZ1bmN0aW9uU3ltYm9sVGFibGUtPnNldChOb0xvY2tpbmdOZWNlc3NhcnksIG5hbWUsIGVudHJ5
KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgT3BQdXRUb1Njb3BlOjplbWl0
KHRoaXMsIG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIsIFVJTlRfTUFYLCB2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudCgxICsgaSksIEdldFB1dEluZm8oVGhyb3dJZk5vdEZvdW5kLCBMb2Nh
bENsb3N1cmVWYXIsIEluaXRpYWxpemF0aW9uTW9kZTo6Tm90SW5pdGlhbGl6YXRpb24pLCBTeW1i
b2xUYWJsZU9yU2NvcGVEZXB0aDo6c3ltYm9sVGFibGUoVmlydHVhbFJlZ2lzdGVyIHsgc3ltYm9s
VGFibGVDb25zdGFudEluZGV4IH0pLCBvZmZzZXQub2Zmc2V0KCkpOworICAgICAgICAgICAgICAg
IE9wUHV0VG9TY29wZTo6ZW1pdCh0aGlzLCBtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyLCBV
SU5UX01BWCwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDEgKyBpKSwg
R2V0UHV0SW5mbyhUaHJvd0lmTm90Rm91bmQsIExvY2FsQ2xvc3VyZVZhciwgSW5pdGlhbGl6YXRp
b25Nb2RlOjpOb3RJbml0aWFsaXphdGlvbiksIFN5bWJvbFRhYmxlT3JTY29wZURlcHRoOjpzeW1i
b2xUYWJsZShWaXJ0dWFsUmVnaXN0ZXIgeyBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXggfSksIG9m
ZnNldC5vZmZzZXQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IC8vIFRoaXMgY3JlYXRlcyBhIHNjb3BlZCBhcmd1bWVudHMgb2JqZWN0IGFuZCBjb3BpZXMgdGhl
IG92ZXJmbG93IGFyZ3VtZW50cyBpbnRvIHRoZQpAQCAtNTQxLDcgKzU0MSw3IEBAIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYgdm0sIEZ1bmN0aW9uTm9kZSogZnVuY3Rp
b25Ob2RlLCBVbmxpbmtlCiAgICAgICAgICAgICBpZiAoIWNhcHR1cmVzKG5hbWUpKSB7CiAgICAg
ICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZWFzeSBjYXNlIC0ganVzdCB0ZWxsIHRoZSBzeW1i
b2wgdGFibGUgYWJvdXQgdGhlIGFyZ3VtZW50LiBJdCB3aWxsCiAgICAgICAgICAgICAgICAgLy8g
YmUgYWNjZXNzZWQgZGlyZWN0bHkuCi0gICAgICAgICAgICAgICAgZnVuY3Rpb25TeW1ib2xUYWJs
ZS0+c2V0KE5vTG9ja2luZ05lY2Vzc2FyeSwgbmFtZSwgU3ltYm9sVGFibGVFbnRyeShWYXJPZmZz
ZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSArIGkpKSkpOworICAgICAgICAgICAgICAg
IGZ1bmN0aW9uU3ltYm9sVGFibGUtPnNldChOb0xvY2tpbmdOZWNlc3NhcnksIG5hbWUsIFN5bWJv
bFRhYmxlRW50cnkoVmFyT2Zmc2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5n
VGhpcygxICsgaSkpKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKQEAgLTU1MCw3ICs1NTAsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0
ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBGdW5jdGlvbk5vZGUqIGZ1bmN0aW9uTm9kZSwgVW5saW5r
ZQogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IEJpbmRpbmdOb2RlKj4ocGFyYW1l
dGVycy5hdChpKS5maXJzdCktPmJvdW5kUHJvcGVydHkoKTsKICAgICAgICAgICAgIGZ1bmN0aW9u
U3ltYm9sVGFibGUtPnNldChOb0xvY2tpbmdOZWNlc3NhcnksIG5hbWUsIFN5bWJvbFRhYmxlRW50
cnkoVmFyT2Zmc2V0KG9mZnNldCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgT3BQdXRU
b1Njb3BlOjplbWl0KHRoaXMsIG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIsIGFkZENvbnN0
YW50KGlkZW50KSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSArIGkpLCBHZXRQdXRJbmZv
KFRocm93SWZOb3RGb3VuZCwgTG9jYWxDbG9zdXJlVmFyLCBJbml0aWFsaXphdGlvbk1vZGU6Ok5v
dEluaXRpYWxpemF0aW9uKSwgU3ltYm9sVGFibGVPclNjb3BlRGVwdGg6OnN5bWJvbFRhYmxlKFZp
cnR1YWxSZWdpc3RlciB7IHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCB9KSwgb2Zmc2V0Lm9mZnNl
dCgpKTsKKyAgICAgICAgICAgIE9wUHV0VG9TY29wZTo6ZW1pdCh0aGlzLCBtX2xleGljYWxFbnZp
cm9ubWVudFJlZ2lzdGVyLCBhZGRDb25zdGFudChpZGVudCksIHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50SW5jbHVkaW5nVGhpcygxICsgaSksIEdldFB1dEluZm8oVGhyb3dJZk5vdEZvdW5kLCBM
b2NhbENsb3N1cmVWYXIsIEluaXRpYWxpemF0aW9uTW9kZTo6Tm90SW5pdGlhbGl6YXRpb24pLCBT
eW1ib2xUYWJsZU9yU2NvcGVEZXB0aDo6c3ltYm9sVGFibGUoVmlydHVhbFJlZ2lzdGVyIHsgc3lt
Ym9sVGFibGVDb25zdGFudEluZGV4IH0pLCBvZmZzZXQub2Zmc2V0KCkpOwogICAgICAgICB9CiAg
ICAgfQogICAgIApAQCAtMTE4NiwxMCArMTE4NiwxMCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9y
Ojppbml0aWFsaXplQXJyb3dGdW5jdGlvbkNvbnRleHRTY29wZUlmTmVlZGVkKFN5bWJvbFRhYmxl
KgogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZU5leHRQYXJhbWV0
ZXIoKQogewotICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVnID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKG1fY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCkpOwogICAgIG1fcGFyYW1ldGVycy5ncm93KG1fcGFyYW1ldGVycy5z
aXplKCkgKyAxKTsKICAgICBhdXRvJiBwYXJhbWV0ZXIgPSByZWdpc3RlckZvcihyZWcpOwotICAg
IHBhcmFtZXRlci5zZXRJbmRleChyZWcub2Zmc2V0KCkpOworICAgIHBhcmFtZXRlci5zZXRJbmRl
eChyZWcpOwogICAgIG1fY29kZUJsb2NrLT5hZGRQYXJhbWV0ZXIoKTsKICAgICByZXR1cm4gJnBh
cmFtZXRlcjsKIH0KQEAgLTExOTgsNyArMTE5OCw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6
OmluaXRpYWxpemVQYXJhbWV0ZXJzKEZ1bmN0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKIHsK
ICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvZGUgYmxvY2sga25vd3MgYWJvdXQgYWxsIG9mIG91ciBw
YXJhbWV0ZXJzLCBhbmQgbWFrZSBzdXJlIHRoYXQgcGFyYW1ldGVycwogICAgIC8vIG5lZWRpbmcg
ZGVzdHJ1Y3R1cmluZyBhcmUgbm90ZWQuCi0gICAgbV90aGlzUmVnaXN0ZXIuc2V0SW5kZXgoaW5p
dGlhbGl6ZU5leHRQYXJhbWV0ZXIoKS0+aW5kZXgoKSk7IC8vIHRoaXMKKyAgICBtX3RoaXNSZWdp
c3Rlci5zZXRJbmRleChWaXJ0dWFsUmVnaXN0ZXIoaW5pdGlhbGl6ZU5leHRQYXJhbWV0ZXIoKS0+
aW5kZXgoKSkpOyAvLyB0aGlzCiAKICAgICBib29sIG5vblNpbXBsZUFyZ3VtZW50cyA9IGZhbHNl
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnNpemUoKTsgKytpKSB7
CkBAIC0xNjM5LDExICsxNjM5LDExIEBAIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFcXVh
bGl0eU9wSW1wbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYzEsIFJlCiAKICAgICBp
ZiAobV9sYXN0SW5zdHJ1Y3Rpb24tPmlzPE9wVHlwZW9mPigpKSB7CiAgICAgICAgIGF1dG8gb3Ag
PSBtX2xhc3RJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCk7Ci0gICAgICAgIGlmIChzcmMxLT5p
bmRleCgpID09IG9wLm1fZHN0Lm9mZnNldCgpCisgICAgICAgIGlmIChzcmMxLT52aXJ0dWFsUmVn
aXN0ZXIoKSA9PSBvcC5tX2RzdAogICAgICAgICAgICAgJiYgc3JjMS0+aXNUZW1wb3JhcnkoKQot
ICAgICAgICAgICAgJiYgbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYzIt
PmluZGV4KCkpCi0gICAgICAgICAgICAmJiBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3Rlcihz
cmMyLT5pbmRleCgpKS5nZXQoKS5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICBjb25zdCBTdHJp
bmcmIHZhbHVlID0gYXNTdHJpbmcobV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+
aW5kZXgoKSkuZ2V0KCkpLT50cnlHZXRWYWx1ZSgpOworICAgICAgICAgICAgJiYgc3JjMi0+dmly
dHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFudCgpCisgICAgICAgICAgICAmJiBtX2NvZGVCbG9jay0+
Y29uc3RhbnRSZWdpc3RlcihzcmMyLT52aXJ0dWFsUmVnaXN0ZXIoKSkuZ2V0KCkuaXNTdHJpbmco
KSkgeworICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGFzU3RyaW5nKG1fY29kZUJs
b2NrLT5jb25zdGFudFJlZ2lzdGVyKHNyYzItPnZpcnR1YWxSZWdpc3RlcigpKS5nZXQoKSktPnRy
eUdldFZhbHVlKCk7CiAgICAgICAgICAgICBpZiAodmFsdWUgPT0gInVuZGVmaW5lZCIpIHsKICAg
ICAgICAgICAgICAgICByZXdpbmQoKTsKICAgICAgICAgICAgICAgICBPcElzVW5kZWZpbmVkOjpl
bWl0KHRoaXMsIGRzdCwgb3AubV92YWx1ZSk7CkBAIC0zMjkwLDYgKzMyOTAsOCBAQCBSZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogZnVuYwogICAgIC8vIEVtaXQgY2FsbC4KICAgICBBU1NFUlQoZHN0ICE9IGln
bm9yZWRSZXN1bHQoKSk7CiAgICAgVmFyYXJnc09wOjplbWl0KHRoaXMsIGRzdCwgZnVuYywgdGhp
c1JlZ2lzdGVyLCBhcmd1bWVudHMgPyBhcmd1bWVudHMgOiBWaXJ0dWFsUmVnaXN0ZXIoMCksIGZp
cnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgaWYgKFZhcmFyZ3NPcDo6
b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQorICAgICAgICBBU1NF
UlQobV9jb2RlQmxvY2stPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIHJldHVybiBkc3Q7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaAppbmRleCBjOWU0ZjY5NjE2ZmVkNzNmNDE5ODkxMGQ3YjRlOWQzOGUzMzU1YTZm
Li40MmM2MzAyNjBlZTZlYjhkYjYxNjMzODJmNjBmNjdjNWU4NDBmN2YwIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
CkBAIC0xMDE5LDYgKzEwMTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzaG91
bGRFbWl0Q29udHJvbEZsb3dQcm9maWxlckhvb2tzKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlR2Vu
ZXJhdGlvbk1vZGUuY29udGFpbnMoQ29kZUdlbmVyYXRpb25Nb2RlOjpDb250cm9sRmxvd1Byb2Zp
bGVyKTsgfQogICAgICAgICAKICAgICAgICAgYm9vbCBpc1N0cmljdE1vZGUoKSBjb25zdCB7IHJl
dHVybiBtX2NvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCk7IH0KKyAgICAgICAgdm9pZCBzZXRVc2Vz
Q2hlY2twb2ludHMoKSB7IG1fY29kZUJsb2NrLT5zZXRIYXNDaGVja3BvaW50cygpOyB9CiAKICAg
ICAgICAgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJs
b2NrLT5wYXJzZU1vZGUoKTsgfQogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9SZWdpc3RlcklELmgKaW5kZXggZGEzZmUxMjgwMDkwZjQwZTczZjgxZDIx
MjBkZmNkNWVmOTBkM2NlZS4uNzNiNDMyMDYzOGMzNDhmOTU1NGFhZTlhM2EzMjAyMzI4M2JkYjNj
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9SZWdpc3Rl
cklELmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9SZWdpc3RlcklE
LmgKQEAgLTY5LDEyICs2OSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAg
ICB9CiAKLSAgICAgICAgdm9pZCBzZXRJbmRleChpbnQgaW5kZXgpCisgICAgICAgIHZvaWQgc2V0
SW5kZXgoVmlydHVhbFJlZ2lzdGVyIGluZGV4KQogICAgICAgICB7CiAjaWYgQVNTRVJUX0VOQUJM
RUQKICAgICAgICAgICAgIG1fZGlkU2V0SW5kZXggPSB0cnVlOwogI2VuZGlmCi0gICAgICAgICAg
ICBtX3ZpcnR1YWxSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihpbmRleCk7CisgICAgICAgICAg
ICBtX3ZpcnR1YWxSZWdpc3RlciA9IGluZGV4OwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBz
ZXRUZW1wb3JhcnkoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEhlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhl
YXAuY3BwCmluZGV4IGI4M2ZlZTBkM2MwOWQxNDk3YWE3ZWExZGUzZTA0OTA2MmYyMjZjMTQuLmU2
NDA3MWIxYWEwZTM0ODk0NDM0MzlmZjI4ZmNhMjUxYjYyYjk2NWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAKQEAgLTQwLDYgKzQwLDE0IEBAIHZv
aWQgQWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAg
ICAgICAgIG91dC5wcmludCh2YWx1ZSgpKTsKIH0KIAordm9pZCBBYnN0cmFjdEhlYXA6OlBheWxv
YWQ6OmR1bXBBc09wZXJhbmQoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoaXNU
b3AoKSkKKyAgICAgICAgb3V0LnByaW50KCJUT1AiKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5w
cmludChPcGVyYW5kOjpmcm9tQml0cyh2YWx1ZSgpKSk7Cit9CisKIHZvaWQgQWJzdHJhY3RIZWFw
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KGtpbmQoKSk7
CkBAIC00OSw2ICs1NywxMyBAQCB2b2lkIEFic3RyYWN0SGVhcDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAogICAgICAgICBvdXQucHJpbnQoIigiLCBET01KSVQ6OkhlYXBSYW5nZTo6ZnJv
bVJhdyhwYXlsb2FkKCkudmFsdWUzMigpKSwgIikiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
KyAgICBpZiAoa2luZCgpID09IFN0YWNrKSB7CisgICAgICAgIG91dC5wcmludCgiKCIpOworICAg
ICAgICBwYXlsb2FkKCkuZHVtcEFzT3BlcmFuZChvdXQpOworICAgICAgICBvdXQucHJpbnQoIiki
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIG91dC5wcmludCgiKCIsIHBheWxvYWQo
KSwgIikiKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEhlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFw
LmgKaW5kZXggYmY5OTM3Nzk3MDQ3MDJkOGQ1YjIwYjZjMmY2ZjczOTVhZmU2Yjg2OC4uM2M0Y2Uz
ZDVkMDJkYzNhODFmM2FhNDI0Y2ZjM2ZkMWM0NDdjNTI5MCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxF
KERGR19KSVQpCiAKICNpbmNsdWRlICJET01KSVRIZWFwUmFuZ2UuaCIKKyNpbmNsdWRlICJPcGVy
YW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgpAQCAtMTIzLDEwICsx
MjQsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgLCBtX3ZhbHVlKGJpdHdpc2VfY2FzdDxpbnRw
dHJfdD4ocG9pbnRlcikpCiAgICAgICAgIHsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
UGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKworICAgICAgICBQYXlsb2FkKE9wZXJh
bmQgb3BlcmFuZCkKICAgICAgICAgICAgIDogbV9pc1RvcChmYWxzZSkKLSAgICAgICAgICAgICwg
bV92YWx1ZShvcGVyYW5kLm9mZnNldCgpKQorICAgICAgICAgICAgLCBtX3ZhbHVlKG9wZXJhbmQu
YXNCaXRzKCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFBheWxvYWQoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgICAgICA6IFBheWxvYWQoT3BlcmFuZChvcGVyYW5k
KSkKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIApAQCAtMTgzLDYgKzE4OSw3IEBAIHB1
YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisgICAgICAgIHZvaWQgZHVtcEFzT3BlcmFuZChQcmludFN0cmVhbSYpIGNvbnN0
OwogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBib29sIG1faXNUb3A7CkBAIC0yMDQs
NiArMjExLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKGtpbmQgIT0gSW52YWxp
ZEFic3RyYWN0SGVhcCAmJiBraW5kICE9IFdvcmxkICYmIGtpbmQgIT0gSGVhcCAmJiBraW5kICE9
IFNpZGVTdGF0ZSk7CiAgICAgICAgIG1fdmFsdWUgPSBlbmNvZGUoa2luZCwgcGF5bG9hZCk7Cisg
ICAgICAgIEFTU0VSVCh0aGlzLT5raW5kKCkgPT0ga2luZCAmJiB0aGlzLT5wYXlsb2FkKCkgPT0g
cGF5bG9hZCk7CiAgICAgfQogICAgIAogICAgIEFic3RyYWN0SGVhcChXVEY6Okhhc2hUYWJsZURl
bGV0ZWRWYWx1ZVR5cGUpCkBAIC0yMTksNiArMjI3LDExIEBAIHB1YmxpYzoKICAgICAgICAgQVNT
RVJUKGtpbmQoKSAhPSBXb3JsZCAmJiBraW5kKCkgIT0gSW52YWxpZEFic3RyYWN0SGVhcCk7CiAg
ICAgICAgIHJldHVybiBwYXlsb2FkSW1wbCgpOwogICAgIH0KKyAgICBPcGVyYW5kIG9wZXJhbmQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFjayAmJiAhcGF5bG9h
ZCgpLmlzVG9wKCkpOworICAgICAgICByZXR1cm4gT3BlcmFuZDo6ZnJvbUJpdHMocGF5bG9hZCgp
LnZhbHVlKCkpOworICAgIH0KICAgICAKICAgICBBYnN0cmFjdEhlYXAgc3VwZXJ0eXBlKCkgY29u
c3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXggYzI2YzI0YWZlYmUxY2Y3ZWRlMWEwNzg0
MGQwYzY2ZDk3NDY2ODAwMy4uZTUyODRhZDg1ZDFkNmY1NGY0Y2EzMmQ0OThmNzkzYWZhY2I1ZmJj
YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlcklubGluZXMuaApAQCAtMzg4LDcgKzM4OCw3IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNs
b2JiZXJMaW1pCiAgICAgICAgICAgICAKICAgICBjYXNlIEdldExvY2FsOiB7CiAgICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQo
dmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLm9mZnNldCgpKTsKKyAgICAgICAgQWJzdHJhY3RW
YWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQo
KSk7CiAgICAgICAgIC8vIFRoZSB2YWx1ZSBpbiB0aGUgbG9jYWwgc2hvdWxkIGFscmVhZHkgYmUg
Y2hlY2tlZC4KICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YWx1ZS5pc1R5cGUo
dHlwZUZpbHRlckZvcih2YXJpYWJsZUFjY2Vzc0RhdGEtPmZsdXNoRm9ybWF0KCkpKSk7CiAgICAg
ICAgIGlmICh2YWx1ZS52YWx1ZSgpKQpAQCAtMzk5LDcgKzM5OSw3IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNs
b2JiZXJMaW1pCiAgICAgICAgIAogICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgU3RhY2tB
Y2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3Ry
YWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+bG9jYWwpOworICAgICAgICBB
YnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpOwogICAg
ICAgICAvLyBUaGUgdmFsdWUgaW4gdGhlIGxvY2FsIHNob3VsZCBhbHJlYWR5IGJlIGNoZWNrZWQu
CiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFsdWUuaXNUeXBlKHR5cGVGaWx0
ZXJGb3IoZGF0YS0+Zm9ybWF0KSkpOwogICAgICAgICBpZiAodmFsdWUudmFsdWUoKSkKQEAgLTQw
OSwxMiArNDA5LDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlw
ZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgfQogICAgICAgICAK
ICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT5sb2Nh
bCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBtX3N0YXRlLm9wZXJhbmQo
bm9kZS0+b3BlcmFuZCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0U3RhY2s6IHsKLSAgICAgICAgbV9zdGF0
ZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkgPSBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0
YSgpLT5vcGVyYW5kKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgIApAQCAtNDM2LDcgKzQzNiw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJM
aW1pCiAgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJl
ZW4gc2V0LiBTZXRBcmd1bWVudERlZmluaXRlbHkvU2V0QXJndW1lbnRNYXliZSBtZWFucwogICAg
ICAgICAvLyB0aGF0IHNvbWVvbmUgc2V0IHRoZSBhcmd1bWVudCB2YWx1ZXMgb3V0LW9mLWJhbmQs
IGFuZCBjdXJyZW50bHkgdGhpcyBhbHdheXMgbWVhbnMgc2V0dGluZyB0byBhCiAgICAgICAgIC8v
IG5vbi1jbGVhciB2YWx1ZS4KLSAgICAgICAgQVNTRVJUKCFtX3N0YXRlLm9wZXJhbmQobm9kZS0+
bG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAgICAgQVNTRVJUKCFtX3N0YXRlLm9wZXJhbmQobm9k
ZS0+b3BlcmFuZCgpKS5pc0NsZWFyKCkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgSW5p
dGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6IHsKQEAgLTQ2NSw2ICs0NjUsMTIgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5z
aWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBWYXJh
cmdzTGVuZ3RoOiB7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBzZXRUeXBlRm9y
Tm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAg
Y2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgIC8v
IEZJWE1FOiBGb3J3YXJkVmFyYXJncyBzaG91bGQgY2hlY2sgaWYgdGhlIGNvdW50IGJlY29tZXMg
a25vd24sIGFuZCBpZiBpdCBkb2VzLCBpdCBzaG91bGQgdHVybgpAQCAtNDgzLDcgKzQ4OSw3IEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZl
Y3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9
IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAgICAgICBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+
Y291bnQpLnNldE5vbkNlbGxUeXBlKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBkYXRhLT5saW1pdCAtIDE7IGktLTspCi0gICAgICAgICAgICBtX3N0YXRlLm9wZXJh
bmQoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS5tYWtlSGVhcFRvcCgpOworICAgICAgICAgICAg
bV9zdGF0ZS5vcGVyYW5kKGRhdGEtPnN0YXJ0ICsgaSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCkBAIC0yMzY1LDkgKzIzNzEsOSBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVy
TGltaQogICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRJbmRleDsKICAgICAgICAgICAgIGlm
IChhcmd1bWVudEluZGV4Q2hlY2tlZC5zYWZlR2V0KGFyZ3VtZW50SW5kZXgpICE9IENoZWNrZWRT
dGF0ZTo6RGlkT3ZlcmZsb3cpIHsKICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1l
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudEluZGV4IDwgaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGFyZ3VtZW50SW5kZXggPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fc3RhdGUub3BlcmFuZCgKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudEluZGV4ICsg
MSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50
SW5kZXggKyAxKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fc3RhdGUuc2V0U2hvdWxkVHJ5Q29uc3RhbnRGb2xkaW5nKHRydWUpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAg
LTIzODgsNyArMjM5NCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAxICsgbm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsgaSA8
IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7ICsraSkgewogICAg
ICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSgKICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5v
cGVyYW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoaSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkgKyBpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91
bmRzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBv
c2l0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24u
aAppbmRleCBkNzMyNDdiOTNjNWRjNzg2YjYxN2FhNWFhZGMyYjBmNjE1Mjg2YjVmLi44OWMwOGZh
MDgwY2VhMzJmZDljNTkxZjMwZjFlN2RkNDZmMWQxMjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaApAQCAtMTIwLDcgKzEyMCw3IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZhcmlhYmxl
cy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZSA9IG1fdmFyaWFibGVzW2ldLT5maW5kKCk7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCA9IHZhcmlhYmxlLT5sb2NhbCgpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5k
ID0gdmFyaWFibGUtPm9wZXJhbmQoKTsKIAogICAgICAgICAgICAgaWYgKGkpCiAgICAgICAgICAg
ICAgICAgb3V0LnByaW50KCIgIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAppbmRleCA3MTNlNzk5OWE3
YmZjYTIxZGRjZWE4ZTM0NjI2MGYzNDMxZTRkOTQyLi45YmI0ZjRmMzRlNjcwMjlhNzQyMjk0YTk1
YTVkNzJmOWRjODg5YjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKQEAgLTM1OCw5ICszNTgsMTIg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKwogICAg
ICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5sb2FkVmFyYXJnc0RhdGEoKS0+b2Zmc2V0ICYmIChub2RlLT5jaGlsZDEoKS0+b3AoKSA9
PSBOZXdBcnJheVdpdGhTcHJlYWQgfHwgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gU3ByZWFkIHx8
IG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IE5ld0FycmF5QnVmZmVyKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGVzY2FwZShub2RlLT5jaGlsZDEoKSwgbm9kZSk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5sb2FkVmFyYXJnc0RhdGEoKS0+b2Zmc2V0ICYmIChub2RlLT5hcmd1bWVu
dHNDaGlsZCgpLT5vcCgpID09IE5ld0FycmF5V2l0aFNwcmVhZCB8fCBub2RlLT5hcmd1bWVudHND
aGlsZCgpLT5vcCgpID09IFNwcmVhZCB8fCBub2RlLT5hcmd1bWVudHNDaGlsZCgpLT5vcCgpID09
IE5ld0FycmF5QnVmZmVyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZShub2RlLT5h
cmd1bWVudHNDaGlsZCgpLCBub2RlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CkBAIC00
OTMsMTAgKzQ5NiwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVCghaGVhcC5wYXlsb2FkKCkuaXNUb3AoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVnKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBoZWFwLm9wZXJhbmQoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFRoZSByZWdpc3RlciBtYXkgbm90IHBvaW50IHRvIGFuIGFy
Z3VtZW50IG9yIGxvY2FsLCBmb3IgZXhhbXBsZSBpZiB3ZSBhcmUgbG9va2luZyBhdCBTZXRBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVn
LmlzSGVhZGVyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvYmJlcmVkQnlUaGlz
QmxvY2sub3BlcmFuZChyZWcpID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
b3BlcmFuZC5pc0hlYWRlcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJl
ZEJ5VGhpc0Jsb2NrLm9wZXJhbmQob3BlcmFuZCkgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICB9LAogICAgICAgICAgICAgICAgICAgICBOb09wQ2xvYmJlcml6ZSgpKTsKICAgICAgICAgICAg
IH0KQEAgLTU2MCwxNiArNTYzLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaXNDbG9iYmVyZWRCeUJsb2NrIHw9IGNsb2JiZXJlZEJ5VGhpc0Jsb2NrLm9wZXJh
bmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcykpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNDbG9iYmVyZWRCeUJsb2NrIHx8IGlubGluZUNh
bGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpc0Nsb2JiZXJlZEJ5QmxvY2sgfD0gY2xvYmJlcmVkQnlUaGlzQmxvY2sub3BlcmFuZCgKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQ2xvYmJlcmVkQnlCbG9jaykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7ICsraSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgLSAxKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkg
KwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZTo6YXJn
dW1lbnRPZmZzZXQoaSk7CkBAIC02MjcsNyArNjMwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgTm9PcENsb2JiZXJpemUoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChBYnN0cmFjdEhlYXAgaGVhcCkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYXAua2luZCgpID09IFN0
YWNrICYmICFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoaW5saW5lQ2Fs
bEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVT
dGFja1Nsb3QoaW5saW5lQ2FsbEZyYW1lLCBoZWFwLm9wZXJhbmQoKSkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CkBAIC03NTIsNyArNzU1LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgREZHX0FTU0VSVCgKICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgs
IG5vZGUsIG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFBoYW50b21EaXJlY3RBcmd1bWVudHMsIG5v
ZGUtPmNoaWxkMSgpLT5vcCgpKTsKICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlZyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dChub2RlLT5jYXB0dXJlZEFyZ3VtZW50c09mZnNldCgpLm9mZnNldCgpICsgMSkgKworICAgICAg
ICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlz
KG5vZGUtPmNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KCkub2Zmc2V0KCkgKyAxKSArCiAgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMuc3RhY2tPZmZzZXQoKTsKICAg
ICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0YWNr
QWNjZXNzRGF0YS5hZGQocmVnLCBGbHVzaGVkSlNWYWx1ZSk7CiAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPmNvbnZlcnRUb0dldFN0YWNrKGRhdGEpOwpAQCAtODA2LDE0ICs4MDksMTQgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBzYWZlVG9HZXRTdGFjayA9IGluZGV4ID49IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOwog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzYWZlVG9HZXRTdGFjayAmPSBpbmRleCA8IGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNhZmVUb0dldFN0YWNrICY9IGluZGV4IDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVU
b0dldFN0YWNrICY9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4IDwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpIC0gMTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzYWZl
VG9HZXRTdGFjaykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0
YSogZGF0YTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJn
ID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXggKyAxKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJnID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnRJbmNsdWRpbmdUaGlzKGluZGV4ICsgMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXJnICs9IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YSA9IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKGFyZywgRmx1c2hl
ZEpTVmFsdWUpOwpAQCAtODQ1LDkgKzg0OCwyMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jb252ZXJ0VG9JZGVudGl0eU9uKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmFyZ3VtZW50c0NoaWxkKCku
bm9kZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWxpbWluYXRlZEFsbG9jYXRpb24o
Y2FuZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICAgICAgICAgIC8vIFZhcmFyZ3NMZW5ndGggY2FuIGV4aXQsIHNvIGl0IGJldHRlciBiZSBleGl0
T0suCisgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+
b3JpZ2luLmV4aXRPSyk7CisgICAgICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0g
bm9kZS0+b3JpZ2luLndpdGhFeGl0T0sodHJ1ZSk7CisKKworICAgICAgICAgICAgICAgICAgICBu
b2RlLT5jb252ZXJ0VG9JZGVudGl0eU9uKGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0
aChpbnNlcnRpb25TZXQsIGNhbmRpZGF0ZSwgbm9kZUluZGV4LCBvcmlnaW4sIC8qIGFkZFRoaXMg
PSAqLyB0cnVlKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKwogICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKLSAgICAgICAgICAgICAg
ICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBub2RlLT5hcmd1bWVudHNDaGlsZCgpLm5vZGUo
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VsaW1pbmF0ZWRBbGxvY2F0aW9uKGNhbmRp
ZGF0ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgCkBAIC04NjIsMTAgKzg3OSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpzTnVtYmVyKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3RhY2ssIG5vZGUtPm9yaWdpbi50
YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5m
byh2YXJhcmdzRGF0YS0+Y291bnQub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBPcEluZm8odmFyYXJnc0RhdGEtPmNvdW50KSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChj
YW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEt
PmNvdW50Lm9mZnNldCgpKSwgRWRnZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc05vZGUpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEtPmNvdW50KSwg
RWRnZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc05vZGUpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRP
SyhjYW5FeGl0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5t
X3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyYXJnc0RhdGEtPmNvdW50LCBGbHVzaGVkSW50MzIpKSwK
QEAgLTg3NCwxNCArODkxLDE1IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICAgICAgYXV0
byBzdG9yZVZhbHVlID0gWyZdIChOb2RlKiB2YWx1ZSwgdW5zaWduZWQgc3RvcmVJbmRleCkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZhcmFyZ3NEYXRh
LT5zdGFydCArIHN0b3JlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVn
LmlzTG9jYWwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRh
dGEgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdGFja0FjY2Vzc0Rh
dGEuYWRkKHJlZywgRmx1c2hlZEpTVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3RhY2ssIG5vZGUt
Pm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLCBPcEluZm8ocmVnLm9mZnNldCgpKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgS2lsbFN0YWNr
LCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwgT3BJbmZvKHJlZykpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgbm9kZS0+b3Jp
Z2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
T3BJbmZvKHJlZy5vZmZzZXQoKSksIEVkZ2UodmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBPcEluZm8ocmVnKSwgRWRnZSh2YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZUluZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNh
bkV4aXQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhkYXRhKSwgRWRnZSh2
YWx1ZSkpOwpAQCAtOTM1LDcgKzk1Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3Qp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3Vt
ZW50c1RvU2tpcCA9IGNhbmRpZGF0ZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUgPSBjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZnJhbWVBcmd1bWVudENvdW50ID0g
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZyYW1lQXJndW1lbnRDb3VudCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzIC0gMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZUFy
Z3VtZW50Q291bnQgPj0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnJhbWVBcmd1bWVudENvdW50IC0gbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAw
OwpAQCAtOTgzLDkgKzEwMDEsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCA9IGNhbmRpZGF0ZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lID0gY2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmcmFtZUFyZ3Vt
ZW50Q291bnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0g
MTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZyYW1lQXJn
dW1lbnRDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGxvYWRJbmRleCA9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
OyBsb2FkSW5kZXggPCBmcmFtZUFyZ3VtZW50Q291bnQ7ICsrbG9hZEluZGV4KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGxvYWRJbmRleCArIDEpICsgaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGxvYWRJbmRleCArIDEpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEg
PSBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZChyZWcsIEZsdXNoZWRKU1ZhbHVlKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGluc2Vy
dGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBHZXRTdGFjaywgbm9kZS0+b3JpZ2luLndpdGhF
eGl0T0soY2FuRXhpdCksCkBAIC0xMDE5LDkgKzEwMzcsNyBAQCBwcml2YXRlOgogCiAgICAgICAg
ICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNhbmRp
ZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLQorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFy
Z3MoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgPiB2YXJhcmdzRGF0YS0+b2Zmc2V0KQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtPSB2YXJhcmdzRGF0YS0+b2Zmc2V0
OwpAQCAtMTAzMCw3ICsxMDQ2LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+PSAxKTsKIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyA8PSB2YXJhcmdzRGF0YS0+bGltaXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlQXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFyYXJnc0RhdGEt
PmxpbWl0IC0gMSA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSwgdmFyYXJnc0RhdGEt
PmxpbWl0LCB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSk7CkBAIC0xMDQ1LDcgKzEwNjAs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbG9hZEluZGV4ID0gc3RvcmVJbmRleCArIHZhcmFyZ3NEYXRhLT5vZmZzZXQ7CiAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2FkSW5kZXggKyAxIDwgaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudChsb2FkSW5kZXggKyAxKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlZyA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhsb2Fk
SW5kZXggKyAxKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFw
aC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlZywgRmx1c2hlZEpTVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIApAQCAtMTIwMSw3ICsxMjE2LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAgPSBjYW5kaWRhdGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDEgKyBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcDsgaSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7
ICsraSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NE
YXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQoCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkg
KyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhp
KSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRmx1c2hlZEpTVmFsdWUpOwogCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKApA
QCAtMTIyNyw3ICsxMjQyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBWZWN0b3I8Tm9kZSo+IGFyZ3VtZW50czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAxICsgdmFyYXJnc0RhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0OyBpIDwg
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgKytpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3Jh
cGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsdXNoZWRKU1Zh
bHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGll
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5j
cHAKaW5kZXggZmYxZDU2ODBmYWUwYTIwMDE0ZDFmMWUxM2RjM2U0OGQ4YzU0MzMxZC4uMWZkYzMw
OTk0ODhmYTk5NmVmYTJjYzBhNjk4MzU4YzBhNDkxNWM2YiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcApAQCAtMzIsMTEgKzMy
LDE1IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotYm9vbCBhcmd1bWVu
dHNJbnZvbHZlU3RhY2tTbG90KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0
dWFsUmVnaXN0ZXIgcmVnKQorYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpCiB7CisgICAgaWYgKG9w
ZXJhbmQuaXNUbXAoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmlydHVhbFJlZ2lz
dGVyIHJlZyA9IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgaWYgKCFpbmxpbmVDYWxs
RnJhbWUpCiAgICAgICAgIHJldHVybiAocmVnLmlzQXJndW1lbnQoKSAmJiByZWcudG9Bcmd1bWVu
dCgpKSB8fCByZWcuaXNIZWFkZXIoKTsKLSAgICAKKwogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUt
PmlzQ2xvc3VyZUNhbGwKICAgICAgICAgJiYgcmVnID09IFZpcnR1YWxSZWdpc3RlcihpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC00NiwxOSArNTAsMTkgQEAgYm9vbCBhcmd1bWVudHNJbnZvbHZlU3Rh
Y2tTbG90KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgLy8gV2UgZG8gbm90IGluY2x1ZGUgZml4
dXBzIGhlcmUgc2luY2UgaXQgaXMgbm90IHJlbGF0ZWQgdG8gfGFyZ3VtZW50c3wsIHJlc3QgcGFy
YW1ldGVycywgYW5kIHZhcmFyZ3MuCi0gICAgdW5zaWduZWQgbnVtQXJndW1lbnRzID0gaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7CisgICAgdW5zaWduZWQg
bnVtQXJndW1lbnRzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1l
bnRTdGFydCA9CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0KSArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCk7CiAgICAgcmV0dXJuIHJlZyA+
PSBhcmd1bWVudFN0YXJ0ICYmIHJlZyA8IGFyZ3VtZW50U3RhcnQgKyBudW1Bcmd1bWVudHM7CiB9
CiAKLWJvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChOb2RlKiBjYW5kaWRhdGUsIFZpcnR1
YWxSZWdpc3RlciByZWcpCitib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoTm9kZSogY2Fu
ZGlkYXRlLCBPcGVyYW5kIG9wZXJhbmQpCiB7Ci0gICAgcmV0dXJuIGFyZ3VtZW50c0ludm9sdmVT
dGFja1Nsb3QoY2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCksIHJl
Zyk7CisgICAgcmV0dXJuIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCksIG9wZXJhbmQpOwogfQogCiBOb2RlKiBlbWl0
Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCi0gICAgSW5zZXJ0aW9uU2V0JiBpbnNlcnRp
b25TZXQsIE5vZGUqIGFyZ3VtZW50cywgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luIG9y
aWdpbikKKyAgICBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCwgTm9kZSogYXJndW1lbnRzLCB1
bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBib29sIGFkZFRoaXMpCiB7CiAg
ICAgR3JhcGgmIGdyYXBoID0gaW5zZXJ0aW9uU2V0LmdyYXBoKCk7CiAKQEAgLTY5LDExICs3Mywx
NCBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAgICAgICAgIHx8
IGFyZ3VtZW50cy0+b3AoKSA9PSBOZXdBcnJheUJ1ZmZlcgogICAgICAgICB8fCBhcmd1bWVudHMt
Pm9wKCkgPT0gUGhhbnRvbURpcmVjdEFyZ3VtZW50cyB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhh
bnRvbUNsb25lZEFyZ3VtZW50cwogICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRv
bUNyZWF0ZVJlc3QgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZlcgot
ICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCwK
KyAgICAgICAgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQg
fHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21TcHJlYWQsCiAgICAgICAgIGFyZ3VtZW50cy0+
b3AoKSk7CiAKKyAgICBpZiAoYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21TcHJlYWQpCisgICAg
ICAgIHJldHVybiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoaW5zZXJ0aW9uU2V0
LCBhcmd1bWVudHMtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZUluZGV4LCBvcmlnaW4sIGFkZFRoaXMp
OworCiAgICAgaWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFk
KSB7Ci0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mTm9uU3ByZWFkQXJndW1lbnRzID0gMDsKKyAg
ICAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25TcHJlYWRBcmd1bWVudHMgPSBhZGRUaGlzOwogICAg
ICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IGFyZ3VtZW50cy0+Yml0VmVjdG9yKCk7CiAgICAg
ICAgIE5vZGUqIGN1cnJlbnRTdW0gPSBudWxscHRyOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgYXJndW1lbnRzLT5udW1DaGlsZHJlbigpOyBpKyspIHsKQEAgLTEwMyw3ICsxMTAs
NyBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAKICAgICBpZiAo
YXJndW1lbnRzLT5vcCgpID09IE5ld0FycmF5QnVmZmVyIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQ
aGFudG9tTmV3QXJyYXlCdWZmZXIpIHsKICAgICAgICAgcmV0dXJuIGluc2VydGlvblNldC5pbnNl
cnRDb25zdGFudCgKLSAgICAgICAgICAgIG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihhcmd1
bWVudHMtPmNhc3RPcGVyYW5kPEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oKS0+bGVuZ3RoKCkpKTsK
KyAgICAgICAgICAgIG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihhcmd1bWVudHMtPmNhc3RP
cGVyYW5kPEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oKS0+bGVuZ3RoKCkgKyBhZGRUaGlzKSk7CiAg
ICAgfQogICAgIAogICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gYXJndW1l
bnRzLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CkBAIC0xMTMsNyArMTIwLDcg
QEAgTm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAogICAgICAgICBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGFyZ3VtZW50cy0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAo
KTsKICAgICAKICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlz
VmFyYXJncygpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50c1NpemUgPSBpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsKKyAgICAgICAgdW5zaWduZWQg
YXJndW1lbnRzU2l6ZSA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgLSAhYWRkVGhpczsKICAgICAgICAgaWYgKGFyZ3VtZW50c1NpemUgPj0gbnVtYmVyT2ZBcmd1
bWVudHNUb1NraXApCiAgICAgICAgICAgICBhcmd1bWVudHNTaXplIC09IG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwOwogICAgICAgICBlbHNlCkBAIC0xMjksMTQgKzEzNiwxNCBAQCBOb2RlKiBlbWl0
Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAgICAgICAgIG5vZGVJbmRleCwgU3BlY0lu
dDMyT25seSwgQXJpdGhTdWIsIG9yaWdpbiwgT3BJbmZvKEFyaXRoOjpVbmNoZWNrZWQpLAogICAg
ICAgICBFZGdlKGFyZ3VtZW50Q291bnQsIEludDMyVXNlKSwKICAgICAgICAgaW5zZXJ0aW9uU2V0
Lmluc2VydENvbnN0YW50Rm9yVXNlKAotICAgICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4sIGpz
TnVtYmVyKDEgKyBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCksIEludDMyVXNlKSk7CisgICAgICAg
ICAgICBub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIobnVtYmVyT2ZBcmd1bWVudHNUb1NraXAg
KyAhYWRkVGhpcyksIEludDMyVXNlKSk7CiAKICAgICBpZiAobnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXApIHsKICAgICAgICAgLy8gVGhlIGFib3ZlIHN1YnRyYWN0aW9uIG1heSBwcm9kdWNlIGEgbmVn
YXRpdmUgbnVtYmVyIGlmIHRoaXMgbnVtYmVyIGlzIG5vbi16ZXJvLiBXZSBjb3JyZWN0IHRoYXQg
aGVyZS4KICAgICAgICAgcmVzdWx0ID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAg
ICAgICBub2RlSW5kZXgsIFNwZWNJbnQzMk9ubHksIEFyaXRoTWF4LCBvcmlnaW4sIAogICAgICAg
ICAgICAgRWRnZShyZXN1bHQsIEludDMyVXNlKSwgCi0gICAgICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0Q29uc3RhbnRGb3JVc2Uobm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKDApLCBJbnQz
MlVzZSkpOworICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50Rm9yVXNlKG5v
ZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYWRkVGhpcykp
LCBJbnQzMlVzZSkpOwogICAgICAgICByZXN1bHQtPnNldFJlc3VsdChOb2RlUmVzdWx0SW50MzIp
OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1
bWVudHNVdGlsaXRpZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRz
VXRpbGl0aWVzLmgKaW5kZXggOWE3NzE4ZmJiZjU0N2IyZjZhZTEwMWRhZjM3NGEwNmEyYzNkZGYx
Mi4uNzRmOTM5ZTgxNjIyZDQwMjQ2ZTIzNTVkNTA5OGE5ZWQyYTg1MjEwZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oCkBAIC0zMSwx
MSArMzEsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1ib29sIGFy
Z3VtZW50c0ludm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVy
KTsKLWJvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChOb2RlKiBjYW5kaWRhdGUsIFZpcnR1
YWxSZWdpc3Rlcik7Citib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZy
YW1lKiwgT3BlcmFuZCk7Citib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoTm9kZSogY2Fu
ZGlkYXRlLCBPcGVyYW5kKTsKIAogTm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVu
Z3RoKAotICAgIEluc2VydGlvblNldCYsIE5vZGUqIGFyZ3VtZW50cywgdW5zaWduZWQgbm9kZUlu
ZGV4LCBOb2RlT3JpZ2luKTsKKyAgICBJbnNlcnRpb25TZXQmLCBOb2RlKiBhcmd1bWVudHMsIHVu
c2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiwgYm9vbCBhZGRUaGlzID0gZmFsc2UpOwogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgKaW5kZXggOTZkYWMzOWE0NDRmZmJkM2NlNTQz
ZjU3ZjM2Y2Q2MWRlY2MyOGJkNC4uODk3YzcwZGZmYmEwNjZiNjQ5Y2FmZGNjMWVmMDkzMzc2ODEw
NGQxMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0
cmFjdFN0YXRlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0
cmFjdFN0YXRlLmgKQEAgLTEzOSw4ICsxMzksNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRh
aWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgfQogICAgIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzKCkg
Y29uc3QgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7IH0K
LSAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKGludCBvcGVyYW5kKSB7IHJldHVybiBtX2Jsb2Nr
LT52YWx1ZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsgfQotICAgIEFic3RyYWN0VmFsdWUmIG9w
ZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0
VGFpbC5vcGVyYW5kKG9wZXJhbmQpOyB9CisgICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChPcGVy
YW5kIG9wZXJhbmQpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5vcGVyYW5kKG9wZXJh
bmQpOyB9CiAgICAgQWJzdHJhY3RWYWx1ZSYgbG9jYWwoc2l6ZV90IGluZGV4KSB7IHJldHVybiBt
X2Jsb2NrLT52YWx1ZXNBdFRhaWwubG9jYWwoaW5kZXgpOyB9CiAgICAgQWJzdHJhY3RWYWx1ZSYg
YXJndW1lbnQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwuYXJn
dW1lbnQoaW5kZXgpOyB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0F2YWlsYWJpbGl0eU1hcC5jcHAKaW5kZXggNzc0M2U3ZDAxZjFjYWQ3ODFkODRhYjAzZDNjMDlj
NzdmODAyOWJhNS4uYzJiNTVhYTVjNGE1MjI5YjFiMWE0NDMxYzE4N2FkZWY0NmMzZGIyNSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcApA
QCAtNjUsMTAgKzY1LDEwIEBAIHZvaWQgQXZhaWxhYmlsaXR5TWFwOjpwcnVuZUhlYXAoKQogCiB2
b2lkIEF2YWlsYWJpbGl0eU1hcDo6cHJ1bmVCeUxpdmVuZXNzKEdyYXBoJiBncmFwaCwgQ29kZU9y
aWdpbiB3aGVyZSkKIHsKLSAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGxvY2Fsc0NvcHkobV9s
b2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwgbV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSwgQXZh
aWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpKTsKKyAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGxv
Y2Fsc0NvcHkoT3BlcmFuZHNMaWtlLCBtX2xvY2FscywgQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJs
ZSgpKTsKICAgICBncmFwaC5mb3JBbGxMaXZlSW5CeXRlY29kZSgKICAgICAgICAgd2hlcmUsCi0g
ICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgeworICAgICAgICBbJl0gKE9wZXJhbmQg
cmVnKSB7CiAgICAgICAgICAgICBsb2NhbHNDb3B5Lm9wZXJhbmQocmVnKSA9IG1fbG9jYWxzLm9w
ZXJhbmQocmVnKTsKICAgICAgICAgfSk7CiAgICAgbV9sb2NhbHMgPSBXVEZNb3ZlKGxvY2Fsc0Nv
cHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxp
dHlNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmgK
aW5kZXggNTM1NTI1NjAyM2RkY2YyODBkYzU5NWIzM2E3YzdmZGVjNTRlNjRmMC4uODBjMTJiZjE4
MDI1YTU2MTA1OTZkYTI0ZTIzYzAyNWYyYWJlNGYyMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5oCkBAIC02Niw5ICs2Niw5IEBAIHN0cnVjdCBB
dmFpbGFiaWxpdHlNYXAgewogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNG
dW5jdG9yLCB0eXBlbmFtZSBBZGRGdW5jdG9yPgotICAgIHZvaWQgY2xvc2VTdGFydGluZ1dpdGhM
b2NhbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBjb25zdCBIYXNGdW5jdG9yJiBoYXMsIGNvbnN0IEFk
ZEZ1bmN0b3ImIGFkZCkKKyAgICB2b2lkIGNsb3NlU3RhcnRpbmdXaXRoTG9jYWwoT3BlcmFuZCBv
cCwgY29uc3QgSGFzRnVuY3RvciYgaGFzLCBjb25zdCBBZGRGdW5jdG9yJiBhZGQpCiAgICAgewot
ICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gbV9sb2NhbHMub3BlcmFuZChyZWcp
OworICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gbV9sb2NhbHMub3BlcmFuZChv
cCk7CiAgICAgICAgIGlmICghYXZhaWxhYmlsaXR5Lmhhc05vZGUoKSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Jhc2ljQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2Nr
LmNwcAppbmRleCBjOGQxZDE3ZDZkOWM3NTUwYzRiMWJlNTBmMGVkOWY3MjYxNzZmMjIzLi5lNDhl
MGMyNGYwMzk3ZjUxMTdkY2ZhNzIxODI0N2U3MjlkNjVjOTNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBERUZJTkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVO
VElGSUVSKEJhc2ljQmxvY2spOwogCi1CYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2Nh
bHMsIGZsb2F0IGV4ZWN1dGlvbkNvdW50KQorQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVt
TG9jYWxzLCB1bnNpZ25lZCBudW1UbXBzLCBmbG9hdCBleGVjdXRpb25Db3VudCkKICAgICA6IGJ5
dGVjb2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKICAgICAsIGluZGV4KE5vQmxvY2spCiAgICAgLCBj
ZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdEhlYWQoU3RydWN0dXJlc0FyZVdhdGNoZWQpCkBAIC01
MCwxMSArNTAsMTEgQEAgQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVj
b2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWcKICAgICAsIGlzTGlua2VkKGZh
bHNlKQogI2VuZGlmCiAgICAgLCBpc1JlYWNoYWJsZShmYWxzZSkKLSAgICAsIHZhcmlhYmxlc0F0
SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKLSAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1B
cmd1bWVudHMsIG51bUxvY2FscykKLSAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51
bUxvY2FscykKLSAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKLSAg
ICAsIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2Fs
cywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKQorICAgICwgdmFyaWFibGVzQXRIZWFkKG51bUFy
Z3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQorICAgICwgdmFyaWFibGVzQXRUYWlsKG51bUFy
Z3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQorICAgICwgdmFsdWVzQXRIZWFkKG51bUFyZ3Vt
ZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQorICAgICwgdmFsdWVzQXRUYWlsKG51bUFyZ3VtZW50
cywgbnVtTG9jYWxzLCBudW1UbXBzKQorICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRI
ZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzLCBBYnN0cmFjdFZhbHVlOjpmdWxs
VG9wKCkpCiAgICAgLCBleGVjdXRpb25Db3VudChleGVjdXRpb25Db3VudCkKIHsKIH0KQEAgLTcy
LDYgKzcyLDE1IEBAIHZvaWQgQmFzaWNCbG9jazo6ZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051
bUxvY2FscykKICAgICBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQuZW5zdXJlTG9jYWxz
KG5ld051bUxvY2FscywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKTsKIH0KIAordm9pZCBCYXNp
Y0Jsb2NrOjplbnN1cmVUbXBzKHVuc2lnbmVkIG5ld051bVRtcHMpCit7CisgICAgdmFyaWFibGVz
QXRIZWFkLmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAgdmFyaWFibGVzQXRUYWlsLmVuc3Vy
ZVRtcHMobmV3TnVtVG1wcyk7CisgICAgdmFsdWVzQXRIZWFkLmVuc3VyZVRtcHMobmV3TnVtVG1w
cyk7CisgICAgdmFsdWVzQXRUYWlsLmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAgaW50ZXJz
ZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkLmVuc3VyZVRtcHMobmV3TnVtVG1wcywgQWJzdHJhY3RW
YWx1ZTo6ZnVsbFRvcCgpKTsKK30KKwogdm9pZCBCYXNpY0Jsb2NrOjpyZXBsYWNlVGVybWluYWwo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogewogICAgIE5vZGVBbmRJbmRleCByZXN1bHQgPSBm
aW5kVGVybWluYWwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QmFzaWNCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgK
aW5kZXggZDQ1NzE3NWU4YjcxNTIzNWZjNzlkZDEyMjkwYzllZmQ5NzVlYjdjYi4uZDJjNWFlOWMx
M2YzYjRlNzc5Zjk4YTE0YzE3MDM3ZDk4Zjk2ZDlhYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYXNpY0Jsb2NrLmgKQEAgLTQ5LDExICs0OSwxMiBAQCBERUNMQVJFX0FMTE9DQVRP
Ul9XSVRIX0hFQVBfSURFTlRJRklFUihCYXNpY0Jsb2NrKTsKIHN0cnVjdCBCYXNpY0Jsb2NrIDog
UmVmQ291bnRlZDxCYXNpY0Jsb2NrPiB7CiAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NB
VEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKEJhc2ljQmxvY2spOwogICAgIEJhc2ljQmxvY2soCi0g
ICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRz
LCB1bnNpZ25lZCBudW1Mb2NhbHMsCisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVCZWdp
biwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMsIHVuc2lnbmVkIG51
bVRtcHMsCiAgICAgICAgIGZsb2F0IGV4ZWN1dGlvbkNvdW50KTsKICAgICB+QmFzaWNCbG9jaygp
OwogICAgIAogICAgIHZvaWQgZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxvY2Fscyk7Cisg
ICAgdm9pZCBlbnN1cmVUbXBzKHVuc2lnbmVkIG5ld051bVRtcHMpOwogICAgIAogICAgIHNpemVf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ub2Rlcy5zaXplKCk7IH0KICAgICBib29sIGlzRW1w
dHkoKSBjb25zdCB7IHJldHVybiAhc2l6ZSgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwCmluZGV4IDc1MDhlMjE5ZGM3YzU4M2Ri
OWVhOGZjZTY0Njg1ODk5OWUwNDYwZjkuLjAwOGNmNTIyNjk1N2M5YTgzNTg1YzVlNWUyYzEyNWYy
ZjhjZTRiMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJ
bnNlcnRpb25TZXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJ
bnNlcnRpb25TZXQuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHZvaWQgQmxvY2tJbnNlcnRpb25TZXQ6
Omluc2VydChzaXplX3QgaW5kZXgsIFJlZjxCYXNpY0Jsb2NrPiYmIGJsb2NrKQogCiBCYXNpY0Js
b2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHNpemVfdCBpbmRleCwgZmxvYXQgZXhlY3V0
aW9uQ291bnQpCiB7Ci0gICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBC
YXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXgoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRI
ZWFkLm51bWJlck9mQXJndW1lbnRzKCksIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVh
ZC5udW1iZXJPZkxvY2FscygpLCBleGVjdXRpb25Db3VudCkpOworICAgIFJlZjxCYXNpY0Jsb2Nr
PiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCksIG1fZ3Jh
cGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLCBtX2dyYXBo
LmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSwgbV9ncmFwaC5ibG9j
aygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mVG1wcygpLCBleGVjdXRpb25Db3VudCkpOwog
ICAgIGJsb2NrLT5pc1JlYWNoYWJsZSA9IHRydWU7CiAgICAgYXV0byogcmVzdWx0ID0gYmxvY2su
cHRyKCk7CiAgICAgaW5zZXJ0KGluZGV4LCBXVEZNb3ZlKGJsb2NrKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IDdlZmZhZDA3ZjIy
NDI1OGYwN2EyZTA0ZjZhYmZlZTA2MGIyZmFkNTAuLjA1N2ZkYjQwMmY4YjZkOTY4ZjIzMDM1Y2E2
N2U3ZDJlMmRmYzBiNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCkBAIC0xMTMsNiArMTEzLDcgQEAgcHVibGljOgogICAgICAgICAsIG1f
Y29uc3RhbnRPbmUoZ3JhcGguZnJlZXplKGpzTnVtYmVyKDEpKSkKICAgICAgICAgLCBtX251bUFy
Z3VtZW50cyhtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKQogICAgICAgICAsIG1fbnVtTG9j
YWxzKG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkKKyAgICAgICAgLCBtX251bVRtcHMo
bV9jb2RlQmxvY2stPm51bVRtcHMoKSkKICAgICAgICAgLCBtX3BhcmFtZXRlclNsb3RzKDApCiAg
ICAgICAgICwgbV9udW1QYXNzZWRWYXJBcmdzKDApCiAgICAgICAgICwgbV9pbmxpbmVTdGFja1Rv
cCgwKQpAQCAtMTQxLDYgKzE0MiwxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9ncmFwaC5i
bG9jayhpKS0+ZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7CiAgICAgfQogCisgICAgdm9pZCBl
bnN1cmVUbXBzKHVuc2lnbmVkIG5ld051bVRtcHMpCisgICAgeworICAgICAgICBWRVJCT1NFX0xP
RygiICAgZW5zdXJlVG1wczogdHJ5aW5nIHRvIHJhaXNlIG1fbnVtVG1wcyBmcm9tICIsIG1fbnVt
VG1wcywgIiB0byAiLCBuZXdOdW1UbXBzLCAiXG4iKTsKKyAgICAgICAgaWYgKG5ld051bVRtcHMg
PD0gbV9udW1UbXBzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX251bVRtcHMgPSBu
ZXdOdW1UbXBzOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ3JhcGgubnVtQmxv
Y2tzKCk7ICsraSkKKyAgICAgICAgICAgIG1fZ3JhcGguYmxvY2soaSktPmVuc3VyZVRtcHMobmV3
TnVtVG1wcyk7CisgICAgfQorCisKICAgICAvLyBIZWxwZXIgZm9yIG1pbiBhbmQgbWF4LgogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+CiAgICAgYm9vbCBoYW5kbGVNaW5NYXgo
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9mZnNldCwg
aW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNl
cnRDaGVja3MpOwpAQCAtMjcyLDcgKzI4NCwxNyBAQCBwcml2YXRlOgogICAgIHZvaWQgbGlua0Js
b2NrKEJhc2ljQmxvY2sqLCBWZWN0b3I8QmFzaWNCbG9jayo+JiBwb3NzaWJsZVRhcmdldHMpOwog
ICAgIHZvaWQgbGlua0Jsb2NrcyhWZWN0b3I8QmFzaWNCbG9jayo+JiB1bmxpbmtlZEJsb2Nrcywg
VmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKTsKICAgICAKLSAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICB2b2lkIHByb2dyZXNzVG9OZXh0Q2hlY2twb2ludCgpCisgICAgeworICAgICAgICBt
X2N1cnJlbnRJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgub2Zmc2V0KCksIG1f
Y3VycmVudEluZGV4LmNoZWNrcG9pbnQoKSArIDEpOworICAgICAgICAvLyBBdCB0aGlzIHBvaW50
LCBpdCdzIGFnYWluIE9LIHRvIE9TUiBleGl0LgorICAgICAgICBtX2V4aXRPSyA9IHRydWU7Cisg
ICAgICAgIGFkZFRvR3JhcGgoRXhpdE9LKTsKKworICAgICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1
ZSgpOworICAgIH0KKworICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFibGVBY2Nlc3NE
YXRhKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc0Nv
bnN0YW50KCkpOwogICAgICAgICAKQEAgLTI4MSwxNiArMzAzLDE0IEBAIHByaXZhdGU6CiAgICAg
fQogICAgIAogICAgIC8vIEdldC9TZXQgdGhlIG9wZXJhbmRzL3Jlc3VsdCBvZiBhIGJ5dGVjb2Rl
IGluc3RydWN0aW9uLgotICAgIE5vZGUqIGdldERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICBOb2RlKiBnZXREaXJlY3QoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAg
QVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CiAKLSAgICAgICAgLy8gSXMgdGhpcyBhbiBh
cmd1bWVudD8KICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQotICAgICAgICAgICAg
cmV0dXJuIGdldEFyZ3VtZW50KG9wZXJhbmQpOworICAgICAgICAgICAgcmV0dXJuIGdldEFyZ3Vt
ZW50KG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogCi0gICAgICAgIC8vIE11c3QgYmUgYSBs
b2NhbC4KLSAgICAgICAgcmV0dXJuIGdldExvY2FsKG9wZXJhbmQpOworICAgICAgICByZXR1cm4g
Z2V0TG9jYWxPclRtcChvcGVyYW5kKTsKICAgICB9CiAKICAgICBOb2RlKiBnZXQoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCkBAIC0zMDAsOCArMzIwLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IHVuc2lnbmVkIG9sZFNpemUgPSBtX2NvbnN0YW50cy5zaXplKCk7CiAgICAgICAgICAgICBpZiAo
Y29uc3RhbnRJbmRleCA+PSBvbGRTaXplIHx8ICFtX2NvbnN0YW50c1tjb25zdGFudEluZGV4XSkg
ewogICAgICAgICAgICAgICAgIGNvbnN0IENvZGVCbG9jayYgY29kZUJsb2NrID0gKm1faW5saW5l
U3RhY2tUb3AtPm1fY29kZUJsb2NrOwotICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBj
b2RlQmxvY2suZ2V0Q29uc3RhbnQob3BlcmFuZC5vZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAg
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiA9IGNvZGVC
bG9jay5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihvcGVyYW5kLm9mZnNldCgpKTsK
KyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gY29kZUJsb2NrLmdldENvbnN0YW50KG9w
ZXJhbmQpOworICAgICAgICAgICAgICAgIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBzb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24gPSBjb2RlQmxvY2suY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24ob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50SW5kZXggPj0gb2xk
U2l6ZSkgewogICAgICAgICAgICAgICAgICAgICBtX2NvbnN0YW50cy5ncm93KGNvbnN0YW50SW5k
ZXggKyAxKTsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkU2l6ZTsg
aSA8IG1fY29uc3RhbnRzLnNpemUoKTsgKytpKQpAQCAtMzYwLDkgKzM4MCwxMCBAQCBwcml2YXRl
OgogICAgICAgICAvLyBpbml0aWFsaXppbmcgbG9jYWxzIGF0IHRoZSB0b3Agb2YgYSBmdW5jdGlv
bi4KICAgICAgICAgSW1tZWRpYXRlTmFrZWRTZXQKICAgICB9OwotICAgIE5vZGUqIHNldERpcmVj
dChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9
IE5vcm1hbFNldCkKKworICAgIE5vZGUqIHNldERpcmVjdChPcGVyYW5kIG9wZXJhbmQsIE5vZGUq
IHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAgewotICAgICAgICBhZGRU
b0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhvcGVyYW5kLm9mZnNldCgpKSwgdmFsdWUpOworICAgICAg
ICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhvcGVyYW5kKSwgdmFsdWUpOwogCiAgICAgICAg
IC8vIFdlIGNhbid0IGV4aXQgYW55bW9yZSBiZWNhdXNlIG91ciBPU1IgZXhpdCBzdGF0ZSBoYXMg
Y2hhbmdlZC4KICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsKQEAgLTM3Niw3ICszOTcsNyBAQCBw
cml2YXRlOgogICAgICAgICAKICAgICAgICAgcmV0dXJuIGRlbGF5ZWQuZXhlY3V0ZSh0aGlzKTsK
ICAgICB9Ci0gICAgCisKICAgICB2b2lkIHByb2Nlc3NTZXRMb2NhbFF1ZXVlKCkKICAgICB7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NldExvY2FsUXVldWUuc2l6ZSgpOyAr
K2kpCkBAIC0zOTQsMTggKzQxNSwxNyBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQobm9kZS0+
b3AoKSA9PSBHZXRMb2NhbCk7CiAgICAgICAgIEFTU0VSVChub2RlLT5vcmlnaW4uc2VtYW50aWMu
Ynl0ZWNvZGVJbmRleCgpID09IG1fY3VycmVudEluZGV4KTsKICAgICAgICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7
Ci0gICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleShtX2N1cnJlbnRJbmRleCwg
bm9kZS0+bG9jYWwoKSk7CisgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSht
X2N1cnJlbnRJbmRleCwgbm9kZS0+b3BlcmFuZCgpKTsKICAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiA9IG1faW5saW5lU3RhY2tUb3AtPm1fbGF6eU9wZXJhbmRzLnByZWRpY3Rpb24o
bG9ja2VyLCBrZXkpOwogICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGlj
dChwcmVkaWN0aW9uKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCiAgICAgLy8gVXNl
ZCBpbiBpbXBsZW1lbnRpbmcgZ2V0L3NldCwgYWJvdmUsIHdoZXJlIHRoZSBvcGVyYW5kIGlzIGEg
bG9jYWwgdmFyaWFibGUuCi0gICAgTm9kZSogZ2V0TG9jYWwoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgTm9kZSogZ2V0TG9jYWxPclRtcChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAg
ICAgICB1bnNpZ25lZCBsb2NhbCA9IG9wZXJhbmQudG9Mb2NhbCgpOwotCi0gICAgICAgIE5vZGUq
IG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKTsKKyAg
ICAgICAgQVNTRVJUKG9wZXJhbmQuaXNUbXAoKSB8fCBvcGVyYW5kLmlzTG9jYWwoKSk7CisgICAg
ICAgIE5vZGUqJiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5k
KG9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgLy8gVGhpcyBoYXMgdHdvIGdvYWxzOiAxKSBs
aW5rIHRvZ2V0aGVyIHZhcmlhYmxlIGFjY2VzcyBkYXRhcywgYW5kIDIpCiAgICAgICAgIC8vIHRy
eSB0byBhdm9pZCBjcmVhdGluZyByZWR1bmRhbnQgR2V0TG9jYWxzLiAoMSkgaXMgcmVxdWlyZWQg
Zm9yCkBAIC00MzAsMjAgKzQ1MCwyNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgdmFyaWFibGUg
PSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CiAgICAgICAgIAogICAgICAgICBub2Rl
ID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcElu
Zm8odmFyaWFibGUpKSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
bG9jYWwobG9jYWwpID0gbm9kZTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQotICAgIE5v
ZGUqIHNldExvY2FsKGNvbnN0IENvZGVPcmlnaW4mIHNlbWFudGljT3JpZ2luLCBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkK
KyAgICBOb2RlKiBzZXRMb2NhbE9yVG1wKGNvbnN0IENvZGVPcmlnaW4mIHNlbWFudGljT3JpZ2lu
LCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxT
ZXQpCiAgICAgeworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8IG9wZXJhbmQuaXNM
b2NhbCgpKTsKICAgICAgICAgU2V0Rm9yU2NvcGU8Q29kZU9yaWdpbj4gb3JpZ2luQ2hhbmdlKG1f
Y3VycmVudFNlbWFudGljT3JpZ2luLCBzZW1hbnRpY09yaWdpbik7CiAKLSAgICAgICAgdW5zaWdu
ZWQgbG9jYWwgPSBvcGVyYW5kLnRvTG9jYWwoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzZXRN
b2RlICE9IEltbWVkaWF0ZU5ha2VkU2V0KSB7Ci0gICAgICAgICAgICBBcmd1bWVudFBvc2l0aW9u
KiBhcmd1bWVudFBvc2l0aW9uID0gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JMb2NhbChvcGVyYW5k
KTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
b3BlcmFuZC52YWx1ZSgpKSA+PSBtX251bVRtcHMpIHsKKyAgICAgICAgICAgIGlmIChpbmxpbmVD
YWxsRnJhbWUoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG4oKmlubGluZUNhbGxGcmFtZSgp
KTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiQmFkIG9wZXJhbmQ6ICIsIG9wZXJhbmQsICIgYnV0
IGN1cnJlbnQgbnVtYmVyIG9mIHRtcHMgaXM6ICIsIG1fbnVtVG1wcywgIiBjb2RlIGJsb2NrIGhh
czogIiwgbV9wcm9maWxlZEJsb2NrLT5udW1UbXBzKCksICIgdG1wcy4iKTsKKyAgICAgICAgICAg
IENSQVNIKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2V0TW9kZSAhPSBJbW1lZGlhdGVO
YWtlZFNldCAmJiAhb3BlcmFuZC5pc1RtcCgpKSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgIEFyZ3VtZW50
UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24gPSBmaW5kQXJndW1lbnRQb3NpdGlvbkZvckxvY2Fs
KHJlZyk7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRQb3NpdGlvbikKICAgICAgICAgICAgICAg
ICBmbHVzaERpcmVjdChvcGVyYW5kLCBhcmd1bWVudFBvc2l0aW9uKTsKLSAgICAgICAgICAgIGVs
c2UgaWYgKG1fZ3JhcGgubmVlZHNTY29wZVJlZ2lzdGVyKCkgJiYgb3BlcmFuZCA9PSBtX2NvZGVC
bG9jay0+c2NvcGVSZWdpc3RlcigpKQorICAgICAgICAgICAgZWxzZSBpZiAobV9ncmFwaC5uZWVk
c1Njb3BlUmVnaXN0ZXIoKSAmJiByZWcgPT0gbV9jb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSkK
ICAgICAgICAgICAgICAgICBmbHVzaChvcGVyYW5kKTsKICAgICAgICAgfQogCkBAIC00NTMsNyAr
NDc5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZUNoZWNr
QXJyYXlIb2lzdGluZ0ZhaWxlZCgKICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZXhp
dFByb2ZpbGUuaGFzRXhpdFNpdGUoc2VtYW50aWNPcmlnaW4uYnl0ZWNvZGVJbmRleCgpLCBCYWRJ
bmRleGluZ1R5cGUpKTsKICAgICAgICAgTm9kZSogbm9kZSA9IGFkZFRvR3JhcGgoU2V0TG9jYWws
IE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCB2YWx1ZSk7Ci0gICAgICAgIG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwpID0gbm9kZTsKKyAgICAgICAgbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0gbm9kZTsKICAgICAg
ICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCkBAIC00ODUsMjAgKzUxMSwyMSBAQCBwcml2YXRlOgog
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50
KSA9IG5vZGU7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KLSAgICBOb2RlKiBzZXRBcmd1
bWVudChjb25zdCBDb2RlT3JpZ2luJiBzZW1hbnRpY09yaWdpbiwgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisgICAgTm9k
ZSogc2V0QXJndW1lbnQoY29uc3QgQ29kZU9yaWdpbiYgc2VtYW50aWNPcmlnaW4sIE9wZXJhbmQg
b3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKICAgICB7
CiAgICAgICAgIFNldEZvclNjb3BlPENvZGVPcmlnaW4+IG9yaWdpbkNoYW5nZShtX2N1cnJlbnRT
ZW1hbnRpY09yaWdpbiwgc2VtYW50aWNPcmlnaW4pOwogCi0gICAgICAgIHVuc2lnbmVkIGFyZ3Vt
ZW50ID0gb3BlcmFuZC50b0FyZ3VtZW50KCk7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcg
PSBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICB1bnNpZ25lZCBhcmd1bWVudCA9
IHJlZy50b0FyZ3VtZW50KCk7CiAgICAgICAgIEFTU0VSVChhcmd1bWVudCA8IG1fbnVtQXJndW1l
bnRzKTsKICAgICAgICAgCi0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nl
c3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOworICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShy
ZWcpOwogCiAgICAgICAgIC8vIEFsd2F5cyBmbHVzaCBhcmd1bWVudHMsIGV4Y2VwdCBmb3IgJ3Ro
aXMnLiBJZiAndGhpcycgaXMgY3JlYXRlZCBieSB1cywKICAgICAgICAgLy8gdGhlbiBtYWtlIHN1
cmUgdGhhdCBpdCdzIG5ldmVyIHVuYm94ZWQuCiAgICAgICAgIGlmIChhcmd1bWVudCB8fCBtX2dy
YXBoLm5lZWRzRmx1c2hlZFRoaXMoKSkgewogICAgICAgICAgICAgaWYgKHNldE1vZGUgIT0gSW1t
ZWRpYXRlTmFrZWRTZXQpCi0gICAgICAgICAgICAgICAgZmx1c2hEaXJlY3Qob3BlcmFuZCk7Cisg
ICAgICAgICAgICAgICAgZmx1c2hEaXJlY3QocmVnKTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgaWYgKCFhcmd1bWVudCAmJiBtX2NvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkg
PT0gQ29kZUZvckNvbnN0cnVjdCkKQEAgLTUzNCwxNCArNTYxLDE2IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBpbnQgYXJndW1lbnQgPSBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZC5vZmZzZXQoKSAt
IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvQXJndW1lbnQoKTsKICAgICAgICAgICAg
IHJldHVybiBzdGFjay0+bV9hcmd1bWVudFBvc2l0aW9uc1thcmd1bWVudF07CiAgICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAK
LSAgICBBcmd1bWVudFBvc2l0aW9uKiBmaW5kQXJndW1lbnRQb3NpdGlvbihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICBBcmd1bWVudFBvc2l0aW9uKiBmaW5kQXJndW1lbnRQb3NpdGlvbihP
cGVyYW5kIG9wZXJhbmQpCiAgICAgeworICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQo
KSkKICAgICAgICAgICAgIHJldHVybiBmaW5kQXJndW1lbnRQb3NpdGlvbkZvckFyZ3VtZW50KG9w
ZXJhbmQudG9Bcmd1bWVudCgpKTsKLSAgICAgICAgcmV0dXJuIGZpbmRBcmd1bWVudFBvc2l0aW9u
Rm9yTG9jYWwob3BlcmFuZCk7CisgICAgICAgIHJldHVybiBmaW5kQXJndW1lbnRQb3NpdGlvbkZv
ckxvY2FsKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEFkZEZsdXNoRGlyZWN0RnVuYz4KQEAgLTU1MiwxNCArNTgxLDE0IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBBU1NFUlQoIW1fZ3JhcGguaGFzRGVidWdnZXJFbmFibGVkKCkpOwog
ICAgICAgICAgICAgbnVtQXJndW1lbnRzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNXaXRo
Rml4dXAuc2l6ZSgpOwogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJl
Q2FsbCkKLSAgICAgICAgICAgICAgICBhZGRGbHVzaERpcmVjdChpbmxpbmVDYWxsRnJhbWUsIHJl
bWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpKSk7CisgICAgICAgICAgICAgICAgYWRkRmx1c2hEaXJlY3QoaW5saW5lQ2FsbEZy
YW1lLCByZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUp
KTsKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAgICAg
ICAgICAgICAgIGFkZEZsdXNoRGlyZWN0KGlubGluZUNhbGxGcmFtZSwgcmVtYXBPcGVyYW5kKGlu
bGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKSkpOworICAgICAgICAgICAgICAgIGFkZEZsdXNoRGlyZWN0KGlubGlu
ZUNhbGxGcmFtZSwgcmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICBudW1Bcmd1bWVudHMgPSBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxG
cmFtZSktPm51bVBhcmFtZXRlcnMoKTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50
ID0gbnVtQXJndW1lbnRzOyBhcmd1bWVudC0tOykKLSAgICAgICAgICAgIGFkZEZsdXNoRGlyZWN0
KGlubGluZUNhbGxGcmFtZSwgcmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKSk7CisgICAgICAgICAgICBhZGRGbHVzaERpcmVj
dChpbmxpbmVDYWxsRnJhbWUsIHJlbWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhhcmd1bWVudCkpKTsKIAogICAgICAgICBp
ZiAobV9ncmFwaC5uZWVkc1Njb3BlUmVnaXN0ZXIoKSkKICAgICAgICAgICAgIGFkZEZsdXNoRGly
ZWN0KG51bGxwdHIsIG1fZ3JhcGgubV9jb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSk7CkBAIC01
NzcsNiArNjA2LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpOwog
ICAgICAgICAgICAgICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxsTGl2ZW5lc3MgPSBtX2dy
YXBoLmxpdmVuZXNzRm9yKGNvZGVCbG9jayk7CisgICAgICAgICAgICAgICAgLy8gTm90ZTogV2Ug
ZG9uJ3QgbmVlZCB0byBoYW5kbGUgdG1wcyBoZXJlIGJlY2F1c2UgdG1wcyBhcmUgbm90IHJlcXVp
cmVkIHRvIGJlIGZsdXNoZWQgdG8gdGhlIHN0YWNrLgogICAgICAgICAgICAgICAgIGNvbnN0IGF1
dG8mIGxpdmVuZXNzQXRCeXRlY29kZSA9IGZ1bGxMaXZlbmVzcy5nZXRMaXZlbmVzcyhieXRlY29k
ZUluZGV4LCBtX2dyYXBoLmFwcHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50KG9yaWdp
biwgaXNDYWxsZXJPcmlnaW4pKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2Fs
ID0gY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsgbG9jYWwtLTspIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGxpdmVuZXNzQXRCeXRlY29kZVtsb2NhbF0pCkBAIC01ODYsMjcgKzYxNiwy
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgfSk7CiAgICAgfQogCi0gICAgdm9pZCBmbHVzaChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lkIGZsdXNoKE9wZXJhbmQgb3BlcmFuZCkK
ICAgICB7CiAgICAgICAgIGZsdXNoRGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFu
ZChvcGVyYW5kKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgZmx1c2hEaXJlY3QoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgdm9pZCBmbHVzaERpcmVjdChPcGVyYW5kIG9wZXJhbmQpCiAg
ICAgewogICAgICAgICBmbHVzaERpcmVjdChvcGVyYW5kLCBmaW5kQXJndW1lbnRQb3NpdGlvbihv
cGVyYW5kKSk7CiAgICAgfQogCi0gICAgdm9pZCBmbHVzaERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbikKKyAgICB2b2lkIGZs
dXNoRGlyZWN0KE9wZXJhbmQgb3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3Np
dGlvbikKICAgICB7CiAgICAgICAgIGFkZEZsdXNoT3JQaGFudG9tTG9jYWw8Rmx1c2g+KG9wZXJh
bmQsIGFyZ3VtZW50UG9zaXRpb24pOwogICAgIH0KIAogICAgIHRlbXBsYXRlPE5vZGVUeXBlIG5v
ZGVUeXBlPgotICAgIHZvaWQgYWRkRmx1c2hPclBoYW50b21Mb2NhbChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbikKKyAgICB2b2lkIGFk
ZEZsdXNoT3JQaGFudG9tTG9jYWwoT3BlcmFuZCBvcGVyYW5kLCBBcmd1bWVudFBvc2l0aW9uKiBh
cmd1bWVudFBvc2l0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3Rh
bnQoKSk7CiAgICAgICAgIAotICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICBOb2RlKiYgbm9kZSA9IG1f
Y3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAg
CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGU7CiAgICAgICAgIApAQCAtNjE2
LDI2ICs2NDYsMjUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFi
bGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgbm9kZSA9IGFkZFRvR3Jh
cGgobm9kZVR5cGUsIE9wSW5mbyh2YXJpYWJsZSkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+
dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkgPSBub2RlOwogICAgICAgICBpZiAoYXJn
dW1lbnRQb3NpdGlvbikKICAgICAgICAgICAgIGFyZ3VtZW50UG9zaXRpb24tPmFkZFZhcmlhYmxl
KHZhcmlhYmxlKTsKICAgICB9CiAKLSAgICB2b2lkIHBoYW50b21Mb2NhbERpcmVjdChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lkIHBoYW50b21Mb2NhbERpcmVjdChPcGVyYW5kIG9w
ZXJhbmQpCiAgICAgewogICAgICAgICBhZGRGbHVzaE9yUGhhbnRvbUxvY2FsPFBoYW50b21Mb2Nh
bD4ob3BlcmFuZCwgZmluZEFyZ3VtZW50UG9zaXRpb24ob3BlcmFuZCkpOwogICAgIH0KIAogICAg
IHZvaWQgZmx1c2goSW5saW5lU3RhY2tFbnRyeSogaW5saW5lU3RhY2tFbnRyeSkKICAgICB7Ci0g
ICAgICAgIGF1dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSosIFZpcnR1
YWxSZWdpc3RlciByZWcpIHsgZmx1c2hEaXJlY3QocmVnKTsgfTsKKyAgICAgICAgYXV0byBhZGRG
bHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgT3BlcmFuZCBvcGVyYW5kKSB7IGZs
dXNoRGlyZWN0KG9wZXJhbmQpOyB9OwogICAgICAgICBmbHVzaEltcGwoaW5saW5lU3RhY2tFbnRy
eS0+bV9pbmxpbmVDYWxsRnJhbWUsIGFkZEZsdXNoRGlyZWN0KTsKICAgICB9CiAKICAgICB2b2lk
IGZsdXNoRm9yVGVybWluYWwoKQogICAgIHsKLSAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9
IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIHJlZykgeyBmbHVzaERpcmVj
dChyZWcpOyB9OwotICAgICAgICBhdXRvIGFkZFBoYW50b21Mb2NhbERpcmVjdCA9IFsmXSAoSW5s
aW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIHJlZykgeyBwaGFudG9tTG9jYWxEaXJlY3Qo
cmVnKTsgfTsKKyAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZy
YW1lKiwgT3BlcmFuZCBvcGVyYW5kKSB7IGZsdXNoRGlyZWN0KG9wZXJhbmQpOyB9OworICAgICAg
ICBhdXRvIGFkZFBoYW50b21Mb2NhbERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgT3Bl
cmFuZCBvcGVyYW5kKSB7IHBoYW50b21Mb2NhbERpcmVjdChvcGVyYW5kKTsgfTsKICAgICAgICAg
Zmx1c2hGb3JUZXJtaW5hbEltcGwoY3VycmVudENvZGVPcmlnaW4oKSwgYWRkRmx1c2hEaXJlY3Qs
IGFkZFBoYW50b21Mb2NhbERpcmVjdCk7CiAgICAgfQogCkBAIC03NjMsNiArNzkyLDExIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBFZGdlKGNoaWxkMSksIEVkZ2UoY2hpbGQyKSwgRWRnZShjaGls
ZDMpKTsKICAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgocmVzdWx0KTsKICAgICB9CisgICAgTm9k
ZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BlcmFuZCBvcGVyYW5kLCBOb2RlKiBjaGlsZDEp
CisgICAgeworICAgICAgICBBU1NFUlQob3AgPT0gTW92SGludCk7CisgICAgICAgIHJldHVybiBh
ZGRUb0dyYXBoKG9wLCBPcEluZm8ob3BlcmFuZC5raW5kKCkpLCBPcEluZm8ob3BlcmFuZC52YWx1
ZSgpKSwgY2hpbGQxKTsKKyAgICB9CiAgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwg
T3BJbmZvIGluZm8xLCBPcEluZm8gaW5mbzIsIEVkZ2UgY2hpbGQxLCBFZGdlIGNoaWxkMiA9IEVk
Z2UoKSwgRWRnZSBjaGlsZDMgPSBFZGdlKCkpCiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQg
PSBtX2dyYXBoLmFkZE5vZGUoCkBAIC04MDUsNyArODM5LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIG1fcGFyYW1ldGVyU2xvdHMgPSBwYXJhbWV0ZXJTbG90czsKIAogICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGFyZ0NvdW50OyArK2kpCi0gICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChn
ZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSwgcmVnaXN0ZXJPZmZzZXQpKSk7CisgICAg
ICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNs
dWRpbmdUaGlzKGksIHJlZ2lzdGVyT2Zmc2V0KSkpOwogCiAgICAgICAgIHJldHVybiBhZGRUb0dy
YXBoKE5vZGU6OlZhckFyZywgb3AsIG9wSW5mbywgcHJlZGljdGlvbik7CiAgICAgfQpAQCAtMTA5
Myw4ICsxMTI3LDEwIEBAIHByaXZhdGU6CiAKICAgICAvLyBUaGUgbnVtYmVyIG9mIGFyZ3VtZW50
cyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgogICAgIHVuc2lnbmVkIG1fbnVtQXJndW1lbnRzOwot
ICAgIC8vIFRoZSBudW1iZXIgb2YgbG9jYWxzICh2YXJzICsgdGVtcG9yYXJpZXMpIHVzZWQgaW4g
dGhlIGZ1bmN0aW9uLgorICAgIC8vIFRoZSBudW1iZXIgb2YgbG9jYWxzICh2YXJzICsgdGVtcG9y
YXJpZXMpIHVzZWQgYnkgdGhlIGJ5dGVjb2RlIGZvciB0aGUgZnVuY3Rpb24uCiAgICAgdW5zaWdu
ZWQgbV9udW1Mb2NhbHM7CisgICAgLy8gVGhlIG1heCBudW1iZXIgb2YgdGVtcHMgdXNlZCBmb3Ig
Zm9yd2FyZGluZyBkYXRhIHRvIGFuIE9TUiBleGl0IGNoZWNrcG9pbnQuCisgICAgdW5zaWduZWQg
bV9udW1UbXBzOwogICAgIC8vIFRoZSBudW1iZXIgb2Ygc2xvdHMgKGluIHVuaXRzIG9mIHNpemVv
ZihSZWdpc3RlcikpIHRoYXQgd2UgbmVlZCB0bwogICAgIC8vIHByZWFsbG9jYXRlIGZvciBhcmd1
bWVudHMgdG8gb3V0Z29pbmcgY2FsbHMgZnJvbSB0aGlzIGZyYW1lLiBUaGlzCiAgICAgLy8gbnVt
YmVyIGluY2x1ZGVzIHRoZSBDYWxsRnJhbWUgc2xvdHMgdGhhdCB3ZSBpbml0aWFsaXplIGZvciB0
aGUgY2FsbGVlCkBAIC0xMTYxLDE0ICsxMTk3LDE3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAg
ICAgICB+SW5saW5lU3RhY2tFbnRyeSgpOwogICAgICAgICAKLSAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKKyAgICAgICAg
T3BlcmFuZCByZW1hcE9wZXJhbmQoT3BlcmFuZCBvcGVyYW5kKSBjb25zdAogICAgICAgICB7CiAg
ICAgICAgICAgICBpZiAoIW1faW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgICAgIHJldHVy
biBvcGVyYW5kOworCisgICAgICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAob3BlcmFuZC52YWx1ZSgpICsgbV9pbmxpbmVDYWxs
RnJhbWUtPnRtcE9mZnNldCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVCghb3Bl
cmFuZC5pc0NvbnN0YW50KCkpOworICAgICAgICAgICAgQVNTRVJUKCFvcGVyYW5kLnZpcnR1YWxS
ZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAKLSAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVn
aXN0ZXIob3BlcmFuZC5vZmZzZXQoKSArIG1faW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCk7
CisgICAgICAgICAgICByZXR1cm4gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSArIG1faW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldDsKICAgICAgICAgfQogICAgIH07CiAgICAgCkBAIC0xMTc3
LDEzICsxMjE2LDggQEAgcHJpdmF0ZToKICAgICBJQ1N0YXR1c0NvbnRleHRTdGFjayBtX2ljQ29u
dGV4dFN0YWNrOwogICAgIAogICAgIHN0cnVjdCBEZWxheWVkU2V0TG9jYWwgewotICAgICAgICBD
b2RlT3JpZ2luIG1fb3JpZ2luOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOwot
ICAgICAgICBOb2RlKiBtX3ZhbHVlOwotICAgICAgICBTZXRNb2RlIG1fc2V0TW9kZTsKLSAgICAg
ICAgCiAgICAgICAgIERlbGF5ZWRTZXRMb2NhbCgpIHsgfQotICAgICAgICBEZWxheWVkU2V0TG9j
YWwoY29uc3QgQ29kZU9yaWdpbiYgb3JpZ2luLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9k
ZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSkKKyAgICAgICAgRGVsYXllZFNldExvY2FsKGNvbnN0
IENvZGVPcmlnaW4mIG9yaWdpbiwgT3BlcmFuZCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9k
ZSBzZXRNb2RlKQogICAgICAgICAgICAgOiBtX29yaWdpbihvcmlnaW4pCiAgICAgICAgICAgICAs
IG1fb3BlcmFuZChvcGVyYW5kKQogICAgICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQpAQCAtMTE5
Niw4ICsxMjMwLDEzIEBAIHByaXZhdGU6CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChtX29w
ZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZXItPnNldEFy
Z3VtZW50KG1fb3JpZ2luLCBtX29wZXJhbmQsIG1fdmFsdWUsIG1fc2V0TW9kZSk7Ci0gICAgICAg
ICAgICByZXR1cm4gcGFyc2VyLT5zZXRMb2NhbChtX29yaWdpbiwgbV9vcGVyYW5kLCBtX3ZhbHVl
LCBtX3NldE1vZGUpOworICAgICAgICAgICAgcmV0dXJuIHBhcnNlci0+c2V0TG9jYWxPclRtcCht
X29yaWdpbiwgbV9vcGVyYW5kLCBtX3ZhbHVlLCBtX3NldE1vZGUpOwogICAgICAgICB9CisKKyAg
ICAgICAgQ29kZU9yaWdpbiBtX29yaWdpbjsKKyAgICAgICAgT3BlcmFuZCBtX29wZXJhbmQ7Cisg
ICAgICAgIE5vZGUqIG1fdmFsdWUgeyBudWxscHRyIH07CisgICAgICAgIFNldE1vZGUgbV9zZXRN
b2RlOwogICAgIH07CiAgICAgCiAgICAgVmVjdG9yPERlbGF5ZWRTZXRMb2NhbCwgMj4gbV9zZXRM
b2NhbFF1ZXVlOwpAQCAtMTIxMCw3ICsxMjQ5LDcgQEAgcHJpdmF0ZToKIEJhc2ljQmxvY2sqIEJ5
dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVRhcmdldGFibGVCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgpCiB7CiAgICAgQVNTRVJUKGJ5dGVjb2RlSW5kZXgpOwotICAgIFJlZjxCYXNpY0Js
b2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhieXRlY29kZUluZGV4LCBtX251
bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIDEpKTsKKyAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sg
PSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soYnl0ZWNvZGVJbmRleCwgbV9udW1Bcmd1bWVudHMs
IG1fbnVtTG9jYWxzLCBtX251bVRtcHMsIDEpKTsKICAgICBCYXNpY0Jsb2NrKiBibG9ja1B0ciA9
IGJsb2NrLnB0cigpOwogICAgIC8vIG1fYmxvY2tMaW5raW5nVGFyZ2V0cyBtdXN0IGFsd2F5cyBi
ZSBzb3J0ZWQgaW4gaW5jcmVhc2luZyBvcmRlciBvZiBieXRlY29kZUJlZ2luCiAgICAgaWYgKG1f
aW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5zaXplKCkpCkBAIC0xMjIyLDcg
KzEyNjEsNyBAQCBCYXNpY0Jsb2NrKiBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVUYXJnZXRhYmxl
QmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogCiBCYXNpY0Jsb2NrKiBCeXRlQ29k
ZVBhcnNlcjo6YWxsb2NhdGVVbnRhcmdldGFibGVCbG9jaygpCiB7Ci0gICAgUmVmPEJhc2ljQmxv
Y2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXgoKSwgbV9u
dW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCAxKSk7CisgICAgUmVmPEJhc2ljQmxvY2s+IGJsb2Nr
ID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXgoKSwgbV9udW1Bcmd1bWVu
dHMsIG1fbnVtTG9jYWxzLCBtX251bVRtcHMsIDEpKTsKICAgICBCYXNpY0Jsb2NrKiBibG9ja1B0
ciA9IGJsb2NrLnB0cigpOwogICAgIG1fZ3JhcGguYXBwZW5kQmxvY2soV1RGTW92ZShibG9jaykp
OwogICAgIHJldHVybiBibG9ja1B0cjsKQEAgLTEyOTIsNyArMTMzMSw3IEBAIEJ5dGVDb2RlUGFy
c2VyOjpUZXJtaW5hbGl0eSBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKICAgICBpZiAoY2Fs
bExpbmtTdGF0dXMuY2FuT3B0aW1pemUoKSkgewogICAgICAgICBhZGRUb0dyYXBoKEZpbHRlckNh
bGxMaW5rU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFk
ZENhbGxMaW5rU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIGNhbGxMaW5rU3RhdHVzKSksIGNh
bGxUYXJnZXQpOwogCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQgPSB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCk7CisgICAgICAgIFZpcnR1
YWxSZWdpc3RlciB0aGlzQXJndW1lbnQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1
ZGluZ1RoaXMoMCwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICBhdXRvIG9wdGltaXphdGlvblJl
c3VsdCA9IGhhbmRsZUlubGluaW5nKGNhbGxUYXJnZXQsIHJlc3VsdCwgY2FsbExpbmtTdGF0dXMs
IHJlZ2lzdGVyT2Zmc2V0LCB0aGlzQXJndW1lbnQsCiAgICAgICAgICAgICBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgQnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGlu
c3RydWN0aW9uU2l6ZSksIG9wLCBraW5kLCBwcmVkaWN0aW9uKTsKICAgICAgICAgaWYgKG9wdGlt
aXphdGlvblJlc3VsdCA9PSBDYWxsT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWRUb0p1bXAp
CkBAIC0xMzk5LDcgKzE0MzgsNyBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6Z2V0QXJndW1lbnRD
b3VudCgpCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0QXJndW1lbnRQaGFudG9tcyhpbnQgcmVn
aXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykKIHsKICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2kpCi0gICAgICAg
IGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGksIHJl
Z2lzdGVyT2Zmc2V0KSkpOworICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSwgcmVnaXN0ZXJPZmZzZXQpKSk7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+CkBAIC0xNDI1LDcgKzE0NjQsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVSZWN1cnNpdmVUYWlsQ2FsbChOb2RlKiBjYWxs
VGFyZ2V0Tm9kZSwgQ2FsbFZhcmlhbnQgYwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzICE9IHN0YXRpY19jYXN0PGludD4oY2FsbEZyYW1lLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcykpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAv
LyBJZiB0aGUgdGFyZ2V0IElubGluZUNhbGxGcmFtZSBpcyBWYXJhcmdzLCB3ZSBkbyBub3Qga25v
dyBob3cgbWFueSBhcmd1bWVudHMgYXJlIGFjdHVhbGx5IGZpbGxlZCBieSBMb2FkVmFyYXJncy4g
VmFyYXJncyBJbmxpbmVDYWxsRnJhbWUncwotICAgICAgICAgICAgLy8gYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgaXMgbWF4aW11bSBudW1iZXIgb2YgcG90ZW50aWFsbHkgZmlsbGVkIGFyZ3Vt
ZW50cyBieSBMb2FkVmFyYXJncy4gV2UgImNvbnRpbnVlIiB0byB0aGUgdXBwZXIgZnJhbWUgd2hp
Y2ggbWF5IGJlCisgICAgICAgICAgICAvLyBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyBpcyBt
YXhpbXVtIG51bWJlciBvZiBwb3RlbnRpYWxseSBmaWxsZWQgYXJndW1lbnRzIGJ5IHhrTG9hZFZh
cmFyZ3MuIFdlICJjb250aW51ZSIgdG8gdGhlIHVwcGVyIGZyYW1lIHdoaWNoIG1heSBiZQogICAg
ICAgICAgICAgLy8gYSBnb29kIHRhcmdldCB0byBqdW1wIGludG8uCiAgICAgICAgICAgICBpZiAo
Y2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE0
NTEsNyArMTQ5MCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVJlY3Vyc2l2ZVRhaWxD
YWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBDYWxsVmFyaWFudCBjCiAgICAgICAgIC8vIFdlIG11
c3Qgc2V0IHRoZSBjYWxsZWUgdG8gdGhlIHJpZ2h0IHZhbHVlCiAgICAgICAgIGlmIChzdGFja0Vu
dHJ5LT5tX2lubGluZUNhbGxGcmFtZSkgewogICAgICAgICAgICAgaWYgKHN0YWNrRW50cnktPm1f
aW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgICAgIHNldERpcmVj
dChzdGFja0VudHJ5LT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSkpLCBjYWxsVGFyZ2V0Tm9kZSwgTm9ybWFsU2V0KTsKKyAgICAgICAgICAgICAgICBz
ZXREaXJlY3QocmVtYXBPcGVyYW5kKHN0YWNrRW50cnktPm1faW5saW5lQ2FsbEZyYW1lLCBDYWxs
RnJhbWVTbG90OjpjYWxsZWUpLCBjYWxsVGFyZ2V0Tm9kZSwgTm9ybWFsU2V0KTsKICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICBhZGRUb0dyYXBoKFNldENhbGxlZSwgY2FsbFRhcmdldE5vZGUp
OwogCkBAIC0xNDYwLDEyICsxNDk5LDEyIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVJl
Y3Vyc2l2ZVRhaWxDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBDYWxsVmFyaWFudCBjCiAgICAg
ICAgICAgICBhZGRUb0dyYXBoKFNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBPcEluZm8o
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICAgICAgaW50IGFyZ0luZGV4ID0gMDsK
ICAgICAgICAgZm9yICg7IGFyZ0luZGV4IDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7ICsr
YXJnSW5kZXgpIHsKLSAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KGFyZ0luZGV4LCByZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgc2V0
RGlyZWN0KHN0YWNrRW50cnktPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dChhcmdJbmRleCkpLCB2YWx1ZSwgTm9ybWFsU2V0KTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVl
ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhhcmdJbmRleCwg
cmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgIHNldERpcmVjdChzdGFja0VudHJ5LT5yZW1h
cE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGFyZ0luZGV4
KSksIHZhbHVlLCBOb3JtYWxTZXQpOwogICAgICAgICB9CiAgICAgICAgIE5vZGUqIHVuZGVmaW5l
ZCA9IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnRVbmRlZmluZWQpKTsK
ICAgICAgICAgZm9yICg7IGFyZ0luZGV4IDwgc3RhY2tFbnRyeS0+bV9jb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKTsgKythcmdJbmRleCkKLSAgICAgICAgICAgIHNldERpcmVjdChzdGFja0VudHJ5
LT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJnSW5kZXgpKSwgdW5k
ZWZpbmVkLCBOb3JtYWxTZXQpOworICAgICAgICAgICAgc2V0RGlyZWN0KHN0YWNrRW50cnktPnJl
bWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoYXJnSW5k
ZXgpKSwgdW5kZWZpbmVkLCBOb3JtYWxTZXQpOwogCiAgICAgICAgIC8vIFdlIG11c3QgcmVwZWF0
IHRoZSB3b3JrIG9mIG9wX2VudGVyIGhlcmUgYXMgd2Ugd2lsbCBqdW1wIHJpZ2h0IGFmdGVyIGl0
LgogICAgICAgICAvLyBXZSBqdW1wIHJpZ2h0IGFmdGVyIGl0IGFuZCBub3QgYmVmb3JlIGl0LCBi
ZWNhdXNlIG9mIHNvbWUgaW52YXJpYW50IHNheWluZyB0aGF0IGEgQ0ZHIHJvb3QgY2Fubm90IGhh
dmUgcHJlZGVjZXNzb3JzIGluIHRoZSBJUi4KQEAgLTE2MTYsMTYgKzE2NTUsMTggQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCwgQ2EKICAgICBBU1NFUlQoIShudW1iZXJPZlN0YWNrUGFkZGluZ1Nsb3Rz
ICUgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSkpOwogICAgIGludCByZWdpc3Rlck9mZnNldEFm
dGVyRml4dXAgPSByZWdpc3Rlck9mZnNldCAtIG51bWJlck9mU3RhY2tQYWRkaW5nU2xvdHM7CiAg
ICAgCi0gICAgaW50IGlubGluZUNhbGxGcmFtZVN0YXJ0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVt
YXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldEFmdGVyRml4dXApKS5vZmZz
ZXQoKSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzOworICAgIE9wZXJhbmQgaW5s
aW5lQ2FsbEZyYW1lU3RhcnQgPSBWaXJ0dWFsUmVnaXN0ZXIobV9pbmxpbmVTdGFja1RvcC0+cmVt
YXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldEFmdGVyRml4dXApKS52YWx1
ZSgpICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpOwogICAgIAogICAgIGVuc3Vy
ZUxvY2FscygKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZVN0YXJ0KS50
b0xvY2FsKCkgKyAxICsKKyAgICAgICAgaW5saW5lQ2FsbEZyYW1lU3RhcnQudG9Mb2NhbCgpICsg
MSArCiAgICAgICAgIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgY29kZUJsb2Nr
LT5udW1DYWxsZWVMb2NhbHMoKSk7CiAgICAgCisgICAgZW5zdXJlVG1wcygobV9pbmxpbmVTdGFj
a1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUgPyBtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxG
cmFtZS0+dG1wT2Zmc2V0IDogMCkgKyBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+bnVt
VG1wcygpICsgY29kZUJsb2NrLT5udW1UbXBzKCkpOworCiAgICAgc2l6ZV90IGFyZ3VtZW50UG9z
aXRpb25TdGFydCA9IG1fZ3JhcGgubV9hcmd1bWVudFBvc2l0aW9ucy5zaXplKCk7CiAKICAgICBp
ZiAocmVzdWx0LmlzVmFsaWQoKSkKLSAgICAgICAgcmVzdWx0ID0gbV9pbmxpbmVTdGFja1RvcC0+
cmVtYXBPcGVyYW5kKHJlc3VsdCk7CisgICAgICAgIHJlc3VsdCA9IG1faW5saW5lU3RhY2tUb3At
PnJlbWFwT3BlcmFuZChyZXN1bHQpLnZpcnR1YWxSZWdpc3RlcigpOwogCiAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiBjYWxsZWVWYXJpYWJsZSA9IG51bGxwdHI7CiAgICAgaWYgKGNhbGxlZS5pc0Ns
b3N1cmVDYWxsKCkpIHsKQEAgLTE2MzgsNyArMTY3OSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OmlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQs
IENhCiAKICAgICBJbmxpbmVTdGFja0VudHJ5KiBjYWxsZXJTdGFja1RvcCA9IG1faW5saW5lU3Rh
Y2tUb3A7CiAgICAgSW5saW5lU3RhY2tFbnRyeSBpbmxpbmVTdGFja0VudHJ5KHRoaXMsIGNvZGVC
bG9jaywgY29kZUJsb2NrLCBjYWxsZWUuZnVuY3Rpb24oKSwgcmVzdWx0LAotICAgICAgICAoVmly
dHVhbFJlZ2lzdGVyKWlubGluZUNhbGxGcmFtZVN0YXJ0LCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywga2luZCwgY29udGludWF0aW9uQmxvY2spOworICAgICAgICBpbmxpbmVDYWxsRnJhbWVT
dGFydC52aXJ0dWFsUmVnaXN0ZXIoKSwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGtpbmQs
IGNvbnRpbnVhdGlvbkJsb2NrKTsKIAogICAgIC8vIFRoaXMgaXMgd2hlcmUgdGhlIGFjdHVhbCBp
bmxpbmluZyByZWFsbHkgaGFwcGVucy4KICAgICBCeXRlY29kZUluZGV4IG9sZEluZGV4ID0gbV9j
dXJyZW50SW5kZXg7CkBAIC0xNjczLDkgKzE3MTQsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpp
bmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBD
YQogICAgICAgICAvLyBIb3dldmVyLCB3aGVuIHdlIGJlZ2luIGV4ZWN1dGluZyB0aGUgY2FsbGVl
LCB3ZSBuZWVkIE9TUiBleGl0IHRvIGJlIGF3YXJlIG9mIHdoZXJlIGl0IGNhbiByZWNvdmVyIHRo
ZSBhcmd1bWVudHMgdG8gdGhlIHNldHRlciwgbG9jOSBhbmQgbG9jMTAuIFRoZSBNb3ZIaW50cyBp
biB0aGUgaW5saW5lZAogICAgICAgICAvLyBjYWxsZWUgbWFrZSBpdCBzbyB0aGF0IGlmIHdlIGV4
aXQgYXQgPEhFUkU+LCB3ZSBjYW4gcmVjb3ZlciBsb2M5IGFuZCBsb2MxMC4KICAgICAgICAgZm9y
IChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2lu
ZGV4KSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRUb0dldCA9IGNhbGxl
clN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgs
IHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICBPcGVyYW5kIGFyZ3VtZW50VG9HZXQgPSBj
YWxsZXJTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5j
bHVkaW5nVGhpcyhpbmRleCwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgIE5vZGUqIHZh
bHVlID0gZ2V0RGlyZWN0KGFyZ3VtZW50VG9HZXQpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChN
b3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb0dldC5vZmZzZXQoKSksIHZhbHVlKTsKKyAgICAgICAg
ICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9HZXQpLCB2YWx1ZSk7CiAg
ICAgICAgICAgICBtX3NldExvY2FsUXVldWUuYXBwZW5kKERlbGF5ZWRTZXRMb2NhbCB7IGN1cnJl
bnRDb2RlT3JpZ2luKCksIGFyZ3VtZW50VG9HZXQsIHZhbHVlLCBJbW1lZGlhdGVOYWtlZFNldCB9
KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTE3MTksMTYgKzE3NjAsMTYgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdCwgQ2EKICAgICAgICAgLy8gSW4gc3VjaCBjYXNlcywgd2UgZG8gbm90
IG5lZWQgdG8gbW92ZSBmcmFtZXMuCiAgICAgICAgIGlmIChyZWdpc3Rlck9mZnNldEFmdGVyRml4
dXAgIT0gcmVnaXN0ZXJPZmZzZXQpIHsKICAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsg
aW5kZXggPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgKytpbmRleCkgewotICAgICAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudFRvR2V0ID0gY2FsbGVyU3RhY2tUb3AtPnJl
bWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCwgcmVnaXN0ZXJPZmZz
ZXQpKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIGFyZ3VtZW50VG9HZXQgPSBjYWxsZXJTdGFj
a1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhp
cyhpbmRleCwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9
IGdldERpcmVjdChhcmd1bWVudFRvR2V0KTsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYXJndW1lbnRUb1NldCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCkpOwotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
TW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9TZXQub2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgT3BlcmFuZCBhcmd1bWVudFRvU2V0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBP
cGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpbmRleCkpOwor
ICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9TZXQp
LCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgbV9zZXRMb2NhbFF1ZXVlLmFwcGVuZChEZWxheWVk
U2V0TG9jYWwgeyBjdXJyZW50Q29kZU9yaWdpbigpLCBhcmd1bWVudFRvU2V0LCB2YWx1ZSwgSW1t
ZWRpYXRlTmFrZWRTZXQgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZm9y
IChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFyaXR5Rml4dXBDb3VudDsgKytpbmRleCkgewotICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9w
LT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgKyBpbmRleCkpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBP
cEluZm8oYXJndW1lbnRUb1NldC5vZmZzZXQoKSksIHVuZGVmaW5lZCk7CisgICAgICAgICAgICBP
cGVyYW5kIGFyZ3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzICsgaW5kZXgpKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZv
KGFyZ3VtZW50VG9TZXQpLCB1bmRlZmluZWQpOwogICAgICAgICAgICAgbV9zZXRMb2NhbFF1ZXVl
LmFwcGVuZChEZWxheWVkU2V0TG9jYWwgeyBjdXJyZW50Q29kZU9yaWdpbigpLCBhcmd1bWVudFRv
U2V0LCB1bmRlZmluZWQsIEltbWVkaWF0ZU5ha2VkU2V0IH0pOwogICAgICAgICB9CiAKQEAgLTE4
OTUsMTIgKzE5MzYsMTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0lubGlu
aW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIKICAgICAgICAgZW1pdEZ1
bmN0aW9uQ2hlY2tzKGNhbGxWYXJpYW50LCBjYWxsVGFyZ2V0Tm9kZSwgdGhpc0FyZ3VtZW50KTsK
ICAgICAgICAgCiAgICAgICAgIGludCByZW1hcHBlZFJlZ2lzdGVyT2Zmc2V0ID0KLSAgICAgICAg
bV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9m
ZnNldCkpLm9mZnNldCgpOworICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0
KCk7CiAgICAgICAgIAogICAgICAgICBlbnN1cmVMb2NhbHMoVmlydHVhbFJlZ2lzdGVyKHJlbWFw
cGVkUmVnaXN0ZXJPZmZzZXQpLnRvTG9jYWwoKSk7CiAgICAgICAgIAogICAgICAgICBpbnQgYXJn
dW1lbnRTdGFydCA9IHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdp
c3RlcnM7Ci0gICAgICAgIGludCByZW1hcHBlZEFyZ3VtZW50U3RhcnQgPSBtX2lubGluZVN0YWNr
VG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3RhcnQpKS5vZmZzZXQo
KTsKKyAgICAgICAgaW50IHJlbWFwcGVkQXJndW1lbnRTdGFydCA9IG1faW5saW5lU3RhY2tUb3At
PnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFydCkpLnZpcnR1YWxSZWdp
c3RlcigpLm9mZnNldCgpOwogICAgICAgICAKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRh
ID0gbV9ncmFwaC5tX2xvYWRWYXJhcmdzRGF0YS5hZGQoKTsKICAgICAgICAgZGF0YS0+c3RhcnQg
PSBWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRBcmd1bWVudFN0YXJ0ICsgMSk7CkBAIC0xOTA4LDEx
ICsxOTQ5LDI0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NJbmxpbmluZyhO
b2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyCiAgICAgICAgIGRhdGEtPm9mZnNl
dCA9IGFyZ3VtZW50c09mZnNldDsKICAgICAgICAgZGF0YS0+bGltaXQgPSBtYXhBcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpczsKICAgICAgICAgZGF0YS0+bWFuZGF0b3J5TWluaW11bSA9IG1hbmRh
dG9yeU1pbmltdW07Ci0gICAgICAgIAotICAgICAgICBpZiAoY2FsbE9wID09IFRhaWxDYWxsRm9y
d2FyZFZhcmFyZ3MpCi0gICAgICAgICAgICBhZGRUb0dyYXBoKEZvcndhcmRWYXJhcmdzLCBPcElu
Zm8oZGF0YSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRUb0dyYXBoKExvYWRWYXJh
cmdzLCBPcEluZm8oZGF0YSksIGdldChhcmd1bWVudHNBcmd1bWVudCkpOworCisgICAgICAgIGlm
IChjYWxsT3AgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJncykgeworICAgICAgICAgICAgTm9kZSog
YXJndW1lbnRDb3VudDsKKyAgICAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKCkpCisgICAg
ICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IGFkZFRvR3JhcGgoR2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpOworICAgICAgICAgICAgZWxzZSBpZiAoaW5saW5lQ2FsbEZyYW1lKCktPmlz
VmFyYXJncygpKQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBnZXREaXJlY3QocmVt
YXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSgpLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcykpOworICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICBhcmd1
bWVudENvdW50ID0gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9ncmFwaC5mcmVlemUo
anNOdW1iZXIoaW5saW5lQ2FsbEZyYW1lKCktPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkp
KTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yd2FyZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSwg
YXJndW1lbnRDb3VudCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBOb2RlKiBhcmd1
bWVudHMgPSBnZXQoYXJndW1lbnRzQXJndW1lbnQpOworICAgICAgICAgICAgYXV0byBhcmdDb3Vu
dFRtcCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChPcGVyYW5kOjp0bXAoT3BDYWxs
VmFyYXJnczo6YXJnQ291bnRJbmNsdWRpbmdUaGlzKSk7CisgICAgICAgICAgICBzZXREaXJlY3Qo
YXJnQ291bnRUbXAsIGFkZFRvR3JhcGgoVmFyYXJnc0xlbmd0aCwgT3BJbmZvKGRhdGEpLCBhcmd1
bWVudHMpKTsKKyAgICAgICAgICAgIHByb2dyZXNzVG9OZXh0Q2hlY2twb2ludCgpOworCisgICAg
ICAgICAgICBhZGRUb0dyYXBoKExvYWRWYXJhcmdzLCBPcEluZm8oZGF0YSksIGdldExvY2FsT3JU
bXAoYXJnQ291bnRUbXApLCBhcmd1bWVudHMpOworICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICAvLyBMb2FkVmFyYXJncyBtYXkgT1NSIGV4aXQuIEhlbmNlLCB3ZSBuZWVkIHRvIGtlZXAgYWxp
dmUgY2FsbFRhcmdldE5vZGUsIHRoaXNBcmd1bWVudAogICAgICAgICAvLyBhbmQgYXJndW1lbnRz
QXJndW1lbnQgZm9yIHRoZSBiYXNlbGluZSBKSVQuIEhvd2V2ZXIsIHdlIG9ubHkgbmVlZCBhIFBo
YW50b20gZm9yCkBAIC0xOTI0LDE0ICsxOTc4LDE0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZVZhcmFyZ3NJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVy
CiAgICAgICAgIC8vIFNTQS4gRm9ydHVuYXRlbHksIHdlIGFsc28gaGF2ZSBvdGhlciByZWFzb25z
IGZvciBub3QgaW5zZXJ0aW5nIGNvbnRyb2wgZmxvdwogICAgICAgICAvLyBiZWZvcmUgU1NBLgog
ICAgICAgICAKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBjb3VudFZhcmlhYmxlID0gbmV3
VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlcihyZW1hcHBlZFJlZ2lzdGVyT2Zmc2V0
ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiBjb3VudFZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRh
KGRhdGEtPmNvdW50KTsKICAgICAgICAgLy8gVGhpcyBpcyBwcmV0dHkgbGFtZSwgYnV0IGl0IHdp
bGwgZm9yY2UgdGhlIGNvdW50IHRvIGJlIGZsdXNoZWQgYXMgYW4gaW50LiBUaGlzIGRvZXNuJ3QK
ICAgICAgICAgLy8gbWF0dGVyIHZlcnkgbXVjaCwgc2luY2Ugb3VyIHVzZSBvZiBhIFNldEFyZ3Vt
ZW50RGVmaW5pdGVseSBhbmQgRmx1c2hlcyBmb3IgdGhpcyBsb2NhbCBzbG90IGlzCiAgICAgICAg
IC8vIG1vc3RseSBqdXN0IGEgZm9ybWFsaXR5LgogICAgICAgICBjb3VudFZhcmlhYmxlLT5wcmVk
aWN0KFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBjb3VudFZhcmlhYmxlLT5tZXJnZUlzUHJvZml0
YWJsZVRvVW5ib3godHJ1ZSk7CiAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50Q291bnQgPSBhZGRU
b0dyYXBoKFNldEFyZ3VtZW50RGVmaW5pdGVseSwgT3BJbmZvKGNvdW50VmFyaWFibGUpKTsKLSAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKGNvdW50VmFy
aWFibGUtPmxvY2FsKCksIHNldEFyZ3VtZW50Q291bnQpOworICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQoY291bnRWYXJpYWJsZS0+b3BlcmFuZCgpLCBz
ZXRBcmd1bWVudENvdW50KTsKICAgICAgICAgCiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIo
YXJndW1lbnRTdGFydCksIGdldCh0aGlzQXJndW1lbnQpLCBJbW1lZGlhdGVOYWtlZFNldCk7CiAg
ICAgICAgIHVuc2lnbmVkIG51bVNldEFyZ3VtZW50cyA9IDA7CkBAIC0xOTU1LDcgKzIwMDksNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRh
cmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlcgogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBOb2RlKiBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgobnVtU2V0QXJndW1lbnRz
ID49IG1hbmRhdG9yeU1pbmltdW0gPyBTZXRBcmd1bWVudE1heWJlIDogU2V0QXJndW1lbnREZWZp
bml0ZWx5LCBPcEluZm8odmFyaWFibGUpKTsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52
YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSwgc2V0QXJndW1lbnQp
OworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5k
KHZhcmlhYmxlLT5vcGVyYW5kKCksIHNldEFyZ3VtZW50KTsKICAgICAgICAgICAgICsrbnVtU2V0
QXJndW1lbnRzOwogICAgICAgICB9CiAgICAgfTsKQEAgLTIwNTUsNyArMjEwOSw3IEBAIEJ5dGVD
b2RlUGFyc2VyOjpDYWxsT3B0aW1pemF0aW9uUmVzdWx0IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJ
bmxpbmluZygKICAgICAvLyB5ZXQuCiAgICAgVkVSQk9TRV9MT0coIlJlZ2lzdGVyIG9mZnNldDog
IiwgcmVnaXN0ZXJPZmZzZXQpOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWVSZWcocmVnaXN0
ZXJPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOwotICAgIGNhbGxlZVJlZyA9IG1faW5s
aW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChjYWxsZWVSZWcpOworICAgIGNhbGxlZVJlZyA9IG1f
aW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChjYWxsZWVSZWcpLnZpcnR1YWxSZWdpc3Rlcigp
OwogICAgIFZFUkJPU0VfTE9HKCJDYWxsZWUgaXMgZ29pbmcgdG8gYmUgIiwgY2FsbGVlUmVnLCAi
XG4iKTsKICAgICBzZXREaXJlY3QoY2FsbGVlUmVnLCBjYWxsVGFyZ2V0Tm9kZSwgSW1tZWRpYXRl
U2V0V2l0aEZsdXNoKTsKIApAQCAtMjE3NCw3ICsyMjI4LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlTWluTWF4KFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIE5vZGVUeXBlIG9wLCBpbnQg
cmVnaXMKICAgICAgCiAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDIpIHsK
ICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgIE5vZGUqIHJlc3VsdE5vZGUgPSBnZXQo
VmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zm
c2V0KSkpOworICAgICAgICBOb2RlKiByZXN1bHROb2RlID0gZ2V0KFZpcnR1YWxSZWdpc3Rlcih2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQp
KSk7CiAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgRWRnZShyZXN1bHROb2RlLCBOdW1iZXJV
c2UpKTsKICAgICAgICAgc2V0KHJlc3VsdCwgcmVzdWx0Tm9kZSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwpAQCAtMjE4Miw3ICsyMjM2LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWlu
TWF4KFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIE5vZGVUeXBlIG9wLCBpbnQgcmVnaXMKICAgICAK
ICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMykgewogICAgICAgICBpbnNl
cnRDaGVja3MoKTsKLSAgICAgICAgc2V0KHJlc3VsdCwgYWRkVG9HcmFwaChvcCwgZ2V0KHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSksIGdldCh2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudCgyLCByZWdpc3Rlck9mZnNldCkpKSk7CisgICAgICAgIHNldChyZXN1
bHQsIGFkZFRvR3JhcGgob3AsIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGlu
Z1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQpKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
SW5jbHVkaW5nVGhpcygyLCByZWdpc3Rlck9mZnNldCkpKSk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICAKQEAgLTIyMzAsNyArMjI4NCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUludHJpbnNpY0NhbGwoTm9kZSogY2FsbGVlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
LCBJCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBpbnNlcnRD
aGVja3MoKTsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBhZGRUb0dyYXBoKEFyaXRoQWJzLCBn
ZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSk7CisgICAg
ICAgICAgICBOb2RlKiBub2RlID0gYWRkVG9HcmFwaChBcml0aEFicywgZ2V0KHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rlck9mZnNldCkpKTsKICAgICAg
ICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1f
Y3VycmVudEluZGV4LCBPdmVyZmxvdykpCiAgICAgICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFn
cyhOb2RlTWF5T3ZlcmZsb3dJbnQzMkluREZHKTsKICAgICAgICAgICAgIHNldFJlc3VsdChub2Rl
KTsKQEAgLTIyNjcsNyArMjMyMSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJp
bnNpY0NhbGwoTm9kZSogY2FsbGVlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBJCiAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGluc2VydENoZWNrcygpOwotICAgICAgICAgICAgc2V0UmVzdWx0KGFkZFRvR3Jh
cGgoQXJpdGhVbmFyeSwgT3BJbmZvKHN0YXRpY19jYXN0PHN0ZDo6dW5kZXJseWluZ190eXBlPEFy
aXRoOjpVbmFyeVR5cGU+Ojp0eXBlPih0eXBlKSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKSk7CisgICAgICAgICAgICBzZXRSZXN1bHQoYWRkVG9H
cmFwaChBcml0aFVuYXJ5LCBPcEluZm8oc3RhdGljX2Nhc3Q8c3RkOjp1bmRlcmx5aW5nX3R5cGU8
QXJpdGg6OlVuYXJ5VHlwZT46OnR5cGU+KHR5cGUpKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rlck9mZnNldCkpKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCkBAIC0yMjkxLDcgKzIzNDUsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNhbGxlZSwgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCwgSQogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKLSAgICAgICAg
ICAgIHNldFJlc3VsdChhZGRUb0dyYXBoKG5vZGVUeXBlLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSkpOworICAgICAgICAgICAgc2V0UmVzdWx0KGFk
ZFRvR3JhcGgobm9kZVR5cGUsIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGlu
Z1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQpKSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KIApAQCAtMjMwMyw4ICsyMzU3LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlSW50cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEkK
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGluc2VydENoZWNrcygpOwotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHhPcGVyYW5kID0g
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpOwotICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHlPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
MiwgcmVnaXN0ZXJPZmZzZXQpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHhPcGVyYW5k
ID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDEsIHJlZ2lzdGVyT2Zm
c2V0KTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB5T3BlcmFuZCA9IHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygyLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAg
ICAgICBzZXRSZXN1bHQoYWRkVG9HcmFwaChBcml0aFBvdywgZ2V0KHhPcGVyYW5kKSwgZ2V0KHlP
cGVyYW5kKSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTIzMjAs
OCArMjM3NCw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwoTm9k
ZSogY2FsbGVlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBJCiAgICAgICAgICAgICBpZiAoIW1v
ZGUuaXNTb21lVHlwZWRBcnJheVZpZXcoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tBcnJheSwgT3BJbmZvKG1vZGUuYXNXb3Jk
KCkpLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKSk7
Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrTmV1dGVyZWQsIGdldCh2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpKTsKKyAgICAgICAgICAgIGFkZFRvR3Jh
cGgoQ2hlY2tBcnJheSwgT3BJbmZvKG1vZGUuYXNXb3JkKCkpLCBnZXQodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDAsIHJlZ2lzdGVyT2Zmc2V0KSkpOworICAgICAgICAg
ICAgYWRkVG9HcmFwaChDaGVja05ldXRlcmVkLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnRJbmNsdWRpbmdUaGlzKDAsIHJlZ2lzdGVyT2Zmc2V0KSkpOwogICAgICAgICAgICAgRkFMTFRI
Uk9VR0g7CiAgICAgICAgIH0KIApAQCAtMjM1NCw3ICsyNDA4LDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlSW50cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQsIEkKIAogICAgICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhbiBleGlzdGluZyBlcnJv
ciBzdHJpbmcuCiAgICAgICAgICAgICB1bnNpZ25lZCBlcnJvclN0cmluZ0luZGV4ID0gVUlOVDMy
X01BWDsKLSAgICAgICAgICAgIE5vZGUqIG9iamVjdCA9IGFkZFRvR3JhcGgoVG9PYmplY3QsIE9w
SW5mbyhlcnJvclN0cmluZ0luZGV4KSwgT3BJbmZvKFNwZWNOb25lKSwgZ2V0KHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSkpOworICAgICAgICAgICAgTm9kZSog
b2JqZWN0ID0gYWRkVG9HcmFwaChUb09iamVjdCwgT3BJbmZvKGVycm9yU3RyaW5nSW5kZXgpLCBP
cEluZm8oU3BlY05vbmUpLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKDAsIHJlZ2lzdGVyT2Zmc2V0KSkpOwogCiAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY3VycmVudE5vZGVPcmlnaW4o
KS5zZW1hbnRpYyk7CiAgICAgICAgICAgICBOb2RlKiBpdGVyYXRvciA9IGFkZFRvR3JhcGgoTmV3
QXJyYXlJdGVyYXRvciwgT3BJbmZvKG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2Jq
ZWN0LT5hcnJheUl0ZXJhdG9yU3RydWN0dXJlKCkpKSk7CkBAIC0yMzgyLDcgKzI0MzYsNyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNhbGxlZSwgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdCwgSQogCiAgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
bnVsbHB0cik7IC8vIEZvciBzdG9yYWdlLgogICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7ICsraSkKLSAgICAgICAgICAgICAgICAg
ICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGksIHJlZ2lz
dGVyT2Zmc2V0KSkpOworICAgICAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGksIHJlZ2lzdGVyT2Zmc2V0KSkp
OwogICAgICAgICAgICAgICAgIE5vZGUqIGFycmF5UHVzaCA9IGFkZFRvR3JhcGgoTm9kZTo6VmFy
QXJnLCBBcnJheVB1c2gsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8ocHJlZGlj
dGlvbikpOwogICAgICAgICAgICAgICAgIHNldFJlc3VsdChhcnJheVB1c2gpOwogICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjQzMiw3ICsyNDg2LDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlSW50cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQsIEkKIAogICAgICAgICAgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKIAotICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBhcnJheSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dCgwLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBhcnJheSA9
IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMCwgcmVnaXN0ZXJP
ZmZzZXQpKTsKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG8gYSBmZXcgdGhpbmdzIGhlcmUg
dG8gcHJvdmUgdGhhdCB3ZSBhcmVuJ3Qgc2tpcHBpbmcgZG9pbmcgc2lkZS1lZmZlY3RzIGluIGFu
IG9ic2VydmFibGUgd2F5OgogICAgICAgICAgICAgICAgICAgICAvLyAxLiBXZSBlbnN1cmUgdGhh
dCB0aGUgImNvbnN0cnVjdG9yIiBwcm9wZXJ0eSBoYXNuJ3QgYmVlbiBjaGFuZ2VkIChiZWNhdXNl
IHRoZSBvYnNlcnZhYmxlCiAgICAgICAgICAgICAgICAgICAgIC8vIGVmZmVjdHMgb2Ygc2xpY2Ug
cmVxdWlyZSB0aGF0IHdlIHBlcmZvcm0gYSBHZXQoYXJyYXksICJjb25zdHJ1Y3RvciIpIGFuZCB3
ZSBjYW4gc2tpcApAQCAtMjQ2MCw5ICsyNTE0LDkgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlSW50cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEkK
IAogICAgICAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChhcnJheSk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+PSAyKQotICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpOyAvLyBTdGFydCBpbmRleC4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQpKSk7IC8vIFN0YXJ0IGluZGV4LgogICAgICAg
ICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPj0gMykKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudCgyLCByZWdpc3Rlck9mZnNldCkpKTsgLy8gRW5kIGluZGV4LgorICAgICAgICAgICAg
ICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
SW5jbHVkaW5nVGhpcygyLCByZWdpc3Rlck9mZnNldCkpKTsgLy8gRW5kIGluZGV4LgogICAgICAg
ICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChhZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwgYXJy
YXkpKTsKIAogICAgICAgICAgICAgICAgICAgICBOb2RlKiBhcnJheVNsaWNlID0gYWRkVG9HcmFw
aChOb2RlOjpWYXJBcmcsIEFycmF5U2xpY2UsIE9wSW5mbygpLCBPcEluZm8oKSk7CkBAIC0yNTIx
LDExICsyNTc1LDExIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwo
Tm9kZSogY2FsbGVlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBJCiAKICAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogYXJyYXkg
PSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAg
ICAgICAgICAgICAgICAgICAgTm9kZSogYXJyYXkgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnRJbmNsdWRpbmdUaGlzKDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAg
ICAgIGFkZFZhckFyZ0NoaWxkKGFycmF5KTsKLSAgICAgICAgICAgICAgICAgICAgYWRkVmFyQXJn
Q2hpbGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkp
OyAvLyBTZWFyY2ggZWxlbWVudC4KKyAgICAgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
Z2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rlck9m
ZnNldCkpKTsgLy8gU2VhcmNoIGVsZW1lbnQuCiAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyA+PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgYWRk
VmFyQXJnQ2hpbGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDIsIHJlZ2lzdGVyT2Zm
c2V0KSkpOyAvLyBTdGFydCBpbmRleC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFZhckFy
Z0NoaWxkKGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMiwgcmVn
aXN0ZXJPZmZzZXQpKSk7IC8vIFN0YXJ0IGluZGV4LgogICAgICAgICAgICAgICAgICAgICBhZGRW
YXJBcmdDaGlsZChudWxscHRyKTsKIAogICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0g
YWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEFycmF5SW5kZXhPZiwgT3BJbmZvKGFycmF5TW9kZS5h
c1dvcmQoKSksIE9wSW5mbygpKTsKQEAgLTI1NTQsNyArMjYwOCw3IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwoTm9kZSogY2FsbGVlLCBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0LCBJCiAgICAgICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICAg
ICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7CiAgICAgICAgICAgICAgICAgaW5zZXJ0Q2hl
Y2tzKCk7Ci0gICAgICAgICAgICAgICAgTm9kZSogYXJyYXlQb3AgPSBhZGRUb0dyYXBoKEFycmF5
UG9wLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKSk7CisgICAgICAg
ICAgICAgICAgTm9kZSogYXJyYXlQb3AgPSBhZGRUb0dyYXBoKEFycmF5UG9wLCBPcEluZm8oYXJy
YXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDAsIHJlZ2lzdGVyT2Zmc2V0KSkpOwogICAgICAgICAg
ICAgICAgIHNldFJlc3VsdChhcnJheVBvcCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICB9CkBAIC0yNjM2LDcgKzI2OTAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNhbGxlZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCwgSQogICAgICAgICAgICAgCiAgICAgICAgICAgICBWZWN0b3I8Tm9kZSosIDM+IGFyZ3M7CiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQXJnczsgKytpKQotICAgICAg
ICAgICAgICAgIGFyZ3MuYXBwZW5kKGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxICsg
aSwgcmVnaXN0ZXJPZmZzZXQpKSk7CisgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQoZ2V0KHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxICsgaSwgcmVnaXN0ZXJPZmZz
ZXQpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIE5vZGUqIHJlc3VsdE5vZGU7CiAgICAg
ICAgICAgICBpZiAobnVtQXJncyArIDEgPD0gMykgewpAQCAtMjY2MiwxMyArMjcxNiwxMyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNhbGxlZSwgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdCwgSQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWVPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZz
ZXQpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlT3BlcmFuZCA9IHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rlck9mZnNldCk7CiAgICAg
ICAgICAgICBOb2RlKiBwYXJzZUludDsKICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyA9PSAyKQogICAgICAgICAgICAgICAgIHBhcnNlSW50ID0gYWRkVG9HcmFwaChQ
YXJzZUludCwgT3BJbmZvKCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHZhbHVlT3BlcmFuZCkp
OwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzID4gMik7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJh
ZGl4T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDIsIHJlZ2lzdGVyT2Zmc2V0
KTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmFkaXhPcGVyYW5kID0gdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDIsIHJlZ2lzdGVyT2Zmc2V0KTsKICAg
ICAgICAgICAgICAgICBwYXJzZUludCA9IGFkZFRvR3JhcGgoUGFyc2VJbnQsIE9wSW5mbygpLCBP
cEluZm8ocHJlZGljdGlvbiksIGdldCh2YWx1ZU9wZXJhbmQpLCBnZXQocmFkaXhPcGVyYW5kKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzZXRSZXN1bHQocGFyc2VJbnQpOwpAQCAtMjY4
Myw4ICsyNzM3LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljQ2FsbChO
b2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIGluc2VydENoZWNrcygpOwotICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIHRoaXNPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
MCwgcmVnaXN0ZXJPZmZzZXQpOwotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4T3Bl
cmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzT3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50SW5jbHVkaW5nVGhpcygwLCByZWdpc3Rlck9mZnNldCk7CisgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgaW5kZXhPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJ
bmNsdWRpbmdUaGlzKDEsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAgICAgICAgIE5vZGUqIGNoYXJD
b2RlID0gYWRkVG9HcmFwaChTdHJpbmdDaGFyQ29kZUF0LCBPcEluZm8oQXJyYXlNb2RlKEFycmF5
OjpTdHJpbmcsIEFycmF5OjpSZWFkKS5hc1dvcmQoKSksIGdldCh0aGlzT3BlcmFuZCksIGdldChp
bmRleE9wZXJhbmQpKTsKIAogICAgICAgICAgICAgc2V0UmVzdWx0KGNoYXJDb2RlKTsKQEAgLTI3
MDIsOCArMjc1Niw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwo
Tm9kZSogY2FsbGVlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBJCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKLSAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciB0aGlzT3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KDAsIHJlZ2lzdGVyT2Zmc2V0KTsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleE9w
ZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCk7Cisg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc09wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMCwgcmVnaXN0ZXJPZmZzZXQpOworICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGluZGV4T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgICAgICBOb2RlKiByZXN1
bHQgPSBhZGRUb0dyYXBoKFN0cmluZ0NvZGVQb2ludEF0LCBPcEluZm8oQXJyYXlNb2RlKEFycmF5
OjpTdHJpbmcsIEFycmF5OjpSZWFkKS5hc1dvcmQoKSksIGdldCh0aGlzT3BlcmFuZCksIGdldChp
bmRleE9wZXJhbmQpKTsKIAogICAgICAgICAgICAgc2V0UmVzdWx0KHJlc3VsdCk7CkBAIC0yNzIy
LDggKzI3NzYsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5v
ZGUqIGNhbGxlZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgSQogICAgICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMTY3OAogCiAgICAgICAgICAg
ICBpbnNlcnRDaGVja3MoKTsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzT3BlcmFu
ZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KTsKLSAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleE9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCk7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dGhpc09wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMCwg
cmVnaXN0ZXJPZmZzZXQpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4T3BlcmFu
ZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rlck9m
ZnNldCk7CiAgICAgICAgICAgICBOb2RlKiBjaGFyQ29kZSA9IGFkZFRvR3JhcGgoU3RyaW5nQ2hh
ckF0LCBPcEluZm8oQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcsIEFycmF5OjpSZWFkKS5hc1dvcmQo
KSksIGdldCh0aGlzT3BlcmFuZCksIGdldChpbmRleE9wZXJhbmQpKTsKIAogICAgICAgICAgICAg
c2V0UmVzdWx0KGNoYXJDb2RlKTsKQEAgLTI3MzQsNyArMjc4OCw3IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwoTm9kZSogY2FsbGVlLCBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0LCBJCiAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0g
MSkKICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcElu
Zm8obV9ncmFwaC5mcmVlemUoanNOdW1iZXIoMzIpKSkpKTsKICAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgIE5vZGUqIG9wZXJhbmQgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBvcGVyYW5k
ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rl
ck9mZnNldCkpOwogICAgICAgICAgICAgICAgIHNldFJlc3VsdChhZGRUb0dyYXBoKEFyaXRoQ2x6
MzIsIG9wZXJhbmQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtMjc0NCw3ICsyNzk4LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2lj
Q2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIGluc2VydENoZWNrcygpOwotICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBp
bmRleE9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMSwg
cmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICAgICAgTm9kZSogY2hhckNvZGUgPSBhZGRUb0dyYXBo
KFN0cmluZ0Zyb21DaGFyQ29kZSwgZ2V0KGluZGV4T3BlcmFuZCkpOwogCiAgICAgICAgICAgICBz
ZXRSZXN1bHQoY2hhckNvZGUpOwpAQCAtMjc1Nyw3ICsyODExLDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlSW50cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQsIEkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGluc2VydENoZWNrcygpOwotICAgICAgICAgICAgTm9kZSogcmVnRXhwRXhlYyA9
IGFkZFRvR3JhcGgoUmVnRXhwRXhlYywgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiksIGFk
ZFRvR3JhcGgoR2V0R2xvYmFsT2JqZWN0LCBjYWxsZWUpLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpOworICAgICAgICAgICAgTm9kZSogcmVnRXhwRXhlYyA9
IGFkZFRvR3JhcGgoUmVnRXhwRXhlYywgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiksIGFk
ZFRvR3JhcGgoR2V0R2xvYmFsT2JqZWN0LCBjYWxsZWUpLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnRJbmNsdWRpbmdUaGlzKDAsIHJlZ2lzdGVyT2Zmc2V0KSksIGdldCh2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQpKSk7CiAgICAg
ICAgICAgICBzZXRSZXN1bHQocmVnRXhwRXhlYyk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtMjc5NSw3ICsyODQ5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlSW50cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQs
IEkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICAgICAg
Ly8gQ2hlY2sgdGhhdCByZWdFeHBPYmplY3QgaXMgYWN0dWFsbHkgYSBSZWdFeHAgb2JqZWN0Lgot
ICAgICAgICAgICAgICAgIE5vZGUqIHJlZ0V4cE9iamVjdCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgICAgIE5vZGUqIHJl
Z0V4cE9iamVjdCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
MCwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrLCBF
ZGdlKHJlZ0V4cE9iamVjdCwgUmVnRXhwT2JqZWN0VXNlKSk7CiAKICAgICAgICAgICAgICAgICAv
LyBDaGVjayB0aGF0IHJlZ0V4cE9iamVjdCdzIGV4ZWMgaXMgYWN0dWFsbHkgdGhlIHByaW1vZGlh
bCBSZWdFeHAucHJvdG90eXBlLmV4ZWMuCkBAIC0yODA3LDggKzI4NjEsOCBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNhbGxlZSwgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCwgSQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpbnNlcnRDaGVja3Mo
KTsKLSAgICAgICAgICAgIE5vZGUqIHJlZ0V4cE9iamVjdCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgTm9kZSogcmVnRXhw
RXhlYyA9IGFkZFRvR3JhcGgoUmVnRXhwVGVzdCwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlv
biksIGFkZFRvR3JhcGgoR2V0R2xvYmFsT2JqZWN0LCBjYWxsZWUpLCByZWdFeHBPYmplY3QsIGdl
dCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKTsKKyAgICAg
ICAgICAgIE5vZGUqIHJlZ0V4cE9iamVjdCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dEluY2x1ZGluZ1RoaXMoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgIE5vZGUqIHJl
Z0V4cEV4ZWMgPSBhZGRUb0dyYXBoKFJlZ0V4cFRlc3QsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRp
Y3Rpb24pLCBhZGRUb0dyYXBoKEdldEdsb2JhbE9iamVjdCwgY2FsbGVlKSwgcmVnRXhwT2JqZWN0
LCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDEsIHJlZ2lzdGVy
T2Zmc2V0KSkpOwogICAgICAgICAgICAgc2V0UmVzdWx0KHJlZ0V4cEV4ZWMpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI4MTgsNyArMjg3Miw3IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwoTm9kZSogY2FsbGVlLCBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0LCBJCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyA9PSAyKTsKIAogICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0g
ICAgICAgICAgICBOb2RlKiByZWdFeHBNYXRjaCA9IGFkZFRvR3JhcGgoUmVnRXhwTWF0Y2hGYXN0
LCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYWRkVG9HcmFwaChHZXRHbG9iYWxPYmpl
Y3QsIGNhbGxlZSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9m
ZnNldCkpLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQp
KSk7CisgICAgICAgICAgICBOb2RlKiByZWdFeHBNYXRjaCA9IGFkZFRvR3JhcGgoUmVnRXhwTWF0
Y2hGYXN0LCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYWRkVG9HcmFwaChHZXRHbG9i
YWxPYmplY3QsIGNhbGxlZSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGlu
Z1RoaXMoMCwgcmVnaXN0ZXJPZmZzZXQpKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rlck9mZnNldCkpKTsKICAgICAgICAgICAgIHNldFJlc3Vs
dChyZWdFeHBNYXRjaCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAt
MjgyOCw3ICsyODgyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljQ2Fs
bChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIGluc2VydENoZWNrcygpOwotICAgICAgICAg
ICAgc2V0UmVzdWx0KGFkZFRvR3JhcGgoT2JqZWN0Q3JlYXRlLCBnZXQodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSkpOworICAgICAgICAgICAgc2V0UmVzdWx0
KGFkZFRvR3JhcGgoT2JqZWN0Q3JlYXRlLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJ
bmNsdWRpbmdUaGlzKDEsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAKQEAgLTI4MzcsNyArMjg5MSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUludHJpbnNpY0NhbGwoTm9kZSogY2FsbGVlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0LCBJCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBpbnNl
cnRDaGVja3MoKTsKLSAgICAgICAgICAgIHNldFJlc3VsdChhZGRUb0dyYXBoKEdldFByb3RvdHlw
ZU9mLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsKKyAgICAgICAgICAgIHNldFJlc3VsdChh
ZGRUb0dyYXBoKEdldFByb3RvdHlwZU9mLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwg
Z2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rlck9m
ZnNldCkpKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCkBAIC0yODQ2
LDcgKzI5MDAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5v
ZGUqIGNhbGxlZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgSQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgICAgICBz
ZXRSZXN1bHQoYWRkVG9HcmFwaChTYW1lVmFsdWUsIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudCgxLCByZWdpc3Rlck9mZnNldCkpLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
MiwgcmVnaXN0ZXJPZmZzZXQpKSkpOworICAgICAgICAgICAgc2V0UmVzdWx0KGFkZFRvR3JhcGgo
U2FtZVZhbHVlLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDEs
IHJlZ2lzdGVyT2Zmc2V0KSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGlu
Z1RoaXMoMiwgcmVnaXN0ZXJPZmZzZXQpKSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KIApAQCAtMjg1NSw3ICsyOTA5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlSW50cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIGluc2VydENoZWNr
cygpOwotICAgICAgICAgICAgc2V0UmVzdWx0KGFkZFRvR3JhcGgoT2JqZWN0S2V5cywgZ2V0KHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsKKyAgICAgICAg
ICAgIHNldFJlc3VsdChhZGRUb0dyYXBoKE9iamVjdEtleXMsIGdldCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQpKSkpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIApAQCAtMjg2NCw3ICsyOTE4LDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQsIEkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAg
ICAgICAgIGluc2VydENoZWNrcygpOwotICAgICAgICAgICAgc2V0UmVzdWx0KGFkZFRvR3JhcGgo
R2V0UHJvdG90eXBlT2YsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBFZGdlKGdldCh2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpLCBPYmplY3RVc2Up
KSk7CisgICAgICAgICAgICBzZXRSZXN1bHQoYWRkVG9HcmFwaChHZXRQcm90b3R5cGVPZiwgT3BJ
bmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiksIEVkZ2UoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rlck9mZnNldCkpLCBPYmplY3RVc2UpKSk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCkBAIC0yODcyLDEzICsyOTI2LDEz
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwoTm9kZSogY2FsbGVl
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBJCiAgICAgICAgICAgICBBU1NFUlQoYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgPT0gMik7CiAKICAgICAgICAgICAgIGluc2VydENoZWNrcygpOwot
ICAgICAgICAgICAgc2V0UmVzdWx0KGFkZFRvR3JhcGgoSXNUeXBlZEFycmF5VmlldywgT3BJbmZv
KHByZWRpY3Rpb24pLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJP
ZmZzZXQpKSkpOworICAgICAgICAgICAgc2V0UmVzdWx0KGFkZFRvR3JhcGgoSXNUeXBlZEFycmF5
VmlldywgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJ
bmNsdWRpbmdUaGlzKDEsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBTdHJpbmdQcm90b3R5cGVWYWx1ZU9mSW50
cmluc2ljOiB7CiAgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKLSAgICAgICAgICAgIE5vZGUq
IHZhbHVlID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0
KSk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgIHNldFJl
c3VsdChhZGRUb0dyYXBoKFN0cmluZ1ZhbHVlT2YsIHZhbHVlKSk7CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMjkzMCw3ICsyOTg0LDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlSW50cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQsIEkKIAogICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAKLSAgICAgICAgICAgIE5v
ZGUqIHJlc3VsdE5vZGUgPSBhZGRUb0dyYXBoKFN0cmluZ1JlcGxhY2UsIE9wSW5mbygwKSwgT3BJ
bmZvKHByZWRpY3Rpb24pLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0
ZXJPZmZzZXQpKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zm
c2V0KSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgyLCByZWdpc3Rlck9mZnNldCkp
KTsKKyAgICAgICAgICAgIE5vZGUqIHJlc3VsdE5vZGUgPSBhZGRUb0dyYXBoKFN0cmluZ1JlcGxh
Y2UsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnRJbmNsdWRpbmdUaGlzKDAsIHJlZ2lzdGVyT2Zmc2V0KSksIGdldCh2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQpKSwgZ2V0KHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygyLCByZWdpc3Rlck9mZnNldCkp
KTsKICAgICAgICAgICAgIHNldFJlc3VsdChyZXN1bHROb2RlKTsKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICB9CkBAIC0yOTQwLDcgKzI5OTQsNyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNhbGxlZSwgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCwgSQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgICAgICBOb2RlKiByZXN1bHROb2RlID0g
YWRkVG9HcmFwaChTdHJpbmdSZXBsYWNlUmVnRXhwLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0
aW9uKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSks
IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpLCBnZXQo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMiwgcmVnaXN0ZXJPZmZzZXQpKSk7CisgICAgICAg
ICAgICBOb2RlKiByZXN1bHROb2RlID0gYWRkVG9HcmFwaChTdHJpbmdSZXBsYWNlUmVnRXhwLCBP
cEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50SW5jbHVkaW5nVGhpcygwLCByZWdpc3Rlck9mZnNldCkpLCBnZXQodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDEsIHJlZ2lzdGVyT2Zmc2V0KSksIGdldCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMiwgcmVnaXN0ZXJPZmZzZXQpKSk7CiAg
ICAgICAgICAgICBzZXRSZXN1bHQocmVzdWx0Tm9kZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQpAQCAtMjk1NSw3ICszMDA5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlSW50cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQs
IEkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGluc2VydENoZWNrcygpOwotICAgICAgICAgICAgTm9kZSogb3BlcmFuZCA9IGdldCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAg
Tm9kZSogb3BlcmFuZCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1Ro
aXMoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgIE5vZGVUeXBlIG9wOwogICAgICAg
ICAgICAgaWYgKGludHJpbnNpYyA9PSBSb3VuZEludHJpbnNpYykKICAgICAgICAgICAgICAgICBv
cCA9IEFyaXRoUm91bmQ7CkBAIC0yOTc1LDggKzMwMjksOCBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNhbGxlZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCwgSQogICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDwgMykKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsK
LSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsZWZ0T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KTsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciByaWdodE9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgyLCByZWdpc3Rl
ck9mZnNldCk7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbGVmdE9wZXJhbmQgPSB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQpOwor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJpZ2h0T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygyLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgICAg
ICBOb2RlKiBsZWZ0ID0gZ2V0KGxlZnRPcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGUqIHJpZ2h0
ID0gZ2V0KHJpZ2h0T3BlcmFuZCk7CiAgICAgICAgICAgICBzZXRSZXN1bHQoYWRkVG9HcmFwaChB
cml0aElNdWwsIGxlZnQsIHJpZ2h0KSk7CkBAIC0zMDE3LDcgKzMwNzEsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNhbGxlZSwgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCwgSQogICAgICAgICBjYXNlIFNldEludDMySGVhcFByZWRpY3Rpb25JbnRyaW5z
aWM6IHsKICAgICAgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDE7IGkgPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgKytpKSB7Ci0gICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpLCByZWdp
c3Rlck9mZnNldCkpOworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBnZXQodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGksIHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmhhc0hlYXBQcmVkaWN0aW9uKCkpCiAgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPnNldEhlYXBQcmVkaWN0aW9uKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAg
ICAgfQpAQCAtMzAyOCw3ICszMDgyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50
cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEkKICAgICAg
ICAgY2FzZSBDaGVja0ludDMySW50cmluc2ljOiB7CiAgICAgICAgICAgICBpbnNlcnRDaGVja3Mo
KTsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXM7ICsraSkgewotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBnZXQodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoaSwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBO
b2RlKiBub2RlID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhp
LCByZWdpc3Rlck9mZnNldCkpOwogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwg
RWRnZShub2RlLCBJbnQzMlVzZSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2V0UmVz
dWx0KGpzQ29uc3RhbnQoanNCb29sZWFuKHRydWUpKSk7CkBAIC0zMDM5LDcgKzMwOTMsNyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNhbGxlZSwgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdCwgSQogICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzIDwgMikKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICBpbnNlcnRDaGVja3MoKTsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0g
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpOworICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICAgICAgaWYgKGVuYWJsZUlu
dDUyKCkpCiAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KGFkZFRvR3JhcGgoRmlhdEludDUyLCBn
ZXQob3BlcmFuZCkpKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTMwNTIsOCArMzEwNiw4IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwoTm9kZSogY2FsbGVlLCBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0LCBJCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKLSAgICAgICAgICAgIE5vZGUqIG1hcCA9IGdldCh2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAg
ICAgTm9kZSoga2V5ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVy
T2Zmc2V0KSk7CisgICAgICAgICAgICBOb2RlKiBtYXAgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnRJbmNsdWRpbmdUaGlzKDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICBO
b2RlKiBrZXkgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDEs
IHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAgICAgICAgICBOb2RlKiBub3JtYWxpemVkS2V5ID0gYWRk
VG9HcmFwaChOb3JtYWxpemVNYXBLZXksIGtleSk7CiAgICAgICAgICAgICBOb2RlKiBoYXNoID0g
YWRkVG9HcmFwaChNYXBIYXNoLCBub3JtYWxpemVkS2V5KTsKICAgICAgICAgICAgIE5vZGUqIGJ1
Y2tldCA9IGFkZFRvR3JhcGgoR2V0TWFwQnVja2V0LCBFZGdlKG1hcCwgTWFwT2JqZWN0VXNlKSwg
RWRnZShub3JtYWxpemVkS2V5KSwgRWRnZShoYXNoKSk7CkBAIC0zMDY4LDggKzMxMjIsOCBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNhbGxlZSwgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdCwgSQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgICAgICBOb2RlKiBtYXBPclNldCA9
IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOwotICAg
ICAgICAgICAgTm9kZSoga2V5ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJl
Z2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICBOb2RlKiBtYXBPclNldCA9IGdldCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAg
ICAgICAgICAgIE5vZGUqIGtleSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1
ZGluZ1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgIE5vZGUqIG5vcm1hbGl6
ZWRLZXkgPSBhZGRUb0dyYXBoKE5vcm1hbGl6ZU1hcEtleSwga2V5KTsKICAgICAgICAgICAgIE5v
ZGUqIGhhc2ggPSBhZGRUb0dyYXBoKE1hcEhhc2gsIG5vcm1hbGl6ZWRLZXkpOwogICAgICAgICAg
ICAgVXNlS2luZCB1c2VLaW5kID0gaW50cmluc2ljID09IEpTU2V0SGFzSW50cmluc2ljID8gU2V0
T2JqZWN0VXNlIDogTWFwT2JqZWN0VXNlOwpAQCAtMzA5Miw4ICszMTQ2LDggQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdp
c3RlciByZXN1bHQsIEkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAg
ICAgIGluc2VydENoZWNrcygpOwotICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgTm9k
ZSoga2V5ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0
KSk7CisgICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50SW5jbHVkaW5nVGhpcygwLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgTm9kZSog
a2V5ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxLCByZWdp
c3Rlck9mZnNldCkpOwogICAgICAgICAgICAgTm9kZSogbm9ybWFsaXplZEtleSA9IGFkZFRvR3Jh
cGgoTm9ybWFsaXplTWFwS2V5LCBrZXkpOwogICAgICAgICAgICAgTm9kZSogaGFzaCA9IGFkZFRv
R3JhcGgoTWFwSGFzaCwgbm9ybWFsaXplZEtleSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFNl
dEFkZCwgYmFzZSwgbm9ybWFsaXplZEtleSwgaGFzaCk7CkBAIC0zMTA2LDkgKzMxNjAsOSBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNhbGxlZSwgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdCwgSQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0
KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAg
ICAgICBOb2RlKiBrZXkgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0
ZXJPZmZzZXQpKTsKLSAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KDIsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICBOb2RlKiBiYXNl
ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygwLCByZWdpc3Rl
ck9mZnNldCkpOworICAgICAgICAgICAgTm9kZSoga2V5ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAg
Tm9kZSogdmFsdWUgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlz
KDIsIHJlZ2lzdGVyT2Zmc2V0KSk7CiAKICAgICAgICAgICAgIE5vZGUqIG5vcm1hbGl6ZWRLZXkg
PSBhZGRUb0dyYXBoKE5vcm1hbGl6ZU1hcEtleSwga2V5KTsKICAgICAgICAgICAgIE5vZGUqIGhh
c2ggPSBhZGRUb0dyYXBoKE1hcEhhc2gsIG5vcm1hbGl6ZWRLZXkpOwpAQCAtMzEyNyw3ICszMTgx
LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljQ2FsbChOb2RlKiBjYWxs
ZWUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEkKICAgICAgICAgICAgIEFTU0VSVChhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyA9PSAyKTsKIAogICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7
Ci0gICAgICAgICAgICBOb2RlKiBtYXAgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
MSwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgIE5vZGUqIG1hcCA9IGdldCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKICAg
ICAgICAgICAgIFVzZUtpbmQgdXNlS2luZCA9IGludHJpbnNpYyA9PSBKU1NldEJ1Y2tldEhlYWRJ
bnRyaW5zaWMgPyBTZXRPYmplY3RVc2UgOiBNYXBPYmplY3RVc2U7CiAgICAgICAgICAgICBOb2Rl
KiByZXN1bHROb2RlID0gYWRkVG9HcmFwaChHZXRNYXBCdWNrZXRIZWFkLCBFZGdlKG1hcCwgdXNl
S2luZCkpOwogICAgICAgICAgICAgc2V0UmVzdWx0KHJlc3VsdE5vZGUpOwpAQCAtMzEzOSw3ICsz
MTkzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljQ2FsbChOb2RlKiBj
YWxsZWUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEkKICAgICAgICAgICAgIEFTU0VSVChhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAyKTsKIAogICAgICAgICAgICAgaW5zZXJ0Q2hlY2tz
KCk7Ci0gICAgICAgICAgICBOb2RlKiBidWNrZXQgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgIE5vZGUqIGJ1Y2tldCA9IGdl
dCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMSwgcmVnaXN0ZXJPZmZz
ZXQpKTsKICAgICAgICAgICAgIEJ1Y2tldE93bmVyVHlwZSB0eXBlID0gaW50cmluc2ljID09IEpT
U2V0QnVja2V0TmV4dEludHJpbnNpYyA/IEJ1Y2tldE93bmVyVHlwZTo6U2V0IDogQnVja2V0T3du
ZXJUeXBlOjpNYXA7CiAgICAgICAgICAgICBOb2RlKiByZXN1bHROb2RlID0gYWRkVG9HcmFwaChH
ZXRNYXBCdWNrZXROZXh0LCBPcEluZm8odHlwZSksIGJ1Y2tldCk7CiAgICAgICAgICAgICBzZXRS
ZXN1bHQocmVzdWx0Tm9kZSk7CkBAIC0zMTUxLDcgKzMyMDUsNyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNhbGxlZSwgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCwgSQogICAgICAgICAgICAgQVNTRVJUKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09
IDIpOwogCiAgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKLSAgICAgICAgICAgIE5vZGUqIGJ1
Y2tldCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkp
OworICAgICAgICAgICAgTm9kZSogYnVja2V0ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rlck9mZnNldCkpOwogICAgICAgICAgICAgQnVja2V0
T3duZXJUeXBlIHR5cGUgPSBpbnRyaW5zaWMgPT0gSlNTZXRCdWNrZXRLZXlJbnRyaW5zaWMgPyBC
dWNrZXRPd25lclR5cGU6OlNldCA6IEJ1Y2tldE93bmVyVHlwZTo6TWFwOwogICAgICAgICAgICAg
Tm9kZSogcmVzdWx0Tm9kZSA9IGFkZFRvR3JhcGgoTG9hZEtleUZyb21NYXBCdWNrZXQsIE9wSW5m
byh0eXBlKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBidWNrZXQpOwogICAgICAgICAgICAgc2V0UmVz
dWx0KHJlc3VsdE5vZGUpOwpAQCAtMzE2Miw3ICszMjE2LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlSW50cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciByZXN1
bHQsIEkKICAgICAgICAgICAgIEFTU0VSVChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAy
KTsKIAogICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgICAgICBOb2RlKiBidWNr
ZXQgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKTsK
KyAgICAgICAgICAgIE5vZGUqIGJ1Y2tldCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dEluY2x1ZGluZ1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgIE5vZGUqIHJl
c3VsdE5vZGUgPSBhZGRUb0dyYXBoKExvYWRWYWx1ZUZyb21NYXBCdWNrZXQsIE9wSW5mbyhCdWNr
ZXRPd25lclR5cGU6Ok1hcCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYnVja2V0KTsKICAgICAgICAg
ICAgIHNldFJlc3VsdChyZXN1bHROb2RlKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAt
MzE3Niw4ICszMjMwLDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljQ2Fs
bChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIGluc2VydENoZWNrcygpOwotICAgICAgICAg
ICAgTm9kZSogbWFwID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVy
T2Zmc2V0KSk7Ci0gICAgICAgICAgICBOb2RlKiBrZXkgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgIE5vZGUqIG1hcCA9IGdl
dCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMCwgcmVnaXN0ZXJPZmZz
ZXQpKTsKKyAgICAgICAgICAgIE5vZGUqIGtleSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgIGFkZFRv
R3JhcGgoQ2hlY2ssIEVkZ2Uoa2V5LCBPYmplY3RVc2UpKTsKICAgICAgICAgICAgIE5vZGUqIGhh
c2ggPSBhZGRUb0dyYXBoKE1hcEhhc2gsIGtleSk7CiAgICAgICAgICAgICBOb2RlKiBob2xkZXIg
PSBhZGRUb0dyYXBoKFdlYWtNYXBHZXQsIEVkZ2UobWFwLCBXZWFrTWFwT2JqZWN0VXNlKSwgRWRn
ZShrZXksIE9iamVjdFVzZSksIEVkZ2UoaGFzaCwgSW50MzJVc2UpKTsKQEAgLTMxOTUsOCArMzI0
OSw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwoTm9kZSogY2Fs
bGVlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBJCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKLSAgICAgICAgICAgIE5vZGUqIG1h
cCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOwot
ICAgICAgICAgICAgTm9kZSoga2V5ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEs
IHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICBOb2RlKiBtYXAgPSBnZXQodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAg
ICAgICAgICBOb2RlKiBrZXkgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRp
bmdUaGlzKDEsIHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNr
LCBFZGdlKGtleSwgT2JqZWN0VXNlKSk7CiAgICAgICAgICAgICBOb2RlKiBoYXNoID0gYWRkVG9H
cmFwaChNYXBIYXNoLCBrZXkpOwogICAgICAgICAgICAgTm9kZSogaG9sZGVyID0gYWRkVG9HcmFw
aChXZWFrTWFwR2V0LCBFZGdlKG1hcCwgV2Vha01hcE9iamVjdFVzZSksIEVkZ2Uoa2V5LCBPYmpl
Y3RVc2UpLCBFZGdlKGhhc2gsIEludDMyVXNlKSk7CkBAIC0zMjE1LDggKzMyNjksOCBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNhbGxlZSwgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdCwgSQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
ICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgICAgICBOb2RlKiBtYXAgPSBnZXQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAgICAgICAg
IE5vZGUqIGtleSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9m
ZnNldCkpOworICAgICAgICAgICAgTm9kZSogbWFwID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50SW5jbHVkaW5nVGhpcygwLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgTm9k
ZSoga2V5ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxLCBy
ZWdpc3Rlck9mZnNldCkpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVjaywgRWRnZShrZXks
IE9iamVjdFVzZSkpOwogICAgICAgICAgICAgTm9kZSogaGFzaCA9IGFkZFRvR3JhcGgoTWFwSGFz
aCwga2V5KTsKICAgICAgICAgICAgIE5vZGUqIGhvbGRlciA9IGFkZFRvR3JhcGgoV2Vha01hcEdl
dCwgRWRnZShtYXAsIFdlYWtTZXRPYmplY3RVc2UpLCBFZGdlKGtleSwgT2JqZWN0VXNlKSwgRWRn
ZShoYXNoLCBJbnQzMlVzZSkpOwpAQCAtMzIzNSw4ICszMjg5LDggQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlSW50cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQsIEkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIGlu
c2VydENoZWNrcygpOwotICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldCh2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgTm9kZSoga2V5
ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSk7Cisg
ICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5j
bHVkaW5nVGhpcygwLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgTm9kZSoga2V5ID0g
Z2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rlck9m
ZnNldCkpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVjaywgRWRnZShrZXksIE9iamVjdFVz
ZSkpOwogICAgICAgICAgICAgTm9kZSogaGFzaCA9IGFkZFRvR3JhcGgoTWFwSGFzaCwga2V5KTsK
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoV2Vha1NldEFkZCwgRWRnZShiYXNlLCBXZWFrU2V0T2Jq
ZWN0VXNlKSwgRWRnZShrZXksIE9iamVjdFVzZSksIEVkZ2UoaGFzaCwgSW50MzJVc2UpKTsKQEAg
LTMyNTIsOSArMzMwNiw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpY0Nh
bGwoTm9kZSogY2FsbGVlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBJCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKLSAgICAgICAg
ICAgIE5vZGUqIGJhc2UgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0
ZXJPZmZzZXQpKTsKLSAgICAgICAgICAgIE5vZGUqIGtleSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgTm9kZSogdmFsdWUg
PSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMiwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAg
ICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNs
dWRpbmdUaGlzKDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICBOb2RlKiBrZXkgPSBn
ZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDEsIHJlZ2lzdGVyT2Zm
c2V0KSk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoMiwgcmVnaXN0ZXJPZmZzZXQpKTsKIAogICAgICAgICAgICAg
YWRkVG9HcmFwaChDaGVjaywgRWRnZShrZXksIE9iamVjdFVzZSkpOwogICAgICAgICAgICAgTm9k
ZSogaGFzaCA9IGFkZFRvR3JhcGgoTWFwSGFzaCwga2V5KTsKQEAgLTMyNzIsNyArMzMyNiw3IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwoTm9kZSogY2FsbGVlLCBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBJCiAgICAgICAgICAgICBpZiAoIWlzNjRCaXQoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsK
LSAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
MCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQodmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CiAg
ICAgICAgICAgICBzZXRSZXN1bHQoYWRkVG9HcmFwaChEYXRlR2V0VGltZSwgT3BJbmZvKGludHJp
bnNpYyksIE9wSW5mbygpLCBiYXNlKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQpAQCAtMzI5OCw3ICszMzUyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50
cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEkKICAgICAg
ICAgICAgIGlmICghaXM2NEJpdCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgIGluc2VydENoZWNrcygpOwotICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldCh2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAg
ICAgTm9kZSogYmFzZSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1Ro
aXMoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgIHNldFJlc3VsdChhZGRUb0dyYXBo
KERhdGVHZXRJbnQzMk9yTmFOLCBPcEluZm8oaW50cmluc2ljKSwgT3BJbmZvKHByZWRpY3Rpb24p
LCBiYXNlKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMzM2OCw3
ICszNDIyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljQ2FsbChOb2Rl
KiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEkKICAgICAgICAgICAgICAgICBpZiAo
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPCAzKQogICAgICAgICAgICAgICAgICAgICBpc0xp
dHRsZUVuZGlhbiA9IEZhbHNlVHJpU3RhdGU7CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGxpdHRsZUVuZGlhbkNoaWxkID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDIsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgIGxpdHRs
ZUVuZGlhbkNoaWxkID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhp
cygyLCByZWdpc3Rlck9mZnNldCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAobGl0dGxlRW5k
aWFuQ2hpbGQtPmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFs
dWUgY29uc3RhbnQgPSBsaXR0bGVFbmRpYW5DaGlsZC0+Y29uc3RhbnQoKS0+dmFsdWUoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdGFudCkgewpAQCAtMzM4Nyw3ICszNDQxLDcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUs
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEkKICAgICAgICAgICAgIGRhdGEuYnl0ZVNpemUgPSBi
eXRlU2l6ZTsKIAogICAgICAgICAgICAgc2V0UmVzdWx0KAotICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgob3AsIE9wSW5mbyhkYXRhLmFzUXVhZFdvcmQpLCBPcEluZm8ocHJlZGljdGlvbiksIGdl
dCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpLCBnZXQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSwgbGl0dGxlRW5kaWFu
Q2hpbGQpKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKG9wLCBPcEluZm8oZGF0YS5hc1F1
YWRXb3JkKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnRJbmNsdWRpbmdUaGlzKDAsIHJlZ2lzdGVyT2Zmc2V0KSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQpKSwgbGl0dGxlRW5kaWFu
Q2hpbGQpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKQEAgLTM0NTMs
NyArMzUwNyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwoTm9k
ZSogY2FsbGVlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBJCiAgICAgICAgICAgICAgICAgaWYg
KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDwgNCkKICAgICAgICAgICAgICAgICAgICAgaXNM
aXR0bGVFbmRpYW4gPSBGYWxzZVRyaVN0YXRlOwogICAgICAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBsaXR0bGVFbmRpYW5DaGlsZCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudCgzLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICBsaXR0
bGVFbmRpYW5DaGlsZCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1Ro
aXMoMywgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGxpdHRsZUVu
ZGlhbkNoaWxkLT5oYXNDb25zdGFudCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBKU1Zh
bHVlIGNvbnN0YW50ID0gbGl0dGxlRW5kaWFuQ2hpbGQtPmNvbnN0YW50KCktPnZhbHVlKCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnQpIHsKQEAgLTM0NzIsOSArMzUyNiw5
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwoTm9kZSogY2FsbGVl
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBJCiAgICAgICAgICAgICBkYXRhLmJ5dGVTaXplID0g
Ynl0ZVNpemU7CiAgICAgICAgICAgICBkYXRhLmlzRmxvYXRpbmdQb2ludCA9IGlzRmxvYXRpbmdQ
b2ludDsKIAotICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSkpOwotICAgICAgICAgICAgYWRkVmFyQXJnQ2hp
bGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpOwot
ICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KDIsIHJlZ2lzdGVyT2Zmc2V0KSkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygwLCByZWdpc3Rlck9mZnNldCkp
KTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQpKSk7CisgICAgICAgICAgICBhZGRW
YXJBcmdDaGlsZChnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDIs
IHJlZ2lzdGVyT2Zmc2V0KSkpOwogICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQobGl0dGxlRW5k
aWFuQ2hpbGQpOwogCiAgICAgICAgICAgICBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgRGF0YVZp
ZXdTZXQsIE9wSW5mbyhkYXRhLmFzUXVhZFdvcmQpLCBPcEluZm8oKSk7CkBAIC0zNDk1LDggKzM1
NDksOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNh
bGxlZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgSQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgICAgICBOb2RlKiBv
YmplY3QgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQp
KTsKLSAgICAgICAgICAgIE5vZGUqIGtleSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dCgxLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgTm9kZSogb2JqZWN0ID0gZ2V0KHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygwLCByZWdpc3Rlck9mZnNldCkp
OworICAgICAgICAgICAgTm9kZSoga2V5ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rlck9mZnNldCkpOwogICAgICAgICAgICAgTm9kZSogcmVz
dWx0Tm9kZSA9IGFkZFRvR3JhcGgoSGFzT3duUHJvcGVydHksIG9iamVjdCwga2V5KTsKICAgICAg
ICAgICAgIHNldFJlc3VsdChyZXN1bHROb2RlKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtMzUxMCwxMSArMzU2NCwxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5z
aWNDYWxsKE5vZGUqIGNhbGxlZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgSQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAg
ICAgICAgICBOb2RlKiB0aGlzU3RyaW5nID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICBOb2RlKiBzdGFydCA9IGdldCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAg
Tm9kZSogdGhpc1N0cmluZyA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGlu
Z1RoaXMoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgIE5vZGUqIHN0YXJ0ID0gZ2V0
KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rlck9mZnNl
dCkpOwogICAgICAgICAgICAgTm9kZSogZW5kID0gbnVsbHB0cjsKICAgICAgICAgICAgIGlmIChh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+IDIpCi0gICAgICAgICAgICAgICAgZW5kID0gZ2V0
KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDIsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAg
ICAgICAgICAgZW5kID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhp
cygyLCByZWdpc3Rlck9mZnNldCkpOwogICAgICAgICAgICAgTm9kZSogcmVzdWx0Tm9kZSA9IGFk
ZFRvR3JhcGgoU3RyaW5nU2xpY2UsIHRoaXNTdHJpbmcsIHN0YXJ0LCBlbmQpOwogICAgICAgICAg
ICAgc2V0UmVzdWx0KHJlc3VsdE5vZGUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0z
NTI1LDcgKzM1NzksNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxs
KE5vZGUqIGNhbGxlZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgSQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgICAg
ICBOb2RlKiB0aGlzU3RyaW5nID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJl
Z2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICBOb2RlKiB0aGlzU3RyaW5nID0gZ2V0KHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygwLCByZWdpc3Rlck9mZnNldCkpOwog
ICAgICAgICAgICAgTm9kZSogcmVzdWx0Tm9kZSA9IGFkZFRvR3JhcGgoVG9Mb3dlckNhc2UsIHRo
aXNTdHJpbmcpOwogICAgICAgICAgICAgc2V0UmVzdWx0KHJlc3VsdE5vZGUpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC0zNTM2LDEyICszNTkwLDEyIEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUludHJpbnNpY0NhbGwoTm9kZSogY2FsbGVlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0LCBJCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBpbnNl
cnRDaGVja3MoKTsKLSAgICAgICAgICAgIE5vZGUqIHRoaXNOdW1iZXIgPSBnZXQodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgIE5vZGUq
IHRoaXNOdW1iZXIgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlz
KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgPT0gMSkgewogICAgICAgICAgICAgICAgIE5vZGUqIHJlc3VsdE5vZGUgPSBhZGRU
b0dyYXBoKFRvU3RyaW5nLCB0aGlzTnVtYmVyKTsKICAgICAgICAgICAgICAgICBzZXRSZXN1bHQo
cmVzdWx0Tm9kZSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIE5vZGUq
IHJhZGl4ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0
KSk7CisgICAgICAgICAgICAgICAgTm9kZSogcmFkaXggPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnRJbmNsdWRpbmdUaGlzKDEsIHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAgICAgICAgICAg
ICAgTm9kZSogcmVzdWx0Tm9kZSA9IGFkZFRvR3JhcGgoTnVtYmVyVG9TdHJpbmdXaXRoUmFkaXgs
IHRoaXNOdW1iZXIsIHJhZGl4KTsKICAgICAgICAgICAgICAgICBzZXRSZXN1bHQocmVzdWx0Tm9k
ZSk7CiAgICAgICAgICAgICB9CkBAIC0zNTUzLDcgKzM2MDcsNyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNhbGxlZSwgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCwgSQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgaW5z
ZXJ0Q2hlY2tzKCk7Ci0gICAgICAgICAgICBOb2RlKiBpbnB1dCA9IGdldCh2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgTm9kZSogaW5w
dXQgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDEsIHJlZ2lz
dGVyT2Zmc2V0KSk7CiAgICAgICAgICAgICBOb2RlKiByZXN1bHROb2RlID0gYWRkVG9HcmFwaChO
dW1iZXJJc0ludGVnZXIsIGlucHV0KTsKICAgICAgICAgICAgIHNldFJlc3VsdChyZXN1bHROb2Rl
KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzg1MSw3ICszOTA1LDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlVHlwZWRBcnJheUNvbnN0cnVjdG9yKAogCiAgICAgaW5zZXJ0
Q2hlY2tzKCk7CiAgICAgc2V0KHJlc3VsdCwKLSAgICAgICAgYWRkVG9HcmFwaChOZXdUeXBlZEFy
cmF5LCBPcEluZm8odHlwZSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdp
c3Rlck9mZnNldCkpKSk7CisgICAgICAgIGFkZFRvR3JhcGgoTmV3VHlwZWRBcnJheSwgT3BJbmZv
KHR5cGUpLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDEsIHJl
Z2lzdGVyT2Zmc2V0KSkpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzg2OCw3ICszOTIy
LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9u
KAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ29uc3Ry
dWN0KSB7Ci0gICAgICAgIE5vZGUqIG5ld1RhcmdldE5vZGUgPSBnZXQodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgTm9kZSogbmV3VGFyZ2V0
Tm9kZSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMCwgcmVn
aXN0ZXJPZmZzZXQpKTsKICAgICAgICAgLy8gV2UgY2Fubm90IGhhbmRsZSB0aGUgY2FzZSB3aGVy
ZSBuZXcudGFyZ2V0ICE9IGNhbGxlZSAoaS5lLiBhIGNvbnN0cnVjdCBmcm9tIGEgc3VwZXIgY2Fs
bCkgYmVjYXVzZSB3ZQogICAgICAgICAvLyBkb24ndCBrbm93IHdoYXQgdGhlIHByb3RvdHlwZSBv
ZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUuCiAgICAgICAgIC8vIEZJWE1FOiBJZiB3
ZSBoYXZlIGlubGluZWQgc3VwZXIgY2FsbHMgdXAgdG8gdGhlIGNhbGwgc2l0ZSwgaG93ZXZlciwg
d2Ugc2hvdWxkIGJlIGFibGUgdG8gZmlndXJlIG91dCB0aGUgc3RydWN0dXJlLiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNzAwCkBAIC0zODgzLDEyICszOTM3LDEy
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbigK
ICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyA9PSAyKSB7CiAgICAgICAgICAgICBzZXQocmVzdWx0LAotICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoTmV3QXJyYXlXaXRoU2l6ZSwgT3BJbmZvKEFycmF5V2l0aFVuZGVjaWRlZCks
IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKSk7Cisg
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChOZXdBcnJheVdpdGhTaXplLCBPcEluZm8oQXJyYXlX
aXRoVW5kZWNpZGVkKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhp
cygxLCByZWdpc3Rlck9mZnNldCkpKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpczsgKytpKQotICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGksIHJlZ2lzdGVyT2Zmc2V0KSkpOworICAgICAgICAgICAg
YWRkVmFyQXJnQ2hpbGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhp
cyhpLCByZWdpc3Rlck9mZnNldCkpKTsKICAgICAgICAgc2V0KHJlc3VsdCwKICAgICAgICAgICAg
IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBOZXdBcnJheSwgT3BJbmZvKEFycmF5V2l0aFVuZGVj
aWRlZCksIE9wSW5mbyhhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpKSk7CiAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtMzkwMiw3ICszOTU2LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKAogICAgICAgICBpZiAoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPD0gMSkKICAgICAgICAgICAgIHNldChyZXN1bHQsIGpzQ29uc3RhbnQo
anNOdW1iZXIoMCkpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0KHJlc3VsdCwgYWRk
VG9HcmFwaChUb051bWJlciwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiksIGdldCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKSk7CisgICAgICAgICAg
ICBzZXQocmVzdWx0LCBhZGRUb0dyYXBoKFRvTnVtYmVyLCBPcEluZm8oMCksIE9wSW5mbyhwcmVk
aWN0aW9uKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxLCBy
ZWdpc3Rlck9mZnNldCkpKSk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzkx
NSw3ICszOTY5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcm5h
bEZ1bmN0aW9uKAogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPD0gMSkK
ICAgICAgICAgICAgIHJlc3VsdE5vZGUgPSBqc0NvbnN0YW50KG1fdm0tPnNtYWxsU3RyaW5ncy5l
bXB0eVN0cmluZygpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0Tm9kZSA9IGFk
ZFRvR3JhcGgoQ2FsbFN0cmluZ0NvbnN0cnVjdG9yLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSk7CisgICAgICAgICAgICByZXN1bHROb2RlID0gYWRk
VG9HcmFwaChDYWxsU3RyaW5nQ29uc3RydWN0b3IsIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQpKSk7CiAgICAgICAgIAogICAgICAg
ICBpZiAoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KQogICAgICAgICAgICAgcmVzdWx0Tm9kZSA9
IGFkZFRvR3JhcGgoTmV3U3RyaW5nT2JqZWN0LCBPcEluZm8obV9ncmFwaC5yZWdpc3RlclN0cnVj
dHVyZShmdW5jdGlvbi0+Z2xvYmFsT2JqZWN0KCktPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpKSks
IHJlc3VsdE5vZGUpOwpAQCAtMzkzMiw3ICszOTg2LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKAogICAgICAgICBpZiAoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPD0gMSkKICAgICAgICAgICAgIHJlc3VsdE5vZGUgPSBhZGRUb0dyYXBo
KE5ld1N5bWJvbCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdE5vZGUgPSBhZGRU
b0dyYXBoKE5ld1N5bWJvbCwgYWRkVG9HcmFwaChUb1N0cmluZywgZ2V0KHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsKKyAgICAgICAgICAgIHJlc3VsdE5v
ZGUgPSBhZGRUb0dyYXBoKE5ld1N5bWJvbCwgYWRkVG9HcmFwaChUb1N0cmluZywgZ2V0KHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rlck9mZnNldCkpKSk7
CiAKICAgICAgICAgc2V0KHJlc3VsdCwgcmVzdWx0Tm9kZSk7CiAgICAgICAgIHJldHVybiB0cnVl
OwpAQCAtMzk0Niw3ICs0MDAwLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3Rh
bnRJbnRlcm5hbEZ1bmN0aW9uKAogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgPD0gMSkKICAgICAgICAgICAgIHJlc3VsdE5vZGUgPSBhZGRUb0dyYXBoKE5ld09iamVjdCwg
T3BJbmZvKG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoZnVuY3Rpb24tPmdsb2JhbE9iamVjdCgp
LT5vYmplY3RTdHJ1Y3R1cmVGb3JPYmplY3RDb25zdHJ1Y3RvcigpKSkpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICByZXN1bHROb2RlID0gYWRkVG9HcmFwaChDYWxsT2JqZWN0Q29uc3RydWN0
b3IsIE9wSW5mbyhtX2dyYXBoLmZyZWV6ZShmdW5jdGlvbi0+Z2xvYmFsT2JqZWN0KCkpKSwgT3BJ
bmZvKHByZWRpY3Rpb24pLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0
ZXJPZmZzZXQpKSk7CisgICAgICAgICAgICByZXN1bHROb2RlID0gYWRkVG9HcmFwaChDYWxsT2Jq
ZWN0Q29uc3RydWN0b3IsIE9wSW5mbyhtX2dyYXBoLmZyZWV6ZShmdW5jdGlvbi0+Z2xvYmFsT2Jq
ZWN0KCkpKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnRJbmNsdWRpbmdUaGlzKDEsIHJlZ2lzdGVyT2Zmc2V0KSkpOwogICAgICAgICBzZXQocmVzdWx0
LCByZXN1bHROb2RlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNDU0OCw3ICs0
NjAyLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICAvLyAgICB0
aGUgZHJlYWRlZCBhcmd1bWVudHMgb2JqZWN0IG9uIHRoZSBnZXR0ZXIsIHRoZSByaWdodCB0aGlu
Z3MgaGFwcGVuLiBXZWxsLCBzb3J0IG9mIC0KICAgICAvLyAgICBzaW5jZSB3ZSBvbmx5IHJlYWxs
eSBjYXJlIGFib3V0ICd0aGlzJyBpbiB0aGlzIGNhc2UuIEJ1dCB3ZSdyZSBub3QgZ29pbmcgdG8g
dGFrZSB0aGF0CiAgICAgLy8gICAgc2hvcnRjdXQuCi0gICAgc2V0KHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSwgYmFzZSwgSW1tZWRpYXRlTmFrZWRTZXQpOwor
ICAgIHNldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMCwgcmVnaXN0
ZXJPZmZzZXQpLCBiYXNlLCBJbW1lZGlhdGVOYWtlZFNldCk7CiAKICAgICAvLyBXZSd2ZSBzZXQg
c29tZSBsb2NhbHMsIGJ1dCB0aGV5IGFyZSBub3QgdXNlci12aXNpYmxlLiBJdCdzIHN0aWxsIE9L
IHRvIGV4aXQgZnJvbSBoZXJlLgogICAgIG1fZXhpdE9LID0gdHJ1ZTsKQEAgLTQ3MzEsOCArNDc4
NSw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgICAgICBt
X2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoCiAgICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkudG9Mb2NhbCgpKTsKICAgICAKLSAgICAgICAgc2V0KHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSwgYmFzZSwgSW1tZWRp
YXRlTmFrZWRTZXQpOwotICAgICAgICBzZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwg
cmVnaXN0ZXJPZmZzZXQpLCB2YWx1ZSwgSW1tZWRpYXRlTmFrZWRTZXQpOworICAgICAgICBzZXQo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDAsIHJlZ2lzdGVyT2Zmc2V0
KSwgYmFzZSwgSW1tZWRpYXRlTmFrZWRTZXQpOworICAgICAgICBzZXQodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDEsIHJlZ2lzdGVyT2Zmc2V0KSwgdmFsdWUsIEltbWVk
aWF0ZU5ha2VkU2V0KTsKIAogICAgICAgICAvLyBXZSd2ZSBzZXQgc29tZSBsb2NhbHMsIGJ1dCB0
aGV5IGFyZSBub3QgdXNlci12aXNpYmxlLiBJdCdzIHN0aWxsIE9LIHRvIGV4aXQgZnJvbSBoZXJl
LgogICAgICAgICBtX2V4aXRPSyA9IHRydWU7CkBAIC00ODQ5LDcgKzQ5MDMsNyBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICBtX2V4aXRP
SyA9IHRydWU7CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8
IG1fbnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKAotICAgICAgICAgICAgICAg
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSk7CisgICAgICAgICAgICAgICAg
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50KSk7CiAgICAg
ICAgICAgICB2YXJpYWJsZS0+bWVyZ2VTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKAogICAg
ICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUo
bV9jdXJyZW50SW5kZXgsIEJhZENhY2hlKSk7CiAgICAgICAgICAgICB2YXJpYWJsZS0+bWVyZ2VD
aGVja0FycmF5SG9pc3RpbmdGYWlsZWQoCkBAIC01MTU4LDcgKzUyMTIsNyBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICBjYXNlIG9wX25l
d19yZWdleHA6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlLm1fcmVn
ZXhwLmlzQ29uc3RhbnQoKSk7Ci0gICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuUmVnRXhw
ID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdl
dENvbnN0YW50KGJ5dGVjb2RlLm1fcmVnZXhwLm9mZnNldCgpKSk7CisgICAgICAgICAgICBGcm96
ZW5WYWx1ZSogZnJvemVuUmVnRXhwID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFj
a1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fcmVnZXhwKSk7CiAgICAg
ICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTmV3UmVnZXhwLCBPcEluZm8o
ZnJvemVuUmVnRXhwKSwganNDb25zdGFudChqc051bWJlcigwKSkpKTsKICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX25ld19yZWdleHApOwogICAgICAgICB9CkBAIC02MjM5LDcgKzYyOTMsNyBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogCiAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPnNpemUoKSB8fCAobV9ncmFw
aC5jb21waWxhdGlvbigpICYmIG1fY3VycmVudEJsb2NrLT5zaXplKCkgPT0gMSAmJiBtX2N1cnJl
bnRCbG9jay0+YXQoMCktPm9wKCkgPT0gQ291bnRFeGVjdXRpb24pKTsKIAotICAgICAgICAgICAg
VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gYnl0ZWNvZGUubWV0YWRhdGEo
Y29kZUJsb2NrKS5tX2J1ZmZlcjsKKyAgICAgICAgICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2J1
ZmZlcjsKIAogICAgICAgICAgICAgaWYgKCFidWZmZXIpIHsKICAgICAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9jYXRjaCk7IC8vIFRoaXMgY2F0Y2ggaGFzIHlldCB0byBleGVjdXRlLiBOb3Rl
OiB0aGlzIGxvYWQgY2FuIGJlIHJhY3kgd2l0aCB0aGUgbWFpbiB0aHJlYWQuCkBAIC02MjU2LDcg
KzYzMTAsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwogCi0gICAgICAg
ICAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJv
ZmlsZSkgeworICAgICAgICAgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmls
ZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZChwcm9maWxlLm1fb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJl
ZGljdGlvbihsb2NrZXIpOwogICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2Fs
KCkpCkBAIC02Mjg0LDE0ICs2MzM4LDE0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBtX2V4aXRPSyA9IGZhbHNlOyAKIAogICAg
ICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMgPSAwOwotICAgICAgICAgICAgYnVmZmVy
LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgICAg
ICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVy
JiBwcm9maWxlKSB7CiAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQocHJv
ZmlsZS5tX29wZXJhbmQpOwogICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQo
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIEFTU0VSVChv
cGVyYW5kLmlzTG9jYWwoKSk7CiAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBhZGRUb0dy
YXBoKEV4dHJhY3RDYXRjaExvY2FsLCBPcEluZm8obnVtYmVyT2ZMb2NhbHMpLCBPcEluZm8obG9j
YWxQcmVkaWN0aW9uc1tudW1iZXJPZkxvY2Fsc10pKTsKICAgICAgICAgICAgICAgICArK251bWJl
ck9mTG9jYWxzOwotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKHBy
b2ZpbGUubV9vcGVyYW5kKSwgdmFsdWUpOworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92
SGludCwgT3BJbmZvKG9wZXJhbmQpLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgbG9jYWxzVG9T
ZXQudW5jaGVja2VkQXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG9wZXJhbmQsIHZhbHVlKSk7CiAgICAg
ICAgICAgICB9KTsKICAgICAgICAgICAgIGlmIChudW1iZXJPZkxvY2FscykKQEAgLTYzMjIsNyAr
NjM3Niw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQp
CiAgICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBleGl0Qnl0ZWNvZGVJbmRleCA9IEJ5dGVj
b2RlSW5kZXgobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNp
emUoKSk7CiAKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJn
dW1lbnQgPCBhcmd1bWVudFByZWRpY3Rpb25zLnNpemUoKTsgKythcmd1bWVudCkgewotICAgICAg
ICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbmV3VmFyaWFibGVB
Y2Nlc3NEYXRhKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSk7CisgICAgICAg
ICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFj
Y2Vzc0RhdGEodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50
KSk7CiAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5wcmVkaWN0KGFyZ3VtZW50UHJlZGlj
dGlvbnNbYXJndW1lbnRdKTsKIAogICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bWVyZ2VT
dHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKApAQCAtNjQxOSw3ICs2NDczLDcgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIG9wX2puZXFfcHRyOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7Ci0gICAgICAgICAgICBGcm96ZW5W
YWx1ZSogZnJvemVuUG9pbnRlciA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tU
b3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLm9m
ZnNldCgpKSk7CisgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuUG9pbnRlciA9IG1fZ3Jh
cGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFu
dChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKSk7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxh
dGl2ZU9mZnNldCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgICAg
ICAgICBOb2RlKiBjaGlsZCA9IGdldChieXRlY29kZS5tX3ZhbHVlKTsKICAgICAgICAgICAgIGlm
IChieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1faGFzSnVtcGVkKSB7CkBAIC02ODg3LDgg
KzY5NDEsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0
KQogICAgICAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OiB7CiAgICAgICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUxleGlj
YWxFbnZpcm9ubWVudD4oKTsKICAgICAgICAgICAgIEFTU0VSVChieXRlY29kZS5tX3N5bWJvbFRh
YmxlLmlzQ29uc3RhbnQoKSAmJiBieXRlY29kZS5tX2luaXRpYWxWYWx1ZS5pc0NvbnN0YW50KCkp
OwotICAgICAgICAgICAgRnJvemVuVmFsdWUqIHN5bWJvbFRhYmxlID0gbV9ncmFwaC5mcmVlemVT
dHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2Rl
Lm1fc3ltYm9sVGFibGUub2Zmc2V0KCkpKTsKLSAgICAgICAgICAgIEZyb3plblZhbHVlKiBpbml0
aWFsVmFsdWUgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVC
bG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9pbml0aWFsVmFsdWUub2Zmc2V0KCkpKTsKKyAg
ICAgICAgICAgIEZyb3plblZhbHVlKiBzeW1ib2xUYWJsZSA9IG1fZ3JhcGguZnJlZXplU3Ryb25n
KG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX3N5
bWJvbFRhYmxlKSk7CisgICAgICAgICAgICBGcm96ZW5WYWx1ZSogaW5pdGlhbFZhbHVlID0gbV9n
cmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0
YW50KGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlKSk7CiAgICAgICAgICAgICBOb2RlKiBzY29wZSA9
IGdldChieXRlY29kZS5tX3Njb3BlKTsKICAgICAgICAgICAgIE5vZGUqIGxleGljYWxFbnZpcm9u
bWVudCA9IGFkZFRvR3JhcGgoQ3JlYXRlQWN0aXZhdGlvbiwgT3BJbmZvKHN5bWJvbFRhYmxlKSwg
T3BJbmZvKGluaXRpYWxWYWx1ZSksIHNjb3BlKTsKICAgICAgICAgICAgIHNldChieXRlY29kZS5t
X2RzdCwgbGV4aWNhbEVudmlyb25tZW50KTsKQEAgLTY5MTgsNyArNjk3Miw3IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAvLyBs
b2FkcyBmcm9tIHRoZSBzY29wZSByZWdpc3RlciBsYXRlciwgYXMgdGhhdCB3b3VsZCBwcmV2ZW50
IHRoZSBERkcgZnJvbSB0cmFja2luZyB0aGUKICAgICAgICAgICAgIC8vIGJ5dGVjb2RlLWxldmVs
IGxpdmVuZXNzIG9mIHRoZSBzY29wZSByZWdpc3Rlci4KICAgICAgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7Ci0gICAgICAgICAgICBO
b2RlKiBjYWxsZWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkp
OworICAgICAgICAgICAgTm9kZSogY2FsbGVlID0gZ2V0KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7
CiAgICAgICAgICAgICBOb2RlKiByZXN1bHQ7CiAgICAgICAgICAgICBpZiAoSlNGdW5jdGlvbiog
ZnVuY3Rpb24gPSBjYWxsZWUtPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNGdW5jdGlvbio+KCptX3Zt
KSkKICAgICAgICAgICAgICAgICByZXN1bHQgPSB3ZWFrSlNDb25zdGFudChmdW5jdGlvbi0+c2Nv
cGUoKSk7CkBAIC02OTk1LDcgKzcwNDksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAh
aW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgICAgIGludDMyX3Qg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNXaXRoRml4dXAgPSBpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50c1dpdGhGaXh1cC5zaXplKCk7CiAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50SW5k
ZXhJbmNsdWRpbmdUaGlzIDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNXaXRoRml4dXApCi0g
ICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KGFyZ3VtZW50SW5kZXhJbmNsdWRpbmdUaGlzKSk7CisgICAgICAgICAgICAgICAgICAgIGFy
Z3VtZW50ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhhcmd1
bWVudEluZGV4SW5jbHVkaW5nVGhpcykpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgYXJndW1lbnQgPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2Nv
bnN0YW50VW5kZWZpbmVkKSk7CiAgICAgICAgICAgICB9IGVsc2UKQEAgLTczNDMsOCArNzM5Nywx
MCBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSgK
ICAgICAgICAgLy8gVGhlIG93bmVyIGlzIHRoZSBtYWNoaW5lIGNvZGUgYmxvY2ssIGFuZCB3ZSBh
bHJlYWR5IGhhdmUgYSBiYXJyaWVyIG9uIHRoYXQgd2hlbiB0aGUKICAgICAgICAgLy8gcGxhbiBm
aW5pc2hlcy4KICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLnNl
dFdpdGhvdXRXcml0ZUJhcnJpZXIoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSk7CisgICAg
ICAgIG1faW5saW5lQ2FsbEZyYW1lLT5zZXRUbXBPZmZzZXQoKG1fY2FsbGVyLT5tX2lubGluZUNh
bGxGcmFtZSA/IG1fY2FsbGVyLT5tX2lubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0IDogMCkgKyBt
X2NhbGxlci0+bV9jb2RlQmxvY2stPm51bVRtcHMoKSk7CiAgICAgICAgIG1faW5saW5lQ2FsbEZy
YW1lLT5zZXRTdGFja09mZnNldChpbmxpbmVDYWxsRnJhbWVTdGFydC5vZmZzZXQoKSAtIENhbGxG
cmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKTsKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyA9PSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAgICAgIGlm
IChjYWxsZWUpIHsKICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVy
eSA9IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGNhbGxlZSk7CiAgICAgICAgICAgICBtX2lubGlu
ZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCA9IGZhbHNlOwpAQCAtNzcwNiw3ICs3NzYyLDcgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YShtX2dyYXBoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1hcHBpbmcub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG5vZGUtPm9w
ZXJhbmQoKSkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKIAogICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSAhPSBGb3JjZU9TUkV4aXQpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKQEAgLTc3MjYsMjQgKzc3ODIsMjQgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2UoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN1
Y2Nlc3Nvci0+cHJlZGVjZXNzb3JzLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgICAgICBhdXRvIGluc2VydExpdmVuZXNzUHJlc2VydmluZ09wID0g
WyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgTm9kZVR5cGUgb3AsIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5zZXJ0TGl2
ZW5lc3NQcmVzZXJ2aW5nT3AgPSBbJl0gKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
LCBOb2RlVHlwZSBvcCwgT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQp
OwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJsZSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9
IHZhcmlhYmxlOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnQgPSBvcGVyYW5kIC0gKGlubGluZUNhbGxG
cmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnQgPSB1bm1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1l
LCBvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudC5pc0FyZ3Vt
ZW50KCkgJiYgIWFyZ3VtZW50LmlzSGVhZGVyKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBWZWN0b3I8QXJndW1lbnRQb3NpdGlvbio+JiBhcmd1bWVudHMgPSBtX2lubGlu
ZUNhbGxGcmFtZVRvQXJndW1lbnRQb3NpdGlvbnMuZ2V0KGlubGluZUNhbGxGcmFtZSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzW2FyZ3VtZW50LnRvQXJndW1lbnQoKV0t
PmFkZFZhcmlhYmxlKHZhcmlhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3Bl
Y05vbmUsIG9wLCBvcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSkpOwogICAgICAgICAgICAgICAgICAg
ICB9OwotICAgICAgICAgICAgICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsK
KyAgICAgICAgICAgICAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgaW5zZXJ0TGl2ZW5lc3NQcmVzZXJ2aW5nT3AoaW5saW5lQ2FsbEZyYW1lLCBG
bHVzaCwgb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAg
ICAgIGF1dG8gYWRkUGhhbnRvbUxvY2FsRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgYXV0byBhZGRQaGFudG9tTG9jYWxEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGluc2VydExpdmVuZXNzUHJlc2VydmluZ09wKGlubGluZUNhbGxGcmFtZSwgUGhhbnRvbUxv
Y2FsLCBvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAg
ICAgZmx1c2hGb3JUZXJtaW5hbEltcGwob3JpZ2luLnNlbWFudGljLCBhZGRGbHVzaERpcmVjdCwg
YWRkUGhhbnRvbUxvY2FsRGlyZWN0KTsKQEAgLTc4MDgsNiArNzg2NCw3IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlKCkKICAgICAgICAgQVNTRVJUKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
bnVtYmVyT2ZBcmd1bWVudHMoKSA9PSBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQu
bnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgfQogCisgICAgbV9ncmFwaC5tX3RtcHMgPSBtX251
bVRtcHM7CiAgICAgbV9ncmFwaC5tX2xvY2FsVmFycyA9IG1fbnVtTG9jYWxzOwogICAgIG1fZ3Jh
cGgubV9wYXJhbWV0ZXJTbG90cyA9IG1fcGFyYW1ldGVyU2xvdHM7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCmluZGV4IGEyNDAxNDkyMTM4MzZiNjFlNzVjMmI4
ODc2NTM0NzNlMjBlZDViMTEuLjRiZGI3YmFkNGRjOTA4OTgwNDg4OGYzNmEwYWRhMmYyMjM4ODM2
NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCkBAIC0xNzAs
MjIgKzE3MCwyMiBAQCBwcml2YXRlOgogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAg
ICAgICAgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVz
ID0gbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcygpOwogICAgICAgICBmb3IgKHNpemVf
dCBpID0gbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIGludCBv
cGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAg
ICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsK
ICAgICAgICAgICAgIE9wdGlvbmFsPEpTVmFsdWU+IHZhbHVlID0gbXVzdEhhbmRsZVZhbHVlc1tp
XTsKICAgICAgICAgICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgICAgICAgICBpZiAobV92ZXJi
b3NlKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBOb3QgbGl2ZSBpbiBieXRlY29k
ZTogIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgTm90IGxpdmUgaW4gYnl0ZWNvZGU6ICIsIG9wZXJhbmQsICJcbiIpOwog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChvcGVyYW5kKTsKICAgICAg
ICAgICAgIGlmICghbm9kZSkgewogICAgICAgICAgICAgICAgIGlmIChtX3ZlcmJvc2UpCi0gICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIE5vdCBsaXZlOiAiLCBWaXJ0dWFsUmVnaXN0ZXIo
b3BlcmFuZCksICJcbiIpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBOb3QgbGl2
ZTogIiwgb3BlcmFuZCwgIlxuIik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChtX3ZlcmJvc2UpCi0gICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgV2lkZW5pbmcgIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQp
LCAiIHdpdGggIiwgdmFsdWUudmFsdWUoKSwgIlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgV2lkZW5pbmcgIiwgb3BlcmFuZCwgIiB3aXRoICIsIHZhbHVlLnZhbHVlKCksICJcbiIp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiB0YXJnZXQgPSBibG9j
ay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9
IHRhcmdldC5tZXJnZU9TUkVudHJ5VmFsdWUobV9ncmFwaCwgdmFsdWUudmFsdWUoKSwgbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCksIG5vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKaW5kZXggNzc4MzUyNzc1
OTVhY2E3YTUzMjY3MTg4Njc0NmNhM2VjYzI3MjFmYi4uZTdmNmU3NjI0NjY5YjMwMWY1YTAyMDQ4
YzI1ZDQ4MTVjM2ExMzM5ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCkBAIC0zMDMsNyArMzAzLDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGpldHRpc29uQmxvY2soQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxv
Y2sqIGpldHRpc29uZWRCbG9jaywgTm9kZU9yaWdpbiBib3VuZGFyeU5vZGVPcmlnaW4pCiAgICAg
ewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+dmFyaWFi
bGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkKLSAgICAgICAgICAgIGtlZXBPcGVy
YW5kQWxpdmUoYmxvY2ssIGpldHRpc29uZWRCbG9jaywgYm91bmRhcnlOb2RlT3JpZ2luLCB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSk7CisgICAgICAgICAgICBrZWVwT3BlcmFuZEFsaXZl
KGJsb2NrLCBqZXR0aXNvbmVkQmxvY2ssIGJvdW5kYXJ5Tm9kZU9yaWdpbiwgdmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBqZXR0aXNvbmVkQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2Fscygp
OyArK2kpCiAgICAgICAgICAgICBrZWVwT3BlcmFuZEFsaXZlKGJsb2NrLCBqZXR0aXNvbmVkQmxv
Y2ssIGJvdW5kYXJ5Tm9kZU9yaWdpbiwgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkpOwogICAg
ICAgICAKQEAgLTM1NCw3ICszNTQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gZGlmZmVy
ZW50IHBhdGggdGhhbiBzZWNvbmRCbG9jay4KICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBqZXR0aXNvbmVkQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpCi0gICAgICAgICAgICAgICAga2VlcE9wZXJhbmRBbGl2ZShm
aXJzdEJsb2NrLCBqZXR0aXNvbmVkQmxvY2ssIGJvdW5kYXJ5Tm9kZU9yaWdpbiwgdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoaSkpOworICAgICAgICAgICAgICAgIGtlZXBPcGVyYW5kQWxpdmUo
Zmlyc3RCbG9jaywgamV0dGlzb25lZEJsb2NrLCBib3VuZGFyeU5vZGVPcmlnaW4sIHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSk7CiAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9m
TG9jYWxzKCk7ICsraSkKICAgICAgICAgICAgICAgICBrZWVwT3BlcmFuZEFsaXZlKGZpcnN0Qmxv
Y2ssIGpldHRpc29uZWRCbG9jaywgYm91bmRhcnlOb2RlT3JpZ2luLCB2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChpKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCmluZGV4IGQ5OGZkNGFmNDQwZjA3Y2JjMTZi
NjdkNjAyYmE2NDI2YWYwZjIzODIuLjg3M2ZhMDQzMDU4YTBmZDE4ZTRkZjEyMzNkZTZmOTY3NmEy
YmRlMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJl
YWRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRo
cmVhZGluZ1BoYXNlLmNwcApAQCAtNTQsOCArNTQsOSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZ3Jh
cGguY2xlYXJSZXBsYWNlbWVudHMoKTsKICAgICAgICAgY2Fub25pY2FsaXplTG9jYWxzSW5CbG9j
a3MoKTsKICAgICAgICAgc3BlY2lhbENhc2VBcmd1bWVudHMoKTsKLSAgICAgICAgcHJvcGFnYXRl
UGhpczxMb2NhbE9wZXJhbmQ+KCk7Ci0gICAgICAgIHByb3BhZ2F0ZVBoaXM8QXJndW1lbnRPcGVy
YW5kPigpOworICAgICAgICBwcm9wYWdhdGVQaGlzPE9wZXJhbmRLaW5kOjpMb2NhbD4oKTsKKyAg
ICAgICAgcHJvcGFnYXRlUGhpczxPcGVyYW5kS2luZDo6QXJndW1lbnQ+KCk7CisgICAgICAgIHBy
b3BhZ2F0ZVBoaXM8T3BlcmFuZEtpbmQ6OlRtcD4oKTsKICAgICAgICAgY29tcHV0ZUlzRmx1c2hl
ZCgpOwogICAgICAgICAKICAgICAgICAgbV9ncmFwaC5tX2Zvcm0gPSBUaHJlYWRlZENQUzsKQEAg
LTIxMSwxMCArMjEyLDIwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjYW5vbmljYWxpemVHZXRMb2Nh
bChOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBpZiAodmFyaWFibGUtPmxv
Y2FsKCkuaXNBcmd1bWVudCgpKQotICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8
QXJndW1lbnRPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9Bcmd1
bWVudCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxG
b3I8TG9jYWxPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9Mb2Nh
bCgpKTsKKyAgICAgICAgc3dpdGNoICh2YXJpYWJsZS0+b3BlcmFuZCgpLmtpbmQoKSkgeworICAg
ICAgICBjYXNlIE9wZXJhbmRLaW5kOjpBcmd1bWVudDogeworICAgICAgICAgICAgY2Fub25pY2Fs
aXplR2V0TG9jYWxGb3I8T3BlcmFuZEtpbmQ6OkFyZ3VtZW50Pihub2RlLCB2YXJpYWJsZSwgdmFy
aWFibGUtPm9wZXJhbmQoKS50b0FyZ3VtZW50KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBPcGVyYW5kS2luZDo6TG9jYWw6IHsKKyAgICAgICAgICAgIGNh
bm9uaWNhbGl6ZUdldExvY2FsRm9yPE9wZXJhbmRLaW5kOjpMb2NhbD4obm9kZSwgdmFyaWFibGUs
IHZhcmlhYmxlLT5vcGVyYW5kKCkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgT3BlcmFuZEtpbmQ6OlRtcDogeworICAgICAgICAgICAgY2Fu
b25pY2FsaXplR2V0TG9jYWxGb3I8T3BlcmFuZEtpbmQ6OlRtcD4obm9kZSwgdmFyaWFibGUsIHZh
cmlhYmxlLT5vcGVyYW5kKCkudmFsdWUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPE5vZGVUeXBlIG5vZGVUeXBl
LCBPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KQEAgLTIyOSw2ICsyNDAsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgY2FzZSBGbHVzaDoKICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgog
ICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBBU1NFUlQob3RoZXJO
b2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgICAgIG90aGVyTm9kZSA9IG90aGVy
Tm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgZGVmYXVsdDoKQEAgLTI3MCwxNSArMjgyLDI1IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjYW5v
bmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7
Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkpCi0gICAgICAgICAg
ICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBBcmd1bWVudE9w
ZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKS50b0FyZ3VtZW50KCkpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2Fs
Rm9yPG5vZGVUeXBlLCBMb2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9j
YWwoKS50b0xvY2FsKCkpOworICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT5vcGVyYW5kKCkua2lu
ZCgpKSB7CisgICAgICAgIGNhc2UgT3BlcmFuZEtpbmQ6OkFyZ3VtZW50OiB7CisgICAgICAgICAg
ICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBPcGVyYW5kS2lu
ZDo6QXJndW1lbnQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgpLnRvQXJndW1l
bnQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE9wZXJh
bmRLaW5kOjpMb2NhbDogeworICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21M
b2NhbEZvcjxub2RlVHlwZSwgT3BlcmFuZEtpbmQ6OkxvY2FsPihub2RlLCB2YXJpYWJsZSwgdmFy
aWFibGUtPm9wZXJhbmQoKS50b0xvY2FsKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBPcGVyYW5kS2luZDo6VG1wOiB7CisgICAgICAgICAgICBjYW5vbmlj
YWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBPcGVyYW5kS2luZDo6VG1wPihu
b2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS52YWx1ZSgpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBjYW5v
bmljYWxpemVTZXQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIG1fYmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5zZXRPcGVyYW5kKG5vZGUtPmxvY2FsKCksIG5vZGUpOworICAgICAgICBtX2Jsb2Nr
LT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZChub2RlLT5vcGVyYW5kKCksIG5vZGUpOwogICAg
IH0KICAgICAKICAgICB2b2lkIGNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2soKQpAQCAtMjg3LDgg
KzMwOSw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIEFTU0VSVCht
X2Jsb2NrLT5pc1JlYWNoYWJsZSk7CiAgICAgICAgIAotICAgICAgICBjbGVhclZhcmlhYmxlczxB
cmd1bWVudE9wZXJhbmQ+KCk7Ci0gICAgICAgIGNsZWFyVmFyaWFibGVzPExvY2FsT3BlcmFuZD4o
KTsKKyAgICAgICAgY2xlYXJWYXJpYWJsZXM8T3BlcmFuZEtpbmQ6OkFyZ3VtZW50PigpOworICAg
ICAgICBjbGVhclZhcmlhYmxlczxPcGVyYW5kS2luZDo6TG9jYWw+KCk7CisgICAgICAgIGNsZWFy
VmFyaWFibGVzPE9wZXJhbmRLaW5kOjpUbXA+KCk7CiAgICAgICAgIAogICAgICAgICAvLyBBc3N1
bWVzIHRoYXQgYWxsIHBoaSByZWZlcmVuY2VzIGhhdmUgYmVlbiByZW1vdmVkLiBBc3N1bWVzIHRo
YXQgdGhpbmdzIHRoYXQKICAgICAgICAgLy8gc2hvdWxkIGJlIGxpdmUgaGF2ZSBhIG5vbi16ZXJv
IHJlZiBjb3VudCwgYnV0IGRvZXNuJ3QgYXNzdW1lIHRoYXQgdGhlIHJlZgpAQCAtMzg4LDcgKzQx
MSw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CiAg
ICAgdm9pZCBwcm9wYWdhdGVQaGlzKCkKICAgICB7Ci0gICAgICAgIFZlY3RvcjxQaGlTdGFja0Vu
dHJ5LCAxMjg+JiBwaGlTdGFjayA9IG9wZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCA/IG1f
YXJndW1lbnRQaGlTdGFjayA6IG1fbG9jYWxQaGlTdGFjazsKKyAgICAgICAgVmVjdG9yPFBoaVN0
YWNrRW50cnksIDEyOD4mIHBoaVN0YWNrID0gcGhpU3RhY2tGb3I8b3BlcmFuZEtpbmQ+KCk7CiAg
ICAgICAgIAogICAgICAgICAvLyBFbnN1cmUgdGhhdCBhdHRlbXB0cyB0byB1c2UgdGhpcyBmYWls
IGluc3RhbnRseS4KICAgICAgICAgbV9ibG9jayA9IDA7CkBAIC00NjYsOSArNDg5LDEyIEBAIHBy
aXZhdGU6CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CiAgICAgVmVjdG9y
PFBoaVN0YWNrRW50cnksIDEyOD4mIHBoaVN0YWNrRm9yKCkKICAgICB7Ci0gICAgICAgIGlmIChv
cGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCi0gICAgICAgICAgICByZXR1cm4gbV9hcmd1
bWVudFBoaVN0YWNrOwotICAgICAgICByZXR1cm4gbV9sb2NhbFBoaVN0YWNrOworICAgICAgICBz
d2l0Y2ggKG9wZXJhbmRLaW5kKSB7CisgICAgICAgIGNhc2UgT3BlcmFuZEtpbmQ6OkFyZ3VtZW50
OiByZXR1cm4gbV9hcmd1bWVudFBoaVN0YWNrOworICAgICAgICBjYXNlIE9wZXJhbmRLaW5kOjpM
b2NhbDogcmV0dXJuIG1fbG9jYWxQaGlTdGFjazsKKyAgICAgICAgY2FzZSBPcGVyYW5kS2luZDo6
VG1wOiByZXR1cm4gbV90bXBQaGlTdGFjazsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXB1dGVJc0ZsdXNo
ZWQoKQpAQCAtNTIxLDYgKzU0Nyw3IEBAIHByaXZhdGU6CiAgICAgQmFzaWNCbG9jayogbV9ibG9j
azsKICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiBtX2FyZ3VtZW50UGhpU3RhY2s7CiAg
ICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4gbV9sb2NhbFBoaVN0YWNrOworICAgIFZlY3Rv
cjxQaGlTdGFja0VudHJ5LCAxMjg+IG1fdG1wUGhpU3RhY2s7CiAgICAgVmVjdG9yPE5vZGUqLCAx
Mjg+IG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDU0VQaGFzZS5jcHAKaW5kZXggMjM4MWM2YjhmOGY0YmE3NjM0YmI2NmIxMjM5NDcx
YjVhNjE2NjdjZS4uNGNjZTE3NDg4M2UyMDQxMGQ2MjIzYTZmNDE3MmVkZGU2OThhYWViZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKQEAgLTE0Nyw4ICsxNDcs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTdGFjazogewog
ICAgICAgICAgICAgQVNTRVJUKCFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKTsKLSAgICAgICAgICAg
IEFTU0VSVChoZWFwLnBheWxvYWQoKS52YWx1ZSgpID09IGhlYXAucGF5bG9hZCgpLnZhbHVlMzIo
KSk7Ci0gICAgICAgICAgICBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLnJlbW92ZShoZWFwLnBheWxv
YWQoKS52YWx1ZTMyKCkpOworICAgICAgICAgICAgbV9hYnN0cmFjdEhlYXBTdGFja01hcC5yZW1v
dmUoaGVhcC5wYXlsb2FkKCkudmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAoY2xvYmJlckNvbnNl
cnZhdGl2ZWx5KQogICAgICAgICAgICAgICAgIG1fZmFsbGJhY2tTdGFja01hcC5jbGVhcigpOwog
ICAgICAgICAgICAgZWxzZQpAQCAtMTcyLDcgKzE3MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICBpZiAoIWNsb2JiZXJDb25zZXJ2YXRpdmVseSkKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgaWYgKHBhaXIua2V5LmhlYXAoKS5raW5kKCkgPT0gU3RhY2sp
IHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fYWJzdHJhY3RIZWFwU3Rh
Y2tNYXAuZmluZChwYWlyLmtleS5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmZpbmQo
cGFpci5rZXkuaGVhcCgpLnBheWxvYWQoKS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKGl0ZXJhdG9yICE9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZW5kKCkgJiYgaXRlcmF0b3It
PnZhbHVlLT5rZXkgPT0gcGFpci5rZXkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjI2LDggKzIyNSw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBBYnN0cmFjdEhlYXAgYWJzdHJhY3RIZWFwID0gbG9j
YXRpb24uaGVhcCgpOwogICAgICAgICAgICAgaWYgKGFic3RyYWN0SGVhcC5wYXlsb2FkKCkuaXNU
b3AoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gYWRkKG1fZmFsbGJhY2tTdGFja01hcCwgbG9j
YXRpb24sIG5vZGUpOwotICAgICAgICAgICAgQVNTRVJUKGFic3RyYWN0SGVhcC5wYXlsb2FkKCku
dmFsdWUoKSA9PSBhYnN0cmFjdEhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7Ci0gICAgICAgICAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuYWRkKGFic3RyYWN0SGVh
cC5wYXlsb2FkKCkudmFsdWUzMigpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGF1dG8gYWRkUmVz
dWx0ID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5hZGQoYWJzdHJhY3RIZWFwLnBheWxvYWQoKS52
YWx1ZSgpLCBudWxscHRyKTsKICAgICAgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkg
ewogICAgICAgICAgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUucmVzZXQobmV3IElt
cHVyZURhdGFTbG90IHtsb2NhdGlvbiwgbm9kZSwgMH0pOwogICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwpAQCAtMjQ5LDggKzI0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgU2lk
ZVN0YXRlOgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgY2FzZSBTdGFjazogewotICAgICAgICAgICAgQVNTRVJUKGxvY2F0aW9uLmhlYXAoKS5wYXls
b2FkKCkudmFsdWUoKSA9PSBsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIoKSk7Ci0g
ICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5maW5kKGxv
Y2F0aW9uLmhlYXAoKS5wYXlsb2FkKCkudmFsdWUzMigpKTsKKyAgICAgICAgICAgIGF1dG8gaXRl
cmF0b3IgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmZpbmQobG9jYXRpb24uaGVhcCgpLnBheWxv
YWQoKS52YWx1ZSgpKTsKICAgICAgICAgICAgIGlmIChpdGVyYXRvciAhPSBtX2Fic3RyYWN0SGVh
cFN0YWNrTWFwLmVuZCgpCiAgICAgICAgICAgICAgICAgJiYgaXRlcmF0b3ItPnZhbHVlLT5rZXkg
PT0gbG9jYXRpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS0+dmFs
dWU7CkBAIC0yOTgsNyArMjk1LDcgQEAgcHJpdmF0ZToKICAgICAvLyBhIGR1cGxpY2F0ZSBpbiB0
aGUgcGFzdCBhbmQgbm93IG9ubHkgbGl2ZSBpbiBtX2ZhbGxiYWNrU3RhY2tNYXAuCiAgICAgLy8K
ICAgICAvLyBPYnZpb3VzbHksIFRPUCBhbHdheXMgZ29lcyBpbnRvIG1fZmFsbGJhY2tTdGFja01h
cCBzaW5jZSBpdCBkb2VzIG5vdCBoYXZlIGEgdW5pcXVlIHZhbHVlLgotICAgIEhhc2hNYXA8aW50
MzJfdCwgc3RkOjp1bmlxdWVfcHRyPEltcHVyZURhdGFTbG90PiwgRGVmYXVsdEhhc2g8aW50MzJf
dD46Okhhc2gsIFdURjo6U2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPGludDMyX3Q+PiBtX2Fi
c3RyYWN0SGVhcFN0YWNrTWFwOworICAgIEhhc2hNYXA8aW50NjRfdCwgc3RkOjp1bmlxdWVfcHRy
PEltcHVyZURhdGFTbG90PiwgRGVmYXVsdEhhc2g8aW50NjRfdD46Okhhc2gsIFdURjo6U2lnbmVk
V2l0aFplcm9LZXlIYXNoVHJhaXRzPGludDY0X3Q+PiBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwOwog
ICAgIE1hcCBtX2ZhbGxiYWNrU3RhY2tNYXA7CiAKICAgICBNYXAgbV9oZWFwTWFwOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCmluZGV4IGIxODIzMTdi
OWZmODQxNmE1OTc0MTYxZTNkYzJiOGE1NzNmNWFlOGQuLmNlNWY2YWFhNjg4MjczZDliZTcwZWQ0
OGFiMTlmNTYyNjFjZGZhYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2FwYWJpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nh
cGFiaWxpdGllcy5jcHAKQEAgLTMwOCw2ICszMDgsOCBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJp
bGl0eUxldmVsKE9wY29kZUlEIG9wY29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3Qg
SQogICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5lOgogICAgIGNhc2Ug
bGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lOgogICAgIGNhc2UgbGxpbnRf
aW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3Bv
aW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVj
a3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmU6CiAgICAgY2FzZSBoYW5kbGVVbmNhdWdodEV4Y2Vw
dGlvbjoKICAgICBjYXNlIG9wX2NhbGxfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfY29u
c3RydWN0X3JldHVybl9sb2NhdGlvbjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9i
YmVyaXplLmgKaW5kZXggYmZiMWQxNDYxNTVjNGM3ZTJiYTk4ZTkxYjNiOWIzYjI4NGZiYzAzNC4u
ZWVlOWJhZWNkMjg5ZDhmMjg3MzcyNDUxMDcwYzRmYjJhMjhlODNkYyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKQEAgLTExMSw5ICsxMTEsOSBAQCB2b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVh
ZCwgY29uc3QgV3JpdGVGdQogICAgIC8vIHNjYW4gd291bGQgcmVhZC4gVGhhdCdzIHdoYXQgdGhp
cyBkb2VzLgogICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBub2Rl
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7IGlubGluZUNhbGxGcmFtZTsgaW5s
aW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIuaW5saW5lQ2FsbEZy
YW1lKCkpIHsKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAg
ICAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgICAgICByZWFkKEFic3Ry
YWN0SGVhcChTdGFjaywgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJh
bWUtPmlzVmFyYXJncygpKQotICAgICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcykpOworICAgICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIFZp
cnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7CiAgICAgfQogCiAgICAgLy8gV2UgZG9u
J3Qgd2FudCB0byBzcGVjaWZpY2FsbHkgYWNjb3VudCB3aGljaCBub2RlcyBjYW4gcmVhZCBmcm9t
IHRoZSBzY29wZQpAQCAtNDQxLDcgKzQ0MSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAg
ICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgS2lsbFN0YWNrOgotICAgICAgICB3cml0ZShBYnN0
cmFjdEhlYXAoU3RhY2ssIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpOworICAgICAgICB3cml0ZShB
YnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICAgICAgIAogICAgIGNhc2UgTW92SGludDoKQEAgLTQ5Nyw3ICs0OTcsNyBAQCB2
b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3Rv
ciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIEZsdXNo
OgotICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpOworICAg
ICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+b3BlcmFuZCgpKSk7CiAgICAgICAg
IHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJldHVybjsKIApAQCAtNzM5LDcgKzczOSw3IEBA
IHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5j
dG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgY2FzZSBDYWxsRXZhbDoKICAgICAgICAgQVNT
RVJUKCFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCkpOwogICAgICAgICBy
ZWFkKEFic3RyYWN0SGVhcChTdGFjaywgZ3JhcGgubV9jb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIo
KSkpOwotICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgdmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoMCkpKTsKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygwKSkpOwogICAgICAgICByZWFkKFdvcmxk
KTsKICAgICAgICAgd3JpdGUoSGVhcCk7CiAgICAgICAgIHJldHVybjsKQEAgLTc2NSwxMiArNzY1
LDEyIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJl
YWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJldHVybjsKICAgICAgICAg
CiAgICAgY2FzZSBHZXRDYWxsZWU6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBD
YWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xv
YywgQWJzdHJhY3RIZWFwKFN0YWNrLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSwgTGF6eU5vZGUo
bm9kZSkpOworICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgVmlydHVhbFJlZ2lzdGVy
KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFj
a0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2Ug
U2V0Q2FsbGVlOgotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSkpOworICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCiAgICAgY2FzZSBHZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczogewpAQCAtNzgxLDcg
Kzc4MSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0
IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgfQogCiAgICAgY2FzZSBTZXRB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpczoKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0
YWNrLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworICAgICAg
ICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Y2FzZSBHZXRSZXN0TGVuZ3RoOgpAQCAtNzg5LDM2ICs3ODksNDIgQEAgdm9pZCBjbG9iYmVyaXpl
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0
IFdyaXRlRnUKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldExvY2FsOgot
ICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpOwotICAgICAg
ICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxv
Y2FsKCkpKSwgTGF6eU5vZGUobm9kZSkpOworICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFj
aywgbm9kZS0+b3BlcmFuZCgpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2Ms
IEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+b3BlcmFuZCgpKSksIExhenlOb2RlKG5vZGUpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFNldExvY2FsOgotICAgICAgICB3
cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKTsKLSAgICAgICAgZGVmKEhl
YXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSks
IExhenlOb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOworICAgICAgICB3cml0ZShBYnN0cmFj
dEhlYXAoU3RhY2ssIG5vZGUtPm9wZXJhbmQoKSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9u
KFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPm9wZXJhbmQoKSkpLCBMYXp5Tm9k
ZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAg
ICBjYXNlIEdldFN0YWNrOiB7Ci0gICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2Rl
LT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpOworICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChT
dGFjaywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpOwogICAgICAgICByZWFkKGhl
YXApOwogICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBoZWFwKSwgTGF6eU5vZGUo
bm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFB1dFN0
YWNrOiB7Ci0gICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vz
c0RhdGEoKS0+bG9jYWwpOworICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChTdGFjaywgbm9kZS0+
c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpOwogICAgICAgICB3cml0ZShoZWFwKTsKICAgICAg
ICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgaGVhcCksIExhenlOb2RlKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKKyAgICBjYXNl
IFZhcmFyZ3NMZW5ndGg6IHsKKyAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgIHdyaXRlKEhl
YXApOworICAgICAgICByZXR1cm47ICAKKyAgICB9CisKICAgICBjYXNlIExvYWRWYXJhcmdzOiB7
CiAgICAgICAgIHJlYWQoV29ybGQpOwogICAgICAgICB3cml0ZShIZWFwKTsKICAgICAgICAgTG9h
ZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgIHdy
aXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+Y291bnQub2Zmc2V0KCkpKTsKKyAgICAgICAg
d3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5jb3VudCkpOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykKLSAgICAgICAgICAgIHdyaXRlKEFic3RyYWN0
SGVhcChTdGFjaywgZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBzdGF0aWNfY2FzdDxpbnQ+KGkpKSk7
CisgICAgICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0ICsgc3Rh
dGljX2Nhc3Q8aW50PihpKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAg
LTgyNyw5ICs4MzMsOSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
LCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZWFkKFN0
YWNrKTsKICAgICAgICAgCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxv
YWRWYXJhcmdzRGF0YSgpOwotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEt
PmNvdW50Lm9mZnNldCgpKSk7CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0
YS0+Y291bnQpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTsp
Ci0gICAgICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0Lm9mZnNl
dCgpICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOworICAgICAgICAgICAgd3JpdGUoQWJzdHJhY3RI
ZWFwKFN0YWNrLCBkYXRhLT5zdGFydCArIHN0YXRpY19jYXN0PGludD4oaSkpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb21iaW5lZExpdmVuZXNzLmNwcAppbmRleCA5NTg2NmE3ZjkxYTcxNDQyZGExYzRmN2U0
NzAwZDA5Y2QyYWMzMGYzLi4xNTc0NmMwNTRmMGRmMzNiYTMyZDM5ZmFmZTAyZGJiZDdkMjkxNGNi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5l
c3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVz
cy5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgc3RhdGljIHZvaWQgYWRkQnl0ZWNvZGVMaXZlbmVzcyhH
cmFwaCYgZ3JhcGgsIEF2YWlsYWJpbGl0eU1hcCYgYXZhaWxhYmlsaXR5TWFwLAogewogICAgIGdy
YXBoLmZvckFsbExpdmVJbkJ5dGVjb2RlKAogICAgICAgICBub2RlLT5vcmlnaW4uZm9yRXhpdCwK
LSAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAgIFsmXSAoT3BlcmFu
ZCByZWcpIHsKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcC5jbG9zZVN0YXJ0aW5nV2l0aExv
Y2FsKAogICAgICAgICAgICAgICAgIHJlZywKICAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIG5v
ZGUpIC0+IGJvb2wgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb25EYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5j
cHAKaW5kZXggYjRmYzhkNDllNjA3MmVjMWFiZGQzZmY2YmQyNTMwMDIyNTkxODI2Mi4uMDcxMmNj
YjNiZTk5MjhlZWE4NjIzZTRkNzI4ZDhiNDcyN2YxNzI4MSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCkBAIC01Niw3ICs1Niw3IEBAIENhbGxTaXRlSW5k
ZXggQ29tbW9uRGF0YTo6YWRkQ29kZU9yaWdpbihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAg
ICAgIGNvZGVPcmlnaW5zLmFwcGVuZChjb2RlT3JpZ2luKTsKICAgICB1bnNpZ25lZCBpbmRleCA9
IGNvZGVPcmlnaW5zLnNpemUoKSAtIDE7CiAgICAgQVNTRVJUKGNvZGVPcmlnaW5zW2luZGV4XSA9
PSBjb2RlT3JpZ2luKTsKLSAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGlu
ZGV4KSk7CisgICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoaW5kZXgpOwogfQogCiBDYWxsU2l0ZUlu
ZGV4IENvbW1vbkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgoQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luKQpAQCAtNjQsMTMgKzY0LDEzIEBAIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6YWRkVW5p
cXVlQ2FsbFNpdGVJbmRleChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgY29kZU9yaWdpbnMu
YXBwZW5kKGNvZGVPcmlnaW4pOwogICAgIHVuc2lnbmVkIGluZGV4ID0gY29kZU9yaWdpbnMuc2l6
ZSgpIC0gMTsKICAgICBBU1NFUlQoY29kZU9yaWdpbnNbaW5kZXhdID09IGNvZGVPcmlnaW4pOwot
ICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoaW5kZXgpKTsKKyAgICByZXR1
cm4gQ2FsbFNpdGVJbmRleChpbmRleCk7CiB9CiAKIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6
bGFzdENhbGxTaXRlKCkgY29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVChjb2RlT3JpZ2lucy5z
aXplKCkpOwotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoY29kZU9yaWdp
bnMuc2l6ZSgpIC0gMSkpOworICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW5zLnNp
emUoKSAtIDEpOwogfQogCiBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjphZGRE
aXNwb3NhYmxlQ2FsbFNpdGVJbmRleChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCmlu
ZGV4IGQzN2QyOThiYTg5YzZjMzFkZWZlNjM3MTkxNjljNzI5MDYwNjkzOTkuLmNlYmIzYzhlOWNi
OGFkZmQ4OWE2Y2Q2YzJjNTM0YjAwMTgyYjNlMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCkBAIC0zODMsNyArMzgz
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBHZXRNeUFyZ3VtZW50QnlWYWwgaW4g
c3VjaCBzdGF0aWNhbGx5LW91dC1vZi1ib3VuZHMgYWNjZXNzZXM7IHdlIGp1c3QgbG9zZSBDRkEg
dW5sZXNzCiAgICAgICAgICAgICAgICAgLy8gR0NTRSByZW1vdmVzIHRoZSBhY2Nlc3MgZW50aXJl
bHkuCiAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoaW5kZXggPj0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyAtIDEpCisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAt
IDEpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IG1fc3RhdGUubnVtYmVyT2ZB
cmd1bWVudHMoKSAtIDEpCkBAIC00MDEsMTAgKzQwMSwxMCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICAgICAgRmx1c2hlZEpTVmFsdWUpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFk
ZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGlu
ZGV4ICsgMSksIEZsdXNoZWRKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpbmRleCArIDEpLCBGbHVzaGVkSlNW
YWx1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkg
JiYgaW5kZXggPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0g
MSkgeworICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxG
cmFtZS0+aXNWYXJhcmdzKCkgJiYgaW5kZXggPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldFN0YWNrKGRhdGEpOwogICAgICAgICAgICAgICAg
ICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKaW5kZXggYTU4Mzk5MzQyYWFhOWViNWE5
NTkwZDQ4NjU5ZDQ5MjQ3NTY4YmZlZi4uMWYzMGRmZjYxNzljMGMzM2VlZjUxOTMyMjI3Yzc1OTY2
NzVhYmZhZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0Mu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcApAQCAtMjk3
LDYgKzI5Nyw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBj
YXNlIEluQnlWYWw6CiAgICAgY2FzZSBJbnN0YW5jZU9mOgogICAgIGNhc2UgSW5zdGFuY2VPZkN1
c3RvbToKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAg
ICBjYXNlIE51bWJlclRvU3RyaW5nV2l0aFJhZGl4OgogICAgIGNhc2UgTnVtYmVyVG9TdHJpbmdX
aXRoVmFsaWRSYWRpeENvbnN0YW50OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEcml2ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIu
Y3BwCmluZGV4IDE3YjM3MDc1OGMwNTM4NzAzYjdkNzllZTYyMjcyZDQ3OTk5OGI1MzkuLjQ1ZmJj
NDM5ZDUzYmE5NTBlN2E4ZDg5YWM5ZWMxOTcyYmEwOTM5YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RyaXZlci5jcHAKQEAgLTkwLDcgKzkwLDYgQEAgc3RhdGljIENvbXBpbGF0aW9u
UmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFueSBzdHVicyB0aGF0
IHRoZSBERkcgaXMgZ29pbmcgdG8gdXNlIGFyZSBpbml0aWFsaXplZC4gV2Ugd2FudCB0bwogICAg
IC8vIG1ha2Ugc3VyZSB0aGF0IGFsbCBKSVQgY29kZSBnZW5lcmF0aW9uIGRvZXMgZmluYWxpemF0
aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KICAgICB2bS5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5l
cmF0b3IpOwotICAgIHZtLmdldENUSVN0dWIob3NyRXhpdFRodW5rR2VuZXJhdG9yKTsKICAgICB2
bS5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOwogICAgIHZtLmdl
dENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKTsKICAgICB2
bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKaW5kZXggMzc0ZDUyNjA5YzNlYzY2NmI1Y2M2MzA3
NjcwMTRlZGI0NTBmNGZkOC4uOTIyZDM1YmJmYWYwYmIxZGQ5MGIwOTAzYTVmMmNkZTQ5YWI4NmJi
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCkBAIC0y
NDM5LDYgKzI0MzksMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAKKyAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBMb2FkVmFyYXJn
czogeworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAg
ICAgICAgLy8gSGF2ZSB0aGVzZSBuby1vcCBjYXNlcyBoZXJlIHRvIGVuc3VyZSB0aGF0IG5vYm9k
eSBmb3JnZXRzIHRvIGFkZCBoYW5kbGVycyBmb3IgbmV3IG9wY29kZXMuCiAgICAgICAgIGNhc2Ug
U2V0QXJndW1lbnREZWZpbml0ZWx5OgpAQCAtMjQ3MSw4ICsyNDc3LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBUYWlsQ2Fs
bEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxp
bmVkQ2FsbGVyOgotICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgotICAgICAgICBjYXNlIEZvcndh
cmRWYXJhcmdzOgorICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgICAgIGNhc2UgUHJv
ZmlsZUNvbnRyb2xGbG93OgogICAgICAgICBjYXNlIE5ld09iamVjdDoKICAgICAgICAgY2FzZSBO
ZXdQcm9taXNlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JB
bGxLaWxscy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCmlu
ZGV4IDBiZjFjM2ZiYmFjNGE2NjI5OGNmOTI5ZmVmNTBhNjBkY2ZkZTI4YjkuLmJmNDM1MGM0Y2Qx
N2UzZDUwMDY2MzhmNTVhYWMzNWE1NjUyOTk0YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZvckFsbEtpbGxzLmgKQEAgLTMyLDYgKzMyLDEwIEBACiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAorbmFtZXNwYWNlIEZvckFsbEtpbGxzSW50ZXJuYWwgeworY29u
c3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworfQorCiAvLyBVdGlsaXRpZXMgZm9yIGZpbmRp
bmcgdGhlIGxhc3QgcG9pbnRzIHdoZXJlIGEgbm9kZSBpcyBsaXZlIGluIERGRyBTU0EuIFRoaXMg
YWNjb3VudHMgZm9yIGxpdmVuZXNzIGR1ZQogLy8gdG8gT1NSIGV4aXQuIFRoaXMgaXMgdXN1YWxs
eSB1c2VkIGZvciBlbnVtZXJhdGluZyBvdmVyIGFsbCBvZiB0aGUgcHJvZ3JhbSBwb2ludHMgd2hl
cmUgYSBub2RlIGlzIGxpdmUsCiAvLyBieSBleHBsb3JpbmcgYWxsIGJsb2NrcyB3aGVyZSB0aGUg
bm9kZSBpcyBsaXZlIGF0IHRhaWwgYW5kIHRoZW4gZXhwbG9yaW5nIGFsbCBwcm9ncmFtIHBvaW50
cyB3aGVyZSB0aGUKQEAgLTUzLDEzICs1NywxMyBAQCB2b2lkIGZvckFsbEtpbGxlZE9wZXJhbmRz
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZUJlZm9yZSwgTm9kZSogbm9kZUFmdGVyLCBjb25zdAog
ICAgIAogICAgIENvZGVPcmlnaW4gYWZ0ZXIgPSBub2RlQWZ0ZXItPm9yaWdpbi5mb3JFeGl0Owog
ICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciBhbHJlYWR5Tm90ZWQ7CisgICAgT3BlcmFuZCBhbHJl
YWR5Tm90ZWQ7CiAgICAgLy8gSWYgd2UgTW92SGludCBzb21ldGhpbmcgdGhhdCBpcyBsaXZlIGF0
IHRoZSB0aW1lLCB0aGVuIHdlIGtpbGwgdGhlIG9sZCB2YWx1ZS4KICAgICBpZiAobm9kZUFmdGVy
LT5jb250YWluc01vdkhpbnQoKSkgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gbm9k
ZUFmdGVyLT51bmxpbmtlZExvY2FsKCk7Ci0gICAgICAgIGlmIChncmFwaC5pc0xpdmVJbkJ5dGVj
b2RlKHJlZywgYWZ0ZXIpKSB7Ci0gICAgICAgICAgICBmdW5jdG9yKHJlZyk7Ci0gICAgICAgICAg
ICBhbHJlYWR5Tm90ZWQgPSByZWc7CisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5vZGVBZnRl
ci0+dW5saW5rZWRPcGVyYW5kKCk7CisgICAgICAgIGlmIChncmFwaC5pc0xpdmVJbkJ5dGVjb2Rl
KG9wZXJhbmQsIGFmdGVyKSkgeworICAgICAgICAgICAgZnVuY3RvcihvcGVyYW5kKTsKKyAgICAg
ICAgICAgIGFscmVhZHlOb3RlZCA9IG9wZXJhbmQ7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBA
IC03MCwyOSArNzQsNDggQEAgdm9pZCBmb3JBbGxLaWxsZWRPcGVyYW5kcyhHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGVCZWZvcmUsIE5vZGUqIG5vZGVBZnRlciwgY29uc3QKICAgICAvLyBvdGhlciBs
b29wLCBiZWxvdy4KICAgICBhdXRvKiBiZWZvcmVJbmxpbmVDYWxsRnJhbWUgPSBiZWZvcmUuaW5s
aW5lQ2FsbEZyYW1lKCk7CiAgICAgaWYgKGJlZm9yZUlubGluZUNhbGxGcmFtZSA9PSBhZnRlci5p
bmxpbmVDYWxsRnJhbWUoKSkgewotICAgICAgICBpbnQgc3RhY2tPZmZzZXQgPSBiZWZvcmVJbmxp
bmVDYWxsRnJhbWUgPyBiZWZvcmVJbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMDsKICAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihi
ZWZvcmVJbmxpbmVDYWxsRnJhbWUpOworICAgICAgICBpZiAoYWZ0ZXIuYnl0ZWNvZGVJbmRleCgp
LmNoZWNrcG9pbnQoKSkgeworICAgICAgICAgICAgQVNTRVJUKGJlZm9yZS5ieXRlY29kZUluZGV4
KCkuY2hlY2twb2ludCgpICE9IGFmdGVyLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkpOwor
ICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShiZWZvcmUuYnl0ZWNvZGVJbmRleCgpLm9m
ZnNldCgpID09IGFmdGVyLmJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKSwgIldoZW4gdGhlIERGRyBk
b2VzIGNvZGUgbW90aW9uIGl0IHNob3VsZCBjaGFuZ2UgdGhlIGZvckV4aXQgb3JpZ2luIHRvIG1h
dGNoIHRoZSBzdXJyb3VuZGluZyBieXRlY29kZXMuIik7CisKKyAgICAgICAgICAgIGF1dG8gbGl2
ZUJlZm9yZSA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBiZWZvcmUuYnl0
ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAgIGF1dG8gbGl2ZUFmdGVyID0gdG1wTGl2ZW5lc3NG
b3JDaGVja3BvaW50KCpjb2RlQmxvY2ssIGFmdGVyLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAg
ICAgICBsaXZlQWZ0ZXIuaW52ZXJ0KCk7CisgICAgICAgICAgICBsaXZlQmVmb3JlLmZpbHRlcihs
aXZlQWZ0ZXIpOworCisgICAgICAgICAgICBsaXZlQmVmb3JlLmZvckVhY2hTZXRCaXQoWyZdIChz
aXplX3QgdG1wKSB7CisgICAgICAgICAgICAgICAgZnVuY3RvcihyZW1hcE9wZXJhbmQoYmVmb3Jl
SW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kOjp0bXAodG1wKSkpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAvLyBObyBsb2NhbHMgY2FuIGRpZSBhdCBhIGNoZWNrcG9pbnQuCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYg
ZnVsbExpdmVuZXNzID0gZ3JhcGgubGl2ZW5lc3NGb3IoY29kZUJsb2NrKTsKICAgICAgICAgY29u
c3QgRmFzdEJpdFZlY3RvciYgbGl2ZUJlZm9yZSA9IGZ1bGxMaXZlbmVzcy5nZXRMaXZlbmVzcyhi
ZWZvcmUuYnl0ZWNvZGVJbmRleCgpLCBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQ6OkJlZm9yZVVz
ZSk7CiAgICAgICAgIGNvbnN0IEZhc3RCaXRWZWN0b3ImIGxpdmVBZnRlciA9IGZ1bGxMaXZlbmVz
cy5nZXRMaXZlbmVzcyhhZnRlci5ieXRlY29kZUluZGV4KCksIExpdmVuZXNzQ2FsY3VsYXRpb25Q
b2ludDo6QmVmb3JlVXNlKTsKICAgICAgICAgCiAgICAgICAgIChsaXZlQmVmb3JlICYgfmxpdmVB
ZnRlcikuZm9yRWFjaFNldEJpdCgKICAgICAgICAgICAgIFsmXSAoc2l6ZV90IHJlbGF0aXZlTG9j
YWwpIHsKLSAgICAgICAgICAgICAgICBmdW5jdG9yKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKHJl
bGF0aXZlTG9jYWwpICsgc3RhY2tPZmZzZXQpOworICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVt
YXBPcGVyYW5kKGJlZm9yZUlubGluZUNhbGxGcmFtZSwgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwo
cmVsYXRpdmVMb2NhbCkpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIAorCisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghYWZ0ZXIuYnl0ZWNvZGVJbmRleCgp
LmNoZWNrcG9pbnQoKSwgIlRyYW5zaXRpb25pbmcgYWNyb3NzIGEgY2hlY2twb2ludCBidXQgYmVm
b3JlIGFuZCBhZnRlciBkb24ndCBzaGFyZSBhbiBpbmxpbmVDYWxsRnJhbWUuIik7CisKICAgICAv
LyBEZXRlY3Qga2lsbHMgdGhlIHN1cGVyIGNvbnNlcnZhdGl2ZSB3YXk6IGl0IGlzIGtpbGxlZCBp
ZiBpdCB3YXMgbGl2ZSBiZWZvcmUgYW5kIGRlYWQgYWZ0ZXIuCi0gICAgQml0VmVjdG9yIGxpdmVB
ZnRlciA9IGdyYXBoLmxvY2Fsc0xpdmVJbkJ5dGVjb2RlKGFmdGVyKTsKLSAgICBncmFwaC5mb3JB
bGxMb2NhbHNMaXZlSW5CeXRlY29kZSgKKyAgICBCaXRWZWN0b3IgbGl2ZUFmdGVyID0gZ3JhcGgu
bG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKGFmdGVyKTsKKyAgICB1bnNpZ25lZCBudW1Mb2Nh
bHMgPSBncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7Cisg
ICAgZ3JhcGguZm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKAogICAgICAgICBiZWZv
cmUsCi0gICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgewotICAgICAgICAgICAgaWYg
KHJlZyA9PSBhbHJlYWR5Tm90ZWQpCisgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7Cisg
ICAgICAgICAgICBpZiAob3BlcmFuZCA9PSBhbHJlYWR5Tm90ZWQpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgaWYgKGxpdmVBZnRlci5nZXQocmVnLnRvTG9jYWwoKSkpCisg
ICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBvcGVyYW5kLmlzVG1wKCkgPyBudW1Mb2NhbHMg
KyBvcGVyYW5kLnZhbHVlKCkgOiBvcGVyYW5kLnRvTG9jYWwoKTsKKyAgICAgICAgICAgIGlmIChs
aXZlQWZ0ZXIuZ2V0KG9mZnNldCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgZnVuY3RvcihyZWcpOworICAgICAgICAgICAgZnVuY3RvcihvcGVyYW5kKTsKICAgICAgICAg
fSk7CiB9CiAgICAgCkBAIC0xMDUsNyArMTI4LDggQEAgdm9pZCBmb3JBbGxLaWxsZWROb2Rlc0F0
Tm9kZUluZGV4KAogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc2VlbkluQ2xvc3VyZUZs
YWcgPSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2FsbGVkRnVuY3RvckZsYWcg
PSAyOwogICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPiBmbGFnczsKLSAgICAKKworICAgIEFT
U0VSVChub2RlSW5kZXgpOwogICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsK
ICAgICAKICAgICBncmFwaC5kb1RvQ2hpbGRyZW4oCkBAIC0xMjAsMTUgKzE0NCwxMyBAQCB2b2lk
IGZvckFsbEtpbGxlZE5vZGVzQXROb2RlSW5kZXgoCiAgICAgICAgICAgICB9CiAgICAgICAgIH0p
OwogCi0gICAgTm9kZSogYmVmb3JlID0gbnVsbHB0cjsKLSAgICBpZiAobm9kZUluZGV4KQotICAg
ICAgICBiZWZvcmUgPSBibG9jay0+YXQobm9kZUluZGV4IC0gMSk7CisgICAgTm9kZSogYmVmb3Jl
ID0gYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpOwogCiAgICAgZm9yQWxsS2lsbGVkT3BlcmFuZHMo
CiAgICAgICAgIGdyYXBoLCBiZWZvcmUsIG5vZGUsCi0gICAgICAgIFsmXSAoVmlydHVhbFJlZ2lz
dGVyIHJlZykgeworICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAg
YXZhaWxhYmlsaXR5TWFwLmNsb3NlU3RhcnRpbmdXaXRoTG9jYWwoCi0gICAgICAgICAgICAgICAg
cmVnLAorICAgICAgICAgICAgICAgIG9wZXJhbmQsCiAgICAgICAgICAgICAgICAgWyZdIChOb2Rl
KiBub2RlKSAtPiBib29sIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZsYWdzLmdldChu
b2RlKSAmIHNlZW5JbkNsb3N1cmVGbGFnOwogICAgICAgICAgICAgICAgIH0sCkBAIC0xNTksNiAr
MTgxLDcgQEAgdm9pZCBmb3JBbGxLaWxsc0luQmxvY2soCiAgICAgLy8gU3RhcnQgYXQgdGhlIHNl
Y29uZCBub2RlLCBiZWNhdXNlIHRoZSBmdW5jdG9yIGlzIGV4cGVjdGVkIHRvIG9ubHkgaW5zcGVj
dCBub2RlcyBmcm9tIHRoZSBzdGFydCBvZgogICAgIC8vIHRoZSBibG9jayB1cCB0byBub2RlSW5k
ZXggKGV4Y2x1c2l2ZSksIHNvIGlmIG5vZGVJbmRleCBpcyB6ZXJvIHRoZW4gdGhlIGZ1bmN0b3Ig
aGFzIG5vdGhpbmcgdG8gZG8uCiAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAxOyBub2Rl
SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICBkYXRhTG9nTG5J
ZihGb3JBbGxLaWxsc0ludGVybmFsOjp2ZXJib3NlLCAibG9jYWwgYXZhaWxhYmlsaXR5IGF0IGlu
ZGV4OiAiLCBub2RlSW5kZXgsICIgIiwgbG9jYWxBdmFpbGFiaWxpdHkubV9hdmFpbGFiaWxpdHkp
OwogICAgICAgICBmb3JBbGxLaWxsZWROb2Rlc0F0Tm9kZUluZGV4KAogICAgICAgICAgICAgZ3Jh
cGgsIGxvY2FsQXZhaWxhYmlsaXR5Lm1fYXZhaWxhYmlsaXR5LCBibG9jaywgbm9kZUluZGV4LAog
ICAgICAgICAgICAgWyZdIChOb2RlKiBub2RlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCmluZGV4IGU1MTM1NWM1NTFiNDhjMjY2ZjllM2FiNzU2OGJhMTBiN2Q4MjRlYzIu
LmI5Zjg1NzI5NWVmYWY3NTI2MTRiNDRmNzU5ZjQ4OThhNGZiYzcyNWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCkBAIC0zMDgsOCArMzA4LDggQEAgdm9pZCBHcmFwaDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXhTdHIsIE5vZGUqIG5vZGUs
IER1bXBDb250ZXgKICAgICBpZiAobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCp0aGlzKSkg
ewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUt
PnRyeUdldFZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NE
YXRhKSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZhcmlhYmxlQWNj
ZXNzRGF0YS0+bG9jYWwoKTsKLSAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgdmFyaWFibGVB
Y2Nlc3NEYXRhLT5sb2NhbCgpLCAiKCIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAoKnRoaXMsIHZh
cmlhYmxlQWNjZXNzRGF0YSksICIpIik7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSB2
YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKTsKKyAgICAgICAgICAgIG91dC5wcmludChjb21t
YSwgdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCksICIoIiwgVmFyaWFibGVBY2Nlc3NEYXRh
RHVtcCgqdGhpcywgdmFyaWFibGVBY2Nlc3NEYXRhKSwgIikiKTsKICAgICAgICAgICAgIG9wZXJh
bmQgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1hY2hpbmVMb2NhbCgpOwogICAgICAgICAgICAgaWYg
KG9wZXJhbmQuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgIm1h
Y2hpbmU6Iiwgb3BlcmFuZCk7CkBAIC0zMTcsMTMgKzMxNywxMyBAQCB2b2lkIEdyYXBoOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeFN0ciwgTm9kZSogbm9kZSwgRHVt
cENvbnRleAogICAgIH0KICAgICBpZiAobm9kZS0+aGFzU3RhY2tBY2Nlc3NEYXRhKCkpIHsKICAg
ICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0g
ICAgICAgIG91dC5wcmludChjb21tYSwgZGF0YS0+bG9jYWwpOworICAgICAgICBvdXQucHJpbnQo
Y29tbWEsIGRhdGEtPm9wZXJhbmQpOwogICAgICAgICBpZiAoZGF0YS0+bWFjaGluZUxvY2FsLmlz
VmFsaWQoKSkKICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgIm1hY2hpbmU6IiwgZGF0YS0+
bWFjaGluZUxvY2FsKTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBkYXRhLT5mb3JtYXQpOwog
ICAgIH0KLSAgICBpZiAobm9kZS0+aGFzVW5saW5rZWRMb2NhbCgpKSAKLSAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCBub2RlLT51bmxpbmtlZExvY2FsKCkpOworICAgIGlmIChub2RlLT5oYXNVbmxp
bmtlZE9wZXJhbmQoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBub2RlLT51bmxpbmtlZE9w
ZXJhbmQoKSk7CiAgICAgaWYgKG5vZGUtPmhhc1ZlY3Rvckxlbmd0aEhpbnQoKSkKICAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAidmVjdG9yTGVuZ3RoSGludCA9ICIsIG5vZGUtPnZlY3Rvckxlbmd0
aEhpbnQoKSk7CiAgICAgaWYgKG5vZGUtPmhhc0xhenlKU1ZhbHVlKCkpCkBAIC01MTUsOSArNTE1
LDEwIEBAIHZvaWQgR3JhcGg6OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYgb3V0LCBjb25z
dCBjaGFyKiBwcmVmaXhTdHIsIEJhc2ljQmxvY2sqCiAgICAgICAgIG91dC5wcmludChwcmVmaXgs
ICIgIFBoaSBOb2RlczoiKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+
cGhpcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IGJsb2NrLT5w
aGlzW2ldOworICAgICAgICAgICAgQVNTRVJUKHBoaU5vZGUtPm9wKCkgPT0gUGhpKTsKICAgICAg
ICAgICAgIGlmICghcGhpTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSAmJiBwaGlOb2RlRHVtcE1vZGUg
PT0gRHVtcExpdmVQaGlzT25seSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIG91dC5wcmludCgiIEAiLCBwaGlOb2RlLT5pbmRleCgpLCAiPCIsIHBoaU5vZGUtPmxvY2Fs
KCksICIsIiwgcGhpTm9kZS0+cmVmQ291bnQoKSwgIj4tPigiKTsKKyAgICAgICAgICAgIG91dC5w
cmludCgiIEAiLCBwaGlOb2RlLT5pbmRleCgpLCAiPCIsIHBoaU5vZGUtPm9wZXJhbmQoKSwgIiwi
LCBwaGlOb2RlLT5yZWZDb3VudCgpLCAiPi0+KCIpOwogICAgICAgICAgICAgaWYgKHBoaU5vZGUt
PmNoaWxkMSgpKSB7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJAIiwgcGhpTm9kZS0+Y2hp
bGQxKCktPmluZGV4KCkpOwogICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDIoKSkg
ewpAQCAtODg0LDcgKzg4NSw3IEBAIHZvaWQgR3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbChCYXNp
Y0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxvY2ssIFZhCiAgICAgICAgIGJv
b2wgc2hvdWxkQ29udGludWUgPSB0cnVlOwogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
ICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgaWYgKG5vZGUtPmxvY2FsKCkg
PT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKQorICAgICAgICAgICAgaWYgKG5vZGUtPm9w
ZXJhbmQoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSkKICAgICAgICAgICAgICAg
ICBzaG91bGRDb250aW51ZSA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
QEAgLTg5Myw5ICs4OTQsOSBAQCB2b2lkIEdyYXBoOjpzdWJzdGl0dXRlR2V0TG9jYWwoQmFzaWNC
bG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJbkJsb2NrLCBWYQogICAgICAgICAgICAg
aWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IHZhcmlhYmxlQWNjZXNzRGF0YSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHN1YnN0aXR1dGUoYmxvY2ssIGlu
ZGV4SW5CbG9jaywgbm9kZSwgbmV3R2V0TG9jYWwpOwotICAgICAgICAgICAgTm9kZSogb2xkVGFp
bE5vZGUgPSBibG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEt
PmxvY2FsKCkpOworICAgICAgICAgICAgTm9kZSogb2xkVGFpbE5vZGUgPSBibG9jay52YXJpYWJs
ZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSk7CiAgICAgICAg
ICAgICBpZiAob2xkVGFpbE5vZGUgPT0gbm9kZSkKLSAgICAgICAgICAgICAgICBibG9jay52YXJp
YWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpID0gbmV3R2V0
TG9jYWw7CisgICAgICAgICAgICAgICAgYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFy
aWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCkpID0gbmV3R2V0TG9jYWw7CiAgICAgICAgICAgICBz
aG91bGRDb250aW51ZSA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAg
LTExMzMsMzYgKzExMzQsNTYgQEAgQnl0ZWNvZGVLaWxscyYgR3JhcGg6OmtpbGxzRm9yKElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogICAgIHJldHVybiBraWxsc0ZvcihiYXNlbGlu
ZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpKTsKIH0KIAotYm9vbCBHcmFwaDo6aXNMaXZl
SW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
KQorYm9vbCBHcmFwaDo6aXNMaXZlSW5CeXRlY29kZShPcGVyYW5kIG9wZXJhbmQsIENvZGVPcmln
aW4gY29kZU9yaWdpbikKIHsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZh
bHNlOwogICAgIAogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDaGVja2luZyBv
ZiBvcGVyYW5kIGlzIGxpdmU6ICIsIG9wZXJhbmQsICJcbiIpOwogICAgIGJvb2wgaXNDYWxsZXJP
cmlnaW4gPSBmYWxzZTsKKwogICAgIENvZGVPcmlnaW4qIGNvZGVPcmlnaW5QdHIgPSAmY29kZU9y
aWdpbjsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBWaXJ0
dWFsUmVnaXN0ZXIoCi0gICAgICAgICAgICBvcGVyYW5kLm9mZnNldCgpIC0gY29kZU9yaWdpblB0
ci0+c3RhY2tPZmZzZXQoKSk7CisgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdp
blB0ci0+aW5saW5lQ2FsbEZyYW1lKCk7CisgICAgLy8gV2UgbmVlZCB0byBoYW5kbGUgdGFpbCBj
YWxsZXJzIGJlY2F1c2Ugd2UgbWF5IGRlY2lkZSB0byBleGl0IHRvIHRoZQorICAgIC8vIHRoZSBy
ZXR1cm4gYnl0ZWNvZGUgZm9sbG93aW5nIHRoZSB0YWlsIGNhbGwuCisgICAgZm9yICg7IGNvZGVP
cmlnaW5QdHI7IGNvZGVPcmlnaW5QdHIgPSBpbmxpbmVDYWxsRnJhbWUgPyAmaW5saW5lQ2FsbEZy
YW1lLT5kaXJlY3RDYWxsZXIgOiBudWxscHRyKSB7CisgICAgICAgIGlubGluZUNhbGxGcmFtZSA9
IGNvZGVPcmlnaW5QdHItPmlubGluZUNhbGxGcmFtZSgpOworICAgICAgICBpZiAob3BlcmFuZC5p
c1RtcCgpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCB0bXBPZmZzZXQgPSBpbmxpbmVDYWxsRnJh
bWUgPyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCA6IDA7CisgICAgICAgICAgICB1bnNpZ25l
ZCBvcGVyYW5kSW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob3BlcmFuZC52YWx1ZSgpKTsK
KworICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmQudmFsdWUoKSA+PSAwKTsKKyAgICAgICAgICAg
IC8vIFRoaXMgdG1wIHNob3VsZCBoYXZlIGJlbG9uZ2VkIHRvIHNvbWVvbmUgd2UgaW5saW5lZC4K
KyAgICAgICAgICAgIGlmIChvcGVyYW5kSW5kZXggPiB0bXBPZmZzZXQgKyBtYXhOdW1DaGVja3Bv
aW50VG1wcykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1l
KTsKKyAgICAgICAgICAgIGlmICghY29kZUJsb2NrLT5udW1UbXBzKCkgfHwgb3BlcmFuZEluZGV4
IDwgdG1wT2Zmc2V0KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBh
dXRvIGJpdE1hcCA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBjb2RlT3Jp
Z2luUHRyLT5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgcmV0dXJuIGJpdE1hcC5nZXQo
b3BlcmFuZEluZGV4IC0gdG1wT2Zmc2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciByZWcgPSBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpIC0gY29kZU9yaWdpblB0ci0+
c3RhY2tPZmZzZXQoKTsKICAgICAgICAgCiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAg
ICAgZGF0YUxvZygicmVnID0gIiwgcmVnLCAiXG4iKTsKIAotICAgICAgICBhdXRvKiBpbmxpbmVD
YWxsRnJhbWUgPSBjb2RlT3JpZ2luUHRyLT5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICAgICAgaWYg
KG9wZXJhbmQub2Zmc2V0KCkgPCBjb2RlT3JpZ2luUHRyLT5zdGFja09mZnNldCgpICsgQ2FsbEZy
YW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpIHsKKyAgICAgICAgaWYgKG9wZXJhbmQudmlydHVh
bFJlZ2lzdGVyKCkub2Zmc2V0KCkgPCBjb2RlT3JpZ2luUHRyLT5zdGFja09mZnNldCgpICsgQ2Fs
bEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpIHsKICAgICAgICAgICAgIGlmIChyZWcuaXNB
cmd1bWVudCgpKSB7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVnLm9mZnNldCgp
IDwgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpOwogCiAKICAgICAgICAgICAgICAg
ICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsCi0gICAgICAgICAgICAgICAgICAg
ICYmIHJlZy5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgJiYgcmVnID09IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgewogICAgICAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkxv
b2tzIGxpa2UgYSBjYWxsZWUuXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlm
IChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpCi0gICAgICAgICAgICAgICAgICAgICYmIHJl
Zy5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykg
eworICAgICAgICAgICAgICAgICAgICAmJiByZWcgPT0gQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJMb29rcyBsaWtlIHRoZSBhcmd1bWVudCBj
b3VudC5cbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExNzYsNDIg
KzExOTcsMzkgQEAgYm9vbCBHcmFwaDo6aXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgICAgICAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpOwogICAgICAg
ICAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9IGxpdmVuZXNzRm9yKGNv
ZGVCbG9jayk7CiAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2Rl
T3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgICAgICByZXR1cm4gZnVsbExpdmVu
ZXNzLm9wZXJhbmRJc0xpdmUocmVnLm9mZnNldCgpLCBieXRlY29kZUluZGV4LCBhcHByb3ByaWF0
ZUxpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCgqY29kZU9yaWdpblB0ciwgaXNDYWxsZXJPcmlnaW4p
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKSB7Ci0gICAgICAg
ICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJSYW4gb3V0IG9mIHN0
YWNrLCByZXR1cm5pbmcgdHJ1ZS5cbiIpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICByZXR1cm4gZnVsbExpdmVuZXNzLnZpcnR1YWxSZWdpc3RlcklzTGl2ZShyZWcsIGJ5
dGVjb2RlSW5kZXgsIGFwcHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50KCpjb2RlT3Jp
Z2luUHRyLCBpc0NhbGxlck9yaWdpbikpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gQXJndW1l
bnRzIGFyZSBhbHdheXMgbGl2ZS4gVGhpcyB3b3VsZCBiZSByZWR1bmRhbnQgaWYgaXQgd2Fzbid0
IGZvciBvdXIKICAgICAgICAgLy8gb3BfY2FsbF92YXJhcmdzIGlubGluaW5nLgotICAgICAgICBp
ZiAocmVnLmlzQXJndW1lbnQoKQorICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmIHJlZy5p
c0FyZ3VtZW50KCkKICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PHNpemVfdD4ocmVnLnRvQXJn
dW1lbnQoKSkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1dpdGhGaXh1cC5zaXplKCkpIHsK
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkFyZ3Vt
ZW50IGlzIGxpdmUuXG4iKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAK
LSAgICAgICAgLy8gV2UgbmVlZCB0byBoYW5kbGUgdGFpbCBjYWxsZXJzIGJlY2F1c2Ugd2UgbWF5
IGRlY2lkZSB0byBleGl0IHRvIHRoZQotICAgICAgICAvLyB0aGUgcmV0dXJuIGJ5dGVjb2RlIGZv
bGxvd2luZyB0aGUgdGFpbCBjYWxsLgotICAgICAgICBjb2RlT3JpZ2luUHRyID0gJmlubGluZUNh
bGxGcmFtZS0+ZGlyZWN0Q2FsbGVyOwogICAgICAgICBpc0NhbGxlck9yaWdpbiA9IHRydWU7CiAg
ICAgfQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICBpZiAo
b3BlcmFuZC5pc1RtcCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgZGF0YUxvZygiUmFuIG91dCBvZiBzdGFjaywgcmV0dXJuaW5nIHRydWUuXG4i
KTsKKyAgICByZXR1cm4gdHJ1ZTsgICAgCiB9CiAKLUJpdFZlY3RvciBHcmFwaDo6bG9jYWxzTGl2
ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQorQml0VmVjdG9yIEdyYXBoOjpsb2Nh
bHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogewogICAgIEJp
dFZlY3RvciByZXN1bHQ7Ci0gICAgcmVzdWx0LmVuc3VyZVNpemUoYmxvY2soMCktPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKLSAgICBmb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29k
ZSgKKyAgICB1bnNpZ25lZCBudW1Mb2NhbHMgPSBibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51
bWJlck9mTG9jYWxzKCk7CisgICAgcmVzdWx0LmVuc3VyZVNpemUobnVtTG9jYWxzICsgYmxvY2so
MCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZlRtcHMoKSk7CisgICAgZm9yQWxsTG9jYWxzQW5k
VG1wc0xpdmVJbkJ5dGVjb2RlKAogICAgICAgICBjb2RlT3JpZ2luLAotICAgICAgICBbJl0gKFZp
cnR1YWxSZWdpc3RlciByZWcpIHsKLSAgICAgICAgICAgIEFTU0VSVChyZWcuaXNMb2NhbCgpKTsK
LSAgICAgICAgICAgIHJlc3VsdC5xdWlja1NldChyZWcudG9Mb2NhbCgpKTsKKyAgICAgICAgWyZd
IChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG9wZXJh
bmQuaXNUbXAoKSA/IG51bUxvY2FscyArIG9wZXJhbmQudmFsdWUoKSA6IG9wZXJhbmQudG9Mb2Nh
bCgpOworICAgICAgICAgICAgcmVzdWx0LnF1aWNrU2V0KG9mZnNldCk7CiAgICAgICAgIH0pOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xNjM1LDggKzE2NTMsOCBAQCBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlIEdyYXBoOjptZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKE5v
ZGUqIGN1cnJlbgogCiAgICAgZm9yIChOb2RlKiBub2RlID0gb3BlcmFuZE5vZGU7IG5vZGU7KSB7
CiAgICAgICAgIGlmIChub2RlLT5hY2Nlc3Nlc1N0YWNrKCp0aGlzKSkgewotICAgICAgICAgICAg
aWYgKG1fZm9ybSAhPSBTU0EgJiYgbm9kZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkpIHsKLSAgICAg
ICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBub2RlLT5sb2NhbCgpLnRvQXJndW1lbnQoKTsKKyAg
ICAgICAgICAgIGlmIChtX2Zvcm0gIT0gU1NBICYmIG5vZGUtPm9wZXJhbmQoKS5pc0FyZ3VtZW50
KCkpIHsKKyAgICAgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBub2RlLT5vcGVyYW5kKCkudG9B
cmd1bWVudCgpOwogICAgICAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50Tm9kZSA9IG1fcm9vdFRv
QXJndW1lbnRzLmZpbmQoYmxvY2soMCkpLT52YWx1ZVthcmd1bWVudF07CiAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYXRjaCBTZXRBcmd1bWVudERlZmluaXRlbHkgbm9kZXMg
YXQgb3RoZXIgZW50cnlwb2ludHMgYXMgd2VsbDoKICAgICAgICAgICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1ODQxCkBAIC0xNjU2LDcgKzE2NzQs
NyBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIEdyYXBoOjptZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlRm9yKE5vZGUqIGN1cnJlbgogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZnJvbUxhenlPcGVyYW5kKAogICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgIExh
enlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCksIG5vZGUtPmxvY2FsKCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJ
bmRleCgpLCBub2RlLT5vcGVyYW5kKCkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAppbmRleCBlYzRmMjJiZWU1NWYx
YjI5MDQyYmZiMjNlMTI2NGZhMjAzY2FkZGU3Li45NDdlZmFhYmE5ZTY0OTZiM2IwNWM2ZjU1MTQy
YWI3Yzc3YjViNWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCkBAIC04NDAs
MTMgKzg0MCwxMyBAQCBwdWJsaWM6CiAgICAgLy8gUXVpY2tseSBxdWVyeSBpZiBhIHNpbmdsZSBs
b2NhbCBpcyBsaXZlIGF0IHRoZSBnaXZlbiBwb2ludC4gVGhpcyBpcyBmYXN0ZXIgdGhhbiBjYWxs
aW5nCiAgICAgLy8gZm9yQWxsTGl2ZUluQnl0ZWNvZGUoKSBpZiB5b3Ugd2lsbCBvbmx5IHF1ZXJ5
IG9uZSBsb2NhbC4gQnV0LCBpZiB5b3Ugd2FudCB0byBrbm93IGFsbCBvZiB0aGUKICAgICAvLyBs
b2NhbHMgbGl2ZSwgdGhlbiBjYWxsaW5nIHRoaXMgZm9yIGVhY2ggbG9jYWwgaXMgbXVjaCBzbG93
ZXIgdGhhbiBmb3JBbGxMaXZlSW5CeXRlY29kZSgpLgotICAgIGJvb2wgaXNMaXZlSW5CeXRlY29k
ZShWaXJ0dWFsUmVnaXN0ZXIsIENvZGVPcmlnaW4pOworICAgIGJvb2wgaXNMaXZlSW5CeXRlY29k
ZShPcGVyYW5kLCBDb2RlT3JpZ2luKTsKICAgICAKLSAgICAvLyBRdWlja2x5IGdldCBhbGwgb2Yg
dGhlIG5vbi1hcmd1bWVudCBsb2NhbHMgbGl2ZSBhdCB0aGUgZ2l2ZW4gcG9pbnQuIFRoaXMgZG9l
c24ndCBnaXZlIHlvdQorICAgIC8vIFF1aWNrbHkgZ2V0IGFsbCBvZiB0aGUgbm9uLWFyZ3VtZW50
IGxvY2FscyBhbmQgdG1wcyBsaXZlIGF0IHRoZSBnaXZlbiBwb2ludC4gVGhpcyBkb2Vzbid0IGdp
dmUgeW91CiAgICAgLy8gYW55IGFyZ3VtZW50cyBiZWNhdXNlIHRob3NlIGFyZSBhbGwgcHJlc3Vt
ZWQgbGl2ZS4gWW91IGNhbiBjYWxsIGZvckFsbExpdmVJbkJ5dGVjb2RlKCkgdG8KICAgICAvLyBh
bHNvIGdldCB0aGUgYXJndW1lbnRzLiBUaGlzIGlzIG11Y2ggZmFzdGVyIHRoYW4gY2FsbGluZyBp
c0xpdmVJbkJ5dGVjb2RlKCkgZm9yIGVhY2ggbG9jYWwuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4KLSAgICB2b2lkIGZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4g
Y29kZU9yaWdpbiwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB2b2lkIGZvckFsbExvY2Fs
c0FuZFRtcHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IpCiAgICAgewogICAgICAgICAvLyBTdXBwb3J0IGZvciBub3QgcmVkdW5kYW50
bHkgcmVwb3J0aW5nIGFyZ3VtZW50cy4gTmVjZXNzYXJ5IGJlY2F1c2UgaW4gY2FzZSBvZiBhIHZh
cmFyZ3MKICAgICAgICAgLy8gY2FsbCwgb25seSB0aGUgY2FsbGVlIGtub3dzIHRoYXQgYXJndW1l
bnRzIGFyZSBsaXZlIHdoaWxlIGluIHRoZSBjYXNlIG9mIGEgbm9uLXZhcmFyZ3MKQEAgLTg4MSw2
ICs4ODEsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmIChsaXZlbmVzc0F0Qnl0ZWNv
ZGVbcmVsYXRpdmVMb2NhbF0pCiAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVnKTsKICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5k
ZXgoKS5jaGVja3BvaW50KCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5u
dW1UbXBzKCkpOworICAgICAgICAgICAgICAgIGF1dG8gbGl2ZVRtcHMgPSB0bXBMaXZlbmVzc0Zv
ckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgY29kZU9yaWdpblB0ci0+Ynl0ZWNvZGVJbmRleCgpKTsK
KyAgICAgICAgICAgICAgICBsaXZlVG1wcy5mb3JFYWNoU2V0Qml0KFsmXSAoc2l6ZV90IHRtcCkg
eworICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHJlbWFwT3BlcmFuZChpbmxpbmVDYWxsRnJh
bWUsIE9wZXJhbmQ6OnRtcCh0bXApKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTA0LDkgKzkxMiw5IEBAIHB1YmxpYzoKICAgICAgICAg
fQogICAgIH0KICAgICAKLSAgICAvLyBHZXQgYSBCaXRWZWN0b3Igb2YgYWxsIG9mIHRoZSBub24t
YXJndW1lbnQgbG9jYWxzIGxpdmUgcmlnaHQgbm93LiBUaGlzIGlzIG1vc3RseSB1c2VmdWwgaWYK
KyAgICAvLyBHZXQgYSBCaXRWZWN0b3Igb2YgYWxsIG9mIHRoZSBsb2NhbHMgYW5kIHRtcHMgbGl2
ZSByaWdodCBub3cuIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCBpZgogICAgIC8vIHlvdSB3YW50IHRv
IGNvbXBhcmUgdHdvIHNldHMgb2YgbGl2ZSBsb2NhbHMgZnJvbSB0d28gZGlmZmVyZW50IENvZGVP
cmlnaW5zLgotICAgIEJpdFZlY3RvciBsb2NhbHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luKTsK
KyAgICBCaXRWZWN0b3IgbG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4pOwog
CiAgICAgTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50IGFwcHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxh
dGlvblBvaW50KENvZGVPcmlnaW4gb3JpZ2luLCBib29sIGlzQ2FsbGVyT3JpZ2luKQogICAgIHsK
QEAgLTkzOCwxNiArOTQ2LDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIExpdmVuZXNzQ2Fs
Y3VsYXRpb25Qb2ludDo6QmVmb3JlVXNlOwogICAgIH0KICAgICAKLSAgICAvLyBUZWxscyB5b3Ug
YWxsIG9mIHRoZSBhcmd1bWVudHMgYW5kIGxvY2FscyBsaXZlIGF0IHRoZSBnaXZlbiBDb2RlT3Jp
Z2luLiBUaGlzIGlzIGEgc21hbGwKLSAgICAvLyBleHRlbnNpb24gdG8gZm9yQWxsTG9jYWxzTGl2
ZUluQnl0ZWNvZGUoKSwgc2luY2UgYWxsIGFyZ3VtZW50cyBhcmUgYWx3YXlzIHByZXN1bWVkIGxp
dmUuCisgICAgLy8gVGVsbHMgeW91IGFsbCBvZiB0aGUgb3BlcmFuZHMgbGl2ZSBhdCB0aGUgZ2l2
ZW4gQ29kZU9yaWdpbi4gVGhpcyBpcyBhIHNtYWxsCisgICAgLy8gZXh0ZW5zaW9uIHRvIGZvckFs
bExvY2Fsc09yVG1wc0xpdmVJbkJ5dGVjb2RlKCksIHNpbmNlIGFsbCBhcmd1bWVudHMgYXJlIGFs
d2F5cyBwcmVzdW1lZCBsaXZlLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAg
dm9pZCBmb3JBbGxMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IEZ1
bmN0b3ImIGZ1bmN0b3IpCiAgICAgewotICAgICAgICBmb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29k
ZShjb2RlT3JpZ2luLCBmdW5jdG9yKTsKKyAgICAgICAgZm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJ
bkJ5dGVjb2RlKGNvZGVPcmlnaW4sIGZ1bmN0b3IpOwogICAgICAgICAKICAgICAgICAgLy8gUmVw
b3J0IGFsbCBhcmd1bWVudHMgYXMgYmVpbmcgbGl2ZS4KICAgICAgICAgZm9yICh1bnNpZ25lZCBh
cmd1bWVudCA9IGJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsg
YXJndW1lbnQtLTspCi0gICAgICAgICAgICBmdW5jdG9yKHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KGFyZ3VtZW50KSk7CisgICAgICAgICAgICBmdW5jdG9yKHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50SW5jbHVkaW5nVGhpcyhhcmd1bWVudCkpOwogICAgIH0KICAgICAKICAgICBCeXRlY29k
ZUtpbGxzJiBraWxsc0ZvcihDb2RlQmxvY2sqKTsKQEAgLTExMTQsNiArMTEyMiw3IEBAIHB1Ymxp
YzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja3dhcmRzQ0ZHPiBtX2JhY2t3YXJkc0NGRzsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QmFja3dhcmRzRG9taW5hdG9ycz4gbV9iYWNrd2FyZHNEb21pbmF0
b3JzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcz4gbV9j
b250cm9sRXF1aXZhbGVuY2VBbmFseXNpczsKKyAgICB1bnNpZ25lZCBtX3RtcHM7CiAgICAgdW5z
aWduZWQgbV9sb2NhbFZhcnM7CiAgICAgdW5zaWduZWQgbV9uZXh0TWFjaGluZUxvY2FsOwogICAg
IHVuc2lnbmVkIG1fcGFyYW1ldGVyU2xvdHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCmluZGV4IDk5YWVmZmNkYzA1YTEx
YzQ1YjA1NzQxMjUwZjRkMmFlYjRlMjI4Y2QuLjIwMmQyMjUwNTNmYTlkZmJlNWMyM2M2NGJjZjhi
ZTM4NGUzZTc2NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5Q
bGFjZUFic3RyYWN0U3RhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCkBAIC00NSw4ICs0NSw4IEBAIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6SW5QbGFjZUFi
c3RyYWN0U3RhdGUoR3JhcGgmIGdyYXBoKQogICAgIDogbV9ncmFwaChncmFwaCkKICAgICAsIG1f
YWJzdHJhY3RWYWx1ZXMoKmdyYXBoLm1fYWJzdHJhY3RWYWx1ZXNDYWNoZSkKLSAgICAsIG1fdmFy
aWFibGVzKG1fZ3JhcGgubV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgZ3JhcGgubV9sb2Nh
bFZhcnMpCi0gICAgLCBtX2Jsb2NrKDApCisgICAgLCBtX3ZhcmlhYmxlcyhPcGVyYW5kc0xpa2Us
IGdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCisgICAgLCBtX2Jsb2NrKG51bGxwdHIp
CiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFj
ZUFic3RyYWN0U3RhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFi
c3RyYWN0U3RhdGUuaAppbmRleCBiZjVlYWQxOGVjMTY0N2VlMTY3NjY4ODM1NzQwMWZhN2ZlYzcx
Mjk5Li4xODY1ZTZhMWVmZmMzZGFhZWZlNTg0Y2E4NjJjNDliYzM2ODU4NTAwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCkBA
IC0xNjcsMTMgKzE2NywxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmYXN0Rm9yd2FyZCht
X3ZhcmlhYmxlc1tpbmRleF0pOwogICAgIH0KIAotICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQo
aW50IG9wZXJhbmQpCisgICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChPcGVyYW5kIG9wZXJhbmQp
CiAgICAgewogICAgICAgICByZXR1cm4gdmFyaWFibGVBdChtX3ZhcmlhYmxlcy5vcGVyYW5kSW5k
ZXgob3BlcmFuZCkpOwogICAgIH0KICAgICAKLSAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7IHJldHVybiB0aGlzLT5vcGVyYW5kKG9wZXJhbmQub2Zm
c2V0KCkpOyB9Ci0gICAgCiAgICAgQWJzdHJhY3RWYWx1ZSYgbG9jYWwoc2l6ZV90IGluZGV4KQog
ICAgIHsKICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQXQobV92YXJpYWJsZXMubG9jYWxJbmRleChp
bmRleCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcApp
bmRleCA3MGVlZjg4NmI0YThmZTI5NDNmNDZiYWU3NmVjNmI2MzcwZTQ1MmQ1Li5jNTU0NGJiYzVj
OTgwNTY2OWY5ZTdmNmZmODBiOWFjMTk2ZjRkZjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcApAQCAtODUsOCArODUsNiBAQCB2b2lkIEpJVENvbXBp
bGVyOjpsaW5rT1NSRXhpdHMoKQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5rID0gdm0oKS5nZXRDVElT
dHViKG9zckV4aXRUaHVua0dlbmVyYXRvcik7Ci0gICAgYXV0byBvc3JFeGl0VGh1bmtMYWJlbCA9
IENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPihvc3JFeGl0VGh1bmsuY29kZSgpKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsg
KytpKSB7CiAgICAgICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2V4aXRDb21w
aWxhdGlvbkluZm9baV07CiAgICAgICAgIEp1bXBMaXN0JiBmYWlsdXJlSnVtcHMgPSBpbmZvLm1f
ZmFpbHVyZUp1bXBzOwpAQCAtOTcsMTMgKzk1LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua09T
UkV4aXRzKCkKIAogICAgICAgICBqaXRBc3NlcnRIYXNWYWxpZENhbGxGcmFtZSgpOwogICAgICAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihpKSwgJnZtKCkub3NyRXhpdEluZGV4KTsKLSAgICAgICAg
aWYgKE9wdGlvbnM6OnVzZVByb2JlT1NSRXhpdCgpKSB7Ci0gICAgICAgICAgICBKdW1wIHRhcmdl
dCA9IGp1bXAoKTsKLSAgICAgICAgICAgIGFkZExpbmtUYXNrKFt0YXJnZXQsIG9zckV4aXRUaHVu
a0xhYmVsXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayh0YXJnZXQsIG9zckV4aXRUaHVua0xhYmVsKTsKLSAgICAgICAgICAgIH0pOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGluZm8ubV9wYXRjaGFibGVKdW1wID0gcGF0Y2hh
YmxlSnVtcCgpOworICAgICAgICBpbmZvLm1fcGF0Y2hhYmxlSnVtcCA9IHBhdGNoYWJsZUp1bXAo
KTsKICAgICB9CiB9CiAKQEAgLTU5NSwxMSArNTg3LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6Om5v
dGljZU9TUkVudHJ5KEJhc2ljQmxvY2smIGJhc2ljQmxvY2ssIEpJVENvbXBpbGVyOjpMYWJlbCBi
bG9jCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkg
IT0gdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSB7CisKKyAgICAgICAgICAgIEFTU0VSVCghdmFy
aWFibGUtPm9wZXJhbmQoKS5pc1RtcCgpKTsKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+b3Bl
cmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpICE9IHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkgewog
ICAgICAgICAgICAgICAgIGVudHJ5LT5tX3Jlc2h1ZmZsaW5ncy5hcHBlbmQoCiAgICAgICAgICAg
ICAgICAgICAgIE9TUkVudHJ5UmVzaHVmZmxpbmcoCi0gICAgICAgICAgICAgICAgICAgICAgICB2
YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLm9mZnNl
dCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1
YWxSZWdpc3RlcigpLm9mZnNldCgpLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkub2Zmc2V0KCkp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuaAppbmRleCBkMWJkN2RhOWRmZmRjMzZjMjYwZTYzNWNiNjAw
YTliMmYxOTE5ZDM1Li40ODgwODc0YzI4NWFiN2Q0NDdlYjg5M2E2ZThiNGJiZjAxMDczMWQ0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCkBAIC0xMzUsNyAr
MTM1LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBlbWl0U3RvcmVDYWxsU2l0ZUluZGV4KENhbGxT
aXRlSW5kZXggY2FsbFNpdGUpCiAgICAgewotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihj
YWxsU2l0ZS5iaXRzKCkpLCB0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKKyAgICAgICAgc3RvcmUz
MihUcnVzdGVkSW1tMzIoY2FsbFNpdGUuYml0cygpKSwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgfQogCiAgICAgLy8gQWRkIGEgY2FsbCBv
dXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0
aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJp
YWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcAppbmRleCA0MmY2OGFkYTMyNDc4YTExNzFjZWFkMGY5
M2UwOGFjMjVjYTYzMTM0Li41YzM1ZTUzNWU1ZGQ2NjFkMzFkZDUxMzBkN2MxMmJhY2JhZGIyYzBm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlh
YmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAKQEAgLTYzLDcgKzYzLDcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBib29sIGlzVmFs
aWRGbHVzaExvY2F0aW9uKEJhc2ljQmxvY2sqIHN0YXJ0aW5nQmxvY2ssIHVuc2lnbmVkIGluZGV4
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBib29sIGlzVmFsaWRGbHVzaExvY2F0aW9u
KEJhc2ljQmxvY2sqIHN0YXJ0aW5nQmxvY2ssIHVuc2lnbmVkIGluZGV4LCBPcGVyYW5kIG9wZXJh
bmQpCiAgICAgewogICAgICAgICAvLyBUaGlzIGNvZGUgaXMgbm90IG1lYW50IHRvIGJlIGZhc3Qu
IFdlIGp1c3QgdXNlIGl0IGZvciBhc3NlcnRpb25zLiBJZiB3ZSBnb3QgbGl2ZW5lc3Mgd3Jvbmcs
CiAgICAgICAgIC8vIHRoaXMgZnVuY3Rpb24gd291bGQgcmV0dXJuIGZhbHNlIGZvciBhIEZsdXNo
IHRoYXQgd2UgaW5zZXJ0LgpAQCAtODEsNyArODEsNyBAQCBwdWJsaWM6CiAgICAgICAgIGF1dG8g
Zmx1c2hJc0RlZmluaXRlbHlJbnZhbGlkID0gWyZdIChCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWdu
ZWQgaW5kZXgpIHsKICAgICAgICAgICAgIGJvb2wgYWxsR29vZCA9IGZhbHNlOwogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gaW5kZXg7IGktLTsgKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGJsb2NrLT5hdChpKS0+YWNjZXNzZXNTdGFjayhtX2dyYXBoKSAmJiBibG9jay0+YXQoaSktPmxv
Y2FsKCkgPT0gb3BlcmFuZCkgeworICAgICAgICAgICAgICAgIGlmIChibG9jay0+YXQoaSktPmFj
Y2Vzc2VzU3RhY2sobV9ncmFwaCkgJiYgYmxvY2stPmF0KGkpLT5vcGVyYW5kKCkgPT0gb3BlcmFu
ZCkgewogICAgICAgICAgICAgICAgICAgICBhbGxHb29kID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTE1LDggKzExNSw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGhhbmRsZUJsb2NrRm9yVHJ5Q2F0Y2goQmFzaWNCbG9jayogYmxvY2ssIElu
c2VydGlvblNldCYgaW5zZXJ0aW9uU2V0KQogICAgIHsKICAgICAgICAgSGFuZGxlckluZm8qIGN1
cnJlbnRFeGNlcHRpb25IYW5kbGVyID0gbnVsbHB0cjsKLSAgICAgICAgRmFzdEJpdFZlY3RvciBs
aXZlQXRDYXRjaEhlYWQ7Ci0gICAgICAgIGxpdmVBdENhdGNoSGVhZC5yZXNpemUobV9ncmFwaC5i
bG9jaygwKS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkpOworICAgICAgICBPcGVy
YW5kczxib29sPiBsaXZlQXRDYXRjaEhlYWQoMCwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVz
QXRUYWlsLm51bWJlck9mTG9jYWxzKCksIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0VGFp
bC5udW1iZXJPZlRtcHMoKSk7CiAKICAgICAgICAgSGFuZGxlckluZm8qIGNhY2hlZEhhbmRsZXJS
ZXN1bHQ7CiAgICAgICAgIENvZGVPcmlnaW4gY2FjaGVkQ29kZU9yaWdpbjsKQEAgLTEzMywxMSAr
MTMyLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSA9IG9yaWdpbi5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICAgICAgICAgICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5l
Q2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICBpZiAoSGFuZGxlckluZm8qIGhhbmRsZXIgPSBj
b2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXhUb0NoZWNrKSkg
ewotICAgICAgICAgICAgICAgICAgICBsaXZlQXRDYXRjaEhlYWQuY2xlYXJBbGwoKTsKKyAgICAg
ICAgICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLmZpbGwoZmFsc2UpOwogCiAgICAgICAgICAg
ICAgICAgICAgIEJ5dGVjb2RlSW5kZXggY2F0Y2hCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRl
eChoYW5kbGVyLT50YXJnZXQpOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmZvckFsbExv
Y2Fsc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4oY2F0Y2hCeXRlY29kZUluZGV4LCBpbmxpbmVD
YWxsRnJhbWUpLCBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBsaXZlQXRDYXRjaEhlYWRbb3BlcmFuZC50b0xvY2FsKCldID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC5mb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNv
ZGUoQ29kZU9yaWdpbihjYXRjaEJ5dGVjb2RlSW5kZXgsIGlubGluZUNhbGxGcmFtZSksIFsmXSAo
T3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXZlQXRDYXRjaEhl
YWQub3BlcmFuZChvcGVyYW5kKSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogCiAg
ICAgICAgICAgICAgICAgICAgIGNhY2hlZEhhbmRsZXJSZXN1bHQgPSBoYW5kbGVyOwpAQCAtMTU2
LDEyICsxNTUsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGNhY2hlZEhhbmRsZXJS
ZXN1bHQ7CiAgICAgICAgIH07CiAKLSAgICAgICAgT3BlcmFuZHM8VmFyaWFibGVBY2Nlc3NEYXRh
Kj4gY3VycmVudEJsb2NrQWNjZXNzRGF0YShibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9m
QXJndW1lbnRzKCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSwgbnVs
bHB0cik7CisgICAgICAgIE9wZXJhbmRzPFZhcmlhYmxlQWNjZXNzRGF0YSo+IGN1cnJlbnRCbG9j
a0FjY2Vzc0RhdGEoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLCBudWxscHRy
KTsKIAogICAgICAgICBhdXRvIGZsdXNoRXZlcnl0aGluZyA9IFsmXSAoTm9kZU9yaWdpbiBvcmln
aW4sIHVuc2lnbmVkIGluZGV4KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjdXJyZW50
RXhjZXB0aW9uSGFuZGxlcik7Ci0gICAgICAgICAgICBhdXRvIGZsdXNoID0gWyZdIChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkgewotICAgICAgICAgICAgICAgIGlmICgob3BlcmFuZC5pc0xvY2Fs
KCkgJiYgbGl2ZUF0Q2F0Y2hIZWFkW29wZXJhbmQudG9Mb2NhbCgpXSkgfHwgb3BlcmFuZC5pc0Fy
Z3VtZW50KCkpIHsKKyAgICAgICAgICAgIGF1dG8gZmx1c2ggPSBbJl0gKE9wZXJhbmQgb3BlcmFu
ZCkgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSB8fCBsaXZlQXRD
YXRjaEhlYWQub3BlcmFuZChvcGVyYW5kKSkgewogCiAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChpc1ZhbGlkRmx1c2hMb2NhdGlvbihibG9jaywgaW5kZXgsIG9wZXJhbmQpKTsKIApAQCAtMTc4
LDYgKzE3Nyw4IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsb2NhbCA9
IDA7IGxvY2FsIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpOyBsb2Nh
bCsrKQogICAgICAgICAgICAgICAgIGZsdXNoKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGxvY2Fs
KSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcCA9IDA7IHRtcCA8IGJsb2NrLT52YXJp
YWJsZXNBdFRhaWwubnVtYmVyT2ZUbXBzKCk7ICsrdG1wKQorICAgICAgICAgICAgICAgIGZsdXNo
KE9wZXJhbmQ6OnRtcCh0bXApKTsKICAgICAgICAgICAgIGZsdXNoKFZpcnR1YWxSZWdpc3RlcihD
YWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpKSk7CiAgICAgICAgIH07CiAKQEAgLTE5Miw5
ICsxOTMsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChjdXJy
ZW50RXhjZXB0aW9uSGFuZGxlciAmJiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBub2RlLT5v
cCgpID09IFNldEFyZ3VtZW50RGVmaW5pdGVseSB8fCBub2RlLT5vcCgpID09IFNldEFyZ3VtZW50
TWF5YmUpKSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBub2Rl
LT5sb2NhbCgpOwotICAgICAgICAgICAgICAgIGlmICgob3BlcmFuZC5pc0xvY2FsKCkgJiYgbGl2
ZUF0Q2F0Y2hIZWFkW29wZXJhbmQudG9Mb2NhbCgpXSkgfHwgb3BlcmFuZC5pc0FyZ3VtZW50KCkp
IHsKLQorICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5vZGUtPm9wZXJhbmQoKTsK
KyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkgfHwgbGl2ZUF0Q2F0Y2hI
ZWFkLm9wZXJhbmQob3BlcmFuZCkpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlzVmFs
aWRGbHVzaExvY2F0aW9uKGJsb2NrLCBub2RlSW5kZXgsIG9wZXJhbmQpKTsKIAogICAgICAgICAg
ICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IGN1cnJl
bnRCbG9ja0FjY2Vzc0RhdGEub3BlcmFuZChvcGVyYW5kKTsKQEAgLTIwNyw3ICsyMDcsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChub2RlLT5hY2Nlc3Nlc1N0
YWNrKG1fZ3JhcGgpKQotICAgICAgICAgICAgICAgIGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEub3Bl
cmFuZChub2RlLT5sb2NhbCgpKSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAg
ICAgICAgICAgIGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEub3BlcmFuZChub2RlLT5vcGVyYW5kKCkp
ID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
Y3VycmVudEV4Y2VwdGlvbkhhbmRsZXIpIHsKQEAgLTIxNiw3ICsyMTYsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNj
ZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICBB
U1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcAppbmRleCA3M2Ez
ZDc1Yjc2MGI1MmI5Njc2MzcxMzNkNmEwZmVmYjAwZWJlZDg3Li5mZmY5NmJmY2Y2MjllYjRkMDUy
ZTdiMTQyN2IyYjY3YjA1NGMxYTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAKQEAgLTg1LDcgKzg1LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgbV9zdGF0ZS5maWxsKEVwb2NoKCkpOwogICAgICAgICBtX2dyYXBoLmZvckFs
bExpdmVJbkJ5dGVjb2RlKAogICAgICAgICAgICAgYmxvY2stPnRlcm1pbmFsKCktPm9yaWdpbi5m
b3JFeGl0LAotICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAg
ICAgICBbJl0gKE9wZXJhbmQgcmVnKSB7CiAgICAgICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5k
KHJlZykgPSBjdXJyZW50RXBvY2g7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgCkBAIC05OSw3
ICs5OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5v
ZGVJbmRleCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IE1v
dkhpbnQpIHsKLSAgICAgICAgICAgICAgICBFcG9jaCBsb2NhbEVwb2NoID0gbV9zdGF0ZS5vcGVy
YW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgRXBvY2ggbG9jYWxF
cG9jaCA9IG1fc3RhdGUub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSk7CiAgICAgICAg
ICAgICAgICAgaWYgKERGR01vdkhpbnRSZW1vdmFsUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEF0ICIsIG5vZGUsICI6IGN1cnJlbnQgPSAi
LCBjdXJyZW50RXBvY2gsICIsIGxvY2FsID0gIiwgbG9jYWxFcG9jaCwgIlxuIik7CiAgICAgICAg
ICAgICAgICAgaWYgKCFsb2NhbEVwb2NoIHx8IGxvY2FsRXBvY2ggPT0gY3VycmVudEVwb2NoKSB7
CkBAIC0xMDcsNyArMTA3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCkgPSBFZGdlKCk7CiAgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fc3RhdGUub3BlcmFuZChub2Rl
LT51bmxpbmtlZExvY2FsKCkpID0gRXBvY2goKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRlLm9w
ZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gRXBvY2goKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1heUV4aXQobV9ncmFwaCwgbm9kZSkgIT0g
RG9lc05vdEV4aXQpCkBAIC0xMTYsMTUgKzExNiwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
aWYgKG5vZGVJbmRleCkgewogICAgICAgICAgICAgICAgIGZvckFsbEtpbGxlZE9wZXJhbmRzKAog
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBibG9jay0+YXQobm9kZUluZGV4IC0gMSksIG5v
ZGUsCi0gICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgeworICAg
ICAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBhIGJpdCBzbG9wcHkgLSBpdCBtaWdodCBjbGFp
bSB0byBraWxsIGEgbG9jYWwgZXZlbiBpZgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXQn
cyBzdGlsbCBsaXZlIGFmdGVyLiBXZSBuZWVkIHRvIHByb3RlY3QgYWdhaW5zdCB0aGF0LgotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbV9zdGF0ZS5vcGVyYW5kKHJlZykpCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoISFtX3N0YXRlLm9wZXJhbmQob3BlcmFuZCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHTW92SGludFJlbW92YWxQaGFzZUludGVybmFs
Ojp2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBLaWxs
ZWQgb3BlcmFuZCBhdCAiLCBub2RlLCAiOiAiLCByZWcsICJcbiIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKHJlZykgPSBjdXJyZW50RXBvY2g7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxlZCBvcGVyYW5kIGF0ICIsIG5vZGUs
ICI6ICIsIG9wZXJhbmQsICJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5v
cGVyYW5kKG9wZXJhbmQpID0gY3VycmVudEVwb2NoOwogICAgICAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaApp
bmRleCA0YmZkM2U1YTUyMTAwNTExYTllNzIzMDgzNDViZGI5YzBhMDZmYjc2Li41MTdhZjEwMDNh
ZmNlNmQzNWY3MTQ1ZGJiNjk1MWYxOGNjMjIzYjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaApAQCAtMjUxLDEzICsyNTEsMTMgQEAgc3RydWN0IFN0YWNrQWNjZXNzRGF0YSB7CiAg
ICAgewogICAgIH0KICAgICAKLSAgICBTdGFja0FjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIGxv
Y2FsLCBGbHVzaEZvcm1hdCBmb3JtYXQpCi0gICAgICAgIDogbG9jYWwobG9jYWwpCisgICAgU3Rh
Y2tBY2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFuZCwgRmx1c2hGb3JtYXQgZm9ybWF0KQorICAgICAg
ICA6IG9wZXJhbmQob3BlcmFuZCkKICAgICAgICAgLCBmb3JtYXQoZm9ybWF0KQogICAgIHsKICAg
ICB9CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsOworICAgIE9wZXJhbmQgb3BlcmFu
ZDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZUxvY2FsOwogICAgIEZsdXNoRm9ybWF0IGZv
cm1hdDsKICAgICAKQEAgLTkxNSw2ICs5MTUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHN3aXRjaCAo
b3AoKSkgewogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICAgICAgY2FzZSBH
ZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3Ro
OgogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdz
OgogICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgpAQCAtOTM2LDkgKzkzNywxMSBAQCBwdWJsaWM6
CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZh
bDoKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKKyAgICAgICAg
Y2FzZSBWYXJhcmdzTGVuZ3RoOgorICAgICAgICAgICAgcmV0dXJuIGNoaWxkMSgpOwogICAgICAg
ICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgotICAgICAg
ICAgICAgcmV0dXJuIGNoaWxkMSgpOworICAgICAgICAgICAgcmV0dXJuIGNoaWxkMigpOwogICAg
ICAgICBjYXNlIENhbGxWYXJhcmdzOgogICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoK
ICAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgpAQCAtOTg2LDkgKzk4OSw5IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFZhcmlhYmxlQWNjZXNzRGF0YSo+KCktPmZp
bmQoKTsKICAgICB9CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsKCkKKyAgICBPcGVy
YW5kIG9wZXJhbmQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHZhcmlhYmxlQWNjZXNzRGF0YSgp
LT5sb2NhbCgpOworICAgICAgICByZXR1cm4gdmFyaWFibGVBY2Nlc3NEYXRhKCktPm9wZXJhbmQo
KTsKICAgICB9CiAgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVMb2NhbCgpCkBAIC05
OTYsNyArOTk5LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdmFyaWFibGVBY2Nlc3NEYXRh
KCktPm1hY2hpbmVMb2NhbCgpOwogICAgIH0KICAgICAKLSAgICBib29sIGhhc1VubGlua2VkTG9j
YWwoKQorICAgIGJvb2wgaGFzVW5saW5rZWRPcGVyYW5kKCkKICAgICB7CiAgICAgICAgIHN3aXRj
aCAob3AoKSkgewogICAgICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgpAQCAtMTAwOSwx
MCArMTAxMiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgVmlydHVh
bFJlZ2lzdGVyIHVubGlua2VkTG9jYWwoKQorICAgIE9wZXJhbmQgdW5saW5rZWRPcGVyYW5kKCkK
ICAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNVbmxpbmtlZExvY2FsKCkpOwotICAgICAgICByZXR1
cm4gVmlydHVhbFJlZ2lzdGVyKG1fb3BJbmZvLmFzPGludDMyX3Q+KCkpOworICAgICAgICBBU1NF
UlQoaGFzVW5saW5rZWRPcGVyYW5kKCkpOworICAgICAgICByZXR1cm4gT3BlcmFuZDo6ZnJvbUJp
dHMobV9vcEluZm8uYXM8dWludDY0X3Q+KCkpOwogICAgIH0KICAgICAKICAgICBib29sIGhhc1N0
YWNrQWNjZXNzRGF0YSgpCkBAIC0xMzYzLDcgKzEzNjYsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Ym9vbCBoYXNMb2FkVmFyYXJnc0RhdGEoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkgPT0g
TG9hZFZhcmFyZ3MgfHwgb3AoKSA9PSBGb3J3YXJkVmFyYXJnczsKKyAgICAgICAgcmV0dXJuIG9w
KCkgPT0gTG9hZFZhcmFyZ3MgfHwgb3AoKSA9PSBGb3J3YXJkVmFyYXJncyB8fCBvcCgpID09IFZh
cmFyZ3NMZW5ndGg7CiAgICAgfQogICAgIAogICAgIExvYWRWYXJhcmdzRGF0YSogbG9hZFZhcmFy
Z3NEYXRhKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCBjMDQ3
YzZlNzE4MjU5YWE5NWY1ZDEzYWFhODcwZjgxNzE0NjFjY2ViLi43YzZkMWIyYWZjNWFmZjQ3NDc2
ODEwM2E1ZTEzZDNhMjIyNmNhNmZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVUeXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCkBAIC03NCw2ICs3NCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
ICAgICBtYWNybyhHZXRMb2NhbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAog
ICAgIG1hY3JvKFNldExvY2FsLCAwKSBcCiAgICAgXAorICAgIC8qIFRoZXNlIGFyZSB1c2VkIGlu
IFNTQSBmb3JtIHRvIHJlcHJlc2VudCB0byB0cmFjayAqL1wKICAgICBtYWNybyhQdXRTdGFjaywg
Tm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEtpbGxTdGFjaywgTm9kZU11c3RHZW5lcmF0
ZSkgXAogICAgIG1hY3JvKEdldFN0YWNrLCBOb2RlUmVzdWx0SlMpIFwKQEAgLTIwMiw2ICsyMDMs
NyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oR2V0QnlWYWxX
aXRoVGhpcywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdl
dE15QXJndW1lbnRCeVZhbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAg
IG1hY3JvKEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzLCBOb2RlUmVzdWx0SlMgfCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oVmFyYXJnc0xlbmd0aCwgTm9kZU11c3RHZW5lcmF0
ZSB8IE5vZGVSZXN1bHRJbnQzMikgXAogICAgIG1hY3JvKExvYWRWYXJhcmdzLCBOb2RlTXVzdEdl
bmVyYXRlKSBcCiAgICAgbWFjcm8oRm9yd2FyZFZhcmFyZ3MsIE5vZGVNdXN0R2VuZXJhdGUpIFwK
ICAgICBtYWNybyhQdXRCeVZhbERpcmVjdCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJB
cmdzKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAppbmRleCA3OWJjNzk2ODMxMTMwYzAzN2Q1
NDcwYzBlNzlkNWIwZDk5NTYyNjNmLi5mNTlmNTg5NzIwNDM0ZGY0Y2Q2ZWI4YWZmNDVhMWE1Mzlk
OTMyNmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKQEAgLTM1LDExICszNSw5IEBACiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
Ci1uYW1lc3BhY2UgREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFsIHsKLXN0
YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci19CiAKIGNsYXNzIE9TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBwdWJsaWM6CiAgICAgT1NSQXZhaWxhYmlsaXR5QW5h
bHlzaXNQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJPU1IgYXZh
aWxhYmlsaXR5IGFuYWx5c2lzIikKQEAgLTc1LDggKzczLDggQEAgcHVibGljOgogICAgICAgICAg
ICAgZGF0YUxvZygiTGl2ZTogIik7CiAgICAgICAgICAgICBtX2dyYXBoLmZvckFsbExpdmVJbkJ5
dGVjb2RlKAogICAgICAgICAgICAgICAgIGJsb2NrLT5hdCgwKS0+b3JpZ2luLmZvckV4aXQsCi0g
ICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2cocmVnLCAiICIpOworICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCBv
cGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2cob3BlcmFuZCwgIiAiKTsKICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGRhdGFMb2dMbigiIik7CiAgICAgICAgIH07
CkBAIC05MSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQog
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBpZiAoREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFsOjp2ZXJi
b3NlKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZ0xuKCJCZWZvcmUgY2hhbmdpbmcgQmxvY2sgIyIsIGJsb2NrLT5pbmRleCk7CiAg
ICAgICAgICAgICAgICAgICAgIGR1bXBBdmFpbGFiaWxpdHkoYmxvY2spOwogICAgICAgICAgICAg
ICAgIH0KQEAgLTEwNiw3ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgYmxvY2st
PnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsID0gY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eTsKICAg
ICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKIAotICAgICAgICAgICAgICAgIGlmIChERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkFm
dGVyIGNoYW5naW5nIEJsb2NrICMiLCBibG9jay0+aW5kZXgpOwogICAgICAgICAgICAgICAgICAg
ICBkdW1wQXZhaWxhYmlsaXR5KGJsb2NrKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMjAsNyAr
MTE4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNz
b3IgPSBibG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsKICAgICAgICAgICAgICAgICAg
ICAgc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5wcnVuZUJ5TGl2ZW5lc3MoCiAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBzdWNjZXNzb3ItPmF0KDApLT5vcmlnaW4u
Zm9yRXhpdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdPU1JBdmFpbGFiaWxpdHlBbmFs
eXNpc1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZl
cmJvc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiQWZ0ZXIgcHJ1bmlu
ZyBCbG9jayAjIiwgc3VjY2Vzc29yLT5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBk
dW1wQXZhaWxhYmlsaXR5KHN1Y2Nlc3Nvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBkdW1w
Qnl0ZWNvZGVMaXZlbmVzc0F0SGVhZChzdWNjZXNzb3IpOwpAQCAtMjA4LDI4ICsyMDYsMjggQEAg
dm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKE5vZGUqIG5v
ZGUpCiAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBQdXRTdGFjazogewogICAg
ICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAg
ICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5sb2NhbCkuc2V0Rmx1
c2goZGF0YS0+Zmx1c2hlZEF0KCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5v
cGVyYW5kKGRhdGEtPm9wZXJhbmQpLnNldEZsdXNoKGRhdGEtPmZsdXNoZWRBdCgpKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEtpbGxTdGFjazogewotICAgICAg
ICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSku
c2V0Rmx1c2goRmx1c2hlZEF0KENvbmZsaWN0aW5nRmx1c2gpKTsKKyAgICAgICAgbV9hdmFpbGFi
aWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkuc2V0Rmx1c2go
Rmx1c2hlZEF0KENvbmZsaWN0aW5nRmx1c2gpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAg
ICAgY2FzZSBHZXRTdGFjazogewogICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2Rl
LT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3Bl
cmFuZChkYXRhLT5sb2NhbCkgPSBBdmFpbGFiaWxpdHkobm9kZSwgZGF0YS0+Zmx1c2hlZEF0KCkp
OworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPm9wZXJhbmQp
ID0gQXZhaWxhYmlsaXR5KG5vZGUsIGRhdGEtPmZsdXNoZWRBdCgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCiAgICAgY2FzZSBNb3ZIaW50OiB7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1f
bG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKS5zZXROb2RlKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9k
ZS0+dW5saW5rZWRPcGVyYW5kKCkpLnNldE5vZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgIG1f
YXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKS5zZXRO
b2RlVW5hdmFpbGFibGUoKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFu
ZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkuc2V0Tm9kZVVuYXZhaWxhYmxlKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIApAQCAtMjM3LDIwICsyMzUsMjMgQEAgdm9pZCBMb2NhbE9TUkF2YWls
YWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgICAgIHVuc2ln
bmVkIGVudHJ5cG9pbnRJbmRleCA9IG5vZGUtPmVudHJ5cG9pbnRJbmRleCgpOwogICAgICAgICBj
b25zdCBWZWN0b3I8Rmx1c2hGb3JtYXQ+JiBhcmd1bWVudEZvcm1hdHMgPSBtX2dyYXBoLm1fYXJn
dW1lbnRGb3JtYXRzW2VudHJ5cG9pbnRJbmRleF07CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJn
dW1lbnQgPSBhcmd1bWVudEZvcm1hdHMuc2l6ZSgpOyBhcmd1bWVudC0tOyApIHsKLSAgICAgICAg
ICAgIEZsdXNoZWRBdCBmbHVzaGVkQXQgPSBGbHVzaGVkQXQoYXJndW1lbnRGb3JtYXRzW2FyZ3Vt
ZW50XSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICAgICAgICAg
IEZsdXNoZWRBdCBmbHVzaGVkQXQgPSBGbHVzaGVkQXQoYXJndW1lbnRGb3JtYXRzW2FyZ3VtZW50
XSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50KSk7CiAg
ICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5hcmd1bWVudChhcmd1bWVudCkgPSBB
dmFpbGFiaWxpdHkoZmx1c2hlZEF0KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9
Ci0gICAgICAgIAorCisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKwogICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczog
ewogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEo
KTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5jb3VudCkg
PQotICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSW50MzIsIGRhdGEt
Pm1hY2hpbmVDb3VudCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5k
KGRhdGEtPmNvdW50KSA9IEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEludDMyLCBkYXRh
LT5tYWNoaW5lQ291bnQpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7
IGktLTspIHsKLSAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoVmly
dHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkpID0KLSAgICAgICAgICAgICAg
ICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIo
ZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpICsgaSkpKTsKKyAgICAgICAgICAgIG1fYXZhaWxh
YmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+c3RhcnQgKyBpKSA9CisgICAgICAgICAgICAg
ICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgZGF0YS0+bWFjaGluZVN0
YXJ0ICsgaSkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTI3MiwyMCAr
MjczLDIwIEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9k
ZShOb2RlKiBub2RlKQogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkg
ewogICAgICAgICAgICAgLy8gUmVjb3JkIGhvdyB0byByZWFkIGVhY2ggYXJndW1lbnQgYW5kIHRo
ZSBhcmd1bWVudCBjb3VudC4KICAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBhcmd1bWVudENvdW50
ID0KLSAgICAgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyk7CisgICAgICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3Bl
cmFuZChWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQoUHJvbW90ZWRIZWFwTG9jYXRpb24o
QXJndW1lbnRDb3VudFBMb2MsIG5vZGUpLCBhcmd1bWVudENvdW50KTsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkgewogICAg
ICAgICAgICAgQXZhaWxhYmlsaXR5IGNhbGxlZSA9IG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9w
ZXJhbmQoCi0gICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKICAg
ICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQoUHJvbW90ZWRIZWFwTG9jYXRpb24o
QXJndW1lbnRzQ2FsbGVlUExvYywgbm9kZSksIGNhbGxlZSk7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOyBpIDwg
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7ICsraSkgewor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgaSA8IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzIC0gMSk7ICsraSkgewogICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGFyZ3VtZW50ID0g
bV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZCgKLSAgICAgICAgICAgICAgICBpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChpKSk7Cisg
ICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkpKSk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQoUHJvbW90ZWRIZWFwTG9jYXRpb24oQXJn
dW1lbnRQTG9jLCBub2RlLCBpKSwgYXJndW1lbnQpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCmluZGV4IDQ0OTczMDgzOWM5NDQ1MDcyNTcxYTVi
MGM3Yzk0Yjg0M2U4OTBkYzcuLjc3N2VhNmY0MDk2YmU3NGVlMjE2MDg5YzZiMzY4ZmYwZTNkNmZm
M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCkBAIC03Niw3
ICs3Niw3IEBAIHZvaWQgT1NSRW50cnlEYXRhOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBv
dXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogICAgIENvbW1hUHJpbnRlciBjb21tYTsK
ICAgICBmb3IgKHNpemVfdCBhcmd1bWVudEluZGV4ID0gbV9leHBlY3RlZFZhbHVlcy5udW1iZXJP
ZkFyZ3VtZW50cygpOyBhcmd1bWVudEluZGV4LS07KSB7CiAgICAgICAgIG91dC5wcmludChjb21t
YSwgImFyZyIsIGFyZ3VtZW50SW5kZXgsICI6Iik7Ci0gICAgICAgIHByaW50T3BlcmFuZCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudEluZGV4KSk7CisgICAgICAgIHByaW50T3Bl
cmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoYXJndW1lbnRJbmRl
eCkpOwogICAgIH0KICAgICBmb3IgKHNpemVfdCBsb2NhbEluZGV4ID0gMDsgbG9jYWxJbmRleCA8
IG1fZXhwZWN0ZWRWYWx1ZXMubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbEluZGV4KSB7CiAgICAg
ICAgIG91dC5wcmludChjb21tYSwgImxvYyIsIGxvY2FsSW5kZXgsICI6Iik7CkBAIC0zMjIsNyAr
MzIyLDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY28KICAgICAKICAgICAvLyA3KSBGaXggdGhl
IGNhbGwgZnJhbWUgdG8gaGF2ZSB0aGUgcmlnaHQgY29kZSBibG9jay4KICAgICAKLSAgICAqYml0
d2lzZV9jYXN0PENvZGVCbG9jayoqPihwaXZvdCAtIDEgLSBDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spID0gY29kZUJsb2NrOworICAgICpiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKio+KHBpdm90IC0g
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayArIDEpKSA9IGNvZGVCbG9jazsKICAgICAKICAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQogICAgICAgICBkYXRhTG9nRigiICAgIE9TUiByZXR1
cm5pbmcgZGF0YSBidWZmZXIgJXAuXG4iLCBzY3JhdGNoKTsKQEAgLTM1MSw3ICszNTEsNyBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFyZUNhdGNo
T1NSRW50cnkoVk0mIHZtLCBDYWxsRgogCiAgICAgLy8gV2UncmUgb25seSBhbGxvd2VkIHRvIE9T
UiBlbnRlciBpZiB3ZSd2ZSBwcm92ZW4gd2UgaGF2ZSBjb21wYXRpYmxlIGFyZ3VtZW50IHR5cGVz
LgogICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGNhdGNoRW50cnlw
b2ludC0+YXJndW1lbnRGb3JtYXRzLnNpemUoKTsgKythcmd1bWVudCkgewotICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KGFyZ3VtZW50KSkuanNWYWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRSKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhh
cmd1bWVudCkpLmpzVmFsdWUoKTsKICAgICAgICAgc3dpdGNoIChjYXRjaEVudHJ5cG9pbnQtPmFy
Z3VtZW50Rm9ybWF0c1thcmd1bWVudF0pIHsKICAgICAgICAgY2FzZSBERkc6OkZsdXNoZWRJbnQz
MjoKICAgICAgICAgICAgIGlmICghdmFsdWUuaXNJbnQzMigpKQpAQCAtMzgyLDEwICszODIsMTAg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IHByZXBhcmVD
YXRjaE9TUkVudHJ5KFZNJiB2bSwgQ2FsbEYKIAogICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBiYXNl
bGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4
KCkpOwogICAgIEFTU0VSVChpbnN0cnVjdGlvbi0+aXM8T3BDYXRjaD4oKSk7Ci0gICAgVmFsdWVQ
cm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+
KCkubWV0YWRhdGEoYmFzZWxpbmVDb2RlQmxvY2spLm1fYnVmZmVyOworICAgIFZhbHVlUHJvZmls
ZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0
Y2g+KCkubWV0YWRhdGEoYmFzZWxpbmVDb2RlQmxvY2spLm1fYnVmZmVyOwogICAgIEpTVmFsdWUq
IGRhdGFCdWZmZXIgPSByZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihkZmdDb21tb24tPmNhdGNo
T1NSRW50cnlCdWZmZXItPmRhdGFCdWZmZXIoKSk7CiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwot
ICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUp
IHsKKyAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXImIHByb2ZpbGUpIHsKICAgICAgICAgaWYgKCFWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29w
ZXJhbmQpLmlzTG9jYWwoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZGF0YUJ1ZmZl
cltpbmRleF0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIocHJvZmlsZS5tX29wZXJhbmQpLmpzVmFs
dWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlw
b2ludENyZWF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKaW5kZXggZGM3NmJjYmFlZDQxZWVlMDYzZGZkYmVh
ODQ1MDY2NTUzZDBjYjRkNi4uNjA5Njg2NjNiNjRjMmI2ODU0ZTQ2MTYxZjk0OTk0NjU3ZTFhZWZk
NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50
Q3JlYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKQEAgLTEwMiwxMCArMTAyLDEwIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBwcmV2aW91c0hlYWQt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgbG9jYWxzW2xvY2FsXSA9IG5ld1Jv
b3QtPmFwcGVuZE5vZGUoCiAgICAgICAgICAgICAgICAgbV9ncmFwaCwgdmFyaWFibGUtPnByZWRp
Y3Rpb24oKSwgRXh0cmFjdE9TUkVudHJ5TG9jYWwsIG9yaWdpbiwKLSAgICAgICAgICAgICAgICBP
cEluZm8odmFyaWFibGUtPmxvY2FsKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICBPcElu
Zm8odmFyaWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSkpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBuZXdSb290LT5hcHBlbmROb2RlKAotICAgICAgICAgICAgICAgIG1fZ3Jh
cGgsIFNwZWNOb25lLCBNb3ZIaW50LCBvcmlnaW4sIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5v
ZmZzZXQoKSksCisgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIE1vdkhpbnQsIG9y
aWdpbiwgT3BJbmZvKHZhcmlhYmxlLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkpLAogICAg
ICAgICAgICAgICAgIEVkZ2UobG9jYWxzW2xvY2FsXSkpOwogICAgICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCmluZGV4IDFiOGUyNzhlNGQ1ZWUxMmRhMDk2
YzBlOTAxYThjZjQ5M2RmYjJmYzYuLjIzOWRmNTJhODI5MmEyYjM1Y2U2Zjc3MjU2OGZlN2NjOWM2
ZDNhODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcApAQCAtMzAs
NiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiQnl0
ZWNvZGVVc2VEZWYuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgog
I2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5j
bHVkZSAiREZHTWF5RXhpdC5oIgpAQCAtNDcsODk1ICs0OCw2IEBACiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAotLy8gUHJvYmUgYmFzZWQgT1NSIEV4aXQuCi0KLXVzaW5nIENQ
VVN0YXRlID0gUHJvYmU6OkNQVVN0YXRlOwotdXNpbmcgQ29udGV4dCA9IFByb2JlOjpDb250ZXh0
OwotdXNpbmcgRnJhbWUgPSBQcm9iZTo6RnJhbWU7Ci0KLXN0YXRpYyB2b2lkIHJlaWZ5SW5saW5l
ZENhbGxGcmFtZXMoUHJvYmU6OkNvbnRleHQmLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2Nr
LCBjb25zdCBPU1JFeGl0QmFzZSYpOwotc3RhdGljIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0
KFByb2JlOjpDb250ZXh0JiwgVk0mLCBDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29k
ZUJsb2NrLCBPU1JFeGl0Jik7Ci1zdGF0aWMgdm9pZCBwcmludE9TUkV4aXQoQ29udGV4dCYsIHVp
bnQzMl90IG9zckV4aXRJbmRleCwgY29uc3QgT1NSRXhpdCYpOwotCi1zdGF0aWMgSlNWYWx1ZSBq
c1ZhbHVlRm9yKENQVVN0YXRlJiBjcHUsIEpTVmFsdWVTb3VyY2Ugc291cmNlKQotewotICAgIGlm
IChzb3VyY2UuaXNBZGRyZXNzKCkpIHsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQ7Ci0gICAgICAg
IHN0ZDo6bWVtY3B5KCZyZXN1bHQsIGNwdS5ncHI8dWludDhfdCo+KHNvdXJjZS5iYXNlKCkpICsg
c291cmNlLm9mZnNldCgpLCBzaXplb2YoSlNWYWx1ZSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIH0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUo
Y3B1LmdwcjxFbmNvZGVkSlNWYWx1ZT4oc291cmNlLmdwcigpKSk7Ci0jZWxzZQotICAgIGlmIChz
b3VyY2UuaGFzS25vd25UYWcoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoc291cmNlLnRhZygp
LCBjcHUuZ3ByPGludDMyX3Q+KHNvdXJjZS5wYXlsb2FkR1BSKCkpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZShjcHUuZ3ByPGludDMyX3Q+KHNvdXJjZS50YWdHUFIoKSksIGNwdS5ncHI8aW50MzJfdD4o
c291cmNlLnBheWxvYWRHUFIoKSkpOwotI2VuZGlmCi19Ci0KLSNpZiBOVU1CRVJfT0ZfQ0FMTEVF
X1NBVkVTX1JFR0lTVEVSUyA+IDAKLQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjplbWl0
UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCkuCi1zdGF0aWMgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNG
b3IoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAgQVNTRVJU
KGNvZGVCbG9jayk7Ci0KLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2
ZXMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlclNldCBk
b250UmVzdG9yZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lz
dGVycygpLCBSZWdpc3RlclNldDo6YWxsRlBScygpKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNv
dW50ID0gY2FsbGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIFVDUFVSZWdpc3RlciogcGh5c2ljYWxT
dGFja0ZyYW1lID0gY29udGV4dC5mcDxVQ1BVUmVnaXN0ZXIqPigpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9m
ZnNldCBlbnRyeSA9IGNhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRSZXN0b3Jl
UmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgLy8gVGhlIGNhbGxlZSBzYXZlZCB2YWx1ZXMgY29tZSBmcm9tIHRoZSBvcmlnaW5hbCBzdGFj
aywgbm90IHRoZSByZWNvdmVyZWQgc3RhY2suCi0gICAgICAgIC8vIEhlbmNlLCB3ZSByZWFkIHRo
ZSB2YWx1ZXMgZGlyZWN0bHkgZnJvbSB0aGUgcGh5c2ljYWwgc3RhY2sgbWVtb3J5IGluc3RlYWQg
b2YKLSAgICAgICAgLy8gZ29pbmcgdGhyb3VnaCBjb250ZXh0LnN0YWNrKCkuCi0gICAgICAgIEFT
U0VSVCghKGVudHJ5Lm9mZnNldCgpICUgc2l6ZW9mKFVDUFVSZWdpc3RlcikpKTsKLSAgICAgICAg
Y29udGV4dC5ncHIoZW50cnkucmVnKCkuZ3ByKCkpID0gcGh5c2ljYWxTdGFja0ZyYW1lW2VudHJ5
Lm9mZnNldCgpIC8gc2l6ZW9mKFVDUFVSZWdpc3RlcildOwotICAgIH0KLX0KLQotLy8gQmFzZWQg
b24gQXNzZW1ibHlIZWxwZXJzOjplbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKCkuCi1zdGF0aWMgdm9p
ZCBzYXZlQ2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCi17Ci0gICAgYXV0byYgc3RhY2sgPSBjb250ZXh0LnN0YWNrKCk7Ci0gICAgQVNTRVJUKGNv
ZGVCbG9jayk7Ci0KLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZXMg
PSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlclNldCBkb250
U2F2ZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygp
LCBSZWdpc3RlclNldDo6YWxsRlBScygpKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0g
Y2FsbGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdp
c3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGNhbGxl
ZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRTYXZlUmVnaXN0ZXJzLmdldChlbnRyeS5y
ZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgc3RhY2suc2V0KGNvbnRleHQu
ZnAoKSwgZW50cnkub2Zmc2V0KCksIGNvbnRleHQuZ3ByPFVDUFVSZWdpc3Rlcj4oZW50cnkucmVn
KCkuZ3ByKCkpKTsKLSAgICB9Ci19Ci0KLS8vIEJhc2VkIG9uIEFzc2VtYmx5SGVscGVyczo6cmVz
dG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCkuCi1zdGF0
aWMgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIoQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0qPigp
OwotCi0gICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJT
ZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwotICAgIFJlZ2lzdGVyU2V0IGRvbnRS
ZXN0b3JlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7Ci0gICAgdW5z
aWduZWQgcmVnaXN0ZXJDb3VudCA9IGFsbENhbGxlZVNhdmVzLT5zaXplKCk7Ci0KLSAgICBWTUVu
dHJ5UmVjb3JkKiBlbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQodm0udG9wRW50cnlGcmFtZSk7
Ci0gICAgVUNQVVJlZ2lzdGVyKiBjYWxsZWVTYXZlQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxV
Q1BVUmVnaXN0ZXIqPihlbnRyeVJlY29yZC0+Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlcik7Ci0K
LSAgICAvLyBSZXN0b3JlIGFsbCBjYWxsZWUgc2F2ZXMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVu
dHJ5ID0gYWxsQ2FsbGVlU2F2ZXMtPmF0KGkpOwotICAgICAgICBpZiAoZG9udFJlc3RvcmVSZWdp
c3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBz
aXplX3QgdWludHB0ck9mZnNldCA9IGVudHJ5Lm9mZnNldCgpIC8gc2l6ZW9mKFVDUFVSZWdpc3Rl
cik7Ci0gICAgICAgIGlmIChlbnRyeS5yZWcoKS5pc0dQUigpKQotICAgICAgICAgICAgY29udGV4
dC5ncHIoZW50cnkucmVnKCkuZ3ByKCkpID0gY2FsbGVlU2F2ZUJ1ZmZlclt1aW50cHRyT2Zmc2V0
XTsKLSAgICAgICAgZWxzZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGNvbnRl
eHQuZnByKGVudHJ5LnJlZygpLmZwcigpKSA9IGJpdHdpc2VfY2FzdDxkb3VibGU+KGNhbGxlZVNh
dmVCdWZmZXJbdWludHB0ck9mZnNldF0pOwotI2Vsc2UKLSAgICAgICAgICAgIC8vIEZJWE1FOiA8
aHR0cHM6Ly93ZWJraXQub3JnL2IvMTkzMjc1PiBzdXBwb3J0IGNhbGxlZS1zYXZlZCBmbG9hdGlu
ZyBwb2ludCByZWdpc3RlcnMgb24gMzItYml0IGFyY2hpdGVjdHVyZXMKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgIH0KLX0K
LQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKCkuCi1zdGF0aWMgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb1ZN
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgVk0m
IHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLSAgICBhdXRvJiBzdGFjayA9IGNvbnRleHQuc3Rh
Y2soKTsKLQotICAgIFZNRW50cnlSZWNvcmQqIGVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29yZCh2
bS50b3BFbnRyeUZyYW1lKTsKLSAgICB2b2lkKiBjYWxsZWVTYXZlQnVmZmVyID0gZW50cnlSZWNv
cmQtPmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXI7Ci0KLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlz
dCogYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJPZmZz
ZXRzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udENvcHlSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6
c3RhY2tSZWdpc3RlcnMoKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVl
U2F2ZXMtPnNpemUoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNv
dW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGFsbENhbGxlZVNh
dmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRDb3B5UmVnaXN0ZXJzLmdldChlbnRyeS5yZWco
KSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGVudHJ5LnJlZygpLmlzR1BS
KCkpCi0gICAgICAgICAgICBzdGFjay5zZXQoY2FsbGVlU2F2ZUJ1ZmZlciwgZW50cnkub2Zmc2V0
KCksIGNvbnRleHQuZ3ByPFVDUFVSZWdpc3Rlcj4oZW50cnkucmVnKCkuZ3ByKCkpKTsKLSAgICAg
ICAgZWxzZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIHN0YWNrLnNldChjYWxs
ZWVTYXZlQnVmZmVyLCBlbnRyeS5vZmZzZXQoKSwgY29udGV4dC5mcHI8VUNQVVJlZ2lzdGVyPihl
bnRyeS5yZWcoKS5mcHIoKSkpOwotI2Vsc2UKLSAgICAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6
Ly93ZWJraXQub3JnL2IvMTkzMjc1PiBzdXBwb3J0IGNhbGxlZS1zYXZlZCBmbG9hdGluZyBwb2lu
dCByZWdpc3RlcnMgb24gMzItYml0IGFyY2hpdGVjdHVyZXMKLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8g
QmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjplbWl0U2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKCku
Ci1zdGF0aWMgdm9pZCBzYXZlT3JDb3B5Q2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYgY29udGV4dCwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFZpcnR1YWxSZWdpc3RlciBvZmZzZXRWaXJ0dWFsUmVnaXN0
ZXIsIGJvb2wgd2FzQ2FsbGVkVmlhVGFpbENhbGwpCi17Ci0gICAgRnJhbWUgZnJhbWUoY29udGV4
dC5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOwotICAgIEFTU0VSVChjb2RlQmxvY2spOwotCi0gICAg
Y29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVzID0gY29kZUJsb2NrLT5jYWxs
ZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udFNhdmVSZWdpc3RlcnMgPSBS
ZWdpc3RlclNldChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6OmFs
bEZQUnMoKSk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGNhbGxlZVNhdmVzLT5zaXpl
KCk7Ci0KLSAgICBSZWdpc3RlclNldCBiYXNlbGluZUNhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6
OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZz
ZXQgZW50cnkgPSBjYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250U2F2ZVJlZ2lz
dGVycy5nZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
dWludHB0cl90IHNhdmVkUmVnaXN0ZXJWYWx1ZTsKLQotICAgICAgICBpZiAod2FzQ2FsbGVkVmlh
VGFpbENhbGwgJiYgYmFzZWxpbmVDYWxsZWVTYXZlcy5nZXQoZW50cnkucmVnKCkpKQotICAgICAg
ICAgICAgc2F2ZWRSZWdpc3RlclZhbHVlID0gZnJhbWUuZ2V0PHVpbnRwdHJfdD4oZW50cnkub2Zm
c2V0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzYXZlZFJlZ2lzdGVyVmFsdWUgPSBj
b250ZXh0LmdwcihlbnRyeS5yZWcoKS5ncHIoKSk7Ci0KLSAgICAgICAgZnJhbWUuc2V0KG9mZnNl
dFZpcnR1YWxSZWdpc3Rlci5vZmZzZXRJbkJ5dGVzKCkgKyBlbnRyeS5vZmZzZXQoKSwgc2F2ZWRS
ZWdpc3RlclZhbHVlKTsKLSAgICB9Ci19Ci0jZWxzZSAvLyBub3QgTlVNQkVSX09GX0NBTExFRV9T
QVZFU19SRUdJU1RFUlMgPiAwCi0KLXN0YXRpYyB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0ZvcihD
b250ZXh0JiwgQ29kZUJsb2NrKikgeyB9Ci1zdGF0aWMgdm9pZCBzYXZlQ2FsbGVlU2F2ZXNGb3Io
Q29udGV4dCYsIENvZGVCbG9jayopIHsgfQotc3RhdGljIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVz
RnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQmKSB7IH0KLXN0YXRpYyB2
b2lkIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoQ29udGV4
dCYpIHsgfQotc3RhdGljIHZvaWQgc2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKENvbnRleHQmLCBD
b2RlQmxvY2sqLCBWaXJ0dWFsUmVnaXN0ZXIsIGJvb2wpIHsgfQotCi0jZW5kaWYgLy8gTlVNQkVS
X09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCi0KLXN0YXRpYyBKU0NlbGwqIGNyZWF0ZURp
cmVjdEFyZ3VtZW50c0R1cmluZ0V4aXQoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBjYWxs
ZWUsIGludDMyX3QgYXJndW1lbnRDb3VudCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8
Vk0qPigpOwotCi0gICAgQVNTRVJUKHZtLmhlYXAuaXNEZWZlcnJlZCgpKTsKLQotICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9y
SW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGgg
PSBhcmd1bWVudENvdW50IC0gMTsKLSAgICB1bnNpZ25lZCBjYXBhY2l0eSA9IHN0ZDo6bWF4KGxl
bmd0aCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpIC0g
MSkpOwotICAgIERpcmVjdEFyZ3VtZW50cyogcmVzdWx0ID0gRGlyZWN0QXJndW1lbnRzOjpjcmVh
dGUoCi0gICAgICAgIHZtLCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5kaXJlY3RBcmd1bWVu
dHNTdHJ1Y3R1cmUoKSwgbGVuZ3RoLCBjYXBhY2l0eSk7Ci0KLSAgICByZXN1bHQtPnNldENhbGxl
ZSh2bSwgY2FsbGVlKTsKLQotICAgIHZvaWQqIGZyYW1lQmFzZSA9IGNvbnRleHQuZnA8UmVnaXN0
ZXIqPigpICsgKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
OiAwKTsKLSAgICBGcmFtZSBmcmFtZShmcmFtZUJhc2UsIGNvbnRleHQuc3RhY2soKSk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQotICAgICAgICByZXN1bHQtPnNldEluZGV4
UXVpY2tseSh2bSwgaSwgZnJhbWUuYXJndW1lbnQoaSkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotc3RhdGljIEpTQ2VsbCogY3JlYXRlQ2xvbmVkQXJndW1lbnRzRHVyaW5nRXhpdChDb250
ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUsIEpTRnVuY3Rpb24qIGNhbGxlZSwgaW50MzJfdCBhcmd1bWVudENvdW50KQot
ewotICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7Ci0KLSAgICBBU1NFUlQodm0uaGVh
cC5pc0RlZmVycmVkKCkpOwotCi0gICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgY29k
ZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZy
YW1lKTsKLQotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFyZ3VtZW50Q291bnQgLSAxOwot
ICAgIENsb25lZEFyZ3VtZW50cyogcmVzdWx0ID0gQ2xvbmVkQXJndW1lbnRzOjpjcmVhdGVFbXB0
eSgKLSAgICAgICAgdm0sIGdsb2JhbE9iamVjdC0+Y2xvbmVkQXJndW1lbnRzU3RydWN0dXJlKCks
IGNhbGxlZSwgbGVuZ3RoKTsKLQotICAgIHZvaWQqIGZyYW1lQmFzZSA9IGNvbnRleHQuZnA8UmVn
aXN0ZXIqPigpICsgKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgOiAwKTsKLSAgICBGcmFtZSBmcmFtZShmcmFtZUJhc2UsIGNvbnRleHQuc3RhY2soKSk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQotICAgICAgICByZXN1bHQtPnB1dERp
cmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaSwgZnJhbWUuYXJndW1lbnQoaSkpOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGVtaXRSZXN0b3JlQXJndW1lbnRzKENvbnRleHQm
IGNvbnRleHQsIENvZGVCbG9jayogY29kZUJsb2NrLCBERkc6OkpJVENvZGUqIGRmZ0pJVENvZGUs
IGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcykKLXsKLSAgICBGcmFtZSBm
cmFtZShjb250ZXh0LmZwKCksIGNvbnRleHQuc3RhY2soKSk7Ci0KLSAgICBIYXNoTWFwPE1pbmlm
aWVkSUQsIGludD4gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50czsgLy8gTWFwcyBwaGFudG9tIGFy
Z3VtZW50cyBub2RlIElEIHRvIG9wZXJhbmQuCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBp
bmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBjb25zdCBWYWx1ZVJl
Y292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgaW50IG9wZXJhbmQg
PSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOwotCi0gICAgICAgIGlmIChyZWNvdmVy
eS50ZWNobmlxdWUoKSAhPSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQKLSAgICAg
ICAgICAgICYmIHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IENsb25lZEFyZ3VtZW50c1RoYXRXZXJl
Tm90Q3JlYXRlZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIE1pbmlmaWVkSUQg
aWQgPSByZWNvdmVyeS5ub2RlSUQoKTsKLSAgICAgICAgYXV0byBpdGVyID0gYWxyZWFkeUFsbG9j
YXRlZEFyZ3VtZW50cy5maW5kKGlkKTsKLSAgICAgICAgaWYgKGl0ZXIgIT0gYWxyZWFkeUFsbG9j
YXRlZEFyZ3VtZW50cy5lbmQoKSkgewotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVy
YW5kLCBmcmFtZS5vcGVyYW5kKGl0ZXItPnZhbHVlKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgfQotCi0gICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0K
LSAgICAgICAgICAgIGRmZ0pJVENvZGUtPm1pbmlmaWVkREZHLmF0KGlkKS0+aW5saW5lQ2FsbEZy
YW1lKCk7Ci0KLSAgICAgICAgaW50IHN0YWNrT2Zmc2V0OwotICAgICAgICBpZiAoaW5saW5lQ2Fs
bEZyYW1lKQotICAgICAgICAgICAgc3RhY2tPZmZzZXQgPSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdGFja09mZnNldCA9IDA7Ci0KLSAg
ICAgICAgSlNGdW5jdGlvbiogY2FsbGVlOwotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8
fCBpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICBjYWxsZWUgPSBq
c0Nhc3Q8SlNGdW5jdGlvbio+KGZyYW1lLm9wZXJhbmQoc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVT
bG90OjpjYWxsZWUpLmFzQ2VsbCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbGVl
ID0ganNDYXN0PEpTRnVuY3Rpb24qPihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNv
bnN0YW50KCkuYXNDZWxsKCkpOwotCi0gICAgICAgIGludDMyX3QgYXJndW1lbnRDb3VudDsKLSAg
ICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3Mo
KSkKLSAgICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBmcmFtZS5vcGVyYW5kPGludDMyX3Q+KHN0
YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFBh
eWxvYWRPZmZzZXQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcmd1bWVudENvdW50ID0g
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKLQotICAgICAgICBK
U0NlbGwqIGFyZ3VtZW50c09iamVjdDsKLSAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlx
dWUoKSkgewotICAgICAgICBjYXNlIERpcmVjdEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoK
LSAgICAgICAgICAgIGFyZ3VtZW50c09iamVjdCA9IGNyZWF0ZURpcmVjdEFyZ3VtZW50c0R1cmlu
Z0V4aXQoY29udGV4dCwgY29kZUJsb2NrLCBpbmxpbmVDYWxsRnJhbWUsIGNhbGxlZSwgYXJndW1l
bnRDb3VudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDbG9uZWRBcmd1bWVu
dHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgICAgICBhcmd1bWVudHNPYmplY3QgPSBjcmVh
dGVDbG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0KGNvbnRleHQsIGNvZGVCbG9jaywgaW5saW5lQ2Fs
bEZyYW1lLCBjYWxsZWUsIGFyZ3VtZW50Q291bnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChv
cGVyYW5kLCBKU1ZhbHVlKGFyZ3VtZW50c09iamVjdCkpOwotCi0gICAgICAgIGFscmVhZHlBbGxv
Y2F0ZWRBcmd1bWVudHMuYWRkKGlkLCBvcGVyYW5kKTsKLSAgICB9Ci19Ci0KLS8vIFRoZSBmb2xs
b3dpbmcgaXMgYSBsaXN0IG9mIGV4dHJhIGluaXRpYWxpemF0aW9ucyB0aGF0IG5lZWQgdG8gYmUg
ZG9uZSBpbiBvcmRlcgotLy8gb2YgbW9zdCBsaWtlbHkgbmVlZGVkIChsb3dlciBlbnVtIHZhbHVl
KSB0byBsZWFzdCBsaWtlbHkgbmVlZGVkIChoaWdoZXIgZW51bSB2YWx1ZSkuCi0vLyBFYWNoIGxl
dmVsIGluaXRpYWxpemF0aW9uIGluY2x1ZGVzIHRoZSBwcmV2aW91cyBsb3dlciBlbnVtIHZhbHVl
IChzZWUgdXNlIG9mIHRoZQotLy8gZXh0cmFJbml0aWFsaXphdGlvbkxldmVsIHZhbHVlIGJlbG93
KS4KLWVudW0gY2xhc3MgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsIHsKLSAgICBOb25lLAotICAg
IFNwZWN1bGF0aW9uUmVjb3ZlcnksCi0gICAgVmFsdWVQcm9maWxlVXBkYXRlLAotICAgIEFycmF5
UHJvZmlsZVVwZGF0ZSwKLSAgICBPdGhlcgotfTsKLQotdm9pZCBPU1JFeGl0OjpleGVjdXRlT1NS
RXhpdChDb250ZXh0JiBjb250ZXh0KQotewotICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+
KCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7Ci0gICAgQVNTRVJU
KCZjYWxsRnJhbWUtPmRlcHJlY2F0ZWRWTSgpID09ICZ2bSk7Ci0gICAgYXV0byYgY3B1ID0gY29u
dGV4dC5jcHU7Ci0KLSAgICBpZiAodmFsaWRhdGVERkdEb2VzR0MpIHsKLSAgICAgICAgLy8gV2Un
cmUgYWJvdXQgdG8gZXhpdCBvcHRpbWl6ZWQgY29kZS4gU28sIHRoZXJlJ3Mgbm8gbG9uZ2VyIGFu
eSBvcHRpbWl6ZWQKLSAgICAgICAgLy8gY29kZSBydW5uaW5nIHRoYXQgZXhwZWN0cyBubyBHQy4K
LSAgICAgICAgdm0uaGVhcC5zZXRFeHBlY3REb2VzR0ModHJ1ZSk7Ci0gICAgfQotCi0gICAgaWYg
KHZtLmNhbGxGcmFtZUZvckNhdGNoKSB7Ci0gICAgICAgIGNhbGxGcmFtZSA9IHZtLmNhbGxGcmFt
ZUZvckNhdGNoOwotICAgICAgICBjb250ZXh0LmZwKCkgPSBjYWxsRnJhbWU7Ci0gICAgfQotCi0g
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIEFT
U0VSVChjb2RlQmxvY2spOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRU
eXBlOjpERkdKSVQpOwotCi0gICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFibGUgdGhhdCB3ZSBk
b24ndCBHQyB3aGlsZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3VsZG4ndAotICAgIC8v
IHJlYWxseSBiZSBwcm9maXRhYmxlLgotICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5o
ZWFwKTsKLQotICAgIHVpbnQzMl90IGV4aXRJbmRleCA9IHZtLm9zckV4aXRJbmRleDsKLSAgICBE
Rkc6OkpJVENvZGUqIGRmZ0pJVENvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCk7Ci0g
ICAgT1NSRXhpdCYgZXhpdCA9IGRmZ0pJVENvZGUtPm9zckV4aXRbZXhpdEluZGV4XTsKLQotICAg
IEFTU0VSVCghdm0uY2FsbEZyYW1lRm9yQ2F0Y2ggfHwgZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vu
d2luZCk7Ci0gICAgRVhDRVBUSU9OX0FTU0VSVF9VTlVTRUQoc2NvcGUsICEhc2NvcGUuZXhjZXB0
aW9uKCkgfHwgIWV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpOwotCi0gICAgaWYgKFVOTElLRUxZ
KCFleGl0LmV4aXRTdGF0ZSkpIHsKLSAgICAgICAgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsIGV4
dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6Tm9uZTsK
LQotICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gZXhlY3V0ZSB0aGlzIGJsb2NrIG9uY2UgZm9y
IGVhY2ggT1NSRXhpdCByZWNvcmQuIFRoZSBjb21wdXRlZAotICAgICAgICAvLyByZXN1bHRzIHdp
bGwgYmUgY2FjaGVkIGluIHRoZSBPU1JFeGl0U3RhdGUgcmVjb3JkIGZvciB1c2Ugb2YgdGhlIHJl
c3Qgb2YgdGhlCi0gICAgICAgIC8vIGV4aXQgcmFtcCBjb2RlLgotCi0gICAgICAgIENvZGVCbG9j
ayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsK
LSAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGJhc2VsaW5lQ29kZUJsb2Nr
LT5qaXRUeXBlKCkpKTsKLQotICAgICAgICBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSA9
IG51bGxwdHI7Ci0gICAgICAgIGlmIChleGl0Lm1fcmVjb3ZlcnlJbmRleCAhPSBVSU5UX01BWCkg
ewotICAgICAgICAgICAgcmVjb3ZlcnkgPSAmZGZnSklUQ29kZS0+c3BlY3VsYXRpb25SZWNvdmVy
eVtleGl0Lm1fcmVjb3ZlcnlJbmRleF07Ci0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9u
TGV2ZWwgPSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6
YXRpb25MZXZlbDo6U3BlY3VsYXRpb25SZWNvdmVyeSk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoVU5MSUtFTFkoZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCkpCi0gICAgICAgICAgICBl
eHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2
ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6T3RoZXIpOwotCi0gICAgICAgIEFycmF5UHJv
ZmlsZSogYXJyYXlQcm9maWxlID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKCEhZXhpdC5tX2pzVmFs
dWVTb3VyY2UpIHsKLSAgICAgICAgICAgIGlmIChleGl0Lm1fdmFsdWVQcm9maWxlKQotICAgICAg
ICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5pdGlh
bGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpWYWx1ZVByb2ZpbGVVcGRh
dGUpOwotICAgICAgICAgICAgaWYgKGV4aXQubV9raW5kID09IEJhZENhY2hlIHx8IGV4aXQubV9r
aW5kID09IEJhZEluZGV4aW5nVHlwZSkgewotICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGU7Ci0gICAgICAgICAgICAg
ICAgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3Jp
Z2luQW5kQmFzZWxpbmVDb2RlQmxvY2soY29kZU9yaWdpbiwgYmFzZWxpbmVDb2RlQmxvY2spOwot
ICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZSA9IHByb2ZpbGVkQ29kZUJsb2NrLT5nZXRBcnJh
eVByb2ZpbGUoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOwotICAgICAgICAgICAgICAgIGlm
IChhcnJheVByb2ZpbGUpCi0gICAgICAgICAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25M
ZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXph
dGlvbkxldmVsOjpBcnJheVByb2ZpbGVVcGRhdGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgaW50MzJfdCBhY3RpdmVUaHJlc2hvbGQgPSBiYXNlbGluZUNvZGVCbG9jay0+
YWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxv
bmdXYXJtVXAoKSk7Ci0gICAgICAgIGRvdWJsZSBhZGp1c3RlZFRocmVzaG9sZCA9IGFwcGx5TWVt
b3J5VXNhZ2VIZXVyaXN0aWNzQW5kQ29udmVydFRvSW50KGFjdGl2ZVRocmVzaG9sZCwgYmFzZWxp
bmVDb2RlQmxvY2spOwotICAgICAgICBBU1NFUlQoYWRqdXN0ZWRUaHJlc2hvbGQgPiAwKTsKLSAg
ICAgICAgYWRqdXN0ZWRUaHJlc2hvbGQgPSBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBw
ZWRUaHJlc2hvbGQoY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgYWRqdXN0ZWRUaHJlc2hvbGQp
OwotCi0gICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yRXhpdCA9IGJhc2VsaW5lQ29kZUJs
b2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soZXhpdC5tX2NvZGVPcmlnaW4sIGJhc2Vs
aW5lQ29kZUJsb2NrKTsKLSAgICAgICAgYm9vbCBleGl0VG9MTEludCA9IE9wdGlvbnM6OmZvcmNl
T1NSRXhpdFRvTExJbnQoKSB8fCBjb2RlQmxvY2tGb3JFeGl0LT5qaXRUeXBlKCkgPT0gSklUVHlw
ZTo6SW50ZXJwcmV0ZXJUaHVuazsKLSAgICAgICAgdm9pZCoganVtcFRhcmdldDsKLSAgICAgICAg
aWYgKGV4aXRUb0xMSW50KSB7Ci0gICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zm
c2V0ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwotICAgICAgICAgICAgY29u
c3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICpjb2RlQmxvY2tGb3JFeGl0LT5p
bnN0cnVjdGlvbnMoKS5hdChieXRlY29kZU9mZnNldCkucHRyKCk7Ci0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6Z2V0
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgICAgICAgICAg
anVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCk7ICAgIAotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgY29uc3QgSklUQ29kZU1hcCYgY29kZU1hcCA9IGNvZGVC
bG9ja0ZvckV4aXQtPmppdENvZGVNYXAoKTsKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlvbiA9IGNvZGVNYXAuZmluZChleGl0Lm1fY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4KCkpOwotICAgICAgICAgICAgQVNTRVJUKGNvZGVMb2NhdGlvbik7
Ci0gICAgICAgICAgICBqdW1wVGFyZ2V0ID0gY29kZUxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNz
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDb21wdXRlIHRoZSB2YWx1ZSByZWNvdmVyaWVz
LgotICAgICAgICBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiBvcGVyYW5kczsKLSAgICAgICAgVmVj
dG9yPFVuZGVmaW5lZE9wZXJhbmRTcGFuPiB1bmRlZmluZWRPcGVyYW5kU3BhbnM7Ci0gICAgICAg
IGRmZ0pJVENvZGUtPnZhcmlhYmxlRXZlbnRTdHJlYW0ucmVjb25zdHJ1Y3QoY29kZUJsb2NrLCBl
eGl0Lm1fY29kZU9yaWdpbiwgZGZnSklUQ29kZS0+bWluaWZpZWRERkcsIGV4aXQubV9zdHJlYW1J
bmRleCwgb3BlcmFuZHMsICZ1bmRlZmluZWRPcGVyYW5kU3BhbnMpOwotICAgICAgICBwdHJkaWZm
X3Qgc3RhY2tQb2ludGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oY29kZUJsb2Nr
LT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5yZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGl0KSAq
IHNpemVvZihSZWdpc3Rlcik7Ci0KLSAgICAgICAgZXhpdC5leGl0U3RhdGUgPSBhZG9wdFJlZihu
ZXcgT1NSRXhpdFN0YXRlKGV4aXQsIGNvZGVCbG9jaywgYmFzZWxpbmVDb2RlQmxvY2ssIG9wZXJh
bmRzLCBXVEZNb3ZlKHVuZGVmaW5lZE9wZXJhbmRTcGFucyksIHJlY292ZXJ5LCBzdGFja1BvaW50
ZXJPZmZzZXQsIGFjdGl2ZVRocmVzaG9sZCwgYWRqdXN0ZWRUaHJlc2hvbGQsIGp1bXBUYXJnZXQs
IGFycmF5UHJvZmlsZSwgZXhpdFRvTExJbnQpKTsKLQotICAgICAgICBpZiAoVU5MSUtFTFkodm0u
bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24o
KS0+Y29tcGlsYXRpb24pKSB7Ci0gICAgICAgICAgICBQcm9maWxlcjo6RGF0YWJhc2UmIGRhdGFi
YXNlID0gKnZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlcjsKLSAgICAgICAgICAgIFByb2ZpbGVyOjpD
b21waWxhdGlvbiogY29tcGlsYXRpb24gPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9u
KCktPmNvbXBpbGF0aW9uLmdldCgpOwotCi0gICAgICAgICAgICBQcm9maWxlcjo6T1NSRXhpdCog
cHJvZmlsZXJFeGl0ID0gY29tcGlsYXRpb24tPmFkZE9TUkV4aXQoCi0gICAgICAgICAgICAgICAg
ZXhpdEluZGV4LCBQcm9maWxlcjo6T3JpZ2luU3RhY2soZGF0YWJhc2UsIGNvZGVCbG9jaywgZXhp
dC5tX2NvZGVPcmlnaW4pLAotICAgICAgICAgICAgICAgIGV4aXQubV9raW5kLCBleGl0Lm1fa2lu
ZCA9PSBVbmNvdW50YWJsZUludmFsaWRhdGlvbik7Ci0gICAgICAgICAgICBleGl0LmV4aXRTdGF0
ZS0+cHJvZmlsZXJFeGl0ID0gcHJvZmlsZXJFeGl0OwotICAgICAgICAgICAgZXh0cmFJbml0aWFs
aXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUlu
aXRpYWxpemF0aW9uTGV2ZWw6Ok90aGVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChVTkxJ
S0VMWShPcHRpb25zOjpwcmludEVhY2hPU1JFeGl0KCkpKQotICAgICAgICAgICAgZXh0cmFJbml0
aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRy
YUluaXRpYWxpemF0aW9uTGV2ZWw6Ok90aGVyKTsKLQotICAgICAgICBleGl0LmV4aXRTdGF0ZS0+
ZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gZXh0cmFJbml0aWFsaXphdGlvbkxldmVsOwotCi0g
ICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlT1NSKCkgfHwgT3B0aW9uczo6dmVy
Ym9zZURGR09TUkV4aXQoKSkpIHsKLSAgICAgICAgICAgIGRhdGFMb2dGKCJERkcgT1NSIGV4aXQg
IyV1ICglcywgJXMpIGZyb20gJXMsIHdpdGggb3BlcmFuZHMgPSAlc1xuIiwKLSAgICAgICAgICAg
ICAgICBleGl0SW5kZXgsIHRvQ1N0cmluZyhleGl0Lm1fY29kZU9yaWdpbikuZGF0YSgpLAotICAg
ICAgICAgICAgICAgIGV4aXRLaW5kVG9TdHJpbmcoZXhpdC5tX2tpbmQpLCB0b0NTdHJpbmcoKmNv
ZGVCbG9jaykuZGF0YSgpLAotICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhpZ25vcmluZ0NvbnRl
eHQ8RHVtcENvbnRleHQ+KG9wZXJhbmRzKSkuZGF0YSgpKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIE9TUkV4aXRTdGF0ZSYgZXhpdFN0YXRlID0gKmV4aXQuZXhpdFN0YXRlLmdldCgpOwotICAg
IENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBleGl0U3RhdGUuYmFzZWxpbmVDb2RlQmxv
Y2s7Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGJhc2VsaW5lQ29kZUJsb2Nr
LT5qaXRUeXBlKCkpKTsKLQotICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcyA9
IGV4aXRTdGF0ZS5vcGVyYW5kczsKLSAgICBWZWN0b3I8VW5kZWZpbmVkT3BlcmFuZFNwYW4+JiB1
bmRlZmluZWRPcGVyYW5kU3BhbnMgPSBleGl0U3RhdGUudW5kZWZpbmVkT3BlcmFuZFNwYW5zOwot
Ci0gICAgY29udGV4dC5zcCgpID0gY29udGV4dC5mcDx1aW50OF90Kj4oKSArIGV4aXRTdGF0ZS5z
dGFja1BvaW50ZXJPZmZzZXQ7Ci0KLSAgICAvLyBUaGUgb25seSByZWFzb24gZm9yIHVzaW5nIHRo
aXMgZG8gd2hpbGUgbG9vcCBpcyBzbyB3ZSBjYW4gYnJlYWsgb3V0IG1pZHdheSB3aGVuIGFwcHJv
cHJpYXRlLgotICAgIGRvIHsKLSAgICAgICAgYXV0byBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwg
PSBzdGF0aWNfY2FzdDxFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw+KGV4aXRTdGF0ZS5leHRyYUlu
aXRpYWxpemF0aW9uTGV2ZWwpOwotCi0gICAgICAgIGlmIChleHRyYUluaXRpYWxpemF0aW9uTGV2
ZWwgPT0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpOb25lKQotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgLy8gQmVnaW4gZXh0cmEgaW5pdGlsaXphdGlvbiBsZXZlbDogU3BlY3VsYXRp
b25SZWNvdmVyeQotCi0gICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gc3BlY3VsYXRpb24gcmVjb3Zl
cnkgZmlyc3QgYmVjYXVzZSBhcnJheSBwcm9maWxpbmcgYW5kIHZhbHVlIHByb2ZpbGluZwotICAg
ICAgICAvLyBtYXkgcmVseSBvbiBhIHZhbHVlIHRoYXQgaXQgcmVjb3ZlcnMuIEhvd2V2ZXIsIHRo
YXQgZG9lc24ndCBtZWFuIHRoYXQgaXQgaXMgbGlrZWx5Ci0gICAgICAgIC8vIHRvIGhhdmUgYSBy
ZWNvdmVyeSB2YWx1ZS4gU28sIHdlJ2xsIGRlY29yYXRlIGl0IGFzIFVOTElLRUxZLgotICAgICAg
ICBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSA9IGV4aXRTdGF0ZS5yZWNvdmVyeTsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKHJlY292ZXJ5KSkgewotICAgICAgICAgICAgc3dpdGNoIChyZWNv
dmVyeS0+dHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkOgotICAgICAg
ICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPSBjcHUuZ3ByPHVpbnQzMl90Pihy
ZWNvdmVyeS0+ZGVzdCgpKSAtIGNwdS5ncHI8dWludDMyX3Q+KHJlY292ZXJ5LT5zcmMoKSk7Ci0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBBU1NFUlQoIShjcHUuZ3ByKHJlY292
ZXJ5LT5kZXN0KCkpID4+IDMyKSk7Ci0gICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+
ZGVzdCgpKSB8PSBKU1ZhbHVlOjpOdW1iZXJUYWc7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZFNlbGY6Ci0gICAgICAgICAg
ICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pihj
cHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5LT5kZXN0KCkpID4+IDEpIF4gMHg4MDAwMDAwMFU7Ci0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBBU1NFUlQoIShjcHUuZ3ByKHJlY292
ZXJ5LT5kZXN0KCkpID4+IDMyKSk7Ci0gICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+
ZGVzdCgpKSB8PSBKU1ZhbHVlOjpOdW1iZXJUYWc7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZEltbWVkaWF0ZToKLSAgICAg
ICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID0gKGNwdS5ncHI8dWludDMyX3Q+
KHJlY292ZXJ5LT5kZXN0KCkpIC0gcmVjb3ZlcnktPmltbWVkaWF0ZSgpKTsKLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgICAgICAgICAgICAgIEFTU0VSVCghKGNwdS5ncHIocmVjb3ZlcnktPmRlc3Qo
KSkgPj4gMzIpKTsKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpIHw9
IEpTVmFsdWU6Ok51bWJlclRhZzsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgICAgICBjYXNlIEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrOgotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA9IGNwdS5ncHIo
cmVjb3ZlcnktPmRlc3QoKSkgXiBKU1ZhbHVlOjpWYWx1ZUZhbHNlOwotI2VuZGlmCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV4dHJhSW5pdGlh
bGl6YXRpb25MZXZlbCA8PSBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OlNwZWN1bGF0aW9uUmVj
b3ZlcnkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBCZWdpbiBleHRyYSBpbml0
aWxpemF0aW9uIGxldmVsOiBWYWx1ZVByb2ZpbGVVcGRhdGUKLSAgICAgICAgSlNWYWx1ZSBwcm9m
aWxlZFZhbHVlOwotICAgICAgICBpZiAoISFleGl0Lm1fanNWYWx1ZVNvdXJjZSkgewotICAgICAg
ICAgICAgcHJvZmlsZWRWYWx1ZSA9IGpzVmFsdWVGb3IoY3B1LCBleGl0Lm1fanNWYWx1ZVNvdXJj
ZSk7Ci0gICAgICAgICAgICBpZiAoTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBwcm9maWxl
ID0gZXhpdC5tX3ZhbHVlUHJvZmlsZSkKLSAgICAgICAgICAgICAgICBwcm9maWxlLnJlcG9ydFZh
bHVlKHByb2ZpbGVkVmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChleHRyYUluaXRpYWxp
emF0aW9uTGV2ZWwgPD0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpWYWx1ZVByb2ZpbGVVcGRh
dGUpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBCZWdpbiBleHRyYSBpbml0aWxp
emF0aW9uIGxldmVsOiBBcnJheVByb2ZpbGVVcGRhdGUKLSAgICAgICAgaWYgKEFycmF5UHJvZmls
ZSogYXJyYXlQcm9maWxlID0gZXhpdFN0YXRlLmFycmF5UHJvZmlsZSkgewotICAgICAgICAgICAg
QVNTRVJUKCEhZXhpdC5tX2pzVmFsdWVTb3VyY2UpOwotICAgICAgICAgICAgQVNTRVJUKGV4aXQu
bV9raW5kID09IEJhZENhY2hlIHx8IGV4aXQubV9raW5kID09IEJhZEluZGV4aW5nVHlwZSk7Ci0g
ICAgICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxv
Y2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhleGl0Lm1fY29kZU9yaWdpbkZvckV4aXRQ
cm9maWxlLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24gPSBwcm9maWxlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoZXhp
dC5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZS5ieXRlY29kZUluZGV4KCkpLnB0cigpOwotICAg
ICAgICAgICAgYm9vbCBkb1Byb2ZpbGUgPSAhaW5zdHJ1Y3Rpb24tPmlzPE9wR2V0QnlJZD4oKSB8
fCBpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpLm1ldGFkYXRhKHByb2ZpbGVkQ29kZUJsb2Nr
KS5tX21vZGVNZXRhZGF0YS5tb2RlID09IEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aDsKLSAgICAg
ICAgICAgIGlmIChkb1Byb2ZpbGUpIHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHByb2ZpbGVkVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgICAg
ICAgICAgYXJyYXlQcm9maWxlLT5vYnNlcnZlU3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAg
ICAgICAgICAgYXJyYXlQcm9maWxlLT5vYnNlcnZlQXJyYXlNb2RlKGFycmF5TW9kZXNGcm9tU3Ry
dWN0dXJlKHN0cnVjdHVyZSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlm
IChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPD0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpB
cnJheVByb2ZpbGVVcGRhdGUpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBCZWdp
biBFeHRyYSBpbml0aWxpemF0aW9uIGxldmVsOiBPdGhlcgotICAgICAgICBpZiAoVU5MSUtFTFko
ZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCkpIHsKLSAgICAgICAgICAgIC8vIFdlIGFyZSBh
Y3RpbmcgYXMgYSBkZWZhY3RvIG9wX2NhdGNoIGJlY2F1c2Ugd2UgYXJyaXZlIGhlcmUgZnJvbSBn
ZW5lcmljVW53aW5kKCkuCi0gICAgICAgICAgICAvLyBTbywgd2UgbXVzdCByZXN0b3JlIG91ciBj
YWxsIGZyYW1lIGFuZCBzdGFjayBwb2ludGVyLgotICAgICAgICAgICAgcmVzdG9yZUNhbGxlZVNh
dmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKGNvbnRleHQpOwotICAgICAgICAg
ICAgQVNTRVJUKGNvbnRleHQuZnAoKSA9PSB2bS5jYWxsRnJhbWVGb3JDYXRjaCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoZXhpdFN0YXRlLnByb2ZpbGVyRXhpdCkKLSAgICAgICAgICAgIGV4
aXRTdGF0ZS5wcm9maWxlckV4aXQtPmluY0NvdW50KCk7Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZ
KE9wdGlvbnM6OnByaW50RWFjaE9TUkV4aXQoKSkpCi0gICAgICAgICAgICBwcmludE9TUkV4aXQo
Y29udGV4dCwgdm0ub3NyRXhpdEluZGV4LCBleGl0KTsKLQotICAgIH0gd2hpbGUgKGZhbHNlKTsg
Ly8gRW5kIGV4dHJhIGluaXRpYWxpemF0aW9uLgotCi0gICAgRnJhbWUgZnJhbWUoY3B1LmZwKCks
IGNvbnRleHQuc3RhY2soKSk7Ci0gICAgQVNTRVJUKCEoY29udGV4dC5mcDx1aW50cHRyX3Q+KCkg
JiAweDcpKTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgQVNTRVJUKGNwdS5ncHI8aW50NjRf
dD4oR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpID09IEpTVmFsdWU6Ok51bWJlclRhZyk7Ci0g
ICAgQVNTRVJUKGNwdS5ncHI8aW50NjRfdD4oR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3Rlcikg
PT0gSlNWYWx1ZTo6Tm90Q2VsbE1hc2spOwotI2VuZGlmCi0KLSAgICAvLyBEbyBhbGwgZGF0YSBm
b3JtYXQgY29udmVyc2lvbnMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGludG8gdGhlIHN0YWNrLgot
ICAgIC8vIE5vdGU6IHdlIG5lZWQgdG8gcmVjb3ZlciB2YWx1ZXMgYmVmb3JlIHJlc3RvcmluZyBj
YWxsZWUgc2F2ZSByZWdpc3RlcnMgYmVsb3cKLSAgICAvLyBiZWNhdXNlIHRoZSByZWNvdmVyeSBt
YXkgcmVseSBvbiB2YWx1ZXMgaW4gc29tZSBvZiBjYWxsZWUgc2F2ZSByZWdpc3RlcnMuCi0KLSAg
ICBpbnQgY2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzID0gc3RhdGljX2Nhc3Q8aW50
PihiYXNlbGluZUNvZGVCbG9jay0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkp
OwotICAgIHNpemVfdCBudW1iZXJPZk9wZXJhbmRzID0gb3BlcmFuZHMuc2l6ZSgpOwotICAgIHNp
emVfdCBudW1VbmRlZmluZWRPcGVyYW5kU3BhbnMgPSB1bmRlZmluZWRPcGVyYW5kU3BhbnMuc2l6
ZSgpOwotCi0gICAgc2l6ZV90IG5leHRVbmRlZmluZWRTcGFuSW5kZXggPSAwOwotICAgIHNpemVf
dCBuZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4ID0gbnVtYmVyT2ZPcGVyYW5kczsKLSAgICBpZiAo
bnVtVW5kZWZpbmVkT3BlcmFuZFNwYW5zKQotICAgICAgICBuZXh0VW5kZWZpbmVkT3BlcmFuZElu
ZGV4ID0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zW25leHRVbmRlZmluZWRTcGFuSW5kZXhdLmZpcnN0
SW5kZXg7Ci0KLSAgICBKU1ZhbHVlIHVuZGVmaW5lZCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgZm9y
IChzaXplX3Qgc3BhbkluZGV4ID0gMDsgc3BhbkluZGV4IDwgbnVtVW5kZWZpbmVkT3BlcmFuZFNw
YW5zOyArK3NwYW5JbmRleCkgewotICAgICAgICBhdXRvJiBzcGFuID0gdW5kZWZpbmVkT3BlcmFu
ZFNwYW5zW3NwYW5JbmRleF07Ci0gICAgICAgIGludCBmaXJzdE9mZnNldCA9IHNwYW4ubWluT2Zm
c2V0OwotICAgICAgICBpbnQgbGFzdE9mZnNldCA9IGZpcnN0T2Zmc2V0ICsgc3Bhbi5udW1iZXJP
ZlJlZ2lzdGVyczsKLQotICAgICAgICBmb3IgKGludCBvZmZzZXQgPSBmaXJzdE9mZnNldDsgb2Zm
c2V0IDwgbGFzdE9mZnNldDsgKytvZmZzZXQpCi0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5k
KG9mZnNldCwgdW5kZWZpbmVkKTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7
IGluZGV4IDwgbnVtYmVyT2ZPcGVyYW5kczsgKytpbmRleCkgewotICAgICAgICBjb25zdCBWYWx1
ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlZyA9IG9wZXJhbmRzLnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGluZGV4KTsKLQot
ICAgICAgICBpZiAoVU5MSUtFTFkoaW5kZXggPT0gbmV4dFVuZGVmaW5lZE9wZXJhbmRJbmRleCkp
IHsKLSAgICAgICAgICAgIGluZGV4ICs9IHVuZGVmaW5lZE9wZXJhbmRTcGFuc1tuZXh0VW5kZWZp
bmVkU3BhbkluZGV4KytdLm51bWJlck9mUmVnaXN0ZXJzIC0gMTsKLSAgICAgICAgICAgIGlmIChu
ZXh0VW5kZWZpbmVkU3BhbkluZGV4IDwgbnVtVW5kZWZpbmVkT3BlcmFuZFNwYW5zKQotICAgICAg
ICAgICAgICAgIG5leHRVbmRlZmluZWRPcGVyYW5kSW5kZXggPSB1bmRlZmluZWRPcGVyYW5kU3Bh
bnNbbmV4dFVuZGVmaW5lZFNwYW5JbmRleF0uZmlyc3RJbmRleDsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBuZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4ID0gbnVtYmVyT2ZPcGVy
YW5kczsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJl
Zy5pc0xvY2FsKCkgJiYgcmVnLnRvTG9jYWwoKSA8IGNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJl
Z2lzdGVycykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGludCBvcGVyYW5kID0g
cmVnLm9mZnNldCgpOwotCi0gICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsK
LSAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRP
cGVyYW5kKG9wZXJhbmQsIGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSku
YXNhblVuc2FmZUpTVmFsdWUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNl
IEluRlBSOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBjcHUuZnByPEpT
VmFsdWU+KHJlY292ZXJ5LmZwcigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgICAgIGNhc2UgSW5HUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVy
YW5kKG9wZXJhbmQsIGNwdS5ncHI8SlNWYWx1ZT4ocmVjb3ZlcnkuZ3ByKCkpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotI2Vsc2UKLSAgICAgICAgY2FzZSBJblBhaXI6Ci0gICAgICAgICAgICBmcmFt
ZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQzMl90PihyZWNvdmVyeS50
YWdHUFIoKSksIGNwdS5ncHI8aW50MzJfdD4ocmVjb3ZlcnkucGF5bG9hZEdQUigpKSkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLQotICAgICAgICBjYXNlIFVuYm94ZWRDZWxsSW5HUFI6
Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxK
U0NlbGwqPihyZWNvdmVyeS5ncHIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
IGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJh
bmQob3BlcmFuZCwgSlNWYWx1ZShjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVy
KCkpLmFzYW5VbnNhZmVVbmJveGVkQ2VsbCgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjoKLSAg
ICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwganNCb29sZWFuKGNwdS5ncHI8Ym9v
bD4ocmVjb3ZlcnkuZ3ByKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZgotCi0gICAg
ICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBjYWxsRnJhbWUtPnIocmVjb3Zl
cnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVKU1ZhbHVlKCkpOwotI2Vsc2UKLSAgICAg
ICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwganNCb29sZWFuKGNhbGxGcmFtZS0+cihy
ZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZUpTVmFsdWUoKS5wYXlsb2FkKCkp
KTsKLSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBVbmJveGVkSW50
MzJJbkdQUjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShj
cHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5LmdwcigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1l
LnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVh
bFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVVbmJveGVkSW50MzIoKSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBjYXNlIFVuYm94ZWRJbnQ1MkluR1BS
OgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8
aW50NjRfdD4ocmVjb3ZlcnkuZ3ByKCkpID4+IEpTVmFsdWU6OmludDUyU2hpZnRBbW91bnQpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgSW50NTJEaXNwbGFjZWRJbkpTU3Rh
Y2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY2FsbEZy
YW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hlZEludDUy
KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgVW5ib3hlZFN0cmljdElu
dDUySW5HUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUo
Y3B1LmdwcjxpbnQ2NF90PihyZWNvdmVyeS5ncHIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgIGNhc2UgU3RyaWN0SW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAg
ICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY2FsbEZyYW1lLT5yKHJlY292ZXJ5
LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hlZFN0cmljdEludDUyKCkpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0KLSAgICAgICAgY2FzZSBVbmJveGVkRG91YmxlSW5G
UFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoSlNWYWx1
ZTo6RW5jb2RlQXNEb3VibGUsIHB1cmlmeU5hTihjcHUuZnByKHJlY292ZXJ5LmZwcigpKSkpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5KU1N0
YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKEpTVmFs
dWU6OkVuY29kZUFzRG91YmxlLCBwdXJpZnlOYU4oY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1
YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hlZERvdWJsZSgpKSkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgY2FzZSBDb25zdGFudDoKLSAgICAgICAgICAgIGZyYW1lLnNldE9w
ZXJhbmQob3BlcmFuZCwgcmVjb3ZlcnkuY29uc3RhbnQoKSk7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIERpcmVjdEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKLSAgICAg
ICAgY2FzZSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgICAgICAv
LyBEb24ndCBkbyB0aGlzLCB5ZXQuCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmVzdG9yZSB0aGUgREZHIGNh
bGxlZSBzYXZlcyBhbmQgdGhlbiBzYXZlIHRoZSBvbmVzIHRoZSBiYXNlbGluZSBKSVQgdXNlcy4K
LSAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoY29udGV4dCwgY29kZUJsb2NrKTsKLSAgICBzYXZl
Q2FsbGVlU2F2ZXNGb3IoY29udGV4dCwgYmFzZWxpbmVDb2RlQmxvY2spOwotCi0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBjcHUuZ3ByKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKSA9IHN0YXRp
Y19jYXN0PEpTQzo6VUNQVVJlZ2lzdGVyPihKU1ZhbHVlOjpOdW1iZXJUYWcpOwotICAgIGNwdS5n
cHIoR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3RlcikgPSBzdGF0aWNfY2FzdDxKU0M6OlVDUFVS
ZWdpc3Rlcj4oSlNWYWx1ZTo6Tm90Q2VsbE1hc2spOwotI2VuZGlmCi0KLSAgICBpZiAoZXhpdC5p
c0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcihjb250ZXh0KTsKLQotICAgIC8vIE5vdyB0aGF0IHRoaW5ncyBv
biB0aGUgc3RhY2sgYXJlIHJlY292ZXJlZCwgZG8gdGhlIGFyZ3VtZW50cyByZWNvdmVyeS4gV2Ug
YXNzdW1lIHRoYXQgYXJndW1lbnRzCi0gICAgLy8gcmVjb3ZlcmllcyBkb24ndCByZWN1cnNpdmVs
eSByZWZlciB0byBlYWNoIG90aGVyLiBCdXQsIHdlIGRvbid0IHRyeSB0byBhc3N1bWUgdGhhdCB0
aGV5IG9ubHkKLSAgICAvLyByZWZlciB0byBjZXJ0YWluIHJhbmdlcyBvZiBsb2NhbHMuIEhlbmNl
IHdoeSB3ZSBuZWVkIHRvIGRvIHRoaXMgaGVyZSwgb25jZSB0aGUgc3RhY2sgaXMgc2Vuc2libGUu
Ci0gICAgLy8gTm90ZSB0aGF0IHdlIGFsc28gcm91Z2hseSBhc3N1bWUgdGhhdCB0aGUgYXJndW1l
bnRzIG1pZ2h0IHN0aWxsIGJlIG1hdGVyaWFsaXplZCBvdXRzaWRlIG9mIGl0cwotICAgIC8vIGlu
bGluZSBjYWxsIGZyYW1lIHNjb3BlIC0gYnV0IGZvciBub3cgdGhlIERGRyB3b3VsZG4ndCBkbyB0
aGF0LgotCi0gICAgREZHOjplbWl0UmVzdG9yZUFyZ3VtZW50cyhjb250ZXh0LCBjb2RlQmxvY2ss
IGRmZ0pJVENvZGUsIG9wZXJhbmRzKTsKLQotICAgIC8vIEFkanVzdCB0aGUgb2xkIEpJVCdzIGV4
ZWN1dGUgY291bnRlci4gU2luY2Ugd2UgYXJlIGV4aXRpbmcgT1NSLCB3ZSBrbm93Ci0gICAgLy8g
dGhhdCBhbGwgbmV3IGNhbGxzIGludG8gdGhpcyBjb2RlIHdpbGwgZ28gdG8gdGhlIG5ldyBKSVQs
IHNvIHRoZSBleGVjdXRlCi0gICAgLy8gY291bnRlciBvbmx5IGFmZmVjdHMgY2FsbCBmcmFtZXMg
dGhhdCBwZXJmb3JtZWQgT1NSIGV4aXQgYW5kIGNhbGwgZnJhbWVzCi0gICAgLy8gdGhhdCB3ZXJl
IHN0aWxsIGV4ZWN1dGluZyB0aGUgb2xkIEpJVCBhdCB0aGUgdGltZSBvZiBhbm90aGVyIGNhbGwg
ZnJhbWUncwotICAgIC8vIE9TUiBleGl0LiBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBmb2xs
b3dpbmcgaXMgdHJ1ZToKLSAgICAvLwotICAgIC8vIChhKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBP
U1IgZXhpdCBnZXRzIGEgY2hhbmNlIHRvIHJlZW50ZXIgb3B0aW1pemVkCi0gICAgLy8gICAgIGNv
ZGUgZXZlbnR1YWxseSwgc2luY2Ugb3B0aW1pemVkIGNvZGUgaXMgZmFzdGVyLiBCdXQgd2UgZG9u
J3QKLSAgICAvLyAgICAgd2FudCB0byBkbyBzdWNoIHJlZW50ZXJ5IHRvbyBhZ2dyZXNzaXZlbHkg
KHNlZSAoYykgYmVsb3cpLgotICAgIC8vCi0gICAgLy8gKGIpIElmIHRoZXJlIGlzIGNvZGUgb24g
dGhlIGNhbGwgc3RhY2sgdGhhdCBpcyBzdGlsbCBydW5uaW5nIHRoZSBvbGQKLSAgICAvLyAgICAg
SklUJ3MgY29kZSBhbmQgaGFzIG5ldmVyIE9TUidkLCB0aGVuIGl0IHNob3VsZCBnZXQgYSBjaGFu
Y2UgdG8KLSAgICAvLyAgICAgcGVyZm9ybSBPU1IgZW50cnkgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0
IHdlJ3ZlIGV4aXRlZC4KLSAgICAvLwotICAgIC8vIChjKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBP
U1IgZXhpdCBzaG91bGQgbm90IGltbWVkaWF0ZWx5IHJldHJ5IE9TUgotICAgIC8vICAgICBlbnRy
eSwgc2luY2UgYm90aCBmb3JtcyBvZiBPU1IgYXJlIGV4cGVuc2l2ZS4gT1NSIGVudHJ5IGlzCi0g
ICAgLy8gICAgIHBhcnRpY3VsYXJseSBleHBlbnNpdmUuCi0gICAgLy8KLSAgICAvLyAoZCkgRnJl
cXVlbnQgT1NSIGZhaWx1cmVzLCBldmVuIHRob3NlIHRoYXQgZG8gbm90IHJlc3VsdCBpbiB0aGUg
Y29kZQotICAgIC8vICAgICBydW5uaW5nIGluIGEgaG90IGxvb3AsIHJlc3VsdCBpbiByZWNvbXBp
bGF0aW9uIGdldHRpbmcgdHJpZ2dlcmVkLgotICAgIC8vCi0gICAgLy8gVG8gZW5zdXJlIChjKSwg
d2UnZCBsaWtlIHRvIHNldCB0aGUgZXhlY3V0ZSBjb3VudGVyIHRvCi0gICAgLy8gY291bnRlclZh
bHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLiBUaGlzIHNlZW1zIGxpa2UgaXQgd291bGQgZW5k
YW5nZXIKLSAgICAvLyAoYSkgYW5kIChiKSwgc2luY2UgdGhlbiBldmVyeSBPU1IgZXhpdCB3b3Vs
ZCBkZWxheSB0aGUgb3Bwb3J0dW5pdHkgZm9yCi0gICAgLy8gZXZlcnkgY2FsbCBmcmFtZSB0byBw
ZXJmb3JtIE9TUiBlbnRyeS4gRXNzZW50aWFsbHksIGlmIE9TUiBleGl0IGhhcHBlbnMKLSAgICAv
LyBmcmVxdWVudGx5IGFuZCB0aGUgZnVuY3Rpb24gaGFzIGZldyBsb29wcywgdGhlbiB0aGUgY291
bnRlciB3aWxsIG5ldmVyCi0gICAgLy8gYmVjb21lIG5vbi1uZWdhdGl2ZSBhbmQgT1NSIGVudHJ5
IHdpbGwgbmV2ZXIgYmUgdHJpZ2dlcmVkLiBPU1IgZW50cnkKLSAgICAvLyB3aWxsIG9ubHkgaGFw
cGVuIGlmIGEgbG9vcCBnZXRzIGhvdCBpbiB0aGUgb2xkIEpJVCwgd2hpY2ggZG9lcyBhIHByZXR0
eQotICAgIC8vIGdvb2Qgam9iIG9mIGVuc3VyaW5nIChhKSBhbmQgKGIpLiBCdXQgdGhhdCBkb2Vz
bid0IHRha2UgY2FyZSBvZiAoZCksCi0gICAgLy8gc2luY2UgZWFjaCBzcGVjdWxhdGlvbiBmYWls
dXJlIHdvdWxkIHJlc2V0IHRoZSBleGVjdXRlIGNvdW50ZXIuCi0gICAgLy8gU28gd2UgY2hlY2sg
aGVyZSBpZiB0aGUgbnVtYmVyIG9mIHNwZWN1bGF0aW9uIGZhaWx1cmVzIGlzIHNpZ25pZmljYW50
bHkKLSAgICAvLyBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NlcyAod2Ugd2FudCA5
MCUgc3VjY2VzcyByYXRlKSwgYW5kIGlmCi0gICAgLy8gdGhlcmUgaGF2ZSBiZWVuIGEgbGFyZ2Ug
ZW5vdWdoIG51bWJlciBvZiBmYWlsdXJlcy4gSWYgc28sIHdlIHNldCB0aGUKLSAgICAvLyBjb3Vu
dGVyIHRvIDA7IG90aGVyd2lzZSB3ZSBzZXQgdGhlIGNvdW50ZXIgdG8KLSAgICAvLyBjb3VudGVy
VmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuCi0KLSAgICBpZiAoVU5MSUtFTFkoY29kZUJs
b2NrLT51cGRhdGVPU1JFeGl0Q291bnRlckFuZENoZWNrSWZOZWVkVG9SZW9wdGltaXplKGV4aXRT
dGF0ZSkgPT0gQ29kZUJsb2NrOjpPcHRpbWl6ZUFjdGlvbjo6UmVvcHRpbWl6ZU5vdykpCi0gICAg
ICAgIHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdyhiYXNlbGluZUNvZGVCbG9jaywgY29kZUJsb2Nr
LCAmZXhpdCk7Ci0KLSAgICByZWlmeUlubGluZWRDYWxsRnJhbWVzKGNvbnRleHQsIGJhc2VsaW5l
Q29kZUJsb2NrLCBleGl0KTsKLSAgICBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoY29udGV4dCwgdm0s
IGNvZGVCbG9jaywgYmFzZWxpbmVDb2RlQmxvY2ssIGV4aXQpOwotfQotCi1zdGF0aWMgdm9pZCBy
ZWlmeUlubGluZWRDYWxsRnJhbWVzKENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogb3V0ZXJt
b3N0QmFzZWxpbmVDb2RlQmxvY2ssIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQotewotICAgIGF1
dG8mIGNwdSA9IGNvbnRleHQuY3B1OwotICAgIEZyYW1lIGZyYW1lKGNwdS5mcCgpLCBjb250ZXh0
LnN0YWNrKCkpOwotCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBsZWF2ZSBob2xlcyBvbiB0
aGUgc3RhY2sgd2hlbiBwZXJmb3JtaW5nIGFuIE9TUiBleGl0Ci0gICAgLy8gaW4gcHJlc2VuY2Ug
b2YgaW5saW5lZCB0YWlsIGNhbGxzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDc1MTEKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUo
b3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2stPmppdFR5cGUoKSkpOwotICAgIGZyYW1lLnNldE9w
ZXJhbmQ8Q29kZUJsb2NrKj4oQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCBvdXRlcm1vc3RCYXNl
bGluZUNvZGVCbG9jayk7Ci0KLSAgICBjb25zdCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luOwotICAg
IGZvciAoY29kZU9yaWdpbiA9ICZleGl0Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdpbiAmJiBjb2Rl
T3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4tPmlubGlu
ZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygpKSB7Ci0gICAgICAgIElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZy
YW1lKCk7Ci0gICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBiYXNlbGluZUNv
ZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKCpjb2RlT3JpZ2luLCBvdXRlcm1v
c3RCYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgIElubGluZUNhbGxGcmFtZTo6S2luZCB0cnVl
Q2FsbGVyQ2FsbEtpbmQ7Ci0gICAgICAgIENvZGVPcmlnaW4qIHRydWVDYWxsZXIgPSBpbmxpbmVD
YWxsRnJhbWUtPmdldENhbGxlclNraXBwaW5nVGFpbENhbGxzKCZ0cnVlQ2FsbGVyQ2FsbEtpbmQp
OwotICAgICAgICB2b2lkKiBjYWxsZXJGcmFtZSA9IGNwdS5mcCgpOwotCi0gICAgICAgIGJvb2wg
Y2FsbGVySXNMTEludCA9IGZhbHNlOwotCi0gICAgICAgIGlmICghdHJ1ZUNhbGxlcikgewotICAg
ICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZS0+aXNUYWlsKCkpOwotICAgICAgICAgICAg
dm9pZCogcmV0dXJuUEMgPSBmcmFtZS5nZXQ8dm9pZCo+KENhbGxGcmFtZTo6cmV0dXJuUENPZmZz
ZXQoKSk7Ci0jaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAgICAgIHZvaWQqIG9sZEVudHJ5U1AgPSBj
cHUuZnA8dWludDhfdCo+KCkgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7Ci0gICAgICAgICAg
ICB2b2lkKiBuZXdFbnRyeVNQID0gY3B1LmZwPHVpbnQ4X3QqPigpICsgaW5saW5lQ2FsbEZyYW1l
LT5yZXR1cm5QQ09mZnNldCgpICsgc2l6ZW9mKHZvaWQqKTsKLSAgICAgICAgICAgIHJldHVyblBD
ID0gcmV0YWdDb2RlUHRyKHJldHVyblBDLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihvbGRFbnRyeVNQ
KSwgYml0d2lzZV9jYXN0PFB0clRhZz4obmV3RW50cnlTUCkpOwotI2VuZGlmCi0gICAgICAgICAg
ICBmcmFtZS5zZXQ8dm9pZCo+KGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSwgcmV0
dXJuUEMpOwotICAgICAgICAgICAgY2FsbGVyRnJhbWUgPSBmcmFtZS5nZXQ8dm9pZCo+KENhbGxG
cmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gYmFzZWxpbmVDb2RlQmxv
Y2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jaygqdHJ1ZUNhbGxlciwgb3V0ZXJtb3N0QmFz
ZWxpbmVDb2RlQmxvY2spOwotICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBjYWxsQnl0ZWNvZGVJ
bmRleCA9IHRydWVDYWxsZXItPmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgICAgIHZvaWQqIGp1
bXBUYXJnZXQgPSBjYWxsZXJSZXR1cm5QQyhiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciwgY2Fs
bEJ5dGVjb2RlSW5kZXgsIHRydWVDYWxsZXJDYWxsS2luZCwgY2FsbGVySXNMTEludCkudW50YWdn
ZWRFeGVjdXRhYmxlQWRkcmVzcygpOwotCi0gICAgICAgICAgICBpZiAodHJ1ZUNhbGxlci0+aW5s
aW5lQ2FsbEZyYW1lKCkpCi0gICAgICAgICAgICAgICAgY2FsbGVyRnJhbWUgPSBjcHUuZnA8dWlu
dDhfdCo+KCkgKyB0cnVlQ2FsbGVyLT5pbmxpbmVDYWxsRnJhbWUoKS0+c3RhY2tPZmZzZXQgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpOwotCi0jaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAgICAgIHZv
aWQqIG5ld0VudHJ5U1AgPSBjcHUuZnA8dWludDhfdCo+KCkgKyBpbmxpbmVDYWxsRnJhbWUtPnJl
dHVyblBDT2Zmc2V0KCkgKyBzaXplb2Yodm9pZCopOwotICAgICAgICAgICAganVtcFRhcmdldCA9
IHRhZ0NvZGVQdHIoanVtcFRhcmdldCwgYml0d2lzZV9jYXN0PFB0clRhZz4obmV3RW50cnlTUCkp
OwotI2VuZGlmCi0gICAgICAgICAgICBmcmFtZS5zZXQ8dm9pZCo+KGlubGluZUNhbGxGcmFtZS0+
cmV0dXJuUENPZmZzZXQoKSwganVtcFRhcmdldCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmcmFt
ZS5zZXRPcGVyYW5kPHZvaWQqPihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0KLSAgICAgICAgLy8gUmVz
dG9yZSB0aGUgaW5saW5lIGNhbGwgZnJhbWUncyBjYWxsZWUgc2F2ZSByZWdpc3RlcnMuCi0gICAg
ICAgIC8vIElmIHRoaXMgaW5saW5lZCBmcmFtZSBpcyBhIHRhaWwgY2FsbCB0aGF0IHdpbGwgcmV0
dXJuIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGNhbGxlciwgd2UgbmVlZCB0bwotICAgICAgICAvLyBj
b3B5IHRoZSBwcmlvciBjb250ZW50cyBvZiB0aGUgdGFnIHJlZ2lzdGVycyBhbHJlYWR5IHNhdmVk
IGZvciB0aGUgb3V0ZXIgZnJhbWUgdG8gdGhpcyBmcmFtZS4KLSAgICAgICAgc2F2ZU9yQ29weUNh
bGxlZVNhdmVzRm9yKGNvbnRleHQsIGJhc2VsaW5lQ29kZUJsb2NrLCBWaXJ0dWFsUmVnaXN0ZXIo
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCksICF0cnVlQ2FsbGVyKTsKLQotICAgICAgICBp
ZiAoY2FsbGVySXNMTEludCkgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVC
bG9ja0ZvckNhbGxlciA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2Rl
QmxvY2soKnRydWVDYWxsZXIsIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAg
ICAgIGZyYW1lLnNldDxjb25zdCB2b2lkKj4oY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1l
LCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUiku
b2Zmc2V0LCBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0YWRhdGFUYWJsZSgpKTsKLSNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgZnJhbWUuc2V0PGNvbnN0IHZvaWQqPihjYWxs
ZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBMTEludDo6UmVn
aXN0ZXJzOjpwYkdQUikub2Zmc2V0LCBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+aW5zdHJ1
Y3Rpb25zUmF3UG9pbnRlcigpKTsKLSNlbmRpZgotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFp
bmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFu
ZDx1aW50MzJfdD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBQYXlsb2FkT2Zmc2V0LCBpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKLSAgICAgICAgQVNTRVJUKGNhbGxlckZy
YW1lKTsKLSAgICAgICAgZnJhbWUuc2V0PHZvaWQqPihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlckZy
YW1lT2Zmc2V0KCksIGNhbGxlckZyYW1lKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICB1
aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4tPmJ5dGVjb2Rl
SW5kZXgoKSkuYml0cygpOwotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90Pihpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIFRhZ09mZnNldCwgbG9jYXRpb25CaXRzKTsKLSAgICAgICAgaWYgKCFpbmxp
bmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5k
KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUsIEpT
VmFsdWUoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpKSk7Ci0jZWxzZSAvLyBVU0Uo
SlNWQUxVRTY0KSAvLyBzbyB0aGlzIGlzIHRoZSAzMi1iaXQgcGFydAotICAgICAgICBjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBiYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5wdHIoKTsKLSAgICAgICAgdWludDMy
X3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGJpdHdpc2VfY2Fz
dDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKSkuYml0cygpOwotICAgICAgICBmcmFtZS5zZXRPcGVy
YW5kPHVpbnQzMl90PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFRhZ09mZnNldCwgbG9jYXRpb25CaXRzKTsK
LSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJfdD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgVGFnT2Zmc2V0LCBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oSlNWYWx1ZTo6Q2VsbFRhZykpOwotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFt
ZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQoaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgUGF5bG9hZE9mZnNl
dCwgaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpKTsKLSNlbmRpZiAvLyBVU0UoSlNW
QUxVRTY0KSAvLyBlbmRpbmcgdGhlICNlbHNlIHBhcnQsIHNvIGRpcmVjdGx5IGFib3ZlIGlzIHRo
ZSAzMi1iaXQgcGFydAotICAgIH0KLQotICAgIC8vIERvbid0IG5lZWQgdG8gc2V0IHRoZSB0b3Bs
ZXZlbCBjb2RlIG9yaWdpbiBpZiB3ZSBvbmx5IGRpZCBpbmxpbmUgdGFpbCBjYWxscwotICAgIGlm
IChjb2RlT3JpZ2luKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdWludDMyX3QgbG9j
YXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLmJp
dHMoKTsKLSNlbHNlCi0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IG91
dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2luLT5i
eXRlY29kZUluZGV4KCkpLnB0cigpOwotICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBD
YWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVj
dGlvbikpKS5iaXRzKCk7Ci0jZW5kaWYKLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJf
dD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFRhZ09mZnNldCwg
bG9jYXRpb25CaXRzKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGFkanVzdEFuZEp1bXBUb1Rh
cmdldChDb250ZXh0JiBjb250ZXh0LCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBPU1JFeGl0JiBleGl0KQotewotICAgIE9TUkV4aXRT
dGF0ZSogZXhpdFN0YXRlID0gZXhpdC5leGl0U3RhdGUuZ2V0KCk7Ci0KLSAgICBXVEY6OnN0b3Jl
TG9hZEZlbmNlKCk7IC8vIFRoZSBvcHRpbWl6aW5nIGNvbXBpbGVyIGV4cGVjdHMgdGhhdCB0aGUg
T1NSIGV4aXQgbWVjaGFuaXNtIHdpbGwgZXhlY3V0ZSB0aGlzIGZlbmNlLgotICAgIHZtLmhlYXAu
d3JpdGVCYXJyaWVyKGJhc2VsaW5lQ29kZUJsb2NrKTsKLQotICAgIC8vIFdlIGJhcnJpZXIgYWxs
IGlubGluZWQgZnJhbWVzIC0tIGFuZCBub3QganVzdCB0aGUgY3VycmVudCBpbmxpbmUgc3RhY2sg
LS0KLSAgICAvLyBiZWNhdXNlIHdlIGRvbid0IGtub3cgd2hpY2ggaW5saW5lZCBmdW5jdGlvbiBv
d25zIHRoZSB2YWx1ZSBwcm9maWxlIHRoYXQKLSAgICAvLyB3ZSdsbCB1cGRhdGUgd2hlbiB3ZSBl
eGl0LiBJbiB0aGUgY2FzZSBvZiAiZigpIHsgYSgpOyBiKCk7IH0iLCBpZiBib3RoCi0gICAgLy8g
YSBhbmQgYiBhcmUgaW5saW5lZCwgd2UgbWlnaHQgZXhpdCBpbnNpZGUgYiBkdWUgdG8gYSBiYWQg
dmFsdWUgbG9hZGVkCi0gICAgLy8gZnJvbSBhLgotICAgIC8vIEZJWE1FOiBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlIHNob3VsZCByZW1lbWJlciB3aGljaCBDb2RlQmxvY2sgb3ducwotICAg
IC8vIHRoZSB2YWx1ZSBwcm9maWxlLgotICAgIElubGluZUNhbGxGcmFtZVNldCogaW5saW5lQ2Fs
bEZyYW1lcyA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+aW5saW5lQ2FsbEZy
YW1lcy5nZXQoKTsKLSAgICBpZiAoaW5saW5lQ2FsbEZyYW1lcykgewotICAgICAgICBmb3IgKElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lIDogKmlubGluZUNhbGxGcmFtZXMpCi0gICAg
ICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29k
ZUJsb2NrLmdldCgpKTsKLSAgICB9Ci0KLSAgICBhdXRvKiBleGl0SW5saW5lQ2FsbEZyYW1lID0g
ZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAgaWYgKGV4aXRJbmxpbmVD
YWxsRnJhbWUpCi0gICAgICAgIGNvbnRleHQuZnAoKSA9IGNvbnRleHQuZnA8dWludDhfdCo+KCkg
KyBleGl0SW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSk7Ci0KLSAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gZXhpdFN0YXRlLT5qdW1wVGFyZ2V0OwotICAg
IEFTU0VSVChqdW1wVGFyZ2V0KTsKLQotICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigp
KSB7Ci0gICAgICAgIC8vIFNpbmNlIHdlJ3JlIGp1bXBpbmcgdG8gb3BfY2F0Y2gsIHdlIG5lZWQg
dG8gc2V0IGNhbGxGcmFtZUZvckNhdGNoLgotICAgICAgICB2bS5jYWxsRnJhbWVGb3JDYXRjaCA9
IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsKLSAgICB9Ci0KLSAgICB2bS50b3BDYWxsRnJhbWUg
PSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7Ci0KLSAgICBpZiAoZXhpdFN0YXRlLT5pc0p1bXBU
b0xMSW50KSB7Ci0gICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yRXhpdCA9IGJhc2VsaW5l
Q29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soZXhpdC5tX2NvZGVPcmlnaW4s
IGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwotICAgICAgICBjb25zdCBJbnN0
cnVjdGlvbiYgY3VycmVudEluc3RydWN0aW9uID0gKmNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0
aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLnB0cigpOwotCi0gICAgICAgIGNvbnRleHQuZ3ByKExM
SW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpID0gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4oY29kZUJsb2NrRm9yRXhpdC0+bWV0YWRhdGFUYWJsZSgpKTsKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6UmVnaXN0ZXJzOjpwYkdQUikgPSBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90Pihjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnNSYXdQb2ludGVy
KCkpOwotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6UmVnaXN0ZXJzOjpwY0dQUikgPSBzdGF0
aWNfY2FzdDx1aW50cHRyX3Q+KGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKS5vZmZz
ZXQoKSk7Ci0jZWxzZQotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6UmVnaXN0ZXJzOjpwY0dQ
UikgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PigmY3VycmVudEluc3RydWN0aW9uKTsKLSNlbmRp
ZgotCi0gICAgICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQotICAgICAgICAgICAg
dm0udGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93ID0gJmN1cnJlbnRJbnN0cnVjdGlvbjsKLSAg
ICB9Ci0KLSAgICBjb250ZXh0LnBjKCkgPSB1bnRhZ0NvZGVQdHI8SlNFbnRyeVB0clRhZz4oanVt
cFRhcmdldCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50T1NSRXhpdChDb250ZXh0JiBjb250ZXh0
LCB1aW50MzJfdCBvc3JFeGl0SW5kZXgsIGNvbnN0IE9TUkV4aXQmIGV4aXQpCi17Ci0gICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7Ci0gICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIENvZGVCbG9jayog
YWx0ZXJuYXRpdmUgPSBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7Ci0gICAgRXhpdEtpbmQga2lu
ZCA9IGV4aXQubV9raW5kOwotICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBleGl0
Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0KLSAgICBkYXRhTG9nKCJTcGVjdWxhdGlv
biBmYWlsdXJlIGluICIsICpjb2RlQmxvY2spOwotICAgIGRhdGFMb2coIiBAIGV4aXQgIyIsIG9z
ckV4aXRJbmRleCwgIiAoIiwgYnl0ZWNvZGVPZmZzZXQsICIsICIsIGV4aXRLaW5kVG9TdHJpbmco
a2luZCksICIpIHdpdGggIik7Ci0gICAgaWYgKGFsdGVybmF0aXZlKSB7Ci0gICAgICAgIGRhdGFM
b2coCi0gICAgICAgICAgICAiZXhlY3V0ZUNvdW50ZXIgPSAiLCBhbHRlcm5hdGl2ZS0+aml0RXhl
Y3V0ZUNvdW50ZXIoKSwKLSAgICAgICAgICAgICIsIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVy
ID0gIiwgYWx0ZXJuYXRpdmUtPnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCksCi0gICAgICAg
ICAgICAiLCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPSAiLCBhbHRlcm5hdGl2ZS0+b3B0aW1p
emF0aW9uRGVsYXlDb3VudGVyKCkpOwotICAgIH0gZWxzZQotICAgICAgICBkYXRhTG9nKCJubyBh
bHRlcm5hdGl2ZSBjb2RlIGJsb2NrIChpLmUuIHdlJ3ZlIGJlZW4gamV0dGlzb25lZCkiKTsKLSAg
ICBkYXRhTG9nKCIsIG9zckV4aXRDb3VudGVyID0gIiwgY29kZUJsb2NrLT5vc3JFeGl0Q291bnRl
cigpLCAiXG4iKTsKLSAgICBkYXRhTG9nKCIgICAgR1BScyBhdCB0aW1lIG9mIGV4aXQ6Iik7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyAr
K2kpIHsKLSAgICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7Ci0gICAg
ICAgIGRhdGFMb2coIiAiLCBjb250ZXh0Lmdwck5hbWUoZ3ByKSwgIjoiLCBSYXdQb2ludGVyKGNv
bnRleHQuZ3ByPHZvaWQqPihncHIpKSk7Ci0gICAgfQotICAgIGRhdGFMb2coIlxuIik7Ci0gICAg
ZGF0YUxvZygiICAgIEZQUnMgYXQgdGltZSBvZiBleGl0OiIpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7Ci0gICAgICAgIEZQ
UlJlZyBmcHIgPSBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAgICBkYXRhTG9nKCIgIiwg
Y29udGV4dC5mcHJOYW1lKGZwciksICI6Iik7Ci0gICAgICAgIHVpbnQ2NF90IGJpdHMgPSBjb250
ZXh0LmZwcjx1aW50NjRfdD4oZnByKTsKLSAgICAgICAgZG91YmxlIHZhbHVlID0gY29udGV4dC5m
cHIoZnByKTsKLSAgICAgICAgZGF0YUxvZ0YoIiVsbHg6JWxmIiwgc3RhdGljX2Nhc3Q8bG9uZyBs
b25nPihiaXRzKSwgdmFsdWUpOwotICAgIH0KLSAgICBkYXRhTG9nKCJcbiIpOwotfQotCi0vLyBK
SVQgYmFzZWQgT1NSIEV4aXQuCi0KIE9TUkV4aXQ6Ok9TUkV4aXQoRXhpdEtpbmQga2luZCwgSlNW
YWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHZh
bHVlUHJvZmlsZSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgdW5zaWduZWQgc3RyZWFtSW5kZXgsIHVu
c2lnbmVkIHJlY292ZXJ5SW5kZXgpCiAgICAgOiBPU1JFeGl0QmFzZShraW5kLCBqaXQtPm1fb3Jp
Z2luLmZvckV4aXQsIGppdC0+bV9vcmlnaW4uc2VtYW50aWMsIGppdC0+bV9vcmlnaW4ud2FzSG9p
c3RlZCkKICAgICAsIG1fanNWYWx1ZVNvdXJjZShqc1ZhbHVlU291cmNlKQpAQCAtOTU4LDE1ICs3
MCwxOCBAQCBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IE9TUkV4aXQ6OmNvZGVM
b2NhdGlvbkZvclJlcGF0Y2goKSBjb25zdAogCiB2b2lkIE9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJn
dW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVj
b3Zlcnk+JiBvcGVyYW5kcykKIHsKLSAgICBIYXNoTWFwPE1pbmlmaWVkSUQsIGludD4gYWxyZWFk
eUFsbG9jYXRlZEFyZ3VtZW50czsgLy8gTWFwcyBwaGFudG9tIGFyZ3VtZW50cyBub2RlIElEIHRv
IG9wZXJhbmQuCisgICAgSGFzaE1hcDxNaW5pZmllZElELCBWaXJ0dWFsUmVnaXN0ZXI+IGFscmVh
ZHlBbGxvY2F0ZWRBcmd1bWVudHM7IC8vIE1hcHMgcGhhbnRvbSBhcmd1bWVudHMgbm9kZSBJRCB0
byBvcGVyYW5kLgogICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5z
aXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3Zlcnkg
PSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIGludCBvcGVyYW5kID0gb3BlcmFuZHMub3BlcmFu
ZEZvckluZGV4KGluZGV4KTsKIAogICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0g
RGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkCiAgICAgICAgICAgICAmJiByZWNvdmVy
eS50ZWNobmlxdWUoKSAhPSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAorICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBvcGVyYW5kcy5v
cGVyYW5kRm9ySW5kZXgoaW5kZXgpOworICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQorICAg
ICAgICAgICAgY29udGludWU7CisKICAgICAgICAgTWluaWZpZWRJRCBpZCA9IHJlY292ZXJ5Lm5v
ZGVJRCgpOwogICAgICAgICBhdXRvIGl0ZXIgPSBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmZp
bmQoaWQpOwogICAgICAgICBpZiAoaXRlciAhPSBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmVu
ZCgpKSB7CkBAIC05ODcsNyArMTAyLDcgQEAgdm9pZCBPU1JFeGl0OjplbWl0UmVzdG9yZUFyZ3Vt
ZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPcGVyYW5kczxWYWwKIAogICAg
ICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNh
bGwpIHsKICAgICAgICAgICAgIGppdC5sb2FkUHRyKAotICAgICAgICAgICAgICAgIEFzc2VtYmx5
SGVscGVyczo6YWRkcmVzc0ZvcihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSks
CisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKFZpcnR1YWxSZWdp
c3RlcihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpLAogICAgICAgICAgICAg
ICAgIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGppdC5t
b3ZlKApAQCAtOTk3LDcgKzExMiw3IEBAIHZvaWQgT1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVu
dHMoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT3BlcmFuZHM8VmFsCiAKICAgICAg
ICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkg
ewogICAgICAgICAgICAgaml0LmxvYWQzMigKLSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBl
cnM6OnBheWxvYWRGb3Ioc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyksCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2Fk
Rm9yKFZpcnR1YWxSZWdpc3RlcihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKSksCiAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDEpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaml0Lm1vdmUoCkBAIC0xMDIzLDcgKzEzOCw3
IEBAIHZvaWQgT1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQs
IFZNJiB2bSwgY29uc3QgT3BlcmFuZHM8VmFsCiAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5v
bkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgIGppdC5zdG9yZUNlbGwoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kKSk7
CiAKLSAgICAgICAgYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5hZGQoaWQsIG9wZXJhbmQpOwor
ICAgICAgICBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmFkZChpZCwgb3BlcmFuZC52aXJ0dWFs
UmVnaXN0ZXIoKSk7CiAgICAgfQogfQogCkBAIC0xNDY2LDE2ICs1ODEsNzkgQEAgdm9pZCBPU1JF
eGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPU1JFeGl0
JiBleGl0LCBjb25zdAogICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQogICAgICAg
ICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9w
RW50cnlGcmFtZSk7CiAKKyAgICBpZiAoZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lU3RhY2tDb250
YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSkgeworICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2Ugc2hv
dWxkbid0IHVzZSBhIHByb2JlIGJ1dCBmaWxsaW5nIGFsbCB0aGUgc2lkZSBzdGF0ZSBvYmplY3Rz
IGlzIHRyaWNreSBvdGhlcndpc2UuLi4KKyAgICAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+IHZh
bHVlcyhvcGVyYW5kcy5udW1iZXJPZlRtcHMoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgb3BlcmFuZHMubnVtYmVyT2ZUbXBzKCk7ICsraSkKKyAgICAgICAgICAgIHZhbHVlc1tp
XSA9IG9wZXJhbmRzLnRtcChpKTsKKworICAgICAgICBWTSogdm1QdHIgPSAmdm07CisgICAgICAg
IGF1dG8qIHRtcFNjcmF0Y2ggPSBzY3JhdGNoICsgb3BlcmFuZHMudG1wSW5kZXgoMCk7CisgICAg
ICAgIGppdC5wcm9iZShbPSwgdmFsdWVzID0gV1RGTW92ZSh2YWx1ZXMpXSAoUHJvYmU6OkNvbnRl
eHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgIGF1dG8gYWRkU2lkZVN0YXRlID0gWyZdIChDYWxs
RnJhbWUqIGZyYW1lLCBCeXRlY29kZUluZGV4IGluZGV4LCBzaXplX3QgdG1wT2Zmc2V0KSB7Cisg
ICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRl
PiBzaWRlU3RhdGUgPSBXVEY6Om1ha2VVbmlxdWU8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+
KCk7CisKKyAgICAgICAgICAgICAgICBzaWRlU3RhdGUtPmJ5dGVjb2RlSW5kZXggPSBpbmRleDsK
KyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heE51bUNoZWNrcG9pbnRU
bXBzOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byYgcmVjb3ZlcnkgPSB2YWx1ZXNb
aSArIHRtcE9mZnNldF07CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
ZG8gd2hhdCB0aGUgRlRMIGRvZXMgYW5kIG1hdGVyaWFsaXplIGFsbCB0aGUgSlNWYWx1ZXMgaW50
byB0aGUgc2NyYXRjaCBidWZmZXIuCisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3Zl
cnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDb25zdGFudDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9IHJlY292ZXJ5LmNvbnN0
YW50KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAg
ICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgorICAgICAgICAgICAgICAgICAgICBjYXNlIElu
dDMyRGlzcGxhY2VkSW5KU1N0YWNrOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBzaWRlU3Rh
dGUtPnRtcHNbaV0gPSBqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90Pih0bXBTY3JhdGNoW2kg
KyB0bXBPZmZzZXRdKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNl
ZEluSlNTdGFjazoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBVbmJveGVkQ2VsbEluR1BSOgor
ICAgICAgICAgICAgICAgICAgICBjYXNlIENlbGxEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRGlzcGxh
Y2VkSW5KU1N0YWNrOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBzaWRlU3RhdGUtPnRtcHNb
aV0gPSByZWludGVycHJldF9jYXN0PEpTVmFsdWUqPih0bXBTY3JhdGNoKVtpICsgdG1wT2Zmc2V0
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IAorICAgICAgICAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgdm1QdHItPmFkZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoZnJhbWUsIFdURk1vdmUo
c2lkZVN0YXRlKSk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBjb25zdCBDb2RlT3Jp
Z2luKiBjb2RlT3JpZ2luOworICAgICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250
ZXh0LmdwcjxDYWxsRnJhbWUqPihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAg
ICAgICBmb3IgKGNvZGVPcmlnaW4gPSAmZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4gJiYg
Y29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLT5p
bmxpbmVDYWxsRnJhbWUoKS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMoKSkgeworICAgICAg
ICAgICAgICAgIEJ5dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5i
eXRlY29kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjYWxsQnl0ZWNvZGVJbmRleC5j
aGVja3BvaW50KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAg
ICAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1l
KCk7CisgICAgICAgICAgICAgICAgYWRkU2lkZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbEZy
YW1lKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY2FsbEZyYW1lKSArIGlubGluZUNhbGxGcmFt
ZS0+cmV0dXJuUENPZmZzZXQoKSAtIHNpemVvZihDUFVSZWdpc3RlcikpLCBjYWxsQnl0ZWNvZGVJ
bmRleCwgaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoIWNvZGVPcmlnaW4pCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgICAgICBpZiAoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+Ynl0
ZWNvZGVJbmRleCgpOyBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgICAgICAg
ICBhZGRTaWRlU3RhdGUoY2FsbEZyYW1lLCBieXRlY29kZUluZGV4LCAwKTsKKyAgICAgICAgfSk7
CisgICAgfQorCiAgICAgLy8gRG8gYWxsIGRhdGEgZm9ybWF0IGNvbnZlcnNpb25zIGFuZCBzdG9y
ZSB0aGUgcmVzdWx0cyBpbnRvIHRoZSBzdGFjay4KIAogICAgIGZvciAoc2l6ZV90IGluZGV4ID0g
MDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgY29uc3QgVmFs
dWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIFZpcnR1YWxS
ZWdpc3RlciByZWcgPSBvcGVyYW5kcy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChpbmRleCk7Ci0K
LSAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkgJiYgcmVnLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0
PGludD4oaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJl
Z2lzdGVycygpKSkKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gb3BlcmFuZHMub3BlcmFuZEZv
ckluZGV4KGluZGV4KTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIGludCBvcGVyYW5kID0gcmVnLm9mZnNldCgpOworICAgICAg
ICBpZiAob3BlcmFuZC5pc0xvY2FsKCkgJiYgb3BlcmFuZC50b0xvY2FsKCkgPCBzdGF0aWNfY2Fz
dDxpbnQ+KGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxS
ZWdpc3RlcnMoKSkpCisgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBzd2l0Y2ggKHJl
Y292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAppbmRleCBhN2U1ODc4YzA3MTcwOGEx
ZGE3NmMwYjBlYjU0ZDU0ZjFhMDRlYjhlLi45ZTliY2VhNDgxYzFkNjg3Nzk3MmYyNTlkNjJjMWEy
MzAwYjJiMTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaApAQCAtMTUw
LDggKzE1MCw2IEBAIHN0cnVjdCBPU1JFeGl0IDogcHVibGljIE9TUkV4aXRCYXNlIHsKIAogICAg
IGZyaWVuZCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGlsZU9TUkV4aXQoQ2FsbEZy
YW1lKik7CiAKLSAgICBzdGF0aWMgdm9pZCBleGVjdXRlT1NSRXhpdChQcm9iZTo6Q29udGV4dCYp
OwotCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9wYXRjaGFibGVK
dW1wTG9jYXRpb247CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE9TUkV4aXRQdHJUYWc+IG1f
Y29kZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
QmFzZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCmluZGV4
IDMxMDk2M2Q4NDQzNmM1MzMyNzg0ZjBhMjkyYTQ5Y2JlMWI4MmE1OWIuLjAwM2I2MThjZDQ0MGU0
MDBhYmFhY2VjMGFmYmMzYzEyNDM1ZGI5NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRCYXNlLmgKQEAgLTcwLDYgKzcwLDExIEBAIHN0cnVjdCBPU1JFeGl0QmFzZSB7
CiAgICAgICAgIHJldHVybiBtX2tpbmQgPT0gR2VuZXJpY1Vud2luZDsKICAgICB9CiAKKyAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgaXNFeGl0aW5nVG9DaGVja3BvaW50SGFuZGxlcigpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3Bv
aW50KCk7CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBjb25zaWRlckFkZGluZ0FzRnJl
cXVlbnRFeGl0U2l0ZShDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrLCBFeGl0aW5nSklUVHlw
ZSBqaXRUeXBlKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAppbmRleCA3YmE1ZDZlMjJiZTVmYWI0NjJlMjA1
ZTAwMDBkMTg1ZmZkODgwMTI0Li4yN2UyYWE4ZDk4Zjc3YzJjYmZkZDM3ZTJhY2RjNzJmNDhkYzVl
OWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uY3BwCkBAIC0yOSwxMiArMjksMTUgQEAKICNpZiBFTkFCTEUoREZHX0pJ
VCkKIAogI2luY2x1ZGUgIkJ5dGVjb2Rlcy5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0
U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09wZXJh
dGlvbnMuaCIKICNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKKyNpbmNs
dWRlICJMTEludFRodW5rcy5oIgorI2luY2x1ZGUgIlByb2JlQ29udGV4dC5oIgogI2luY2x1ZGUg
IlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
QEAgLTE0Miw2ICsxNDUsMTAgQEAgdm9pZCBoYW5kbGVFeGl0Q291bnRzKFZNJiB2bSwgQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+IGNhbGxlclJldHVyblBDKENvZGVCbG9jayogYmFzZWxpbmVDb2Rl
QmxvY2tGb3JDYWxsZXIsIEJ5dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXgsIElubGluZUNh
bGxGcmFtZTo6S2luZCB0cnVlQ2FsbGVyQ2FsbEtpbmQsIGJvb2wmIGNhbGxlcklzTExJbnQpCiB7
CiAgICAgY2FsbGVySXNMTEludCA9IE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8fCBi
YXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJl
dGVyVGh1bms7CisKKyAgICBpZiAoY2FsbEJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAg
ICAgICByZXR1cm4gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY2hlY2twb2ludF9v
c3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lKTsKKwogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqdW1wVGFyZ2V0OwogCiAgICAgaWYgKGNhbGxlcklz
TExJbnQpIHsKQEAgLTIzNyw3ICsyNDQsNyBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgIC8vIGluIHBy
ZXNlbmNlIG9mIGlubGluZWQgdGFpbCBjYWxscy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NTExCiAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxp
bmVDb2RlKGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKTsKLSAgICBqaXQuc3Rv
cmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5iYXNlbGluZUNvZGVCbG9j
aygpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSk7CisgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbVB0cihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKSksIEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKIAogICAgIGNvbnN0IENvZGVP
cmlnaW4qIGNvZGVPcmlnaW47CiAgICAgZm9yIChjb2RlT3JpZ2luID0gJmV4aXQubV9jb2RlT3Jp
Z2luOyBjb2RlT3JpZ2luICYmIGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpOyBjb2RlT3Jp
Z2luID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCktPmdldENhbGxlclNraXBwaW5nVGFp
bENhbGxzKCkpIHsKQEAgLTMwNCwzMyArMzExLDM0IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZy
YW1lcyhDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCi0gICAgICAg
ICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXls
b2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKKyAgICAgICAgICAg
IGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRG
b3IoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKICNpZiBVU0UoSlNWQUxVRTY0
KQogICAgICAgICBqaXQuc3RvcmVQdHIoY2FsbGVyRnJhbWVHUFIsIEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9mZnNldCgp
KSk7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9y
aWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5iaXRzKCk7Ci0gICAgICAgIGppdC5zdG9yZTMyKEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVyczo6
dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKKyAgICAgICAgdWlu
dDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChiYXNlbGluZUNvZGVCbG9jay0+Ynl0
ZWNvZGVJbmRleEZvckV4aXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKSkuYml0cygpOwor
ICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlv
bkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKSkpOwogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkK
LSAgICAgICAgICAgIGppdC5zdG9yZTY0KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSkp
KSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CisgICAgICAg
ICAgICBqaXQuc3RvcmU2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZShpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKSksIEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICNlbHNlIC8vIFVTRShKU1ZB
TFVFNjQpIC8vIHNvIHRoaXMgaXMgdGhlIDMyLWJpdCBwYXJ0CiAgICAgICAgIGppdC5zdG9yZVB0
cihjYWxsZXJGcmFtZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldChp
bmxpbmVDYWxsRnJhbWUtPmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKICAgICAgICAgY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LmF0KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0gICAgICAgIHVpbnQzMl90
IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChiaXR3aXNlX2Nhc3Q8
dWludDMyX3Q+KGluc3RydWN0aW9uKSkpLmJpdHMoKTsKLSAgICAgICAgaml0LnN0b3JlMzIoQXNz
ZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJz
Ojp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpOwotICAgICAgICBq
aXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKKyAgICAgICAgdWlu
dDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleCgpLmJpdHMoKTsKKyAgICAgICAgaml0
LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNz
ZW1ibHlIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsK
KyAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6Q2VsbFRhZyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3Rlcihpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogICAg
ICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIGpp
dC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1l
LT5jYWxsZWVDb25zdGFudCgpKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFs
UmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpKSk7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSksIEFzc2VtYmx5SGVs
cGVyczo6cGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0
KSAvLyBlbmRpbmcgdGhlICNlbHNlIHBhcnQsIHNvIGRpcmVjdGx5IGFib3ZlIGlzIHRoZSAzMi1i
aXQgcGFydAogICAgIH0KIAogICAgIC8vIERvbid0IG5lZWQgdG8gc2V0IHRoZSB0b3BsZXZlbCBj
b2RlIG9yaWdpbiBpZiB3ZSBvbmx5IGRpZCBpbmxpbmUgdGFpbCBjYWxscwogICAgIGlmIChjb2Rl
T3JpZ2luKSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25C
aXRzID0gQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLmJpdHMoKTsK
KyAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUlu
ZGV4KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKSkpLmJpdHMoKTsKICNlbHNl
Ci0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGppdC5iYXNlbGluZUNv
ZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkp
LnB0cigpOwotICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KEJ5
dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikpKS5iaXRzKCk7
CisgICAgICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5i
eXRlY29kZUluZGV4Rm9yRXhpdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpOworICAgICAg
ICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2so
KS0+aW5zdHJ1Y3Rpb25zKGJ5dGVjb2RlSW5kZXgpLmF0KCkucHRyKCk7CisgICAgICAgIHVpbnQz
Ml90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90Pihp
bnN0cnVjdGlvbikpLmJpdHMoKTsKICNlbmRpZgotICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJs
eUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRh
Z0ZvcigoVmlydHVhbFJlZ2lzdGVyKShDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcykpKTsKKyAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVk
SW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICB9CiB9CiAKQEAgLTM4NSw3ICsz
OTMsMTEgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAgICAgaWYgKGV4aXRUb0xMSW50KSB7CiAg
ICAgICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgoKTsKICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICpj
b2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5wdHIoKTsK
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9u
ID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY3VycmVudEluc3RydWN0aW9uKTsK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9u
OworICAgICAgICBpZiAoYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICBk
ZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGNoZWNrcG9pbnRf
b3NyX2V4aXRfdHJhbXBvbGluZSk7CisgICAgICAgIGVsc2UgCisgICAgICAgICAgICBkZXN0aW5h
dGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlv
bik7CiAKICAgICAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKICAgICAgICAg
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmY3VycmVudEluc3RydWN0
aW9uKSwgR1BSSW5mbzo6cmVnVDIpOwpAQCAtNDAxLDEwICs0MTMsMTggQEAgdm9pZCBhZGp1c3RB
bmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJh
c2UmIGV4aXQpCiAjZW5kaWYKICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLnJldGFn
Z2VkPE9TUkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24gPSBj
b2RlQmxvY2tGb3JFeGl0LT5qaXRDb2RlTWFwKCkuZmluZChleGl0Lm1fY29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KCkpOwotICAgICAgICBBU1NFUlQoY29kZUxvY2F0aW9uKTsKKyAgICAgICAgQnl0
ZWNvZGVJbmRleCBleGl0SW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlv
bjsKKyAgICAgICAgaWYgKGV4aXRJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICBkZXN0
aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGNoZWNrcG9pbnRfb3Ny
X2V4aXRfdHJhbXBvbGluZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKGNv
ZGVCbG9ja0ZvckV4aXQtPmJ5dGVjb2RlSW5kZXhGb3JFeGl0KGV4aXRJbmRleCkgPT0gZXhpdElu
ZGV4KTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gY29kZUJsb2NrRm9yRXhpdC0+aml0Q29k
ZU1hcCgpLmZpbmQoZXhpdEluZGV4KTsKKyAgICAgICAgfQogCi0gICAgICAgIGp1bXBUYXJnZXQg
PSBjb2RlTG9jYXRpb24ucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVz
cygpOworICAgICAgICBBU1NFUlQoZGVzdGluYXRpb24pOworCisgICAgICAgIGp1bXBUYXJnZXQg
PSBkZXN0aW5hdGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNz
KCk7CiAgICAgfQogCiAgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0z
MihKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2tGb3JFeGl0KSAqIHNpemVvZihS
ZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQXNzZW1ibHlIZWxwZXJzOjpz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAppbmRleCBhOTk1
OTdmNjY0MzhjZGE3ODRlZTM5NmQzMWU0MTY4YWIzZjk4NjExLi5iODU5NTk4MTA3MTA4MDRjMjUy
Nzc2NTI1ZTUxMjZjNjNhMjZlNzZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKQEAgLTIy
NDIsNyArMjI0Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobV9oZWFwLmZvbGxvdyhh
dmFpbGFiaWxpdHkubV9sb2NhbHNbaV0ubm9kZSgpKSAhPSBlc2NhcGVlKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGF2YWlsYWJpbGl0eS5t
X2xvY2Fscy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQg
PSBhdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNw
ZWNOb25lLCBNb3ZIaW50LCBvcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwgT3BJbmZvKG9w
ZXJhbmQpLAogICAgICAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvbi0+ZGVmYXVsdEVkZ2UoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wSW5mby5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcEluZm8uaAppbmRleCBmMzljMTRiOWYwYTQ0ODc4
OWQ3NzJkYzI3ZGYxNTg4MWU1MDg2ODk1Li43N2VmY2ZiMjQ4MDAyYTRiZjVlYTYwYTZlNjY1MjBm
ZTA1MTQ0YmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wSW5m
by5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BJbmZvLmgKQEAgLTQ0LDcg
KzQ0LDcgQEAgc3RydWN0IE9wSW5mbyB7CiAgICAgZXhwbGljaXQgT3BJbmZvKEludGVncmFsVHlw
ZSB2YWx1ZSkKICAgICAgICAgOiBtX3ZhbHVlKHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZSkp
IHsgfQogICAgIGV4cGxpY2l0IE9wSW5mbyhSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkg
OiBtX3ZhbHVlKHN0YXRpY19jYXN0PHVpbnQ2NF90PihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihz
dHJ1Y3R1cmUpKSkgeyB9Ci0KKyAgICBleHBsaWNpdCBPcEluZm8oT3BlcmFuZCBvcCkgOiBtX3Zh
bHVlKG9wLmFzQml0cygpKSB7IH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgIGV4
cGxpY2l0IE9wSW5mbyhUKiBwdHIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAppbmRleCBiYjVjODM1OWMxMjg1YWNiMzYxMWRiNTI3NjhmMzUwOTA4ZjA0ZjYz
Li5jZGFmN2JlOGRjZmE0MGI5MWU2NzZiNjc1NGM4MGU3NGY2NWQxM2EyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKQEAgLTI5NzEsMTcgKzI5NzEsMTgg
QEAgaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5SW5kZXhPZlZhbHVlRG91Ymxl
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmoKICAgICByZXR1cm4gLTE7CiB9CiAKLXZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25Mb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBpbnQzMl90IGZpcnN0RWxlbWVudERlc3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1
bWVudHMsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBtYW5kYXRv
cnlNaW5pbXVtKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxvYWRWYXJhcmdzKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgZmlyc3RFbGVtZW50RGVzdCwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEFyZ3VtZW50cywgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5n
dGhJbmNsdWRpbmdUaGlzLCB1aW50MzJfdCBtYW5kYXRvcnlNaW5pbXVtKQogeworICAgIFZpcnR1
YWxSZWdpc3RlciBmaXJzdEVsZW1lbnQgeyBmaXJzdEVsZW1lbnREZXN0IH07CiAgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFS
RV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50cyk7CiAgICAgCi0gICAgbG9hZFZhcmFyZ3MoZ2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlcihmaXJzdEVsZW1lbnREZXN0KSwgYXJn
dW1lbnRzLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgbG9hZFZhcmFyZ3MoZ2xvYmFsT2JqZWN0LCBi
aXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCZjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50KSksIGFyZ3Vt
ZW50cywgb2Zmc2V0LCBsZW5ndGhJbmNsdWRpbmdUaGlzIC0gMSk7CiAgICAgCi0gICAgZm9yICh1
aW50MzJfdCBpID0gbGVuZ3RoOyBpIDwgbWFuZGF0b3J5TWluaW11bTsgKytpKQotICAgICAgICBj
YWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0ganNVbmRlZmluZWQoKTsKKyAgICBm
b3IgKHVpbnQzMl90IGkgPSBsZW5ndGhJbmNsdWRpbmdUaGlzIC0gMTsgaSA8IG1hbmRhdG9yeU1p
bmltdW07ICsraSkKKyAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudCArIGkpID0ganNV
bmRlZmluZWQoKTsKIH0KIAogZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50
cyhpbnQzMl90IGEsIGludDMyX3QgYikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcAppbmRleCBjYmMyYzhiZmFlNGU5NGQw
OTVkZGM5MTU3ZGIzNmFiNWEwYzZhZGMyLi4yYjEwNWIyY2FkZTdiN2Q1NTg5ZmFkZWFmYjAyYmMw
OTY0NWUwOWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50
b21JbnNlcnRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
aGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwCkBAIC00MywxMSArNDMsOCBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKIG5hbWVzcGFjZSB7CiAKLW5hbWVzcGFjZSBERkdQaGFudG9t
SW5zZXJ0aW9uUGhhc2VJbnRlcm5hbCB7Ci1zdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9
IGZhbHNlOwotfQotCiBjbGFzcyBQaGFudG9tSW5zZXJ0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2Ug
eworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBwdWJsaWM6CiAg
ICAgUGhhbnRvbUluc2VydGlvblBoYXNlKEdyYXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFzZShn
cmFwaCwgInBoYW50b20gaW5zZXJ0aW9uIikKQEAgLTYyLDcgKzU5LDcgQEAgcHVibGljOgogICAg
ICAgICAvLyBTZXRMb2NhbHMgZXhlY3V0ZSwgd2hpY2ggaXMgaW5hY2N1cmF0ZS4gVGhhdCBjYXVz
ZXMgdXMgdG8gaW5zZXJ0IHRvbyBmZXcgUGhhbnRvbXMuCiAgICAgICAgIERGR19BU1NFUlQobV9n
cmFwaCwgbnVsbHB0ciwgbV9ncmFwaC5tX3JlZkNvdW50U3RhdGUgPT0gRXhhY3RSZWZDb3VudCk7
CiAgICAgICAgIAotICAgICAgICBpZiAoREZHUGhhbnRvbUluc2VydGlvblBoYXNlSW50ZXJuYWw6
OnZlcmJvc2UpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2co
IkdyYXBoIGJlZm9yZSBQaGFudG9tIGluc2VydGlvbjpcbiIpOwogICAgICAgICAgICAgbV9ncmFw
aC5kdW1wKCk7CiAgICAgICAgIH0KQEAgLTcyLDcgKzY5LDcgQEAgcHVibGljOgogICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKQog
ICAgICAgICAgICAgaGFuZGxlQmxvY2soYmxvY2spOwogICAgICAgICAKLSAgICAgICAgaWYgKERG
R1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgIGlmICh2
ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBhZnRlciBQaGFudG9tIGluc2Vy
dGlvbjpcbiIpOwogICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CiAgICAgICAgIH0KQEAgLTEw
MywyMiArMTAwLDIyIEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIGxhc3RFeGl0aW5nSW5k
ZXggPSAwOwogICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8
IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0g
YmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICBpZiAoREZHUGhhbnRvbUluc2VydGlv
blBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyAiLCBub2RlLCAiXG4iKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNl
IE1vdkhpbnQ6Ci0gICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT51bmxpbmtl
ZExvY2FsKCkpID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIG1fdmFs
dWVzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgY2FzZSBab21iaWVIaW50OgotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9k
ZS0+dW5saW5rZWRMb2NhbCgpKSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV92YWx1ZXMu
b3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBudWxscHRyOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgY2Fz
ZSBTZXRBcmd1bWVudERlZmluaXRlbHk6CiAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50TWF5
YmU6Ci0gICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG51
bGxwdHI7CisgICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkp
ID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGRlZmF1bHQ6CkBAIC0xMzQsMzggKzEzMSw0MiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCiAgICAgICAgICAgICAgICAgbm9kZSwKICAgICAg
ICAgICAgICAgICBbJl0gKEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
TG5JZih2ZXJib3NlLCAiVXBkYXRpbmcgZXBvY2ggZm9yICIsIGVkZ2UsICIgdG8gIiwgY3VycmVu
dEVwb2NoKTsKICAgICAgICAgICAgICAgICAgICAgZWRnZS0+c2V0RXBvY2goY3VycmVudEVwb2No
KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbm9kZS0+
c2V0RXBvY2goY3VycmVudEVwb2NoKTsKIAotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFs
cmVhZHlLaWxsZWQ7CisgICAgICAgICAgICBPcGVyYW5kIGFscmVhZHlLaWxsZWQ7CiAKLSAgICAg
ICAgICAgIGF1dG8gcHJvY2Vzc0tpbGxlZE9wZXJhbmQgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBy
ZWcpIHsKLSAgICAgICAgICAgICAgICBpZiAoREZHUGhhbnRvbUluc2VydGlvblBoYXNlSW50ZXJu
YWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBLaWxsZWQgb3Bl
cmFuZDogIiwgcmVnLCAiXG4iKTsKKyAgICAgICAgICAgIGF1dG8gcHJvY2Vzc0tpbGxlZE9wZXJh
bmQgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgIGRhdGFMb2dMbklm
KHZlcmJvc2UsICIgICAgS2lsbGVkIG9wZXJhbmQ6ICIsIG9wZXJhbmQpOwogCiAgICAgICAgICAg
ICAgICAgLy8gQWxyZWFkeSBoYW5kbGVkIGZyb20gU2V0TG9jYWwuCi0gICAgICAgICAgICAgICAg
aWYgKHJlZyA9PSBhbHJlYWR5S2lsbGVkKQorICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kID09
IGFscmVhZHlLaWxsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9z
ZSwgIiAgICBPcGVyYW5kICIsIG9wZXJhbmQsICIgYWxyZWFkeSBraWxsZWQgYnkgc2V0IGxvY2Fs
Iik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTm9kZSoga2lsbGVkTm9kZSA9IG1fdmFsdWVz
Lm9wZXJhbmQocmVnKTsKLSAgICAgICAgICAgICAgICBpZiAoIWtpbGxlZE5vZGUpCisgICAgICAg
ICAgICAgICAgTm9kZSoga2lsbGVkTm9kZSA9IG1fdmFsdWVzLm9wZXJhbmQob3BlcmFuZCk7IAor
ICAgICAgICAgICAgICAgIGlmICgha2lsbGVkTm9kZSkgeworICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nTG5JZih2ZXJib3NlLCAiICAgIE9wZXJhbmQgIiwgb3BlcmFuZCwgIiB3YXMgbm90IGRl
ZmluZWQgaW4gdGhpcyBibG9jay4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQocmVnKSA9
IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChvcGVyYW5kKSA9IG51
bGxwdHI7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVk
IHRvIGluc2VydCBhIFBoYW50b20gaWYgdGhlIG5vZGUgaGFzbid0IGJlZW4gdXNlZCBzaW5jZSB0
aGUgbGFzdAogICAgICAgICAgICAgICAgIC8vIGV4aXQsIGFuZCB3YXMgYm9ybiBiZWZvcmUgdGhl
IGxhc3QgZXhpdC4KLSAgICAgICAgICAgICAgICBpZiAoa2lsbGVkTm9kZS0+ZXBvY2goKSA9PSBj
dXJyZW50RXBvY2gpCisgICAgICAgICAgICAgICAgaWYgKGtpbGxlZE5vZGUtPmVwb2NoKCkgPT0g
Y3VycmVudEVwb2NoKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2Us
ICIgICAgT3BlcmFuZCAiLCBvcGVyYW5kLCAiIGhhcyBjdXJyZW50IGVwb2NoICIsIGN1cnJlbnRF
cG9jaCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBpZiAoREZHUGhhbnRvbUluc2VydGlvblBoYXNlSW50ZXJuYWw6OnZlcmJv
c2UpIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICAgICAgICAg
ICAgICIgICAgSW5zZXJ0aW5nIFBoYW50b20gb24gIiwga2lsbGVkTm9kZSwgIiBhZnRlciAiLAot
ICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPmF0KGxhc3RFeGl0aW5nSW5kZXgpLCAiXG4i
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ZGF0YUxvZ0xuSWYodmVyYm9zZSwKKyAgICAgICAgICAgICAgICAgICAgIiAgICBJbnNlcnRpbmcg
UGhhbnRvbSBvbiAiLCBraWxsZWROb2RlLCAiIGFmdGVyICIsCisgICAgICAgICAgICAgICAgICAg
IGJsb2NrLT5hdChsYXN0RXhpdGluZ0luZGV4KSk7CisgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgLy8gV2UgaGF2ZSBleGFjdCByZWYgY291bnRzLCBzbyBjcmVhdGluZyBhIG5ldyB1
c2UgbWVhbnMgdGhhdCB3ZSBoYXZlIHRvCiAgICAgICAgICAgICAgICAgLy8gaW5jcmVtZW50IHRo
ZSByZWYgY291bnQuCiAgICAgICAgICAgICAgICAga2lsbGVkTm9kZS0+cG9zdGZpeFJlZigpOwpA
QCAtMTc5LDE0ICsxODAsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH07CiAKICAgICAgICAg
ICAgIGlmIChub2RlLT5vcCgpID09IFNldExvY2FsKSB7Ci0gICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5k
IG9wZXJhbmQgPSBub2RlLT5vcGVyYW5kKCk7CiAgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXlF
eGl0KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBTZXRMb2NhbCBkb2VzIGV4aXQs
IHdlIG5lZWQgdGhlIE1vdkhpbnQgb2YgaXRzIGxvY2FsCiAgICAgICAgICAgICAgICAgICAgIC8v
IHRvIGJlIGxpdmUgdW50aWwgdGhlIFNldExvY2FsIGlzIGRvbmUuCi0gICAgICAgICAgICAgICAg
ICAgIHByb2Nlc3NLaWxsZWRPcGVyYW5kKGxvY2FsKTsKLSAgICAgICAgICAgICAgICAgICAgYWxy
ZWFkeUtpbGxlZCA9IGxvY2FsOworICAgICAgICAgICAgICAgICAgICBwcm9jZXNzS2lsbGVkT3Bl
cmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUtpbGxlZCA9IG9wZXJh
bmQ7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQo
bG9jYWwpID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG9wZXJh
bmQpID0gbnVsbHB0cjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZm9yQWxsS2lsbGVk
T3BlcmFuZHMobV9ncmFwaCwgbm9kZSwgYmxvY2stPnRyeUF0KG5vZGVJbmRleCArIDEpLCBwcm9j
ZXNzS2lsbGVkT3BlcmFuZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCmluZGV4IDEyOGM4NDFmMGFjN2Y5ZGViNjJmN2U2
ZmM0NjNhNTI4NzM0Yzc1NTkuLjM2MTgxYTI4MjEzMzllODhiNjYzYzY1ODcxYzBkYTNjYzQ0ZGU4
YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2Fs
Q2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxv
Y2FsQ2xvYmJlcml6ZS5oCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhbGxJ
ZkFwcHJvcHJpYXRlKG1fcmVhZCwgVmlydHVhbFJlZ2lzdGVyKGhlYXAucGF5bG9hZCgpLnZhbHVl
MzIoKSkpOworICAgICAgICAgICAgY2FsbElmQXBwcm9wcmlhdGUobV9yZWFkLCBoZWFwLm9wZXJh
bmQoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkBAIC02OCw3
ICs2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gV2UgZXhwZWN0IHN0YWNrIHdyaXRlcyB0byBh
bHJlYWR5IGJlIHByZWNpc2VseSBjaGFyYWN0ZXJpemVkIGJ5IERGRzo6Y2xvYmJlcml6ZSgpLgog
ICAgICAgICBpZiAoaGVhcC5raW5kKCkgPT0gU3RhY2spIHsKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKTsKLSAgICAgICAgICAgIGNhbGxJZkFwcHJv
cHJpYXRlKG1fdW5jb25kaXRpb25hbFdyaXRlLCBWaXJ0dWFsUmVnaXN0ZXIoaGVhcC5wYXlsb2Fk
KCkudmFsdWUzMigpKSk7CisgICAgICAgICAgICBjYWxsSWZBcHByb3ByaWF0ZShtX3VuY29uZGl0
aW9uYWxXcml0ZSwgaGVhcC5vcGVyYW5kKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIApAQCAtODcsMTIgKzg3LDEyIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGxvY2F0aW9uLmhlYXAoKS5raW5kKCkgPT0gU3RhY2spOwogICAg
ICAgICAKLSAgICAgICAgbV9kZWYoVmlydHVhbFJlZ2lzdGVyKGxvY2F0aW9uLmhlYXAoKS5wYXls
b2FkKCkudmFsdWUzMigpKSwgbm9kZSk7CisgICAgICAgIG1fZGVmKGxvY2F0aW9uLmhlYXAoKS5v
cGVyYW5kKCksIG5vZGUpOwogICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGNhbGxJZkFwcHJvcHJpYXRlKGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIHZvaWQgY2FsbElmQXBwcm9w
cmlhdGUoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAg
ICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihvcGVy
YW5kLnRvTG9jYWwoKSkgPj0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJl
ck9mTG9jYWxzKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMDksMTMgKzEwOSwxMyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpIHsKICAgICAgICAgICAg
ICAgICAvLyBSZWFkIHRoZSBvdXRlcm1vc3QgYXJndW1lbnRzIGFuZCBhcmd1bWVudCBjb3VudC4K
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tp
cDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2dyYXBoLm1fY29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCkpOyBpKyspCi0gICAgICAgICAgICAgICAgICAgIG1fcmVhZCh2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudChpKSk7CisgICAgICAgICAgICAgICAgICAgIG1fcmVhZCh2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkpOwogICAgICAgICAgICAgICAgIG1fcmVh
ZChWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
OyBpIDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNXaXRoRml4dXAuc2l6ZSgpOyBpKyspCi0g
ICAgICAgICAgICAgICAgbV9yZWFkKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkub2Zmc2V0KCkpKTsKKyAg
ICAgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkub2Zm
c2V0KCkpKTsKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQog
ICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7
CiAgICAgICAgIH07CkBAIC0yMjUsMTQgKzIyNSwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
dW5zaWduZWQgaW5kZXhJbmNsdWRpbmdUaGlzID0gbV9ub2RlLT5hcmd1bWVudEluZGV4KCk7CiAg
ICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkgewogICAgICAgICAgICAgICAgIGlmIChp
bmRleEluY2x1ZGluZ1RoaXMgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9ncmFwaC5tX2NvZGVC
bG9jay0+bnVtUGFyYW1ldGVycygpKSkKLSAgICAgICAgICAgICAgICAgICAgbV9yZWFkKHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4SW5jbHVkaW5nVGhpcykpOworICAgICAgICAgICAg
ICAgICAgICBtX3JlYWQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGlu
ZGV4SW5jbHVkaW5nVGhpcykpOwogICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0
ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRShpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpLCAiR2V0QXJndW1lbnQgaXMgb25s
eSB1c2VkIGZvciBJbmxpbmVDYWxsRnJhbWUgaWYgdGhlIGNhbGwgZnJhbWUgaXMgdmFyYXJncy4i
KTsKICAgICAgICAgICAgIGlmIChpbmRleEluY2x1ZGluZ1RoaXMgPCBpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50c1dpdGhGaXh1cC5zaXplKCkpCi0gICAgICAgICAgICAgICAgbV9yZWFkKFZpcnR1
YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoaW5kZXhJbmNsdWRpbmdUaGlzKS5vZmZzZXQoKSkpOworICAgICAgICAgICAg
ICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpbmRleEluY2x1ZGluZ1Ro
aXMpLm9mZnNldCgpKSk7CiAgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcykpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTI0MSw3ICsy
NDEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gQWxsIG9mIHRoZSBvdXRlcm1vc3QgYXJn
dW1lbnRzLCBleGNlcHQgdGhpcywgYXJlIHJlYWQgaW4gc2xvcHB5IG1vZGUuCiAgICAgICAgICAg
ICBpZiAoIW1fZ3JhcGgubV9jb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKSB7CiAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KQotICAgICAgICAgICAgICAgICAgICBtX3JlYWQodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoaSkpOworICAgICAgICAgICAgICAgICAgICBtX3JlYWQodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgICAgICAvLyBUaGUgc3RhY2sgaGVhZGVyIGlzIHJlYWQuCkBAIC0yNTIsNyArMjUyLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUgPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsgaW5saW5l
Q2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUtPmdldENhbGxlcklu
bGluZUZyYW1lU2tpcHBpbmdUYWlsQ2FsbHMoKSkgewogICAgICAgICAgICAgICAgIGlmICghaW5s
aW5lQ2FsbEZyYW1lLT5pc1N0cmljdE1vZGUoKSkgewogICAgICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1dpdGhGaXh1cC5zaXplKCk7
IGktLTspCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChp
KS5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9yZWFkKFZpcnR1YWxSZWdp
c3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnRJbmNsdWRpbmdUaGlzKGkpLm9mZnNldCgpKSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAgICAg
ICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCmluZGV4
IDQ0N2UyNGUyYTExNjMzN2M4M2UzYmFhMzEyNzM1NzkyYjkwNDcyOWQuLjViNGY5OTI5MzQxMTc5
YzIwNDk5NTJiZGMzODY5NjUyOWYwZmMzMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAKQEAgLTcyLDcg
KzcyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
Y29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzID0gbV9n
cmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcygpOwogICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgaW50IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAg
ICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRG
b3JJbmRleChpKTsKICAgICAgICAgICAgICAgICBPcHRpb25hbDxKU1ZhbHVlPiB2YWx1ZSA9IG11
c3RIYW5kbGVWYWx1ZXNbaV07CiAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IGYxMWNlNzY0
YjM5NmQ5YTNhOWZmN2E4ZDVlYzRjMThhZTExZTQ3MDcuLmY5MmFlOWRiMGJkN2QzODFlMGViNWZh
Mjc2MDc2ZDFhNDE5ZDAzNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0xMzc0LDYgKzEz
NzQsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgWm9t
YmllSGludDoKICAgICAgICAgY2FzZSBFeGl0T0s6CisgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0
aDoKICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJn
czoKICAgICAgICAgY2FzZSBQdXREeW5hbWljVmFyOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAppbmRleCA4NzI3NzYwYzZl
Y2JkYjMyZWFlNjAzYmFjYmQxMDAzNzRkODE0ZmU3Li5jOTc5MzM1YTMwMWVmNDZiOTkyM2VkZmY1
NTZiZTczZDU3ZjU4ZjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcApAQCAtNDIsMTEgKzQyLDggQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBuYW1lc3BhY2UgewogCi1uYW1lc3BhY2UgREZHUHV0
U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbCB7Ci1zdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9z
ZSA9IGZhbHNlOwotfQotCiBjbGFzcyBQdXRTdGFja1NpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFz
ZSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIHB1YmxpYzoK
ICAgICBQdXRTdGFja1NpbmtpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2Uo
Z3JhcGgsICJQdXRTdGFjayBzaW5raW5nIikKQEAgLTczLDcgKzcwLDcgQEAgcHVibGljOgogICAg
ICAgICAvLyB0aGUgc3RhY2suIEl0J3Mgbm90IGNsZWFyIHRvIG1lIGlmIHRoaXMgaXMgaW1wb3J0
YW50IG9yIG5vdC4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0NTI5NgogICAgICAgICAKLSAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1Bo
YXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAg
ICAgIGRhdGFMb2coIkdyYXBoIGJlZm9yZSBQdXRTdGFjayBzaW5raW5nOlxuIik7CiAgICAgICAg
ICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQpAQCAtODgsMTEgKzg1LDggQEAgcHVibGlj
OgogICAgICAgICBCbG9ja01hcDxPcGVyYW5kczxib29sPj4gbGl2ZUF0VGFpbChtX2dyYXBoKTsK
ICAgICAgICAgCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nr
c0luTmF0dXJhbE9yZGVyKCkpIHsKLSAgICAgICAgICAgIGxpdmVBdEhlYWRbYmxvY2tdID0gT3Bl
cmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAg
ICAgICAgIGxpdmVBdFRhaWxbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBi
bG9jay0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbGl2ZUF0
SGVhZFtibG9ja10uZmlsbChmYWxzZSk7Ci0gICAgICAgICAgICBsaXZlQXRUYWlsW2Jsb2NrXS5m
aWxsKGZhbHNlKTsKKyAgICAgICAgICAgIGxpdmVBdEhlYWRbYmxvY2tdID0gT3BlcmFuZHM8Ym9v
bD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkLCBmYWxzZSk7CisgICAgICAg
ICAgICBsaXZlQXRUYWlsW2Jsb2NrXSA9IE9wZXJhbmRzPGJvb2w+KE9wZXJhbmRzTGlrZSwgYmxv
Y2stPnZhcmlhYmxlc0F0SGVhZCwgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBib29sIGNoYW5nZWQ7CkBAIC0xMDcsMzMgKzEwMSwzNCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgT3BlcmFuZHM8Ym9vbD4gbGl2ZSA9IGxpdmVBdFRhaWxbYmxvY2tdOwogICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4
LS07KSB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUlu
ZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50
ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTGl2ZSBhdCAiLCBub2RlLCAiOiAiLCBsaXZlLCAi
XG4iKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIFZlY3RvcjxW
aXJ0dWFsUmVnaXN0ZXIsIDQ+IHJlYWRzOwotICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Vmly
dHVhbFJlZ2lzdGVyLCA0PiB3cml0ZXM7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBl
SGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgVmVjdG9yPE9wZXJhbmQsIDQ+IHJlYWRzOworICAgICAgICAgICAgICAgICAgICBWZWN0
b3I8T3BlcmFuZCwgND4gd3JpdGVzOworICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhh
bmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJ
bnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAiLCBvcGVyYW5kLCAiIGlz
IGxpdmUgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICByZWFkcy5h
cHBlbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9w
ZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBQdXRTdGFjayB8fCBub2RlLT5vcCgp
ID09IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MgfHwgbm9kZS0+
b3AoKSA9PSBLaWxsU3RhY2spOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBvcCA9IG5v
ZGUtPm9wKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChvcCA9PSBQ
dXRTdGFjayB8fCBvcCA9PSBMb2FkVmFyYXJncyB8fCBvcCA9PSBGb3J3YXJkVmFyYXJncyB8fCBv
cCA9PSBLaWxsU3RhY2spOwogICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVzLmFwcGVuZChv
cGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgICAgICAgICBw
cmVjaXNlTG9jYWxDbG9iYmVyaXplKAogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwg
bm9kZSwgZXNjYXBlSGFuZGxlciwgd3JpdGVIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIsIExhenlOb2RlKSB7IH0pOworICAgICAgICAgICAgICAg
ICAgICAgICAgWyZdIChPcGVyYW5kLCBMYXp5Tm9kZSkgeyB9KTsKIAotICAgICAgICAgICAgICAg
ICAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIDogd3JpdGVzKQorICAgICAgICAgICAg
ICAgICAgICBmb3IgKE9wZXJhbmQgb3BlcmFuZCA6IHdyaXRlcykKICAgICAgICAgICAgICAgICAg
ICAgICAgIGxpdmUub3BlcmFuZChvcGVyYW5kKSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAg
ICBmb3IgKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIDogcmVhZHMpCisgICAgICAgICAgICAgICAg
ICAgIGZvciAoT3BlcmFuZCBvcGVyYW5kIDogcmVhZHMpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBsaXZlLm9wZXJhbmQob3BlcmFuZCkgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAKQEAgLTIzNCw3ICsyMjksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
T3BlcmFuZHM8Rmx1c2hGb3JtYXQ+IGRlZmVycmVkID0gZGVmZXJyZWRBdEhlYWRbYmxvY2tdOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9j
aykgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRl
cm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCJEZWZlcnJlZCBhdCAiLCBub2RlLCAiOiIsIGRlZmVy
cmVkLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlm
IChub2RlLT5vcCgpID09IEdldFN0YWNrKSB7CkBAIC0yNjEsNyArMjU2LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1MDM5OAogCiAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzQ29uZmxp
Y3RpbmcgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9k
ZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSA9PSBDb25mbGljdGluZ0ZsdXNoOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NE
YXRhKCktPm9wZXJhbmQpID09IENvbmZsaWN0aW5nRmx1c2g7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgIWlz
Q29uZmxpY3RpbmcpOwpAQCAtMjc1LDE3ICsyNzAsMjAgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gZnJvbS4KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPm9wKCkgPT0gUHV0U3RhY2spIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gbm9kZS0+
c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsOworICAgICAgICAgICAgICAgICAgICAgICAgT3BlcmFu
ZCBvcGVyYW5kID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiU2V0dGluZyBmbHVzaCBmb3JtYXQg
Zm9yICIsIG5vZGUsICIgYXQgb3BlcmFuZCAiLCBvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEo
KS0+Zm9ybWF0OwogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+b3AoKSA9PSBLaWxsU3RhY2spIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gc2luayBhIFB1dFN0YWNrIHBhc3Qg
YSBLaWxsU3RhY2suCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5v
ZGUtPnVubGlua2VkTG9jYWwoKSkgPSBDb25mbGljdGluZ0ZsdXNoOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
Z0xuKCJLaWxsaW5nIHN0YWNrIGZvciAiLCBub2RlLT51bmxpbmtlZE9wZXJhbmQoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFu
ZCgpKSA9IENvbmZsaWN0aW5nRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byBlc2NhcGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1Bo
YXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFu
ZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJGb3IgIiwg
bm9kZSwgIiBlc2NhcGluZyAiLCBvcGVyYW5kLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMjkzLDE2ICsyOTEsMTggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAgICAg
ICAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsm
XSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byB3
cml0ZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzVG1wKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09
IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBWYXJhcmdzTGVuZ3Ro
IHx8IG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFy
YXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiV3Jp
dGluZyBkZWFkIGZsdXNoIGZvciAiLCBub2RlLCAiIGF0IG9wZXJhbmQgIiwgb3BlcmFuZCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVhZEZs
dXNoOwogICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSgKICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIsIHdyaXRlSGFuZGxlciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyLCBMYXp5Tm9kZSkgeyB9KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCwgTGF6eU5vZGUpIHsgfSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChk
ZWZlcnJlZCA9PSBkZWZlcnJlZEF0VGFpbFtibG9ja10pCkBAIC0zMTMsMTMgKzMxMywxMyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CiAgICAgICAgICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSBkZWZlcnJlZC5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nICIsIFZpcnR1
YWxSZWdpc3RlcihkZWZlcnJlZC5vcGVyYW5kRm9ySW5kZXgoaSkpLCAiIGF0ICIsIHBvaW50ZXJE
dW1wKGJsb2NrKSwgIi0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yKSwgIjogIiwgZGVmZXJyZWRb
aV0sICIgYW5kICIsIGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0sICIgbWVyZ2VzIHRvICIp
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgIiwgZGVmZXJyZWQub3BlcmFuZEZvcklu
ZGV4KGkpLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIi0+IiwgcG9pbnRlckR1bXAoc3Vj
Y2Vzc29yKSwgIjogIiwgZGVmZXJyZWRbaV0sICIgYW5kICIsIGRlZmVycmVkQXRIZWFkW3N1Y2Nl
c3Nvcl1baV0sICIgbWVyZ2VzIHRvICIpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZl
cnJlZEF0SGVhZFtzdWNjZXNzb3JdW2ldID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
ZXJnZShkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JdW2ldLCBkZWZlcnJlZFtpXSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFj
a1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhkZWZlcnJl
ZEF0SGVhZFtzdWNjZXNzb3JdW2ldLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIH0KQEAgLTM1MiwxMCArMzUyLDEwIEBAIHB1YmxpYzoKICAgICAgICAgCiAg
ICAgICAgIE9wZXJhbmRzPFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKj4gb3BlcmFuZFRvVmFyaWFi
bGUoCiAgICAgICAgICAgICBPcGVyYW5kc0xpa2UsIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxl
c0F0SGVhZCk7Ci0gICAgICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+IGluZGV4VG9PcGVyYW5k
OworICAgICAgICBWZWN0b3I8T3BlcmFuZD4gaW5kZXhUb09wZXJhbmQ7CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQuc2l6ZSgpOyBpLS07
KSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZChtX2dyYXBoLmJsb2NrKDAp
LT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpKTsKLSAgICAgICAgICAgIAorICAg
ICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRI
ZWFkLm9wZXJhbmRGb3JJbmRleChpKTsKKwogICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFy
aWFibGUqIHZhcmlhYmxlID0gc3NhQ2FsY3VsYXRvci5uZXdWYXJpYWJsZSgpOwogICAgICAgICAg
ICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChvcGVyYW5kKSA9IHZhcmlhYmxlOwogICAgICAg
ICAgICAgQVNTRVJUKGluZGV4VG9PcGVyYW5kLnNpemUoKSA9PSB2YXJpYWJsZS0+aW5kZXgoKSk7
CkBAIC0zNzAsMTIgKzM3MCwxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRT
dGFjazoKICAgICAgICAgICAgICAgICAgICAgcHV0U3RhY2tzVG9TaW5rLmFkZChub2RlKTsKICAg
ICAgICAgICAgICAgICAgICAgc3NhQ2FsY3VsYXRvci5uZXdEZWYoCi0gICAgICAgICAgICAgICAg
ICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgp
LT5sb2NhbCksCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVy
YW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJsb2NrLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOgogICAgICAgICAgICAgICAg
ICAgICBzc2FDYWxjdWxhdG9yLm5ld0RlZigKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJh
bmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+c3Rh
Y2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpLAogICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2ss
IG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBkZWZh
dWx0OgpAQCAtMzg2LDcgKzM4Niw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIHNzYUNh
bGN1bGF0b3IuY29tcHV0ZVBoaXMoCiAgICAgICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZh
cmlhYmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9jayogYmxvY2spIC0+IE5vZGUqIHsKLSAgICAgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxl
LT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBpbmRleFRvT3Bl
cmFuZFt2YXJpYWJsZS0+aW5kZXgoKV07CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgaWYgKCFsaXZlQXRIZWFkW2Jsb2NrXS5vcGVyYW5kKG9wZXJhbmQpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTM5Nyw3ICszOTcsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgaWYgKCFpc0NvbmNyZXRlKGZvcm1hdCkpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2lu
Z1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkFkZGluZyBQaGkgZm9yICIsIG9wZXJhbmQsICIg
YXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiXG4iKTsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gbV9ncmFwaC5hZGROb2RlKFNwZWNIZWFwVG9wLCBQ
aGksIGJsb2NrLT5hdCgwKS0+b3JpZ2luLndpdGhJbnZhbGlkRXhpdCgpKTsKQEAgLTQxMSw3ICs0
MTEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtYXBwaW5nLmZpbGwobnVsbHB0cik7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtYXBwaW5nLnNpemUoKTsgaS0t
OykgewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKG1hcHBpbmcub3Bl
cmFuZEZvckluZGV4KGkpKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQobWFwcGlu
Zy5vcGVyYW5kRm9ySW5kZXgoaSkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG9wZXJhbmRUb1ZhcmlhYmxlLm9w
ZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6RGVmKiBkZWYg
PSBzc2FDYWxjdWxhdG9yLnJlYWNoaW5nRGVmQXRIZWFkKGJsb2NrLCB2YXJpYWJsZSk7CkBAIC00
MjEsMTUgKzQyMSwxNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5k
KG9wZXJhbmQpID0gZGVmLT52YWx1ZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkK
KyAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBp
bmcgYXQgdG9wIG9mICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIjogIiwgbWFwcGluZywgIlxuIik7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlE
ZWYgOiBzc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhibG9jaykpIHsKLSAgICAgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3BoaURlZi0+dmFyaWFi
bGUoKS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gaW5kZXhU
b09wZXJhbmRbcGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KDAsIHBoaURlZi0+dmFsdWUoKSk7
CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2lu
Z1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIE1hcHBpbmcgIiwgb3BlcmFuZCwgIiB0byAi
LCBwaGlEZWYtPnZhbHVlKCksICJcbiIpOwogICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFu
ZChvcGVyYW5kKSA9IHBoaURlZi0+dmFsdWUoKTsKICAgICAgICAgICAgIH0KQEAgLTQzNywxNSAr
NDM3LDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGRlZmVycmVkID0gZGVmZXJyZWRBdEhlYWRb
YmxvY2tdOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5k
ZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewogICAgICAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKLSAgICAgICAgICAgICAgICBpZiAoREZHUHV0
U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiRGVmZXJyZWQgYXQgIiwgbm9k
ZSwgIjoiLCBkZWZlcnJlZCwgIlxuIik7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdGFjazog
ewogICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFj
a0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQgPSBkYXRhLT5sb2NhbDsKKyAgICAgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0g
ZGF0YS0+b3BlcmFuZDsKICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVy
YW5kKSA9IGRhdGEtPmZvcm1hdDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNr
U2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2
ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTWFwcGluZyAiLCBv
cGVyYW5kLCAiIHRvICIsIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgIiBhdCAiLCBub2RlLCAiXG4i
KTsKICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpID0gbm9kZS0+
Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTQ1MywxNiAr
NDUzLDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
Y2FzZSBHZXRTdGFjazogewogICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRh
dGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgRmx1c2hG
b3JtYXQgZm9ybWF0ID0gZGVmZXJyZWQub3BlcmFuZChkYXRhLT5sb2NhbCk7CisgICAgICAgICAg
ICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+b3Bl
cmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNDb25jcmV0ZShmb3JtYXQpKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgsIG5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJy
ZWQub3BlcmFuZChkYXRhLT5sb2NhbCkgIT0gQ29uZmxpY3RpbmdGbHVzaCwgZGVmZXJyZWQub3Bl
cmFuZChkYXRhLT5sb2NhbCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVk
Lm9wZXJhbmQoZGF0YS0+b3BlcmFuZCkgIT0gQ29uZmxpY3RpbmdGbHVzaCwgZGVmZXJyZWQub3Bl
cmFuZChkYXRhLT5vcGVyYW5kKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhlcmUgaXMgbm8gZGVmZXJyYWwuIE5vIGRl
ZmVycmFsIG1lYW5zIHRoYXQgdGhlIG1vc3QKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF1
dGhvcml0YXRpdmUgdmFsdWUgZm9yIHRoaXMgc3RhY2sgc2xvdCBpcyB3aGF0IGlzIHN0b3JlZCBp
biB0aGUgc3RhY2suIFNvLAogICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2VlcCB0aGUgR2V0
U3RhY2suCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQoZGF0YS0+bG9j
YWwpID0gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChkYXRh
LT5vcGVyYW5kKSA9IG5vZGU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTQ3MiwyMCArNDcyLDIw
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBzdG9yZWQgYW5kIGdldCBy
aWQgb2YgdGhlIEdldFN0YWNrLgogICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3Jh
cGgsIG5vZGUsIGZvcm1hdCA9PSBkYXRhLT5mb3JtYXQsIGZvcm1hdCwgZGF0YS0+Zm9ybWF0KTsK
ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5n
ID0gbWFwcGluZy5vcGVyYW5kKGRhdGEtPmxvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgTm9k
ZSogaW5jb21pbmcgPSBtYXBwaW5nLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCk7CiAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gaW5jb21pbmctPmRlZmF1bHRFZGdlKCk7CiAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0lkZW50aXR5KCk7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGNhc2Ug
S2lsbFN0YWNrOiB7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+
dW5saW5rZWRMb2NhbCgpKSA9IENvbmZsaWN0aW5nRmx1c2g7CisgICAgICAgICAgICAgICAgICAg
IGRlZmVycmVkLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gQ29uZmxpY3RpbmdG
bHVzaDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byBlc2NhcGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50
ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9
IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJGb3IgIiwgbm9kZSwg
IiBlc2NhcGluZyAiLCBvcGVyYW5kLCAiXG4iKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKQEAgLTQ5OSw3ICs0OTksNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gR290dGEgaW5zZXJ0IGEgUHV0U3RhY2suCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIkluc2VydGluZyBhIFB1dFN0YWNrIGZvciAiLCBvcGVyYW5kLCAiIGF0
ICIsIG5vZGUsICJcbiIpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBpbmNvbWlu
ZyA9IG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKTsKQEAgLTUxMyw3ICs1MTMsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVh
ZEZsdXNoOwogICAgICAgICAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgIGF1
dG8gd3JpdGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAg
ICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IExvYWRWYXJhcmdzIGFuZCBGb3J3YXJkVmFyYXJncyBhcmUgdW5jb25kaXRpb25hbCB3cml0ZXMg
dG8gdGhlIHN0YWNrCkBAIC01MjEsMTMgKzUyMSwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBsb2NhdGlvbnMgdGhleSB3cml0ZSB0by4gVGhpcyBtYWtlcyB0aG9zZSBz
dGFjayBsb2NhdGlvbnMgZGVhZCByaWdodCAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJl
Zm9yZSBhIExvYWRWYXJhcmdzL0ZvcndhcmRWYXJhcmdzLiBUaGlzIG1lYW5zIHdlIHNob3VsZCBu
ZXZlciBzaW5rCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQdXRTdGFja3MgcmlnaHQgdG8g
dGhpcyBwb2ludC4KLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUt
Pm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFZhcmFy
Z3NMZW5ndGggfHwgbm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZv
cndhcmRWYXJhcmdzKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQo
b3BlcmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKICAgICAgICAg
ICAgICAgICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSgKICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIsIHdyaXRlSGFuZGxlciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyLCBMYXp5Tm9kZSkgeyB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCwgTGF6eU5vZGUpIHsgfSk7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0gfQogICAgICAgICAgICAg
fQpAQCAtNTM5LDggKzUzOSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBmb3IgKFNTQUNh
bGN1bGF0b3I6OkRlZiogcGhpRGVmIDogc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soc3VjY2Vz
c29yQmxvY2spKSB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBwaGlEZWYt
PnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2
YXJpYWJsZSA9IHBoaURlZi0+dmFyaWFibGUoKTsKLSAgICAgICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFt2YXJpYWJsZS0+aW5kZXgoKV07Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2
ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBpbmRleFRvT3Bl
cmFuZFt2YXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ3JlYXRpbmcgVXBzaWxvbiBmb3Ig
Iiwgb3BlcmFuZCwgIiBhdCAiLCBwb2ludGVyRHVtcChibG9jayksICItPiIsIHBvaW50ZXJEdW1w
KHN1Y2Nlc3NvckJsb2NrKSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0
IGZvcm1hdCA9IGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3NvckJsb2NrXS5vcGVyYW5kKG9wZXJhbmQp
OwogICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIGlzQ29u
Y3JldGUoZm9ybWF0KSwgZm9ybWF0KTsKQEAgLTU4NSw3ICs1ODUsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChERkdQdXRTdGFja1Np
bmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgIGlmICh2ZXJib3NlKSB7CiAg
ICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBhZnRlciBQdXRTdGFjayBzaW5raW5nOlxuIik7CiAg
ICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCmluZGV4IDIzZDRiOTQ1
MzEwNjY2NTBhOGFkOTBlZTUxYWE1YmRiMmUyOWNlYzUuLmNhOTkwMjYxYzkzMzViOTkyZWQwNjI5
OWY3NTEzOTFlMGEyNzdmNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKQEAgLTE1OCw3ICsxNTgsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
CiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgICAgICAgICBHZXRTdGFjaywg
bm9kZS0+b3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9z
dGFja0FjY2Vzc0RhdGEuYWRkKHZhcmlhYmxlLT5sb2NhbCgpLCB2YXJpYWJsZS0+Zmx1c2hGb3Jt
YXQoKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fc3RhY2tB
Y2Nlc3NEYXRhLmFkZCh2YXJpYWJsZS0+b3BlcmFuZCgpLCB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQo
KSkpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKQogICAgICAgICAg
ICAgICAgICAgICAgICAgbV9hcmd1bWVudEdldHRlcnMuYWRkKGNoaWxkTm9kZSk7CiAgICAgICAg
ICAgICAgICAgICAgIG1fYXJndW1lbnRNYXBwaW5nLmFkZChub2RlLCBjaGlsZE5vZGUpOwpAQCAt
MTc4LDcgKzE3OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlID0gbV92YXJpYWJsZUZvclNTQUluZGV4W3NzYVZhcmlhYmxlLT5pbmRleCgp
XTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBQcnVuZSBieSBsaXZlbmVz
cy4gVGhpcyBkb2Vzbid0IGJ1eSB1cyBtdWNoIG90aGVyIHRoYW4gY29tcGlsZSB0aW1lcy4KLSAg
ICAgICAgICAgICAgICBOb2RlKiBoZWFkTm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3Bl
cmFuZCh2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgICAgICAgICAgICAgTm9kZSogaGVhZE5vZGUg
PSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSk7CiAg
ICAgICAgICAgICAgICAgaWYgKCFoZWFkTm9kZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKQEAgLTMwMCw3ICszMDAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoIW5vZGUtPnJlcGxhY2VtZW50KCkpOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiTWFwcGluZzogIiwgVmlydHVhbFJlZ2lzdGVyKHZhbHVlRm9yT3BlcmFu
ZC5vcGVyYW5kRm9ySW5kZXgoaSkpLCAiIC0+ICIsIG5vZGUsICJcbiIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiTWFwcGluZzogIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmRG
b3JJbmRleChpKSwgIiAtPiAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgdmFs
dWVGb3JPcGVyYW5kW2ldID0gbm9kZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CkBAIC0zMTMsMTEgKzMxMywxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVGb3JTU0FJbmRleFtwaGlEZWYtPnZhcmlh
YmxlKCktPmluZGV4KCldOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydChwaGlJbnNlcnRpb25Qb2ludCwgcGhpRGVmLT52YWx1ZSgpKTsKLSAg
ICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkg
PSBwaGlEZWYtPnZhbHVlKCk7CisgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJh
bmQodmFyaWFibGUtPm9wZXJhbmQoKSkgPSBwaGlEZWYtPnZhbHVlKCk7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAg
ICAgICAgICAgICAgcGhpSW5zZXJ0aW9uUG9pbnQsIFNwZWNOb25lLCBNb3ZIaW50LCBibG9jay0+
YXQoMCktPm9yaWdpbi53aXRoSW52YWxpZEV4aXQoKSwKLSAgICAgICAgICAgICAgICAgICAgT3BJ
bmZvKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKSwgcGhpRGVmLT52YWx1ZSgpLT5kZWZhdWx0
RWRnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmlhYmxlLT5vcGVyYW5kKCkp
LCBwaGlEZWYtPnZhbHVlKCktPmRlZmF1bHRFZGdlKCkpOwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBpZiAoYmxvY2stPmF0KDApLT5vcmlnaW4uZXhpdE9LKQpAQCAtMzM3LDcgKzMzNyw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6IHsKICAgICAgICAgICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEtpbGxTdGFjaywgbm9kZS0+b3JpZ2luLAotICAgICAg
ICAgICAgICAgICAgICAgICAgT3BJbmZvKG5vZGUtPnVubGlua2VkTG9jYWwoKS5vZmZzZXQoKSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG5vZGUtPnVubGlua2VkT3BlcmFuZCgp
KSk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5leGl0T0sgPSBmYWxzZTsgLy8g
S2lsbFN0YWNrIGNsb2JiZXJzIGV4aXQuCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KQEAgLTM0OSwxOSArMzQ5LDE5IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCEhKG5vZGUtPmZsYWdzKCkgJiBOb2RlSXNGbHVzaGVkKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUHV0U3RhY2soCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQoCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5sb2NhbCgpLCB2YXJpYWJsZS0+Zmx1c2hG
b3JtYXQoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+b3Bl
cmFuZCgpLCB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkpOwogICAgICAgICAgICAgICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlbW92ZShtX2dyYXBoKTsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTWFwcGluZzogIiwgdmFyaWFibGUtPmxvY2Fs
KCksICIgLT4gIiwgY2hpbGQsICJcbiIpOwotICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9w
ZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBjaGlsZDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIHZhcmlhYmxlLT5vcGVyYW5kKCksICIgLT4g
IiwgY2hpbGQsICJcbiIpOworICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3Bl
cmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSA9IGNoaWxkOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fYXJn
dW1lbnRHZXR0ZXJzLmNvbnRhaW5zKG5vZGUpKTsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVG
b3JPcGVyYW5kLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSA9IG5vZGU7
CisgICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKG5vZGUtPnN0YWNr
QWNjZXNzRGF0YSgpLT5vcGVyYW5kKSA9IG5vZGU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC0zNzEsOCArMzcx
LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
bm9kZS0+cmVtb3ZlKG1fZ3JhcGgpOwogICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIlJlcGxhY2luZyBub2RlICIsIG5vZGUs
ICIgd2l0aCAiLCB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSksICJc
biIpOwotICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRSZXBsYWNlbWVudCh2YWx1ZUZvck9w
ZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiUmVwbGFjaW5nIG5vZGUgIiwgbm9kZSwgIiB3aXRoICIsIHZhbHVlRm9yT3Bl
cmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpLCAiXG4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+c2V0UmVwbGFjZW1lbnQodmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFi
bGUtPm9wZXJhbmQoKSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMzg1LDcgKzM4NSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDogewogICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpOwogICAgICAg
ICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gdmFs
dWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLT5kZWZhdWx0RWRnZSgpOwor
ICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IHZhbHVlRm9yT3BlcmFuZC5vcGVy
YW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpLT5kZWZhdWx0RWRnZSgpOwogICAgICAgICAgICAgICAg
ICAgICBub2RlLT5yZW1vdmUobV9ncmFwaCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTQyNSwxMiArNDI1LDEyIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgLy8gaXMgbm90IGV4aXRPSy4KICAgICAgICAgICAgICAgICAgICAgVXNlS2lu
ZCB1c2VLaW5kID0gdW5jaGVja2VkVXNlS2luZEZvcihmb3JtYXQpOwogCi0gICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJJbnNlcnRpbmcgVXBzaWxvbiBmb3IgIiwgdmFy
aWFibGUtPmxvY2FsKCksICIgcHJvcGFnYXRpbmcgIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQo
dmFyaWFibGUtPmxvY2FsKCkpLCAiIHRvICIsIHBoaU5vZGUpOworICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiSW5zZXJ0aW5nIFVwc2lsb24gZm9yICIsIHZhcmlhYmxl
LT5vcGVyYW5kKCksICIgcHJvcGFnYXRpbmcgIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFy
aWFibGUtPm9wZXJhbmQoKSksICIgdG8gIiwgcGhpTm9kZSk7CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAg
ICAgICAgICAgICAgICAgICAgdXBzaWxvbkluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgVXBzaWxv
biwgdXBzaWxvbk9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhwaGlOb2Rl
KSwgRWRnZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3Bl
cmFuZCh2YXJpYWJsZS0+bG9jYWwoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs
dWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdXNlS2luZCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKaW5kZXgg
ZjkxYmE0OGY1ODg5ZDU0M2NmOTliZmFiZjQ3ZDFjMDMzOGE0OWVmZS4uMjAzMzg3YjY2NTY0ODZj
MDY1Mzk5ZTFlMWNkYmUwYjljMzU1ZTZlYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTYWZlVG9FeGVjdXRlLmgKQEAgLTMyMyw2ICszMjMsNyBAQCBib29sIHNhZmVUb0V4ZWN1
dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJv
b2wgaWdubwogICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICBjYXNl
IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgIGNhc2UgQ29uc3RydWN0
VmFyYXJnczoKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgY2FzZSBMb2FkVmFyYXJnczoK
ICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRW
YXJhcmdzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAppbmRleCBlYmYzYjZiY2VmOGE1MjdjOTNjOGZkMzhhM2RhMmJmNTFjNGU0ZWFiLi4wNzAy
NGNkYjQwNjU0OWIyNmFmMjc3ZjMzMzg5NTUyNWU2NGJkZTQwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtMTc3OCw3ICsxNzc4LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQoTm9kZSogbm9kZSkKICAgICBO
b2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICBub3RpY2VPU1JCaXJ0aChj
aGlsZCk7CiAgICAgCi0gICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50Ojpt
b3ZIaW50KE1pbmlmaWVkSUQoY2hpbGQpLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKTsKKyAgICBt
X3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQoTWluaWZpZWRJRChj
aGlsZCksIG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVDaGVja05ldXRlcmVkKE5vZGUqIG5vZGUpCkBAIC0xODQzLDcgKzE4NDMsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKCkKICAgICBtX3N0YXRl
LmJlZ2luQmFzaWNCbG9jayhtX2Jsb2NrKTsKICAgICAKICAgICBmb3IgKHNpemVfdCBpID0gbV9i
bG9jay0+dmFyaWFibGVzQXRIZWFkLnNpemUoKTsgaS0tOykgewotICAgICAgICBpbnQgb3BlcmFu
ZCA9IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAg
IE9wZXJhbmQgb3BlcmFuZCA9IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kRm9ySW5k
ZXgoaSk7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV07
CiAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBObyBuZWVkIHRv
IHJlY29yZCBkZWFkIFNldExvY2FsJ3MuCkBAIC0xODUzLDExICsxODUzLDggQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jaygpCiAgICAgICAgIGlmICghbm9kZS0+cmVm
Q291bnQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBObyBuZWVkIHRvIHJlY29yZCBkZWFk
IFNldExvY2FsJ3MuCiAgICAgICAgIGZvcm1hdCA9IGRhdGFGb3JtYXRGb3IodmFyaWFibGUtPmZs
dXNoRm9ybWF0KCkpOwotICAgICAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKAotICAgICAgICAg
ICAgVmFyaWFibGVFdmVudDo6c2V0TG9jYWwoCi0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyKG9wZXJhbmQpLAotICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwK
LSAgICAgICAgICAgICAgICBmb3JtYXQpKTsKKyAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFw
aCgpLCBub2RlLCAhb3BlcmFuZC5pc0FyZ3VtZW50KCkgfHwgb3BlcmFuZC52aXJ0dWFsUmVnaXN0
ZXIoKS50b0FyZ3VtZW50KCkgPj0gMCk7CisgICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2co
VmFyaWFibGVFdmVudDo6c2V0TG9jYWwob3BlcmFuZCwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgp
LCBmb3JtYXQpKTsKICAgICB9CiAKICAgICBtX29yaWdpbiA9IE5vZGVPcmlnaW4oKTsKQEAgLTE5
MzcsNyArMTkzNCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcygp
CiAgICAgICAgIGlmIChmb3JtYXQgPT0gRmx1c2hlZEpTVmFsdWUpCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIg
PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCk7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXIgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKS52aXJ0dWFsUmVn
aXN0ZXIoKTsKKyAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3Rlci5pc0FyZ3VtZW50KCkpOwog
CiAgICAgICAgIEpTVmFsdWVTb3VyY2UgdmFsdWVTb3VyY2UgPSBKU1ZhbHVlU291cmNlKEpJVENv
bXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlcikpOwogICAgICAgICAKQEAgLTczNjAs
NTQgKzczNTgsNTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNldEZ1bmN0aW9uTmFt
ZShOb2RlKiBub2RlKQogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlTG9hZFZhcmFyZ3MoTm9kZSogbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVWYXJhcmdzTGVuZ3RoKE5vZGUqIG5vZGUpCiB7CiAgICAgTG9hZFZhcmFyZ3NEYXRh
KiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAKICAgICBKU1ZhbHVlUmVncyBhcmd1
bWVudHNSZWdzOwotICAgIHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgYXJndW1lbnRzUmVncyA9IGFyZ3VtZW50cy5qc1Zh
bHVlUmVncygpOwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgIH0KKyAgICBsb2NrKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhp
cywgbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7CisgICAgYXJndW1lbnRzUmVncyA9IGFyZ3VtZW50
cy5qc1ZhbHVlUmVncygpOworICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgdW5sb2NrKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKTsKIAogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2l6ZU9m
VmFyYXJncywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YykpLCBhcmd1bWVudHNSZWdzLCBkYXRhLT5vZmZzZXQpOwogICAgIG1faml0LmV4Y2VwdGlvbkNo
ZWNrKCk7CiAKICAgICBsb2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICB7Ci0gICAg
ICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAg
ICAgIGFyZ3VtZW50c1JlZ3MgPSBhcmd1bWVudHMuanNWYWx1ZVJlZ3MoKTsKLSAgICAgICAgZmx1
c2hSZWdpc3RlcnMoKTsKLSAgICB9CisgICAgR1BSVGVtcG9yYXJ5IGFyZ0NvdW50SW5jbHVkaW5n
VGhpcyh0aGlzKTsKKyAgICBHUFJSZWcgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSID0gYXJnQ291
bnRJbmNsdWRpbmdUaGlzLmdwcigpOwogICAgIHVubG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
Uik7CiAKLSAgICAvLyBGSVhNRTogVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSB3aWxsIGNhbGwg
YW4gZWZmZWN0ZnVsIGxlbmd0aCBwcm9wZXJ0eSB0d2ljZS4gVGhpcyBpcyBzYWZlCi0gICAgLy8g
ZnJvbSB0aGUgc3RhbmRwb2ludCBvZiB0aGUgVk0ncyBpbnRlZ3JpdHksIGJ1dCBpdCdzIHN1YnRs
eSB3cm9uZyBmcm9tIGEgc3BlYyBjb21wbGlhbmNlCi0gICAgLy8gc3RhbmRwb2ludC4gVGhlIGJl
c3Qgc29sdXRpb24gd291bGQgYmUgb25lIHdoZXJlIHdlIGNhbiBleGl0ICppbnRvKiB0aGUgb3Bf
Y2FsbF92YXJhcmdzIHJpZ2h0Ci0gICAgLy8gcGFzdCB0aGUgc2l6aW5nLgotICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE0NDgKKyAgICBtX2ppdC5hZGQz
MihUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBhcmdDb3VudEluY2x1
ZGluZ1RoaXNHUFIpOwogCi0gICAgR1BSUmVnIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiA9Ci0g
ICAgICAgIEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBhcmd1bWVudHNSZWdzKTsKKyAgICBpbnQzMlJlc3VsdChhcmdDb3VudEluY2x1ZGluZ1Ro
aXNHUFIsIG5vZGUpOyAgCit9CiAKLSAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIpOwordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKE5vZGUqIG5vZGUpCit7CisgICAgTG9h
ZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisKKyAgICBTcGVj
dWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgYXJndW1lbnRDb3VudCh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7ICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5hcmd1bWVu
dHNDaGlsZCgpKTsKKyAgICBHUFJSZWcgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBhcmd1
bWVudENvdW50LmdwcigpOworICAgIEpTVmFsdWVSZWdzIGFyZ3VtZW50c1JlZ3MgPSBhcmd1bWVu
dHMuanNWYWx1ZVJlZ3MoKTsKIAogICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgIFZhcmFy
Z3NPdmVyZmxvdywgSlNWYWx1ZVNvdXJjZSgpLCBFZGdlKCksIG1faml0LmJyYW5jaDMyKAotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLAotICAgICAgICAgICAgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIsCi0gICAgICAgICAgICBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIpKTsKKyAg
ICAgICAgVmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVkZ2UoKSwgbV9qaXQuYnJh
bmNoVGVzdDMyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisgICAgICAgICAg
ICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogCiAgICAgc3BlY3VsYXRpb25DaGVjaygK
ICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVkZ2UoKSwgbV9qaXQu
YnJhbmNoMzIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsCi0gICAgICAgICAg
ICBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIsCisgICAgICAgICAgICBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcywKICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihkYXRhLT5saW1pdCkpKTsKIAot
ICAgIG1faml0LnN0b3JlMzIoYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSLCBKSVRDb21waWxlcjo6
cGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKKyAgICBmbHVzaFJlZ2lzdGVycygpOwor
CisgICAgbV9qaXQuc3RvcmUzMihhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgSklUQ29tcGls
ZXI6OnBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CiAKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkxvYWRWYXJhcmdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgZGF0YS0+
bWFjaGluZVN0YXJ0Lm9mZnNldCgpLCBhcmd1bWVudHNSZWdzLCBkYXRhLT5vZmZzZXQsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCBkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkxvYWRWYXJhcmdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwg
ZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpLCBhcmd1bWVudHNSZWdzLCBkYXRhLT5vZmZzZXQs
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKICAg
ICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAgICAgbm9SZXN1bHQobm9kZSk7CkBAIC03NDE3
LDE3ICs3NDE2LDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVGb3J3YXJkVmFyYXJn
cyhOb2RlKiBub2RlKQogewogICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRW
YXJhcmdzRGF0YSgpOwogICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lOwotICAg
IGlmIChub2RlLT5jaGlsZDEoKSkKLSAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+Y2hp
bGQxKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICBpZiAobm9kZS0+
YXJndW1lbnRzQ2hpbGQoKSkKKyAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+YXJndW1l
bnRzQ2hpbGQoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogICAgIGVsc2UK
ICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNh
bGxGcmFtZSgpOwogCisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGFyZ3VtZW50Q291
bnQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSBsZW5ndGgodGhpcyk7
CiAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgdGVtcCh0aGlzKTsKLSAgICBHUFJSZWcgbGVuZ3Ro
R1BSID0gbGVuZ3RoLmdwcigpOworICAgIEdQUlJlZyBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyA9IGFyZ3VtZW50Q291bnQuZ3ByKCk7CisgICAgR1BSUmVnIGxlbmd0aEdQUiA9IGFyZ3VtZW50
Q291bnQuZ3ByKCk7CiAgICAgSlNWYWx1ZVJlZ3MgdGVtcFJlZ3MgPSB0ZW1wLnJlZ3MoKTsKLSAg
ICAgICAgCi0gICAgZW1pdEdldExlbmd0aChpbmxpbmVDYWxsRnJhbWUsIGxlbmd0aEdQUiwgLyog
aW5jbHVkZVRoaXMgPSAqLyB0cnVlKTsKKyAgICAKKyAgICBtX2ppdC5tb3ZlKGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLCBsZW5ndGhHUFIpOwogICAgIGlmIChkYXRhLT5vZmZzZXQpCiAgICAg
ICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMihkYXRhLT5vZmZzZXQpLCBsZW5ndGhHUFIpOwog
ICAgICAgICAKQEAgLTc1ODYsNyArNzU4Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVDcmVhdGVEaXJlY3RBcmd1bWVudHMoTm9kZSogbm9kZSkKICAgICBhdXRvKiBpbmxpbmVDYWxs
RnJhbWUgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgaWYg
KGlubGluZUNhbGxGcmFtZQogICAgICAgICAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3Mo
KSkgewotICAgICAgICBrbm93bkxlbmd0aCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgLSAxOworICAgICAgICBrbm93bkxlbmd0aCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7
CiAgICAgICAgIGxlbmd0aElzS25vd24gPSB0cnVlOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGtu
b3duTGVuZ3RoID0gVUlOVF9NQVg7CkBAIC0xMjQ5MSw3ICsxMjQ5Miw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhOb2RlKiBub2Rl
KQogICAgIGlmIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPmFyZ3Vt
ZW50c0lubGluZUNhbGxGcmFtZSgpKQogICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKICAgICBlbHNlCi0gICAgICAg
IGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CisgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3Rl
ciA9IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAgIG1faml0
LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIpLCBy
ZXN1bHQuZ3ByKCkpOwogICAgIGludDMyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKaW5kZXggMjIy
MzAzNDQ3ZWM0NmRjYTZmMDljNDc5OTg3OTM5Yjc2MmM4MzBiMi4uNGEyZjBmNzQ5NjkzOGFiY2Iz
YjYyYmIwZjY0MDQ0NTliOGYzYmMxZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaApAQCAtMTM5NSw2ICsxMzk1LDcgQEAgcHVibGljOgogICAgIHZv
aWQgY29tcGlsZVNldEZ1bmN0aW9uTmFtZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTmV3UmVn
ZXhwKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVGb3J3YXJkVmFyYXJncyhOb2RlKik7CisgICAg
dm9pZCBjb21waWxlVmFyYXJnc0xlbmd0aChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTG9hZFZh
cmFyZ3MoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUNyZWF0ZUFjdGl2YXRpb24oTm9kZSopOwog
ICAgIHZvaWQgY29tcGlsZUNyZWF0ZURpcmVjdEFyZ3VtZW50cyhOb2RlKik7CkBAIC0xNjczLDE1
ICsxNjc0LDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhZ2VUeXBlZEFycmF5U3RvcmFnZShHUFJS
ZWcsIEdQUlJlZyk7CiAgICAgCiAgICAgdm9pZCByZWNvcmRTZXRMb2NhbCgKLSAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGJ5dGVjb2RlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZywgRGF0
YUZvcm1hdCBmb3JtYXQpCisgICAgICAgIE9wZXJhbmQgYnl0ZWNvZGVSZWcsIFZpcnR1YWxSZWdp
c3RlciBtYWNoaW5lUmVnLCBEYXRhRm9ybWF0IGZvcm1hdCkKICAgICB7CisgICAgICAgIEFTU0VS
VCghYnl0ZWNvZGVSZWcuaXNBcmd1bWVudCgpIHx8IGJ5dGVjb2RlUmVnLnZpcnR1YWxSZWdpc3Rl
cigpLnRvQXJndW1lbnQoKSA+PSAwKTsKICAgICAgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhW
YXJpYWJsZUV2ZW50OjpzZXRMb2NhbChieXRlY29kZVJlZywgbWFjaGluZVJlZywgZm9ybWF0KSk7
CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVjb3JkU2V0TG9jYWwoRGF0YUZvcm1hdCBmb3JtYXQp
CiAgICAgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9jdXJyZW50
Tm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIHJlY29yZFNldExvY2FsKHZhcmlh
YmxlLT5sb2NhbCgpLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCksIGZvcm1hdCk7CisgICAgICAg
IHJlY29yZFNldExvY2FsKHZhcmlhYmxlLT5vcGVyYW5kKCksIHZhcmlhYmxlLT5tYWNoaW5lTG9j
YWwoKSwgZm9ybWF0KTsKICAgICB9CiAKICAgICBHZW5lcmF0aW9uSW5mbyYgZ2VuZXJhdGlvbklu
Zm9Gcm9tVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAppbmRleCA5ZTY1MGM4MzIwNzFkZDcwZjI5OTRhYmM0YTI4Yjg1MGFiZDVmZjQwLi41MTYy
OTE3NzliZWE0NGExYTYxOGY3YTc1NmRjYWFmMzY3ZWFmNTlkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKQEAgLTE4Mjgs
NyArMTgyOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgIEFic3RyYWN0VmFs
dWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpOworICAgICAgICBBYnN0
cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpOwogCiAg
ICAgICAgIC8vIElmIHRoZSBDRkEgaXMgdHJhY2tpbmcgdGhpcyB2YXJpYWJsZSBhbmQgaXQgZm91
bmQgdGhhdCB0aGUgdmFyaWFibGUKICAgICAgICAgLy8gY2Fubm90IGhhdmUgYmVlbiBhc3NpZ25l
ZCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIHByb2NlZWQuCkBAIC0xOTEyLDcgKzE5MTIsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAK
ICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgcmVjb3JkU2V0TG9jYWwobV9jdXJyZW50
Tm9kZS0+dW5saW5rZWRMb2NhbCgpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdERlYWQp
OworICAgICAgICByZWNvcmRTZXRMb2NhbChtX2N1cnJlbnROb2RlLT51bmxpbmtlZE9wZXJhbmQo
KSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXREZWFkKTsKICAgICAgICAgbm9SZXN1bHQo
bm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTM4MzQsNiArMzgzNCwxMSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGVtaXRDYWxsKG5v
ZGUpOwogICAgICAgICBicmVhazsKIAorICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAgICAg
ICBjb21waWxlVmFyYXJnc0xlbmd0aChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAg
ICAgY2FzZSBMb2FkVmFyYXJnczogewogICAgICAgICBjb21waWxlTG9hZFZhcmFyZ3Mobm9kZSk7
CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAKaW5kZXggNDQ3MzkyNTQwNDcyOGRmYTYzNzE1NzExMzk5MWJmYzFm
NDMzYjdjNi4uNDZiMTFkYWIyMWY1MTIzZDUwNmRmNTNjZTM1YjI0N2U1MWZlOGEzYSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBA
IC0xOTM2LDcgKzE5MzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICBBYnN0
cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChub2RlLT5sb2NhbCgpKTsKKyAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgp
KTsKIAogICAgICAgICAvLyBJZiB0aGUgQ0ZBIGlzIHRyYWNraW5nIHRoaXMgdmFyaWFibGUgYW5k
IGl0IGZvdW5kIHRoYXQgdGhlIHZhcmlhYmxlCiAgICAgICAgIC8vIGNhbm5vdCBoYXZlIGJlZW4g
YXNzaWduZWQsIHRoZW4gZG9uJ3QgYXR0ZW1wdCB0byBwcm9jZWVkLgpAQCAtMjAwNyw3ICsyMDA3
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAg
ICAgICAgCiAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgIHJlY29yZFNldExvY2FsKG1f
Y3VycmVudE5vZGUtPnVubGlua2VkTG9jYWwoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3Jt
YXREZWFkKTsKKyAgICAgICAgcmVjb3JkU2V0TG9jYWwobV9jdXJyZW50Tm9kZS0+dW5saW5rZWRP
cGVyYW5kKCksIFZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0RGVhZCk7CiAgICAgICAgIG5v
UmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00NDc0LDYgKzQ0NzQsMTEg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBlbWl0
Q2FsbChub2RlKTsKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsK
KyAgICAgICAgY29tcGlsZVZhcmFyZ3NMZW5ndGgobm9kZSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKwogICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKICAgICAgICAgY29tcGlsZUxvYWRWYXJhcmdz
KG5vZGUpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCmluZGV4IDE2OGIzZGY0MzM0NjU3ZTZhYWRiNjRiYmY2
MzNlZWM1YWZhMWIwNDQuLjI3M2Y3ZDRiNTA1MzEwMmQ0YzUxYmEyZGRjOGE0ZDZkODgxMGIwNDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFz
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNl
LmNwcApAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIHRyZWF0IGEgdmFyaWFi
bGUgYXMgYmVpbmcgInVzZWQiIGlmIHRoZXJlIGV4aXN0cyBhbiBhY2Nlc3MgdG8gaXQgKFNldExv
Y2FsLCBHZXRMb2NhbCwKICAgICAgICAgLy8gRmx1c2gsIFBoYW50b21Mb2NhbCkuCiAgICAgICAg
IAotICAgICAgICBCaXRWZWN0b3IgdXNlZExvY2FsczsKKyAgICAgICAgT3BlcmFuZHM8Ym9vbD4g
dXNlZE9wZXJhbmRzKDAsIGdyYXBoKCkubV9sb2NhbFZhcnMsIGdyYXBoKCkubV90bXBzLCBmYWxz
ZSk7CiAgICAgICAgIAogICAgICAgICAvLyBDb2xsZWN0IHRob3NlIHZhcmlhYmxlcyB0aGF0IGFy
ZSB1c2VkIGZyb20gSVIuCiAgICAgICAgIGJvb2wgaGFzTm9kZXNUaGF0TmVlZEZpeHVwID0gZmFs
c2U7CkBAIC02NywyMyArNjcsMjIgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgRmx1
c2g6CiAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6IHsKICAgICAgICAgICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkuaXNBcmd1
bWVudCgpKQorICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPm9wZXJhbmQoKS5pc0Fy
Z3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgdXNlZExvY2Fscy5zZXQodmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQo
KSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoK
ICAgICAgICAgICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgICAgICAgICAg
ICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoZGF0YS0+Y291bnQuaXNMb2NhbCgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoZGF0YS0+Y291bnQudG9Mb2NhbCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoZGF0YS0+Y291bnQsIHRydWUp
OwogICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS0+c3RhcnQuaXNMb2NhbCgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHBhcnQgcmVhbGx5IHJlbGllcyBvbiB0aGUgY29u
dGlndWl0eSBvZiBzdGFjayBsYXlvdXQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2ln
bm1lbnRzLgogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKFZpcnR1YWxSZWdpc3Rlcihk
YXRhLT5zdGFydC5vZmZzZXQoKSArIGRhdGEtPmxpbWl0IC0gMSkuaXNMb2NhbCgpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KSAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0
ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS50b0xvY2FsKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihkYXRh
LT5zdGFydC5vZmZzZXQoKSArIGkpLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgfSAvLyB0
aGUgZWxzZSBjYXNlIHNob3VsZG4ndCBoYXBwZW4uCiAgICAgICAgICAgICAgICAgICAgIGhhc05v
ZGVzVGhhdE5lZWRGaXh1cCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
OTIsOSArOTEsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdGFjazoKICAg
ICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIFN0YWNr
QWNjZXNzRGF0YSogc3RhY2sgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHN0YWNrLT5sb2NhbC5pc0FyZ3VtZW50KCkpCisgICAgICAgICAgICAgICAg
ICAgIGlmIChzdGFjay0+b3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoc3RhY2stPmxv
Y2FsLnRvTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVy
YW5kKHN0YWNrLT5vcGVyYW5kLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTEwOCwyMSArMTA3LDIx
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
ID0gKml0ZXI7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpKSB7Ci0gICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVhbFJl
Z2lzdGVyKAotICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSk7
CisgICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVy
KAorICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLCB0cnVlKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9
IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzV2l0aEZpeHVwLnNpemUoKTsgYXJndW1lbnQtLTsp
IHsKLSAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoCi0gICAg
ICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZz
ZXQoKSArCi0gICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQp
LnRvTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoVmly
dHVhbFJlZ2lzdGVyKAorICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoYXJndW1lbnQpLm9mZnNldCgpICsKKyAgICAgICAgICAgICAgICAg
ICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCksIHRydWUpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IGFsbG9jYXRpb24o
dXNlZExvY2Fscy5zaXplKCkpOworICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IGFsbG9jYXRpb24o
dXNlZE9wZXJhbmRzLnNpemUoKSk7CiAgICAgICAgIG1fZ3JhcGgubV9uZXh0TWFjaGluZUxvY2Fs
ID0gY29kZUJsb2NrKCktPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZExvY2Fscy5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgaWYgKCF1c2VkTG9jYWxzLmdldChpKSkgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdXNlZE9wZXJhbmRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBp
ZiAoIXVzZWRPcGVyYW5kcy5nZXRGb3JPcGVyYW5kSW5kZXgoaSkpIHsKICAgICAgICAgICAgICAg
ICBhbGxvY2F0aW9uW2ldID0gVUlOVF9NQVg7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB9CkBAIC0xMzUsNDkgKzEzNCw1MCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBp
ZiAoIXZhcmlhYmxlLT5pc1Jvb3QoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkg
ewotICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IHZhcmlhYmxlLT5s
b2NhbCgpOworICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5vcGVyYW5kKCkuaXNBcmd1bWVudCgp
KSB7CisgICAgICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gdmFyaWFibGUt
Pm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgc2l6ZV90IGxvY2FsID0g
dmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgpOwotICAgICAgICAgICAgaWYgKGxvY2FsID49IGFs
bG9jYXRpb24uc2l6ZSgpKQorICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gdmFyaWFibGUt
Pm9wZXJhbmQoKTsKKyAgICAgICAgICAgIHNpemVfdCBpbmRleCA9IHVzZWRPcGVyYW5kcy5vcGVy
YW5kSW5kZXgob3BlcmFuZCk7CisgICAgICAgICAgICBpZiAoaW5kZXggPj0gYWxsb2NhdGlvbi5z
aXplKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChhbGxvY2F0aW9uW2xvY2FsXSA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgIGlmIChh
bGxvY2F0aW9uW2luZGV4XSA9PSBVSU5UX01BWCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gYXNz
aWduKGFsbG9jYXRpb24sIHZhcmlhYmxlLT5sb2NhbCgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxl
LT5tYWNoaW5lTG9jYWwoKSA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIHZhcmlh
YmxlLT5vcGVyYW5kKCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBmb3IgKFN0YWNr
QWNjZXNzRGF0YSogZGF0YSA6IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEpIHsKLSAgICAgICAg
ICAgIGlmICghZGF0YS0+bG9jYWwuaXNMb2NhbCgpKSB7Ci0gICAgICAgICAgICAgICAgZGF0YS0+
bWFjaGluZUxvY2FsID0gZGF0YS0+bG9jYWw7CisgICAgICAgICAgICBpZiAoZGF0YS0+b3BlcmFu
ZC5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lTG9jYWwgPSBk
YXRhLT5vcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc3RhdGljX2Nh
c3Q8c2l6ZV90PihkYXRhLT5sb2NhbC50b0xvY2FsKCkpID49IGFsbG9jYXRpb24uc2l6ZSgpKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25bZGF0
YS0+bG9jYWwudG9Mb2NhbCgpXSA9PSBVSU5UX01BWCkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGlmIChkYXRhLT5vcGVyYW5kLmlzTG9jYWwoKSkgeworICAgICAgICAg
ICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEtPm9wZXJhbmQudG9Mb2NhbCgpKSA+
PSBhbGxvY2F0aW9uLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25bZGF0YS0+b3BlcmFuZC50b0xvY2FsKCldID09IFVJ
TlRfTUFYKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIAotICAgICAgICAgICAgZGF0YS0+bWFjaGluZUxvY2FsID0gYXNzaWduKGFsbG9j
YXRpb24sIGRhdGEtPmxvY2FsKTsKKyAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVMb2NhbCA9IGFz
c2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIGRhdGEtPm9wZXJhbmQpOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBpZiAoIW1fZ3JhcGgubmVlZHNTY29wZVJlZ2lzdGVyKCkpCiAg
ICAgICAgICAgICBjb2RlQmxvY2soKS0+c2V0U2NvcGVSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIo
KSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvZGVCbG9jaygpLT5zZXRTY29wZVJlZ2lz
dGVyKGFzc2lnbihhbGxvY2F0aW9uLCBjb2RlQmxvY2soKS0+c2NvcGVSZWdpc3RlcigpKSk7Cisg
ICAgICAgICAgICBjb2RlQmxvY2soKS0+c2V0U2NvcGVSZWdpc3Rlcihhc3NpZ24odXNlZE9wZXJh
bmRzLCBhbGxvY2F0aW9uLCBjb2RlQmxvY2soKS0+c2NvcGVSZWdpc3RlcigpKSk7CiAKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX2lubGluZVZhcmlhYmxlRGF0YS5zaXplKCk7
IGktLTspIHsKICAgICAgICAgICAgIElubGluZVZhcmlhYmxlRGF0YSBkYXRhID0gbV9ncmFwaC5t
X2lubGluZVZhcmlhYmxlRGF0YVtpXTsKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lID0gZGF0YS5pbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0gICAgICAgICAgICAg
ICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIgPSBhc3NpZ24oCi0gICAg
ICAgICAgICAgICAgICAgIGFsbG9jYXRpb24sIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlubGlu
ZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCisgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudENvdW50UmVnaXN0ZXIgPSBhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9u
LCBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisKICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgYXJndW1lbnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1dpdGhGaXh1cC5z
aXplKCk7IGFyZ3VtZW50LS07KSB7CiAgICAgICAgICAgICAgICAgQXJndW1lbnRQb3NpdGlvbiYg
cG9zaXRpb24gPSBtX2dyYXBoLm1fYXJndW1lbnRQb3NpdGlvbnNbCiAgICAgICAgICAgICAgICAg
ICAgIGRhdGEuYXJndW1lbnRQb3NpdGlvblN0YXJ0ICsgYXJndW1lbnRdOwpAQCAtMjE1LDggKzIx
NSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczogewogICAgICAgICAgICAgICAg
ICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lQ291bnQgPSBhc3NpZ24oYWxs
b2NhdGlvbiwgZGF0YS0+Y291bnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFj
aGluZVN0YXJ0ID0gYXNzaWduKGFsbG9jYXRpb24sIGRhdGEtPnN0YXJ0KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVDb3VudCA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFs
bG9jYXRpb24sIGRhdGEtPmNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1h
Y2hpbmVTdGFydCA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIGRhdGEtPnN0YXJ0
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTIzMSwxNyArMjMxLDE2IEBAIHB1YmxpYzoK
ICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGFzc2lnbihjb25zdCBWZWN0
b3I8dW5zaWduZWQ+JiBhbGxvY2F0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjKQorICAgIFZpcnR1
YWxSZWdpc3RlciBhc3NpZ24oY29uc3QgT3BlcmFuZHM8Ym9vbD4mIHVzZWRPcGVyYW5kcywgY29u
c3QgVmVjdG9yPHVuc2lnbmVkPiYgYWxsb2NhdGlvbiwgT3BlcmFuZCBvcGVyYW5kKQogICAgIHsK
LSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IHNyYzsKLSAgICAgICAgaWYgKHJlc3Vs
dC5pc0xvY2FsKCkpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIG15QWxsb2NhdGlvbiA9IGFsbG9j
YXRpb25bcmVzdWx0LnRvTG9jYWwoKV07Ci0gICAgICAgICAgICBpZiAobXlBbGxvY2F0aW9uID09
IFVJTlRfTUFYKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IFZpcnR1YWxSZWdpc3RlcigpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHZpcnR1YWxSZWdpc3Rl
ckZvckxvY2FsKG15QWxsb2NhdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgcmV0dXJu
IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CisKKyAgICAgICAgc2l6ZV90IG9wZXJhbmRJbmRl
eCA9IHVzZWRPcGVyYW5kcy5vcGVyYW5kSW5kZXgob3BlcmFuZCk7CisgICAgICAgIHVuc2lnbmVk
IG15QWxsb2NhdGlvbiA9IGFsbG9jYXRpb25bb3BlcmFuZEluZGV4XTsKKyAgICAgICAgaWYgKG15
QWxsb2NhdGlvbiA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0
ZXIoKTsKKyAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG15QWxsb2NhdGlv
bik7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAKaW5kZXggMThlNjdlNzYyNTcxY2RiYTVlZWJm
MWUwZmM0ZjkxODdiZjMyNWQ1Ny4uYjNlNDFkOGQ3ZTFkZTM2ZTI3MTYxM2E0NjI1NTc2YzlmNjZl
NzYyYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJl
ZHVjdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVu
Z3RoUmVkdWN0aW9uUGhhc2UuY3BwCkBAIC0yODUsMTcgKzI4NSwxNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBOb2RlKiBzZXRMb2NhbCA9IG51
bGxwdHI7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBtX25vZGUtPmxvY2Fs
KCk7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtX25vZGUtPm9wZXJhbmQoKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ub2RlSW5kZXg7IGkt
LTspIHsKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9ibG9jay0+YXQoaSk7CiAKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCAmJiBub2RlLT5sb2NhbCgp
ID09IGxvY2FsKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwg
JiYgbm9kZS0+b3BlcmFuZCgpID09IG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgc2V0
TG9jYWwgPSBub2RlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoYWNjZXNzZXNPdmVybGFwKG1fZ3JhcGgsIG5vZGUs
IEFic3RyYWN0SGVhcChTdGFjaywgbG9jYWwpKSkKKyAgICAgICAgICAgICAgICBpZiAoYWNjZXNz
ZXNPdmVybGFwKG1fZ3JhcGgsIG5vZGUsIEFic3RyYWN0SGVhcChTdGFjaywgb3BlcmFuZCkpKQog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCmluZGV4IDZhY2FmYmYzYmY1MzVjOTY5NmJlNjQ4YTIw
NzBiNmVlNmY0ZjhiZjkuLmYxYjFmZjY0ZGRhNTNjZjQ1OTY3MDRlZWI4MzE1ZjE2YmZiZTkwOWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKQEAgLTQwLDE0ICs0MCw2
IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1bmtHZW5lcmF0b3IoVk0mIHZtKQotewot
ICAgIENDYWxsSGVscGVycyBqaXQobnVsbHB0cik7Ci0gICAgaml0LnByb2JlKE9TUkV4aXQ6OmV4
ZWN1dGVPU1JFeGl0LCAmdm0pOwotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9C
QUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRU
aHVua1B0clRhZywgIkRGRyBPU1IgZXhpdCB0aHVuayIpOwotfQotCiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0m
IHZtKQogewogICAgIENDYWxsSGVscGVycyBqaXQobnVsbHB0cik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUaHVua3MuaAppbmRleCAwNWE1MGE1NGIyNWQ1MWRiY2IxODU4ZmU3YWFkY2E0ODY4
MjA1ZDllLi44YjVjM2YwMWE0ODUyMGI3YWFhYWFlYmFmZjkzYzNiMjZjY2Q5ODRmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgKQEAgLTM1LDcgKzM1LDYgQEAgY2xhc3MgVk07
CiAKIG5hbWVzcGFjZSBERkcgewogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IG9zckV4aXRUaHVua0dlbmVyYXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNJik7CiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckVudHJ5VGh1bmtHZW5lcmF0b3Io
Vk0mKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hl
Y2tIb2lzdGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNo
ZWNrSG9pc3RpbmdQaGFzZS5jcHAKaW5kZXggMGUyNWQ3ZDE0YmU1ZmQ0YWE0MDkxZmQ5ODEzZjE0
ZDBkY2Y4NjZlZC4uZjViOWVkMmYzNTgzNTNkMmNjOGEwZWFjZmU0YmE4NmExMWFjNDdiNyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1Bo
YXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0
aW5nUGhhc2UuY3BwCkBAIC0xNDYsOSArMTQ2LDkgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICBpZiAoaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dG8gY2hlY2tPcCA9IENoZWNrU3RydWN0dXJlOwogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKFNwZWNDZWxsQ2hlY2sgJiBTcGVjRW1wdHkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KS0+bG9jYWwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bG9jYWwgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdp
c3RlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8qIGlubGluZUNhbGxGcmFt
ZSA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoKGxvY2FsIC0gKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwKSkgPT0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
MCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGxvY2FsIC0gKGlubGluZUNh
bGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwKSkgPT0gdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDApKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHx0aGlzfCBjYW4gYmUgdGhlIFREWiB2YWx1ZS4gVGhlIGNhbGwgZW50
cnlwb2ludCB3b24ndCBoYXZlIHx0aGlzfCBhcyBURFosCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGJ1dCBhIGNhdGNoIG9yIGEgbG9vcCBPU1IgZW50cnkgbWF5IGhhdmUgfHRo
aXN8IGJlIFREWi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tPcCA9IENo
ZWNrU3RydWN0dXJlT3JFbXB0eTsKQEAgLTE2OCw4ICsxNjgsOCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9PSBub2RlKQotICAgICAgICAg
ICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKSA9IGdldExvY2FsOworICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpID09IG5vZGUpCisgICAgICAg
ICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUt
Pm9wZXJhbmQoKSkgPSBnZXRMb2NhbDsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguc3Vic3RpdHV0ZUdldExvY2FsKCpibG9jaywgaW5kZXhJbkJsb2Nr
LCB2YXJpYWJsZSwgZ2V0TG9jYWwpOwogICAgICAgICAgICAgICAgICAgICAKQEAgLTQ0OCw3ICs0
NDgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
Y29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzID0gbV9n
cmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcygpOwogICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgaW50IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAg
ICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRG
b3JJbmRleChpKTsKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgIGlmICghbm9kZSkKICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsaWRhdGUuY3BwCmluZGV4IDdlYTkzNDg5ZGVhYzE3NGFlNzJlZjU2OGYzYWNlNjU1YWFkZmU5
NDcuLmU5NDE4ODcxMTFhMzgwMjRiMzE5ZDNhN2QxMzgxYjRiNDI4NWUzMjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCkBAIC00ODMsNyArNDgzLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnBoaXNbaV07CiAgICAg
ICAgICAgICAgICAgQVNTRVJUKHBoaXNJblRoaXNCbG9jay5jb250YWlucyhub2RlKSk7CiAgICAg
ICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCBub2RlLT5vcCgpID09IFBoaSk7Ci0gICAgICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+bG9jYWwoKTsKKyAgICAgICAg
ICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBub2RlLT5vcGVyYW5kKCk7CiAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7ICsr
aikgewogICAgICAgICAgICAgICAgICAgICAvLyBQaGkgY2hpbGRyZW4gaW4gTG9hZFN0b3JlIGZv
cm0gYXJlIGludmFsaWQuCiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9
PSBMb2FkU3RvcmUgJiYgYmxvY2stPmlzUGhpSW5kZXgoaSkpCkBAIC01MTksMTAgKzUxOSwxMCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwg
YmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7ICsraykgewogICAgICAgICAgICAgICAgICAgICAg
ICAgQmFzaWNCbG9jayogcHJldkJsb2NrID0gYmxvY2stPnByZWRlY2Vzc29yc1trXTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChibG9jay0+cHJlZGVjZXNzb3JzW2tdKSwgcHJl
dkJsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHByZXZOb2RlID0gcHJldkJs
b2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBwcmV2Tm9kZSA9IHByZXZCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQo
b3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgUGhpIHRo
YXQgaXMgbm90IHJlZmVycmluZyB0byAqdGhpcyogYmxvY2sgdGhlbiBhbGwgcHJlZGVjZXNzb3Jz
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtdXN0IGhhdmUgdGhhdCBsb2NhbCBhdmFpbGFi
bGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLCBibG9j
ay0+cHJlZGVjZXNzb3JzW2tdKSwgcHJldk5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKG9wZXJhbmQsIGJsb2NrLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdKSwgcHJldk5v
ZGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwcmV2Tm9kZS0+b3AoKSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgRmx1c2g6CkBAIC01MzMsMTEgKzUzMywxMSBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5wcmVkZWNl
c3NvcnNba10sIHByZXZOb2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgob3BlcmFuZCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb2NhbCwgYmxvY2stPnByZWRlY2Vz
c29yc1trXSwgcHJldk5vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcGVyYW5k
LCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJldk5vZGUtPm9wKCkgPT0gU2V0TG9jYWwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudERlZmluaXRlbHkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudE1h
eWJlCkBAIC01NDcsMjQgKzU0NywyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCBpdCBjYW5ub3QgcmVmZXIgaW50byB0aGlzIGJsb2Nr
LgotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+cHJlZGVj
ZXNzb3JzW2tdLCBwcmV2Tm9kZSksICFwcmV2QmxvY2stPmlzSW5CbG9jayhlZGdlLm5vZGUoKSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG9wZXJhbmQsIGJsb2NrLT5wcmVk
ZWNlc3NvcnNba10sIHByZXZOb2RlKSwgIXByZXZCbG9jay0+aXNJbkJsb2NrKGVkZ2Uubm9kZSgp
KSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZm91bmQpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgT3BlcmFuZHM8
c2l6ZV90PiBnZXRMb2NhbFBvc2l0aW9ucygKLSAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFi
bGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksCi0gICAgICAgICAgICAgICAgYmxvY2stPnZh
cmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKLSAgICAgICAgICAgIE9wZXJhbmRzPHNp
emVfdD4gc2V0TG9jYWxQb3NpdGlvbnMoCi0gICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLAotICAgICAgICAgICAgICAgIGJsb2NrLT52YXJp
YWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgICAgICBPcGVyYW5kczxzaXpl
X3Q+IGdldExvY2FsUG9zaXRpb25zKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVh
ZCk7CisgICAgICAgICAgICBPcGVyYW5kczxzaXplX3Q+IHNldExvY2FsUG9zaXRpb25zKE9wZXJh
bmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJP
ZkFyZ3VtZW50cygpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBWQUxJREFURSgodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoaSksIGJsb2NrKSwgIWJsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXJn
dW1lbnQoaSkgfHwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChpKS0+YWNjZXNzZXNT
dGFjayhtX2dyYXBoKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoKHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSwgYmxvY2spLCAhYmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5hcmd1bWVudChpKSB8fCBibG9jay0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpLT5h
Y2Nlc3Nlc1N0YWNrKG1fZ3JhcGgpKTsKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zv
cm0gPT0gVGhyZWFkZWRDUFMpCi0gICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChpKSwgYmxvY2spLCAhYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5h
cmd1bWVudChpKSB8fCBibG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGkpLT5hY2Nlc3Nl
c1N0YWNrKG1fZ3JhcGgpKTsKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSwgYmxvY2spLCAhYmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5hcmd1bWVudChpKSB8fCBibG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50
KGkpLT5hY2Nlc3Nlc1N0YWNrKG1fZ3JhcGgpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5hcmd1bWVudChpKSA9IG5vdFNldDsKICAgICAgICAg
ICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5hcmd1bWVudChpKSA9IG5vdFNldDsKQEAgLTY2OCwy
NCArNjY0LDI0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGlmICghbV9teVJlZkNv
dW50cy5nZXQobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgYmxvY2spLCBnZXRMb2NhbFBvc2l0aW9u
cy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID09IG5vdFNldCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURSgobm9kZSwgYmxvY2spLCBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5v
ZGUtPm9wZXJhbmQoKSkgPT0gbm90U2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKChub2RlLCBibG9jayksICEhbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgVkFMSURBVEUoKG5vZGUsIGJsb2NrKSwgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gU2V0
QXJndW1lbnREZWZpbml0ZWx5IHx8IG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFBoaSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMu
b3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGk7CisgICAgICAgICAgICAgICAgICAgIGdldExvY2Fs
UG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IGk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICAg
ICAgICAgIC8vIE9ubHkgcmVjb3JkIHRoZSBmaXJzdCBTZXRMb2NhbC4gVGhlcmUgbWF5IGJlIG11
bHRpcGxlIFNldExvY2FscwogICAgICAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIG9mIGZsdXNo
aW5nLgotICAgICAgICAgICAgICAgICAgICBpZiAoc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChu
b2RlLT5sb2NhbCgpKSAhPSBub3RTZXQpCisgICAgICAgICAgICAgICAgICAgIGlmIChzZXRMb2Nh
bFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgIT0gbm90U2V0KQogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRp
b25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBpOworICAgICAgICAgICAgICAgICAgICBzZXRM
b2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50RGVmaW5pdGVs
eToKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBhY3RzIGxpa2UgYSByZXNldC4gSXQncyBv
ayB0byBoYXZlIGEgc2Vjb25kIEdldExvY2FsIGZvciBhIGxvY2FsIGluIHRoZSBzYW1lCiAgICAg
ICAgICAgICAgICAgICAgIC8vIGJsb2NrIGlmIHdlIGhhZCBhIFNldEFyZ3VtZW50RGVmaW5pdGVs
eSBmb3IgdGhhdCBsb2NhbC4KLSAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMu
b3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vdFNldDsKLSAgICAgICAgICAgICAgICAgICAgc2V0
TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vdFNldDsKKyAgICAgICAg
ICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0g
bm90U2V0OworICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5v
ZGUtPm9wZXJhbmQoKSkgPSBub3RTZXQ7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnRNYXliZToKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CkBAIC03MTEsNyArNzA3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJl
ck9mQXJndW1lbnRzKCk7ICsraSkgewogICAgICAgICAgICAgICAgIGNoZWNrT3BlcmFuZCgKLSAg
ICAgICAgICAgICAgICAgICAgYmxvY2ssIGdldExvY2FsUG9zaXRpb25zLCBzZXRMb2NhbFBvc2l0
aW9ucywgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpOworICAgICAgICAgICAgICAgICAg
ICBibG9jaywgZ2V0TG9jYWxQb3NpdGlvbnMsIHNldExvY2FsUG9zaXRpb25zLCB2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJl
ck9mTG9jYWxzKCk7ICsraSkgewogICAgICAgICAgICAgICAgIGNoZWNrT3BlcmFuZCgKQEAgLTk2
OCwyNiArOTY0LDI2IEBAIHByaXZhdGU6CiAgICAgICAgIGRhdGFMb2cobm9kZSwgIiAtPiAiLCBl
ZGdlKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChWaXJ0
dWFsUmVnaXN0ZXIgbG9jYWwsIEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHZvaWQgcmVwb3J0VmFs
aWRhdGlvbkNvbnRleHQoT3BlcmFuZCBvcGVyYW5kLCBCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7
CiAgICAgICAgIGlmICghYmxvY2spIHsKLSAgICAgICAgICAgIGRhdGFMb2cobG9jYWwsICIgaW4g
bnVsbCBCbG9jayAiKTsKKyAgICAgICAgICAgIGRhdGFMb2cob3BlcmFuZCwgIiBpbiBudWxsIEJs
b2NrICIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgZGF0YUxv
Zyhsb2NhbCwgIiBpbiBCbG9jayAiLCAqYmxvY2spOworICAgICAgICBkYXRhTG9nKG9wZXJhbmQs
ICIgaW4gQmxvY2sgIiwgKmJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxp
ZGF0aW9uQ29udGV4dCgKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCYXNpY0Jsb2Nr
KiBzb3VyY2VCbG9jaywgQmFzaWNCbG9jayogZGVzdGluYXRpb25CbG9jaykKKyAgICAgICAgT3Bl
cmFuZCBvcGVyYW5kLCBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9jaywgQmFzaWNCbG9jayogZGVzdGlu
YXRpb25CbG9jaykKICAgICB7Ci0gICAgICAgIGRhdGFMb2cobG9jYWwsICIgaW4gQmxvY2sgIiwg
KnNvdXJjZUJsb2NrLCAiIC0+ICIsICpkZXN0aW5hdGlvbkJsb2NrKTsKKyAgICAgICAgZGF0YUxv
ZyhvcGVyYW5kLCAiIGluIEJsb2NrICIsICpzb3VyY2VCbG9jaywgIiAtPiAiLCAqZGVzdGluYXRp
b25CbG9jayk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQo
Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgQmFzaWNCbG9jayogc291cmNlQmxvY2ss
IE5vZGUqIHByZXZOb2RlKQorICAgICAgICBPcGVyYW5kIG9wZXJhbmQsIEJhc2ljQmxvY2sqIHNv
dXJjZUJsb2NrLCBOb2RlKiBwcmV2Tm9kZSkKICAgICB7Ci0gICAgICAgIGRhdGFMb2cocHJldk5v
ZGUsICIgZm9yICIsIGxvY2FsLCAiIGluIEJsb2NrICIsICpzb3VyY2VCbG9jayk7CisgICAgICAg
IGRhdGFMb2cocHJldk5vZGUsICIgZm9yICIsIG9wZXJhbmQsICIgaW4gQmxvY2sgIiwgKnNvdXJj
ZUJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChO
b2RlKiBub2RlLCBCYXNpY0Jsb2NrKiBibG9jaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCmluZGV4IDAzZTg5MjBm
MmY2ZjNlZThiYTE0ODZiMGJkNzc2NTYxZjEwZTU5NGMuLjc0ZWE2MThlOTAxMTI5YTU3ZTJjODNi
Yjg5MmE3NWI3YjgwNjMzYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcApAQCAtNDEsMTEgKzQxLDkgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBuYW1lc3BhY2UgewogCi1uYW1lc3BhY2Ug
REZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsIHsKLXN0YXRpYyBjb25zdGV4cHIgYm9v
bCB2ZXJib3NlID0gZmFsc2U7Ci19CiAKIGNsYXNzIFZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UgOiBw
dWJsaWMgUGhhc2UgeworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7
CiBwdWJsaWM6CiAgICAgVmFyYXJnc0ZvcndhcmRpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAg
ICAgIDogUGhhc2UoZ3JhcGgsICJ2YXJhcmdzIGZvcndhcmRpbmciKQpAQCAtNTYsNyArNTQsNyBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIG1f
Z3JhcGgubV9mb3JtICE9IFNTQSk7CiAgICAgICAgIAotICAgICAgICBpZiAoREZHVmFyYXJnc0Zv
cndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgIGlmICh2ZXJib3NlKSB7
CiAgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUgdmFyYXJncyBmb3J3YXJkaW5nOlxu
Iik7CiAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQpAQCAtODgsNyArODYs
NyBAQCBwcml2YXRlOgogICAgICAgICAvLyBXZSBleHBlY3QgY2FsbHMgaW50byB0aGlzIGZ1bmN0
aW9uIHRvIGJlIHJhcmUuIFNvLCB0aGlzIGlzIHdyaXR0ZW4gaW4gYSBzaW1wbGUgTyhuKSBtYW5u
ZXIuCiAgICAgICAgIAogICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBibG9jay0+YXQoY2FuZGlk
YXRlTm9kZUluZGV4KTsKLSAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRl
cm5hbDo6dmVyYm9zZSkKKyAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9n
KCJIYW5kbGluZyBjYW5kaWRhdGUgIiwgY2FuZGlkYXRlLCAiXG4iKTsKICAgICAgICAgCiAgICAg
ICAgIC8vIFdlIGVsaW1pbmF0ZSBHZXRCdXR0ZXJmbHkgb3ZlciBDcmVhdGVDbG9uZWRBcmd1bWVu
dHMgaWYgdGhlIGJ1dHRlcmZseSBpcyBvbmx5CkBAIC0xMDUsNyArMTAzLDcgQEAgcHJpdmF0ZToK
IAogICAgICAgICAgICAgYXV0byBkZWZhdWx0RXNjYXBlID0gWyZdIHsKICAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC51c2VzKG5vZGUsIGNhbmRpZGF0ZSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgRXNjYXBlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMTcsOSArMTE1LDEwIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpICE9IGNhbmRpZGF0ZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbm9kZS0+dW5saW5rZWRPcGVyYW5kKCku
aXNUbXAoKSwgIldlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IGEgdG1wIHJlZmVycmluZyB0byBh
biBhcmd1bWVudHMgb2JqZWN0LiIpOwogICAgICAgICAgICAgICAgIGxhc3RVc2VySW5kZXggPSBu
b2RlSW5kZXg7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZWxldmFudExvY2Fscy5jb250YWlucyhu
b2RlLT51bmxpbmtlZExvY2FsKCkpKQotICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2Fs
cy5hcHBlbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJl
bGV2YW50TG9jYWxzLmNvbnRhaW5zKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpLnZpcnR1YWxSZWdp
c3RlcigpKSkKKyAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbHMuYXBwZW5kKG5vZGUt
PnVubGlua2VkT3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQ2hlY2tWYXJhcmdzOgpA
QCAtMTQwLDEzICsxMzksMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIHNh
d0VzY2FwZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAg
IGlmIChzYXdFc2NhcGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3
YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRXNjYXBlIGF0ICIs
IG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgICAgICAgICAgY2FzZSBM
b2FkVmFyYXJnczoKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC51c2VzKG5vZGUsIGNhbmRp
ZGF0ZSkpCiAgICAgICAgICAgICAgICAgICAgIGxhc3RVc2VySW5kZXggPSBub2RlSW5kZXg7CkBA
IC0xNTcsNyArMTU3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJh
cmdzOgogICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjYW5kaWRhdGUgfHwgbm9kZS0+Y2hp
bGQyKCkgPT0gY2FuZGlkYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEVzY2FwZSBh
dCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgICAgIH0KQEAgLTE2Nyw3ICsxNjcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCkgPT0gY2FuZGlkYXRlICYmIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0xvYWRl
ZEZyb20oKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQ
aGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBFc2NhcGUgYXQgIiwgbm9kZSwg
IlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBA
IC0yMjYsNyArMjI2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICghdmFsaWRHZXRCeU9m
ZnNldCkgewogICAgICAgICAgICAgICAgIGZvciAoTm9kZSogYnV0dGVyZmx5IDogY2FuZGlkYXRl
QnV0dGVyZmxpZXMpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudXNlcyhub2Rl
LCBidXR0ZXJmbHkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0Zv
cndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEJ1
dHRlcmZseSBlc2NhcGVkIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yMzUsMTEgKzIzNSwxMSBAQCBw
cml2YXRlOgogCiAgICAgICAgICAgICBmb3JBbGxLaWxsZWRPcGVyYW5kcygKICAgICAgICAgICAg
ICAgICBtX2dyYXBoLCBub2RlLCBibG9jay0+dHJ5QXQobm9kZUluZGV4ICsgMSksCi0gICAgICAg
ICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgS2lsbGluZyAiLCByZWcsICIgd2hpbGUgd2Ug
YXJlIGludGVyZXN0ZWQgaW4gIiwgbGlzdER1bXAocmVsZXZhbnRMb2NhbHMpLCAiXG4iKTsKKyAg
ICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBLaWxs
aW5nICIsIG9wZXJhbmQsICIgd2hpbGUgd2UgYXJlIGludGVyZXN0ZWQgaW4gIiwgbGlzdER1bXAo
cmVsZXZhbnRMb2NhbHMpLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJlbGV2YW50TG9jYWxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocmVsZXZhbnRMb2NhbHNbaV0gPT0gcmVnKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAob3BlcmFuZCA9PSByZWxldmFudExvY2Fsc1tpXSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxzW2ktLV0gPSByZWxldmFudExvY2Fscy5s
YXN0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbHMucmVtb3Zl
TGFzdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RVc2VySW5kZXggPSBub2Rl
SW5kZXg7CkBAIC0yNDcsNyArMjQ3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9Ci0gICAgICAgIGlmIChERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgIGlmICh2ZXJib3NlKQog
ICAgICAgICAgICAgZGF0YUxvZygiU2VsZWN0ZWQgbGFzdFVzZXJJbmRleCA9ICIsIGxhc3RVc2Vy
SW5kZXgsICIsICIsIGJsb2NrLT5hdChsYXN0VXNlckluZGV4KSwgIlxuIik7CiAgICAgICAgIAog
ICAgICAgICAvLyBXZSdyZSBzdGlsbCBpbiBidXNpbmVzcy4gRGV0ZXJtaW5lIGlmIGJldHdlZW4g
dGhlIGNhbmRpZGF0ZSBhbmQgdGhlIGxhc3QgdXNlciB0aGVyZSBpcyBhbnkKQEAgLTI2MywxNiAr
MjYzLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgICAg
ICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgICAgICBjYXNlIEtpbGxTdGFjazoKLSAgICAgICAg
ICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPnVu
bGlua2VkTG9jYWwoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3
YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAoYXJndW1l
bnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiAgICBJbnRlcmZlcmVuY2UgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dFN0YWNrOgotICAg
ICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9k
ZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
REZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAg
ICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+c3RhY2tB
Y2Nlc3NEYXRhKCktPm9wZXJhbmQpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEludGVyZmVyZW5jZSBhdCAi
LCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
ICAgIH0KQEAgLTI4MCw4ICsyODAsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgIGNhc2UgRmx1c2g6Ci0gICAgICAg
ICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT5s
b2NhbCgpKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQ
aGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZv
bHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+b3BlcmFuZCgpKSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
ICBJbnRlcmZlcmVuY2UgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgICAgICB9CkBAIC0yOTcsMTMgKzI5NywxMiBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaGVhcC5wYXlsb2FkKCkuaXNU
b3AoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnKGhlYXAu
cGF5bG9hZCgpLnZhbHVlMzIoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1l
bnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIHJlZykpCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIGhlYXAub3BlcmFu
ZCgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2VzSW50ZXJmZXJlID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgTm9PcENsb2JiZXJp
emUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGRvZXNJbnRlcmZlcmUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgSW50ZXJmZXJlbmNlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtMzExLDcgKzMxMCw3IEBA
IHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIFdlIGNhbiBtYWtlIHRo
aXMgd29yay4KLSAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6
dmVyYm9zZSkKKyAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
V2lsbCBkbyBmb3J3YXJkaW5nIVxuIik7CiAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAg
ICAgIApAQCAtMzQxLDggKzM0MCwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIFdl
IGRvbid0IG5lZWQgdG8gY2hhbmdlIGFueXRoaW5nIHdpdGggdGhlc2UuCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFZhcmFyZ3NMZW5n
dGg6IHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJndW1lbnRzQ2hpbGQoKSAhPSBjYW5k
aWRhdGUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgbm9k
ZS0+Y29udmVydFRvSWRlbnRpdHlPbihlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgo
aW5zZXJ0aW9uU2V0LCBjYW5kaWRhdGUsIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2luLCAvKiBhZGRU
aGlzID0gKi8gdHJ1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
CiAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgotICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKSAhPSBjYW5kaWRhdGUpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFyZ3Vt
ZW50c0NoaWxkKCkgIT0gY2FuZGlkYXRlKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhGb3J3YXJkVmFyYXJncyk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAKaW5kZXggOGViZmZiNDM1ZWQ0ZGJmNjAyYmQ2
MmFlZDRjMzQzMmVhNWE4MjkwMi4uMmFjMmVlMzliNGNjYWQzMDgxMjViNGU2ZWNjODhhODdjN2Qx
NzlkOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFj
Y2Vzc0RhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVB
Y2Nlc3NEYXRhLmNwcApAQCAtMzEsOCArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCiBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNzRGF0YSgpCi0gICAg
OiBtX2xvY2FsKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ+OjptaW4oKSkpCi0gICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCisgICAgOiBtX3By
ZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgLCBtX2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKFNwZWNO
b25lKQogICAgICwgbV9mbGFncygwKQogICAgICwgbV9zaG91bGROZXZlclVuYm94KGZhbHNlKQpA
QCAtNDUsMTAgKzQ0LDEwIEBAIFZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRh
KCkKICAgICBjbGVhclZvdGVzKCk7CiB9CiAKLVZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVB
Y2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBsb2NhbCkKLSAgICA6IG1fbG9jYWwobG9jYWwpCi0g
ICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCitWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxl
QWNjZXNzRGF0YShPcGVyYW5kIG9wZXJhbmQpCisgICAgOiBtX3ByZWRpY3Rpb24oU3BlY05vbmUp
CiAgICAgLCBtX2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKFNwZWNOb25lKQorICAgICwgbV9vcGVy
YW5kKG9wZXJhbmQpCiAgICAgLCBtX2ZsYWdzKDApCiAgICAgLCBtX3Nob3VsZE5ldmVyVW5ib3go
ZmFsc2UpCiAgICAgLCBtX3N0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoZmFsc2UpCkBAIC04
Nyw3ICs4Niw3IEBAIGJvb2wgVmFyaWFibGVBY2Nlc3NEYXRhOjpzaG91bGRVc2VEb3VibGVGb3Jt
YXRBY2NvcmRpbmdUb1ZvdGUoKQogewogICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgdGhpcyBmYWNp
bGl0eSBmb3IgYXJndW1lbnRzLCB5ZXQuCiAgICAgLy8gRklYTUU6IG1ha2UgdGhpcyB3b3JrIGZv
ciBhcmd1bWVudHMuCi0gICAgaWYgKGxvY2FsKCkuaXNBcmd1bWVudCgpKQorICAgIGlmIChvcGVy
YW5kKCkuaXNBcmd1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAg
IC8vIElmIHRoZSB2YXJpYWJsZSBpcyBub3QgYSBudW1iZXIgcHJlZGljdGlvbiwgdGhlbiB0aGlz
IGRvZXNuJ3QKQEAgLTEyMSw3ICsxMjAsNyBAQCBib29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6dGFs
bHlWb3Rlc0ZvclNob3VsZFVzZURvdWJsZUZvcm1hdCgpCiB7CiAgICAgQVNTRVJUKGlzUm9vdCgp
KTsKICAgICAgICAgCi0gICAgaWYgKGxvY2FsKCkuaXNBcmd1bWVudCgpIHx8IHNob3VsZE5ldmVy
VW5ib3goKQorICAgIGlmIChvcGVyYW5kKCkuaXNBcmd1bWVudCgpIHx8IHNob3VsZE5ldmVyVW5i
b3goKQogICAgICAgICB8fCAoZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc0FycmF5SW5kZXgp
KQogICAgICAgICByZXR1cm4gREZHOjptZXJnZURvdWJsZUZvcm1hdFN0YXRlKG1fZG91YmxlRm9y
bWF0U3RhdGUsIE5vdFVzaW5nRG91YmxlRm9ybWF0KTsKICAgICAKQEAgLTE3Niw3ICsxNzUsNyBA
QCBib29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6Y291bGRSZXByZXNlbnRJbnQ1MkltcGwoKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gV2UgcHVudCBmb3IgbWFjaGluZSBhcmd1
bWVudHMuCi0gICAgaWYgKG1fbG9jYWwuaXNBcmd1bWVudCgpKQorICAgIGlmIChvcGVyYW5kKCku
aXNBcmd1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gVGhlIGFy
Z3VtZW50LWF3YXJlIHByZWRpY3Rpb24gLS0gd2hpY2ggbWVyZ2VzIGFsbCBvZiBhbiAoaW5saW5l
ZCBvciBtYWNoaW5lKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YXJpYWJsZUFjY2Vzc0RhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmgKaW5kZXggMWQzODkyZjllYzA5Y2JhMjA0M2ZhMjU0ZTYwOTQyMzIwMTRh
Mjg0ZS4uYmUyZmI1NDAxMzUyNjU1YjljN2FjYjEzYmRhZWE3NTU3M2ZjZWZmOSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCkBAIC00
OCwxMiArNDgsMTIgQEAgY2xhc3MgVmFyaWFibGVBY2Nlc3NEYXRhIDogcHVibGljIFVuaW9uRmlu
ZDxWYXJpYWJsZUFjY2Vzc0RhdGE+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShWYXJpYWJs
ZUFjY2Vzc0RhdGEpOwogcHVibGljOgogICAgIFZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgIFZh
cmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwpOworICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YShPcGVyYW5kKTsKICAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwoKQorICAg
IE9wZXJhbmQgb3BlcmFuZCgpCiAgICAgewotICAgICAgICBBU1NFUlQobV9sb2NhbCA9PSBmaW5k
KCktPm1fbG9jYWwpOwotICAgICAgICByZXR1cm4gbV9sb2NhbDsKKyAgICAgICAgQVNTRVJUKG1f
b3BlcmFuZCA9PSBmaW5kKCktPm1fb3BlcmFuZCk7CisgICAgICAgIHJldHVybiBtX29wZXJhbmQ7
CiAgICAgfQogICAgIAogICAgIFZpcnR1YWxSZWdpc3RlciYgbWFjaGluZUxvY2FsKCkKQEAgLTIw
OCwxMCArMjA4LDEwIEBAIHByaXZhdGU6CiAgICAgLy8gcHV0dGluZyB0aGVtIGhlcmUgc2ltcGxp
ZmllcyB0aGUgY29kZSwgYW5kIHdlIGRvbid0IGV4cGVjdCBERkcgc3BhY2UKICAgICAvLyB1c2Fn
ZSBmb3IgdmFyaWFibGUgYWNjZXNzIG5vZGVzIGRvIGJlIHNpZ25pZmljYW50LgogCi0gICAgVmly
dHVhbFJlZ2lzdGVyIG1fbG9jYWw7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG1fbWFjaGluZUxvY2Fs
OwogICAgIFNwZWN1bGF0ZWRUeXBlIG1fcHJlZGljdGlvbjsKICAgICBTcGVjdWxhdGVkVHlwZSBt
X2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9uOworICAgIE9wZXJhbmQgbV9vcGVyYW5kOworICAgIFZp
cnR1YWxSZWdpc3RlciBtX21hY2hpbmVMb2NhbDsKICAgICBOb2RlRmxhZ3MgbV9mbGFnczsKIAog
ICAgIGJvb2wgbV9zaG91bGROZXZlclVuYm94OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFyaWFibGVFdmVudC5jcHAKaW5kZXggZDNiNjZjYmFhNjExZmM0MDVlZTRmZWMwODEw
NjM3YTg5Njc4ZDEyZS4uOWNlMGY2N2Y5Nzk1MTk5YzA1YmYxMDA4OTRmOTg1OWFmMzQ5OGU2ZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwCkBA
IC02MCwxMSArNjAsMTEgQEAgdm9pZCBWYXJpYWJsZUV2ZW50OjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0CiAgICAgICAgIG91dC5wcmludCgiRGVhdGgoIiwgaWQoKSwgIikiKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBNb3ZIaW50RXZlbnQ6Ci0gICAgICAgIG91dC5wcmludCgiTW92
SGludCgiLCBpZCgpLCAiLCAiLCBieXRlY29kZVJlZ2lzdGVyKCksICIpIik7CisgICAgICAgIG91
dC5wcmludCgiTW92SGludCgiLCBpZCgpLCAiLCAiLCBvcGVyYW5kKCksICIpIik7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgU2V0TG9jYWxFdmVudDoKICAgICAgICAgb3V0LnByaW50KAotICAg
ICAgICAgICAgIlNldExvY2FsKG1hY2hpbmU6IiwgbWFjaGluZVJlZ2lzdGVyKCksICIgLT4gYnl0
ZWNvZGU6IiwgYnl0ZWNvZGVSZWdpc3RlcigpLAorICAgICAgICAgICAgIlNldExvY2FsKG1hY2hp
bmU6IiwgbWFjaGluZVJlZ2lzdGVyKCksICIgLT4gYnl0ZWNvZGU6Iiwgb3BlcmFuZCgpLAogICAg
ICAgICAgICAgIiwgIiwgZGF0YUZvcm1hdFRvU3RyaW5nKGRhdGFGb3JtYXQoKSksICIpIik7CiAg
ICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyaWFibGVFdmVudC5oCmluZGV4IGNlMmNhYzAxOTIzZjg2ODQ5YjE3OGZlMDZmNzY3OTAz
MTUxOWYwODEuLjdjOTkyMmM5MDZhYjQ0ZDdiMDM3NWY1NjlmY2YzZTI1ZTRmOGQ4ZTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oCkBAIC02OSw2ICs2
OSwxMCBAQCBlbnVtIFZhcmlhYmxlRXZlbnRLaW5kIDogdWludDhfdCB7CiB9OwogCiB1bmlvbiBW
YXJpYWJsZVJlcHJlc2VudGF0aW9uIHsKKyAgICBWYXJpYWJsZVJlcHJlc2VudGF0aW9uKCkgCisg
ICAgICAgIDogb3BlcmFuZCgpIAorICAgIHsgfQorCiAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lz
dGVySUQgZ3ByOwogICAgIE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgZnByOwogI2lmIFVT
RShKU1ZBTFVFMzJfNjQpCkBAIC03Nyw3ICs4MSw3IEBAIHVuaW9uIFZhcmlhYmxlUmVwcmVzZW50
YXRpb24gewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXlsb2FkR1BSOwog
ICAgIH0gcGFpcjsKICNlbmRpZgotICAgIGludDMyX3QgdmlydHVhbFJlZzsKKyAgICBPcGVyYW5k
IG9wZXJhbmQ7CiB9OwogCiBjbGFzcyBWYXJpYWJsZUV2ZW50IHsKQEAgLTE2Myw3ICsxNjcsNyBA
QCBwdWJsaWM6CiAgICAgICAgIFdoaWNoVHlwZSB3aGljaDsKICAgICAgICAgd2hpY2guaWQgPSBp
ZC5iaXRzKCk7CiAgICAgICAgIFZhcmlhYmxlUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb247
Ci0gICAgICAgIHJlcHJlc2VudGF0aW9uLnZpcnR1YWxSZWcgPSB2aXJ0dWFsUmVnaXN0ZXIub2Zm
c2V0KCk7CisgICAgICAgIHJlcHJlc2VudGF0aW9uLm9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXI7
CiAgICAgICAgIGV2ZW50Lm1fa2luZCA9IGtpbmQ7CiAgICAgICAgIGV2ZW50Lm1fZGF0YUZvcm1h
dCA9IGZvcm1hdDsKICAgICAgICAgZXZlbnQubV93aGljaCA9IFdURk1vdmUod2hpY2gpOwpAQCAt
MTgyLDEzICsxODYsMTMgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBzdGF0aWMgVmFyaWFi
bGVFdmVudCBzZXRMb2NhbCgKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2RlUmVnLCBW
aXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZywgRGF0YUZvcm1hdCBmb3JtYXQpCisgICAgICAgIE9w
ZXJhbmQgYnl0ZWNvZGVPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZywgRGF0YUZv
cm1hdCBmb3JtYXQpCiAgICAgewogICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50OwogICAgICAg
ICBXaGljaFR5cGUgd2hpY2g7CiAgICAgICAgIHdoaWNoLnZpcnR1YWxSZWcgPSBtYWNoaW5lUmVn
Lm9mZnNldCgpOwogICAgICAgICBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9u
OwotICAgICAgICByZXByZXNlbnRhdGlvbi52aXJ0dWFsUmVnID0gYnl0ZWNvZGVSZWcub2Zmc2V0
KCk7CisgICAgICAgIHJlcHJlc2VudGF0aW9uLm9wZXJhbmQgPSBieXRlY29kZU9wZXJhbmQ7CiAg
ICAgICAgIGV2ZW50Lm1fa2luZCA9IFNldExvY2FsRXZlbnQ7CiAgICAgICAgIGV2ZW50Lm1fZGF0
YUZvcm1hdCA9IGZvcm1hdDsKICAgICAgICAgZXZlbnQubV93aGljaCA9IFdURk1vdmUod2hpY2gp
OwpAQCAtMTk2LDEzICsyMDAsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZXZlbnQ7CiAg
ICAgfQogICAgIAotICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IG1vdkhpbnQoTWluaWZpZWRJRCBp
ZCwgVmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2RlUmVnKQorICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50
IG1vdkhpbnQoTWluaWZpZWRJRCBpZCwgT3BlcmFuZCBieXRlY29kZVJlZykKICAgICB7CiAgICAg
ICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7CiAgICAgICAgIFdoaWNoVHlwZSB3aGljaDsKICAgICAg
ICAgd2hpY2guaWQgPSBpZC5iaXRzKCk7CiAgICAgICAgIFZhcmlhYmxlUmVwcmVzZW50YXRpb24g
cmVwcmVzZW50YXRpb247Ci0gICAgICAgIHJlcHJlc2VudGF0aW9uLnZpcnR1YWxSZWcgPSBieXRl
Y29kZVJlZy5vZmZzZXQoKTsKKyAgICAgICAgcmVwcmVzZW50YXRpb24ub3BlcmFuZCA9IGJ5dGVj
b2RlUmVnOwogICAgICAgICBldmVudC5tX2tpbmQgPSBNb3ZIaW50RXZlbnQ7CiAgICAgICAgIGV2
ZW50Lm1fd2hpY2ggPSBXVEZNb3ZlKHdoaWNoKTsKICAgICAgICAgZXZlbnQubV9yZXByZXNlbnRh
dGlvbiA9IFdURk1vdmUocmVwcmVzZW50YXRpb24pOwpAQCAtMjY2LDEzICsyNzAsMTMgQEAgcHVi
bGljOgogICAgIFZpcnR1YWxSZWdpc3RlciBzcGlsbFJlZ2lzdGVyKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIEFTU0VSVChtX2tpbmQgPT0gQmlydGhUb1NwaWxsIHx8IG1fa2luZCA9PSBTcGlsbCk7
Ci0gICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIobV9yZXByZXNlbnRhdGlvbi5nZXQoKS52
aXJ0dWFsUmVnKTsKKyAgICAgICAgcmV0dXJuIG1fcmVwcmVzZW50YXRpb24uZ2V0KCkub3BlcmFu
ZC52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICB9Ci0gICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGJ5
dGVjb2RlUmVnaXN0ZXIoKSBjb25zdAorCisgICAgT3BlcmFuZCBvcGVyYW5kKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gU2V0TG9jYWxFdmVudCB8fCBtX2tpbmQgPT0g
TW92SGludEV2ZW50KTsKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX3JlcHJlc2Vu
dGF0aW9uLmdldCgpLnZpcnR1YWxSZWcpOworICAgICAgICByZXR1cm4gbV9yZXByZXNlbnRhdGlv
bi5nZXQoKS5vcGVyYW5kOwogICAgIH0KICAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGlu
ZVJlZ2lzdGVyKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCmluZGV4IDRiMjZjYjAyYzkzYTllODFjZmY0MDc0NmM2
N2U3MDVjZDVkMjEwYzUuLmVmNzA4NzQ1MWIwMzQ0NzFmYWI2MTk5ZjJlMTNjMDhlYTJhZmZjNzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0
cmVhbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50
U3RyZWFtLmNwcApAQCAtNDMsNyArNDMsNyBAQCB2b2lkIFZhcmlhYmxlRXZlbnRTdHJlYW06Omxv
Z0V2ZW50KGNvbnN0IFZhcmlhYmxlRXZlbnQmIGV2ZW50KQogewogICAgIGRhdGFMb2dGKCJzZXEj
JXU6Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNpemUoKSkpOwogICAgIGV2ZW50LmR1bXAoV1RG
OjpkYXRhRmlsZSgpKTsKLSAgICBkYXRhTG9nRigiICIpOworICAgIGRhdGFMb2dMbigiICIpOwog
fQogCiBuYW1lc3BhY2UgewpAQCAtMTIwLDEwICsxMjAsMTIgQEAgdW5zaWduZWQgVmFyaWFibGVF
dmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVP
cmlnaW4gY29kZU9yaWdpbiwgTWluaWZpZWRHcmFwaCYgZ3JhcGgsCiAgICAgdW5zaWduZWQgaW5k
ZXgsIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiB2YWx1ZVJlY292ZXJpZXMsIFZlY3RvcjxVbmRl
ZmluZWRPcGVyYW5kU3Bhbj4qIHVuZGVmaW5lZE9wZXJhbmRTcGFucykgY29uc3QKIHsKKyAgICBj
b25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0
VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7CiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVC
bG9jayA9IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CiAKICAgICB1bnNpZ25lZCBudW1W
YXJpYWJsZXM7CisgICAgdW5zaWduZWQgbnVtVG1wczsKICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIGludmFsaWRJbmRleCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KTsKICAgICB1bnNpZ25lZCBmaXJzdFVuZGVmaW5lZCA9IGludmFsaWRJbmRleDsKICAgICBib29s
IGZpcnN0VW5kZWZpbmVkSXNBcmd1bWVudCA9IGZhbHNlOwpAQCAtMTMxLDM3ICsxMzMsNDIgQEAg
dW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgYXV0byBmbHVz
aFVuZGVmaW5lZE9wZXJhbmRTcGFuID0gWyZdICh1bnNpZ25lZCBpKSB7CiAgICAgICAgIGlmIChm
aXJzdFVuZGVmaW5lZCA9PSBpbnZhbGlkSW5kZXgpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGludCBmaXJzdE9mZnNldCA9IHZhbHVlUmVjb3Zlcmllcy52aXJ0dWFsUmVnaXN0ZXJGb3JJ
bmRleChmaXJzdFVuZGVmaW5lZCkub2Zmc2V0KCk7Ci0gICAgICAgIGludCBsYXN0T2Zmc2V0ID0g
dmFsdWVSZWNvdmVyaWVzLnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGkgLSAxKS5vZmZzZXQoKTsK
KyAgICAgICAgaW50IGZpcnN0T2Zmc2V0ID0gdmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRl
eChmaXJzdFVuZGVmaW5lZCkudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7CisgICAgICAgIGlu
dCBsYXN0T2Zmc2V0ID0gdmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpIC0gMSkudmly
dHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7CiAgICAgICAgIGludCBtaW5PZmZzZXQgPSBzdGQ6Om1p
bihmaXJzdE9mZnNldCwgbGFzdE9mZnNldCk7CiAgICAgICAgIHVuZGVmaW5lZE9wZXJhbmRTcGFu
cy0+YXBwZW5kKHsgZmlyc3RVbmRlZmluZWQsIG1pbk9mZnNldCwgaSAtIGZpcnN0VW5kZWZpbmVk
IH0pOwogICAgICAgICBmaXJzdFVuZGVmaW5lZCA9IGludmFsaWRJbmRleDsKICAgICB9OwogICAg
IGF1dG8gcmVjb3JkVW5kZWZpbmVkT3BlcmFuZCA9IFsmXSAodW5zaWduZWQgaSkgewogICAgICAg
ICAvLyBXZSB3YW50IHRvIHNlcGFyYXRlIHRoZSBzcGFuIG9mIGFyZ3VtZW50cyBmcm9tIHRoZSBz
cGFuIG9mIGxvY2FscyBldmVuIGlmIHRoZXkgaGF2ZSBhZGphY2VudCBvcGVyYW5kcyBpbmRleGVz
LgotICAgICAgICBpZiAoZmlyc3RVbmRlZmluZWQgIT0gaW52YWxpZEluZGV4ICYmIGZpcnN0VW5k
ZWZpbmVkSXNBcmd1bWVudCAhPSB2YWx1ZVJlY292ZXJpZXMuaXNBcmd1bWVudChpKSkKKyAgICAg
ICAgaWYgKGZpcnN0VW5kZWZpbmVkICE9IGludmFsaWRJbmRleCAmJiBmaXJzdFVuZGVmaW5lZElz
QXJndW1lbnQgIT0gdmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKS5pc0FyZ3VtZW50
KCkpCiAgICAgICAgICAgICBmbHVzaFVuZGVmaW5lZE9wZXJhbmRTcGFuKGkpOwogCiAgICAgICAg
IGlmIChmaXJzdFVuZGVmaW5lZCA9PSBpbnZhbGlkSW5kZXgpIHsKICAgICAgICAgICAgIGZpcnN0
VW5kZWZpbmVkID0gaTsKLSAgICAgICAgICAgIGZpcnN0VW5kZWZpbmVkSXNBcmd1bWVudCA9IHZh
bHVlUmVjb3Zlcmllcy5pc0FyZ3VtZW50KGkpOworICAgICAgICAgICAgZmlyc3RVbmRlZmluZWRJ
c0FyZ3VtZW50ID0gdmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKS5pc0FyZ3VtZW50
KCk7CiAgICAgICAgIH0KICAgICB9OwogCiAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQotICAg
ICAgICBudW1WYXJpYWJsZXMgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShp
bmxpbmVDYWxsRnJhbWUpLT5udW1DYWxsZWVMb2NhbHMoKSArIFZpcnR1YWxSZWdpc3Rlcihpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkgKyAxOwotICAgIGVsc2UKKyAgICBp
ZiAoaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFz
ZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAg
ICAgbnVtVmFyaWFibGVzID0gY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIFZpcnR1YWxS
ZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkgKyAxOworICAg
ICAgICBudW1UbXBzID0gY29kZUJsb2NrLT5udW1UbXBzKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnRt
cE9mZnNldDsKKyAgICB9IGVsc2UgewogICAgICAgICBudW1WYXJpYWJsZXMgPSBiYXNlbGluZUNv
ZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCk7CisgICAgICAgIG51bVRtcHMgPSBiYXNlbGluZUNv
ZGVCbG9jay0+bnVtVG1wcygpOworICAgIH0KICAgICAKICAgICAvLyBDcmF6eSBzcGVjaWFsIGNh
c2U6IGlmIHdlJ3JlIGF0IGluZGV4ID09IDAgdGhlbiB0aGlzIG11c3QgYmUgYW4gYXJndW1lbnQg
Y2hlY2sKICAgICAvLyBmYWlsdXJlLCBpbiB3aGljaCBjYXNlIGFsbCB2YXJpYWJsZXMgYXJlIGFs
cmVhZHkgc2V0IHVwLiBUaGUgcmVjb3ZlcmllcyBzaG91bGQKICAgICAvLyByZWZsZWN0IHRoaXMu
CiAgICAgaWYgKCFpbmRleCkgewotICAgICAgICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxW
YWx1ZVJlY292ZXJ5Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzKTsK
KyAgICAgICAgLy8gV2UgZG9uJ3QgaW5jbHVkZSB0bXBzIGhlcmUgYmVjYXVzZSB0aGV5IGNhbid0
IGJlIHVzZWQgeWV0LgorICAgICAgICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxWYWx1ZVJl
Y292ZXJ5Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzLCAwKTsKICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZVJlY292ZXJpZXMuc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9IFZhbHVlUmVjb3Zlcnk6OmRpc3Bs
YWNlZEluSlNTdGFjaygKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIodmFsdWVSZWNv
dmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKSksIERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICAg
ICAgdmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKS52aXJ0dWFsUmVnaXN0ZXIoKSwg
RGF0YUZvcm1hdEpTKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVtVmFyaWFibGVzOwog
ICAgIH0KQEAgLTE3MiwxMiArMTc5LDEzIEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06
OnJlY29uc3RydWN0KAogICAgICAgICBzdGFydEluZGV4LS07CiAgICAgCiAgICAgLy8gU3RlcCAy
OiBDcmVhdGUgYSBtb2NrLXVwIG9mIHRoZSBERkcncyBzdGF0ZSBhbmQgZXhlY3V0ZSB0aGUgZXZl
bnRzLgotICAgIE9wZXJhbmRzPFZhbHVlU291cmNlPiBvcGVyYW5kU291cmNlcyhjb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzKTsKKyAgICBPcGVyYW5kczxWYWx1ZVNvdXJj
ZT4gb3BlcmFuZFNvdXJjZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcmlhYmxl
cywgbnVtVG1wcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gb3BlcmFuZFNvdXJjZXMuc2l6ZSgp
OyBpLS07KQogICAgICAgICBvcGVyYW5kU291cmNlc1tpXSA9IFZhbHVlU291cmNlKFNvdXJjZUlz
RGVhZCk7CiAgICAgSGFzaE1hcDxNaW5pZmllZElELCBNaW5pZmllZEdlbmVyYXRpb25JbmZvPiBn
ZW5lcmF0aW9uSW5mb3M7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRJbmRleDsgaSA8IGlu
ZGV4OyArK2kpIHsKICAgICAgICAgY29uc3QgVmFyaWFibGVFdmVudCYgZXZlbnQgPSBhdChpKTsK
KyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlByb2Nlc3NpbmcgZXZlbnQgIiwgZXZlbnQp
OwogICAgICAgICBzd2l0Y2ggKGV2ZW50LmtpbmQoKSkgewogICAgICAgICBjYXNlIFJlc2V0Ogog
ICAgICAgICAgICAgLy8gbm90aGluZyB0byBkby4KQEAgLTE5OSwyMSArMjA3LDIzIEBAIHVuc2ln
bmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBNb3ZIaW50RXZlbnQ6Ci0gICAgICAgICAgICBpZiAo
b3BlcmFuZFNvdXJjZXMuaGFzT3BlcmFuZChldmVudC5ieXRlY29kZVJlZ2lzdGVyKCkpKQotICAg
ICAgICAgICAgICAgIG9wZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQoZXZlbnQuYnl0ZWNvZGVSZWdp
c3RlcigpLCBWYWx1ZVNvdXJjZShldmVudC5pZCgpKSk7CisgICAgICAgICAgICBpZiAob3BlcmFu
ZFNvdXJjZXMuaGFzT3BlcmFuZChldmVudC5vcGVyYW5kKCkpKQorICAgICAgICAgICAgICAgIG9w
ZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQoZXZlbnQub3BlcmFuZCgpLCBWYWx1ZVNvdXJjZShldmVu
dC5pZCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTZXRMb2NhbEV2ZW50
OgotICAgICAgICAgICAgaWYgKG9wZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQuYnl0ZWNv
ZGVSZWdpc3RlcigpKSkKLSAgICAgICAgICAgICAgICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5k
KGV2ZW50LmJ5dGVjb2RlUmVnaXN0ZXIoKSwgVmFsdWVTb3VyY2U6OmZvckRhdGFGb3JtYXQoZXZl
bnQubWFjaGluZVJlZ2lzdGVyKCksIGV2ZW50LmRhdGFGb3JtYXQoKSkpOworICAgICAgICAgICAg
aWYgKG9wZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQub3BlcmFuZCgpKSkKKyAgICAgICAg
ICAgICAgICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSwgVmFsdWVT
b3VyY2U6OmZvckRhdGFGb3JtYXQoZXZlbnQubWFjaGluZVJlZ2lzdGVyKCksIGV2ZW50LmRhdGFG
b3JtYXQoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICB9CisKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiT3BlcmFuZCBzb3Vy
Y2VzOiAiLCBvcGVyYW5kU291cmNlcyk7CiAgICAgCiAgICAgLy8gU3RlcCAzOiBDb21wdXRlIHZh
bHVlIHJlY292ZXJpZXMhCi0gICAgdmFsdWVSZWNvdmVyaWVzID0gT3BlcmFuZHM8VmFsdWVSZWNv
dmVyeT4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcmlhYmxlcyk7CisgICAgdmFs
dWVSZWNvdmVyaWVzID0gT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4oT3BlcmFuZHNMaWtlLCBvcGVy
YW5kU291cmNlcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9wZXJhbmRTb3VyY2Vz
LnNpemUoKTsgKytpKSB7CiAgICAgICAgIFZhbHVlU291cmNlJiBzb3VyY2UgPSBvcGVyYW5kU291
cmNlc1tpXTsKICAgICAgICAgaWYgKHNvdXJjZS5pc1RyaXZpYWxseVJlY292ZXJhYmxlKCkpIHsK
QEAgLTIzMSw2ICsyNDEsNyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0
cnVjdCgKICAgICAgICAgTWluaWZpZWROb2RlKiBub2RlID0gZ3JhcGguYXQoc291cmNlLmlkKCkp
OwogICAgICAgICBNaW5pZmllZEdlbmVyYXRpb25JbmZvIGluZm8gPSBnZW5lcmF0aW9uSW5mb3Mu
Z2V0KHNvdXJjZS5pZCgpKTsKICAgICAgICAgaWYgKCFpbmZvLmFsaXZlKSB7CisgICAgICAgICAg
ICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiT3BlcmFuZCAiLCB2YWx1ZVJlY292ZXJpZXMub3BlcmFu
ZEZvckluZGV4KGkpLCAiIGlzIGRlYWQuIik7CiAgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXNb
aV0gPSBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAg
IGlmIChzdHlsZSA9PSBSZWNvbnN0cnVjdGlvblN0eWxlOjpTZXBhcmF0ZWQpCiAgICAgICAgICAg
ICAgICAgcmVjb3JkVW5kZWZpbmVkT3BlcmFuZChpKTsKQEAgLTIzOCw2ICsyNDksNyBAQCB1bnNp
Z25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgfQogCiAgICAg
ICAgIGlmICh0cnlUb1NldENvbnN0YW50UmVjb3ZlcnkodmFsdWVSZWNvdmVyaWVzW2ldLCBub2Rl
KSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk9wZXJhbmQgIiwgdmFsdWVS
ZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKSwgIiBpcyBjb25zdGFudC4iKTsKICAgICAgICAg
ICAgIGlmIChzdHlsZSA9PSBSZWNvbnN0cnVjdGlvblN0eWxlOjpTZXBhcmF0ZWQpIHsKICAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSAmJiBub2RlLT5jb25zdGFudCgpID09
IGpzVW5kZWZpbmVkKCkpCiAgICAgICAgICAgICAgICAgICAgIHJlY29yZFVuZGVmaW5lZE9wZXJh
bmQoaSk7CkBAIC0yNjcsNyArMjc5LDcgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6
cmVjb25zdHJ1Y3QoCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZhbHVlUmVjb3Zlcmll
c1tpXSA9Ci0gICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soc3Rh
dGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihpbmZvLnUudmlydHVhbFJlZyksIGluZm8uZm9ybWF0
KTsKKyAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjayhpbmZvLnUu
b3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSwgaW5mby5mb3JtYXQpOwogICAgIH0KICAgICBpZiAo
c3R5bGUgPT0gUmVjb25zdHJ1Y3Rpb25TdHlsZTo6U2VwYXJhdGVkKQogICAgICAgICBmbHVzaFVu
ZGVmaW5lZE9wZXJhbmRTcGFuKG9wZXJhbmRTb3VyY2VzLnNpemUoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oCmluZGV4IDAxNTcz
MDA3ZWRkZGQ3MGYzMWQxN2FjMGQ5OWY3OGViZjVlYTZlYmMuLmU5ZTQzYWJmZWM0ODVmZWM3ZTY2
MzE1MWMxYzIyZWM1MTg5NzQxM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oCkBAIC00Miw5ICs0MiwxMiBAQCBzdHJ1Y3QgVW5k
ZWZpbmVkT3BlcmFuZFNwYW4gewogfTsKIAogY2xhc3MgVmFyaWFibGVFdmVudFN0cmVhbSA6IHB1
YmxpYyBWZWN0b3I8VmFyaWFibGVFdmVudD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2
ZXJib3NlID0gZmFsc2U7CiBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmRBbmRMb2coY29uc3QgVmFy
aWFibGVFdmVudCYgZXZlbnQpCiAgICAgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgIGxvZ0V2ZW50KGV2ZW50KTsKICAgICAgICAgYXBwZW5kKGV2ZW50KTsKICAgICB9CiAgICAg
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKaW5kZXgg
NGU3YTNjMTc0OWIwYWVlNWFhMDYyNDE4ZDUyOWNmM2MzMDdmYTg2ZC4uYjk1M2NmZWM3MTVjNmFh
ZGQyYjYyMTM4MWRhMTVhYTExYzJmY2M1MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ2FwYWJpbGl0aWVzLmNwcApAQCAtMTkzLDYgKzE5Myw3IEBAIGlubGluZSBDYXBhYmls
aXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgVGFpbENhbGxGb3J3YXJk
VmFyYXJnczoKICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgog
ICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBWYXJhcmdzTGVuZ3Ro
OgogICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CiAgICAgY2Fz
ZSBCcmFuY2g6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9T
UkVudHJ5SklUQ29kZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVu
dHJ5SklUQ29kZS5jcHAKaW5kZXggMzA4MGRjMzQ1MDljNzMzMzI0YjgxNDNkMmE5NTRmMDhlZGFm
MTNmYi4uYzAwNGZhY2NjMWFkMDVkMzZjZWRiZWRmOTY3ODJhYWI3ZGNiOTgzMyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcApA
QCAtMzEsOCArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiBGb3JP
U1JFbnRyeUpJVENvZGU6OkZvck9TUkVudHJ5SklUQ29kZSgpCi0gICAgOiBtX2J5dGVjb2RlSW5k
ZXgoVUlOVF9NQVgpCi0gICAgLCBtX2VudHJ5RmFpbHVyZUNvdW50KDApCisgICAgOiBtX2VudHJ5
RmFpbHVyZUNvdW50KDApCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAppbmRleCA0ZjJjYzgyODhkOTMwZTNkNWViY2E4MjA1MDdjM2EzZGU5
N2EwNjFkLi41ODM5MGQzNjk4MjExZjMyNGNiZDJjOTQyYmQwYjFiMjAwNjI2M2EzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0yMDksNyAr
MjA5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmNsZWFyU3RhY2tG
cmFtZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50
ZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDAsIGNvZGUuZnJhbWVTaXplKCkpOwogCiAgICAgICAg
ICAgICAgICAgICAgIGppdC5lbWl0U2F2ZShjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0
TGlzdCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRl
cihjb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAgICAgICAgICAg
ICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoY29kZUJsb2NrLCBWaXJ0dWFsUmVnaXN0
ZXIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7CiAgICAgICAgICAgICAgICAgfSk7CiAKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgY2F0Y2hFbnRyeXBvaW50SW5kZXggOiBtX2dyYXBoLm1f
ZW50cnlwb2ludEluZGV4VG9DYXRjaEJ5dGVjb2RlSW5kZXgua2V5cygpKSB7CkBAIC0yNzUsNyAr
Mjc1LDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUg
Q29kZUJsb2NrIHRvIGhhdmUgYSB3ZWFrIHBvaW50ZXIgdG8gaXRzZWxmIGJlY2F1c2UKICAgICAg
ICAgLy8gdGhhdCB3b3VsZCBjYXVzZSBpdCB0byBhbHdheXMgZ2V0IGNvbGxlY3RlZC4KLSAgICAg
ICAgbV9vdXQuc3RvcmVQdHIobV9vdXQuY29uc3RJbnRQdHIoYml0d2lzZV9jYXN0PGludHB0cl90
Pihjb2RlQmxvY2soKSkpLCBhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOwor
ICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5jb25zdEludFB0cihiaXR3aXNlX2Nhc3Q8aW50
cHRyX3Q+KGNvZGVCbG9jaygpKSksIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jaykpKTsKIAogICAgICAgICAvLyBTdGFjayBPdmVyZmxvdyBDaGVjay4K
ICAgICAgICAgdW5zaWduZWQgZXhpdEZyYW1lU2l6ZSA9IG1fZ3JhcGgucmVxdWlyZWRSZWdpc3Rl
ckNvdW50Rm9yRXhpdCgpICogc2l6ZW9mKFJlZ2lzdGVyKTsKQEAgLTM1NiwxNSArMzU2LDE1IEBA
IHB1YmxpYzoKIAogICAgICAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgogICAgICAgICAgICAg
YXZhaWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgp
Lm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1l
dGVycygpLCAwKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3Bl
cmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwLCAwKTsK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJz
KCk7IGktLTspIHsKICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5h
cmd1bWVudChpKSA9Ci0gICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQo
Rmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKSk7CisgICAgICAg
ICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSkpOwogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZSBwcm9maWxlKCZtX2dyYXBoLm1fcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1l
bnQoaSkpOwotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoaSk7CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSk7CiAg
ICAgICAgICAgICAgICAgTFZhbHVlIGpzVmFsdWUgPSBtX291dC5sb2FkNjQoYWRkcmVzc0Zvcihv
cGVyYW5kKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc3dpdGNoIChtX2dy
YXBoLm1fYXJndW1lbnRGb3JtYXRzWzBdW2ldKSB7CkBAIC0xMjkxLDYgKzEyOTEsOSBAQCBwcml2
YXRlOgogICAgICAgICBjYXNlIENhbGxFdmFsOgogICAgICAgICAgICAgY29tcGlsZUNhbGxFdmFs
KCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgorICAg
ICAgICAgICAgY29tcGlsZVZhcmFyZ3NMZW5ndGgoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICAgICAgY29tcGlsZUxvYWRWYXJhcmdzKCk7
CiAgICAgICAgICAgICBicmVhazsKQEAgLTE5NjcsNyArMTk3MCw3IEBAIHByaXZhdGU6CiAgICAg
ewogICAgICAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpT
VmFsdWUqPigKICAgICAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+ZnRsRm9yT1NSRW50cnko
KS0+ZW50cnlCdWZmZXIoKS0+ZGF0YUJ1ZmZlcigpKTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291
dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUoYnVmZmVyICsgbV9ub2RlLT51bmxpbmtlZExvY2FsKCku
dG9Mb2NhbCgpKSkpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChtX291dC5hYnNv
bHV0ZShidWZmZXIgKyBtX25vZGUtPnVubGlua2VkT3BlcmFuZCgpLnZpcnR1YWxSZWdpc3Rlcigp
LnRvTG9jYWwoKSkpKTsKICAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVFeHRyYWN0Q2F0Y2hMb2Nh
bCgpCkBAIC0xOTg2LDcgKzE5ODksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZUdldFN0
YWNrKCkKICAgICB7CiAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fbm9kZS0+c3Rh
Y2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5v
cGVyYW5kKGRhdGEtPmxvY2FsKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0
YXRlLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCk7CiAgICAgICAgIAogICAgICAgICBERkdfQVNTRVJU
KG1fZ3JhcGgsIG1fbm9kZSwgaXNDb25jcmV0ZShkYXRhLT5mb3JtYXQpLCBkYXRhLT5mb3JtYXQp
OwogICAgICAgICAKQEAgLTQ3NDgsNyArNDc1MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBp
ZiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+IDEpCiAgICAg
ICAgICAgICAgICAgYmFzZSA9IGFkZHJlc3NGb3IoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNX
aXRoRml4dXBbMF0udmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIGJhc2UgPSBhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDApKTsKKyAg
ICAgICAgICAgIGJhc2UgPSBhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5j
bHVkaW5nVGhpcygwKSk7CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgcmVzdWx0OwogICAgICAg
ICBpZiAoYmFzZSkgewpAQCAtNzk4MSwxMyArNzk4NCwxMyBAQCBwcml2YXRlOgogICAgIAogICAg
IHZvaWQgY29tcGlsZUdldENhbGxlZSgpCiAgICAgewotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0
LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CisgICAgICAgIHNl
dEpTVmFsdWUobV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJh
bWVTbG90OjpjYWxsZWUpKSkpOwogICAgIH0KIAogICAgIHZvaWQgY29tcGlsZVNldENhbGxlZSgp
CiAgICAgewogICAgICAgICBhdXRvIGNhbGxlZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7
Ci0gICAgICAgIG1fb3V0LnN0b3JlUHRyKGNhbGxlZSwgcGF5bG9hZEZvcihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpKTsKKyAgICAgICAgbV9vdXQuc3RvcmVQdHIoY2FsbGVlLCBwYXlsb2FkRm9yKFZp
cnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAgICAgfQogICAgIAogICAg
IHZvaWQgY29tcGlsZUdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKQEAgLTgwMDIsNyAr
ODAwNSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNvbXBpbGVTZXRBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcygpCiAgICAgewotICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50
MzIobV9ub2RlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSwgcGF5bG9hZEZvcihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworICAgICAgICBtX291dC5z
dG9yZTMyKG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpKSwgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdldFNj
b3BlKCkKQEAgLTg1MjYsNyArODUyOSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGFkZEFyZ3VtZW50
KGpzQ2FsbGVlLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwgMCk7CiAg
ICAgICAgIGFkZEFyZ3VtZW50KG1fb3V0LmNvbnN0SW50MzIobnVtQXJncyksIFZpcnR1YWxSZWdp
c3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIFBheWxvYWRP
ZmZzZXQpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQXJnczsgKytpKQot
ICAgICAgICAgICAgYWRkQXJndW1lbnQobG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEgKyBpKSksIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpLCAwKTsKKyAgICAgICAg
ICAgIGFkZEFyZ3VtZW50KGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxICsg
aSkpLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSksIDApOwogCiAg
ICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNocG9pbnQoSW50
NjQpOwogICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRWZWN0b3IoYXJndW1lbnRzKTsKQEAgLTg2
MzYsOSArODYzOSw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBhZGRBcmd1bWVudChqc0NhbGxl
ZSwgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIDApOwogICAgICAgICAg
ICAgYWRkQXJndW1lbnQobV9vdXQuY29uc3RJbnQzMihudW1QYXNzZWRBcmdzKSwgVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgUGF5bG9h
ZE9mZnNldCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2Vk
QXJnczsgKytpKQotICAgICAgICAgICAgICAgIGFkZEFyZ3VtZW50KGxvd0pTVmFsdWUobV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxICsgaSkpLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChp
KSwgMCk7CisgICAgICAgICAgICAgICAgYWRkQXJndW1lbnQobG93SlNWYWx1ZShtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEgKyBpKSksIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVk
aW5nVGhpcyhpKSwgMCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1QYXNzZWRB
cmdzOyBpIDwgbnVtQWxsb2NhdGVkQXJnczsgKytpKQotICAgICAgICAgICAgICAgIGFkZEFyZ3Vt
ZW50KG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSksIDApOworICAgICAgICAgICAgICAgIGFkZEFyZ3Vt
ZW50KG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpLCAwKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdz
OyArK2kpCiAgICAgICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChDb25zdHJhaW5lZFZhbHVl
KGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxICsgaSkpLCBWYWx1ZVJlcDo6
V2FybUFueSkpOwpAQCAtOTUzNCw3ICs5NTM3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgYWRkQXJn
dW1lbnQoanNDYWxsZWUsIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpLCAw
KTsKICAgICAgICAgYWRkQXJndW1lbnQobV9vdXQuY29uc3RJbnQzMihudW1BcmdzKSwgVmlydHVh
bFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgUGF5
bG9hZE9mZnNldCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1BcmdzOyAr
K2kpCi0gICAgICAgICAgICBhZGRBcmd1bWVudChsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSArIGkpKSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSksIDApOworICAg
ICAgICAgICAgYWRkQXJndW1lbnQobG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDEgKyBpKSksIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSwgMCk7
CiAgICAgICAgIAogICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5w
YXRjaHBvaW50KEludDY0KTsKICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kVmVjdG9yKGFyZ3Vt
ZW50cyk7CkBAIC05NTk3LDUxICs5NjAwLDUxIEBAIHByaXZhdGU6CiAgICAgICAgIHNldEpTVmFs
dWUocGF0Y2hwb2ludCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29tcGlsZUxvYWRWYXJhcmdz
KCkKKyAgICB2b2lkIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKCkKICAgICB7CiAgICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUt
Pm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9k
ZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgIExWYWx1ZSBqc0FyZ3VtZW50cyA9IGxvd0pT
VmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIAorICAgICAgICBMVmFsdWUganNBcmd1
bWVudHMgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7CisKICAgICAgICAg
TFZhbHVlIGxlbmd0aCA9IHZtQ2FsbCgKICAgICAgICAgICAgIEludDMyLCBvcGVyYXRpb25TaXpl
T2ZWYXJhcmdzLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBqc0FyZ3VtZW50cywKICAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0KSk7Ci0gICAgICAgIAotICAgICAg
ICAvLyBGSVhNRTogVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSB3aWxsIGNhbGwgYW4gZWZmZWN0
ZnVsIGxlbmd0aCBwcm9wZXJ0eSB0d2ljZS4gVGhpcyBpcyBzYWZlCi0gICAgICAgIC8vIGZyb20g
dGhlIHN0YW5kcG9pbnQgb2YgdGhlIFZNJ3MgaW50ZWdyaXR5LCBidXQgaXQncyBzdWJ0bHkgd3Jv
bmcgZnJvbSBhIHNwZWMgY29tcGxpYW5jZQotICAgICAgICAvLyBzdGFuZHBvaW50LiBUaGUgYmVz
dCBzb2x1dGlvbiB3b3VsZCBiZSBvbmUgd2hlcmUgd2UgY2FuIGV4aXQgKmludG8qIHRoZSBvcF9j
YWxsX3ZhcmFyZ3MgcmlnaHQKLSAgICAgICAgLy8gcGFzdCB0aGUgc2l6aW5nLgotICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNDQ4Ci0gICAgICAg
IAorCiAgICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0
aCwgbV9vdXQuaW50MzJPbmUpOwogCi0gICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgIFZh
cmFyZ3NPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLAotICAgICAgICAgICAgbV9vdXQuYWJv
dmUobGVuZ3RoLCBsZW5ndGhJbmNsdWRpbmdUaGlzKSk7CisgICAgICAgIHNldEludDMyKGxlbmd0
aEluY2x1ZGluZ1RoaXMpOworICAgIH0KIAorICAgIHZvaWQgY29tcGlsZUxvYWRWYXJhcmdzKCkK
KyAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIExvYWRWYXJh
cmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgIExWYWx1
ZSBqc0FyZ3VtZW50cyA9IGxvd0pTVmFsdWUobV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpKTsKKyAg
ICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgCiAgICAgICAgIHNwZWN1bGF0ZSgKICAgICAgICAgICAgIFZhcmFyZ3NP
dmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLAotICAgICAgICAgICAgbV9vdXQuYWJvdmUobGVu
Z3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5saW1pdCkpKTsKLSAgICAg
ICAgCisgICAgICAgICAgICBtX291dC5iaXRPcihtX291dC5pc1plcm8zMihsZW5ndGhJbmNsdWRp
bmdUaGlzKSwgbV9vdXQuYWJvdmUobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJbnQz
MihkYXRhLT5saW1pdCkpKSk7IAorCiAgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoSW5jbHVk
aW5nVGhpcywgcGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKICAgICAgICAgCi0gICAg
ICAgIC8vIEZJWE1FOiBUaGlzIGNvbXB1dGF0aW9uIGlzIHJhdGhlciBzaWxseS4gSWYgb3BlcmF0
aW9uTGFvZFZhcmFyZ3MganVzdCB0b29rIGEgcG9pbnRlciBpbnN0ZWFkCisgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGNvbXB1dGF0aW9uIGlzIHJhdGhlciBzaWxseS4gSWYgb3BlcmF0aW9uTG9hZFZh
cmFyZ3MganVzdCB0b29rIGEgcG9pbnRlciBpbnN0ZWFkCiAgICAgICAgIC8vIG9mIGEgVmlydHVh
bFJlZ2lzdGVyLCB3ZSB3b3VsZG4ndCBoYXZlIHRvIGRvIHRoaXMuCiAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE2NjAKICAgICAgICAgTFZhbHVl
IG1hY2hpbmVTdGFydCA9IG1fb3V0LmxTaHIoCi0gICAgICAgICAgICBtX291dC5zdWIoYWRkcmVz
c0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCkpLnZhbHVlKCksIG1fY2FsbEZyYW1lKSwK
KyAgICAgICAgICAgIG1fb3V0LnN1YihhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFydCkudmFs
dWUoKSwgbV9jYWxsRnJhbWUpLAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoMykpOwog
ICAgICAgICAKICAgICAgICAgdm1DYWxsKAogICAgICAgICAgICAgVm9pZCwgb3BlcmF0aW9uTG9h
ZFZhcmFyZ3MsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksCiAgICAgICAgICAgICBtX291dC5j
YXN0VG9JbnQzMihtYWNoaW5lU3RhcnQpLCBqc0FyZ3VtZW50cywgbV9vdXQuY29uc3RJbnQzMihk
YXRhLT5vZmZzZXQpLAotICAgICAgICAgICAgbGVuZ3RoLCBtX291dC5jb25zdEludDMyKGRhdGEt
Pm1hbmRhdG9yeU1pbmltdW0pKTsKKyAgICAgICAgICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1f
b3V0LmNvbnN0SW50MzIoZGF0YS0+bWFuZGF0b3J5TWluaW11bSkpOwogICAgIH0KICAgICAKICAg
ICB2b2lkIGNvbXBpbGVGb3J3YXJkVmFyYXJncygpCiAgICAgewotICAgICAgICBpZiAobV9ub2Rl
LT5jaGlsZDEoKSkgewotICAgICAgICAgICAgTm9kZSogYXJndW1lbnRzID0gbV9ub2RlLT5jaGls
ZDEoKS5ub2RlKCk7CisgICAgICAgIGlmIChtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkpIHsKKyAg
ICAgICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS5ub2Rl
KCk7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdp
dGhTcHJlYWQgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZlciB8fCBh
cmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCkgewogICAgICAgICAgICAgICAgIGNvbXBp
bGVGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBA
IC05NjUwLDUwICs5NjUzLDIxIEBAIHByaXZhdGU6CiAKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRh
KiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKICAgICAgICAgSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpKQotICAg
ICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFu
dGljLmlubGluZUNhbGxGcmFtZSgpOworICAgICAgICBpZiAobV9ub2RlLT5hcmd1bWVudHNDaGls
ZCgpKQorICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5hcmd1bWVudHNDaGls
ZCgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZSgpOwogCi0gICAgICAgIExWYWx1ZSBsZW5ndGggPSBudWxscHRyOyAKLSAgICAg
ICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBudWxscHRyOwotICAgICAgICBBcmd1bWVu
dHNMZW5ndGggYXJndW1lbnRzTGVuZ3RoID0gZ2V0QXJndW1lbnRzTGVuZ3RoKGlubGluZUNhbGxG
cmFtZSk7Ci0gICAgICAgIGlmIChhcmd1bWVudHNMZW5ndGguaXNLbm93bikgewotICAgICAgICAg
ICAgdW5zaWduZWQga25vd25MZW5ndGggPSBhcmd1bWVudHNMZW5ndGgua25vd247Ci0gICAgICAg
ICAgICBpZiAoa25vd25MZW5ndGggPj0gZGF0YS0+b2Zmc2V0KQotICAgICAgICAgICAgICAgIGtu
b3duTGVuZ3RoID0ga25vd25MZW5ndGggLSBkYXRhLT5vZmZzZXQ7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAga25vd25MZW5ndGggPSAwOwotICAgICAgICAgICAgbGVuZ3RoID0g
bV9vdXQuY29uc3RJbnQzMihrbm93bkxlbmd0aCk7Ci0gICAgICAgICAgICBsZW5ndGhJbmNsdWRp
bmdUaGlzID0gbV9vdXQuY29uc3RJbnQzMihrbm93bkxlbmd0aCArIDEpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBwZXJmb3JtIHRoZSBzYW1lIGxvZ2ljYWwg
b3BlcmF0aW9uIGFzIHRoZSBjb2RlIGFib3ZlLCBidXQgdGhyb3VnaCBkeW5hbWljIG9wZXJhdGlv
bnMuCi0gICAgICAgICAgICBpZiAoIWRhdGEtPm9mZnNldCkKLSAgICAgICAgICAgICAgICBsZW5n
dGggPSBhcmd1bWVudHNMZW5ndGgudmFsdWU7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBpc0xhcmdlciA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKLQot
ICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0
ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50MzIoMCkpOwotICAgICAgICAgICAgICAgIG1f
b3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmUoYXJndW1lbnRzTGVu
Z3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCkpLCB1bnN1cmUoaXNMYXJn
ZXIpLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0xhcmdlciwgY29udGludWF0aW9uKTsKLSAgICAg
ICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBsYXJnZXJMZW5ndGhSZXN1bHQgPSBtX291dC5hbmNo
b3IobV9vdXQuc3ViKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihkYXRh
LT5vZmZzZXQpKSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwot
Ci0gICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7
Ci0gICAgICAgICAgICAgICAgbGVuZ3RoID0gbV9vdXQucGhpKEludDMyLCBzbWFsbGVyT3JFcXVh
bExlbmd0aFJlc3VsdCwgbGFyZ2VyTGVuZ3RoUmVzdWx0KTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5hZGQobGVuZ3RoLCBtX291dC5jb25z
dEludDMyKDEpKTsKLSAgICAgICAgfQorICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCA9IGRhdGEtPm9mZnNldDsKKyAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1Ro
aXMgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKIAorICAgICAgICBMVmFsdWUgbGVuZ3Ro
ID0gbV9vdXQuc3ViKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmludDMyT25lKTsKICAgICAg
ICAgc3BlY3VsYXRlKAogICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBub1ZhbHVlKCksIG51
bGxwdHIsCiAgICAgICAgICAgICBtX291dC5hYm92ZShsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291
dC5jb25zdEludDMyKGRhdGEtPmxpbWl0KSkpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuc3Rv
cmUzMihsZW5ndGhJbmNsdWRpbmdUaGlzLCBwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3VudCkp
OwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBk
YXRhLT5vZmZzZXQ7CiAgICAgICAgIExWYWx1ZSBzb3VyY2VTdGFydCA9IGdldEFyZ3VtZW50c1N0
YXJ0KGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApOwogICAgICAgICBM
VmFsdWUgdGFyZ2V0U3RhcnQgPSBhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFydCkudmFsdWUo
KTsKIApAQCAtOTc1Miw2NSArOTcyNiwyMCBAQCBwcml2YXRlOgogICAgICAgICAvLyBXZSBuZWVk
IHRvIHBlcmZvcm0gdGhlIHNhbWUgbG9naWNhbCBvcGVyYXRpb24gYXMgdGhlIGNvZGUgYWJvdmUs
IGJ1dCB0aHJvdWdoIGR5bmFtaWMgb3BlcmF0aW9ucy4KICAgICAgICAgaWYgKCFudW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCkKICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudHNMZW5ndGgudmFsdWU7
CisgICAgICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VSVChudW1iZXJPZkFyZ3VtZW50c1RvU2tp
cCA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihJTlQzMl9NSU4pKTsKIAotICAgICAgICBMQmFzaWNC
bG9jayBpc0xhcmdlciA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0KLSAgICAgICAgVmFsdWVGcm9tQmxvY2sg
c21hbGxlck9yRXF1YWxMZW5ndGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQz
MigwKSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFy
Z3VtZW50c0xlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1Rv
U2tpcCkpLCB1bnN1cmUoaXNMYXJnZXIpLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNMYXJnZXIsIGNvbnRpbnVh
dGlvbik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGxhcmdlckxlbmd0aFJlc3VsdCA9IG1fb3V0
LmFuY2hvcihtX291dC5zdWIoYXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMy
KG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVh
dGlvbik7CisgICAgICAgIExWYWx1ZSBmaXhlZExlbmd0aCA9IG1fb3V0LnN1Yihhcmd1bWVudHNM
ZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIobnVtYmVyT2ZBcmd1bWVudHNUb1NraXApKTsK
IAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAg
ICAgcmV0dXJuIG1fb3V0LnBoaShJbnQzMiwgc21hbGxlck9yRXF1YWxMZW5ndGhSZXN1bHQsIGxh
cmdlckxlbmd0aFJlc3VsdCk7CisgICAgICAgIHJldHVybiBtX291dC5zZWxlY3QobV9vdXQuZ3Jl
YXRlclRoYW5PckVxdWFsKGZpeGVkTGVuZ3RoLCBtX291dC5pbnQzMlplcm8pLCBmaXhlZExlbmd0
aCwgbV9vdXQuaW50MzJaZXJvLCBTZWxlY3RQcmVkaWN0YWJpbGl0eTo6UHJlZGljdGFibGUpOwog
ICAgIH0KIAogICAgIHZvaWQgY29tcGlsZUZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZCgpCiAgICAg
ewotICAgICAgICBIYXNoTWFwPElubGluZUNhbGxGcmFtZSosIExWYWx1ZSwgV1RGOjpEZWZhdWx0
SGFzaDxJbmxpbmVDYWxsRnJhbWUqPjo6SGFzaCwgV1RGOjpOdWxsYWJsZUhhc2hUcmFpdHM8SW5s
aW5lQ2FsbEZyYW1lKj4+IGNhY2hlZFNwcmVhZExlbmd0aHM7Ci0KLSAgICAgICAgTm9kZSogYXJn
dW1lbnRzID0gbV9ub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgIE5vZGUqIGFyZ3VtZW50
cyA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS5ub2RlKCk7CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkIHx8IGFyZ3Vt
ZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIgfHwgYXJndW1lbnRzLT5vcCgpID09
IFBoYW50b21TcHJlYWQpOwogCi0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mU3RhdGljQXJndW1l
bnRzID0gMDsKLSAgICAgICAgVmVjdG9yPExWYWx1ZSwgMj4gc3ByZWFkTGVuZ3RoczsKLQotICAg
ICAgICBhdXRvIGNvbGxlY3RBcmd1bWVudENvdW50ID0gcmVjdXJzYWJsZUxhbWJkYShbJl0oYXV0
byBzZWxmLCBOb2RlKiB0YXJnZXQpIC0+IHZvaWQgewotICAgICAgICAgICAgaWYgKHRhcmdldC0+
b3AoKSA9PSBQaGFudG9tU3ByZWFkKSB7Ci0gICAgICAgICAgICAgICAgc2VsZih0YXJnZXQtPmNo
aWxkMSgpLm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBpZiAodGFyZ2V0LT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJl
YWQpIHsKLSAgICAgICAgICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IHRhcmdldC0+Yml0
VmVjdG9yKCk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhcmdl
dC0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0
b3ItPmdldChpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYobV9ncmFwaC52YXJBcmdD
aGlsZCh0YXJnZXQsIGkpLm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgICAgICsrbnVtYmVyT2ZTdGF0aWNBcmd1bWVudHM7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKHRhcmdldC0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIpIHsKLSAgICAg
ICAgICAgICAgICBudW1iZXJPZlN0YXRpY0FyZ3VtZW50cyArPSB0YXJnZXQtPmNhc3RPcGVyYW5k
PEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oKS0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQodGFyZ2V0LT5vcCgpID09
IFBoYW50b21DcmVhdGVSZXN0KTsKLSAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lID0gdGFyZ2V0LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IHRhcmdldC0+bnVt
YmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKLSAgICAgICAgICAgIHNwcmVhZExlbmd0aHMuYXBwZW5k
KGNhY2hlZFNwcmVhZExlbmd0aHMuZW5zdXJlKGlubGluZUNhbGxGcmFtZSwgWyZdICgpIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy0+Z2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxG
cmFtZShpbmxpbmVDYWxsRnJhbWUsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKTsKLSAgICAgICAg
ICAgIH0pLml0ZXJhdG9yLT52YWx1ZSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGNvbGxlY3RB
cmd1bWVudENvdW50KGFyZ3VtZW50cyk7Ci0gICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdU
aGlzID0gbV9vdXQuY29uc3RJbnQzMigxICsgbnVtYmVyT2ZTdGF0aWNBcmd1bWVudHMpOwotICAg
ICAgICBmb3IgKExWYWx1ZSBsZW5ndGggOiBzcHJlYWRMZW5ndGhzKQotICAgICAgICAgICAgbGVu
Z3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFkZChsZW5ndGhJbmNsdWRpbmdUaGlzLCBsZW5ndGgp
OworICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IGxvd0ludDMyKG1fbm9kZS0+
Y2hpbGQxKCkpOwogCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9h
ZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgIHNwZWN1bGF0ZSgKQEAgLTk4MjEsNyArOTc1MCw3IEBA
IHByaXZhdGU6CiAKICAgICAgICAgTFZhbHVlIHRhcmdldFN0YXJ0ID0gYWRkcmVzc0ZvcihkYXRh
LT5tYWNoaW5lU3RhcnQpLnZhbHVlKCk7CiAKLSAgICAgICAgYXV0byBmb3J3YXJkU3ByZWFkID0g
cmVjdXJzYWJsZUxhbWJkYShbdGhpcywgJmNhY2hlZFNwcmVhZExlbmd0aHMsICZ0YXJnZXRTdGFy
dF0oYXV0byBzZWxmLCBOb2RlKiB0YXJnZXQsIExWYWx1ZSBzdG9yZUluZGV4KSAtPiBMVmFsdWUg
eworICAgICAgICBhdXRvIGZvcndhcmRTcHJlYWQgPSByZWN1cnNhYmxlTGFtYmRhKFt0aGlzLCAm
dGFyZ2V0U3RhcnRdKGF1dG8gc2VsZiwgTm9kZSogdGFyZ2V0LCBMVmFsdWUgc3RvcmVJbmRleCkg
LT4gTFZhbHVlIHsKICAgICAgICAgICAgIGlmICh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbVNwcmVh
ZCkKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZih0YXJnZXQtPmNoaWxkMSgpLm5vZGUoKSwg
c3RvcmVJbmRleCk7CiAKQEAgLTk4NTMsOCArOTc4Miw5IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOwogICAg
ICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSB0YXJnZXQtPm9yaWdp
bi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKIAotICAgICAgICAgICAgTFZhbHVlIHNvdXJj
ZVN0YXJ0ID0gdGhpcy0+Z2V0QXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lLCB0YXJnZXQt
Pm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkpOwotICAgICAgICAgICAgTFZhbHVlIHNwcmVhZExl
bmd0aCA9IG1fb3V0Lnplcm9FeHRQdHIoY2FjaGVkU3ByZWFkTGVuZ3Rocy5nZXQoaW5saW5lQ2Fs
bEZyYW1lKSk7CisgICAgICAgICAgICBhdXRvIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gdGFy
Z2V0LT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworICAgICAgICAgICAgTFZhbHVlIHNvdXJj
ZVN0YXJ0ID0gdGhpcy0+Z2V0QXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCk7CisgICAgICAgICAgICBMVmFsdWUgc3ByZWFkTGVuZ3RoID0gbV9v
dXQuemVyb0V4dFB0cihnZXRTcHJlYWRMZW5ndGhGcm9tSW5saW5lQ2FsbEZyYW1lKGlubGluZUNh
bGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApKTsKIAogICAgICAgICAgICAgTEJhc2lj
QmxvY2sgbG9vcCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwpAQCAtMTIzNjYsOCArMTIyOTYsOCBAQCBw
cml2YXRlOgogICAgICAgICBMVmFsdWUgc2NvcGUgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkp
OwogCiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fY2FsbEZyYW1lLCBwYWNrZXQsIG1faGVhcHMu
U2hhZG93Q2hpY2tlbl9QYWNrZXRfZnJhbWUpOwotICAgICAgICBtX291dC5zdG9yZVB0cihtX291
dC5sb2FkUHRyKGFkZHJlc3NGb3IoMCkpLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9Q
YWNrZXRfY2FsbGVyRnJhbWUpOwotICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5sb2FkUHRy
KHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSksIHBhY2tldCwgbV9oZWFwcy5TaGFk
b3dDaGlja2VuX1BhY2tldF9jYWxsZWUpOworICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5s
b2FkUHRyKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKDApKSksIHBhY2tldCwgbV9oZWFwcy5T
aGFkb3dDaGlja2VuX1BhY2tldF9jYWxsZXJGcmFtZSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRy
KG1fb3V0LmxvYWRQdHIocGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSkpLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9QYWNrZXRfY2FsbGVlKTsK
ICAgICAgICAgbV9vdXQuc3RvcmVQdHIoc2NvcGUsIHBhY2tldCwgbV9oZWFwcy5TaGFkb3dDaGlj
a2VuX1BhY2tldF9zY29wZSk7CiAgICAgfQogICAgIApAQCAtMTI0MjgsNyArMTIzNTgsNyBAQCBw
cml2YXRlOgogICAgICAgICBBcmd1bWVudHNMZW5ndGggbGVuZ3RoOwogCiAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLSAgICAg
ICAgICAgIGxlbmd0aC5rbm93biA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgLSAxOworICAgICAgICAgICAgbGVuZ3RoLmtub3duID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsK
ICAgICAgICAgICAgIGxlbmd0aC5pc0tub3duID0gdHJ1ZTsKICAgICAgICAgICAgIGxlbmd0aC52
YWx1ZSA9IG1fb3V0LmNvbnN0SW50MzIobGVuZ3RoLmtub3duKTsKICAgICAgICAgfSBlbHNlIHsK
QEAgLTEyNDU4LDcgKzEyMzg4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4g
bV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKGZyYW1lLT5jYWxsZWVSZWNvdmVyeS52aXJ0dWFsUmVn
aXN0ZXIoKSkpOwogICAgICAgICAgICAgcmV0dXJuIHdlYWtQb2ludGVyKGZyYW1lLT5jYWxsZWVS
ZWNvdmVyeS5jb25zdGFudCgpLmFzQ2VsbCgpKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4g
bV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOworICAgICAg
ICByZXR1cm4gbV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJh
bWVTbG90OjpjYWxsZWUpKSk7CiAgICAgfQogICAgIAogICAgIExWYWx1ZSBnZXRBcmd1bWVudHNT
dGFydChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgdW5zaWduZWQgb2Zmc2V0ID0g
MCkKQEAgLTE3NzIzLDcgKzE3NjUzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgQ2FsbFNpdGVJbmRl
eCBjYWxsU2l0ZUluZGV4ID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5jb21tb24uYWRkQ29kZU9yaWdp
bihjb2RlT3JpZ2luKTsKICAgICAgICAgbV9vdXQuc3RvcmUzMigKICAgICAgICAgICAgIG1fb3V0
LmNvbnN0SW50MzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAotICAgICAgICAgICAgdGFnRm9yKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisgICAgICAgICAgICB0
YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKSkpOwogI2lmICFVU0UoQlVJTFRJTl9GUkFNRV9BRERSRVNTKSB8fCBBU1NFUlRfRU5B
QkxFRAogICAgICAgICBtX291dC5zdG9yZVB0cihtX2NhbGxGcmFtZSwgbV9vdXQuYWJzb2x1dGUo
JnZtKCkudG9wQ2FsbEZyYW1lKSk7CiAjZW5kaWYKQEAgLTE3ODMxLDcgKzE3NzYxLDggQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuICZtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXREZXNjcmlw
dG9ycy5hbGxvYygKICAgICAgICAgICAgIGxvd1ZhbHVlLmZvcm1hdCgpLCBwcm9maWxlLAogICAg
ICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwK
LSAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCkp
OworICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMo
KSwKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mVG1wcygp
KTsKICAgICB9CiAKICAgICB2b2lkIGFwcGVuZE9TUkV4aXQoCkBAIC0xNzkzNiwxNSArMTc4Njcs
MTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0pOwogICAgICAgICAKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVlcy5zaXplKCk7ICsraSkg
ewotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBleGl0RGVzY3JpcHRvci0+bV92YWx1ZXMub3Bl
cmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gZXhpdERlc2Ny
aXB0b3ItPm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSA9IGF2YWlsYWJpbGl0eU1hcC5tX2xvY2Fs
c1tpXTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlRlRM
T1NSRXhpdExpdmVuZXNzKCkKICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLm1fcGxhbi5tb2Rl
KCkgIT0gRlRMRm9yT1NSRW50cnlNb2RlKSB7CiAKLSAgICAgICAgICAgICAgICBpZiAoYXZhaWxh
YmlsaXR5LmlzRGVhZCgpICYmIG1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0
ZXIob3BlcmFuZCksIGV4aXRPcmlnaW4pKQotICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0go
bV9ncmFwaCwgbV9ub2RlLCB0b0NTdHJpbmcoIkxpdmUgYnl0ZWNvZGUgbG9jYWwgbm90IGF2YWls
YWJsZTogb3BlcmFuZCA9ICIsIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgIiwgYXZhaWxhYmls
aXR5ID0gIiwgYXZhaWxhYmlsaXR5LCAiLCBvcmlnaW4gPSAiLCBleGl0T3JpZ2luKS5kYXRhKCkp
OworICAgICAgICAgICAgICAgIGlmIChhdmFpbGFiaWxpdHkuaXNEZWFkKCkgJiYgbV9ncmFwaC5p
c0xpdmVJbkJ5dGVjb2RlKG9wZXJhbmQsIGV4aXRPcmlnaW4pKQorICAgICAgICAgICAgICAgICAg
ICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCB0b0NTdHJpbmcoIkxpdmUgYnl0ZWNvZGUgbG9j
YWwgbm90IGF2YWlsYWJsZTogb3BlcmFuZCA9ICIsIG9wZXJhbmQsICIsIGF2YWlsYWJpbGl0eSA9
ICIsIGF2YWlsYWJpbGl0eSwgIiwgb3JpZ2luID0gIiwgZXhpdE9yaWdpbikuZGF0YSgpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIEV4aXRWYWx1ZSBleGl0VmFsdWUgPSBleGl0VmFsdWVG
b3JBdmFpbGFiaWxpdHkoYXJndW1lbnRzLCBtYXAsIGF2YWlsYWJpbGl0eSk7CiAgICAgICAgICAg
ICBpZiAoZXhpdFZhbHVlLmhhc0luZGV4SW5TdGFja21hcExvY2F0aW9ucygpKQpAQCAtMTgyNDQs
MzkgKzE4MTc1LDM5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX291dC5hbHJlYWR5UmVn
aXN0ZXJlZFdlYWtQb2ludGVyKG1fZ3JhcGgsIHN0cnVjdHVyZS5nZXQoKSk7CiAgICAgfQogICAg
IAotICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFuZCwg
cHRyZGlmZl90IG9mZnNldCA9IDApCisgICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoTFZhbHVl
IGJhc2UsIE9wZXJhbmQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCiAgICAgewotICAg
ICAgICByZXR1cm4gbV9vdXQuYWRkcmVzcyhiYXNlLCBtX2hlYXBzLnZhcmlhYmxlc1tvcGVyYW5k
XSwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmFkZHJlc3MoYmFzZSwgbV9oZWFwcy52
YXJpYWJsZXNbb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKV0sIG9mZnNldCk7CiAg
ICAgfQotICAgIFR5cGVkUG9pbnRlciBwYXlsb2FkRm9yKExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFu
ZCkKKyAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZvcihMVmFsdWUgYmFzZSwgT3BlcmFuZCBvcGVy
YW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IoYmFzZSwgb3BlcmFuZCwgUGF5
bG9hZE9mZnNldCk7CiAgICAgfQotICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoTFZhbHVlIGJhc2Us
IGludCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoTFZhbHVlIGJhc2UsIE9wZXJh
bmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKGJhc2UsIG9wZXJh
bmQsIFRhZ09mZnNldCk7CiAgICAgfQotICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKGludCBv
cGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKKyAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0Zv
cihPcGVyYW5kIG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBvZmZzZXQpOworICAg
ICAgICByZXR1cm4gYWRkcmVzc0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLCBvZmZzZXQp
OwogICAgIH0KICAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0xvY2FsKCkpCi0gICAgICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhcHR1cmVkLCBvcGVy
YW5kLm9mZnNldCgpLCBvZmZzZXQpOwotICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhbGxG
cmFtZSwgb3BlcmFuZC5vZmZzZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBhZGRy
ZXNzRm9yKG1fY2FwdHVyZWQsIG9wZXJhbmQsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBhZGRy
ZXNzRm9yKG1fY2FsbEZyYW1lLCBvcGVyYW5kLCBvZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBv
aW50ZXIgcGF5bG9hZEZvcihpbnQgb3BlcmFuZCkKKyAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZv
cihPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICByZXR1cm4gcGF5bG9hZEZvcihWaXJ0
dWFsUmVnaXN0ZXIob3BlcmFuZCkpOworICAgICAgICByZXR1cm4gcGF5bG9hZEZvcihvcGVyYW5k
LnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAgICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3Io
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRkcmVzc0Zv
cihvcGVyYW5kLCBQYXlsb2FkT2Zmc2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHRhZ0Zv
cihpbnQgb3BlcmFuZCkKKyAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKE9wZXJhbmQgb3BlcmFuZCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpKTsK
KyAgICAgICAgcmV0dXJuIHRhZ0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9
CiAgICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCmluZGV4IDkzMzE3NzEw
ZjZkMDY4NjA5MTliYzAwMjUzMTNhMTMyMTkwNDQ5MTkuLjM0MzE0NDFkYmQyMWRhN2MyMTQ5MWZi
OWM0YzlhYjllY2NhYTVkMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRW50cnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50
cnkuY3BwCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeSgKICAgICAgICAg
ZGF0YUxvZygiICAgIFZhbHVlcyBhdCBlbnRyeTogIiwgdmFsdWVzLCAiXG4iKTsKICAgICAKICAg
ICBmb3IgKGludCBhcmd1bWVudCA9IHZhbHVlcy5udW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVu
dC0tOykgewotICAgICAgICBKU1ZhbHVlIHZhbHVlT25TdGFjayA9IGNhbGxGcmFtZS0+cih2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkpLmFzYW5VbnNhZmVKU1Zh
bHVlKCk7CisgICAgICAgIEpTVmFsdWUgdmFsdWVPblN0YWNrID0gY2FsbEZyYW1lLT5yKHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhhcmd1bWVudCkpLmFzYW5VbnNhZmVK
U1ZhbHVlKCk7CiAgICAgICAgIE9wdGlvbmFsPEpTVmFsdWU+IHJlY29uc3RydWN0ZWRWYWx1ZSA9
IHZhbHVlcy5hcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgIGlmICgocmVjb25zdHJ1Y3RlZFZh
bHVlICYmIHZhbHVlT25TdGFjayA9PSByZWNvbnN0cnVjdGVkVmFsdWUudmFsdWUoKSkgfHwgIWFy
Z3VtZW50KQogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0LmNwcAppbmRleCAwOTk1OGQyYzRmOWE1ZDg5YjVmYmJiNjVmODZiYjZkYWJjZGYx
OGUzLi4wNGM4NTc5OWU0ZDQ2OTIzYTMxODY3MThlMTlmMjRiZGZmZGFiYTRmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAKQEAgLTQ3LDEwICs0NywxMCBAQCB1c2lu
ZyBuYW1lc3BhY2UgREZHOwogCiBPU1JFeGl0RGVzY3JpcHRvcjo6T1NSRXhpdERlc2NyaXB0b3Io
CiAgICAgRGF0YUZvcm1hdCBwcm9maWxlRGF0YUZvcm1hdCwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZSB2YWx1ZVByb2ZpbGUsCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVu
c2lnbmVkIG51bWJlck9mTG9jYWxzKQorICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzLCB1
bnNpZ25lZCBudW1iZXJPZkxvY2FscywgdW5zaWduZWQgbnVtYmVyT2ZUbXBzKQogICAgIDogbV9w
cm9maWxlRGF0YUZvcm1hdChwcm9maWxlRGF0YUZvcm1hdCkKICAgICAsIG1fdmFsdWVQcm9maWxl
KHZhbHVlUHJvZmlsZSkKLSAgICAsIG1fdmFsdWVzKG51bWJlck9mQXJndW1lbnRzLCBudW1iZXJP
ZkxvY2FscykKKyAgICAsIG1fdmFsdWVzKG51bWJlck9mQXJndW1lbnRzLCBudW1iZXJPZkxvY2Fs
cywgbnVtYmVyT2ZUbXBzKQogewogfQogCkBAIC0xMTcsNSArMTE3LDMgQEAgQ29kZUxvY2F0aW9u
SnVtcDxKU0ludGVybmFsUHRyVGFnPiBPU1JFeGl0Ojpjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENv
ZGVCbG9jayogZnQKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJM
RShGVExfSklUKQotCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRXhpdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKaW5kZXgg
ZGE4N2NjZjMyNzNmZTRiZTM2MDY4M2I4YWYzYmJmNTE2ZDYyMjVlYi4uZmQ3ZjlmMDViYzQ4OWMx
ZjZhZWNlMDk3YWQ4YTRkMWUyN2I4MDMyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0LmgKQEAgLTY5LDcgKzY5LDcgQEAgc3RydWN0IE9TUkV4aXRIYW5kbGU7CiBzdHJ1Y3Qg
T1NSRXhpdERlc2NyaXB0b3IgewogICAgIE9TUkV4aXREZXNjcmlwdG9yKAogICAgICAgICBEYXRh
Rm9ybWF0IHByb2ZpbGVEYXRhRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLAot
ICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVtYmVyT2ZMb2Nh
bHMpOworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVtYmVy
T2ZMb2NhbHMsIHVuc2lnbmVkIG51bWJlck9mVG1wcyk7CiAKICAgICAvLyBUaGUgZmlyc3QgYXJn
dW1lbnQgdG8gdGhlIGV4aXQgY2FsbCBtYXkgYmUgYSB2YWx1ZSB3ZSB3aXNoIHRvIHByb2ZpbGUu
CiAgICAgLy8gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGUgZm9ybWF0IHdpbGwgYmUgbm90IEludmFs
aWQgYW5kIHdlJ2xsIGhhdmUgYQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0Q29tcGlsZXIuY3BwCmluZGV4IDY2NGQzYjk4OGFmN2VhODNmNmZiODJiY2IzYThjMGE4
ODE3NmVlNzIuLjIxNzE1ZDNkZDIyYzM4NzllYjA0ZmI2Yjc4ZTc5NTI4NGY1ZTAzOTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKQEAg
LTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkJ5dGVjb2Rl
U3RydWN0cy5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5j
bHVkZSAiREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgiCiAjaW5jbHVkZSAiRlRMRXhpdEFyZ3Vt
ZW50Rm9yT3BlcmFuZC5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKQEAgLTM3LDEwICszOCwx
MSBAQAogI2luY2x1ZGUgIkZUTE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJGVExTdGF0ZS5oIgog
I2luY2x1ZGUgIkZUTFNhdmVSZXN0b3JlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbC5oIgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJQcm9iZUNvbnRleHQuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgewogCkBAIC00NzQsMTYgKzQ3Niw1MiBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1
YihWTSYgdm0sIHVuc2lnbmVkIGV4aXRJRCwgSklUQ29kZSogaml0Q29kZSwgT1NSRXhpdCYgZXhp
dAogCiAgICAgc2l6ZV90IGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVzID0g
YmFzZWxpbmVDb2RlQmxvY2stPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwog
CisgICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVj
a3BvaW50KCkpIHsKKyAgICAgICAgSlNWYWx1ZSogdG1wU2NyYXRjaCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8SlNWYWx1ZSo+KHNjcmF0Y2ggKyBleGl0Lm1fZGVzY3JpcHRvci0+bV92YWx1ZXMudG1wSW5k
ZXgoMCkpOworICAgICAgICBWTSogdm1QdHIgPSAmdm07CisgICAgICAgIGppdC5wcm9iZShbPV0g
KFByb2JlOjpDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICBhdXRvIGFkZFNpZGVTdGF0
ZSA9IFsmXSAoQ2FsbEZyYW1lKiBmcmFtZSwgQnl0ZWNvZGVJbmRleCBpbmRleCwgc2l6ZV90IHRt
cE9mZnNldCkgeworICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NS
RXhpdFNpZGVTdGF0ZT4gc2lkZVN0YXRlID0gV1RGOjptYWtlVW5pcXVlPENoZWNrcG9pbnRPU1JF
eGl0U2lkZVN0YXRlPigpOworCisgICAgICAgICAgICAgICAgc2lkZVN0YXRlLT5ieXRlY29kZUlu
ZGV4ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhO
dW1DaGVja3BvaW50VG1wczsgKytpKQorICAgICAgICAgICAgICAgICAgICBzaWRlU3RhdGUtPnRt
cHNbaV0gPSB0bXBTY3JhdGNoW2kgKyB0bXBPZmZzZXRdOworCisgICAgICAgICAgICAgICAgdm1Q
dHItPmFkZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoZnJhbWUsIFdURk1vdmUoc2lkZVN0YXRlKSk7
CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBjb25zdCBDb2RlT3JpZ2luKiBjb2RlT3Jp
Z2luOworICAgICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmdwcjxDYWxs
RnJhbWUqPihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgICAgICBmb3IgKGNv
ZGVPcmlnaW4gPSAmZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4gJiYgY29kZU9yaWdpbi0+
aW5saW5lQ2FsbEZyYW1lKCk7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJh
bWUoKS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMoKSkgeworICAgICAgICAgICAgICAgIEJ5
dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4
KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjYWxsQnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgYXV0byog
aW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7CisgICAgICAg
ICAgICAgICAgYWRkU2lkZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbEZyYW1lKj4ocmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oY2FsbEZyYW1lKSArIGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENP
ZmZzZXQoKSAtIHNpemVvZihDUFVSZWdpc3RlcikpLCBjYWxsQnl0ZWNvZGVJbmRleCwgaW5saW5l
Q2FsbEZyYW1lLT50bXBPZmZzZXQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
IWNvZGVPcmlnaW4pCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAo
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgp
OyBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgICAgICAgICBhZGRTaWRlU3Rh
dGUoY2FsbEZyYW1lLCBieXRlY29kZUluZGV4LCAwKTsKKyAgICAgICAgfSk7CisgICAgfQorCiAg
ICAgLy8gTm93IGdldCBzdGF0ZSBvdXQgb2YgdGhlIHNjcmF0Y2ggYnVmZmVyIGFuZCBwbGFjZSBp
dCBiYWNrIGludG8gdGhlIHN0YWNrLiBUaGUgdmFsdWVzIGFyZQogICAgIC8vIGFscmVhZHkgcmVi
b3hlZCBzbyB3ZSBqdXN0IG1vdmUgdGhlbS4KICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gZXhp
dC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLnNpemUoKTsgaW5kZXgtLTspIHsKLSAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHJlZyA9IGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlcy52aXJ0dWFsUmVn
aXN0ZXJGb3JJbmRleChpbmRleCk7CisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGV4aXQubV9k
ZXNjcmlwdG9yLT5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOworCisgICAgICAgIGlm
IChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAo
cmVnLmlzTG9jYWwoKSAmJiByZWcudG9Mb2NhbCgpIDwgc3RhdGljX2Nhc3Q8aW50PihiYXNlbGlu
ZVZpcnR1YWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlcykpCisgICAgICAgIGlmIChvcGVyYW5kLmlz
TG9jYWwoKSAmJiBvcGVyYW5kLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGludD4oYmFzZWxpbmVW
aXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMpKQogICAgICAgICAgICAgY29udGludWU7CiAK
ICAgICAgICAgaml0LmxvYWQ2NChzY3JhdGNoICsgaW5kZXgsIEdQUkluZm86OnJlZ1QwKTsKLSAg
ICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvcihyZWcpKTsKKyAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5
SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKSk7CiAgICAgfQog
ICAgIAogICAgIGhhbmRsZUV4aXRDb3VudHModm0sIGppdCwgZXhpdCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAppbmRleCA0NDdjMDBhNzNkNTVkMGUwYjk2
YTQxY2I1MGE3ZmMyNmMwYmRmNjA1Li4wMDY5YTNhNmU2ZmUxZGVmNjk2ODliMzhiMjIzYWYwNDRi
MTgyOTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlv
bnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAK
QEAgLTU0MSw3ICs1NDEsNyBAQCBleHRlcm4gIkMiIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVy
YXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKEpTR2xvYmFsT2JqZWN0KgogICAgICAgICAgICAg
Ly8gV2UgYWxzbyBjYW5ub3QgYWxsb2NhdGUgYSBuZXcgYnV0dGVyZmx5IGZyb20gY29tcGlsYXRp
b24gdGhyZWFkcyBzaW5jZSBpdCdzIGludmFsaWQgdG8gYWxsb2NhdGUgY2VsbHMgZnJvbQogICAg
ICAgICAgICAgLy8gYSBjb21waWxhdGlvbiB0aHJlYWQuCiAgICAgICAgICAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOwotICAgICAgICAgICAgY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKG5l
d0FycmF5QnVmZmVyLm1faW1tdXRhYmxlQnV0dGVyZmx5Lm9mZnNldCgpKS5zZXQodm0sIGNvZGVC
bG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+Y29uc3Rh
bnRSZWdpc3RlcihuZXdBcnJheUJ1ZmZlci5tX2ltbXV0YWJsZUJ1dHRlcmZseSkuc2V0KHZtLCBj
b2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7CiAgICAgICAgICAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT3V0cHV0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0
LmNwcAppbmRleCA3NDkzM2RjNjA1MTVjNWRhMDBlYTE4ZmM3ZDVkYjNhZDljZTVlOWNmLi5kNTdm
YjFlZWE4MDQ0YTM0Yjc5MTc2OGE5MDk3Njk4OTk4YWMzMzkyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPdXRwdXQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjU1LDE1ICs2NTUsMzcgQEAgTFZhbHVlIE91dHB1
dDo6bm90WmVybzY0KExWYWx1ZSB2YWx1ZSkKICAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3
PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6Tm90RXF1YWwsIG9yaWdpbigpLCB2YWx1ZSwgaW50NjRa
ZXJvKTsKIH0KIAotTFZhbHVlIE91dHB1dDo6c2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHRh
a2VuLCBMVmFsdWUgbm90VGFrZW4pCitMVmFsdWUgT3V0cHV0OjpzZWxlY3QoTFZhbHVlIHZhbHVl
LCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0LCBTZWxlY3RQcmVkaWN0YWJpbGl0eSBwcmVkaWN0
YWJpbGl0eSkKIHsKICAgICBpZiAodmFsdWUtPmhhc0ludDMyKCkpIHsKICAgICAgICAgaWYgKHZh
bHVlLT5hc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdGFrZW47CisgICAgICAgICAgICBy
ZXR1cm4gbGVmdDsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIG5vdFRha2VuOwor
ICAgICAgICAgICAgcmV0dXJuIHJpZ2h0OwogICAgIH0KLSAgICByZXR1cm4gbV9ibG9jay0+YXBw
ZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwgdmFsdWUsIHRh
a2VuLCBub3RUYWtlbik7CisKKyAgICBpZiAocHJlZGljdGFiaWxpdHkgPT0gU2VsZWN0UHJlZGlj
dGFiaWxpdHk6Ok5vdFByZWRpY3RhYmxlKQorICAgICAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5k
TmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwgdmFsdWUsIGxlZnQs
IHJpZ2h0KTsKKworICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG5ld0Jsb2NrKCk7Cisg
ICAgTEJhc2ljQmxvY2sgbGVmdFRha2VuQmxvY2sgPSBuZXdCbG9jaygpOworICAgIExCYXNpY0Js
b2NrIHJpZ2h0VGFrZW5CbG9jayA9IG5ld0Jsb2NrKCk7CisKKyAgICBtX2Jsb2NrLT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUoCisgICAgICAgIG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCksIHZh
bHVlLAorICAgICAgICBGcmVxdWVudGVkQmxvY2sobGVmdFRha2VuQmxvY2ssIHByZWRpY3RhYmls
aXR5ICE9IFNlbGVjdFByZWRpY3RhYmlsaXR5OjpSaWdodExpa2VseSA/IEZyZXF1ZW5jeUNsYXNz
OjpOb3JtYWwgOiBGcmVxdWVuY3lDbGFzczo6UmFyZSksCisgICAgICAgIEZyZXF1ZW50ZWRCbG9j
ayhyaWdodFRha2VuQmxvY2ssIHByZWRpY3RhYmlsaXR5ICE9IFNlbGVjdFByZWRpY3RhYmlsaXR5
OjpMZWZ0TGlrZWx5ID8gRnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbCA6IEZyZXF1ZW5jeUNsYXNzOjpS
YXJlKSk7CisKKyAgICBMVmFsdWUgcGhpID0gY29udGludWF0aW9uLT5hcHBlbmROZXc8QjM6OlZh
bHVlPihtX3Byb2MsIEIzOjpQaGksIGxlZnQtPnR5cGUoKSwgb3JpZ2luKCkpOworCisgICAgbGVm
dFRha2VuQmxvY2stPmFwcGVuZE5ldzxCMzo6VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigp
LCBsZWZ0LCBwaGkpOworICAgIGxlZnRUYWtlbkJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUo
bV9wcm9jLCBCMzo6SnVtcCwgb3JpZ2luKCksIEIzOjpGcmVxdWVudGVkQmxvY2soY29udGludWF0
aW9uKSk7CisKKyAgICByaWdodFRha2VuQmxvY2stPmFwcGVuZE5ldzxCMzo6VXBzaWxvblZhbHVl
PihtX3Byb2MsIG9yaWdpbigpLCByaWdodCwgcGhpKTsKKyAgICByaWdodFRha2VuQmxvY2stPmFw
cGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpKdW1wLCBvcmlnaW4oKSwgQjM6OkZyZXF1
ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsKKworICAgIG1fYmxvY2sgPSBjb250aW51YXRpb247
CisgICAgcmV0dXJuIHBoaTsKIH0KIAogTFZhbHVlIE91dHB1dDo6YXRvbWljWGNoZ0FkZChMVmFs
dWUgb3BlcmFuZCwgVHlwZWRQb2ludGVyIHBvaW50ZXIsIFdpZHRoIHdpZHRoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKaW5kZXggYzU2YjRlZjdlMDYwZjkzNjJiM2JkY2EwZmQ0
NmEwM2FhNTcwY2EyZS4uNGMwMmIzNDA4NTE0NmY3ZGYwMjU2MjdkNWZmMzFjNzgxMGQ4ZmI3NiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCkBAIC0zOSw2ICszOSw3IEBACiAj
aW5jbHVkZSAiRlRMQWJicmV2aWF0ZWRUeXBlcy5oIgogI2luY2x1ZGUgIkZUTEFic3RyYWN0SGVh
cFJlcG9zaXRvcnkuaCIKICNpbmNsdWRlICJGVExDb21tb25WYWx1ZXMuaCIKKyNpbmNsdWRlICJG
VExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oIgogI2luY2x1ZGUgIkZUTFN0YXRlLmgiCiAjaW5jbHVk
ZSAiRlRMU3dpdGNoQ2FzZS5oIgogI2luY2x1ZGUgIkZUTFR5cGVkUG9pbnRlci5oIgpAQCAtMzY1
LDcgKzM2Niw3IEBAIHB1YmxpYzoKICAgICBMVmFsdWUgdGVzdElzWmVyb1B0cihMVmFsdWUgdmFs
dWUsIExWYWx1ZSBtYXNrKSB7IHJldHVybiBpc051bGwoYml0QW5kKHZhbHVlLCBtYXNrKSk7IH0K
ICAgICBMVmFsdWUgdGVzdE5vblplcm9QdHIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgbWFzaykgeyBy
ZXR1cm4gbm90TnVsbChiaXRBbmQodmFsdWUsIG1hc2spKTsgfQogCi0gICAgTFZhbHVlIHNlbGVj
dChMVmFsdWUgdmFsdWUsIExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2VuKTsKKyAgICBMVmFs
dWUgc2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4sIFNl
bGVjdFByZWRpY3RhYmlsaXR5ID0gU2VsZWN0UHJlZGljdGFiaWxpdHk6Ok5vdFByZWRpY3RhYmxl
KTsKICAgICAKICAgICAvLyBUaGVzZSBhcmUgcmVsYXhlZCBhdG9taWNzIGJ5IGRlZmF1bHQuIFVz
ZSBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0ZUZlbmNlZEFjY2VzcygpIHdpdGggYQog
ICAgIC8vIG5vbi1udWxsIGhlYXAgdG8gbWFrZSB0aGVtIHNlcV9jc3QgZmVuY2VkLgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjc2MDJhY2ZmZTQwNDQ1NTUxMDBlYjQ1ZDhmNmEwMzA5ZjM1ODExZDUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNlbGVjdFByZWRpY3Rh
YmlsaXR5LmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShGVExfSklUKQorCitu
YW1lc3BhY2UgSlNDOjpGVEwgeworCitlbnVtIGNsYXNzIFNlbGVjdFByZWRpY3RhYmlsaXR5IDog
dWludDhfdCB7CisgICAgLy8gVXNlIHRoaXMgd2hlbiB3ZSBleHBlY3QgaXQgdG8gYmUgdmVyeSB1
bmxpa2VseSB0aGUgYnJhbmNoIHByZWRpY3RvciB3aWxsIGJlIGFibGUgdG8gZ3Vlc3Mgd2hpY2gg
c2lkZSBvZiB0aGUgc2VsZWN0IHdpbGwgYmUgY2hvc2VuLiBUaGlzIHRlbGxzIEIzIHRvIHRyeSB0
byBlbWl0IHRoZSBzZWxlY3QgYXMgYSBjb25kaXRpb25hbCBtb3ZlLCB3aGljaCAodXN1YWxseSkg
aXMgbm90IHNwZWN1bGF0ZWQgYnkgdGhlIENQVS4KKyAgICBOb3RQcmVkaWN0YWJsZSwKKyAgICAv
LyBVc2UgdGhpcyB3aGVuIGl0J3MgcG9zc2libGUgYSBicmFuY2ggcHJlZGljdG9yIHdpbGwgZG8g
YSBnb29kIGpvYiBndWVzc2luZyB0aGUgc2VsZWN0ZWQgdmFsdWUgYnV0IHdlIGRvbid0IGtub3cg
YSBwcmlvcmkgd2hpY2ggc2lkZSBpcyBtb3JlIGxpa2VseS4KKyAgICBQcmVkaWN0YWJsZSwKKyAg
ICAvLyBVc2UgdGhlc2Ugd2hlbiB3ZSBhcmUgdmVyeSBzdXJlIG9uZSBvZiB0aGUgdHdvIHNpZGVz
IGlzIHN1YnN0YW50aWFsbHkgbW9yZSBsaWtlbHkgdGhhbiB0aGUgb3RoZXIuCisgICAgTGVmdExp
a2VseSwKKyAgICBSaWdodExpa2VseSwKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisK
KyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFNsb3dQYXRoQ2FsbC5oCmluZGV4IGZlMmE0ZWM3MjZjZWNlZDM0MTMwOTM5OTQ5NGVhOWViN2U2
YjRiNWYuLjcwZDI4OGUwM2YxZDhkODFmMjc3ZjZiODIxN2FjOWYzZmE4MGMxMmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaApAQCAtMTAwLDcgKzEwMCw3
IEBAIFNsb3dQYXRoQ2FsbCBjYWxsT3BlcmF0aW9uKAogICAgIGlmIChjYWxsU2l0ZUluZGV4KSB7
CiAgICAgICAgIGppdC5zdG9yZTMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0
YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKICAgICB9CiAgICAgcmV0dXJuIGNhbGxP
cGVyYXRpb24odm0sIHVzZWRSZWdpc3RlcnMsIGppdCwgZXhjZXB0aW9uVGFyZ2V0LCBmdW5jdGlv
biwgcmVzdWx0R1BSLCBhcmd1bWVudHMuLi4pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2dlbmVyYXRvci9DaGVja3BvaW50cy5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9nZW5lcmF0b3IvQ2hlY2twb2ludHMucmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTZhNWY1Mjc3ZGQ2MzFhY2Q0
Y2NiZWNkMTRiMjRjYzVkNGEzOWEyNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9nZW5lcmF0b3IvQ2hlY2twb2ludHMucmIKQEAgLTAsMCArMSw2NCBAQAorIyBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
IyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworY2xhc3MgQ2hlY2twb2ludAorICAgIGF0
dHJfcmVhZGVyIDp1c2VzCisgICAgYXR0cl9yZWFkZXIgOmRlZnMKKyAgICBhdHRyX3JlYWRlciA6
bmFtZQorICAgIGF0dHJfcmVhZGVyIDppbmRleAorCisgICAgZGVmIGluaXRpYWxpemUobmFtZSwg
aW5kZXgsIHRtcHMpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAgICAgICBAaW5kZXggPSBpbmRl
eAorICAgICAgICBAdXNlcyA9IHRtcHMuZmlsdGVyIHsgfCh0bXAsIHVzZURlZil8IHVzZURlZiA9
PSA6dXNlIH0KKyAgICAgICAgQGRlZnMgPSB0bXBzLmZpbHRlciB7IHwodG1wLCB1c2VEZWYpfCB1
c2VEZWYgPT0gOmRlZmluZSB9CisgICAgZW5kCisKKyAgICBkZWYgbGl2ZW5lc3MobmFtZXNwYWNl
KQorICAgICAgICBFT0Y8LS0KKyAgICBjYXNlICN7bmFtZXNwYWNlfTo6I3tuYW1lfToKK0VPRgor
ICAgIGVuZAorZW5kCisKK2NsYXNzIENoZWNrcG9pbnRzCisgICAgZGVmIGluaXRpYWxpemUob3Bj
b2RlLCB0bXBzLCBjaGVja3BvaW50cykKKyAgICAgICAgQG9wY29kZSA9IG9wY29kZQorICAgICAg
ICBAdG1wcyA9IHRtcHMKKyAgICAgICAgQGNoZWNrcG9pbnRzID0gY2hlY2twb2ludHMubWFwX3dp
dGhfaW5kZXggeyB8KG5hbWUsIHRtcHMpLCBpbmRleHwgQ2hlY2twb2ludC5uZXcobmFtZSwgaW5k
ZXgsIHRtcHMpIH0KKyAgICBlbmQKKworICAgIGRlZiBsaXZlbmVzcworICAgICAgICBAY2hlY2tw
b2ludHMuZWFjaCBkbyB8Y2hlY2twb2ludHwKKworICAgICAgICBlbmQKKyAgICAgICAgRU9GPC0t
CitCaXRNYXA8bWF4TnVtVG1wcz4gdG1wTGl2ZW5lc3NGb3Ije0BvcGNvZGUuY2FwaXRhbGl6ZWRf
bmFtZX0odWludDhfdCBjaGVja3BvaW50KQoreworICAgIHN3aXRjaCAoY2hlY2twb2ludCkgewor
CisgICAgfQorfQorRU9GCisgICAgZW5kCitlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVy
YXRvci9PcGNvZGUucmIKaW5kZXggNjg0YjMwMGU5ZDk4MTQxNDE2MTU3M2MwNjZhOWIxMmQ2NzE3
MGZjMi4uODIzNzRiN2ZiZTg2ZDU3ODhiM2E0MDU4MTU4YTg5OGQ2YTZhMjA4YyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIKQEAgLTMwLDYgKzMwLDcgQEAgY2xh
c3MgT3Bjb2RlCiAgICAgYXR0cl9yZWFkZXIgOmFyZ3MKICAgICBhdHRyX3JlYWRlciA6bWV0YWRh
dGEKICAgICBhdHRyX3JlYWRlciA6ZXh0cmFzCisgICAgYXR0cl9yZWFkZXIgOmNoZWNrcG9pbnRz
CiAKICAgICBtb2R1bGUgU2l6ZQogICAgICAgICBOYXJyb3cgPSAiT3Bjb2RlU2l6ZTo6TmFycm93
IgpAQCAtNDUsMTIgKzQ2LDE0IEBAIGNsYXNzIE9wY29kZQogICAgICAgICB0aWQKICAgICBlbmQK
IAotICAgIGRlZiBpbml0aWFsaXplKHNlY3Rpb24sIG5hbWUsIGV4dHJhcywgYXJncywgbWV0YWRh
dGEsIG1ldGFkYXRhX2luaXRpYWxpemVycykKKyAgICBkZWYgaW5pdGlhbGl6ZShzZWN0aW9uLCBu
YW1lLCBleHRyYXMsIGFyZ3MsIG1ldGFkYXRhLCBtZXRhZGF0YV9pbml0aWFsaXplcnMsIHRtcHMs
IGNoZWNrcG9pbnRzKQogICAgICAgICBAc2VjdGlvbiA9IHNlY3Rpb24KICAgICAgICAgQG5hbWUg
PSBuYW1lCiAgICAgICAgIEBleHRyYXMgPSBleHRyYXMgfHwge30KICAgICAgICAgQG1ldGFkYXRh
ID0gTWV0YWRhdGEubmV3IG1ldGFkYXRhLCBtZXRhZGF0YV9pbml0aWFsaXplcnMKICAgICAgICAg
QGFyZ3MgPSBhcmdzLm1hcC53aXRoX2luZGV4IHsgfChhcmdfbmFtZSwgdHlwZSksIGluZGV4fCBB
cmd1bWVudC5uZXcgYXJnX25hbWUsIHR5cGUsIGluZGV4IH0gdW5sZXNzIGFyZ3MubmlsPworICAg
ICAgICBAdG1wcyA9IHRtcHMKKyAgICAgICAgQGNoZWNrcG9pbnRzID0gY2hlY2twb2ludHMubWFw
IHsgfChjaGVja3BvaW50LCBfKXwgY2hlY2twb2ludCB9IHVubGVzcyBjaGVja3BvaW50cy5uaWw/
CiAgICAgZW5kCiAKICAgICBkZWYgY3JlYXRlX2lkIQpAQCAtMTI3LDYgKzEzMCw4IEBAIGNsYXNz
IE9wY29kZQogICAgICAgICA8PC1FT0YKIHN0cnVjdCAje2NhcGl0YWxpemVkX25hbWV9IDogcHVi
bGljIEluc3RydWN0aW9uIHsKICAgICAje29wY29kZUlEfQorICAgICN7dGVtcHN9CisgICAgI3tj
aGVja3BvaW50VmFsdWVzfQogCiAje2VtaXR0ZXJ9CiAje2R1bXBlcn0KQEAgLTE0MSw2ICsxNDYs
MTggQEAgRU9GCiAgICAgICAgICJzdGF0aWMgY29uc3RleHByICN7b3Bjb2RlSURUeXBlfSBvcGNv
ZGVJRCA9ICN7bmFtZX07IgogICAgIGVuZAogCisgICAgZGVmIGNoZWNrcG9pbnRWYWx1ZXMKKyAg
ICAgICAgcmV0dXJuIGlmIEBjaGVja3BvaW50cy5uaWw/CisKKyAgICAgICAgWyJlbnVtIENoZWNr
cG9pbnRzIDogdWludDhfdCB7Il0uY29uY2F0KGNoZWNrcG9pbnRzLm1hcHsgfGNoZWNrcG9pbnR8
ICIgICAgICAgICN7Y2hlY2twb2ludH0sIiB9KS5jb25jYXQoWyIgICAgICAgIG51bWJlck9mQ2hl
Y2twb2ludHMsIiwgIiAgICB9OyJdKS5qb2luKCJcbiIpCisgICAgZW5kCisKKyAgICBkZWYgdGVt
cHMKKyAgICAgICAgcmV0dXJuIGlmIEB0bXBzLm5pbD8KKworICAgICAgICBbImVudW0gVG1wcyA6
IHVpbnQ4X3QgeyJdLmNvbmNhdChAdG1wcy5tYXAge3wodG1wLCB0eXBlKXwgIiAgICAgICAgI3t0
bXB9LCJ9KS5wdXNoKCIgICAgfTsiKS5qb2luKCJcbiIpCisgICAgZW5kCisKICAgICBkZWYgZW1p
dHRlcgogICAgICAgICBvcF93aWRlMTYgPSBBcmd1bWVudC5uZXcod2lkZTE2LCBvcGNvZGVJRFR5
cGUsIDApCiAgICAgICAgIG9wX3dpZGUzMiA9IEFyZ3VtZW50Lm5ldyh3aWRlMzIsIG9wY29kZUlE
VHlwZSwgMCkKQEAgLTIwOSw2ICsyMjYsNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPE9wY29k
ZVNpemUgX19zaXplLCBib29sIHJlY29yZE9wY29kZSwgdHlwZW5hbWUgQnl0ZWNvZGVHZW5lcmF0
b3I+CiAgICAgc3RhdGljIGJvb2wgZW1pdEltcGwoQnl0ZWNvZGVHZW5lcmF0b3IqIGdlbiN7dHlw
ZWRfYXJnc30je21ldGFkYXRhX3BhcmFtfSkKICAgICB7CisgICAgICAgICN7IUBjaGVja3BvaW50
cy5uaWw/ID8gImdlbi0+c2V0VXNlc0NoZWNrcG9pbnRzKCk7IiA6ICIifQogICAgICAgICBpZiAo
X19zaXplID09IE9wY29kZVNpemU6OldpZGUxNikKICAgICAgICAgICAgIGdlbi0+YWxpZ25XaWRl
T3Bjb2RlMTYoKTsKICAgICAgICAgZWxzZSBpZiAoX19zaXplID09IE9wY29kZVNpemU6OldpZGUz
MikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlvbi5y
YiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlvbi5yYgppbmRleCAyMDRh
Yzc1OWUxM2VmZjE1MWY4Y2QxNzdmM2JmMWI3MGUwNzc5Y2FhLi42Njg1NWJhNjUwMDgwZTRjMjNj
YzBlYmVjMTBlNzk0OWNkZTc2OGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Z2VuZXJhdG9yL1NlY3Rpb24ucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRv
ci9TZWN0aW9uLnJiCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIFNlY3Rpb24KICAgZW5kCiAKICAg
ZGVmIGNyZWF0ZV9vcGNvZGUobmFtZSwgY29uZmlnKQotICAgICAgT3Bjb2RlLm5ldyhzZWxmLCBu
YW1lLCBjb25maWdbOmV4dHJhc10sIGNvbmZpZ1s6YXJnc10sIGNvbmZpZ1s6bWV0YWRhdGFdLCBj
b25maWdbOm1ldGFkYXRhX2luaXRpYWxpemVyc10pCisgICAgICBPcGNvZGUubmV3KHNlbGYsIG5h
bWUsIGNvbmZpZ1s6ZXh0cmFzXSwgY29uZmlnWzphcmdzXSwgY29uZmlnWzptZXRhZGF0YV0sIGNv
bmZpZ1s6bWV0YWRhdGFfaW5pdGlhbGl6ZXJzXSwgY29uZmlnWzp0bXBzXSwgY29uZmlnWzpjaGVj
a3BvaW50c10pCiAgIGVuZAogCiAgIGRlZiBhZGRfb3Bjb2RlX2dyb3VwKG5hbWUsIG9wY29kZXMs
IGNvbmZpZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKaW5kZXggNjc1NDBkOTA3ZmRm
ZDdlNWY5YTRiNmMxOTA3MTkxZDY4ZmNiNjE3My4uNDM5NjMwNTA3ZDY0MzA3MGNhNzRhYTA1OTE3
YjMxM2M3MzhkOTNmYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKQEAgLTcyMSw2
ICs3MjEsNyBAQCB2b2lkIEhlYXA6OmdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhDb25zZXJ2YXRp
dmVSb290cyYgcm9vdHMpCiAgICAgaWYgKCFWTTo6Y2FuVXNlSklUKCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBtX3ZtLmdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhyb290cyk7CisgICAgbV92bS5z
Y2FuU2lkZVN0YXRlKHJvb3RzKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHJvb3RzKTsKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNw
cAppbmRleCAyNDEwMWMwN2U4MDMxZDY0ZTMyZjI4NTRmOTQ2Mjk3OGZmZjAyMjBiLi4yYzc3NWY5
NDRmOGVlNzRkNDFjZTk5MjM2MjViNTgyNzY3NGVjYmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcApAQCAtOTAsMjIgKzkwLDIyIEBAIGJv
b2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVDb2RlT3JpZ2luSW5kZXgoKSBjb25zdAogCiB1
bnNpZ25lZCBDYWxsRnJhbWU6OmNhbGxTaXRlQXNSYXdCaXRzKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gdGhpc1tDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc10udGFnKCk7
CisgICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyldLnRhZygpOwogfQogCiBTVVBQUkVTU19BU0FOIHVuc2lnbmVk
IENhbGxGcmFtZTo6dW5zYWZlQ2FsbFNpdGVBc1Jhd0JpdHMoKSBjb25zdAogewotICAgIHJldHVy
biB0aGlzW0NhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzXS51bnNhZmVU
YWcoKTsKKyAgICByZXR1cm4gdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKV0udW5zYWZlVGFnKCk7CiB9CiAKIENhbGxTaXRlSW5k
ZXggQ2FsbEZyYW1lOjpjYWxsU2l0ZUluZGV4KCkgY29uc3QKIHsKLSAgICByZXR1cm4gQ2FsbFNp
dGVJbmRleChCeXRlY29kZUluZGV4KGNhbGxTaXRlQXNSYXdCaXRzKCkpKTsKKyAgICByZXR1cm4g
Q2FsbFNpdGVJbmRleDo6ZnJvbUJpdHMoY2FsbFNpdGVBc1Jhd0JpdHMoKSk7CiB9CiAKIFNVUFBS
RVNTX0FTQU4gQ2FsbFNpdGVJbmRleCBDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRlSW5kZXgoKSBj
b25zdAogewotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgodW5zYWZlQ2Fs
bFNpdGVBc1Jhd0JpdHMoKSkpOworICAgIHJldHVybiBDYWxsU2l0ZUluZGV4Ojpmcm9tQml0cyh1
bnNhZmVDYWxsU2l0ZUFzUmF3Qml0cygpKTsKIH0KIAogY29uc3QgSW5zdHJ1Y3Rpb24qIENhbGxG
cmFtZTo6Y3VycmVudFZQQygpIGNvbnN0CkBAIC0xMTcsNyArMTE3LDggQEAgY29uc3QgSW5zdHJ1
Y3Rpb24qIENhbGxGcmFtZTo6Y3VycmVudFZQQygpIGNvbnN0CiB2b2lkIENhbGxGcmFtZTo6c2V0
Q3VycmVudFZQQyhjb25zdCBJbnN0cnVjdGlvbiogdnBjKQogewogICAgIENhbGxTaXRlSW5kZXgg
Y2FsbFNpdGUoY29kZUJsb2NrKCktPmJ5dGVjb2RlSW5kZXgodnBjKSk7Ci0gICAgdGhpc1tDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc10udGFnKCkgPSBzdGF0aWNfY2Fz
dDxpbnQzMl90PihjYWxsU2l0ZS5iaXRzKCkpOworICAgIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyldLnRhZygpID0gY2FsbFNp
dGUuYml0cygpOworICAgIEFTU0VSVChjdXJyZW50VlBDKCkgPT0gdnBjKTsKIH0KIAogdW5zaWdu
ZWQgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCkgY29uc3QKQEAgLTE0
NCw3ICsxNDUsNyBAQCBCeXRlY29kZUluZGV4IENhbGxGcmFtZTo6Ynl0ZWNvZGVJbmRleCgpCiAg
ICAgfQogI2VuZGlmCiAgICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkp
OwotICAgIHJldHVybiBCeXRlY29kZUluZGV4KGNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQo
KSk7CisgICAgcmV0dXJuIGNhbGxTaXRlSW5kZXgoKS5ieXRlY29kZUluZGV4KCk7CiB9CiAKIENv
ZGVPcmlnaW4gQ2FsbEZyYW1lOjpjb2RlT3JpZ2luKCkKQEAgLTE1OCw3ICsxNTksNyBAQCBDb2Rl
T3JpZ2luIENhbGxGcmFtZTo6Y29kZU9yaWdpbigpCiAgICAgICAgIHJldHVybiBjb2RlQmxvY2so
KS0+Y29kZU9yaWdpbihpbmRleCk7CiAgICAgfQogI2VuZGlmCi0gICAgcmV0dXJuIENvZGVPcmln
aW4oQnl0ZWNvZGVJbmRleChjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCkpKTsKKyAgICBy
ZXR1cm4gQ29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KCkuYnl0ZWNvZGVJbmRleCgpKTsKIH0KIAog
UmVnaXN0ZXIqIENhbGxGcmFtZTo6dG9wT2ZGcmFtZUludGVybmFsKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAppbmRleCA4YWJkZGI4MTA2YjQxYjFh
ZTAzZDc1NzZhODAxZDdiZjkxZjIxNmM4Li43ZDU2ZmM3NTQ2YmNmZTAxMjllMjcwYjEzZmVkNjA0
OWFiZWJjNjdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Q2FsbEZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiU3RhY2tWaXNpdG9yLmgiCiAjaW5j
bHVkZSAiVk0uaCIKICNpbmNsdWRlICJWTUVudHJ5UmVjb3JkLmgiCisjaW5jbHVkZSA8d3RmL0Vu
dW1DbGFzc09wZXJhdG9yT3ZlcmxvYWRzLmg+CiAKIG5hbWVzcGFjZSBKU0MgIHsKIApAQCAtNDYs
MTggKzQ3LDI0IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgQ2FsbFNpdGVJbmRleCgpID0g
ZGVmYXVsdDsKICAgICAgICAgCiAgICAgICAgIGV4cGxpY2l0IENhbGxTaXRlSW5kZXgoQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4KQotICAgICAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoYnl0
ZWNvZGVJbmRleCkKKyAgICAgICAgICAgIDogbV9iaXRzKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkp
CisgICAgICAgIHsgCisgICAgICAgICAgICBBU1NFUlQoIWJ5dGVjb2RlSW5kZXguY2hlY2twb2lu
dCgpKTsKKyAgICAgICAgfQorICAgICAgICBleHBsaWNpdCBDYWxsU2l0ZUluZGV4KHVpbnQzMl90
IGJpdHMpCisgICAgICAgICAgICA6IG1fYml0cyhiaXRzKQogICAgICAgICB7IH0KIAotICAgICAg
ICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2J5dGVjb2RlSW5k
ZXg7IH0KLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGxTaXRlSW5kZXgmIG90aGVy
KSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXggPT0gb3RoZXIubV9ieXRlY29kZUluZGV4
OyB9CisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1f
Yml0czsgfQorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsbFNpdGVJbmRleCYgb3Ro
ZXIpIGNvbnN0IHsgcmV0dXJuIG1fYml0cyA9PSBvdGhlci5tX2JpdHM7IH0KIAotICAgICAgICB1
aW50MzJfdCBiaXRzKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4LmFzQml0cygpOyB9
CisgICAgICAgIHVpbnQzMl90IGJpdHMoKSBjb25zdCB7IHJldHVybiBtX2JpdHM7IH0KKyAgICAg
ICAgc3RhdGljIENhbGxTaXRlSW5kZXggZnJvbUJpdHModWludDMyX3QgYml0cykgeyByZXR1cm4g
Q2FsbFNpdGVJbmRleChiaXRzKTsgfQogCi0gICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsgfQorICAgICAgICBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBCeXRlY29kZUluZGV4KGJpdHMo
KSk7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUlu
ZGV4OworICAgICAgICB1aW50MzJfdCBtX2JpdHMgeyBCeXRlY29kZUluZGV4KCkub2Zmc2V0KCkg
fTsKICAgICB9OwogCiAgICAgY2xhc3MgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggOiBwdWJsaWMg
Q2FsbFNpdGVJbmRleCB7CkBAIC02NSw3ICs3Miw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAg
ICAgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgZXhwbGlj
aXQgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgodWludDMyX3QgYml0cykKLSAgICAgICAgICAgIDog
Q2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4Ojpmcm9tQml0cyhiaXRzKSkKKyAgICAgICAgICAg
IDogQ2FsbFNpdGVJbmRleChiaXRzKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtNzgsMjQg
Kzg1LDI3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAvLyBhcm02NF8zMiBleHBlY3RzIGNhbGxl
ciBmcmFtZSBhbmQgcmV0dXJuIHBjIHRvIHVzZSA4IGJ5dGVzIAogICAgIHN0cnVjdCBDYWxsZXJG
cmFtZUFuZFBDIHsKICAgICAgICAgYWxpZ25hcyhDUFVSZWdpc3RlcikgQ2FsbEZyYW1lKiBjYWxs
ZXJGcmFtZTsKLSAgICAgICAgYWxpZ25hcyhDUFVSZWdpc3RlcikgY29uc3QgSW5zdHJ1Y3Rpb24q
IHJldHVyblBDOworICAgICAgICBhbGlnbmFzKENQVVJlZ2lzdGVyKSB2b2lkKiByZXR1cm5QQzsK
ICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgc2l6ZUluUmVnaXN0ZXJzID0gMiAqIHNpemVv
ZihDUFVSZWdpc3RlcikgLyBzaXplb2YoUmVnaXN0ZXIpOwogICAgIH07CiAgICAgc3RhdGljX2Fz
c2VydChDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMgPT0gc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKSwgIkNhbGxlckZyYW1lQW5kUEM6OnNpemVJblJl
Z2lzdGVycyBpcyBpbmNvcnJlY3QuIik7CiAKLSAgICBzdHJ1Y3QgQ2FsbEZyYW1lU2xvdCB7Ci0g
ICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGNvZGVCbG9jayA9IENhbGxlckZyYW1lQW5kUEM6
OnNpemVJblJlZ2lzdGVyczsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgY2FsbGVlID0g
Y29kZUJsb2NrICsgMTsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPSBjYWxsZWUgKyAxOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIGlu
dCB0aGlzQXJndW1lbnQgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIDE7Ci0gICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgaW50IGZpcnN0QXJndW1lbnQgPSB0aGlzQXJndW1lbnQgKyAxOwor
ICAgIGVudW0gY2xhc3MgQ2FsbEZyYW1lU2xvdCA6IGludCB7CisgICAgICAgIGNvZGVCbG9jayA9
IENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycywKKyAgICAgICAgY2FsbGVlID0gY29k
ZUJsb2NrICsgMSwKKyAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsZWUg
KyAxLAorICAgICAgICB0aGlzQXJndW1lbnQgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAr
IDEsCisgICAgICAgIGZpcnN0QXJndW1lbnQgPSB0aGlzQXJndW1lbnQgKyAxLAogICAgIH07CiAK
KyAgICBPVkVSTE9BRF9NQVRIX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSVRIX0lOVEVHUkFM
UyhDYWxsRnJhbWVTbG90KQorICAgIE9WRVJMT0FEX1JFTEFUSU9OQUxfT1BFUkFUT1JTX0ZPUl9F
TlVNX0NMQVNTX1dJVEhfSU5URUdSQUxTKENhbGxGcmFtZVNsb3QpCisKICAgICAvLyBSZXByZXNl
bnRzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHNjcmlwdCBleGVjdXRpb24uCiAgICAgLy8gUGFzc2Vk
IGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBtb3N0IGZ1bmN0aW9ucy4KICAgICBjbGFzcyBDYWxs
RnJhbWUgOiBwcml2YXRlIFJlZ2lzdGVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGhlYWRlclNpemVJblJlZ2lzdGVycyA9IENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzICsgMTsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQg
aGVhZGVyU2l6ZUluUmVnaXN0ZXJzID0gc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykgKyAxOwogCiAgICAgICAgIC8vIFRoaXMgZnVuY3Rp
b24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGluIHZlcnkgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcwog
ICAgICAgICAvLyB3aGVuIHlvdSd2ZSBndWFyYW50ZWVkIHRoZSBjYWxsZWUgY2FuJ3QgYmUgYSBX
YXNtIGNhbGxlZSwgYW5kIGNhbgpAQCAtMTA2LDEwICsxMTYsMTAgQEAgbmFtZXNwYWNlIEpTQyAg
ewogICAgICAgICAvLyB0byBzZWUgaWYgaXQncyBhIGNlbGwsIGFuZCBpZiBpdCdzIG5vdCwgd2Ug
dGhyb3cgYW4gZXhjZXB0aW9uLgogICAgICAgICBpbmxpbmUgSlNWYWx1ZSBndWFyYW50ZWVkSlNW
YWx1ZUNhbGxlZSgpIGNvbnN0OwogICAgICAgICBpbmxpbmUgSlNPYmplY3QqIGpzQ2FsbGVlKCkg
Y29uc3Q7Ci0gICAgICAgIENhbGxlZUJpdHMgY2FsbGVlKCkgY29uc3QgeyByZXR1cm4gQ2FsbGVl
Qml0cyh0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0ucG9pbnRlcigpKTsgfQotICAgICAgICBT
VVBQUkVTU19BU0FOIENhbGxlZUJpdHMgdW5zYWZlQ2FsbGVlKCkgY29uc3QgeyByZXR1cm4gQ2Fs
bGVlQml0cyh0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0uYXNhblVuc2FmZVBvaW50ZXIoKSk7
IH0KKyAgICAgICAgQ2FsbGVlQml0cyBjYWxsZWUoKSBjb25zdCB7IHJldHVybiBDYWxsZWVCaXRz
KHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXS5wb2ludGVyKCkp
OyB9CisgICAgICAgIFNVUFBSRVNTX0FTQU4gQ2FsbGVlQml0cyB1bnNhZmVDYWxsZWUoKSBjb25z
dCB7IHJldHVybiBDYWxsZWVCaXRzKHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpXS5hc2FuVW5zYWZlUG9pbnRlcigpKTsgfQogICAgICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jaygpIGNvbnN0OwotICAgICAgICBDb2RlQmxvY2sqKiBhZGRyZXNzT2ZDb2RlQmxvY2so
KSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKio+KHRoaXMgKyBDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spOyB9CisgICAgICAgIENvZGVCbG9jayoqIGFkZHJlc3NPZkNvZGVC
bG9jaygpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxDb2RlQmxvY2sqKj4odGhpcyArIHN0
YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7IH0KICAgICAgICAgaW5s
aW5lIFNVUFBSRVNTX0FTQU4gQ29kZUJsb2NrKiB1bnNhZmVDb2RlQmxvY2soKSBjb25zdDsKICAg
ICAgICAgaW5saW5lIEpTU2NvcGUqIHNjb3BlKGludCBzY29wZVJlZ2lzdGVyT2Zmc2V0KSBjb25z
dDsKIApAQCAtMTgyLDE1ICsxOTIsMTMgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBzdGF0
aWMgdm9pZCBpbml0RGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKENhbGxGcmFtZSogZ2xv
YmFsRXhlYywgSlNDYWxsZWUqIGdsb2JhbENhbGxlZSk7CiAKICAgICAgICAgLy8gUmVhZCBhIHJl
Z2lzdGVyIGZyb20gdGhlIGNvZGVmcmFtZSAob3IgY29uc3RhbnQgZnJvbSB0aGUgQ29kZUJsb2Nr
KS4KLSAgICAgICAgUmVnaXN0ZXImIHIoaW50KTsKICAgICAgICAgUmVnaXN0ZXImIHIoVmlydHVh
bFJlZ2lzdGVyKTsKLSAgICAgICAgLy8gUmVhZCBhIHJlZ2lzdGVyIGZvciBhIG5vbi1jb25zdGFu
dAotICAgICAgICBSZWdpc3RlciYgdW5jaGVja2VkUihpbnQpOworICAgICAgICAvLyBSZWFkIGEg
cmVnaXN0ZXIgZm9yIGEga25vd24gbm9uLWNvbnN0YW50CiAgICAgICAgIFJlZ2lzdGVyJiB1bmNo
ZWNrZWRSKFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgLy8gQWNjZXNzIHRvIGFyZ3VtZW50
cyBhcyBwYXNzZWQuIChBZnRlciBjYXB0dXJlLCBhcmd1bWVudHMgbWF5IG1vdmUgdG8gYSBkaWZm
ZXJlbnQgbG9jYXRpb24uKQogICAgICAgICBzaXplX3QgYXJndW1lbnRDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgLSAxOyB9Ci0gICAgICAgIHNpemVf
dCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIGNvbnN0IHsgcmV0dXJuIHRoaXNbQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNdLnBheWxvYWQoKTsgfQorICAgICAg
ICBzaXplX3QgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSBjb25zdCB7IHJldHVybiB0aGlz
W3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpXS5wYXlsb2FkKCk7IH0KICAgICAgICAgc3RhdGljIGludCBhcmd1bWVudE9mZnNldChpbnQg
YXJndW1lbnQpIHsgcmV0dXJuIChDYWxsRnJhbWVTbG90OjpmaXJzdEFyZ3VtZW50ICsgYXJndW1l
bnQpOyB9CiAgICAgICAgIHN0YXRpYyBpbnQgYXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKGlu
dCBhcmd1bWVudCkgeyByZXR1cm4gKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGFyZ3Vt
ZW50KTsgfQogCkBAIC0yMzksNyArMjQ3LDcgQEAgbmFtZXNwYWNlIEpTQyAgewogCiAgICAgICAg
IEpTVmFsdWUgYXJndW1lbnRBZnRlckNhcHR1cmUoc2l6ZV90IGFyZ3VtZW50KTsKIAotICAgICAg
ICBzdGF0aWMgaW50IG9mZnNldEZvcihzaXplX3QgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
IHsgcmV0dXJuIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgQ2FsbEZyYW1lU2xvdDo6dGhp
c0FyZ3VtZW50IC0gMTsgfQorICAgICAgICBzdGF0aWMgaW50IG9mZnNldEZvcihzaXplX3QgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpIHsgcmV0dXJuIENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1
bWVudCArIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsgfQogCiAgICAgICAgIHN0YXRp
YyBDYWxsRnJhbWUqIG5vQ2FsbGVyKCkgeyByZXR1cm4gbnVsbHB0cjsgfQogICAgICAgICBib29s
IGlzRGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKCkgY29uc3QKQEAgLTI1MSwxMCArMjU5
LDEwIEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgYm9vbCBpc1N0YWNrT3ZlcmZsb3dGcmFt
ZSgpIGNvbnN0OwogICAgICAgICBib29sIGlzV2FzbUZyYW1lKCkgY29uc3Q7CiAKLSAgICAgICAg
dm9pZCBzZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhpbnQgY291bnQpIHsgc3RhdGljX2Nh
c3Q8UmVnaXN0ZXIqPih0aGlzKVtDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpc10ucGF5bG9hZCgpID0gY291bnQ7IH0KKyAgICAgICAgdm9pZCBzZXRBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyhpbnQgY291bnQpIHsgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtz
dGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KV0ucGF5bG9hZCgpID0gY291bnQ7IH0KICAgICAgICAgaW5saW5lIHZvaWQgc2V0Q2FsbGVlKEpT
T2JqZWN0Kik7CiAgICAgICAgIGlubGluZSB2b2lkIHNldENvZGVCbG9jayhDb2RlQmxvY2sqKTsK
LSAgICAgICAgdm9pZCBzZXRSZXR1cm5QQyh2b2lkKiB2YWx1ZSkgeyBjYWxsZXJGcmFtZUFuZFBD
KCkucmV0dXJuUEMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4odmFsdWUp
OyB9CisgICAgICAgIHZvaWQgc2V0UmV0dXJuUEModm9pZCogdmFsdWUpIHsgY2FsbGVyRnJhbWVB
bmRQQygpLnJldHVyblBDID0gdmFsdWU7IH0KIAogICAgICAgICBTdHJpbmcgZnJpZW5kbHlGdW5j
dGlvbk5hbWUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0NhbGxGcmFtZUlubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9DYWxsRnJhbWVJbmxpbmVzLmgKaW5kZXggYTk3ZGVjYTUzYmNlMTc5Mjg5YjBjMzgwZDA0ZThm
MmE4NjA0NzdkMS4uZWU3ZWMyYWIxMDRhN2EzNGQ5OGIwZjQzOGY2NDRjMmRjYTFjNTE2OCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUlubGlu
ZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5s
aW5lcy5oCkBAIC0zMiw1MCArMzIsMzkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBS
ZWdpc3RlciYgQ2FsbEZyYW1lOjpyKGludCBpbmRleCkKLXsKLSAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IHRoaXMtPmNvZGVCbG9jaygpOwotICAgIGlmIChjb2RlQmxvY2stPmlzQ29uc3RhbnRS
ZWdpc3RlckluZGV4KGluZGV4KSkKLSAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJl
Z2lzdGVyKj4oJmNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCkpOwotICAgIHJldHVy
biB0aGlzW2luZGV4XTsKLX0KLQogaW5saW5lIFJlZ2lzdGVyJiBDYWxsRnJhbWU6OnIoVmlydHVh
bFJlZ2lzdGVyIHJlZykKIHsKLSAgICByZXR1cm4gcihyZWcub2Zmc2V0KCkpOwotfQotCi1pbmxp
bmUgUmVnaXN0ZXImIENhbGxGcmFtZTo6dW5jaGVja2VkUihpbnQgaW5kZXgpCi17Ci0gICAgUkVM
RUFTRV9BU1NFUlQoaW5kZXggPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7Ci0gICAgcmV0
dXJuIHRoaXNbaW5kZXhdOworICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIqPigmdGhpcy0+Y29kZUJsb2NrKCktPmNvbnN0
YW50UmVnaXN0ZXIocmVnKSk7CisgICAgcmV0dXJuIHRoaXNbcmVnLm9mZnNldCgpXTsKIH0KIAog
aW5saW5lIFJlZ2lzdGVyJiBDYWxsRnJhbWU6OnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyIHJl
ZykKIHsKLSAgICByZXR1cm4gdW5jaGVja2VkUihyZWcub2Zmc2V0KCkpOworICAgIEFTU0VSVCgh
cmVnLmlzQ29uc3RhbnQoKSk7CisgICAgcmV0dXJuIHRoaXNbcmVnLm9mZnNldCgpXTsKIH0KIAog
aW5saW5lIEpTVmFsdWUgQ2FsbEZyYW1lOjpndWFyYW50ZWVkSlNWYWx1ZUNhbGxlZSgpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKCFjYWxsZWUoKS5pc1dhc20oKSk7Ci0gICAgcmV0dXJuIHRoaXNbQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlXS5qc1ZhbHVlKCk7CisgICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nh
c3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXS5qc1ZhbHVlKCk7CiB9CiAKIGlubGluZSBK
U09iamVjdCogQ2FsbEZyYW1lOjpqc0NhbGxlZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFjYWxs
ZWUoKS5pc1dhc20oKSk7Ci0gICAgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXS5v
YmplY3QoKTsKKyAgICByZXR1cm4gdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSldLm9iamVjdCgpOwogfQogCiBpbmxpbmUgQ29kZUJsb2NrKiBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrXS5SZWdpc3Rlcjo6Y29kZUJsb2NrKCk7CisgICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nhc3Q8
aW50PihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spXS5SZWdpc3Rlcjo6Y29kZUJsb2NrKCk7CiB9
CiAKIGlubGluZSBTVVBQUkVTU19BU0FOIENvZGVCbG9jayogQ2FsbEZyYW1lOjp1bnNhZmVDb2Rl
QmxvY2soKSBjb25zdAogewotICAgIHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
a10uUmVnaXN0ZXI6OmFzYW5VbnNhZmVDb2RlQmxvY2soKTsKKyAgICByZXR1cm4gdGhpc1tzdGF0
aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayldLlJlZ2lzdGVyOjphc2FuVW5z
YWZlQ29kZUJsb2NrKCk7CiB9CiAKIGlubGluZSBKU0dsb2JhbE9iamVjdCogQ2FsbEZyYW1lOjps
ZXhpY2FsR2xvYmFsT2JqZWN0KFZNJiB2bSkgY29uc3QKQEAgLTEwMiwxMiArOTEsMTIgQEAgaW5s
aW5lIGJvb2wgQ2FsbEZyYW1lOjppc1dhc21GcmFtZSgpIGNvbnN0CiAKIGlubGluZSB2b2lkIENh
bGxGcmFtZTo6c2V0Q2FsbGVlKEpTT2JqZWN0KiBjYWxsZWUpCiB7Ci0gICAgc3RhdGljX2Nhc3Q8
UmVnaXN0ZXIqPih0aGlzKVtDYWxsRnJhbWVTbG90OjpjYWxsZWVdID0gY2FsbGVlOworICAgIHN0
YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpXSA9IGNhbGxlZTsKIH0KIAogaW5saW5lIHZvaWQgQ2FsbEZyYW1lOjpzZXRDb2Rl
QmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIq
Pih0aGlzKVtDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2tdID0gY29kZUJsb2NrOworICAgIHN0YXRp
Y19jYXN0PFJlZ2lzdGVyKj4odGhpcylbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spXSA9IGNvZGVCbG9jazsKIH0KIAogaW5saW5lIHZvaWQgQ2FsbEZyYW1lOjpzZXRT
Y29wZShpbnQgc2NvcGVSZWdpc3Rlck9mZnNldCwgSlNTY29wZSogc2NvcGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2hlY2twb2ludE9TUkV4aXRTaWRl
U3RhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DaGVja3BvaW50T1NS
RXhpdFNpZGVTdGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg5Mzg5ZDg4OTEzYTJkMGE1NmE3YmMxMmQ0ZDFj
MGM0ZDgwZGQxZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaApAQCAtMCwwICsxLDQxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiQnl0ZWNvZGVJbmRleC5oIgorI2luY2x1ZGUgIk9wZXJhbmRzLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorCisgICAgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4OworICAgIEpTVmFsdWUgdG1wc1ttYXhOdW1DaGVja3BvaW50VG1wc10g
eyB9OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5jcHAKaW5kZXggNTcwYjBhZmEzYmEwODZhNDUwOGE1MWViY2U4MGJmYjViZjU5
Y2QyNS4uMzQwNjU4NmRlOTVkZThjNjJkMTExZTFlZmY4NjllYWZiZTkwYmUzYiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC0z
NCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1l
Q2xvc3VyZS5oIgogI2luY2x1ZGUgIkNhdGNoU2NvcGUuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50
T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNv
ZGVDYWNoZS5oIgogI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgpAQCAtMTIzLDcgKzEyNCw3
IEBAIEpTVmFsdWUgZXZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxs
ZXJGcmFtZSgpOwogICAgIENhbGxTaXRlSW5kZXggY2FsbGVyQ2FsbFNpdGVJbmRleCA9IGNhbGxl
ckZyYW1lLT5jYWxsU2l0ZUluZGV4KCk7CiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sg
PSBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgSlNTY29wZSogY2FsbGVyU2NvcGVDaGFp
biA9IGNhbGxlckZyYW1lLT51bmNoZWNrZWRSKGNhbGxlckNvZGVCbG9jay0+c2NvcGVSZWdpc3Rl
cigpLm9mZnNldCgpKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBjYWxsZXJTY29w
ZUNoYWluID0gY2FsbGVyRnJhbWUtPnVuY2hlY2tlZFIoY2FsbGVyQ29kZUJsb2NrLT5zY29wZVJl
Z2lzdGVyKCkpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIFVubGlua2VkQ29kZUJsb2NrKiBjYWxs
ZXJVbmxpbmtlZENvZGVCbG9jayA9IGNhbGxlckNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2so
KTsKIAogICAgIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCA9IGNhbGxlclVubGlua2VkQ29k
ZUJsb2NrLT5pc0Fycm93RnVuY3Rpb24oKSB8fCBjYWxsZXJVbmxpbmtlZENvZGVCbG9jay0+aXNB
cnJvd0Z1bmN0aW9uQ29udGV4dCgpOwpAQCAtMjE1LDYgKzIxNiw5IEBAIHVuc2lnbmVkIHNpemVP
ZlZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBhcmd1bWVudHMs
IHVpbnQzMl90CiAgICAgfQogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwogICAg
IAorICAgIGlmIChsZW5ndGggPiBtYXhBcmd1bWVudHMpCisgICAgICAgIHRocm93U3RhY2tPdmVy
Zmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOworCiAgICAgaWYgKGxlbmd0aCA+PSBmaXJz
dFZhckFyZ09mZnNldCkKICAgICAgICAgbGVuZ3RoIC09IGZpcnN0VmFyQXJnT2Zmc2V0OwogICAg
IGVsc2UKQEAgLTI1MSw3ICsyNTUsNyBAQCB1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLAogICAgIHJl
dHVybiBsZW5ndGg7CiB9CiAKLXZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1l
bnREZXN0LCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5n
dGgpCit2b2lkIGxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUqIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBvZmZzZXQs
IHVpbnQzMl90IGxlbmd0aCkKIHsKICAgICBpZiAoVU5MSUtFTFkoIWFyZ3VtZW50cy5pc0NlbGwo
KSkgfHwgIWxlbmd0aCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjYzLDMxICsyNjcsMzEgQEAgdm9p
ZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgVmlydHVhbFJlZ2kKICAgICBzd2l0Y2ggKGNlbGwtPnR5cGUoKSkgewogICAgIGNh
c2UgRGlyZWN0QXJndW1lbnRzVHlwZToKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAg
ICBqc0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxP
YmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAg
ICAgICBqc0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9i
YWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgU2NvcGVkQXJndW1lbnRzVHlwZToKICAgICAgICAgc2NvcGUucmVsZWFz
ZSgpOwotICAgICAgICBqc0Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3Vt
ZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBs
ZW5ndGgpOworICAgICAgICBqc0Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0Fy
Z3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSlNJbW11dGFibGVCdXR0ZXJmbHlUeXBlOgogICAg
ICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIGpzQ2FzdDxKU0ltbXV0YWJsZUJ1dHRlcmZs
eSo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0
RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAganNDYXN0PEpTSW1tdXRhYmxl
QnV0dGVyZmx5Kj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxl
bWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOyAKICAgICBkZWZhdWx0
OiB7CiAgICAgICAgIEFTU0VSVChhcmd1bWVudHMuaXNPYmplY3QoKSk7CiAgICAgICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKICAgICAgICAgaWYgKGlzSlNB
cnJheShvYmplY3QpKSB7CiAgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgICAg
ICBqc0Nhc3Q8SlNBcnJheSo+KG9iamVjdCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICAg
ICAganNDYXN0PEpTQXJyYXkqPihvYmplY3QpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0
LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgdW5zaWduZWQgaTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8
IGxlbmd0aCAmJiBvYmplY3QtPmNhbkdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsgKytpKQot
ICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IG9iamVjdC0+
Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVz
dFtpXSA9IG9iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOwogICAgICAgICBmb3Ig
KDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0
LT5nZXQoZ2xvYmFsT2JqZWN0LCBpICsgb2Zmc2V0KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RF
bGVtZW50RGVzdCArIGkpID0gdmFsdWU7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ld
ID0gdmFsdWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0gfQpAQCAtMjk5LDgg
KzMwMyw3IEBAIHZvaWQgc2V0dXBWYXJhcmdzRnJhbWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxGCiAgICAgCiAgICAgbG9hZFZhcmFyZ3Mo
CiAgICAgICAgIGdsb2JhbE9iamVjdCwKLSAgICAgICAgY2FsbEZyYW1lLAotICAgICAgICBjYWxs
ZWVGcmFtZU9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCksCisgICAgICAgIGJp
dHdpc2VfY2FzdDxKU1ZhbHVlKj4oJmNhbGxGcmFtZS0+cihjYWxsZWVGcmFtZU9mZnNldCArIENh
bGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCkpKSwKICAgICAgICAgYXJndW1lbnRzLCBvZmZzZXQs
IGxlbmd0aCk7CiAgICAgCiAgICAgbmV3Q2FsbEZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyhsZW5ndGggKyAxKTsKQEAgLTU0MCw4ICs1NDMsMTMgQEAgcHVibGljOgogICAgICAg
ICBtX2NvZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVCbG9jaygpOwogCiAgICAgICAgIG1faGFuZGxl
ciA9IG51bGxwdHI7Ci0gICAgICAgIGlmICghbV9pc1Rlcm1pbmF0aW9uKSB7Ci0gICAgICAgICAg
ICBpZiAobV9jb2RlQmxvY2spIHsKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrKSB7CisgICAgICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgZXhjZXB0aW9uIGhhbmRsaW5nIGluIGNo
ZWNrcG9pbnRzLgorI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICAgICAgaWYgKHJlbW92ZUNv
ZGVQdHJUYWcobV9yZXR1cm5QQykgPT0gTExJbnQ6OmdldENvZGVQdHI8Tm9QdHJUYWc+KGNoZWNr
cG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZSkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+dm0oKS5maW5kQ2hlY2twb2lu
dE9TUlNpZGVTdGF0ZShtX2NhbGxGcmFtZSk7CisjZW5kaWYKKyAgICAgICAgICAgIGlmICghbV9p
c1Rlcm1pbmF0aW9uKSB7CiAgICAgICAgICAgICAgICAgbV9oYW5kbGVyID0gZmluZEV4Y2VwdGlv
bkhhbmRsZXIodmlzaXRvciwgbV9jb2RlQmxvY2ssIFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxl
cik7CiAgICAgICAgICAgICAgICAgaWYgKG1faGFuZGxlcikKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKQEAgLTU2Myw2ICs1NzEsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIGlmIChzaG91bGRTdG9wVW53aW5kaW5nKQogICAgICAgICAgICAgcmV0dXJuIFN0YWNr
VmlzaXRvcjo6RG9uZTsKIAorICAgICAgICBtX3JldHVyblBDID0gbV9jYWxsRnJhbWUtPnJldHVy
blBDKCkudmFsdWUoKTsKICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CiAg
ICAgfQogCkBAIC01OTksNiArNjA4LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNUZXJtaW5h
dGlvbjsKICAgICBDb2RlQmxvY2sqJiBtX2NvZGVCbG9jazsKICAgICBIYW5kbGVySW5mbyomIG1f
aGFuZGxlcjsKKyAgICBtdXRhYmxlIGNvbnN0IHZvaWQqIG1fcmV0dXJuUEMgeyBudWxscHRyIH07
CiB9OwogCiBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp1bndpbmQoVk0m
IHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQpAQCAtODY4
LDcgKzg3OCw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU09iamVjdCoKICAgICB9CiAKICAgICBWTUVudHJ5
U2NvcGUgZW50cnlTY29wZSh2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICBpZiAoVU5MSUtFTFkoIXZt
LmlzU2FmZVRvUmVjdXJzZVNvZnQoKSkpCisgICAgaWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1Jl
Y3Vyc2VTb2Z0KCkgfHwgYXJncy5zaXplKCkgPiBtYXhBcmd1bWVudHMpKQogICAgICAgICByZXR1
cm4gY2hlY2tlZFJldHVybih0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUpKTsKIAogICAgIGlmIChpc0pTQ2FsbCkgewpAQCAtOTM3LDcgKzk0Nyw3IEBAIEpT
T2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNPCiAgICAgfQogCiAgICAgVk1FbnRyeVNjb3BlIGVudHJ5U2Nv
cGUodm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgaWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vy
c2VTb2Z0KCkpKSB7CisgICAgaWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vyc2VTb2Z0KCkg
fHwgYXJncy5zaXplKCkgPiBtYXhBcmd1bWVudHMpKSB7CiAgICAgICAgIHRocm93U3RhY2tPdmVy
Zmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmgKaW5kZXggMTgxMTI5N2IxOGFkYzJkNzNmZjZmZTFkZjk1ODAyYTZhMGIxNWRjNS4u
ZTgzZjQ4OTJlNDYzOWExMjM2Y2VlMzlkY2RhOTlmZWM4YWRjMDU4ZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKQEAgLTE3MSw3ICsxNzEs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heEFy
Z3VtZW50cyA9IDB4MTAwMDA7CiAgICAgdW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFyYXJncyhKU0ds
b2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZNJiwgSlNWYWx1ZSBhcmd1bWVudHMsIHVuc2lnbmVk
IG51bVVzZWRTdGFja1Nsb3RzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgdW5z
aWduZWQgc2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxG
cmFtZSosIFZNJiwgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMpOwotICAgIHZvaWQgbG9hZFZh
cmFyZ3MoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIFZpcnR1YWxSZWdp
c3RlciBmaXJzdEVsZW1lbnREZXN0LCBKU1ZhbHVlIHNvdXJjZSwgdWludDMyX3Qgb2Zmc2V0LCB1
aW50MzJfdCBsZW5ndGgpOworICAgIHZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCBKU1ZhbHVlIHNvdXJjZSwgdWludDMyX3Qgb2Zmc2V0
LCB1aW50MzJfdCBsZW5ndGgpOwogICAgIHZvaWQgc2V0dXBWYXJhcmdzRnJhbWUoSlNHbG9iYWxP
YmplY3QqLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIENhbGxGcmFtZSogZXhlY0NhbGxlZSwgSlNW
YWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0LCB1aW50MzJfdCBsZW5n
dGgpOwogICAgIHZvaWQgc2V0dXBWYXJhcmdzRnJhbWVBbmRTZXRUaGlzKEpTR2xvYmFsT2JqZWN0
KiwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUg
dGhpc1ZhbHVlLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQs
IHVpbnQzMl90IGxlbmd0aCk7CiAgICAgdm9pZCBzZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZShK
U0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogZXhlY0NhbGxlciwgQ2FsbEZyYW1lKiBleGVjQ2Fs
bGVlLCB1aW50MzJfdCBsZW5ndGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAppbmRleCBhYTdhODc3OGUyMzdiZjdhMDliMGZkY2Rm
ZmU3YWFhZGFkZmI1NmQ5Li44NTViODU2MjNhOWQyOTUxYTg1ZWUxNzk4YmNiMTEzYTNhYzMwZDk1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNp
dG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNp
dG9yLmNwcApAQCAtMjA5LDcgKzIwOSw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFkSW5saW5l
ZEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luCiAgICAg
ICAgIG1fZnJhbWUubV9jYWxsRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgICAgIG1fZnJhbWUubV9p
bmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBtX2Zy
YW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIub2Zmc2V0KCkpLnVuYm94ZWRJbnQzMigpOwor
ICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZy
YW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyKS51bmJveGVkSW50
MzIoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
czsKICAgICAgICAgbV9mcmFtZS5tX2NvZGVCbG9jayA9IGlubGluZUNhbGxGcmFtZS0+YmFzZWxp
bmVDb2RlQmxvY2suZ2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaAppbmRleCAyODIwY2IxNzg0NWNmY2ZjODlmNTU5NmExYjY0OTc1ODRiZmYwNjFlLi42
OTM0MmRlZmFmZWI1M2MzNmZmOWYzYTQwNWNlMDAyNWQ1ZDg1ZGIxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTY0NywyOCArNjQ3LDI4IEBAIHB1
YmxpYzoKICAgICB9CiAjZW5kaWYKIAotICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFk
ZXJQdHIoaW50IGVudHJ5LCBHUFJSZWcgdG8sIEdQUlJlZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIpCisgICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihWaXJ0
dWFsUmVnaXN0ZXIgZW50cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlcikKICAgICB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhmcm9tLCBlbnRy
eSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhmcm9t
LCBlbnRyeS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CiAgICAgfQotICAgIHZv
aWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMihpbnQgZW50cnksIEdQUlJlZyB0bywgR1BS
UmVnIGZyb20gPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKKyAgICB2b2lkIGVtaXRHZXRG
cm9tQ2FsbEZyYW1lSGVhZGVyMzIoVmlydHVhbFJlZ2lzdGVyIGVudHJ5LCBHUFJSZWcgdG8sIEdQ
UlJlZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCiAgICAgewotICAgICAgICBs
b2FkMzIoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CisgICAg
ICAgIGxvYWQzMihBZGRyZXNzKGZyb20sIGVudHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVy
KSksIHRvKTsKICAgICB9CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICB2b2lkIGVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyNjQoaW50IGVudHJ5LCBHUFJSZWcgdG8sIEdQUlJlZyBmcm9tID0gR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCisgICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlcjY0KFZpcnR1YWxSZWdpc3RlciBlbnRyeSwgR1BSUmVnIHRvLCBHUFJSZWcgZnJvbSA9IEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQogICAgIHsKLSAgICAgICAgbG9hZDY0KEFkZHJlc3Mo
ZnJvbSwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOworICAgICAgICBsb2FkNjQoQWRk
cmVzcyhmcm9tLCBlbnRyeS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CiAgICAg
fQogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCi0gICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVI
ZWFkZXIoR1BSUmVnIGZyb20sIGludCBlbnRyeSkKKyAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFt
ZUhlYWRlcihHUFJSZWcgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKLSAgICAg
ICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZW50
cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgICAgIHN0b3JlUHRyKGZyb20sIEFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lz
dGVyKSkpOwogICAgIH0KIAotICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQq
IHZhbHVlLCBpbnQgZW50cnkpCisgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9p
ZCogdmFsdWUsIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKICAgICB7Ci0gICAgICAgIHN0b3JlUHRy
KFRydXN0ZWRJbW1QdHIodmFsdWUpLCBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZElt
bVB0cih2YWx1ZSksIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5Lm9m
ZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgIH0KIAogICAgIHZvaWQgZW1pdEdldENh
bGxlckZyYW1lRnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlcklEIHRvKQpAQCAtNjk2LDE5
ICs2OTYsMTkgQEAgcHVibGljOgogICAgIC8vIGNhbGxlcidzIGZyYW1lIHBvaW50ZXIuIE9uIHNv
bWUgcGxhdGZvcm1zLCB0aGUgY2FsbGVlIGlzIHJlc3BvbnNpYmxlIGZvciBwdXNoaW5nIHRoZQog
ICAgIC8vICJsaW5rIHJlZ2lzdGVyIiBjb250YWluaW5nIHRoZSByZXR1cm4gYWRkcmVzcyBpbiB0
aGUgZnVuY3Rpb24gcHJvbG9ndWUuCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICB2b2lkIGVtaXRQ
dXRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKEdQUlJlZyBmcm9tLCBpbnQgZW50cnkp
CisgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShHUFJSZWcg
ZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKLSAgICAgICAgc3RvcmVQdHIoZnJv
bSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZW50cnkgKiBzdGF0aWNfY2FzdDxwdHJk
aWZmX3Q+KHNpemVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpKSk7
CisgICAgICAgIHN0b3JlUHRyKGZyb20sIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVu
dHJ5Lm9mZnNldCgpICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAt
IHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEoKSkpOwogICAgIH0KICNlbHNlCi0gICAgdm9pZCBl
bWl0UHV0UGF5bG9hZFRvQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJvbG9ndWUoR1BSUmVnIGZyb20s
IGludCBlbnRyeSkKKyAgICB2b2lkIGVtaXRQdXRQYXlsb2FkVG9DYWxsRnJhbWVIZWFkZXJCZWZv
cmVQcm9sb2d1ZShHUFJSZWcgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKLSAg
ICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZW50cnkg
KiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFj
a1BvaW50ZXJEZWx0YSgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICBzdG9yZVB0cihmcm9tLCBBZGRyZXNzKHN0YWNr
UG9pbnRlclJlZ2lzdGVyLCBlbnRyeS5vZmZzZXQoKSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
c2l6ZW9mKFJlZ2lzdGVyKSkgLSBwcm9sb2d1ZVN0YWNrUG9pbnRlckRlbHRhKCkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CiAgICAg
fQogCi0gICAgdm9pZCBlbWl0UHV0VGFnVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShU
cnVzdGVkSW1tMzIgdGFnLCBpbnQgZW50cnkpCisgICAgdm9pZCBlbWl0UHV0VGFnVG9DYWxsRnJh
bWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShUcnVzdGVkSW1tMzIgdGFnLCBWaXJ0dWFsUmVnaXN0ZXIg
ZW50cnkpCiAgICAgewotICAgICAgICBzdG9yZVB0cih0YWcsIEFkZHJlc3Moc3RhY2tQb2ludGVy
UmVnaXN0ZXIsIGVudHJ5ICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIp
KSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEoKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOworICAgICAgICBzdG9yZVB0cih0YWcsIEFk
ZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVudHJ5Lm9mZnNldCgpICogc3RhdGljX2Nhc3Q8
cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEo
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkp
OwogICAgIH0KICNlbmRpZgogICAgIApAQCAtMTE0OCw5ICsxMTQ4LDEwIEBAIHB1YmxpYzoKICAg
ICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCkpOwogICAgICAgICByZXR1cm4g
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNl
dCgpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAgfQotICAgIHN0YXRpYyBBZGRyZXNzIGFkZHJl
c3NGb3IoaW50IG9wZXJhbmQpCisgICAgc3RhdGljIEFkZHJlc3MgYWRkcmVzc0ZvcihPcGVyYW5k
IG9wZXJhbmQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihzdGF0aWNfY2FzdDxW
aXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKKyAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzVG1w
KCkpOworICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3Rlcigp
KTsKICAgICB9CiAKICAgICBzdGF0aWMgQWRkcmVzcyB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlciwgR1BSUmVnIGJhc2VHUFIpCkBAIC0xMTYzLDkgKzExNjQsMTAgQEAgcHVi
bGljOgogICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSk7CiAgICAgICAg
IHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0
ZXIub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgVGFnT2Zmc2V0KTsKICAgICB9Ci0gICAg
c3RhdGljIEFkZHJlc3MgdGFnRm9yKGludCBvcGVyYW5kKQorICAgIHN0YXRpYyBBZGRyZXNzIHRh
Z0ZvcihPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICByZXR1cm4gdGFnRm9yKHN0YXRp
Y19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOworICAgICAgICBBU1NFUlQoIW9wZXJh
bmQuaXNUbXAoKSk7CisgICAgICAgIHJldHVybiB0YWdGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0
ZXIoKSk7CiAgICAgfQogCiAgICAgc3RhdGljIEFkZHJlc3MgcGF5bG9hZEZvcihWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcgYmFzZUdQUikKQEAgLTExNzgsMzAgKzExODAs
MzEgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSk7
CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0
dWFsUmVnaXN0ZXIub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgUGF5bG9hZE9mZnNldCk7
CiAgICAgfQotICAgIHN0YXRpYyBBZGRyZXNzIHBheWxvYWRGb3IoaW50IG9wZXJhbmQpCisgICAg
c3RhdGljIEFkZHJlc3MgcGF5bG9hZEZvcihPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAg
ICByZXR1cm4gcGF5bG9hZEZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQp
KTsKKyAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzVG1wKCkpOworICAgICAgICByZXR1cm4gcGF5
bG9hZEZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAKICAgICAvLyBBY2Nl
c3MgdG8gb3VyIGZpeGVkIGNhbGxlZSBDYWxsRnJhbWUuCi0gICAgc3RhdGljIEFkZHJlc3MgY2Fs
bGVlRnJhbWVTbG90KGludCBzbG90KQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lU2xv
dChWaXJ0dWFsUmVnaXN0ZXIgc2xvdCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChzbG90ID49IENh
bGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycyk7Ci0gICAgICAgIHJldHVybiBBZGRyZXNz
KHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogKHNsb3QgLSBDYWxsZXJG
cmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMpKTsKKyAgICAgICAgQVNTRVJUKHNsb3Qub2Zmc2V0
KCkgPj0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzKTsKKyAgICAgICAgcmV0dXJu
IEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiAoc2xvdCAt
IENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycykub2Zmc2V0KCkpOwogICAgIH0KIAog
ICAgIC8vIEFjY2VzcyB0byBvdXIgZml4ZWQgY2FsbGVlIENhbGxGcmFtZS4KICAgICBzdGF0aWMg
QWRkcmVzcyBjYWxsZWVBcmd1bWVudFNsb3QoaW50IGFyZ3VtZW50KQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGNhbGxlZUZyYW1lU2xvdCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVu
dCkub2Zmc2V0KCkpOworICAgICAgICByZXR1cm4gY2FsbGVlRnJhbWVTbG90KHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhhcmd1bWVudCkpOwogICAgIH0KIAotICAgIHN0
YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lVGFnU2xvdChpbnQgc2xvdCkKKyAgICBzdGF0aWMgQWRk
cmVzcyBjYWxsZWVGcmFtZVRhZ1Nsb3QoVmlydHVhbFJlZ2lzdGVyIHNsb3QpCiAgICAgewogICAg
ICAgICByZXR1cm4gY2FsbGVlRnJhbWVTbG90KHNsb3QpLndpdGhPZmZzZXQoVGFnT2Zmc2V0KTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVBheWxvYWRTbG90KGludCBz
bG90KQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoVmlydHVhbFJl
Z2lzdGVyIHNsb3QpCiAgICAgewogICAgICAgICByZXR1cm4gY2FsbGVlRnJhbWVTbG90KHNsb3Qp
LndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCk7CiAgICAgfQpAQCAtMTIxOCw3ICsxMjIxLDcgQEAg
cHVibGljOgogCiAgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVDYWxsZXJGcmFtZSgpCiAg
ICAgewotICAgICAgICByZXR1cm4gY2FsbGVlRnJhbWVTbG90KDApLndpdGhPZmZzZXQoQ2FsbEZy
YW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xv
dChWaXJ0dWFsUmVnaXN0ZXIoMCkpLndpdGhPZmZzZXQoQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9m
ZnNldCgpKTsKICAgICB9CiAKICAgICBzdGF0aWMgR1BSUmVnIHNlbGVjdFNjcmF0Y2hHUFIoUmVn
aXN0ZXJTZXQgcHJlc2VydmVkKQpAQCAtMTUyNyw3ICsxNTMwLDcgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgQVNTRVJUKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc1Zh
cmFyZ3MoKSk7CiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgcmV0
dXJuIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyk7CisgICAgICAgICAgICByZXR1cm4gQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXM7CiAgICAgICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnRSZWdpc3RlcjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlci5jcHAKaW5kZXggNWRmYjJmMTFkMzY1ZDYzYTEzZjY3MTYxNWI2YjY1MDc0
NmQ3NDIwZS4uNGQyZDNkYjY2YzU3NDhjYjU2MDM4MDAzMjEzZTg4ZjFhODVjZGJlMiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKQEAgLTYx
LDExICs2MSwxMSBAQCBDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1lU2h1ZmZsZXIoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IENhbGxGcmFtZVNodWZmbGVEYQogI2VuZGlmCiAKICAgICBBU1NF
UlQoIWRhdGEuY2FsbGVlLmlzSW5KU1N0YWNrKCkgfHwgZGF0YS5jYWxsZWUudmlydHVhbFJlZ2lz
dGVyKCkuaXNMb2NhbCgpKTsKLSAgICBhZGROZXcoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSksIGRhdGEuY2FsbGVlKTsKKyAgICBhZGROZXcoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlLCBkYXRhLmNhbGxlZSk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhdGEuYXJn
cy5zaXplKCk7ICsraSkgewogICAgICAgICBBU1NFUlQoIWRhdGEuYXJnc1tpXS5pc0luSlNTdGFj
aygpIHx8IGRhdGEuYXJnc1tpXS52aXJ0dWFsUmVnaXN0ZXIoKS5pc0xvY2FsKCkpOwotICAgICAg
ICBhZGROZXcodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSksIGRhdGEuYXJnc1tpXSk7Cisg
ICAgICAgIGFkZE5ldyh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSks
IGRhdGEuYXJnc1tpXSk7CiAgICAgfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAppbmRleCA2MjQzOWJkZjM0NDNi
ODdiZTk5OTYwMmZkOWMzZWJjOTZhZjZhOWY1Li5mZWZjYjkwMmNmMTRhOWZiMWZlNWNmZTU1NWRl
MmFhYzY0ZDVmNmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVT
aHVmZmxlci5oCkBAIC0xMDUsNyArMTA1LDcgQEAgcHVibGljOgogICAgICAgICBkYXRhLmNhbGxl
ZSA9IGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyBDYWxsRnJhbWVTbG90OjpjYWxsZWUgfSktPnJl
Y292ZXJ5KCk7CiAgICAgICAgIGRhdGEuYXJncy5yZXNpemUoYXJnQ291bnQoKSk7CiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJnQ291bnQoKTsgKytpKQotICAgICAgICAgICAgZGF0
YS5hcmdzW2ldID0gZ2V0TmV3KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKS0+cmVjb3Zl
cnkoKTsKKyAgICAgICAgICAgIGRhdGEuYXJnc1tpXSA9IGdldE5ldyh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkpLT5yZWNvdmVyeSgpOwogICAgICAgICBmb3IgKFJl
ZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQo
KSkgewogICAgICAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsgbV9uZXdS
ZWdpc3RlcnNbcmVnXSB9OwogICAgICAgICAgICAgaWYgKCFjYWNoZWRSZWNvdmVyeSkKQEAgLTEy
OCw3ICsxMjgsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQoaXNVbmRlY2lkZWQo
KSk7CiAgICAgICAgIEFTU0VSVCghZ2V0TmV3KGpzVmFsdWVSZWdzKSk7Ci0gICAgICAgIENhY2hl
ZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSB7IGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlKSkgfTsKKyAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292
ZXJ5IHsgZ2V0TmV3KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgfTsKICAgICAgICAgQVNTRVJUKGNh
Y2hlZFJlY292ZXJ5KTsKICAgICAgICAgYWRkTmV3KGpzVmFsdWVSZWdzLCBjYWNoZWRSZWNvdmVy
eS0+cmVjb3ZlcnkoKSk7CiAgICAgfQpAQCAtMTQxLDcgKzE0MSw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIGFzc3VtZUNhbGxlZUlzQ2VsbCgpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0g
ICAgICAgIENhY2hlZFJlY292ZXJ5JiBjYWxsZWVDYWNoZWRSZWNvdmVyeSA9ICpnZXROZXcoVmly
dHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOworICAgICAgICBDYWNoZWRSZWNv
dmVyeSYgY2FsbGVlQ2FjaGVkUmVjb3ZlcnkgPSAqZ2V0TmV3KENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSk7CiAgICAgICAgIHN3aXRjaCAoY2FsbGVlQ2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS50ZWNo
bmlxdWUoKSkgewogICAgICAgICBjYXNlIEluUGFpcjoKICAgICAgICAgICAgIHVwZGF0ZVJlY292
ZXJ5KApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXggNTY1NjY3NWMzNjVkOTllNjFkNDBkZDg2
M2U5YWUwNzc2YzJmMzVhZC4uZjZmMDliOTJhMGNjZjI2NzBlYTdmNmMwZWZiMGJkMTcxNTIwNzU1
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC0zMzEsMTYgKzMzMSwxNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBDb21waWxlT3BTdHJpY3RFcVR5cGUpOwogICAgICAgICBlbnVtIGNsYXNzIENvbXBp
bGVPcEVxVHlwZSB7IEVxLCBORXEgfTsKICAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93
KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BFcVR5cGUsIGludCBq
dW1wVGFyZ2V0KTsKLSAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShpbnQgc3Jj
KTsKKyAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIp
OwogICAgICAgICAKLSAgICAgICAgdm9pZCBlbWl0TG9hZERvdWJsZShpbnQgaW5kZXgsIEZQUmVn
aXN0ZXJJRCB2YWx1ZSk7Ci0gICAgICAgIHZvaWQgZW1pdExvYWRJbnQzMlRvRG91YmxlKGludCBp
bmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZERvdWJsZShW
aXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW1pdExv
YWRJbnQzMlRvRG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3RlcklEIHZhbHVlKTsKIAog
ICAgICAgICBlbnVtIFdyaXRlQmFycmllck1vZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVy
LCBTaG91bGRGaWx0ZXJCYXNlLCBTaG91bGRGaWx0ZXJWYWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFu
ZFZhbHVlIH07CiAgICAgICAgIC8vIHZhbHVlIHJlZ2lzdGVyIGluIHdyaXRlIGJhcnJpZXIgaXMg
dXNlZCBiZWZvcmUgYW55IHNjcmF0Y2ggcmVnaXN0ZXJzCiAgICAgICAgIC8vIHNvIG1heSBzYWZl
bHkgYmUgdGhlIHNhbWUgYXMgZWl0aGVyIG9mIHRoZSBzY3JhdGNoIHJlZ2lzdGVycy4KLSAgICAg
ICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwg
V3JpdGVCYXJyaWVyTW9kZSk7Ci0gICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwq
IG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CisgICAgICAgIHZvaWQg
ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihK
U0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwog
ICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcik7CiAKICAgICAgICAg
Ly8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5k
IHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgpAQCAtNDA0LDMyICs0MDQsMzIgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgZW51bSBGaW5hbE9iamVjdE1vZGUgeyBNYXlCZUZpbmFsLCBL
bm93bk5vdEZpbmFsIH07CiAKLSAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGlu
dCBzcmMsIEpTVmFsdWVSZWdzIGRzdCk7Ci0gICAgICAgIHZvaWQgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihpbnQgZHN0LCBKU1ZhbHVlUmVncyBzcmMpOworICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgSlNWYWx1ZVJlZ3MgZHN0KTsKKyAgICAg
ICAgdm9pZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIEpTVmFs
dWVSZWdzIHNyYyk7CiAKLSAgICAgICAgaW50MzJfdCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50
IHNyYyk7Ci0gICAgICAgIGRvdWJsZSBnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUoaW50IHNyYyk7
CisgICAgICAgIGludDMyX3QgZ2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBz
cmMpOworICAgICAgICBkb3VibGUgZ2V0T3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdp
c3RlciBzcmMpOwogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgYm9vbCBnZXRPcGVy
YW5kQ29uc3RhbnRJbnQoaW50IG9wMSwgaW50IG9wMiwgaW50JiBvcCwgaW50MzJfdCYgY29uc3Rh
bnQpOworICAgICAgICBib29sIGdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIg
b3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBpbnQmIG9wLCBpbnQzMl90JiBjb25zdGFudCk7CiAK
LSAgICAgICAgdm9pZCBlbWl0TG9hZFRhZyhpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnKTsKLSAg
ICAgICAgdm9pZCBlbWl0TG9hZFBheWxvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQp
OworICAgICAgICB2b2lkIGVtaXRMb2FkVGFnKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0
YWcpOworICAgICAgICB2b2lkIGVtaXRMb2FkUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lz
dGVySUQgcGF5bG9hZCk7CiAKICAgICAgICAgdm9pZCBlbWl0TG9hZChjb25zdCBKU1ZhbHVlJiB2
LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKLSAgICAgICAgdm9pZCBlbWl0
TG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lz
dGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZDIo
aW50IGluZGV4MSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBpbnQgaW5k
ZXgyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpOworICAgICAgICB2b2lk
IGVtaXRMb2FkKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5
bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICB2b2lk
IGVtaXRMb2FkMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBw
YXlsb2FkMSwgVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5
bG9hZDIpOwogCi0gICAgICAgIHZvaWQgZW1pdFN0b3JlKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0
YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0
ZXIpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZShpbnQgaW5kZXgsIGNvbnN0IEpTVmFsdWUgY29u
c3RhbnQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9p
ZCBlbWl0U3RvcmVJbnQzMihpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRl
eElzSW50MzIgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoaW50IGluZGV4
LCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7Ci0gICAg
ICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9v
bCBpbmRleElzQ2VsbCA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVCb29sKGludCBp
bmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29sID0gZmFsc2UpOwotICAg
ICAgICB2b2lkIGVtaXRTdG9yZURvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7
CisgICAgICAgIHZvaWQgZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcs
IFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIp
OworICAgICAgICB2b2lkIGVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIsIGNvbnN0IEpTVmFsdWUg
Y29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAg
dm9pZCBlbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwg
Ym9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlSW50MzIo
VmlydHVhbFJlZ2lzdGVyLCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIg
PSBmYWxzZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIsIFJl
Z2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCA9IGZhbHNlKTsKKyAgICAgICAgdm9p
ZCBlbWl0U3RvcmVCb29sKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29s
IGluZGV4SXNCb29sID0gZmFsc2UpOworICAgICAgICB2b2lkIGVtaXRTdG9yZURvdWJsZShWaXJ0
dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CiAKLSAgICAgICAgdm9pZCBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoaW50IHZpcnR1YWxSZWdpc3RlckluZGV4KTsKLSAgICAgICAg
dm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaW50IHZpcnR1YWxSZWdpc3RlckluZGV4
LCBSZWdpc3RlcklEIHRhZyk7CisgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcpOwogCiAgICAgICAgIHZvaWQg
Y29tcGlsZUdldEJ5SWRIb3RQYXRoKGNvbnN0IElkZW50aWZpZXIqKTsKIApAQCAtNDM4LDE3ICs0
MzgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEJpbmFyeURvdWJsZU9w
KGNvbnN0IEluc3RydWN0aW9uICosIE9wZXJhbmRUeXBlcywgSnVtcExpc3QmIG5vdEludDMyT3Ax
LCBKdW1wTGlzdCYgbm90SW50MzJPcDIsIGJvb2wgb3AxSXNJblJlZ2lzdGVycyA9IHRydWUsIGJv
b2wgb3AySXNJblJlZ2lzdGVycyA9IHRydWUpOwogCiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0
KQotICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJ
RCBkc3QpOwogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpOwotICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGludCBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIGludCBzcmMyLCBSZWdpc3RlcklEIGRz
dDIpOwogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3Rl
ciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxSZWdpc3RlciBzcmMyLCBSZWdpc3RlcklE
IGRzdDIpOwotICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgUmVn
aXN0ZXJJRCBmcm9tID0gcmVnVDApOwogICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tID0gcmVnVDApOwotICAgICAg
ICB2b2lkIGVtaXRTdG9yZUNlbGwoaW50IGRzdCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIC8q
IG9ubHkgdXNlZCBpbiBKU1ZhbHVlMzJfNjQgKi8gPSBmYWxzZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHBheWxvYWQpOwotICAgICAgICB9Ci0g
ICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklE
IHBheWxvYWQpCisgICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgZHN0
LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgLyogb25seSB1c2VkIGluIEpTVmFsdWUzMl82NCAq
LyA9IGZhbHNlKQogICAgICAgICB7CiAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcGF5bG9hZCk7CiAgICAgICAgIH0KQEAgLTQ1NiwyOSArNDQ5LDI5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBKdW1wIGVtaXRKdW1wSWZCb3RoSlNDZWxscyhSZWdpc3RlcklELCBS
ZWdpc3RlcklELCBSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZK
U0NlbGwoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKFJlZ2lzdGVySUQpOwotICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChSZWdpc3RlcklELCBpbnQgVlJlZyk7CisgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKFJlZ2lzdGVySUQsIFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEp1bXAgZW1p
dEp1bXBJZk5vdEludChSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEIHNjcmF0Y2gp
OwogICAgICAgICBQYXRjaGFibGVKdW1wIGVtaXRQYXRjaGFibGVKdW1wSWZOb3RJbnQoUmVnaXN0
ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KFJlZ2lzdGVySUQp
OwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdE51bWJlcihSZWdpc3RlcklEKTsK
ICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoUmVnaXN0ZXJJRCwgUmVnaXN0
ZXJJRCwgUmVnaXN0ZXJJRCBzY3JhdGNoKTsKIAotICAgICAgICB2b2lkIGNvbXBpbGVHZXRCeUlk
SG90UGF0aChpbnQgYmFzZVZSZWcsIGNvbnN0IElkZW50aWZpZXIqKTsKKyAgICAgICAgdm9pZCBj
b21waWxlR2V0QnlJZEhvdFBhdGgoVmlydHVhbFJlZ2lzdGVyIGJhc2VSZWcsIGNvbnN0IElkZW50
aWZpZXIqKTsKIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJ
bnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29t
cGFyZUFuZEp1bXBJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRp
b25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmly
dHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBS
ZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
ICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlv
bmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoaW50
IGRzdCwgaW50IG9wMSwgaW50IG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZv
aWQgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxS
ZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24pOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVV
bnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsK
LSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKGludCBvcDEsIGlu
dCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZv
aWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBW
aXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24p
OwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90
IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoaW50
IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBE
b3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2Jh
bE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBv
cDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0
aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICAKICAgICAgICAgdm9pZCBhc3NlcnRTdGFj
a1BvaW50ZXJPZmZzZXQoKTsKIApAQCAtNjg2LDggKzY3OSw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4
cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0
aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHZvaWQgZW1p
dFJlc29sdmVDbG9zdXJlKGludCBkc3QsIGludCBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwotICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVj
dHVyZUNoZWNrKGludCBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CisgICAgICAg
IHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdp
c3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgp
OworICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BS
UmVnKTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVl
Kiogb3BlcmFuZCwgR1BSUmVnKTsKQEAgLTY5NSwyMCArNjg4LDIwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBv
cGVyYW5kLCBHUFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9hZCk7CiAgICAgICAgIHZvaWQgZW1pdEdl
dFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyB0YWcsIEdQUlJlZyBwYXls
b2FkKTsKICNlbmRpZgotICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKGludCBzY29wZSwg
dWludHB0cl90IG9wZXJhbmQpOworICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1
YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXRO
b3RpZnlXcml0ZShXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRl
KEdQUlJlZyBwb2ludGVyVG9TZXQpOwotICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJs
ZShKU1ZhbHVlKiBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKLSAgICAgICAg
dm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3Bl
cmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwotICAgICAgICB2b2lkIGVtaXRQdXRD
bG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hw
b2ludFNldCopOworICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBv
cGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKKyAgICAgICAg
dm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3Bl
cmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOworICAgICAgICB2
b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9w
ZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAg
IHZvaWQgZW1pdEluaXRSZWdpc3RlcihpbnQgZHN0KTsKKyAgICAgICAgdm9pZCBlbWl0SW5pdFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7CiAKLSAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxs
RnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkpOworICAgICAgICB2b2lkIGVt
aXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rl
cik7CiAKLSAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoaW50IHNyYyk7Ci0gICAg
ICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYyk7Ci0gICAgICAgIGJvb2wgaXNP
cGVyYW5kQ29uc3RhbnRDaGFyKGludCBzcmMpOworICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50
T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50
SW50KFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFy
KFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBl
bmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblBy
b2ZpbGVkRnVuY3Rpb24+CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRo
SUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRGdW5jdGlvbiwgTm9u
UHJvZmlsZWRGdW5jdGlvbik7CkBAIC03MzUsNyArNzI4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNTZXQoKSk7CiAgICAgICAgICAgICArK2l0
ZXI7CiAgICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgaW50IHZpcnR1YWxSZWdpc3RlckluZGV4KTsK
KyAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgdm9pZCBsaW5rQWxsU2xv
d0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywK
ICAgICAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKIApAQCAtNzU1LDEzICs3NDgsMTMgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tBbmRTbG93UGF0aFJldHVyblR5cGUoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPik7CiAjZW5kaWYKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdp
dGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4pOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+LCBpbnQpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBpbnQpOworICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3Vs
dFdpdGhQcm9maWxlKE1ldGFkYXRhJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVu
YWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3Bl
cmF0aW9uLCBpbnQgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb24o
T3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4g
YXJncykKICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlw
ZT4oYXJncy4uLik7CiAgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwpAQCAtODA1LDcgKzc5OCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRh
LCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6
OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0
YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgaW50IHJlc3VsdCwgQXJn
cy4uLiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1l
dGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwg
QXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVy
YXRpb25UeXBlPihhcmdzLi4uKTsKICAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRp
b24sIHJlc3VsdCk7CkBAIC04NjUsNyArODU4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYK
IAogI2lmbmRlZiBOREVCVUcKLSAgICAgICAgdm9pZCBwcmludEJ5dGVjb2RlT3BlcmFuZFR5cGVz
KGludCBzcmMxLCBpbnQgc3JjMik7CisgICAgICAgIHZvaWQgcHJpbnRCeXRlY29kZU9wZXJhbmRU
eXBlcyhWaXJ0dWFsUmVnaXN0ZXIgc3JjMSwgVmlydHVhbFJlZ2lzdGVyIHNyYzIpOwogI2VuZGlm
CiAKICNpZiBFTkFCTEUoU0FNUExJTkdfRkxBR1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRBcml0aG1ldGljLmNwcAppbmRleCAzNDU4NzQ0ZmJjZGQ1M2FjZjlhNDMzMjhiYzQ5NGIw
ZmVkY2I4OTNmLi4zYTMyYzMyNjE4OWZhYjE5N2Q3Y2Y5ZjkxZDVmNmI0YjMxMDIwMmM0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKQEAgLTE1OCw4ICsx
NTgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qYmVsb3dlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KHJlZ1QwKTsKQEAgLTE3MiwxMyArMTcyLDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5v
ZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBv
cDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGlu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24pOwogfQogCi12b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcEltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25l
ZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewogICAgIC8vIFdlIGdl
bmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBmYXN0IHBh
dGg6CiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGNvbnN0YW50IGludCBpbW1lZGlhdGUKQEAg
LTIzMCwxMyArMjMwLDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJl
bGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgp
OwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5
dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5k
SnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQg
dGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2Nv
bXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24p
CiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKQEAgLTI1NiwxMyArMjU2LDEzIEBAIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhz
Lm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29k
ZS5tX3JoczsKICAgICBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoZHN0LCBvcDEsIG9wMiwgY29u
ZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChpbnQgZHN0
LCBpbnQgb3AxLCBpbnQgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQg
SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVh
bFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbiBj
b25kaXRpb24pCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKQEAgLTI4NCwxMyArMjg0LDEz
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBT
bG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRp
dGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7
Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0
ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJ
bXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3Bl
cmF0aW9uLCBpbnZlcnQsIGl0ZXIpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3dJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3Ry
dWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFU
SU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3Rl
ciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3Ry
dWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFU
SU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7CiAKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2lu
ZyBjYXNlcyBpbiB0aGUgc2xvdyBwYXRoOgpAQCAtMzg3LDcgKzM4Nyw3IEBAIHZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFy
Z2V0LCBzaXplX3QKIHZvaWQgSklUOjplbWl0X29wX2luYyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSW5jPigpOwotICAgIGludCBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdC5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwogICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CkBAIC0zOTksNyArMzk5LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKLSAg
ICBpbnQgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDApOwpAQCAtNDE1LDkgKzQxNSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQo
KTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9y
aHM7CiAKICAgICAvLyBNYWtlIHN1cmUgcmVnaXN0ZXJzIGFyZSBjb3JyZWN0IGZvciB4ODYgSURJ
ViBpbnN0cnVjdGlvbnMuCiAgICAgQVNTRVJUKHJlZ1QwID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsK
QEAgLTQ5MSw5ICs0OTEsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU25pcHBl
dEdlbmVyYXRvcj4KIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxpbmdQb2xpY3kgcHJvZmlsaW5nUG9s
aWN5KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigp
OwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3Ax
ID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhz
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJl
Z2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBK
U1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKQEAgLTUzOCw4ICs1Mzgs
OCBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsaQogdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCk7Ci0gICAgaW50IHJlc3VsdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX29wZXJh
bmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDApOwpAQCAtNTk5LDkgKzU5OSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6
OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgSklUUmlnaHRTaGlmdEdlbmVyYXRvcjo6U2hpZnRUeXBlIHNuaXBwZXRTaGlmdFR5cGUp
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0g
ICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBi
eXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAtNjc0LDggKzY3NCw4IEBA
IHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9m
aWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOCiB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5h
cnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIE5vblByb2ZpbGVk
RnVuY3Rpb24gbm9uUHJvZmlsZWRGdW5jdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wZXJhbmQgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1l
IHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgpAQCAtNzI0LDkgKzcyNCw5IEBAIHRlbXBsYXRlIDx0
eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9u
LCB0eXBlbmFtZSBOCiB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDPEdl
bmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
UHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9uIG5v
blByb2ZpbGVkRnVuY3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0g
Ynl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwpA
QCAtNzk5LDcgKzc5OSw3IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJ
QzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjCiAgICAgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29k
ZS5tX2RzdDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QxKTsKQEAgLTg0NSw5ICs4NDUsOSBAQCB2b2lkIEpJVDo6ZW1pdE1h
dGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1
Y3Rpb24qCiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgp
OwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0g
ICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBi
eXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwpAQCAtOTA2LDkgKzkwNiw5IEBA
IHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0
aElDLCBjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0g
ICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0
ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwog
CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2Fs
bC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCmluZGV4IGMzZjhh
YTBjN2ZhZjRlYWQ0MzQ2N2Q1NDI3MjZhZThhYzkyNTg3ZGYuLmIyYmZjZTYzMzdkOWJlMDJkNjFm
Mzg5NWNlNWVjYTNhMGQ3ODMyMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNw
cApAQCAtNTEsNyArNTEsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0
UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7CiAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAg
LTY2LDcgKzY2LDcgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUs
IENhbGxMaW5rSW5mbyopCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PGlu
dD4oYnl0ZWNvZGUubV9hcmd2KTsKIAogICAgIGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAm
JiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihyZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlz
KDApLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1Ro
aXMoMCkpLCByZWdUMCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CiAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZWdUMCk7CiAgICAgICAgIHN0b3JlMzIocmVnVDAsIG1ldGFkYXRhLm1fY2FsbExp
bmtJbmZvLm1fYXJyYXlQcm9maWxlLmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CkBA
IC04NSw5ICs4NSw5IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAsIHZvaWQ+CiBKSVQ6OmNvbXBpbGVT
ZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvKQogewotICAg
IGludCB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQg
YXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHMub2Zmc2V0KCk7Ci0gICAgaW50IGZpcnN0
RnJlZVJlZ2lzdGVyID0gYnl0ZWNvZGUubV9maXJzdEZyZWUub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOworICAgIFZpcnR1YWxS
ZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKKyAgICBpbnQgZmlyc3RG
cmVlUmVnaXN0ZXIgPSBieXRlY29kZS5tX2ZpcnN0RnJlZS5vZmZzZXQoKTsgLy8gRklYTUU6IFdo
eSBpcyB0aGlzIGEgdmlydHVhbCByZWdpc3RlciBpZiB3ZSBuZXZlciB1c2UgaXQgYXMgb25lLi4u
CiAgICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0ID0gYnl0ZWNvZGUubV9maXJzdFZhckFyZzsKIAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMSk7CkBAIC0xODksNyAr
MTg5LDcgQEAgYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRl
Y29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ24KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgYnl0ZWNvZGUubV9hcmdjOyArK2kpIHsKICAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tp
XSA9CiAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCi0gICAg
ICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkgLSBieXRlY29kZS5tX2Fy
Z3YsCisgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGkpIC0gYnl0ZWNvZGUubV9hcmd2LAogICAgICAgICAgICAgICAgIERhdGFGb3JtYXRKUyk7
CiAgICAgfQogICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9CkBAIC0yMDYsNyArMjA2LDcgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNp
Z25lZCBjYWxsTGlua0luZm9JbmQKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNv
ZGVJRDsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGlu
dCBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7CiAKICAgICAvKiBDYWxsZXIgYWx3YXlzOgog
ICAgICAgICAtIFVwZGF0ZXMgY2FsbEZyYW1lUmVnaXN0ZXIgdG8gY2FsbGVlIGNhbGxGcmFtZS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCmluZGV4IGI3ZDBj
YTIzNThiZTUyNTAxOGEzZjRlOTYxNmQ5Y2I4NDhmZmY1MjEuLmUwN2E4MzNkNGM4NTNiOWM3YTAy
ZGU4Yjc0NjAxZGYzMDY2YmFlMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklURXhjZXB0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRF
eGNlcHRpb25zLmNwcApAQCAtNTAsNyArNTAsNyBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0mIHZt
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBpZiAoT3B0aW9uczo6YnJlYWtPblRocm93KCkp
IHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0b3BKU0NhbGxGcmFtZS0+Y29kZUJs
b2NrKCk7CiAgICAgICAgIGRhdGFMb2coIkluIGNhbGwgZnJhbWUgIiwgUmF3UG9pbnRlcih0b3BK
U0NhbGxGcmFtZSksICIgZm9yIGNvZGUgYmxvY2sgIiwgY29kZUJsb2NrLCAiXG4iKTsKLSAgICAg
ICAgQ1JBU0goKTsKKyAgICAgICAgV1RGQnJlYWtwb2ludFRyYXAoKTsKICAgICB9CiAgICAgCiAg
ICAgaWYgKGF1dG8qIHNoYWRvd0NoaWNrZW4gPSB2bS5zaGFkb3dDaGlja2VuKCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCmluZGV4IGZjZThiYjc0NzY2Mzc4Mzc5OGM5OTc1
NmU4ZGY3Zjg5ZTA5YmI4NWIuLjljMTE3MzQzNDBjMzY0NzIxYjM1OGI5NTE2ZjY4NzA5MzM0YzVh
MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCkBAIC00OCwxOSArNDgs
MjAgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgSklUOjplbWl0TG9h
ZEZvckFycmF5TW9kZShjb25zdCBJbnN0cnVjdGkKICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0
YW50RG91YmxlKGludCBzcmMpCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25z
dGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBtX2NvZGVCbG9j
ay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KS5pc0RvdWJsZSgpOworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50
T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6
OmdldENvbnN0YW50T3BlcmFuZChpbnQgc3JjKQorQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6
Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgQVNTRVJUKG1f
Y29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpKTsKKyAgICBBU1NFUlQoc3Jj
LmlzQ29uc3RhbnQoKSk7CiAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMp
OwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFk
ZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0
ZXIgZW50cnkpCiB7CisgICAgQVNTRVJUKGVudHJ5LmlzSGVhZGVyKCkpOwogI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0
YWdGb3IoZW50cnkpKTsKICAgICBzdG9yZTMyKGZyb20sIHBheWxvYWRGb3IoZW50cnkpKTsKQEAg
LTE0Myw3ICsxNDQsNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6
YXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aQogICAgIHJldHVybiBjYWxs
OwogfQogCi1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgaW50IGRzdCkKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFs
UmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAt
MTU1LDcgKzE1Niw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjph
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlCiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIE1ldGFkYXRhPgotQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6
OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUo
TWV0YWRhdGEmIG1ldGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1
bmN0aW9uLCBpbnQgZHN0KQorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6
OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUo
TWV0YWRhdGEmIG1ldGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1
bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKQEAgLTE2Nyw5ICsxNjgsOSBAQCBBTFdBWVNf
SU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZQogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyLCBpbnQgdlJlZykKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93
Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZp
cnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdElt
bWVkaWF0ZSh2UmVnKSkKKyAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRl
KHJlZykpCiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIH0KIApAQCAtMjg0LDkgKzI4NSw5
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnNhbXBsZUNvZGVCbG9jayhDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKICNlbmRpZgogI2VuZGlmCiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3Bl
cmFuZENvbnN0YW50Q2hhcihpbnQgc3JjKQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVy
YW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIG1fY29k
ZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXND
ZWxsKCkpLT5sZW5ndGgoKSA9PSAxOworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwogfQogCiBpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUpCkBA
IC0zNjMsMjYgKzM2NCwyNiBAQCBpbmxpbmUgSklUQXJyYXlNb2RlIEpJVDo6Y2hvb3NlQXJyYXlN
b2RlKEFycmF5UHJvZmlsZSogcHJvZmlsZSkKICAgICByZXR1cm4gSklUQ29udGlndW91czsKIH0K
IAotQUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KGludCBz
cmMpCitBTFdBWVNfSU5MSU5FIGludDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmly
dHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyku
YXNJbnQzMigpOwogfQogCi1BTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25z
dGFudERvdWJsZShpbnQgc3JjKQorQUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVyYW5k
Q29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdEluaXRSZWdpc3RlcihpbnQgZHN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIHN0b3JlVHJ1c3RlZFZh
bHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0KSk7CiB9CiAKICNpZiBVU0UoSlNWQUxV
RTMyXzY0KQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkVGFnKGludCBpbmRleCwgUmVnaXN0
ZXJJRCB0YWcpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkVGFnKFZpcnR1YWxSZWdpc3RlciBy
ZWcsIFJlZ2lzdGVySUQgdGFnKQogewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJl
Z2lzdGVySW5kZXgoaW5kZXgpKSB7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKICAgICAg
ICAgbW92ZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQoaW5kZXgpLnRhZygpKSwgdGFnKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM5MCw5ICszOTEsOSBAQCBpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRMb2FkVGFnKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcpCiAgICAgbG9hZDMyKHRhZ0Zv
cihpbmRleCksIHRhZyk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRQYXlsb2FkKGlu
dCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFBh
eWxvYWQoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkKQogewotICAgIGlm
IChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7CisgICAgaWYg
KHJlZy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgbW92ZShJbW0zMihnZXRDb25zdGFudE9wZXJh
bmQoaW5kZXgpLnBheWxvYWQoKSksIHBheWxvYWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtNDA2LDEzNiArNDA3LDEzMyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKGNvbnN0IEpT
VmFsdWUmIHYsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQpCiAgICAgbW92ZShJ
bW0zMih2LnRhZygpKSwgdGFnKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBKU1ZhbHVlUmVncyBkc3QpCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0R2V0KFZpcnR1YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVSZWdzIGRzdCkK
IHsKICAgICBlbWl0TG9hZChzcmMsIGRzdC50YWdHUFIoKSwgZHN0LnBheWxvYWRHUFIoKSk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRz
dCwgSlNWYWx1ZVJlZ3MgZnJvbSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkKIHsKICAg
ICBlbWl0U3RvcmUoZHN0LCBmcm9tLnRhZ0dQUigpLCBmcm9tLnBheWxvYWRHUFIoKSk7CiB9CiAK
LWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVn
aXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRM
b2FkKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxv
YWQsIFJlZ2lzdGVySUQgYmFzZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh0YWcgIT0gcGF5bG9h
ZCk7CiAKICAgICBpZiAoYmFzZSA9PSBjYWxsRnJhbWVSZWdpc3RlcikgewogICAgICAgICBSRUxF
QVNFX0FTU0VSVChwYXlsb2FkICE9IGJhc2UpOwotICAgICAgICBlbWl0TG9hZFBheWxvYWQoaW5k
ZXgsIHBheWxvYWQpOwotICAgICAgICBlbWl0TG9hZFRhZyhpbmRleCwgdGFnKTsKKyAgICAgICAg
ZW1pdExvYWRQYXlsb2FkKHJlZywgcGF5bG9hZCk7CisgICAgICAgIGVtaXRMb2FkVGFnKHJlZywg
dGFnKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFZpcnR1YWxSZWdpc3RlciB0YXJn
ZXQgeyBpbmRleCB9OwogICAgIGlmIChwYXlsb2FkID09IGJhc2UpIHsgLy8gYXZvaWQgc3RvbXBp
bmcgYmFzZQotICAgICAgICBsb2FkMzIodGFnRm9yKHRhcmdldCwgYmFzZSksIHRhZyk7Ci0gICAg
ICAgIGxvYWQzMihwYXlsb2FkRm9yKHRhcmdldCwgYmFzZSksIHBheWxvYWQpOworICAgICAgICBs
b2FkMzIodGFnRm9yKHJlZywgYmFzZSksIHRhZyk7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9y
KHJlZywgYmFzZSksIHBheWxvYWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbG9h
ZDMyKHBheWxvYWRGb3IodGFyZ2V0LCBiYXNlKSwgcGF5bG9hZCk7Ci0gICAgbG9hZDMyKHRhZ0Zv
cih0YXJnZXQsIGJhc2UpLCB0YWcpOworICAgIGxvYWQzMihwYXlsb2FkRm9yKHJlZywgYmFzZSks
IHBheWxvYWQpOworICAgIGxvYWQzMih0YWdGb3IocmVnLCBiYXNlKSwgdGFnKTsKIH0KIAotaW5s
aW5lIHZvaWQgSklUOjplbWl0TG9hZDIoaW50IGluZGV4MSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdp
c3RlcklEIHBheWxvYWQxLCBpbnQgaW5kZXgyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQg
cGF5bG9hZDIpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkMihWaXJ0dWFsUmVnaXN0ZXIgcmVn
MSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBWaXJ0dWFsUmVnaXN0ZXIg
cmVnMiwgUmVnaXN0ZXJJRCB0YWcyLCBSZWdpc3RlcklEIHBheWxvYWQyKQogewotICAgIGVtaXRM
b2FkKGluZGV4MiwgdGFnMiwgcGF5bG9hZDIpOwotICAgIGVtaXRMb2FkKGluZGV4MSwgdGFnMSwg
cGF5bG9hZDEpOworICAgIGVtaXRMb2FkKHJlZzIsIHRhZzIsIHBheWxvYWQyKTsKKyAgICBlbWl0
TG9hZChyZWcxLCB0YWcxLCBwYXlsb2FkMSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExv
YWREb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkK
IHsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkg
ewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2Rl
QmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpOworICAgIGlmIChyZWcuaXNDb25zdGFudCgp
KSB7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2Nv
ZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRydXN0
ZWRJbW1QdHIoJmluQ29uc3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQotICAgICAgICBs
b2FkRG91YmxlKGFkZHJlc3NGb3IoaW5kZXgpLCB2YWx1ZSk7CisgICAgICAgIGxvYWREb3VibGUo
YWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJ
bnQzMlRvRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQg
SklUOjplbWl0TG9hZEludDMyVG9Eb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3Rl
cklEIHZhbHVlKQogewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5k
ZXgoaW5kZXgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBv
b2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCk7CisgICAgaWYgKHJlZy5p
c0NvbnN0YW50KCkpIHsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50
UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGNoYXIq
IGJ5dGVQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmluQ29uc3RhbnRQb29sKTsK
ICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoQWJzb2x1dGVBZGRyZXNzKGJ5dGVQb2ludGVy
ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgdmFsdWUpOwog
ICAgIH0gZWxzZQotICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShwYXlsb2FkRm9yKGluZGV4
KSwgdmFsdWUpOworICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShwYXlsb2FkRm9yKHJlZyks
IHZhbHVlKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoaW50IGluZGV4LCBSZWdp
c3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCitpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZywg
UmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCiB7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHRhcmdldCB7IGluZGV4IH07Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHRh
cmdldCwgYmFzZSkpOwotICAgIHN0b3JlMzIodGFnLCB0YWdGb3IodGFyZ2V0LCBiYXNlKSk7Cisg
ICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZywgYmFzZSkpOworICAgIHN0b3JlMzIo
dGFnLCB0YWdGb3IocmVnLCBiYXNlKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3Jl
SW50MzIoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQor
aW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdp
c3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQogewotICAgIHN0b3JlMzIocGF5bG9h
ZCwgcGF5bG9hZEZvcihpbmRleCkpOworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihy
ZWcpKTsKICAgICBpZiAoIWluZGV4SXNJbnQzMikKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IoaW5kZXgpKTsKKyAgICAgICAgc3RvcmUzMihU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IocmVnKSk7CiB9CiAKLWlubGlu
ZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBUcnVzdGVkSW1tMzIgcGF5bG9h
ZCwgYm9vbCBpbmRleElzSW50MzIpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMyKFZp
cnR1YWxSZWdpc3RlciByZWcsIFRydXN0ZWRJbW0zMiBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQz
MikKIHsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IoaW5kZXgpKTsKKyAgICBzdG9y
ZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVnKSk7CiAgICAgaWYgKCFpbmRleElzSW50MzIpCi0g
ICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKGlu
ZGV4KSk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwg
dGFnRm9yKHJlZykpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUNlbGwoaW50IGlu
ZGV4LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0NlbGwpCitpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRTdG9yZUNlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2Fk
LCBib29sIGluZGV4SXNDZWxsKQogewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihp
bmRleCkpOworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcpKTsKICAgICBpZiAo
IWluZGV4SXNDZWxsKQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSwgdGFnRm9yKGluZGV4KSk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkNlbGxUYWcpLCB0YWdGb3IocmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0
b3JlQm9vbChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQm9vbCkK
K2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlQm9vbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdp
c3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0Jvb2wpCiB7Ci0gICAgc3RvcmUzMihwYXlsb2Fk
LCBwYXlsb2FkRm9yKGluZGV4KSk7CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJl
ZykpOwogICAgIGlmICghaW5kZXhJc0Jvb2wpCi0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkJvb2xlYW5UYWcpLCB0YWdGb3IoaW5kZXgpKTsKKyAgICAgICAgc3RvcmUzMihU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksIHRhZ0ZvcihyZWcpKTsKIH0KIAotaW5s
aW5lIHZvaWQgSklUOjplbWl0U3RvcmVEb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFs
dWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVn
LCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0gICAgc3RvcmVEb3VibGUodmFsdWUsIGFkZHJlc3NG
b3IoaW5kZXgpKTsKKyAgICBzdG9yZURvdWJsZSh2YWx1ZSwgYWRkcmVzc0ZvcihyZWcpKTsKIH0K
IAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoaW50IGluZGV4LCBjb25zdCBKU1ZhbHVlIGNv
bnN0YW50LCBSZWdpc3RlcklEIGJhc2UpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0
dWFsUmVnaXN0ZXIgcmVnLCBjb25zdCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdpc3RlcklEIGJhc2Up
CiB7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRhcmdldCB7IGluZGV4IH07Ci0gICAgc3RvcmUzMihJ
bW0zMihjb25zdGFudC5wYXlsb2FkKCkpLCBwYXlsb2FkRm9yKHRhcmdldCwgYmFzZSkpOwotICAg
IHN0b3JlMzIoSW1tMzIoY29uc3RhbnQudGFnKCkpLCB0YWdGb3IodGFyZ2V0LCBiYXNlKSk7Cisg
ICAgc3RvcmUzMihJbW0zMihjb25zdGFudC5wYXlsb2FkKCkpLCBwYXlsb2FkRm9yKHJlZywgYmFz
ZSkpOworICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQudGFnKCkpLCB0YWdGb3IocmVnLCBiYXNl
KSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGlu
dCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7CiAgICAgaWYgKCFtX2NvZGVCbG9j
ay0+aXNLbm93bk5vdEltbWVkaWF0ZSh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpIHsKLSAgICAgICAg
aWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleCh2aXJ0dWFsUmVnaXN0ZXJJ
bmRleCkpCisgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZW1p
dEp1bXBJZk5vdEpTQ2VsbCh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWcpKTsKICAgICB9CiB9CiAKLWlubGluZSB2
b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGludCB2aXJ0dWFsUmVnaXN0ZXJJ
bmRleCwgUmVnaXN0ZXJJRCB0YWcpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKIHsKICAgICBp
ZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHZpcnR1YWxSZWdpc3RlckluZGV4
KSkgewotICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHZp
cnR1YWxSZWdpc3RlckluZGV4KSkKKyAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAg
ICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwodGFnKSk7CiAgICAgfQogfQogCi1BTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChpbnQgc3JjKQorQUxXQVlTX0lOTElO
RSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsK
LSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykgJiYg
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworICAgIHJldHVybiBzcmMuaXNDb25z
dGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKIH0KIAotQUxXQVlT
X0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KGludCBvcDEsIGludCBvcDIs
IGludCYgb3AsIGludDMyX3QmIGNvbnN0YW50KQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0
T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBv
cDIsIGludCYgb3AsIGludDMyX3QmIGNvbnN0YW50KQogewogICAgIGlmIChpc09wZXJhbmRDb25z
dGFudEludChvcDEpKSB7CiAgICAgICAgIGNvbnN0YW50ID0gZ2V0Q29uc3RhbnRPcGVyYW5kKG9w
MSkuYXNJbnQzMigpOwpAQCAtNTU1LDExICs1NTMsMTEgQEAgQUxXQVlTX0lOTElORSBib29sIEpJ
VDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KGludCBvcDEsIGludCBvcDIsIGludCYgb3AsIGludDMy
X3QKICNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKIC8vIGdldCBhcmcgcHV0cyBhbiBhcmcg
ZnJvbSB0aGUgU0YgcmVnaXN0ZXIgYXJyYXkgaW50byBhIGgvdyByZWdpc3RlcgotQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBSZWdpc3RlcklE
IGRzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmly
dHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNv
ZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90
L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAK
LSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpIHsKKyAg
ICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2Rl
QmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkK
ICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBk
c3QpOwpAQCAtNTcxLDQ3ICs1NjksMzIgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBSZWdpc3RlcklEIGRzdCkKICAgICBsb2FkNjQoYWRk
cmVzc0ZvcihzcmMpLCBkc3QpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGludCBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgSlNW
YWx1ZVJlZ3MgZHN0KQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBkc3QucGF5
bG9hZEdQUigpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCkKLXsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYy5vZmZzZXQoKSwgZHN0KTsKLX0KLQotQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW50IHNyYzEsIFJlZ2lzdGVySUQg
ZHN0MSwgaW50IHNyYzIsIFJlZ2lzdGVySUQgZHN0MikKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklE
IGRzdDEsIFZpcnR1YWxSZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpCiB7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBkc3QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYzIsIGRzdDIpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhWaXJ0dWFsUmVnaXN0ZXIgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBWaXJ0
dWFsUmVnaXN0ZXIgc3JjMiwgUmVnaXN0ZXJJRCBkc3QyKQotewotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKHNyYzEub2Zmc2V0KCksIGRzdDEsIHNyYzIub2Zmc2V0KCksIGRzdDIpOwotfQot
Ci1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChpbnQgc3JjKQor
QUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lz
dGVyIHNyYykKIHsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3Rlcklu
ZGV4KHNyYykgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworICAgIHJldHVy
biBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsK
IH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnQg
ZHN0LCBSZWdpc3RlcklEIGZyb20pCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKIHsKICAg
ICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkK
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkKIHsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgZnJvbS5wYXlsb2FkR1BSKCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQg
ZnJvbSkKLXsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdC5vZmZzZXQoKSwgZnJvbSk7
Ci19Ci0KIEFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZkJvdGhKU0NlbGxz
KFJlZ2lzdGVySUQgcmVnMSwgUmVnaXN0ZXJJRCByZWcyLCBSZWdpc3RlcklEIHNjcmF0Y2gpCiB7
CiAgICAgbW92ZShyZWcxLCBzY3JhdGNoKTsKQEAgLTYyOSwyOCArNjEyLDI4IEBAIEFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJl
ZykKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnKSk7CiB9CiAKLUFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJl
ZywgaW50IHZSZWcpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewogICAgIGlm
ICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUodlJlZykpCiAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRM
b2FkRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklU
OjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUp
CiB7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkp
IHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29k
ZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGluZGV4KTsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQo
KSkgeworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9j
b2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJsZShUcnVz
dGVkSW1tUHRyKCZpbkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKLSAgICAgICAg
bG9hZERvdWJsZShhZGRyZXNzRm9yKGluZGV4KSwgdmFsdWUpOworICAgICAgICBsb2FkRG91Ymxl
KGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2Fk
SW50MzJUb0RvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKK2lubGluZSB2b2lk
IEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0
ZXJJRCB2YWx1ZSkKIHsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3Rlcklu
ZGV4KGluZGV4KSkgewotICAgICAgICBBU1NFUlQoaXNPcGVyYW5kQ29uc3RhbnRJbnQoaW5kZXgp
KTsKLSAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5k
KGluZGV4KS5hc0ludDMyKCkpLCB2YWx1ZSk7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsK
KyAgICAgICAgQVNTRVJUKGlzT3BlcmFuZENvbnN0YW50SW50KHJlZykpOworICAgICAgICBjb252
ZXJ0SW50MzJUb0RvdWJsZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQocmVnKS5hc0ludDMyKCkp
LCB2YWx1ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGFkZHJl
c3NGb3IoaW5kZXgpLCB2YWx1ZSk7CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGFkZHJl
c3NGb3IocmVnKSwgdmFsdWUpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpJVDo6UGF0Y2hhYmxlSnVt
cCBKSVQ6OmVtaXRQYXRjaGFibGVKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCByZWcpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCA4ODI2OGQ5YjNjMzRiZTgxZDQ3
MzZkN2EyODE4MWZhNTIyODYzMzI3Li43ZjM1OGMxMjAzYmRlYWU5MGQ0NGEyYzdmYjg4OTk3ODA4
OWNhODVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTU2
LDEwICs1NiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIHZvaWQgSklUOjplbWl0X29wX21vdihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpOwotICAgIGludCBkc3QgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV9zcmMub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGlmIChtX2NvZGVCbG9jay0+aXND
b25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkgeworICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7
CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsK
ICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQogICAgICAgICAgICAgc3RvcmU2NChUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC03
Nyw3ICs3Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VuZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRW5kPigpOwogICAgIFJFTEVBU0VfQVNTRVJUKHJldHVyblZhbHVlR1BSICE9IGNh
bGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
dmFsdWUub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7CiAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICByZXQoKTsKQEAg
LTExMCw3ICsxMTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0
KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JS
ZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93
Q2FzZXMpOwogICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBz
dHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2Fz
ZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiAg
ICAgfQogfQogCkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19v
YmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0Pigp
OwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwot
ICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRh
ZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJl
KTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTI5LDkgKzEy
OSw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlk
ZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNI
YXNJbnN0YW5jZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0g
ICAgaW50IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3Rvci5vZmZzZXQoKTsKLSAg
ICBpbnQgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZS5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VW
YWx1ZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVn
VDApOwogCkBAIC0xNTUsOSArMTU1LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hh
c19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBK
SVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5z
dGFuY2VvZj4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAg
aW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvdG8gPSBi
eXRlY29kZS5tX3Byb3RvdHlwZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsK
IAogICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJl
c3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCiAgICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNl
VmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhl
biB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFMKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKLSAgICBp
bnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgCiAgICAgSklUSW5zdGFuY2VP
ZkdlbmVyYXRvciYgZ2VuID0gbV9pbnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsrXTsKICAg
ICAKQEAgLTIwNCw4ICsyMDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3Rv
bShjb25zdCBJbnN0cnVjdGlvbiopCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0eT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOwpAQCAt
MjE3LDggKzIxNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkPigpOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5t
X29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAg
ICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCBp
c0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOwpAQCAtMjQ2LDggKzI0Niw4IEBAIHZvaWQgSklU
OjplbWl0X29wX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigpOwotICAgIGludCBkc3QgPSBi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIApAQCAtMjYxLDggKzI2MSw4IEBA
IHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCk7Ci0gICAgaW50IGRzdCA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICB4b3I2NChUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKQEAgLTI3NCw4ICsyNzQsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcElzTnVtYmVyPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1i
ZXJUYWdSZWdpc3RlciwgcmVnVDApOwpAQCAtMjg2LDggKzI4Niw4IEBAIHZvaWQgSklUOjplbWl0
X29wX2lzX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9p
ZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcElzQ2VsbFdpdGhUeXBlPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVjb2Rl
Lm1fdHlwZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKQEAg
LTMwNyw4ICszMDcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
b2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKTsKLSAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNv
ZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7
CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCBp
c05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtMzMyLDcgKzMzMiw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogCiAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gJWVheC4KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJldD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsK
IAogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOwpAQCAtMzQzLDggKzM0Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
cHJpbWl0aXZlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsK
LSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYyA9IGJ5
dGVjb2RlLm1fc3JjLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogICAgIApAQCAtMzc3LDE1ICsz
NzcsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25f
bmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbi5vZmZzZXQoKSwg
cmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLm9mZnNl
dCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0
aW9uLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUs
IHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5vdD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZC5v
ZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9v
cGVyYW5kLCByZWdUMCk7CiAKICAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsg
aWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwg
YmUKICAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAg
b3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KQEAgLTM5NCw3ICsz
OTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwogICAgIHhvcjY0KFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CiAKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MDcsMTQgKzQwNywx
NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKICAgICBib29sIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLm9mZnNldCgpLCB2YWx1ZSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwogICAgIGFk
ZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwg
c2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcU51
bGw+KCk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKQEAgLTQzOCw3ICs0
MzgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxTnVsbD4oKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUu
bV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOwpAQCAtNDYyLDcgKzQ2Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFf
bnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVt
aXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
dW5kZWZpbmVkT3JOdWxsPigpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7CkBAIC00NzQsNyArNDc0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9v
cl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKbnVuZGVmaW5lZE9yTnVsbD4oKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwpAQCAtNDg3LDggKzQ4Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRy
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxUHRyPigpOwogICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBzcmMgPSBi
eXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwotICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBn
ZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlci5vZmZzZXQoKSk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgSlNWYWx1ZSBz
cGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2lu
dGVyKTsKICAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKICAgICAKQEAgLTUwMiwxOCArNTAyLDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2pu
ZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6
ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRl
Y29kZS5tX3Jocy5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgY29tcGFyZTMy
KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEplcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jocy5v
ZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1f
bGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgYWRkSnVtcChicmFuY2gzMihFcXVh
bCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKIH0KQEAgLTUyNywyNiArNTI3LDI2IEBAIHZvaWQg
SklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVn
VDI7CiAgICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24ub2Zmc2V0KCks
IHZhbHVlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9u
LCB2YWx1ZSk7CiAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2
YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJn
ZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5lcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xo
cy5vZmZzZXQoKSwgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpLCByZWdUMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5t
X3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEs
IHJlZ1QyKTsKICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwog
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
am5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMub2Zm
c2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jocy5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMs
IHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdU
Mik7CiAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0
KTsKIH0KQEAgLTU1Niw3ICs1NTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7CiAgICAgQVNTRVJUKHJlZ1QwID09IHJldHVy
blZhbHVlR1BSKTsKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV92YWx1ZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvblRocm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogfQpA
QCAtNTY1LDkgKzU2NSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmNvbXBp
bGVPcFN0cmljdEVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBp
bGVPcFN0cmljdEVxVHlwZSB0eXBlKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBzcmMy
ID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CiAgICAgCkBAIC02
MDksOCArNjA5LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3AKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBpbnQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAg
IGludCBzcmMxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzIgPSBieXRl
Y29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2Rl
Lm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOwogCkBA
IC02NjcsOCArNjY3LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKIHZvaWQgSklUOjplbWl0
X29wX3RvX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCk7
Ci0gICAgaW50IGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3Jj
VlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywg
cmVnVDApOwogICAgIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7
CkBAIC02ODEsOCArNjgxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1l
cmljKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCk7Ci0gICAgaW50
IGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5
dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwog
CiAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtNzAxLDIw
ICs3MDEsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKLSAgICBpbnQgc3JjVlJlZyA9
IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJl
ZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZS
ZWcsIHJlZ1QwKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CiAKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
b2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKTsKLSAgICBp
bnQgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmNWUmVnID0g
Ynl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7
CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTc0NSwxMCAr
NzQ1LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fdm0pLCByZWdUMyk7CiAg
ICAgbG9hZDY0KEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSksIHJlZ1QwKTsK
ICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIEFk
ZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSkpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9leGNlcHRpb24ub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9leGNlcHRpb24pOwogCiAgICAgbG9hZDY0KEFkZHJlc3Mo
cmVnVDAsIEV4Y2VwdGlvbjo6dmFsdWVPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhyb3duVmFsdWUub2Zmc2V0KCkpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aHJvd25WYWx1ZSk7CiAKICNpZiBFTkFCTEUo
REZHX0pJVCkKICAgICAvLyBGSVhNRTogY29uc2lkZXIgaW5saW5lIGNhY2hpbmcgdGhlIHByb2Nl
c3Mgb2YgZG9pbmcgT1NSIGVudHJ5LCBpbmNsdWRpbmcKQEAgLTc1Niw3ICs3NTYsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgK
IAogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwot
ICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVm
ZmVyOworICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0g
bWV0YWRhdGEubV9idWZmZXI7CiAgICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKQogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwg
JnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgZWxzZQpAQCAtNzY2LDcgKzc2
Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxl
clB0clRhZyk7CiAgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7CiAgICAgaWYgKGJ1ZmZlciAm
JiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAo
VmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgICAgICBidWZmZXItPmZvckVh
Y2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAg
ICAgICAgIEpTVmFsdWVSZWdzIHJlZ3MocmVnVDApOwogICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7CiAgICAgICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpKTsKQEAg
LTc4MywxMCArNzgzLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmls
ZShjb25zdCBJbnN0cnVjdGlvbiopCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsKLSAgICBp
bnQgY3VycmVudFNjb3BlID0gYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgY3VycmVudFNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2Vs
bChieXRlY29kZS5tX2RzdC5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRTdG9yZUNlbGwoYnl0
ZWNvZGUubV9kc3QsIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzk0LDcgKzc5NCw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFN3aXRjaEltbT4oKTsKICAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJ
bmRleDsKICAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgdW5zaWduZWQgc2NydXRp
bmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAg
dGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVu
dC4KICAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOwpAQCAtODExLDcgKzgxMSw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hDaGFyPigp
OwogICAgIHNpemVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OwogICAgIHVu
c2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KTsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29k
ZS5tX3NjcnV0aW5lZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0g
Ynl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dp
dGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFNpbXBs
ZUp1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CkBAIC04MjgsNyArODI4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0
cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoU3RyaW5nPigpOwogICAgIHNp
emVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OwogICAgIHVuc2lnbmVkIGRl
ZmF1bHRPZmZzZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV9k
ZWZhdWx0T2Zmc2V0KTsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0
aW5lZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUu
bV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3Rp
bmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFN0cmluZ0p1bXBUYWJs
ZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7CkBAIC04NTEsOCArODUxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2VxX251
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzEgPSBieXRlY29kZS5tX29w
ZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7CiAgICAgSnVtcCBpc0ltbWVkaWF0
ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CkBAIC04ODQsOCArODg0LDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
dm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5lcU51bGw+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAg
IGludCBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVn
VDApOwogICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAt
OTIwLDcgKzkyMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9u
KikKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAg
ICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKICAgICBmb3IgKHNpemVf
dCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVn
aXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKGopLm9mZnNldCgpKTsKKyAgICAgICAgZW1pdEluaXRSZWdpc3Rl
cih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1f
Y29kZUJsb2NrKTsKIApAQCAtOTMwLDcgKzkzMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVy
KGNvbnN0IEluc3RydWN0aW9uKikKIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9m
ZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdU
MCk7CkBAIC05NDEsNyArOTQxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1
Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3Qub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwogCkBAIC05NTQsNyArOTU0LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cENyZWF0ZVRoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7Ci0gICAgaW50IGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKICAgICBX
cml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2Fj
aGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0
ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwpAQCAtOTgyLDEzICs5ODIsMTMgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBh
Y2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9y
YWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rk
ej4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVh
bFJlZ2lzdGVyLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmRW1wdHkocmVnVDApKTsKIH0KIApAQCAtMTAwMiw3ICsxMDAyLDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEVxPigpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAg
ICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQ
UiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xMDEzLDcgKzEwMTMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgeG9y
MzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVl
R1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTEw
NDEsMTAgKzEwNDEsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9t
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFYKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwotICAg
IGludCBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3Iub2Zmc2V0KCk7Ci0gICAg
aW50IGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWUub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMSk7CkBAIC0xMTIxLDggKzExMjEsOCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwotICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHAu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJl
Z2V4cCkpKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAt
MTEzMiwxMiArMTEzMiwxMiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBKdW1wIGxhenlKdW1wOwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOwogI2Vsc2UKLSAgICBlbWl0
TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRM
b2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CiAjZW5kaWYKICAgICBGdW5jdGlv
bkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29k
ZS5tX2Z1bmN0aW9uRGVjbCk7CiAKQEAgLTExNzgsMTEgKzExNzgsMTEgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZS5v
ZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
Y29wZSwgcmVnVDApOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29w
ZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3Bl
LCByZWdUMCk7CiAjZW5kaWYKIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBt
X2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKQEAgLTEy
MjQsMTAgKzEyMjQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlc0luZGV4ID0gYnl0ZWNvZGUubV9hcmd2Lm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUg
PSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNJbmRleCAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOworICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLAogICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBy
ZWdUMCwgc2l6ZSk7CiB9CkBAIC0xMjM2LDggKzEyMzYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9u
ZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJh
eVdpdGhTaXplPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBp
bnQgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGgub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5k
ZXggPSBieXRlY29kZS5tX2xlbmd0aDsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCkBAIC0xMjUzLDkgKzEyNTMsOSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1l
cmF0b3Iub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1
YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CkBAIC0xMjk5LDkgKzEyOTksOSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5t
X3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5
UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZh
bEluZm8oKTsKICAgICAKQEAgLTEzNDcsOSArMTM0Nyw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlW
YWxJbmZvOwogCiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwpAQCAtMTM2NiwxMCArMTM2
NiwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Rp
cmVjdF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+
KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1f
aW5kZXgub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0
b3Iub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxS
ZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisgICAgVmlydHVhbFJlZ2lzdGVyIGVu
dW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKICAgICAvLyBDaGVjayB0aGF0IGJh
c2UgaXMgYSBjZWxsCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBA
IC0xNDA3LDkgKzE0MDcsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9l
bnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvci5v
ZmZzZXQoKTsKLSAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Lm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihpbmRleCwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwg
cmVnVDEpOwpAQCAtMTQzMSw5ICsxNDMxLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRv
cl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGkKIHZv
aWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKTsKLSAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5t
X2VudW1lcmF0b3Iub2Zmc2V0KCk7Ci0gICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleC5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGVudW1lcmF0b3IsIHJlZ1QxKTsKQEAgLTE0NTcsNyArMTQ1Nyw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+
KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVM
b2NhdGlvbjsKLSAgICBpbnQgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1
YWxSZWdpc3Rlci5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUg
PSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKIApAQCAtMTUyNiw3ICsxNTI2LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3QKICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdH
UFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCiAgICAgR1BSUmVn
IHNjcmF0Y2gyUmVnID0gcmVnVDI7CiAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgp
LCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMyk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7CiAgICAgbG9n
U2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcs
IHJlZ1QzKTsKIH0KIApAQCAtMTU0MCw4ICsxNTQwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9n
X3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUg
YSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCiAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7
CiAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNj
cmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIHJlZ1QyKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKICAgICBsb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMs
IG1fY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwogfQogCkBAIC0x
NTYyLDcgKzE1NjIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bf
YXJndW1lbnRfY291bnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291
bnQ+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBsb2FkMzIocGF5bG9hZEZvcihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKICAgICBz
dWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBK
U1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsKQEAgLTE1NzMs
NyArMTU3Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9s
ZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCk7Ci0g
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICB1bnNpZ25lZCBudW1QYXJhbXNUb1NraXAgPSBi
eXRlY29kZS5tX251bVBhcmFtZXRlcnNUb1NraXA7CiAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7CiAgICAgc3Vi
MzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CkBAIC0xNjAzLDcgKzE2MDMsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QXJndW1lbnQ+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7CkBAIC0xNjEzLDcgKzE2MTMsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIAogICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOwogICAgIEp1bXAgYXJndW1lbnRPdXRPZkJv
dW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRl
eCkpOwotICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVu
dCArIGluZGV4KSwgcmVzdWx0UmVncyk7CisgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVh
bFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIHJlc3VsdFJl
Z3MpOwogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMu
bGluayh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2RlczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0
LmNwcAppbmRleCBjMWJiNjU3YTA3YzNjODdkZTI4ZGQ1OGJjZDIyNjA1NTgwOTczYWU4Li4zMDI4
NmNkMzI5YjMxZjk3NGI4ZWQ4NGY1MWFmNmZiYzc2MzgwYzQzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCkBAIC05NTAsNyArOTUwLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4
CiAKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
LSAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1
ZmZlcjsKKyAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9
IG1ldGFkYXRhLm1fYnVmZmVyOwogICAgIGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxp
bmcoKSkKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gs
ICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGVsc2UKQEAgLTk2MCw3ICs5
NjAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKICAg
ICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKICAgICBpZiAoYnVmZmVyICYmIHNob3VsZEVtaXRQ
cm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kJiBwcm9maWxlKSB7CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICAgICAgSlNWYWx1
ZVJlZ3MgcmVncyhyZWdUMSwgcmVnVDApOwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7CiAgICAgICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IDA4MmE3ODMwODRkMmZj
NWEwNzM2YjFlNmI3MWE4YTA2ZDMwMzZmN2UuLjZmZjg4MDIxMTM4MmU5NjBiZDcyMWFjZDM4NTA5
ZThjMjg1NjA2NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcApAQCAtMTY1NSwxOCArMTY1NSwxOCBAQCBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25PcHRpbWl6ZShWTSogdm1Qb2ludGVyLCB1aW50MzJfdCBieXRlYwogICAg
ICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVyYm9zZU9TUigpKSkKICAgICAgICAgICAgIGRh
dGFMb2coIlRyaWdnZXJpbmcgb3B0aW1pemVkIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ss
ICJcbiIpOwogCi0gICAgICAgIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzOworICAgICAgICB1
bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlcyA9IDA7CiAgICAgICAgIGlmIChieXRlY29kZUluZGV4
KQogICAgICAgICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMgPSBjb2RlQmxvY2stPm51bUNhbGxlZUxv
Y2FscygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IDA7
Ci0gICAgICAgIE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiBtdXN0SGFuZGxlVmFsdWVzKGNv
ZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJzV2l0aFZhbHVlcyk7CisKKyAgICAgICAg
T3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+IG11c3RIYW5kbGVWYWx1ZXMoY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCksIG51bVZhcnNXaXRoVmFsdWVzLCAwKTsKICAgICAgICAgaW50IGxvY2Fs
c1VzZWRGb3JDYWxsZWVTYXZlcyA9IHN0YXRpY19jYXN0PGludD4oQ29kZUJsb2NrOjpsbGludEJh
c2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpOwogICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7
Ci0gICAgICAgICAgICBpZiAob3BlcmFuZElzTG9jYWwob3BlcmFuZCkgJiYgVmlydHVhbFJlZ2lz
dGVyKG9wZXJhbmQpLnRvTG9jYWwoKSA8IGxvY2Fsc1VzZWRGb3JDYWxsZWVTYXZlcykKKyAgICAg
ICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4
KGkpOworCisgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkgJiYgb3BlcmFuZC50b0xv
Y2FsKCkgPCBsb2NhbHNVc2VkRm9yQ2FsbGVlU2F2ZXMpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVzW2ldID0gY2FsbEZyYW1lLT51bmNoZWNr
ZWRSKG9wZXJhbmQpLmpzVmFsdWUoKTsKKyAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXNbaV0g
PSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSkuanNWYWx1
ZSgpOwogICAgICAgICB9CiAKICAgICAgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudENvZGVCbG9j
ayA9IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKTsKQEAgLTE3ODQsNyArMTc4NCw3IEBAIGNo
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9m
aWxlKFZNKiB2bVBvaW50ZXIsIHVpCiAgICAgY29kZUJsb2NrLT5lbnN1cmVDYXRjaExpdmVuZXNz
SXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgYXV0byBieXRl
Y29kZSA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCktPmFzPE9w
Q2F0Y2g+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxv
Y2spOwotICAgIG1ldGFkYXRhLm1fYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5k
T3BlcmFuZCYgcHJvZmlsZSkgeworICAgIG1ldGFkYXRhLm1fYnVmZmVyLT5mb3JFYWNoKFsmXSAo
VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgIHByb2Zp
bGUubV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxGcmFtZS0+dW5jaGVja2VkUihw
cm9maWxlLm1fb3BlcmFuZCkuanNWYWx1ZSgpKTsKICAgICB9KTsKIApAQCAtMTkwOCw4ICsxOTA4
LDggQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBvcFNjb3BlKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGludDMyX3Qgc2NvcGUKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCi0gICAgSlNTY29wZSogc2NvcGUgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZFIoc2NvcGVSZWcpLlJlZ2lzdGVyOjpzY29wZSgpOwotICAgIGNh
bGxGcmFtZS0+dW5jaGVja2VkUihzY29wZVJlZykgPSBzY29wZS0+bmV4dCgpOworICAgIGF1dG8m
IHNjb3BlU2xvdCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIoc2NvcGVS
ZWcpKTsKKyAgICBzY29wZVNsb3QgPSBzY29wZVNsb3QuUmVnaXN0ZXI6OnNjb3BlKCktPm5leHQo
KTsKIH0KIAogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20o
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBKU09iamVjdCogY29uc3RydWN0b3IsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRIYXNJbnN0YW5j
ZSkKQEAgLTI0MTcsNyArMjQxNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uR2V0RnJvbVNjb3BlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIGNvbnN0IElkZW50
aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFyKTsKLSAg
ICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNPYmplY3QqPihjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSkuanNWYWx1ZSgpKTsKKyAgICBKU09iamVjdCog
c2NvcGUgPSBqc0Nhc3Q8SlNPYmplY3QqPihjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUu
bV9zY29wZSkuanNWYWx1ZSgpKTsKICAgICBHZXRQdXRJbmZvJiBnZXRQdXRJbmZvID0gYnl0ZWNv
ZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2dldFB1dEluZm87CiAKICAgICAvLyBNb2R1bGVWYXIg
aXMgYWx3YXlzIGNvbnZlcnRlZCB0byBDbG9zdXJlVmFyIGZvciBnZXRfZnJvbV9zY29wZS4KQEAg
LTI0NjAsOCArMjQ2MCw4IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRUb1Njb3Bl
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEluc3RyCiAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwogCiAgICAgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOwotICAg
IEpTT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KGNhbGxGcmFtZS0+dW5jaGVja2Vk
UihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpKS5qc1ZhbHVlKCkpOwotICAgIEpTVmFsdWUgdmFs
dWUgPSBjYWxsRnJhbWUtPnIoYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKSkuanNWYWx1ZSgpOwor
ICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KGNhbGxGcmFtZS0+dW5jaGVj
a2VkUihieXRlY29kZS5tX3Njb3BlKS5qc1ZhbHVlKCkpOworICAgIEpTVmFsdWUgdmFsdWUgPSBj
YWxsRnJhbWUtPnIoYnl0ZWNvZGUubV92YWx1ZSkuanNWYWx1ZSgpOwogICAgIEdldFB1dEluZm8m
IGdldFB1dEluZm8gPSBtZXRhZGF0YS5tX2dldFB1dEluZm87CiAKICAgICAvLyBNb2R1bGVWYXIg
ZG9lcyBub3Qga2VlcCB0aGUgc2NvcGUgcmVnaXN0ZXIgdmFsdWUgYWxpdmUgaW4gREZHLgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAppbmRleCBj
NjU1ZGI4YmQyZDIxMjQwZTJjYTg2YTkxYTk2MjE2MDQwODRlOTM3Li5hYmY1MmY3MTNlOGFhMGFm
YjVlODA1YzdjZjNmMWQzODgzNzFjMmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApAQCAtNTcsOSArNTcsOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
LSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFMKIHsKICAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7CiAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7
Ci0gICAgICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICAgICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCkBAIC0xMTcsOCArMTE3LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGlu
dCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAm
bWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2Nv
ZGVCbG9jay0+YWRkQnlWYWxJbmZvKCk7CiAKQEAgLTE3Nyw3ICsxNzcsNyBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KIEpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRC
eVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGlu
ZGV4aW5nU2hhcGUpCiB7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEFycmF5
UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICAKICAgICBK
dW1wTGlzdCBzbG93Q2FzZXM7CkBAIC0yMDgsNyArMjA4LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6
OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1w
JiBiYWQKICAgICB9CiAgICAgY2FzZSBDb250aWd1b3VzU2hhcGU6CiAgICAgICAgIHN0b3JlNjQo
cmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpKTsKLSAgICAgICAgZW1p
dFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNlLCB2YWx1
ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAg
ICAgICBDUkFTSCgpOwpAQCAtMjM1LDcgKzIzNSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
SklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChPcCBieXRlY29kZSwg
UGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKIHsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwog
ICAgIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKQEAgLTI0OSw3ICsyNDksNyBAQCBKSVQ6Okp1
bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFi
bGVKdW1wJiBiYWRUeXBlKQogICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKICAgICBzdG9yZTY0KHJlZ1QzLCBCYXNl
SW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNl
dCgpKSk7Ci0gICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHZh
bHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5t
X2Jhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgSnVtcCBlbmQgPSBqdW1wKCk7
CiAgICAgCiAgICAgZW1wdHkubGluayh0aGlzKTsKQEAgLTI3NCw4ICsyNzQsOCBAQCBKSVRQdXRC
eUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlW
YWxJbmZvLCBPcCBieXRlYwogICAgIC8vIHByb3BlcnR5OiByZWdUMQogICAgIC8vIHNjcmF0Y2g6
IHJlZ1QyCiAKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBp
bnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWU7CiAKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChy
ZWdUMSkpOwogICAgIGVtaXRCeVZhbElkZW50aWZpZXJDaGVjayhieVZhbEluZm8sIHJlZ1QxLCBy
ZWdUMSwgcHJvcGVydHlOYW1lLCBzbG93Q2FzZXMpOwpAQCAtMzA0LDE0ICszMDQsMTQgQEAgSklU
UHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8q
IGJ5VmFsSW5mbywgT3AgYnl0ZWMKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgYm9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKLSAgICBpbnQgYmFzZTsK
LSAgICBpbnQgcHJvcGVydHk7Ci0gICAgaW50IHZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWU7CiAKICAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgewotICAgICAgICBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7Ci0gICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZS5vZmZzZXQoKTsKKyAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICAgICAgcHJv
cGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OworICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKQEAgLTMzNywzNiArMzM3LDM2IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeUlkPigpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAg
ICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLm9mZnNldCgpLCByZWdUMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0U2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9h
dHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nv
ci5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9hY2Nlc3NvciwgcmVnVDEpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVy
QnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRp
b25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJTZXR0ZXJCeUlkPigp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCBy
ZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1Qw
KTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLm9mZnNldCgpLCByZWdUMSk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlci5vZmZzZXQoKSwg
cmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJl
Z1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdU
Mik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwg
cmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCksIHJlZ1QxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAg
IGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwpAQCAt
Mzc1LDE4ICszNzUsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3B1
dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJC
eVZhbD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZz
ZXQoKSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eS5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9h
dHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nv
ci5vZmZzZXQoKSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9hY2Nlc3NvciwgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVy
QnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKLSAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5t
X2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGludCBw
cm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkSlNS
ZXN1bHQsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSk7CkBAIC0zOTUs
OSArMzk1LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zm
c2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbEpTUmVzdWx0LCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsK
QEAgLTQwNiw4ICs0MDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAg
IGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2VW
UmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CkBAIC00MzAsNyArNDMwLDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG8KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAg
IGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJ
bmRleCsrXTsKQEAgLTQ0NSw4ICs0NDUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dl
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0bwogdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDAp
OwpAQCAtNDY5LDcgKzQ2OSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGly
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlCiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0
b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CkBAIC00ODUsOCArNDg1LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CkBAIC01MTMs
OSArNTEzLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90
aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0g
ICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFz
ZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHRoaXNWUmVnID0gYnl0
ZWNvZGUubV90aGlzVmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRl
Y29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90
aGlzVmFsdWU7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTUzOSw3ICs1MzksNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgaW50IHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwpA
QCAtNTU2LDcgKzU1Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90
aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZFdpdGhUaGlz
R2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRl
eCsrXTsKQEAgLTU3MSw4ICs1NzEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRC
eUlkPigpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAg
ICBpbnQgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9vbCBkaXJlY3QgPSAhIShieXRl
Y29kZS5tX2ZsYWdzICYgUHV0QnlJZElzRGlyZWN0KTsKIAogICAgIC8vIEluIG9yZGVyIHRvIGJl
IGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQs
IHdlIHN0b3JlIG9uZSBwb2ludGVyLApAQCAtNjE1LDggKzYxNSw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7
CkBAIC02MzgsNyArNjM4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG8KICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9
IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwpAQCAtNjU3LDcgKzY1Nyw3IEBAIHZvaWQgSklU
OjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAg
ICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRl
KCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRS
ZXNvbHZlQ2xvc3VyZShpbnQgZHN0LCBpbnQgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MsIHVuc2lnbmVkIGRlcHRoKQordm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0
dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQogewogICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y29wZSwgcmVnVDApOwpAQCAtNjcwLDggKzY3MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29s
dmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsK
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNjb3BlID0gYnl0
ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsK
ICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAg
ICAgdW5zaWduZWQgZGVwdGggPSBtZXRhZGF0YS5tX2xvY2FsU2NvcGVEZXB0aDsKIApAQCAtNzcw
LDcgKzc3MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0TG9h
ZFdpdGhTdHJ1Y3R1cmVDaGVjayhpbnQgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3Qp
Cit2b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNj
b3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQogewogICAgIGxvYWRQdHIoc3RydWN0dXJl
U2xvdCwgcmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsK
QEAgLTc5MCw3ICs3OTAsNyBAQCB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50
ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyByZWcpCiAgICAgbG9hZFB0cihyZWcsIHJlZyk7
CiB9CiAKLXZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBv
cGVyYW5kKQordm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29w
ZSwgdWludHB0cl90IG9wZXJhbmQpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29w
ZSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1l
bnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJl
Z1QwKTsKQEAgLTgwMCw4ICs4MDAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc2NvcGUgPSBieXRlY29kZS5t
X3Njb3BlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBl
KCk7CiAgICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJl
LnNsb3QoKTsKICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKQEAgLTkxOSwxNyArOTE5LDE3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigp
OwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudElu
c3RydWN0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVl
KiBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKK3ZvaWQgSklUOjplbWl0
UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
LCBXYXRjaHBvaW50U2V0KiBzZXQpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwogICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwogICAgIHN0b3JlUHRyKHJlZ1Qw
LCBvcGVyYW5kKTsKIH0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChK
U1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5k
aXJlY3RXYXRjaHBvaW50U2V0KQordm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGly
ZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdh
dGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCiB7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50
U2V0LCByZWdUMSk7CkBAIC05MzgsNyArOTM4LDcgQEAgdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxW
YXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBpbnQgdmFsdWUsIFcK
ICAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEpOwogfQogCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1
cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50
U2V0KiBzZXQpCit2b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNj
b3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50
U2V0KiBzZXQpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKQEAgLTk1MCw4ICs5NTAs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZS5v
ZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBHZXRQdXRJbmZvIGdldFB1dElu
Zm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1
cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwpAQCAtMTA4Niw4ICsxMDg2LDgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3IKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2Fy
Z3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbUFyZ3VtZW50cz4o
KTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGFyZ3Vt
ZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0g
Ynl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsK
ICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwpAQCAt
MTA5OSw5ICsxMDk5LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb0FyZ3Vt
ZW50cz4oKTsKLSAgICBpbnQgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHMub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRz
OwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0gICAgaW50IHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRz
LCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwpAQCAt
MTExMCw3ICsxMTEwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRXcml0ZUJhcnJpZXIo
YXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmll
ck1vZGUgbW9kZSkKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBv
d25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CiAg
ICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUg
fHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKQEAgLTExMzMsNyArMTEzMyw3
IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2
YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlCiAgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRo
aXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCB1bnNp
Z25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQordm9pZCBKSVQ6OmVtaXRXcml0ZUJh
cnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJN
b2RlIG1vZGUpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwog
ICAgIEp1bXAgdmFsdWVOb3RDZWxsOwpAQCAtMTE1MCw4ICsxMTUwLDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRJbnRlcm5hbEZpZWxkPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsK
LSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Owog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CkBAIC0xMTY0LDggKzEx
NjQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5h
bF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0SW50ZXJuYWxGaWVsZD4o
KTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBAIC0xMTc2LDcgKzExNzYsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIAogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkKIAotdm9pZCBK
SVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0
ZUJhcnJpZXJNb2RlIG1vZGUpCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVn
aXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2Rl
KQogewogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRl
clZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7CkBAIC0xMTk5LDcg
KzExOTksNyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25lciwgdW5z
aWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZQogICAgICAgICB2YWx1ZU5vdENlbGwu
bGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25l
ciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKK3ZvaWQgSklUOjplbWl0
V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVC
YXJyaWVyTW9kZSBtb2RlKQogewogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmIChtb2Rl
ID09IFNob3VsZEZpbHRlclZhbHVlKSB7CkBAIC0xNDI1LDcgKzE0MjUsNyBAQCBKSVQ6Okp1bXBM
aXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZQogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2Fy
cmF5UHJvZmlsZTsKICAgICBBU1NFUlQoaXNJbnQodHlwZSkpOwogICAgIAotICAgIGludCB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgUmVnaXN0ZXJJ
RCBiYXNlID0gcmVnVDA7CkBAIC0xNTAxLDcgKzE1MDEsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6
ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBi
YWRUeQogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKICAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7CiAgICAgCi0gICAgaW50IHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3RlcklEIGJhc2Ug
PSByZWdUMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZh
Y2VKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAppbmRl
eCAyY2Y5MTk4ZjQwZWRhYWY1M2E2MWRiZjMzOTBhNmM3ZGIyODZhNWMxLi41ODI3MTNlNjQwODdh
NTFmNTkzOWI5MGI5ODU0NWRmMTMzZDBjNmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KU0ludGVyZmFjZUpJVC5oCkBAIC00NSwxOCArNDUsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIGlubGluZSBKdW1wIGVtaXRMb2FkSlNDZWxs
KHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQpOwotICAg
ICAgICBpbmxpbmUgSnVtcCBlbWl0TG9hZEludDMyKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3Rlcklu
ZGV4LCBSZWdpc3RlcklEIGRzdCk7Ci0gICAgICAgIGlubGluZSBKdW1wIGVtaXRMb2FkRG91Ymxl
KHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3Rl
cklEIHNjcmF0Y2gpOworICAgICAgICBpbmxpbmUgSnVtcCBlbWl0TG9hZEpTQ2VsbChWaXJ0dWFs
UmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCk7CisgICAgICAgIGlubGluZSBKdW1wIGVtaXRM
b2FkSW50MzIoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIGRzdCk7CisgICAgICAgIGlubGlu
ZSBKdW1wIGVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3RlcklEIGRzdCwg
UmVnaXN0ZXJJRCBzY3JhdGNoKTsKIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGlu
bGluZSBKdW1wIGVtaXRKdW1wSWZOb3RKU0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5k
ZXgpOworICAgICAgICBpbmxpbmUgSnVtcCBlbWl0SnVtcElmTm90SlNDZWxsKFZpcnR1YWxSZWdp
c3Rlcik7CiAjZW5kaWYKIAotICAgICAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVy
UHRyKGludCBlbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tID0gY2FsbEZyYW1l
UmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3Rl
cklEIGZyb20sIGludCBlbnRyeSk7Ci0gICAgICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVh
ZGVyKHZvaWQqIHZhbHVlLCBpbnQgZW50cnkpOwotICAgICAgICB2b2lkIGVtaXRQdXRDZWxsVG9D
YWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkpOworICAgICAgICB2b2lk
IGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFZpcnR1YWxSZWdpc3RlciBlbnRyeSwgUmVn
aXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAg
ICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxS
ZWdpc3RlciBlbnRyeSk7CisgICAgICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZv
aWQqIHZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpOworICAgICAgICB2b2lkIGVtaXRQdXRD
ZWxsVG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50
cnkpOwogCiAgICAgICAgIFZNKiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1fdm07IH0KIApAQCAtNjQs
MzYgKzY0LDM2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICNpZiBVU0UoSlNWQUxVRTMy
XzY0KQotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1p
dExvYWRKU0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgcGF5
bG9hZCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVt
aXRMb2FkSlNDZWxsKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQg
cGF5bG9hZCkKICAgICB7Ci0gICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0
ZXJJbmRleCksIHBheWxvYWQpOwotICAgICAgICByZXR1cm4gZW1pdEp1bXBJZk5vdEpTQ2VsbCh2
aXJ0dWFsUmVnaXN0ZXJJbmRleCk7CisgICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFs
UmVnaXN0ZXIpLCBwYXlsb2FkKTsKKyAgICAgICAgcmV0dXJuIGVtaXRKdW1wSWZOb3RKU0NlbGwo
dmlydHVhbFJlZ2lzdGVyKTsKICAgICB9CiAKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1
bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRKdW1wSWZOb3RKU0NlbGwodW5zaWduZWQgdmlydHVhbFJl
Z2lzdGVySW5kZXgpCisgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNl
SklUOjplbWl0SnVtcElmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIp
CiAgICAgewotICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50Pih2aXJ0dWFsUmVnaXN0ZXJJ
bmRleCkgPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7Ci0gICAgICAgIHJldHVybiBicmFu
Y2gzMihOb3RFcXVhbCwgdGFnRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpKTsKKyAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3RlciA8IEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVx
dWFsLCB0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxU
YWcpKTsKICAgICB9CiAgICAgCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50
ZXJmYWNlSklUOjplbWl0TG9hZEludDMyKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBS
ZWdpc3RlcklEIGRzdCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZh
Y2VKSVQ6OmVtaXRMb2FkSW50MzIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVn
aXN0ZXJJRCBkc3QpCiAgICAgewotICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50Pih2aXJ0
dWFsUmVnaXN0ZXJJbmRleCkgPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7Ci0gICAgICAg
IGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7Ci0gICAgICAg
IHJldHVybiBicmFuY2gzMihOb3RFcXVhbCwgdGFnRm9yKHN0YXRpY19jYXN0PGludD4odmlydHVh
bFJlZ2lzdGVySW5kZXgpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7CisgICAg
ICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIgPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7
CisgICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBkc3QpOworICAg
ICAgICByZXR1cm4gYnJhbmNoMzIoTm90RXF1YWwsIHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKICAgICB9CiAKLSAgICBpbmxpbmUgSlNJ
bnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkRG91YmxlKHVuc2lnbmVk
IHZpcnR1YWxSZWdpc3RlckluZGV4LCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0
Y2gpCisgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0
TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQg
ZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiAgICAgewotICAgICAgICBBU1NFUlQoc3RhdGljX2Nh
c3Q8aW50Pih2aXJ0dWFsUmVnaXN0ZXJJbmRleCkgPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRl
eCk7Ci0gICAgICAgIGxvYWRQdHIodGFnRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgc2NyYXRj
aCk7CisgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIgPCBGaXJzdENvbnN0YW50UmVnaXN0
ZXJJbmRleCk7CisgICAgICAgIGxvYWRQdHIodGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIHNjcmF0
Y2gpOwogICAgICAgICBKdW1wIGlzRG91YmxlID0gYnJhbmNoMzIoQmVsb3csIHNjcmF0Y2gsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKTsKICAgICAgICAgSnVtcCBub3RJbnQgPSBi
cmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFn
KSk7Ci0gICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIHNj
cmF0Y2gpOworICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgc2Ny
YXRjaCk7CiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHNjcmF0Y2gsIGRzdCk7CiAgICAg
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICAgICAgaXNEb3VibGUubGluayh0aGlzKTsKLSAg
ICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgZHN0KTsK
KyAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7CiAg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKICAgICAgICAgcmV0dXJuIG5vdEludDsKICAgICB9CkBA
IC0xMDEsMjMgKzEwMSwyMyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6
OmVtaXRMb2FkSlNDZWxsKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklE
IGRzdCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVt
aXRMb2FkSlNDZWxsKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQg
ZHN0KQogICAgIHsKLSAgICAgICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5k
ZXgpLCBkc3QpOworICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBk
c3QpOwogICAgICAgICByZXR1cm4gYnJhbmNoSWZOb3RDZWxsKGRzdCk7CiAgICAgfQogICAgIAot
ICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRJ
bnQzMih1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBkc3QpCisgICAg
aW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEludDMy
KFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsK
LSAgICAgICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOwor
ICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBkc3QpOwogICAgICAg
ICBKdW1wIG5vdEludDMyID0gYnJhbmNoSWZOb3RJbnQzMihkc3QpOwogICAgICAgICB6ZXJvRXh0
ZW5kMzJUb1B0cihkc3QsIGRzdCk7CiAgICAgICAgIHJldHVybiBub3RJbnQzMjsKICAgICB9CiAK
LSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2Fk
RG91YmxlKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBGUFJlZ2lzdGVySUQgZHN0LCBS
ZWdpc3RlcklEIHNjcmF0Y2gpCisgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50
ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
LCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiAgICAgewotICAgICAgICBs
b2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIHNjcmF0Y2gpOworICAgICAg
ICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBzY3JhdGNoKTsKICAgICAgICAg
SnVtcCBub3ROdW1iZXIgPSBicmFuY2hJZk5vdE51bWJlcihzY3JhdGNoKTsKICAgICAgICAgSnVt
cCBub3RJbnQgPSBicmFuY2hJZk5vdEludDMyKHNjcmF0Y2gpOwogICAgICAgICBjb252ZXJ0SW50
MzJUb0RvdWJsZShzY3JhdGNoLCBkc3QpOwpAQCAtMTI5LDEyICsxMjksMTIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgfQogI2VuZGlmCiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZh
Y2VKSVQ6OmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKGludCBlbnRyeSwgUmVnaXN0ZXJJ
RCB0bywgUmVnaXN0ZXJJRCBmcm9tKQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFj
ZUpJVDo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoVmlydHVhbFJlZ2lzdGVyIGVudHJ5
LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20pCiAgICAgewotICAgICAgICBsb2FkUHRy
KEFkZHJlc3MoZnJvbSwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOworICAgICAgICBs
b2FkUHRyKEFkZHJlc3MoZnJvbSwgZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
dG8pOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1p
dFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgaW50IGVudHJ5KQorICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVy
KFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKICNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQogICAgICAgICBzdG9yZVB0cihmcm9tLCBwYXlsb2FkRm9yKGVudHJ5KSk7
CkBAIC0xNDMsMTIgKzE0MywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAgIH0KIAot
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1l
SGVhZGVyKHZvaWQqIHZhbHVlLCBpbnQgZW50cnkpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIEpT
SW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIFZpcnR1
YWxSZWdpc3RlciBlbnRyeSkKICAgICB7CiAgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIo
dmFsdWUpLCBhZGRyZXNzRm9yKGVudHJ5KSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2
b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVy
SUQgZnJvbSwgaW50IGVudHJ5KQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJ
VDo6ZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxS
ZWdpc3RlciBlbnRyeSkKICAgICB7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgc3Rv
cmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihlbnRyeSkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAppbmRleCAw
OTUyNTkxZWU5ZjdkNWQ0ZmMyMTcwYzcxNjkzY2ViNjY5Nzc0YjRiLi40OWY1NGM1ZGE1NjcyNTAz
YTFlMDc2ZjIyZDlkMzgwMjliYjA5ZmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcApAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgZW1pdFNl
dHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IG51bVVzZWRTbG90CiAgICAgICAgICAgICBmaXJzdEFyZ3VtZW50UmVnID0gVmlydHVhbFJlZ2lz
dGVyKDApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9IFZh
bHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKLSAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIERhdGFGb3Jt
YXRJbnQzMik7CisgICAgICAgICAgICBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgRGF0YUZvcm1hdEludDMyKTsKICAgICAgICAgZmlyc3RBcmd1bWVudFJlZyA9IFZp
cnR1YWxSZWdpc3RlcihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApKTsKICAgICB9CiAgICAg
ZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2Uodm0sIGppdCwgbnVtVXNlZFNsb3RzR1BSLCBz
Y3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBhcmd1bWVudENvdW50UmVjb3Zl
cnksIGZpcnN0QXJndW1lbnRSZWcsIGZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCmluZGV4IGEx
MTYyMmVlYmRiZTQ3ODVlZjA2YWRjMzkzNDcxZjVjMjFmNzI0MDMuLjM0MjRiNmE1NGM3OGZkNWU1
OGYxODEzMTY1Y2MwZmFlOTY1NTJjZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCkBAIC01NSwxMyArNTUsMTMgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIAogICAgICAgICB2b2lkIGxvYWREb3VibGVBcmd1bWVudChpbnQgYXJndW1l
bnQsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKICAgICAgICAgewotICAg
ICAgICAgICAgdW5zaWduZWQgc3JjID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVu
dCk7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gdmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50IC0gMSk7CiAgICAgICAgICAgICBtX2ZhaWx1
cmVzLmFwcGVuZChlbWl0TG9hZERvdWJsZShzcmMsIGRzdCwgc2NyYXRjaCkpOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICB2b2lkIGxvYWRDZWxsQXJndW1lbnQoaW50IGFyZ3VtZW50LCBS
ZWdpc3RlcklEIGRzdCkKICAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc3JjID0gQ2Fs
bEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVudCk7CisgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGFyZ3Vt
ZW50IC0gMSk7CiAgICAgICAgICAgICBtX2ZhaWx1cmVzLmFwcGVuZChlbWl0TG9hZEpTQ2VsbChz
cmMsIGRzdCkpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNzMsNyArNzMsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgbG9hZEludDMyQXJndW1lbnQoaW50IGFy
Z3VtZW50LCBSZWdpc3RlcklEIGRzdCwgSnVtcCYgZmFpbFRhcmdldCkKICAgICAgICAgewotICAg
ICAgICAgICAgdW5zaWduZWQgc3JjID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVu
dCk7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gdmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50IC0gMSk7CiAgICAgICAgICAgICBmYWlsVGFy
Z2V0ID0gZW1pdExvYWRJbnQzMihzcmMsIGRzdCk7CiAgICAgICAgIH0KICAgICAgICAgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKaW5kZXggYjgxNDZk
MjE3NjYxNDgwZWQ0YjJhNzZhMGVhMWRmYTMxZjMxZjFmMi4uOTU3MWY4N2JlMjMyZTU4ODVjZWVi
NzdmYWJmOGM0NjJkYjI4YzM3NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3JzLmNwcApAQCAtMTAzNiw4ICsxMDM2LDggQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBhYnNUaHVua0dlbmVyYXRvcihWTSYgdm0pCiAgICAgICAgIHJl
dHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFu
YWdlZENvZGVSZWYodm0uaml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKIAogI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgdW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXggPSBDYWxsRnJhbWU6
OmFyZ3VtZW50T2Zmc2V0KDApOwotICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRy
ZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgR1BSSW5mbzo6cmVnVDApOworICAgIFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQ7
CisgICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lz
dGVyKSwgR1BSSW5mbzo6cmVnVDApOwogICAgIGF1dG8gbm90SW50ZWdlciA9IGppdC5icmFuY2hJ
Zk5vdEludDMyKEdQUkluZm86OnJlZ1QwKTsKIAogICAgIC8vIEFicyBJbnQzMi4KQEAgLTEyMTcs
NyArMTIxNyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYm91bmRG
dW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0mIHZtKQogICAgIENDYWxsSGVscGVyczo6TGFiZWwgbG9v
cCA9IGppdC5sYWJlbCgpOwogICAgIGppdC5zdWIzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MigxKSwgR1BSSW5mbzo6cmVnVDMpOwogICAgIGppdC5zdWIzMihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmVnVDEpOwotICAgIGppdC5sb2FkVmFsdWUoQ0NhbGxIZWxw
ZXJzOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEpKS5pbmRleGVkQnko
R1BSSW5mbzo6cmVnVDMsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCksIHZhbHVlUmVncyk7Cisg
ICAgaml0LmxvYWRWYWx1ZShDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDEpKS5pbmRleGVkQnkoR1BSSW5mbzo6cmVnVDMsIEND
YWxsSGVscGVyczo6VGltZXNFaWdodCksIHZhbHVlUmVncyk7CiAgICAgaml0LnN0b3JlVmFsdWUo
dmFsdWVSZWdzLCBDQ2FsbEhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xvdCgxKS5pbmRleGVkQnko
R1BSSW5mbzo6cmVnVDEsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCkpOwogICAgIGppdC5icmFu
Y2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBHUFJJbmZvOjpyZWdUMykubGlua1RvKGxv
b3AsICZqaXQpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5jcHAKaW5kZXggYWM3MmFiYzU3Mzg3MDYyNTc5NDNlMTJlNjRmNTdmN2VmNTkyZjBl
Mi4uMmJiNjE1ZjU0YTg4ZThlNDg2YzlkZTQ5Mjc3YTMyZDJmZTU5OWMxNSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCkBAIC0yOSw2ICsyOSw3
IEBACiAjaW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlR2Vu
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiQ2hlY2twb2ludE9T
UkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRl
ICJFcnJvci5oIgogI2luY2x1ZGUgIkVycm9ySGFuZGxpbmdTY29wZS5oIgpAQCAtOTgsOCArOTks
OCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIExMSW50IHsKICAgICBMTElOVF9CRUdJTl9O
T19TRVRfUEMoKTsgICAgICAgICAgICAgICAgICAgIFwKICAgICBMTElOVF9TRVRfUENfRk9SX1NU
VUJTKCkKIAotaW5saW5lIEpTVmFsdWUgZ2V0Tm9uQ29uc3RhbnRPcGVyYW5kKENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBjb25zdCBWaXJ0dWFsUmVnaXN0ZXImIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxG
cmFtZS0+dW5jaGVja2VkUihvcGVyYW5kLm9mZnNldCgpKS5qc1ZhbHVlKCk7IH0KLWlubGluZSBK
U1ZhbHVlIGdldE9wZXJhbmQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IFZpcnR1YWxSZWdp
c3RlciYgb3BlcmFuZCkgeyByZXR1cm4gY2FsbEZyYW1lLT5yKG9wZXJhbmQub2Zmc2V0KCkpLmpz
VmFsdWUoKTsgfQoraW5saW5lIEpTVmFsdWUgZ2V0Tm9uQ29uc3RhbnRPcGVyYW5kKENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeyByZXR1cm4gY2FsbEZyYW1l
LT51bmNoZWNrZWRSKG9wZXJhbmQpLmpzVmFsdWUoKTsgfQoraW5saW5lIEpTVmFsdWUgZ2V0T3Bl
cmFuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0
dXJuIGNhbGxGcmFtZS0+cihvcGVyYW5kKS5qc1ZhbHVlKCk7IH0KIAogI2RlZmluZSBMTElOVF9S
RVRVUk5fVFdPKGZpcnN0LCBzZWNvbmQpIGRvIHsgICAgICAgXAogICAgICAgICByZXR1cm4gZW5j
b2RlUmVzdWx0KGZpcnN0LCBzZWNvbmQpOyAgICAgICAgXApAQCAtMTU3MSw3ICsxNTcyLDcgQEAg
aW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBnZW5lcmljQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUKICAgICBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lID0gY2Fs
bEZyYW1lIC0gYnl0ZWNvZGUubV9hcmd2OwogICAgIAogICAgIGNhbGxlZUZyYW1lLT5zZXRBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyhieXRlY29kZS5tX2FyZ2MpOwotICAgIGNhbGxlZUZyYW1l
LT51bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgPSBjYWxsZWVBc1ZhbHVlOworICAg
IGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CiAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlckZyYW1l
KGNhbGxGcmFtZSk7CiAgICAgCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShjb2RlQmxvY2spOwpAQCAtMTY4OSw3ICsxNjkwLDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJu
VHlwZSB2YXJhcmdzU2V0dXAoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9u
KgogICAgICAgICBzZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZUFuZFNldFRoaXMoZ2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUsIGNhbGxlZUZyYW1lLCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNv
ZGUubV90aGlzVmFsdWUpLCB2bS52YXJhcmdzTGVuZ3RoKTsKIAogICAgIGNhbGxlZUZyYW1lLT5z
ZXRDYWxsZXJGcmFtZShjYWxsRnJhbWUpOwotICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSkgPSBjYWxsZWVBc1ZhbHVlOworICAgIGNhbGxlZUZyYW1lLT51
bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSA9IGNhbGxl
ZUFzVmFsdWU7CiAgICAgY2FsbEZyYW1lLT5zZXRDdXJyZW50VlBDKHBjKTsKIAogICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBzZXRVcENhbGwoY2FsbGVlRnJhbWUsIGtpbmQsIGNh
bGxlZUFzVmFsdWUpKTsKQEAgLTE3MjUsNyArMTcyNiw3IEBAIGlubGluZSBTbG93UGF0aFJldHVy
blR5cGUgY29tbW9uQ2FsbEV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0
aW9uCiAgICAgCiAgICAgY2FsbGVlRnJhbWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlckZyYW1lKGNhbGxG
cmFtZSk7Ci0gICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
KSA9IGNhbGxlZUFzVmFsdWU7CisgICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpID0gY2FsbGVlQXNWYWx1ZTsKICAgICBjYWxs
ZWVGcmFtZS0+c2V0UmV0dXJuUEMocmV0dXJuUG9pbnQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAg
ICAgY2FsbGVlRnJhbWUtPnNldENvZGVCbG9jayhudWxscHRyKTsKICAgICBjYWxsRnJhbWUtPnNl
dEN1cnJlbnRWUEMocGMpOwpAQCAtMTkyNiw3ICsxOTI3LDcgQEAgTExJTlRfU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX3Byb2ZpbGVfY2F0Y2gpCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFz
PE9wQ2F0Y2g+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2Rl
QmxvY2spOwotICAgIG1ldGFkYXRhLm1fYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxl
QW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgIG1ldGFkYXRhLm1fYnVmZmVyLT5mb3JFYWNoKFsm
XSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgIHBy
b2ZpbGUubV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxGcmFtZS0+dW5jaGVja2Vk
Uihwcm9maWxlLm1fb3BlcmFuZCkuanNWYWx1ZSgpKTsKICAgICB9KTsKIApAQCAtMTk1NywxMSAr
MTk1OCwxMjQgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX291dF9vZl9saW5lX2p1
bXBfdGFyZ2V0KQogICAgIExMSU5UX0VORF9JTVBMKCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1l
IE9wY29kZT4KK3N0YXRpYyB2b2lkIGhhbmRsZVZhcmFyZ3NDaGVja3BvaW50KFZNJiB2bSwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IE9w
Y29kZSYgYnl0ZWNvZGUsIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlJiBzaWRlU3RhdGUpCit7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHVuc2lnbmVk
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gc2lkZVN0YXRlLnRtcHNbT3Bjb2RlOjphcmdD
b3VudEluY2x1ZGluZ1RoaXNdLmFzVUludDMyKCk7CisgICAgdW5zaWduZWQgZmlyc3RWYXJBcmcg
PSBieXRlY29kZS5tX2ZpcnN0VmFyQXJnOworCisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJn
czsKKyAgICBhcmdzLmZpbGwoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxLCBbJl0gKEpT
VmFsdWUqIGJ1ZmZlcikgeworICAgICAgICBsb2FkVmFyYXJncyhnbG9iYWxPYmplY3QsIGJ1ZmZl
ciwgY2FsbEZyYW1lLT5yKGJ5dGVjb2RlLm1fYXJndW1lbnRzKS5qc1ZhbHVlKCksIGZpcnN0VmFy
QXJnLCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOworICAgIH0pOworICAgIGlmIChh
cmdzLmhhc092ZXJmbG93ZWQoKSkgeworICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOworCisgICAgSlNWYWx1ZSByZXN1bHQ7
CisgICAgaWYgKE9wY29kZTo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MpCisgICAg
ICAgIHJlc3VsdCA9IGNhbGwoZ2xvYmFsT2JqZWN0LCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0
ZWNvZGUubV9jYWxsZWUpLCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV90aGlzVmFs
dWUpLCBhcmdzLCAiIik7CisgICAgZWxzZQorICAgICAgICByZXN1bHQgPSBjb25zdHJ1Y3QoZ2xv
YmFsT2JqZWN0LCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9jYWxsZWUpLCBnZXRP
cGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUpLCBhcmdzLCAiIik7CisKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOworICAgIGNhbGxGcmFtZS0+dW5j
aGVja2VkUihieXRlY29kZS5tX2RzdCkgPSByZXN1bHQ7Cit9CisKK2lubGluZSBTbG93UGF0aFJl
dHVyblR5cGUgZGlzcGF0Y2hUb05leHRJbnN0cnVjdGlvbihDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiBwYykKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghY29kZUJs
b2NrLT52bSgpLmV4Y2VwdGlvbkZvckluc3BlY3Rpb24oKSk7CisgICAgaWYgKE9wdGlvbnM6OmZv
cmNlT1NSRXhpdFRvTExJbnQoKSB8fCBjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJ
bnRlcnByZXRlclRodW5rKSB7CisgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBuZXh0UEMgPSBw
Yy5uZXh0KCkucHRyKCk7CisgICAgICAgIGF1dG8gbmV4dEJ5dGVjb2RlID0gTExJbnQ6OmdldENv
ZGVQdHI8SlNFbnRyeVB0clRhZz4oKnBjLm5leHQoKS5wdHIoKSk7CisgICAgICAgIHJldHVybiBl
bmNvZGVSZXN1bHQobmV4dFBDLCBuZXh0Qnl0ZWNvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Cisg
ICAgfQorCisjaWYgRU5BQkxFKEpJVCkKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkg
PT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIEJ5dGVjb2RlSW5kZXggbmV4dEJ5dGVjb2Rl
SW5kZXggPSBwYy5uZXh0KCkuaW5kZXgoKTsKKyAgICBhdXRvIG5leHRCeXRlY29kZSA9IGNvZGVC
bG9jay0+aml0Q29kZU1hcCgpLmZpbmQobmV4dEJ5dGVjb2RlSW5kZXgpOworICAgIHJldHVybiBl
bmNvZGVSZXN1bHQobnVsbHB0ciwgbmV4dEJ5dGVjb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwor
I2VuZGlmCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworZXh0ZXJuICJD
IiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9p
bmxpbmVkX2NhbGwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEVuY29kZWRKU1ZhbHVlIHJlc3VsdCkK
K3sKKyAgICAvLyBTaW5jZSBhbGwgb3VyIGNhbGxpbmcgY2hlY2twb2ludHMgZG8gcmlnaHQgbm93
IGlzIG1vdmUgcmVzdWx0IGludG8gb3VyIGRlc3Qgd2UgY2FuIGp1c3QgZG8gdGhhdCBoZXJlIGFu
ZCByZXR1cm4uCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpOworICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKKyAgICBTbG93UGF0aEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3Bv
aW50T1NSRXhpdFNpZGVTdGF0ZT4gc2lkZVN0YXRlID0gdm0uZmluZENoZWNrcG9pbnRPU1JTaWRl
U3RhdGUoY2FsbEZyYW1lKTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBzaWRl
U3RhdGUtPmJ5dGVjb2RlSW5kZXg7CisgICAgYXV0byBwYyA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7CisKKyAgICBhdXRvIG9wY29kZSA9IHBjLT5vcGNvZGVJ
RCgpOworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6IHsK
KyAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKHBjLT5hczxPcENhbGxWYXJhcmdzPigpLm1f
ZHN0KSA9IEpTVmFsdWU6OmRlY29kZShyZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczogeworICAgICAgICBjYWxsRnJhbWUtPnVuY2hl
Y2tlZFIocGMtPmFzPE9wQ29uc3RydWN0VmFyYXJncz4oKS5tX2RzdCkgPSBKU1ZhbHVlOjpkZWNv
ZGUocmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIC8vIG9wX3RhaWxfY2FsbF92
YXJhcmdzIHNob3VsZCBuZXZlciByZXR1cm4gaWYgdGhlIHRoaW5nIGl0IHdhcyBjYWxsaW5nIHdh
cyBpbmxpbmVkLgorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBkaXNwYXRjaFRvTmV4
dEluc3RydWN0aW9uKGNvZGVCbG9jaywgcGMpOworfQorCitleHRlcm4gIkMiIFNsb3dQYXRoUmV0
dXJuVHlwZSBzbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdChDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgRW5jb2RlZEpTVmFsdWUgLyogbmVlZGVkIGZvciBjQ2FsbDIgaW4gQ0xvb3AgKi8pCit7Cisg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAgIFZN
JiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKKyAgICBTbG93UGF0aEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgY2FsbEZyYW1lKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0
ZT4gc2lkZVN0YXRlID0gdm0uZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoY2FsbEZyYW1lKTsK
KyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBzaWRlU3RhdGUtPmJ5dGVjb2RlSW5k
ZXg7CisgICAgQVNTRVJUKGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKTsKKworICAgIGF1dG8g
cGMgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpOworCisgICAg
YXV0byBvcGNvZGUgPSBwYy0+b3Bjb2RlSUQoKTsKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAg
IGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgICAgICBoYW5kbGVWYXJhcmdzQ2hlY2twb2ludCh2
bSwgY2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIHBjLT5hczxPcENhbGxWYXJhcmdzPigpLCAqc2lk
ZVN0YXRlLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFy
YXJnczoKKyAgICAgICAgaGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQodm0sIGNhbGxGcmFtZSwgZ2xv
YmFsT2JqZWN0LCBwYy0+YXM8T3BDb25zdHJ1Y3RWYXJhcmdzPigpLCAqc2lkZVN0YXRlLmdldCgp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICAg
ICAgQVNTRVJUX1dJVEhfTUVTU0FHRShwYy5uZXh0KCktPm9wY29kZUlEKCkgPT0gb3BfcmV0IHx8
IHBjLm5leHQoKS0+b3Bjb2RlSUQoKSA9PSBvcF9qbXAsICJXZSBzdHJvbmdseSBhc3N1bWUgYWxs
IHRhaWwgY2FsbHMgYXJlIGZvbGxvd2VkIGJ5IGFuIG9wX3JldCAob3Igc29tZXRpbWVzIGEgam1w
IHRvIGEgcmV0KS4iKTsKKyAgICAgICAgaGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQodm0sIGNhbGxG
cmFtZSwgZ2xvYmFsT2JqZWN0LCBwYy0+YXM8T3BUYWlsQ2FsbFZhcmFyZ3M+KCksICpzaWRlU3Rh
dGUuZ2V0KCkpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0
KHJldHVyblRvVGhyb3codm0pLCAwKTsKKworICAgIHJldHVybiBkaXNwYXRjaFRvTmV4dEluc3Ry
dWN0aW9uKGNvZGVCbG9jaywgcGMpOworfQorCiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlw
ZSBsbGludF90aHJvd19zdGFja19vdmVyZmxvd19lcnJvcihWTSogdm0sIFByb3RvQ2FsbEZyYW1l
KiBwcm90b0ZyYW1lKQogewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gdm0tPnRvcENhbGxG
cmFtZTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwotCiAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG51bGxwdHI7CiAgICAgaWYgKGNhbGxGcmFt
ZSkKICAgICAgICAgZ2xvYmFsT2JqZWN0ID0gY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCp2bSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93
UGF0aHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCmlu
ZGV4IDJmZjI4YjAwNmJjMjIzMzMwY2M2Nzg2NWExNjc5NGE5MGU3ZTdhYWUuLjdjNzVkYjNiZjQ5
OWE0NGQ1MGFkYjkwMThjZjFlNmU5ZGRhNTA1ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5oCkBAIC0xMzYsNiArMTM2LDggQEAgTExJTlRfU0xPV19Q
QVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zdXBlcl9zYW1wbGVyX2JlZ2luKTsKIExMSU5UX1NM
T1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfc3VwZXJfc2FtcGxlcl9lbmQpOwogTExJTlRf
U0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9vdXRfb2ZfbGluZV9qdW1wX3RhcmdldCk7
CiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90aHJvd19zdGFja19vdmVyZmxv
d19lcnJvcihWTSosIFByb3RvQ2FsbEZyYW1lKikgV1RGX0lOVEVSTkFMOworZXh0ZXJuICJDIiBT
bG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIEVuY29kZWRKU1ZhbHVlIHVudXNlZCkgV1RGX0lOVEVSTkFMOworZXh0ZXJu
ICJDIiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJv
bV9pbmxpbmVkX2NhbGwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEVuY29kZWRKU1ZhbHVlIGNhbGxS
ZXN1bHQpIFdURl9JTlRFUk5BTDsKICNpZiBFTkFCTEUoQ19MT09QKQogZXh0ZXJuICJDIiBTbG93
UGF0aFJldHVyblR5cGUgbGxpbnRfc3RhY2tfY2hlY2tfYXRfdm1fZW50cnkoVk0qLCBSZWdpc3Rl
ciopIFdURl9JTlRFUk5BTDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCmluZGV4IGE3MzI1OWI5ZTAxZTVmZDUyYWI4
ZTg3OWY0NTZiNDczNWNjM2Q0MTguLjRmN2UzODdlNTlkYjZhN2MyYzJjODU1Njk0NDUzMTQ5NTZi
YTVhYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlci5hc20KQEAgLTExMTgsNyArMTExOCw3IEBAIG1hY3JvIGdldHRlclNldHRlck9T
UkV4aXRSZXR1cm5Qb2ludChvcE5hbWUsIHNpemUpCiAgICAgZGVmaW5lT1NSRXhpdFJldHVybkxh
YmVsKG9wTmFtZSwgc2l6ZSkKIAogICAgIHJlc3RvcmVTdGFja1BvaW50ZXJBZnRlckNhbGwoKQot
ICAgIGxvYWRpIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgVGFnT2Zmc2V0W2Nmcl0sIFBD
CisgICAgbG9hZGkgTExJbnRSZXR1cm5QQ1tjZnJdLCBQQwogZW5kCiAKIG1hY3JvIGFycmF5UHJv
ZmlsZShvZmZzZXQsIGNlbGxBbmRJbmRleGluZ1R5cGUsIG1ldGFkYXRhLCBzY3JhdGNoKQpAQCAt
MTg2OSwxMyArMTg2OSwxNyBAQCBlbmQpCiBjYWxsT3AoY29uc3RydWN0LCBPcENvbnN0cnVjdCwg
cHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpIGVuZCkKIAogCi1t
YWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0
Y2gsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKLSAgICBjYWxsU2xvd1Bh
dGgoZnJhbWVTbG93UGF0aCkKK21hY3JvIGJyYW5jaElmRXhjZXB0aW9uKGV4Y2VwdGlvblRhcmdl
dCkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDMKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1f
dm1bdDNdLCB0MwogICAgIGJ0cHogVk06Om1fZXhjZXB0aW9uW3QzXSwgLm5vRXhjZXB0aW9uCi0g
ICAgam1wIF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lCi0ubm9FeGNlcHRp
b246CisgICAgam1wIGV4Y2VwdGlvblRhcmdldAorLm5vRXhjZXB0aW9uOiAgICAKK2VuZAorCitt
YWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0
Y2gsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKKyAgICBjYWxsU2xvd1Bh
dGgoZnJhbWVTbG93UGF0aCkKKyAgICBicmFuY2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3dfZnJv
bV9zbG93X3BhdGhfdHJhbXBvbGluZSkKICAgICAjIGNhbGxlZUZyYW1lIGluIHIxCiAgICAgaWYg
SlNWQUxVRTY0CiAgICAgICAgIG1vdmUgcjEsIHNwCkBAIC0yMDMwLDYgKzIwMzQsNDAgQEAgb3Ao
bGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmUsIG1hY3JvICgpCiBl
bmQpCiAKIAorb3AoY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9s
aW5lLCBtYWNybyAoKQorICAgIGlmIEpTVkFMVUU2NCBhbmQgbm90IChDX0xPT1Agb3IgQ19MT09Q
X1dJTikKKyAgICAgICAgcmVzdG9yZVN0YWNrUG9pbnRlckFmdGVyQ2FsbCgpCisKKyAgICAgICAg
IyBNYWtlIHN1cmUgd2UgbW92ZSByMCB0byBhMSBmaXJzdCBzaW5jZSByMCBtaWdodCBiZSB0aGUg
c2FtZSBhcyBhMCwgZm9yIGluc3RhbmNlLCBvbiBhcm0uCisgICAgICAgIG1vdmUgcjAsIGExCisg
ICAgICAgIG1vdmUgY2ZyLCBhMAorICAgICAgICAjIFdlIGRvbid0IGNhbGwgc2F2ZVN0YXRlRm9y
Q0NhbGwoKSBiZWNhdXNlIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIGJ5dGVjb2RlSW5kZXggZnJv
bSBvdXIgc2lkZSBzdGF0ZS4KKyAgICAgICAgY0NhbGwyKF9zbG93X3BhdGhfY2hlY2twb2ludF9v
c3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbCkKKyAgICAgICAgcmVzdG9yZVN0YXRlQWZ0ZXJDQ2Fs
bCgpCisgICAgICAgIGJyYW5jaElmRXhjZXB0aW9uKF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0
aF90cmFtcG9saW5lKQorICAgICAgICBqbXAgcjEsIEpTRW50cnlQdHJUYWcKKyAgICBlbHNlCisg
ICAgICAgIG5vdFN1cHBvcnRlZCgpCisgICAgZW5kCitlbmQpCisKK29wKGNoZWNrcG9pbnRfb3Ny
X2V4aXRfdHJhbXBvbGluZSwgbWFjcm8gKCkKKyAgICAjIEZJWE1FOiBXZSBjYW4gcHJvYmFibHkg
ZGlzcGF0Y2ggdG8gdGhlIGNoZWNrcG9pbnQgaGFuZGxlciBkaXJlY3RseSBidXQgdGhpcyB3YXMg
ZWFzaWVyIAorICAgICMgYW5kIHByb2JhYmx5IGRvZXNuJ3QgbWF0dGVyIGZvciBwZXJmb3JtYW5j
ZS4KKyAgICBpZiBKU1ZBTFVFNjQgYW5kIG5vdCAoQ19MT09QIG9yIENfTE9PUF9XSU4pCisgICAg
ICAgIHJlc3RvcmVTdGFja1BvaW50ZXJBZnRlckNhbGwoKQorCisgICAgICAgIG1vdmUgY2ZyLCBh
MAorICAgICAgICAjIFdlIGRvbid0IGNhbGwgc2F2ZVN0YXRlRm9yQ0NhbGwoKSBiZWNhdXNlIHdl
IGFyZSBnb2luZyB0byB1c2UgdGhlIGJ5dGVjb2RlSW5kZXggZnJvbSBvdXIgc2lkZSBzdGF0ZS4K
KyAgICAgICAgY0NhbGwyKF9zbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdCkKKyAgICAgICAg
cmVzdG9yZVN0YXRlQWZ0ZXJDQ2FsbCgpCisgICAgICAgIGJyYW5jaElmRXhjZXB0aW9uKF9sbGlu
dF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lKQorICAgICAgICBqbXAgcjEsIEpTRW50
cnlQdHJUYWcKKyAgICBlbHNlCisgICAgICAgIG5vdFN1cHBvcnRlZCgpCisgICAgZW5kCitlbmQp
CisKICMgTGFzdGx5LCBtYWtlIHN1cmUgdGhhdCB3ZSBjYW4gbGluayBldmVuIHRob3VnaCB3ZSBk
b24ndCBzdXBwb3J0IGFsbCBvcGNvZGVzLgogIyBUaGVzZSBvcGNvZGVzIHNob3VsZCBuZXZlciBh
cmlzZSB3aGVuIHVzaW5nIExMSW50IG9yIGVpdGhlciBKSVQuIFdlIGFzc2VydAogIyBhcyBtdWNo
LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIzMl82NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjMyXzY0LmFzbQppbmRleCA5M2MyOTAyNWIwZDkzMDVkOTk1NzEwM2UxNjViN2FhODkx
NGNiYjFkLi4wN2MyZWU5ZDJkZjBkZWFjOTNlM2I2MmY2YzYwZTNhNWRiNzI3ZDFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0
LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbQpAQCAtMTQyLDcgKzE0Miw3IEBAIGVuZAogbWFjcm8gY2FsbFNsb3dQYXRoKHNs
b3dQYXRoKQogICAgIHByZXBhcmVTdGF0ZUZvckNDYWxsKCkKICAgICBtb3ZlIGNmciwgYTAKLSAg
ICBtb3ZlIFBDLCBhMQorICAgIHByZXBhcmVTdGF0ZUZvckNDYWxsKCkKICAgICBjQ2FsbDIoc2xv
d1BhdGgpCiAgICAgcmVzdG9yZVN0YXRlQWZ0ZXJDQ2FsbCgpCiBlbmQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KaW5kZXgg
MGY3ZTZjM2M1NzExNzdiYWJmM2M5NGU3MThkYWYzOTUyNTNjOTkwZS4uYjZlZTk5ZTM2M2FmMWZm
ZDQxYjkxMjU0NGM1MGRlOTJmMWE0ZjJkMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KQEAgLTIzLDYgKzIzLDEzIEBA
CiAKIAogIyBVdGlsaXRpZXMuCittYWNybyBzdG9yZVBDKCkKKyAgICBzdG9yZWkgUEMsIExMSW50
UmV0dXJuUENbY2ZyXQorZW5kCisKK21hY3JvIGxvYWRQQygpCisgICAgbG9hZGkgTExJbnRSZXR1
cm5QQ1tjZnJdLCBQQworZW5kCiAKIG1hY3JvIGdldHVPcGVyYW5kTmFycm93KG9wY29kZVN0cnVj
dCwgZmllbGROYW1lLCBkc3QpCiAgICAgbG9hZGIgY29uc3RleHByICVvcGNvZGVTdHJ1Y3QlXyVm
aWVsZE5hbWUlX2luZGV4ICsgT3Bjb2RlSUROYXJyb3dTaXplW1BCLCBQQywgMV0sIGRzdApAQCAt
NzQsNyArODEsNyBAQCBlbmQKIAogIyBBZnRlciBjYWxsaW5nLCBjYWxsaW5nIGJ5dGVjb2RlIGlz
IGNsYWltaW5nIGlucHV0IHJlZ2lzdGVycyBhcmUgbm90IHVzZWQuCiBtYWNybyBkaXNwYXRjaEFm
dGVyQ2FsbChzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNoKQotICAgIGxvYWRpIEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCisgICAgbG9hZFBDKCkKICAg
ICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgUEIKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1faW5zdHJ1
Y3Rpb25zUmF3UG9pbnRlcltQQl0sIFBCCiAgICAgZ2V0KHNpemUsIG9wY29kZVN0cnVjdCwgbV9k
c3QsIHQxKQpAQCAtMzcyLDcgKzM3OSw3IEBAIGVuZAogCiAjIENhbGwgYSBzbG93IHBhdGggZm9y
IGNhbGwgb3Bjb2Rlcy4KIG1hY3JvIGNhbGxDYWxsU2xvd1BhdGgoc2xvd1BhdGgsIGFjdGlvbikK
LSAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgVGFnT2Zmc2V0W2Nm
cl0KKyAgICBzdG9yZVBDKCkKICAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCiAgICAgbW92ZSBj
ZnIsIGEwCiAgICAgbW92ZSBQQywgYTEKQEAgLTM4MSwyMCArMzg4LDIwIEBAIG1hY3JvIGNhbGxD
YWxsU2xvd1BhdGgoc2xvd1BhdGgsIGFjdGlvbikKIGVuZAogCiBtYWNybyBjYWxsVHJhcEhhbmRs
ZXIodGhyb3dIYW5kbGVyKQotICAgIHN0b3JlaSBQQywgQXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgKyBUYWdPZmZzZXRbY2ZyXQorICAgIHN0b3JlUEMoKQogICAgIHByZXBhcmVTdGF0ZUZvckND
YWxsKCkKICAgICBtb3ZlIGNmciwgYTAKICAgICBtb3ZlIFBDLCBhMQogICAgIGNDYWxsMihfbGxp
bnRfc2xvd19wYXRoX2hhbmRsZV90cmFwcykKICAgICBidHBueiByMCwgdGhyb3dIYW5kbGVyCi0g
ICAgbG9hZGkgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBUYWdPZmZzZXRbY2ZyXSwgUEMK
KyAgICBsb2FkaSBMTEludFJldHVyblBDW2Nmcl0sIFBDCiBlbmQKIAogbWFjcm8gY2hlY2tTd2l0
Y2hUb0pJVEZvckxvb3AoKQogICAgIGNoZWNrU3dpdGNoVG9KSVQoCiAgICAgICAgIDEsCiAgICAg
ICAgIG1hY3JvKCkKLSAgICAgICAgICAgIHN0b3JlaSBQQywgQXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgKyBUYWdPZmZzZXRbY2ZyXQorICAgICAgICAgICAgc3RvcmVQQygpCiAgICAgICAgICAg
ICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCiAgICAgICAgICAgICBtb3ZlIGNmciwgYTAKICAgICAg
ICAgICAgIG1vdmUgUEMsIGExCkBAIC00MDMsNyArNDEwLDcgQEAgbWFjcm8gY2hlY2tTd2l0Y2hU
b0pJVEZvckxvb3AoKQogICAgICAgICAgICAgbW92ZSByMSwgc3AKICAgICAgICAgICAgIGptcCBy
MCwgSlNFbnRyeVB0clRhZwogICAgICAgICAucmVjb3ZlcjoKLSAgICAgICAgICAgIGxvYWRpIEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCisgICAgICAgICAg
ICBsb2FkUEMoKQogICAgICAgICBlbmQpCiBlbmQKIApAQCAtMjA0Nyw3ICsyMDU0LDcgQEAgbWFj
cm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBh
cmVDYWxsLCBwcm9sb2d1ZSkKICAgICAgICAgYWRkcCBjZnIsIHQzCiAgICAgICAgIHN0b3JlcSB0
MiwgQ2FsbGVlW3QzXQogICAgICAgICBnZXR1KHNpemUsIG9wY29kZVN0cnVjdCwgbV9hcmdjLCB0
MikKLSAgICAgICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIFRhZ09m
ZnNldFtjZnJdCisgICAgICAgIHN0b3JlUEMoKQogICAgICAgICBzdG9yZWkgdDIsIEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzICsgUGF5bG9hZE9mZnNldFt0M10KICAgICAgICAgbW92ZSB0Mywg
c3AKICAgICAgICAgcHJlcGFyZUNhbGwoJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxM
aW5rSW5mby5tX21hY2hpbmVDb2RlVGFyZ2V0W3Q1XSwgdDIsIHQzLCB0NCwgSlNFbnRyeVB0clRh
ZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAppbmRleCBmYWRhM2Q2OWRh
NTg5Zjk3YjczNjNlMzJhOTE5NDVkN2JhZTgwZGQ1Li45NDliOWIwOTFhOWY1YTM1Y2YwNWNlNGNh
ZmUyNzQyODQzMGYyYTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcmdMaXN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5o
CkBAIC0xMzMsNiArMTMzLDE3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgb3ZlcmZsb3dDaGVja05v
dE5lZWRlZCgpIHsgY2xlYXJOZWVkc092ZXJmbG93Q2hlY2soKTsgfQogCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZpbGwoc2l6ZV90IGNvdW50LCBjb25zdCBGdW5j
dG9yJiBmdW5jKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3NpemUpOworICAgICAgICBlbnN1
cmVDYXBhY2l0eShjb3VudCk7CisgICAgICAgIGlmIChCYXNlOjpoYXNPdmVyZmxvd2VkKCkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fc2l6ZSA9IGNvdW50OworICAgICAgICBmdW5j
KHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KCZzbG90Rm9yKDApKSk7CisgICAgfQorCiBwcml2
YXRlOgogICAgIHZvaWQgZXhwYW5kQ2FwYWNpdHkoKTsKICAgICB2b2lkIGV4cGFuZENhcGFjaXR5
KGludCBuZXdDYXBhY2l0eSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZWRUeXBlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNo
ZWRUeXBlcy5jcHAKaW5kZXggYjNjNzNjZmYyODQxZGM4OTI1MTE5N2FlMDdlMjQzMzFiNmYwZTkw
Yy4uYTgyNjYxYTA2YjU5MjQ2MWZmMmE2N2Y2Y2Y0MGUyYjE5NmY1MDE4ZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcApAQCAtMTc5NCw2ICsxNzk0
LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyKCkg
Y29uc3QgeyByZXR1cm4gbV9uZWVkc0NsYXNzRmllbGRJbml0aWFsaXplcjsgfQogICAgIHVuc2ln
bmVkIGV2YWxDb250ZXh0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXZhbENvbnRleHRUeXBlOyB9
CiAgICAgdW5zaWduZWQgaGFzVGFpbENhbGxzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNUYWlsQ2Fs
bHM7IH0KKyAgICB1bnNpZ25lZCBoYXNDaGVja3BvaW50cygpIGNvbnN0IHsgcmV0dXJuIG1faGFz
Q2hlY2twb2ludHM7IH0KICAgICB1bnNpZ25lZCBsaW5lQ291bnQoKSBjb25zdCB7IHJldHVybiBt
X2xpbmVDb3VudDsgfQogICAgIHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1f
ZW5kQ29sdW1uOyB9CiAKQEAgLTE4MjcsNiArMTgyOCw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWdu
ZWQgbV9ldmFsQ29udGV4dFR5cGUgOiAyOwogICAgIHVuc2lnbmVkIG1faGFzVGFpbENhbGxzIDog
MTsKICAgICB1bnNpZ25lZCBtX2NvZGVUeXBlIDogMjsKKyAgICB1bnNpZ25lZCBtX2hhc0NoZWNr
cG9pbnRzIDogMTsKIAogICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOwogICAgIFNvdXJjZVBh
cnNlTW9kZSBtX3BhcnNlTW9kZTsKQEAgLTIwMjUsNiArMjAyNyw3IEBAIEFMV0FZU19JTkxJTkUg
VW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKERlY29kZXImIGRlY29kZXIsIFN0
cnVjdHVyZSoKIAogICAgICwgbV9kaWRPcHRpbWl6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTWl4
ZWRUcmlTdGF0ZSkpCiAgICAgLCBtX2FnZSgwKQorICAgICwgbV9oYXNDaGVja3BvaW50cyhjYWNo
ZWRDb2RlQmxvY2suaGFzQ2hlY2twb2ludHMoKSkKIAogICAgICwgbV9mZWF0dXJlcyhjYWNoZWRD
b2RlQmxvY2suZmVhdHVyZXMoKSkKICAgICAsIG1fcGFyc2VNb2RlKGNhY2hlZENvZGVCbG9jay5w
YXJzZU1vZGUoKSkKQEAgLTIyMTUsNiArMjIxOCw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBDYWNo
ZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZT46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25z
CiAgICAgbV9wYXJzZU1vZGUgPSBjb2RlQmxvY2subV9wYXJzZU1vZGU7CiAgICAgbV9jb2RlR2Vu
ZXJhdGlvbk1vZGUgPSBjb2RlQmxvY2subV9jb2RlR2VuZXJhdGlvbk1vZGU7CiAgICAgbV9jb2Rl
VHlwZSA9IGNvZGVCbG9jay5tX2NvZGVUeXBlOworICAgIG1faGFzQ2hlY2twb2ludHMgPSBjb2Rl
QmxvY2subV9oYXNDaGVja3BvaW50czsKIAogICAgIG1fbWV0YWRhdGEuZW5jb2RlKGVuY29kZXIs
IGNvZGVCbG9jay5tX21ldGFkYXRhLmdldCgpKTsKICAgICBtX3JhcmVEYXRhLmVuY29kZShlbmNv
ZGVyLCBjb2RlQmxvY2subV9yYXJlRGF0YS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAppbmRleCA4NzViMzAyN2IyYzhjZTg3
NmM5OGEyMzU2YjQ3OGM2ZmVlMzAzZjYwLi4yYTMzYmQzMzU2ZGZjYTk0NDRhYTBiZWYyYzc4ZWU2
OWIyYzcwN2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25TbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
blNsb3dQYXRocy5jcHAKQEAgLTk4LDggKzk4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgQkVH
SU5fTk9fU0VUX1BDKCk7ICAgICAgICAgICAgICAgICAgICBcCiAgICAgU0VUX1BDX0ZPUl9TVFVC
UygpCiAKLSNkZWZpbmUgR0VUKG9wZXJhbmQpIChjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFu
ZC5vZmZzZXQoKSkpCi0jZGVmaW5lIEdFVF9DKG9wZXJhbmQpIChjYWxsRnJhbWUtPnIob3BlcmFu
ZC5vZmZzZXQoKSkpCisjZGVmaW5lIEdFVChvcGVyYW5kKSAoY2FsbEZyYW1lLT51bmNoZWNrZWRS
KG9wZXJhbmQpKQorI2RlZmluZSBHRVRfQyhvcGVyYW5kKSAoY2FsbEZyYW1lLT5yKG9wZXJhbmQp
KQogCiAjZGVmaW5lIFJFVFVSTl9UV08oZmlyc3QsIHNlY29uZCkgZG8geyAgICAgICBcCiAgICAg
ICAgIHJldHVybiBlbmNvZGVSZXN1bHQoZmlyc3QsIHNlY29uZCk7ICAgICAgICBcCkBAIC0xMTU5
LDggKzExNTksNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY3JlYXRlX2xleGljYWxfZW52
aXJvbm1lbnQpCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9w
Q3JlYXRlTGV4aWNhbEVudmlyb25tZW50PigpOwotICAgIGludCBzY29wZVJlZyA9IGJ5dGVjb2Rl
Lm1fc2NvcGUub2Zmc2V0KCk7Ci0gICAgSlNTY29wZSogY3VycmVudFNjb3BlID0gY2FsbEZyYW1l
LT51bmNoZWNrZWRSKHNjb3BlUmVnKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBj
dXJyZW50U2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuUmVn
aXN0ZXI6OnNjb3BlKCk7CiAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5
bWJvbFRhYmxlKj4oR0VUX0MoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZSkuanNWYWx1ZSgpKTsKICAg
ICBKU1ZhbHVlIGluaXRpYWxWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlKS5q
c1ZhbHVlKCk7CiAgICAgQVNTRVJUKGluaXRpYWxWYWx1ZSA9PSBqc1VuZGVmaW5lZCgpIHx8IGlu
aXRpYWxWYWx1ZSA9PSBqc1REWlZhbHVlKCkpOwpAQCAtMTE3NSw4ICsxMTc0LDcgQEAgU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX3B1c2hfd2l0aF9zY29wZSkKICAgICBKU09iamVjdCogbmV3U2Nv
cGUgPSBHRVRfQyhieXRlY29kZS5tX25ld1Njb3BlKS5qc1ZhbHVlKCkudG9PYmplY3QoZ2xvYmFs
T2JqZWN0KTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKIAotICAgIGludCBzY29wZVJlZyA9IGJ5
dGVjb2RlLm1fY3VycmVudFNjb3BlLm9mZnNldCgpOwotICAgIEpTU2NvcGUqIGN1cnJlbnRTY29w
ZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihzY29wZVJlZykuUmVnaXN0ZXI6OnNjb3BlKCk7Cisg
ICAgSlNTY29wZSogY3VycmVudFNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2Rl
Lm1fY3VycmVudFNjb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBSRVRVUk4oSlNXaXRoU2Nv
cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBjdXJyZW50U2NvcGUsIG5ld1Njb3BlKSk7CiB9
CiAKQEAgLTExODUsNyArMTE4Myw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9yZXNvbHZl
X3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbCkKICAgICBCRUdJTigpOwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNs
SW5FdmFsPigpOwogICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpOwotICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLlJlZ2lzdGVyOjpzY29w
ZSgpOworICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2Rl
Lm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIEpTVmFsdWUgcmVzb2x2ZWRTY29wZSA9
IEpTU2NvcGU6OnJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWwoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgaWRlbnQpOwogCiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CkBAIC0xMTk5LDcg
KzExOTcsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcmVzb2x2ZV9zY29wZSkKICAgICBh
dXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKICAgICBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7Ci0gICAgSlNT
Y29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZS5vZmZz
ZXQoKSkuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUt
PnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgSlNP
YmplY3QqIHJlc29sdmVkU2NvcGUgPSBKU1Njb3BlOjpyZXNvbHZlKGdsb2JhbE9iamVjdCwgc2Nv
cGUsIGlkZW50KTsKICAgICAvLyBQcm94eSBjYW4gdGhyb3cgYW4gZXJyb3IgaGVyZSwgZS5nLiBQ
cm94eSBpbiB3aXRoIHN0YXRlbWVudCdzIEB1bnNjb3BhYmxlcy4KICAgICBDSEVDS19FWENFUFRJ
T04oKTsKQEAgLTE0NDQsNyArMTQ0Miw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdf
YXJyYXlfYnVmZmVyKQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5h
czxPcE5ld0FycmF5QnVmZmVyPigpOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmlzQ29uc3RhbnRS
ZWdpc3RlckluZGV4KGJ5dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5Lm9mZnNldCgpKSk7Cisg
ICAgQVNTRVJUKGJ5dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5LmlzQ29uc3RhbnQoKSk7CiAg
ICAgSlNJbW11dGFibGVCdXR0ZXJmbHkqIGltbXV0YWJsZUJ1dHRlcmZseSA9IGJpdHdpc2VfY2Fz
dDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KEdFVF9DKGJ5dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVy
Zmx5KS5qc1ZhbHVlKCkuYXNDZWxsKCkpOwogICAgIGF1dG8mIHByb2ZpbGUgPSBieXRlY29kZS5t
ZXRhZGF0YShjb2RlQmxvY2spLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKIApAQCAtMTQ2Myw3
ICsxNDYxLDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19hcnJheV9idWZmZXIpCiAg
ICAgICAgIC8vIFdlIGFsc28gY2Fubm90IGFsbG9jYXRlIGEgbmV3IGJ1dHRlcmZseSBmcm9tIGNv
bXBpbGF0aW9uIHRocmVhZHMgc2luY2UgaXQncyBpbnZhbGlkIHRvIGFsbG9jYXRlIGNlbGxzIGZy
b20KICAgICAgICAgLy8gYSBjb21waWxhdGlvbiB0aHJlYWQuCiAgICAgICAgIFdURjo6c3RvcmVT
dG9yZUZlbmNlKCk7Ci0gICAgICAgIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihieXRlY29k
ZS5tX2ltbXV0YWJsZUJ1dHRlcmZseS5vZmZzZXQoKSkuc2V0KHZtLCBjb2RlQmxvY2ssIGltbXV0
YWJsZUJ1dHRlcmZseSk7CisgICAgICAgIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihieXRl
Y29kZS5tX2ltbXV0YWJsZUJ1dHRlcmZseSkuc2V0KHZtLCBjb2RlQmxvY2ssIGltbXV0YWJsZUJ1
dHRlcmZseSk7CiAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwCmluZGV4IDRi
ZDE5MmE2Yzc3ZWZjMDI2ZTdhOTVhNWI3YmVjNzEyNDM2NzdlNzguLjQ3YjI0NzQxOGNhODhlZmQx
Yjc4ZTYzMTFiNjc1ZDFlZmE1YTVmZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbnN0cnVjdERhdGEuY3BwCkBAIC0zNSw2ICszNSwxMSBAQAogbmFtZXNwYWNlIEpT
QyB7CiAKIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgY29uc3QgQXJnTGlzdCYgYXJncywgY29uc3QgY2hh
ciogZXJyb3JNZXNzYWdlKQoreworICAgIHJldHVybiBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBj
b25zdHJ1Y3Rvck9iamVjdCwgY29uc3RydWN0b3JPYmplY3QsIGFyZ3MsIGVycm9yTWVzc2FnZSk7
Cit9CisKK0pTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgSlNWYWx1ZSBuZXdUYXJnZXQsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSkKIHsKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwpAQCAtNDYsMTAgKzUxLDkgQEAgSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0LCBjb24KICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjb25z
dHJ1Y3QoZ2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rvck9iamVjdCwgY29uc3RydWN0VHlwZSwgY29u
c3RydWN0RGF0YSwgYXJncywgY29uc3RydWN0b3JPYmplY3QpKTsKKyAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIGNvbnN0cnVjdChnbG9iYWxPYmplY3QsIGNvbnN0cnVjdG9yT2JqZWN0LCBj
b25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmdzLCBuZXdUYXJnZXQpKTsgIAogfQogCi0K
IEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBjb25zdHJ1Y3Rvck9iamVjdCwgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlLCBjb25zdCBD
b25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBKU1ZhbHVl
IG5ld1RhcmdldCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmgKaW5kZXggZDBhZTAwYmEx
MWQ3Y2VlMjRkZmZhZTkxOTExOTY3ZTAyYWE2ZWRlMy4uZmI2MTk3NGE3ZGIzOWM0OTFmOWY5M2Jh
ZWI2Y2FjMTI2MjFmM2JhMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29uc3RydWN0RGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bnN0cnVjdERhdGEuaApAQCAtNjAsNiArNjAsOCBAQCBzdHJ1Y3QgQ29uc3RydWN0RGF0YSB7CiAK
IC8vIENvbnZlbmllbmNlIHdyYXBwZXIgc28geW91IGRvbid0IG5lZWQgdG8gZGVhbCB3aXRoIENh
bGxEYXRhIGFuZCBDYWxsVHlwZSB1bmxlc3MgeW91IGFyZSBnb2luZyB0byB1c2UgdGhlbS4KIEpT
X0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlIGZ1bmN0aW9uT2JqZWN0LCBjb25zdCBBcmdMaXN0JiwgY29uc3QgY2hhciogZXJyb3JNZXNz
YWdlKTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBKU1ZhbHVlIG5ld1RhcmdldCwgY29uc3QgQXJn
TGlzdCYsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSk7CisKIEpTX0VYUE9SVF9QUklWQVRFIEpT
T2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIGNvbnN0cnVjdG9yLCBD
b25zdHJ1Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiwgY29uc3QgQXJnTGlzdCYsIEpTVmFs
dWUgbmV3VGFyZ2V0KTsKIAogQUxXQVlTX0lOTElORSBKU09iamVjdCogY29uc3RydWN0KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3QsIENvbnN0
cnVjdFR5cGUgY29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0
YSwgY29uc3QgQXJnTGlzdCYgYXJncykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCmluZGV4IGE2Nzk1ZGExZWRjY2YzMTAyMmFjMmRkOWFl
ZmFmZDQzYTAxYTVjODUuLjRiMzQ2MWRlMjJlNzZmN2RiZTMxODM5NDI0NWE5M2M1NzUwOWYzODcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRz
LmNwcApAQCAtMTM3LDIwICsxMzcsMTkgQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6OnVubWFwQXJn
dW1lbnQoVk0mIHZtLCB1bnNpZ25lZCBpbmRleCkKICAgICBtX21hcHBlZEFyZ3VtZW50cy5hdChp
bmRleCwgaW50ZXJuYWxMZW5ndGgoKSkgPSB0cnVlOwogfQogCi12b2lkIERpcmVjdEFyZ3VtZW50
czo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIERpcmVjdEFyZ3VtZW50czo6Y29weVRvQXJn
dW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVu
dERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmICghbV9t
YXBwZWRBcmd1bWVudHMpIHsKICAgICAgICAgdW5zaWduZWQgbGltaXQgPSBzdGQ6Om1pbihsZW5n
dGggKyBvZmZzZXQsIG1fbGVuZ3RoKTsKICAgICAgICAgdW5zaWduZWQgaTsKLSAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHN0YXJ0ID0gZmlyc3RFbGVtZW50RGVzdCAtIG9mZnNldDsKICAgICAgICAg
Zm9yIChpID0gb2Zmc2V0OyBpIDwgbGltaXQ7ICsraSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+
cihzdGFydCArIGkpID0gc3RvcmFnZSgpW2ldLmdldCgpOworICAgICAgICAgICAgZmlyc3RFbGVt
ZW50RGVzdFtpIC0gb2Zmc2V0XSA9IHN0b3JhZ2UoKVtpXS5nZXQoKTsKICAgICAgICAgZm9yICg7
IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihzdGFydCArIGkpID0g
Z2V0KGdsb2JhbE9iamVjdCwgaSk7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2kgLSBv
ZmZzZXRdID0gZ2V0KGdsb2JhbE9iamVjdCwgaSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBHZW5lcmljQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBHZW5lcmljQXJn
dW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBv
ZmZzZXQsIGxlbmd0aCk7CiB9CiAKIHVuc2lnbmVkIERpcmVjdEFyZ3VtZW50czo6bWFwcGVkQXJn
dW1lbnRzU2l6ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
aXJlY3RBcmd1bWVudHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFy
Z3VtZW50cy5oCmluZGV4IDBhNmIxYTA2NjA5MGUyY2E1ZjU2ZjUwYTljNTNhMmNmY2U3NzJlMGEu
LjhkOTY0MmEyYzk0MDQwODBiOTEzYWMyNzBjZDAxM2MzOWVjZGE4MTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCkBAIC0xNDQsNyArMTQ0
LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gR2VuZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1
bWVudHM+Ojppc01vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKGluZGV4LCBtX2xlbmd0aCk7CiAg
ICAgfQogCi0gICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJh
bWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOwogCiAgICAgREVDTEFSRV9JTkZPOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCmluZGV4IGIzMWI3MGFiZDAwY2VlYWY1
ZWJiN2VlMWQ0NjdkYTQ4ODcwZDUxYzEuLjA3NGMyMTYyZDhkYTE2NDcwNmY0MDA0YmRhYjNkYWVl
YjI3MmNiYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVy
aWNBcmd1bWVudHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmlj
QXJndW1lbnRzLmgKQEAgLTU5LDcgKzU5LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0TW9k
aWZpZWRBcmd1bWVudERlc2NyaXB0b3IoVk0mLCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgbGVu
Z3RoKTsKICAgICBib29sIGlzTW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IodW5zaWduZWQgaW5k
ZXgsIHVuc2lnbmVkIGxlbmd0aCk7CiAKLSAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2Jh
bE9iamVjdCosIENhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1
bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdm9pZCBjb3B5VG9Bcmd1bWVu
dHMoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAKICAgICB1c2luZyBNb2RpZmllZEFyZ3VtZW50c1B0
ciA9IENhZ2VkQmFycmllclB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCBib29sPjsKICAgICBNb2Rp
ZmllZEFyZ3VtZW50c1B0ciBtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5l
cy5oCmluZGV4IDIxODJhNjJiMTMwMzQzYWY1NjcyMTczNjNhM2Y1YzFiODg2MTgxZmYuLmUwYWFi
ZjVmMmVlMTg1YjdkMTMzMTYwMzdkOGMxZDg4ODQyNDY4NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaApAQCAt
Mjk3LDcgKzI5Nyw3IEBAIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6aXNNb2RpZmllZEFy
Z3VtZW50RGVzY3JpcHRvcih1bnNpZ25lZCBpbmRleCwgdW5zaWduCiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFR5cGU+Ci12b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmNvcHlUb0FyZ3VtZW50
cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmly
dHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKQordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAg
LTMwNSw5ICszMDUsOSBAQCB2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmNvcHlUb0FyZ3Vt
ZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRgogICAgIFR5cGUqIHRoaXNP
YmplY3QgPSBzdGF0aWNfY2FzdDxUeXBlKj4odGhpcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5pc01hcHBlZEFy
Z3VtZW50KGkgKyBvZmZzZXQpKQotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVu
dERlc3QgKyBpKSA9IHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsKKyAg
ICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNr
bHkoaSArIG9mZnNldCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgY2FsbEZyYW1lLT5y
KGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IGdldChnbG9iYWxPYmplY3QsIGkgKyBvZmZzZXQpOwor
ICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IGdldChnbG9iYWxPYmplY3QsIGkgKyBv
ZmZzZXQpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsK
ICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAKaW5kZXggNDRjN2U1MjBmMWMwYTI0MGE4YjY2NjVhMjc0YTUxNDQ1OTM4NzY2MC4uNmQwNzU5
MTcxMWVlZGJjMjhlMGU0ZGE3ODQ5ODIyYWI4ZDY2ZjVkMSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKQEAgLTEyMzAsNyArMTIzMCw3IEBAIHZvaWQgSlNBcnJh
eTo6ZmlsbEFyZ0xpc3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTWFya2VkQXJndW1l
bnRCdWZmZXImIGFyCiAgICAgICAgIGFyZ3MuYXBwZW5kKGdldChnbG9iYWxPYmplY3QsIGkpKTsK
IH0KIAotdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1l
bnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgSlNBcnJheTo6
Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZp
cnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CkBAIC0xMjY5LDcgKzEyNjksNyBAQCB2b2lkIEpTQXJyYXk6OmNvcHlU
b0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZQogICAgICAgICAgICAgZG91YmxlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUo
KS5hdCh0aGlzLCBpKTsKICAgICAgICAgICAgIGlmICh2ICE9IHYpCiAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkgLSBv
ZmZzZXQpID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdik7CisgICAgICAgICAg
ICBmaXJzdEVsZW1lbnREZXN0W2kgLSBvZmZzZXRdID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVB
c0RvdWJsZSwgdik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTI5NCwx
MSArMTI5NCwxMSBAQCB2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZQogICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07CiAgICAgICAgIGlmICghdikKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkgLSBvZmZz
ZXQpID0gdi5nZXQoKTsKKyAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IHYu
Z2V0KCk7CiAgICAgfQogICAgIAogICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpIC0gb2Zmc2V0KSA9IGdldChnbG9i
YWxPYmplY3QsIGkpOworICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2kgLSBvZmZzZXRdID0gZ2V0
KGdsb2JhbE9iamVjdCwgaSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCmlu
ZGV4IDMxNzk0OWM1NzJhMTFiNzVhZGMxODNhYzllNDE0NGY2NmNmNmFiNTAuLjMxMTY1YjVmZjQ5
MjU0Y2MxYTZjNDc5MDJiNzkxMGFjNGE3ZDliZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmgKQEAgLTE2Myw3ICsxNjMsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaWxsQXJnTGlzdChKU0dsb2JhbE9iamVjdCosIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb3B5VG9Bcmd1
bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RF
bGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwog
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0l0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9u
T2JzZXJ2YWJsZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAKaW5kZXggZTMyZTk0OTdkNDc4Mjk1MDMzZGFhOTlh
NTkzNmRlYTE5YTFjNDljMC4uZTQ5MDk3NTYxNmRhZDM5MTE0MjM4MmM5OTNlNzhkMTJjMTkxMWMy
YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVC
dXR0ZXJmbHkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRh
YmxlQnV0dGVyZmx5LmNwcApAQCAtNDYsMTMgKzQ2LDEzIEBAIHZvaWQgSlNJbW11dGFibGVCdXR0
ZXJmbHk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
ICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5k
YXRhKCksIGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOwogfQogCi12b2lkIEpTSW1tdXRhYmxl
QnV0dGVyZmx5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJn
dW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGlmICgoaSArIG9mZnNldCkgPCBwdWJsaWNMZW5n
dGgoKSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBn
ZXQoaSArIG9mZnNldCk7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0gZ2V0KGkg
KyBvZmZzZXQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RF
bGVtZW50RGVzdCArIGkpID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVu
dERlc3RbaV0gPSBqc1VuZGVmaW5lZCgpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgKaW5kZXggYWNiNjg0
ODE5MWExOTAzNTIyYjliM2U0ZDAwZjk2OWU0MGI3ODE1YS4uMDdlMWE4YTEwYzNjZGM3MTE3YWNh
M2RjNTQzZWQ3ZGRiMGQ0MWYzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCkBAIC0xNDcsNyArMTQ3LDcgQEAgcHVibGlj
OgogCiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OwogCi0gICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUq
LCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpOworICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNjZXNzPgogICAgIHN0YXRp
YyBDb21wbGV0ZVN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNMb2NrLmNwcAppbmRleCBhNmViMGVhNWY2YWFkZWIzN2QyNzc5NGY3Yzkx
M2Y2ODE2ODM0OTdlLi4xNmFhMzY5ZjQ4NTA3MDYxYzA2MzYxNTE4YWUxNWQyYmM2OGZiNmRkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKQEAgLTIwNCw2ICsyMDQs
NyBAQCB2b2lkIEpTTG9jazo6d2lsbFJlbGVhc2VMb2NrKCkKIHsgICAKICAgICBSZWZQdHI8Vk0+
IHZtID0gbV92bTsKICAgICBpZiAodm0pIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9N
RVNTQUdFKCF2bS0+aGFzQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSgpLCAiUmVsZWFzaW5nIEpTTG9j
ayBidXQgcGVuZGluZyBjaGVja3BvaW50IHNpZGUgc3RhdGUgc3RpbGwgYXZhaWxhYmxlIik7CiAg
ICAgICAgIHZtLT5kcmFpbk1pY3JvdGFza3MoKTsKIAogICAgICAgICBpZiAoIXZtLT50b3BDYWxs
RnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQ
cm9ncmFtRXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1
bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAKaW5kZXggZGIwNTI1NDg4MjUzMzlhNmIxMzJiYTRlNDQy
YjIxMWQ2ZGUzN2JhMC4uNTk2ODA4Y2FmYzBiMGY0Yzg0NzBiZDc1OWVkOWY0OTE2YzY2NDQ4NSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4
ZWN1dGFibGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlLmNwcApAQCAtNzQsNyArNzQsNyBAQCBNb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZSogTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZShKU0dsb2JhbE9iamVjdCogZ2xv
YmFsTwogCiAgICAgZXhlY3V0YWJsZS0+bV91bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2su
c2V0KGdsb2JhbE9iamVjdC0+dm0oKSwgZXhlY3V0YWJsZSwgdW5saW5rZWRNb2R1bGVQcm9ncmFt
Q29kZSk7CiAKLSAgICBleGVjdXRhYmxlLT5tX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUu
c2V0KGdsb2JhbE9iamVjdC0+dm0oKSwgZXhlY3V0YWJsZSwganNDYXN0PFN5bWJvbFRhYmxlKj4o
dW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZS0+Y29uc3RhbnRSZWdpc3Rlcih1bmxpbmtlZE1vZHVs
ZVByb2dyYW1Db2RlLT5tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rl
ck9mZnNldCgpKS5nZXQoKSktPmNsb25lU2NvcGVQYXJ0KGdsb2JhbE9iamVjdC0+dm0oKSkpOwor
ICAgIGV4ZWN1dGFibGUtPm1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZS5zZXQoZ2xvYmFs
T2JqZWN0LT52bSgpLCBleGVjdXRhYmxlLCBqc0Nhc3Q8U3ltYm9sVGFibGUqPih1bmxpbmtlZE1v
ZHVsZVByb2dyYW1Db2RlLT5jb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcih1bmxpbmtl
ZE1vZHVsZVByb2dyYW1Db2RlLT5tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRS
ZWdpc3Rlck9mZnNldCgpKSkuZ2V0KCkpLT5jbG9uZVNjb3BlUGFydChnbG9iYWxPYmplY3QtPnZt
KCkpKTsKIAogICAgIHJldHVybiBleGVjdXRhYmxlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmNwcAppbmRleCAxNzZmOTlkNDllOTgwMWZiNzM4MWQyYWFlMTdhMWNj
MGQ1NmFiYWJjLi43NGNjZGViMjc5NGNlNWY0YmFhNzcxNDEwMjM4ODE1Zjg3NjMzMDBlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcApAQCAtNTA5LDExICs1MDks
OSBAQCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKICAgICBpZiAoT3B0
aW9uczo6c29mdFJlc2VydmVkWm9uZVNpemUoKSA8IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNpemUo
KSArIG1pbmltdW1SZXNlcnZlZFpvbmVTaXplKQogICAgICAgICBPcHRpb25zOjpzb2Z0UmVzZXJ2
ZWRab25lU2l6ZSgpID0gT3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6ZSgpICsgbWluaW11bVJlc2Vy
dmVkWm9uZVNpemU7CiAKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIC8vIEZJWE1FOiBNYWtl
IHByb2JlIE9TUiBleGl0IHdvcmsgb24gMzItYml0OgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc5NTYKICAgICBPcHRpb25zOjp1c2VQcm9iZU9TUkV4
aXQoKSA9IGZhbHNlOwotI2VuZGlmCiAKICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvZGVDYWNoZSgp
KQogICAgICAgICBPcHRpb25zOjpkaXNrQ2FjaGVQYXRoKCkgPSBudWxscHRyOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAKaW5kZXggMDgx
ZDk3OGE3YjJhNjI2NmFjNTUyYzM3OWQzODQ1MDA1ZGMxMWYxMC4uM2M3NDBkNDhmNjI0MWIwMjYw
NWZiZjUyNWJkZGYyMzE5MmQwOWRiMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCkBAIC0xNDgsOSArMTQ4LDkgQEAgdm9pZCBTY29w
ZWRBcmd1bWVudHM6OnVubWFwQXJndW1lbnQoVk0mIHZtLCB1aW50MzJfdCBpKQogICAgICAgICBz
dG9yYWdlKClbaSAtIG5hbWVkTGVuZ3RoXS5jbGVhcigpOwogfQogCi12b2lkIFNjb3BlZEFyZ3Vt
ZW50czo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIFNjb3BlZEFyZ3VtZW50czo6Y29weVRv
QXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxl
bWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIEdlbmVy
aWNBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmly
c3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgIEdlbmVyaWNBcmd1bWVudHM6OmNv
cHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVu
Z3RoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCmluZGV4IGY4NWU0N2RmYmVlOGNhN2MzNzA0ZjI5
ZWQ0Y2IxYjRlOTcyMDQ0NTcuLmU1OGNiMjJlZmQ0OGM2NzRiZjViMWIxMTI4MGI1MWFiYzBkZTA4
NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3Vt
ZW50cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50
cy5oCkBAIC0xNDIsNyArMTQyLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gR2VuZXJpY0Fy
Z3VtZW50czxTY29wZWRBcmd1bWVudHM+Ojppc01vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKGlu
ZGV4LCBtX3RhYmxlLT5sZW5ndGgoKSk7CiAgICAgfQogCi0gICAgdm9pZCBjb3B5VG9Bcmd1bWVu
dHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVt
ZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgY29w
eVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgREVDTEFSRV9JTkZPOwog
ICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IGE5ZmU3NGE0YjdmNDQy
OTU5Y2IwZTg3YTZlMGY1ODk5N2E2MjY2ZjYuLjU3YzJhNzgyOTM4OTkyNmFkZjk4ZmE3Y2VhMzJi
MWM2YWU0MmUyYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTM0LDYg
KzM0LDcgQEAKICNpbmNsdWRlICJCb29sZWFuT2JqZWN0LmgiCiAjaW5jbHVkZSAiQnVpbHRpbkV4
ZWN1dGFibGVzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5oIgorI2lu
Y2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiQ2xvbmVkQXJn
dW1lbnRzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZUNhY2hlLmgi
CkBAIC0xMDYyLDggKzEwNjMsMzEgQEAgdm9pZCBWTTo6Z2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3Rz
KENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cykKICAgICAgICAgfQogICAgIH0K
IH0KKwordm9pZCBWTTo6c2NhblNpZGVTdGF0ZShDb25zZXJ2YXRpdmVSb290cyYgcm9vdHMpIGNv
bnN0Cit7CisgICAgQVNTRVJUKGhlYXAud29ybGRJc1N0b3BwZWQoKSk7CisgICAgZm9yIChjb25z
dCBhdXRvJiBpdGVyIDogbV9jaGVja3BvaW50U2lkZVN0YXRlKSB7CisgICAgICAgIHN0YXRpY19h
c3NlcnQoc2l6ZW9mKGl0ZXIudmFsdWUtPnRtcHMpIC8gc2l6ZW9mKEpTVmFsdWUpID09IG1heE51
bUNoZWNrcG9pbnRUbXBzKTsKKyAgICAgICAgcm9vdHMuYWRkKGl0ZXIudmFsdWUtPnRtcHMsIGl0
ZXIudmFsdWUtPnRtcHMgKyBtYXhOdW1DaGVja3BvaW50VG1wcyk7CisgICAgfQorfQogI2VuZGlm
CiAKK3ZvaWQgVk06OmFkZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4mJiBwYXlsb2Fk
KQoreworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBh
dXRvIGFkZFJlc3VsdCA9IG1fY2hlY2twb2ludFNpZGVTdGF0ZS5hZGQoY2FsbEZyYW1lLCBXVEZN
b3ZlKHBheWxvYWQpKTsKKyAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0Lmlz
TmV3RW50cnkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3Rh
dGU+IFZNOjpmaW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
K3sKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgYXV0
byBzaWRlU3RhdGUgPSBtX2NoZWNrcG9pbnRTaWRlU3RhdGUudGFrZShjYWxsRnJhbWUpOworICAg
IHJldHVybiBzaWRlU3RhdGU7Cit9CisKIHZvaWQgbG9nU2FuaXRpemVTdGFjayhWTSYgdm0pCiB7
CiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VTYW5pdGl6ZVN0YWNrKCkgJiYgdm0udG9wQ2FsbEZy
YW1lKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCBmNzcxZDA5MjU2YWY5MTUw
MzBkYTU5ZWUzMTgyODBmMzRkZjcxMGFmLi43ZGEzMmE3MjYyNGYwYmZhYWY0ZTU5YTVmN2RhNDRj
MjcyM2RjNTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTEwMywxMCArMTAz
LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQnVpbHRpbkV4ZWN1dGFibGVzOwogY2xhc3Mg
Qnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeTsKIGNsYXNzIENhbGxGcmFtZTsKK3N0cnVjdCBDaGVj
a3BvaW50T1NSRXhpdFNpZGVTdGF0ZTsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIENvZGVDYWNo
ZTsKIGNsYXNzIENvbW1vbklkZW50aWZpZXJzOwogY2xhc3MgQ29tcGFjdFZhcmlhYmxlTWFwOwor
Y2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7CiBjbGFzcyBDdXN0b21HZXR0ZXJTZXR0ZXI7CiBjbGFz
cyBET01BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXI7CiBjbGFzcyBEYXRlSW5zdGFuY2U7CkBAIC05NTgs
NiArOTYwLDExIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3Rz
KENvbnNlcnZhdGl2ZVJvb3RzJik7CiAKKyAgICB2b2lkIGFkZENoZWNrcG9pbnRPU1JTaWRlU3Rh
dGUoQ2FsbEZyYW1lKiwgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRl
PiYmKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IGZp
bmRDaGVja3BvaW50T1NSU2lkZVN0YXRlKENhbGxGcmFtZSopOworICAgIGJvb2wgaGFzQ2hlY2tw
b2ludE9TUlNpZGVTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2hlY2twb2ludFNpZGVTdGF0ZS5z
aXplKCk7IH0KKyAgICB2b2lkIHNjYW5TaWRlU3RhdGUoQ29uc2VydmF0aXZlUm9vdHMmKSBjb25z
dDsKKwogICAgIFZNRW50cnlTY29wZSogZW50cnlTY29wZTsKIAogICAgIEpTT2JqZWN0KiBzdHJp
bmdSZWN1cnNpb25DaGVja0ZpcnN0T2JqZWN0IHsgbnVsbHB0ciB9OwpAQCAtMTIwOCw2ICsxMjE1
LDcgQEAgcHJpdmF0ZToKICAgICBMb2NrIG1fc2NyYXRjaEJ1ZmZlckxvY2s7CiAgICAgVmVjdG9y
PFNjcmF0Y2hCdWZmZXIqPiBtX3NjcmF0Y2hCdWZmZXJzOwogICAgIHNpemVfdCBtX3NpemVPZkxh
c3RTY3JhdGNoQnVmZmVyIHsgMCB9OworICAgIEhhc2hNYXA8Q2FsbEZyYW1lKiwgc3RkOjp1bmlx
dWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPj4gbV9jaGVja3BvaW50U2lkZVN0YXRl
OwogICAgIElubGluZVdhdGNocG9pbnRTZXQgbV9wcmltaXRpdmVHaWdhY2FnZUVuYWJsZWQ7CiAg
ICAgRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlIG1fZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250cm9sRmxvd1Byb2ZpbGVyPiBtX2NvbnRyb2xGbG93UHJv
ZmlsZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0
b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcAppbmRl
eCA4MWM5ZjFmNjc0NzA3OWVkODMxMjY2MmMwODMwMGM2Y2MzNjI4ZTM3Li5lMTQ4NDAwZDQ4N2Rm
YzY0ZTQ0MDU0ZGRhZGIwODU4OTcyZTM5YTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9WTUluc3BlY3Rvci5jcHAKQEAgLTM5Nyw4ICszOTcsOCBAQCB2b2lkIFZNSW5zcGVjdG9y
OjpkdW1wUmVnaXN0ZXJzKENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgIGNvbnN0IFJlZ2lzdGVy
KiBpdDsKICAgICBjb25zdCBSZWdpc3RlciogZW5kOwogCi0gICAgaXQgPSBjYWxsRnJhbWUtPnJl
Z2lzdGVycygpICsgQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgY2FsbEZyYW1lLT5hcmd1
bWVudENvdW50KCk7Ci0gICAgZW5kID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIENhbGxGcmFt
ZVNsb3Q6OnRoaXNBcmd1bWVudCAtIDE7CisgICAgaXQgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygp
ICsgKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpKTsKKyAgICBlbmQgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgKENhbGxGcmFtZVNsb3Q6
OnRoaXNBcmd1bWVudCAtIDEpOwogICAgIHdoaWxlIChpdCA+IGVuZCkgewogICAgICAgICBKU1Zh
bHVlIHYgPSBpdC0+anNWYWx1ZSgpOwogICAgICAgICBpbnQgcmVnaXN0ZXJOdW1iZXIgPSBpdCAt
IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCmluZGV4IGY2ODhhN2M5ZTk0MjZkOWUwYmVhM2Fm
MGNmZmFmMmMyN2RkNWE1NjcuLjJmNGIxYzdkZTZhODdjNzQxMWU4NmU4N2U3ZjE5MjQ3MzUyYzBm
OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNv
ZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNv
ZGVCbG9jay5oCkBAIC03MiwxMSArNzIsMTEgQEAgcHVibGljOgogICAgIGNvbnN0IFZlY3Rvcjx1
aW50NjRfdD4mIGNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzOyB9CiAgICAg
Y29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuICpt
X2luc3RydWN0aW9uczsgfQogCi0gICAgQUxXQVlTX0lOTElORSB1aW50NjRfdCBnZXRDb25zdGFu
dChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzW2luZGV4IC0gRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXhdOyB9Ci0gICAgQUxXQVlTX0lOTElORSBUeXBlIGdldENvbnN0YW50
VHlwZShpbnQgaW5kZXgpIGNvbnN0CisgICAgQUxXQVlTX0lOTElORSB1aW50NjRfdCBnZXRDb25z
dGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1tyZWcu
dG9Db25zdGFudEluZGV4KCldOyB9CisgICAgQUxXQVlTX0lOTElORSBUeXBlIGdldENvbnN0YW50
VHlwZShWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKE9w
dGlvbnM6OmR1bXBHZW5lcmF0ZWRXYXNtQnl0ZWNvZGVzKCkpOwotICAgICAgICByZXR1cm4gbV9j
b25zdGFudFR5cGVzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOworICAgICAg
ICByZXR1cm4gbV9jb25zdGFudFR5cGVzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07CiAgICAgfQog
CiAgICAgdm9pZCBzZXRJbnN0cnVjdGlvbnMoc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3Ry
ZWFtPik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRH
ZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJh
dG9yLmNwcAppbmRleCBkZDFhMGY3OTk2NTZhNmQ5NDBlMDY5YjBlNmVkY2I2ZmViZjJkN2FjLi5m
YzAzOGY1ZTZiYzk5OTEyOTk2NzM5YTc5NjVjNDc4OWU5ZTg0NjFlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKQEAgLTI0Miw2ICsy
NDIsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFBhcnNlcihGdW5jdGlvblBhcnNlcjxMTElu
dEdlbmVyYXRvcj4qIHBhcnNlcikgeyBtX3BhcnNlciA9IHBhcnNlcjsgfTsKIAorICAgIC8vIFdl
IG5lZWQgdGhpcyBmb3IgYXV0b2dlbmVyYXRlZCB0ZW1wbGF0ZXMgdXNlZCBieSBKUyBieXRlY29k
ZXMuCisgICAgdm9pZCBzZXRVc2VzQ2hlY2twb2ludHMoKSBjb25zdCB7IFVOUkVBQ0hBQkxFX0ZP
Ul9QTEFURk9STSgpOyB9CisKICAgICB2b2lkIGR1bXAoY29uc3QgQ29udHJvbFN0YWNrJiwgY29u
c3QgU3RhY2sqKSB7IH0KIAogcHJpdmF0ZToKQEAgLTYyOCwxNCArNjMxLDE0IEBAIGF1dG8gTExJ
bnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNhbGxlZShjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSkgLT4gVmVjCiAgICAgICAgICAgICBpZiAoZ3BySW5kZXggPCBtYXhHUFJJbmRleCkK
ICAgICAgICAgICAgICAgICBtX3Jlc3VsdHMuYXBwZW5kKHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KG51bWJlck9mTExJbnRDYWxsZWVTYXZlUmVnaXN0ZXJzICsgZ3BySW5kZXgrKykpOwogICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fcmVzdWx0cy5hcHBlbmQodmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoc3RhY2tJbmRleCsrKSk7CisgICAgICAgICAgICAgICAgbV9yZXN1bHRz
LmFwcGVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoc3RhY2tJbmRl
eCsrKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUeXBlOjpGMzI6CiAgICAg
ICAgIGNhc2UgVHlwZTo6RjY0OgogICAgICAgICAgICAgaWYgKGZwckluZGV4IDwgbWF4RlBSSW5k
ZXgpCiAgICAgICAgICAgICAgICAgbV9yZXN1bHRzLmFwcGVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChudW1iZXJPZkxMSW50Q2FsbGVlU2F2ZVJlZ2lzdGVycyArIGZwckluZGV4KyspKTsKICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX3Jlc3VsdHMuYXBwZW5kKHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KHN0YWNrSW5kZXgrKykpOworICAgICAgICAgICAgICAgIG1fcmVz
dWx0cy5hcHBlbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKHN0YWNr
SW5kZXgrKykpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVm9pZDoKICAgICAg
ICAgY2FzZSBGdW5jOgpAQCAtNjcwLDcgKzY3Myw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFk
ZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAog
ICAgICAgICBpZiAoY291bnQgPCBtYXgpCiAgICAgICAgICAgICBtX25vcm1hbGl6ZWRBcmd1bWVu
dHNbaW5kZXhdID0gcmVnaXN0ZXJBcmd1bWVudHNbY291bnQrK107CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG1fbm9ybWFsaXplZEFyZ3VtZW50c1tpbmRleF0gPSB2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudChzdGFja0luZGV4KyspOworICAgICAgICAgICAgbV9ub3JtYWxpemVkQXJndW1l
bnRzW2luZGV4XSA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhzdGFj
a0luZGV4KyspOwogICAgIH07CiAKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgc2lnbmF0
dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtT3BlcmF0aW9ucy5jcHAKaW5kZXggZGJmYjUwMGNlNTU4ZjI5ZWIyNmUxZGRkMTBlYjk1
MTZlMDAyZjU5OS4uNTZjYTU0N2E3NGEzN2U5YTAxMDY1MWE2YjYxMzQ3MmVmM2ZjMzZhYSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcApAQCAtNzQ0
LDcgKzc0NCw3IEBAIHZvaWQqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRp
b24oQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFdhc206OkV4Y2VwCiAgICAgLy8gZm9yIGV4Y2VwdGlv
bnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIg
YmVmb3JlIGp1bXBpbmcKICAgICAvLyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdlIGRp
ZCB0aGlzLCB3ZSBjb3VsZCByZW1vdmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgogICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKLSAgICBiaXR3aXNlX2Nh
c3Q8dWludDY0X3QqPihjYWxsRnJhbWUpW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0gPSBiaXR3aXNl
X2Nhc3Q8dWludDY0X3Q+KGluc3RhbmNlLT5tb2R1bGUoKSk7CisgICAgYml0d2lzZV9jYXN0PHVp
bnQ2NF90Kj4oY2FsbEZyYW1lKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSldID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90PihpbnN0YW5jZS0+bW9kdWxlKCkpOwogICAgIHJl
dHVybiB2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdzsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAppbmRleCA5MjdhNjk4NGEzYmUwMTRjZjNlYTdk
NjdmMDM0NTg0ZWViZWI2MGNlLi41NGY2MzZhYzFiNTA3NWQxYzY2N2IzOGE5MDMxMzI5MGQ1ZjMz
M2NlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcApA
QCAtNzYsNyArNzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIExMSW50IHsKIAogI2Rl
ZmluZSBSRUFEKHZpcnR1YWxSZWdpc3RlcikgXAogICAgICh2aXJ0dWFsUmVnaXN0ZXIuaXNDb25z
dGFudCgpIFwKLSAgICAgICAgPyBKU1ZhbHVlOjpkZWNvZGUoQ09ERV9CTE9DSygpLT5nZXRDb25z
dGFudCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkpKSBcCisgICAgICAgID8gSlNWYWx1ZTo6ZGVj
b2RlKENPREVfQkxPQ0soKS0+Z2V0Q29uc3RhbnQodmlydHVhbFJlZ2lzdGVyKSkgXAogICAgICAg
ICA6IGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIpKQogCiBpbmxpbmUgYm9vbCBqaXRDb21w
aWxlQW5kU2V0SGV1cmlzdGljcyhXYXNtOjpMTEludENhbGxlZSogY2FsbGVlLCBXYXNtOjpGdW5j
dGlvbkNvZGVCbG9jayogY29kZUJsb2NrLCBXYXNtOjpJbnN0YW5jZSogaW5zdGFuY2UpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmOWZmNTA4MTEyYTliMzU1
YjNhYjFhYmM3Mjk3MDY4NWM2ZjZlNmI4Li5lMTI1YWQzNmI3OGUxZTY1YjVlMDc3NWY1ODBjNjE5
N2RjYzMwNDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTM5Myw2ICszOTMsNyBAQAogCQk1MzExQkQ1NzFFQTdFMUExMDA1MjUyODEgLyogU2lnbmFscy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaWduYWxzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUzMTFCRDU5MUVBODFBOTYwMDUyNTI4MSAvKiBUaHJlYWRNZXNz
YWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZE1lc3NhZ2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMxMUJENUIxRUE4MjJGOTAwNTI1MjgxIC8q
IFRocmVhZE1lc3NhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VGhyZWFkTWVzc2FnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMzhFQkE0
MjNBQjA0RDEwMDM4MjY2MiAvKiBFbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzUzNEYyOTFFQzBFMTBFMDAxNDFCMkYgLyog
TWFjaEV4Y2VwdGlvbnMuZGVmcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUubWlnOyBwYXRoID0gTWFj
aEV4Y2VwdGlvbnMuZGVmczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM5RUIwNjIx
RDU1Mjg0MjAwQzgyRUY3IC8qIExFQkRlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTEVCRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0VD
MjUzQzFFOTVBRDMwMDAwODMxQjkgLyogUHJpb3JpdHlRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQcmlvcml0eVF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC05ODcsNiArOTg4LDcgQEAKIAkJCQlBOEE0NzI5ODE1MUE4MjVBMDA0MTIzRkYgLyog
ZHRvYS5oICovLAogCQkJCUZFMDVGQUU2MUZEQjIxNDMwMDA5MzIzMCAvKiBEdW1iUHRyVHJhaXRz
LmggKi8sCiAJCQkJQUQ2NTNEQTgyMDA2QjZDMjAwRDgyMEQ3IC8qIER1bWJWYWx1ZVRyYWl0cy5o
ICovLAorCQkJCTUzMzhFQkE0MjNBQjA0RDEwMDM4MjY2MiAvKiBFbnVtQ2xhc3NPcGVyYXRvck92
ZXJsb2Fkcy5oICovLAogCQkJCTFBRUE4OEUxMUQ2QkJDRjQwMEU1QUQ2NCAvKiBFbnVtVHJhaXRz
LmggKi8sCiAJCQkJQUQ3QzQzNEExREQyQTRBNzAwMjY4ODhCIC8qIEV4cGVjdGVkLmggKi8sCiAJ
CQkJQThBNDcyOUYxNTFBODI1QTAwNDEyM0ZGIC8qIEV4cG9ydE1hY3Jvcy5oICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvQml0bWFwLmggYi9Tb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaApp
bmRleCA0YzZmNWQ0NDI2MzJjM2VmYzAwMGJkMThlOWUzNjk0NTJmYWYxYzEwLi5iNDZkYTllODVh
YjliNjg2MjQzOGE2OTJlMzY2YTc1MDU0ZGNjNmMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9CaXRtYXAuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaApAQCAtNTEsNiArNTEsNyBA
QCBwdWJsaWM6CiAgICAgc2l6ZV90IG5leHRQb3NzaWJseVVuc2V0KHNpemVfdCkgY29uc3Q7CiAg
ICAgdm9pZCBjbGVhcihzaXplX3QpOwogICAgIHZvaWQgY2xlYXJBbGwoKTsKKyAgICB2b2lkIGlu
dmVydCgpOwogICAgIGludDY0X3QgZmluZFJ1bk9mWmVyb3Moc2l6ZV90IHJ1bkxlbmd0aCkgY29u
c3Q7CiAgICAgc2l6ZV90IGNvdW50KHNpemVfdCBzdGFydCA9IDApIGNvbnN0OwogICAgIHNpemVf
dCBpc0VtcHR5KCkgY29uc3Q7CkBAIC0xMDIsNiArMTAzLDEyIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKICAgICAgICAgfQogCisgICAgICAgIGl0ZXJh
dG9yJiBvcGVyYXRvcj0oYm9vbCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbV9iaXRt
YXAtPnNldChtX2luZGV4LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
ICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIGNvbnN0IEJpdG1hcCogbV9iaXRtYXA7CiAg
ICAgICAgIHNpemVfdCBtX2luZGV4OwpAQCAtMTExLDYgKzExOCw5IEBAIHB1YmxpYzoKICAgICBp
dGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBmaW5kQml0KDAs
IHRydWUpKTsgfQogICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0
aGlzLCBiaXRtYXBTaXplKTsgfQogICAgIAorICAgIGl0ZXJhdG9yIG9wZXJhdG9yW10oc2l6ZV90
KTsKKyAgICBjb25zdCBpdGVyYXRvciBvcGVyYXRvcltdKHNpemVfdCkgY29uc3Q7CisKICAgICB2
b2lkIG1lcmdlQW5kQ2xlYXIoQml0bWFwJik7CiAgICAgdm9pZCBzZXRBbmRDbGVhcihCaXRtYXAm
KTsKICAgICAKQEAgLTIyNCw2ICsyMzQsMTMgQEAgaW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNp
emUsIFdvcmRUeXBlPjo6Y2xlYXJBbGwoKQogICAgIG1lbXNldChiaXRzLmRhdGEoKSwgMCwgc2l6
ZW9mKGJpdHMpKTsKIH0KIAordGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdv
cmRUeXBlPgoraW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6aW52ZXJ0
KCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmRzOyArK2kpCisgICAgICAgIGJp
dHNbaV0gPSB+Yml0c1tpXTsKK30KKwogdGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVu
YW1lIFdvcmRUeXBlPgogaW5saW5lIHNpemVfdCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+
OjpuZXh0UG9zc2libHlVbnNldChzaXplX3Qgc3RhcnQpIGNvbnN0CiB7CkBAIC00MDksNiArNDI2
LDE5IEBAIGlubGluZSBib29sIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om9wZXJhdG9y
IT0oY29uc3QgQml0bWFwJiBvdGhlcikgY29uc3QKICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7CiB9CiAKK3RlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4K
K2lubGluZSBhdXRvIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om9wZXJhdG9yW10oc2l6
ZV90IGluZGV4KSAtPiBpdGVyYXRvcgoreworICAgIEFTU0VSVChpbmRleCA8IHNpemUoKSk7Cisg
ICAgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBpbmRleCk7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBi
aXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KK2lubGluZSBhdXRvIEJpdG1hcDxiaXRtYXBT
aXplLCBXb3JkVHlwZT46Om9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCAtPiBjb25zdCBp
dGVyYXRvcgoreworICAgIHJldHVybiAoKmNvbnN0X2Nhc3Q8Qml0bWFwPGJpdG1hcFNpemUsIFdv
cmRUeXBlPio+KHRoaXMpKVtpbmRleF07Cit9CisKIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXpl
LCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSB1bnNpZ25lZCBCaXRtYXA8Yml0bWFwU2l6ZSwg
V29yZFR5cGU+OjpoYXNoKCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXggOGM3YjA1
MTc0MDBiMDE3YTAyY2FiN2I3M2U0ODk4MTNkOWRmNTU0NS4uYzg1MDk0MWNjYTJiN2I1M2M3ODlh
ZDU2NjJmNWY3ODgwMjM5YTYwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTU2LDYgKzU2LDcg
QEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwogICAgIERvdWJseUxpbmtlZExpc3QuaAogICAgIER1
bWJQdHJUcmFpdHMuaAogICAgIER1bWJWYWx1ZVRyYWl0cy5oCisgICAgRW51bUNsYXNzT3BlcmF0
b3JPdmVybG9hZHMuaAogICAgIEVudW1UcmFpdHMuaAogICAgIEV4cGVjdGVkLmgKICAgICBFeHBv
cnRNYWNyb3MuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRW51bUNsYXNzT3BlcmF0b3JP
dmVybG9hZHMuaCBiL1NvdXJjZS9XVEYvd3RmL0VudW1DbGFzc09wZXJhdG9yT3ZlcmxvYWRzLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMzU3YmEyZmEyZjc5MjlhNmE5OThhOWE0ZWYxNGQyYmU1NzU0NjM3MQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL0VudW1DbGFzc09wZXJhdG9yT3ZlcmxvYWRz
LmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorCisjZGVm
aW5lIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIG9wLCBl
bmFibGVFeHByZXNzaW9uKSBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gXAorICAgIGNvbnN0
ZXhwciBhdXRvIG9wZXJhdG9yIG9wKGVudW1OYW1lIGVudW1FbnRyeSwgVCB2YWx1ZSkgLT4gc3Rk
OjplbmFibGVfaWZfdDwoZW5hYmxlRXhwcmVzc2lvbiksIFQ+IFwKKyAgICB7IFwKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFQ+KGVudW1FbnRyeSkgb3AgdmFsdWU7IFwKKyAgICB9IFwKKyAg
ICBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gXAorICAgIGNvbnN0ZXhwciBhdXRvIG9wZXJh
dG9yIG9wKFQgdmFsdWUsIGVudW1OYW1lIGVudW1FbnRyeSkgLT4gc3RkOjplbmFibGVfaWZfdDwo
ZW5hYmxlRXhwcmVzc2lvbiksIFQ+IFwKKyAgICB7IFwKKyAgICAgICAgcmV0dXJuIHZhbHVlIG9w
IHN0YXRpY19jYXN0PFQ+KGVudW1FbnRyeSk7IFwKKyAgICB9IFwKKworI2RlZmluZSBPVkVSTE9B
RF9NQVRIX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCBlbmFibGVFeHBy
ZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVt
TmFtZSwgKywgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9F
TlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIC0sIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVS
TE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCAqLCBlbmFibGVFeHBy
ZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVt
TmFtZSwgLywgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9F
TlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsICUsIGVuYWJsZUV4cHJlc3Npb24pIFwKKworI2RlZmlu
ZSBPVkVSTE9BRF9NQVRIX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSVRIX0lOVEVHUkFMUyhl
bnVtTmFtZSkgT1ZFUkxPQURfTUFUSF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVt
TmFtZSwgc3RkOjppc19pbnRlZ3JhbF92PFQ+KQorCisjZGVmaW5lIE9WRVJMT0FEX1JFTEFUSU9O
QUxfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIGVuYWJsZUV4cHJlc3Np
b24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1l
LCA9PSwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVN
X0NMQVNTX1dIRU4oZW51bU5hbWUsICE9LCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAgT1ZFUkxP
QURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgPCwgZW5hYmxlRXhwcmVz
c2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5h
bWUsIDw9LCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VO
VU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgPiwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJM
T0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsID49LCBlbmFibGVFeHBy
ZXNzaW9uKSBcCisKKyNkZWZpbmUgT1ZFUkxPQURfUkVMQVRJT05BTF9PUEVSQVRPUlNfRk9SX0VO
VU1fQ0xBU1NfV0lUSF9JTlRFR1JBTFMoZW51bU5hbWUpIE9WRVJMT0FEX1JFTEFUSU9OQUxfT1BF
UkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIHN0ZDo6aXNfaW50ZWdyYWxfdjxU
PikKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oIGIvU291cmNl
L1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCmluZGV4IDczM2M2NWMwNzY1MGJjOGM0YmMwODFkYzA1
MmNhNGMzODlmOGRjZWQuLjk2ZGNjZTFjZGJjMzg3NGUzNjJiMzcwMGIyOGE0Zjk0NDMzODRhYzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgKQEAgLTQ1Miw3ICs0NTIsNyBAQCBwdWJsaWM6CiAgICAg
ewogICAgIH0KIAotICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAgIG9wZXJh
dG9yIGJvb2woKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuICEhKCptX3dvcmQgJiBtX21h
c2spOwogICAgIH0KQEAgLTQ2Niw2ICs0NjYsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAq
dGhpczsKICAgICB9CiAKKyAgICBGYXN0Qml0UmVmZXJlbmNlJiBvcGVyYXRvcnw9KGJvb2wgdmFs
dWUpIHsgcmV0dXJuIHZhbHVlID8gKnRoaXMgPSB2YWx1ZSA6ICp0aGlzOyB9CisgICAgRmFzdEJp
dFJlZmVyZW5jZSYgb3BlcmF0b3ImPShib29sIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA/ICp0aGlz
IDogKnRoaXMgPSB2YWx1ZTsgfQorCiBwcml2YXRlOgogICAgIHVpbnQzMl90KiBtX3dvcmQgeyBu
dWxscHRyIH07CiAgICAgdWludDMyX3QgbV9tYXNrIHsgMCB9OwpAQCAtNTExLDcgKzUxNCwxMSBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX3dvcmRzLmNsZWFyQWxsKCk7CiAgICAgfQotICAg
IAorCisgICAgLy8gRm9yIHRlbXBsYXRpbmcgYXMgVmVjdG9yPGJvb2w+CisgICAgdm9pZCBmaWxs
KGJvb2wgdmFsdWUpIHsgdmFsdWUgPyBzZXRBbGwoKSA6IGNsZWFyQWxsKCk7IH0KKyAgICB2b2lk
IGdyb3coc2l6ZV90IG5ld1NpemUpIHsgcmVzaXplKG5ld1NpemUpOyB9CisKICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBjbGVhclJhbmdlKHNpemVfdCBiZWdpbiwgc2l6ZV90IGVuZCk7CiAK
ICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnRlbnRzIG9mIHRoaXMgYml0dmVjdG9yIGNo
YW5nZWQuCkBAIC01OTEsNCArNTk4LDUgQEAgcHVibGljOgogCiB9IC8vIG5hbWVzcGFjZSBXVEYK
IAordXNpbmcgV1RGOjpGYXN0Qml0UmVmZXJlbmNlOwogdXNpbmcgV1RGOjpGYXN0Qml0VmVjdG9y
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVW5hbGlnbmVkQWNjZXNzLmggYi9Tb3VyY2Uv
V1RGL3d0Zi9VbmFsaWduZWRBY2Nlc3MuaAppbmRleCA1YTRlOWVmNDQ5NGVmNDZjYTllNGVlZjc3
ZmRjYzBkNjBmYWE0YTExLi4zYTM1YjM4ZjRjMDIzNjc5YWM3Y2ZjOWM0NjU2MDg0YTM5MTQ4M2Iy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9VbmFsaWduZWRBY2Nlc3MuaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9VbmFsaWduZWRBY2Nlc3MuaApAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2Ug
V1RGIHsKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CiBpbmxpbmUgVHlwZSB1bmFsaWduZWRMb2Fk
KGNvbnN0IHZvaWQqIHBvaW50ZXIpCiB7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZp
YWw8VHlwZT46OnZhbHVlLCAiIik7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxs
eV9jb3B5YWJsZTxUeXBlPjo6dmFsdWUsICIiKTsKICAgICBUeXBlIHJlc3VsdCB7IH07CiAgICAg
bWVtY3B5KCZyZXN1bHQsIHBvaW50ZXIsIHNpemVvZihUeXBlKSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKQEAgLTQzLDcgKzQzLDcgQEAgaW5saW5lIFR5cGUgdW5hbGlnbmVkTG9hZChjb25zdCB2b2lk
KiBwb2ludGVyKQogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KIGlubGluZSB2b2lkIHVuYWxpZ25l
ZFN0b3JlKHZvaWQqIHBvaW50ZXIsIFR5cGUgdmFsdWUpCiB7Ci0gICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3RyaXZpYWw8VHlwZT46OnZhbHVlLCAiIik7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3RyaXZpYWxseV9jb3B5YWJsZTxUeXBlPjo6dmFsdWUsICIiKTsKICAgICBtZW1jcHkocG9p
bnRlciwgJnZhbHVlLCBzaXplb2YoVHlwZSkpOwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYjZjZDk4NTllNjhmYTY1OTQ0N2VmYWIyYjYx
ZTA5YjdhYjYwZDQ1MC4uNGZjMWNlYjIwNGQxYjYwZGYyNjk2NDY2YTU5NWViNTc3M2JlM2JlMiAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE0IEBACisyMDIwLTAxLTE2ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUu
Y29tPgorCisgICAgICAgIFJlbGFuZCBieXRlY29kZSBjaGVja3BvaW50cyBzaW5jZSBidWdzIGhh
dmUgYmVlbiBmaXhlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjA2MzYxCisKKyAgICAgICAgVW5yZXZpZXdlZCwgcmVsYW5kLgorCisgICAgICAgIFRo
ZSB3YXRjaCBidWdzIGhhdmUgYmVlbiBmaXhlZCBieSBodHRwczovL3RyYWMud2Via2l0Lm9yZy9j
aGFuZ2VzZXQvMjU0Njc0CisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3Rz
OgorCiAyMDIwLTAxLTE2ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIGZhc3QvZm9ybXMvaW9zL3pvb20tYWZ0ZXItaW5wdXQtdGFwLXdpZGUtaW5wdXQu
aHRtbCBpcyB0aW1pbmcgb3V0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3Ry
ZXNzLXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwppbmRleCAxMjg5
NjA3YjQxYWY5NGU0YTg2ZjI5YWRmYzIxNzlhMzY2ZmM4Y2MyLi4wOWU0ZjE3YzI4YjAzZDczMWJj
MDMyMjg4MjMwMDhhNGZiMjc3ZjExIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3J1bi1qc2Mt
c3RyZXNzLXRlc3RzCisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKQEAg
LTQ5OCw3ICs0OTgsNiBAQCBOT19DSklUX09QVElPTlMgPSBbIi0tdXNlQ29uY3VycmVudEpJVD1m
YWxzZSIsICItLXRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwPTEwMAogQjNPMV9PUFRJT05TID0g
WyItLWRlZmF1bHRCM09wdExldmVsPTEiXQogQjNPMF9PUFRJT05TID0gWyItLW1heERGR05vZGVz
SW5CYXNpY0Jsb2NrRm9yUHJlY2lzZUFuYWx5c2lzPTEwMCIsICItLWRlZmF1bHRCM09wdExldmVs
PTAiXQogRlRMX09QVElPTlMgPSBbIi0tdXNlRlRMSklUPXRydWUiXQotUFJPQkVfT1NSX0VYSVRf
T1BUSU9OID0gWyItLXVzZVByb2JlT1NSRXhpdD10cnVlIl0KIEZPUkNFX0xMSU5UX0VYSVRfT1BU
SU9OUyA9IFsiLS1mb3JjZU9TUkV4aXRUb0xMSW50PXRydWUiXQogCiByZXF1aXJlX3JlbGF0aXZl
ICJ3ZWJraXRydWJ5L2pzYy1zdHJlc3MtdGVzdC13cml0ZXItI3skdGVzdFdyaXRlcn0iCkBAIC03
MTMsNyArNzEyLDcgQEAgZGVmIHJ1bkZUTE5vQ0pJVEIzTzAoKm9wdGlvbmFsVGVzdFNwZWNpZmlj
T3B0aW9ucykKIGVuZAogCiBkZWYgcnVuRlRMTm9DSklUVmFsaWRhdGUoKm9wdGlvbmFsVGVzdFNw
ZWNpZmljT3B0aW9ucykKLSAgICBydW4oImZ0bC1uby1jaml0LXZhbGlkYXRlLXNhbXBsaW5nLXBy
b2ZpbGVyIiwgIi0tdmFsaWRhdGVHcmFwaD10cnVlIiwgIi0tdXNlU2FtcGxpbmdQcm9maWxlcj10
cnVlIiwgIi0tYWlyRm9yY2VJUkNBbGxvY2F0b3I9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19D
SklUX09QVElPTlMgKyBQUk9CRV9PU1JfRVhJVF9PUFRJT04gKyBvcHRpb25hbFRlc3RTcGVjaWZp
Y09wdGlvbnMpKQorICAgIHJ1bigiZnRsLW5vLWNqaXQtdmFsaWRhdGUtc2FtcGxpbmctcHJvZmls
ZXIiLCAiLS12YWxpZGF0ZUdyYXBoPXRydWUiLCAiLS11c2VTYW1wbGluZ1Byb2ZpbGVyPXRydWUi
LCAiLS1haXJGb3JjZUlSQ0FsbG9jYXRvcj10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRf
T1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAogZGVmIHJ1bkZU
TE5vQ0pJVE5vUHV0U3RhY2tWYWxpZGF0ZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQpA
QCAtNzI5LDcgKzcyOCw3IEBAIGRlZiBydW5GVExOb0NKSVRPU1JWYWxpZGF0aW9uKCpvcHRpb25h
bFRlc3RTcGVjaWZpY09wdGlvbnMpCiBlbmQKIAogZGVmIHJ1bkRGR0VhZ2VyKCpvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpCi0gICAgcnVuKCJkZmctZWFnZXIiLCAqKEVBR0VSX09QVElPTlMg
KyBDT0xMRUNUX0NPTlRJTlVPVVNMWV9PUFRJT05TICsgUFJPQkVfT1NSX0VYSVRfT1BUSU9OICsg
Rk9SQ0VfTExJTlRfRVhJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkK
KyAgICBydW4oImRmZy1lYWdlciIsICooRUFHRVJfT1BUSU9OUyArIENPTExFQ1RfQ09OVElOVU9V
U0xZX09QVElPTlMgKyBGT1JDRV9MTElOVF9FWElUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGlvbnMpKQogZW5kCiAKIGRlZiBydW5ERkdFYWdlck5vQ0pJVFZhbGlkYXRlKCpvcHRp
b25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBi
L0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDFhMGE1Mjk3M2U5MjJjZGIwMzg5OTBjZDhmYmU1NmRi
YjJhYTQ2YjQuLmQyMGExOGI4OGQ2NWY5ZTc3ZWYyNDQ2ZWViZDdiMTRhY2FhY2FjNzIgMTAwNjQ0
Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjkgQEAKKzIwMjAtMDEtMTYgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5j
b20+CisKKyAgICAgICAgUmVsYW5kIGJ5dGVjb2RlIGNoZWNrcG9pbnRzIHNpbmNlIGJ1Z3MgaGF2
ZSBiZWVuIGZpeGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDYzNjEKKworICAgICAgICBVbnJldmlld2VkLCByZWxhbmQuCisKKyAgICAgICAgVGhl
IHdhdGNoIGJ1Z3MgaGF2ZSBiZWVuIGZpeGVkIGJ5IGh0dHBzOi8vdHJhYy53ZWJraXQub3JnL2No
YW5nZXNldC8yNTQ2NzQKKworICAgICAgICAqIHN0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQt
Z2V0LWxlbmd0aC1vbmNlLWV4Y2VwdGlvbnMtb2NjYXNpb25hbGx5LmpzOiBBZGRlZC4KKyAgICAg
ICAgKGV4cGVjdGVkQXJnQ291bnQpOgorICAgICAgICAoY2FsbGVlKToKKyAgICAgICAgKHRlc3Qp
OgorICAgICAgICAobGV0LmFycmF5LmdldCBsZW5ndGgpOgorICAgICAgICAqIHN0cmVzcy9hcHBs
eS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLmpzOiBBZGRlZC4KKyAgICAgICAgKGV4
cGVjdGVkQXJnQ291bnQpOgorICAgICAgICAoY2FsbGVlKToKKyAgICAgICAgKHRlc3QpOgorICAg
ICAgICAobGV0LmFycmF5LmdldCBsZW5ndGgpOgorICAgICAgICAqIHN0cmVzcy9sb2FkLXZhcmFy
Z3MtdGhlbi1pbmxpbmVkLWNhbGwtYW5kLWV4aXQtc3RyaWN0LmpzOgorICAgICAgICAoY2hlY2tF
cXVhbCk6CisgICAgICAgICogc3RyZXNzL3JlY3Vyc2l2ZS10YWlsLWNhbGwtd2l0aC1kaWZmZXJl
bnQtYXJndW1lbnQtY291bnQuanM6CisgICAgICAgICogc3RyZXNzL3Jlc3QtdmFyYXJncy1vc3It
ZXhpdC10by1jaGVja3BvaW50LmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgIChi
YXIpOgorCiAyMDIwLTAxLTE2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAg
ICAgICBvcGVyYXRpb25Ub09iamVjdCgpIHNob3VsZCBjaGVjayBmb3IgYSBudWxsIGVycm9yTWVz
c2FnZS4KZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1n
ZXQtbGVuZ3RoLW9uY2UtZXhjZXB0aW9ucy1vY2Nhc2lvbmFsbHkuanMgYi9KU1Rlc3RzL3N0cmVz
cy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLWV4Y2VwdGlvbnMtb2NjYXNp
b25hbGx5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzZjE1YTZlYjhjMjdjYzBhZDJlOWY1OTU0MWZmZTJjNTBh
YzBhMjMKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3ItZXhpdC1z
aG91bGQtZ2V0LWxlbmd0aC1vbmNlLWV4Y2VwdGlvbnMtb2NjYXNpb25hbGx5LmpzCkBAIC0wLDAg
KzEsMzYgQEAKKworbGV0IGN1cnJlbnRBcmdDb3VudDsKK2Z1bmN0aW9uIGV4cGVjdGVkQXJnQ291
bnQoKSB7CisgICAgcmV0dXJuIGN1cnJlbnRBcmdDb3VudDsKK30KK25vSW5saW5lKGV4cGVjdGVk
QXJnQ291bnQpOworCitmdW5jdGlvbiBjYWxsZWUoKSB7CisgICAgaWYgKGFyZ3VtZW50cy5sZW5n
dGggIT0gZXhwZWN0ZWRBcmdDb3VudCgpKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKK30K
KworZnVuY3Rpb24gdGVzdChhcnJheSkgeworICAgIGNhbGxlZS5hcHBseSh1bmRlZmluZWQsIGFy
cmF5KTsKK30KK25vSW5saW5lKHRlc3QpOworCitsZXQgbGVuZ3RoQ2FsbHMgPSAwOworY3VycmVu
dEFyZ0NvdW50ID0gMjsKK2xldCBhcnJheSA9IHsgMDogMSwgMTogMiwgZ2V0IGxlbmd0aCgpIHsK
KyAgICBpZiAobGVuZ3RoQ2FsbHMrKyAlIDEwID09IDEpCisgICAgICAgIHRocm93IG5ldyBFcnJv
cigidGhyb3dpbmcgYW4gZXhjZXB0aW9uIGluIGxlbmd0aCIpOworICAgIHJldHVybiBjdXJyZW50
QXJnQ291bnQKK30gfQorZm9yIChsZXQgaSA9IDA7IGkgPCAxZTY7IGkrKykgeworICAgIHRyeSB7
CisgICAgICAgIHRlc3QoYXJyYXkpOworICAgIH0gY2F0Y2ggeyB9Cit9CisKK2N1cnJlbnRBcmdD
b3VudCA9IDEwMDsKK2xlbmd0aENhbGxzID0gMDsKK3Rlc3QoYXJyYXkpOworCitpZiAobGVuZ3Ro
Q2FsbHMgIT09IDEpCisgICAgdGhyb3cgbmV3IEVycm9yKGxlbmd0aENhbGxzKTsKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvc3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2Uu
anMgYi9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNl
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjhiZWU0NWNlMWM3MjgzNjUzODI3MDVkOTlkMzAxYWU2YmNiOGQ4N2EK
LS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQt
Z2V0LWxlbmd0aC1vbmNlLmpzCkBAIC0wLDAgKzEsMzEgQEAKKworbGV0IGN1cnJlbnRBcmdDb3Vu
dDsKK2Z1bmN0aW9uIGV4cGVjdGVkQXJnQ291bnQoKSB7CisgICAgcmV0dXJuIGN1cnJlbnRBcmdD
b3VudDsKK30KK25vSW5saW5lKGV4cGVjdGVkQXJnQ291bnQpOworCitmdW5jdGlvbiBjYWxsZWUo
KSB7CisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT0gZXhwZWN0ZWRBcmdDb3VudCgpKQorICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKK30KKworZnVuY3Rpb24gdGVzdChhcnJheSkgeworICAg
IGNhbGxlZS5hcHBseSh1bmRlZmluZWQsIGFycmF5KTsKK30KK25vSW5saW5lKHRlc3QpOworCits
ZXQgbGVuZ3RoQ2FsbHMgPSAwOworY3VycmVudEFyZ0NvdW50ID0gMjsKK2xldCBhcnJheSA9IHsg
MDogMSwgMTogMiwgZ2V0IGxlbmd0aCgpIHsgbGVuZ3RoQ2FsbHMrKzsgcmV0dXJuIGN1cnJlbnRB
cmdDb3VudCB9IH0KK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyBpKyspCisgICAgdGVzdChhcnJh
eSk7CisKKwordGVzdChhcnJheSk7CitjdXJyZW50QXJnQ291bnQgPSAxMDA7CitsZW5ndGhDYWxs
cyA9IDA7Cit0ZXN0KGFycmF5KTsKKworaWYgKGxlbmd0aENhbGxzICE9PSAxKQorICAgIHRocm93
IG5ldyBFcnJvcihsZW5ndGhDYWxscyk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9sb2Fk
LXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtYW5kLWV4aXQtc3RyaWN0LmpzIGIvSlNUZXN0cy9z
dHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qcwpp
bmRleCAzNjE4ZjhjYmIzZDMyMTEzNDBlNmEwNzIwNzJmMTQzZTVjNDZjMjQyLi5hYTczMjMxOTBj
ZjQ5ZDg4ZTNmZmU5MTJiMWUxNmFhNDdkNTBmOTRiIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVz
cy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtYW5kLWV4aXQtc3RyaWN0LmpzCisrKyBi
L0pTVGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1hbmQtZXhpdC1z
dHJpY3QuanMKQEAgLTE4LDggKzE4LDggQEAgZnVuY3Rpb24gY2hlY2tFcXVhbChhLCBiKSB7CiAg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGE6ICIgKyBhLmEgKyAiIHZlcnN1cyAi
ICsgYi5hOwogICAgIGlmIChhLmIgIT0gYi5iKQogICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2
YWx1ZSBvZiBiOiAiICsgYS5iICsgIiB2ZXJzdXMgIiArIGIuYjsKLSAgICBpZiAoYS5jLmxlbmd0
aCAhPSBiLmMubGVuZ3RoKQotICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBs
ZW5ndGggbWlzbWF0Y2g6ICIgKyBhLmMgKyAiIHZlcnN1cyAiICsgYi5jOworICAgIGlmIChhLmMu
bGVuZ3RoICE9PSBiLmMubGVuZ3RoKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBv
ZiBjLCBsZW5ndGggbWlzbWF0Y2g6ICIgKyBhLmMubGVuZ3RoICsgIiB2ZXJzdXMgIiArIGIuYy5s
ZW5ndGg7CiAgICAgZm9yICh2YXIgaSA9IGEuYy5sZW5ndGg7IGktLTspIHsKICAgICAgICAgaWYg
KGEuY1tpXSAhPSBiLmNbaV0pCiAgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBv
ZiBjLCBtaXNtYXRjaCBhdCBpID0gIiArIGkgKyAiOiAiICsgYS5jICsgIiB2ZXJzdXMgIiArIGIu
YzsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3JlY3Vyc2l2ZS10YWlsLWNhbGwtd2l0aC1k
aWZmZXJlbnQtYXJndW1lbnQtY291bnQuanMgYi9KU1Rlc3RzL3N0cmVzcy9yZWN1cnNpdmUtdGFp
bC1jYWxsLXdpdGgtZGlmZmVyZW50LWFyZ3VtZW50LWNvdW50LmpzCmluZGV4IDA0N2ZiMDFmODgz
MTQ1Y2M3NTU0ZjVjZjcwMWE3MDc0ZjI2N2RlZWUuLjUzZDc1MmRlY2Q3ZDBmMzFiYzJmMWQ3ODk5
MWM2OTEwMWYwOGJmZjMgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL3JlY3Vyc2l2ZS10YWls
LWNhbGwtd2l0aC1kaWZmZXJlbnQtYXJndW1lbnQtY291bnQuanMKKysrIGIvSlNUZXN0cy9zdHJl
c3MvcmVjdXJzaXZlLXRhaWwtY2FsbC13aXRoLWRpZmZlcmVudC1hcmd1bWVudC1jb3VudC5qcwpA
QCAtMTgsOCArMTgsOCBAQCBub0lubGluZShiYXIpOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAw
MDsgKytpKSB7CiAgICAgdmFyIHJlc3VsdCA9IGZvbyg0MCwgMik7CiAgICAgaWYgKHJlc3VsdCAh
PT0gNDIpCi0gICAgICAgIHRocm93ICJXcm9uZyByZXN1bHQgZm9yIGZvbywgZXhwZWN0ZWQgNDIs
IGdvdCAiICsgcmVzdWx0OworICAgICAgICB0aHJvdyBFcnJvcigiV3JvbmcgcmVzdWx0IGZvciBm
b28sIGV4cGVjdGVkIDQyLCBnb3QgIiArIHJlc3VsdCk7CiAgICAgcmVzdWx0ID0gYmFyKDQwLCAy
KTsKICAgICBpZiAocmVzdWx0ICE9PSA0MikKLSAgICAgICAgdGhyb3cgIldyb25nIHJlc3VsdCBm
b3IgYmFyLCBleHBlY3RlZCA0MiwgZ290ICIgKyByZXN1bHQ7CisgICAgICAgIHRocm93IEVycm9y
KCJXcm9uZyByZXN1bHQgZm9yIGJhciwgZXhwZWN0ZWQgNDIsIGdvdCAiICsgcmVzdWx0KTsKIH0K
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3Jlc3QtdmFyYXJncy1vc3ItZXhpdC10by1jaGVj
a3BvaW50LmpzIGIvSlNUZXN0cy9zdHJlc3MvcmVzdC12YXJhcmdzLW9zci1leGl0LXRvLWNoZWNr
cG9pbnQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uODdiYTA1NTFkM2VlOTQ4ZjA5NGNmMzgwZjhjZWJmYzY3OTkw
NDJkYwotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL3Jlc3QtdmFyYXJncy1vc3It
ZXhpdC10by1jaGVja3BvaW50LmpzCkBAIC0wLDAgKzEsMjEgQEAKKyJ1c2Ugc3RyaWN0IjsKKwor
ZnVuY3Rpb24gZm9vKGEsIGIsIC4uLnJlc3QpIHsKKyAgICByZXR1cm4gcmVzdC5sZW5ndGg7Cit9
CisKK2Z1bmN0aW9uIGJhcihhLCBiLCAuLi5yZXN0KSB7CisgICAgcmV0dXJuIGZvby5jYWxsKC4u
LnJlc3QpOworfQorbm9JbmxpbmUoYmFyKTsKKworbGV0IGFycmF5ID0gbmV3IEFycmF5KDEwKTsK
K2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyArK2kpIHsKKyAgICBsZXQgcmVzdWx0ID0gYmFyKC4u
LmFycmF5KTsKKyAgICBpZiAocmVzdWx0ICE9PSBhcnJheS5sZW5ndGggLSBiYXIubGVuZ3RoIC0g
Zm9vLmxlbmd0aCAtIDEpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihpICsgIiAiICsgcmVzdWx0
KTsKK30KKworYXJyYXkubGVuZ3RoID0gMTAwMDA7CitpZiAoYmFyKC4uLmFycmF5KSAhPT0gYXJy
YXkubGVuZ3RoIC0gYmFyLmxlbmd0aCAtIGZvby5sZW5ndGggLSAxKQorICAgIHRocm93IG5ldyBF
cnJvcigpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387972</attachid>
            <date>2020-01-16 15:47:53 -0800</date>
            <delta_ts>2020-01-16 20:09:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206361-20200116154751.patch</filename>
            <type>text/plain</type>
            <size>744771</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0NzAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
ZjE4MmQwNmI3OWE5NTE3NDk5ZTVhMzMzMzk3ZDY1Y2M5NGYzMWQ4Li44OGNjMTg2NDZiMzAyYzgx
NjczZmU2OTJjZGM1N2JjZDNiZmYwMmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3ODAgQEAKKzIwMjAtMDEtMTYgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmVsYW5kIGJ5dGVjb2RlIGNoZWNrcG9pbnRzIHNpbmNlIGJ1Z3Mg
aGF2ZSBiZWVuIGZpeGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDYzNjEKKworICAgICAgICBVbnJldmlld2VkLCByZWxhbmQuCisKKyAgICAgICAg
VGhlIHdhdGNoIGJ1Z3MgaGF2ZSBiZWVuIGZpeGVkIGJ5IGh0dHBzOi8vdHJhYy53ZWJraXQub3Jn
L2NoYW5nZXNldC8yNTQ2NzQKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAq
IERlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJDb2RlUmVmLmg6CisgICAgICAgICogYXNzZW1ibGVyL1Byb2JlRnJhbWUuaDoKKyAg
ICAgICAgKEpTQzo6UHJvYmU6OkZyYW1lOjpvcGVyYW5kKToKKyAgICAgICAgKEpTQzo6UHJvYmU6
OkZyYW1lOjpzZXRPcGVyYW5kKToKKyAgICAgICAgKiBiMy90ZXN0YjMuaDoKKyAgICAgICAgKHBv
cHVsYXRlV2l0aEludGVyZXN0aW5nVmFsdWVzKToKKyAgICAgICAgKGZsb2F0aW5nUG9pbnRPcGVy
YW5kcyk6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHA6CisgICAgICAgIChKU0M6
OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZVNuaXBwZXRQYXJhbXMuY3BwOgorICAgICAgICAoSlNDOjpTbG93UGF0aENhbGxHZW5lcmF0b3JX
aXRoQXJndW1lbnRzOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2Rl
RHVtcGVyLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVEdW1wZXJCYXNlOjpkdW1wVmFsdWUp
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUR1bXBlcjxCbG9jaz46OnJlZ2lzdGVyTmFtZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6Y29uc3RhbnROYW1lIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6Qnl0ZWNvZGVEdW1wZXI6OmNvbnN0YW50TmFtZSBj
b25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaDoKKyAgICAgICAgKiBi
eXRlY29kZS9CeXRlY29kZUluZGV4LmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6
ZHVtcCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUluZGV4OjpCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVJbmRleDo6b2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6
Y2hlY2twb2ludCBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmFzQml0cyBj
b25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6Omhhc2ggY29uc3QpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUluZGV4OjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVJbmRleDo6cGFjayk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmZy
b21CaXRzKToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpc3QucmI6CisgICAgICAgICog
Ynl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcDoKKyAgICAgICAgKEpTQzo6ZW51
bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbCk6CisgICAgICAgIChKU0M6OnRtcExpdmVuZXNzRm9yQ2hl
Y2twb2ludCk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmg6
CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjp2aXJ0dWFsUmVnaXN0ZXJJc0Fsd2F5c0xpdmUpOgorICAgICAgICAoSlND
Ojp2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKToKKyAgICAgICAgKEpT
Qzo6dmlydHVhbFJlZ2lzdGVySXNMaXZlKToKKyAgICAgICAgKEpTQzo6b3BlcmFuZElzQWx3YXlz
TGl2ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Om9wZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZl
SXNMaXZlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmFuZElzTGl2ZSk6IERlbGV0ZWQu
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Ynl0ZWNvZGVJ
bmRleEZvckV4aXQgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmVuc3VyZUNhdGNo
TGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRleFNsb3cpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVz
cyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6bnVtVG1wcyBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aXNLbm93bk5v
dEltbWVkaWF0ZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aXNUZW1wb3JhcnlSZWdpc3Rl
cik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29uc3RhbnRSZWdpc3Rlcik6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6Z2V0Q29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpyZXBsYWNlQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmlzVGVtcG9yYXJ5UmVnaXN0ZXJJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6aXNDb25zdGFudFJlZ2lzdGVySW5kZXgpOiBEZWxldGVkLgorICAgICAgICAqIGJ5
dGVjb2RlL0NvZGVPcmlnaW4uaDoKKyAgICAgICAgKiBieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZl
bmVzcy5oOgorICAgICAgICAoSlNDOjpGdWxsQnl0ZWNvZGVMaXZlbmVzczo6dmlydHVhbFJlZ2lz
dGVySXNMaXZlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6Om9w
ZXJhbmRJc0xpdmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUNh
bGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OklubGluZUNhbGxGcmFt
ZSk6CisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6c2V0VG1wT2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6Q29kZU9yaWdpbjo6d2Fsa1VwSW5saW5lU3RhY2sgY29uc3QpOgorICAgICAgICAo
SlNDOjpDb2RlT3JpZ2luOjppbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCBjb25z
dCk6CisgICAgICAgIChKU0M6OnJlbWFwT3BlcmFuZCk6CisgICAgICAgIChKU0M6OnVubWFwT3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oOgorICAg
ICAgICAoSlNDOjpMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleTo6TGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGVLZXkpOgorICAgICAgICAoSlNDOjpMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleTo6aGFz
aCBjb25zdCk6CisgICAgICAgIChKU0M6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5OjpvcGVy
YW5kIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlLmNwcDoKKyAgICAgICAgKEpTQzo6TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZnJv
bUxhenlPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZTo6ZW1pdFJlcG9ydFZhbHVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZTo6cmVwb3J0VmFsdWUpOgorICAgICAgICAqIGJ5dGVjb2RlL01ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKiBieXRlY29kZS9PcGVyYW5kcy5oOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kOjpPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6
dG1wKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6a2luZCBjb25zdCk6CisgICAgICAgIChKU0M6
Ok9wZXJhbmQ6OnZhbHVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6dmlydHVhbFJl
Z2lzdGVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6YXNCaXRzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6T3BlcmFuZDo6aXNUbXAgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
Ojppc0FyZ3VtZW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZDo6aXNMb2NhbCBjb25z
dCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmlzSGVhZGVyIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6T3BlcmFuZDo6aXNDb25zdGFudCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OnRv
QXJndW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjp0b0xvY2FsIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6T3BlcmFuZDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6
Ok9wZXJhbmQ6OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kOjpmcm9tQml0
cyk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpPcGVyYW5kcyk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzOjpudW1iZXJPZkxvY2FscyBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpu
dW1iZXJPZlRtcHMgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6dG1wSW5kZXggY29u
c3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJndW1lbnRJbmRleCBjb25zdCk6CisgICAg
ICAgIChKU0M6Ok9wZXJhbmRzOjpsb2NhbEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3Bl
cmFuZHM6OnRtcCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjp0bXAgY29uc3QpOgorICAgICAg
ICAoSlNDOjpPcGVyYW5kczo6YXJndW1lbnQpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJn
dW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6bG9jYWwpOgorICAgICAgICAo
SlNDOjpPcGVyYW5kczo6bG9jYWwgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2l6
ZUZvciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdEZvcik6CisgICAgICAgIChK
U0M6Ok9wZXJhbmRzOjphdEZvciBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjplbnN1
cmVMb2NhbHMpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6ZW5zdXJlVG1wcyk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmRzOjpnZXRGb3JPcGVyYW5kSW5kZXgpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kczo6Z2V0Rm9yT3BlcmFuZEluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6
Om9wZXJhbmRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kKToK
KyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpP
cGVyYW5kczo6aGFzT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpzZXRP
cGVyYW5kKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmF0IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6T3BlcmFuZHM6OmF0KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhdG9yW10gY29u
c3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6
Ok9wZXJhbmRzOjpvcGVyYW5kRm9ySW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
czo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjppc0FyZ3VtZW50
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmlzTG9jYWwgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6dmlydHVhbFJlZ2lzdGVyRm9ySW5k
ZXggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2V0T3BlcmFuZEZp
cnN0VGltZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmg6
CisgICAgICAgIChKU0M6Ok9wZXJhbmQ6OmR1bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kczxUPjo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzPFQ+
OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6
CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayk6Cisg
ICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6Omhhc0NoZWNrcG9pbnRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6OnNldEhhc0NoZWNrcG9pbnRzKToKKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2s6OmNvbnN0YW50UmVnaXN0ZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9jazo6Z2V0Q29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZENvZGVCbG9jazo6aXNDb25zdGFudFJlZ2lzdGVySW5kZXggY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI6OlZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rl
ckJ1ZmZlcik6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1
ZmZlcjo6flZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcik6CisgICAgICAgIChK
U0M6OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI6OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRC
dWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVm
ZmVyOjp+VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXI6OmZvckVhY2gpOiBEZWxldGVkLgorICAg
ICAgICAqIGJ5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwOgorICAgICAgICAoSlNDOjpWYWx1ZVJl
Y292ZXJ5OjpyZWNvdmVyIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9WYWx1ZVJlY292ZXJ5
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmg6CisgICAgICAgIChKU0M6
OnZpcnR1YWxSZWdpc3RlcklzTG9jYWwpOgorICAgICAgICAoSlNDOjp2aXJ0dWFsUmVnaXN0ZXJJ
c0FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6VmlydHVhbFJlZ2lzdGVyOjpWaXJ0dWFsUmVnaXN0
ZXIpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzVmFsaWQgY29uc3QpOgorICAg
ICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmlzTG9jYWwgY29uc3QpOgorICAgICAgICAoSlND
OjpWaXJ0dWFsUmVnaXN0ZXI6OmlzQXJndW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpWaXJ0
dWFsUmVnaXN0ZXI6OmlzQ29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVn
aXN0ZXI6OnRvQ29uc3RhbnRJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Om9wZXJhbmRJc0xv
Y2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmFuZElzQXJndW1lbnQpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplTmV4dFBhcmFtZXRlcik6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplUGFyYW1ldGVycyk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKToKKyAgICAgICAgKiBi
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OnNldFVzZXNDaGVja3BvaW50cyk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL1Jl
Z2lzdGVySUQuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJJRDo6c2V0SW5kZXgpOgorICAgICAg
ICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
SGVhcDo6UGF5bG9hZDo6ZHVtcEFzT3BlcmFuZCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RIZWFwOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RIZWFw
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpQYXlsb2FkKToK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OkFic3RyYWN0SGVhcCk6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpvcGVyYW5kIGNvbnN0KToKKyAgICAgICAgKiBkZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAg
ICAgICAqIGRmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmg6CisgICAgICAgIChKU0M6OkRGRzo6QXJn
dW1lbnRQb3NpdGlvbjo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0
aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OmFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QpOgorICAgICAgICAo
SlNDOjpERkc6OmVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCk6CisgICAgICAgICog
ZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oOgorICAgICAgICAqIGRmZy9ERkdBdFRhaWxBYnN0
cmFjdFN0YXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6b3Bl
cmFuZCk6CisgICAgICAgICogZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6QXZhaWxhYmlsaXR5TWFwOjpwcnVuZUJ5TGl2ZW5lc3MpOgorICAgICAgICAqIGRm
Zy9ERkdBdmFpbGFiaWxpdHlNYXAuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHlN
YXA6OmNsb3NlU3RhcnRpbmdXaXRoTG9jYWwpOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2Nr
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjplbnN1cmVUbXBzKToKKyAgICAgICAgKiBkZmcvREZH
QmFzaWNCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydCk6CisgICAgICAgICog
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6Qnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjplbnN1cmVUbXBzKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cHJvZ3Jl
c3NUb05leHRDaGVja3BvaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
bmV3VmFyaWFibGVBY2Nlc3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6Z2V0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0KToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0RGlyZWN0KToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbik6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsT3JUbXApOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRMb2NhbE9yVG1wKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpmaW5kQXJndW1lbnRQb3NpdGlvbkZvckxvY2FsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6ZmluZEFyZ3VtZW50UG9zaXRpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaEltcGwpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVzaEZvclRlcm1pbmFsSW1wbCk6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZsdXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Zmx1c2hEaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjphZGRGbHVzaE9yUGhhbnRvbUxvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6cGhhbnRvbUxvY2FsRGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6Zmx1c2hGb3JUZXJtaW5hbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmFkZFRvR3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJ
bmxpbmVTdGFja0VudHJ5OjpyZW1hcE9wZXJhbmQgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpEZWxheWVkU2V0TG9jYWw6OkRlbGF5ZWRTZXRMb2NhbCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OkRlbGF5ZWRTZXRMb2NhbDo6ZXhlY3V0ZSk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVGFyZ2V0YWJsZUJs
b2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVVbnRhcmdl
dGFibGVCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVJl
Y3Vyc2l2ZVRhaWxDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aW5s
aW5lQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFy
Z3NJbmxpbmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlu
bGluaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6Oklu
bGluZVN0YWNrRW50cnkpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0TG9jYWwpOiBEZWxldGVk
LgorICAgICAgICAqIGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZB
UGhhc2U6OmluamVjdE9TUik6CisgICAgICAgICogZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OnJ1bik6CisgICAg
ICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplR2V0TG9jYWwp
OgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUZs
dXNoT3JQaGFudG9tTG9jYWxGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5n
UGhhc2U6OmNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWwpOgorICAgICAgICAoSlNDOjpE
Rkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZVNldCk6CisgICAgICAgIChKU0M6
OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplTG9jYWxzSW5CbG9jayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cHJvcGFnYXRlUGhpcyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cGhpU3RhY2tGb3IpOgorICAg
ICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGll
cy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y2FwYWJpbGl0eUxldmVsKToKKyAgICAgICAgKiBk
ZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAg
ICAgICAqIGRmZy9ERkdDb21iaW5lZExpdmVuZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjph
ZGRCeXRlY29kZUxpdmVuZXNzKToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6YWRkQ29kZU9yaWdpbik6CisgICAgICAgIChK
U0M6OkRGRzo6Q29tbW9uRGF0YTo6YWRkVW5pcXVlQ2FsbFNpdGVJbmRleCk6CisgICAgICAgIChK
U0M6OkRGRzo6Q29tbW9uRGF0YTo6bGFzdENhbGxTaXRlIGNvbnN0KToKKyAgICAgICAgKiBkZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50
Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGVJbXBsKToKKyAgICAgICAgKiBkZmcvREZH
Rml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2Rl
KToKKyAgICAgICAgKiBkZmcvREZHRm9yQWxsS2lsbHMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpm
b3JBbGxLaWxsZWRPcGVyYW5kcyk6CisgICAgICAgIChKU0M6OkRGRzo6Zm9yQWxsS2lsbGVkTm9k
ZXNBdE5vZGVJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6Zm9yQWxsS2lsbHNJbkJsb2NrKToK
KyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpk
dW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6c3Vic3RpdHV0ZUdldExvY2FsKToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6aXNMaXZlSW5CeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6
OmxvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6
Om1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IpOgorICAgICAgICAoSlNDOjpERkc6Okdy
YXBoOjpsb2NhbHNMaXZlSW5CeXRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0dy
YXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmZvckFsbExvY2Fsc0FuZFRtcHNMaXZl
SW5CeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmZvckFsbExpdmVJbkJ5dGVj
b2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6Zm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNv
ZGUpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6OkluUGxhY2VBYnN0cmFj
dFN0YXRlKToKKyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6b3BlcmFuZCk6CisgICAgICAgICog
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6
bGlua09TUkV4aXRzKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bm90aWNlT1NS
RW50cnkpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvbXBpbGVyOjplbWl0U3RvcmVDYWxsU2l0ZUluZGV4KToKKyAgICAgICAgKiBkZmcv
REZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6TGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZTo6aXNWYWxpZEZsdXNoTG9j
YXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkxpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9u
UGhhc2U6OmhhbmRsZUJsb2NrRm9yVHJ5Q2F0Y2gpOgorICAgICAgICAoSlNDOjpERkc6OkxpdmVD
YXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2U6Om5ld1ZhcmlhYmxlQWNjZXNzRGF0YSk6Cisg
ICAgICAgICogZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9E
RkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6U3RhY2tBY2Nlc3NEYXRhOjpTdGFja0FjY2Vz
c0RhdGEpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0FyZ3VtZW50c0NoaWxkKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjphcmd1bWVudHNDaGlsZCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6b3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzVW5saW5rZWRP
cGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp1bmxpbmtlZE9wZXJhbmQpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0xvYWRWYXJhcmdzRGF0YSk6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZTo6bG9jYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhh
c1VubGlua2VkTG9jYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnVubGlu
a2VkTG9jYWwpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAg
ICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlOjpydW4pOgorICAgICAgICAoSlND
OjpERkc6OkxvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUpOgorICAg
ICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZU9T
UkVudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlQ2F0Y2hPU1JFbnRyeSk6CisgICAg
ICAgICogZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcv
REZHT1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6ZW1pdFJlc3RvcmVB
cmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmNvbXBpbGVFeGl0KToKKyAg
ICAgICAgKEpTQzo6REZHOjpqc1ZhbHVlRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZH
OjpyZXN0b3JlQ2FsbGVlU2F2ZXNGb3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnNh
dmVDYWxsZWVTYXZlc0Zvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6cmVzdG9yZUNh
bGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpzYXZlT3JDb3B5Q2FsbGVlU2F2
ZXNGb3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OmNyZWF0ZURpcmVjdEFyZ3VtZW50
c0R1cmluZ0V4aXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OmNyZWF0ZUNsb25lZEFy
Z3VtZW50c0R1cmluZ0V4aXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OmVtaXRSZXN0
b3JlQXJndW1lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpleGVj
dXRlT1NSRXhpdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6cmVpZnlJbmxpbmVkQ2Fs
bEZyYW1lcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6YWRqdXN0QW5kSnVtcFRvVGFy
Z2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpwcmludE9TUkV4aXQpOiBEZWxldGVk
LgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Lmg6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRC
YXNlLmg6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdEJhc2U6OmlzRXhpdGluZ1RvQ2hlY2tw
b2ludEhhbmRsZXIgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhbGxlclJldHVyblBDKToKKyAgICAgICAgKEpT
Qzo6REZHOjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKEpTQzo6REZHOjphZGp1
c3RBbmRKdW1wVG9UYXJnZXQpOgorICAgICAgICAqIGRmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lu
a2luZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT3BJbmZvLmg6CisgICAgICAgIChKU0M6
OkRGRzo6T3BJbmZvOjpPcEluZm8pOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoK
KyAgICAgICAgKiBkZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBk
ZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OlByZWNp
c2VMb2NhbENsb2JiZXJpemVBZGFwdG9yOjpyZWFkKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVj
aXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6d3JpdGUpOgorICAgICAgICAoSlNDOjpERkc6OlBy
ZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9yOjpkZWYpOgorICAgICAgICAoSlNDOjpERkc6OlBy
ZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9yOjpjYWxsSWZBcHByb3ByaWF0ZSk6CisgICAgICAg
ICogZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJlZGljdGlvbkluamVjdGlvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1B1dFN0YWNrU2lu
a2luZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OnJ1bik6CisgICAgICAgICog
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRl
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2spOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFyYXJnc0xlbmd0aCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVGb3J3YXJkVmFyYXJncyk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVEaXJlY3RBcmd1bWVudHMpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpyZWNvcmRTZXRMb2NhbCk6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAg
ICAqIGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTdGFj
a0xheW91dFBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlN0YWNrTGF5b3V0UGhhc2U6
OmFzc2lnbik6CisgICAgICAgICogZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlN0cmVuZ3RoUmVkdWN0aW9uUGhhc2U6OmhhbmRsZU5vZGUpOgor
ICAgICAgICAqIGRmZy9ERkdUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om9zckV4aXRU
aHVua0dlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1RodW5rcy5oOgorICAg
ICAgICAqIGRmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlR5
cGVDaGVja0hvaXN0aW5nUGhhc2U6OmRpc2FibGVIb2lzdGluZ0Fjcm9zc09TUkVudHJpZXMpOgor
ICAgICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1ZhcmFyZ3NG
b3J3YXJkaW5nUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nl
c3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OnNob3VsZFVz
ZURvdWJsZUZvcm1hdEFjY29yZGluZ1RvVm90ZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFi
bGVBY2Nlc3NEYXRhOjp0YWxseVZvdGVzRm9yU2hvdWxkVXNlRG91YmxlRm9ybWF0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OmNvdWxkUmVwcmVzZW50SW50NTJJbXBs
KToKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg6CisgICAgICAgIChKU0M6
OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpvcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpW
YXJpYWJsZUFjY2Vzc0RhdGE6OmxvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHVmFy
aWFibGVFdmVudC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6ZHVtcCBj
b25zdCk6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpWYXJpYWJsZUV2ZW50OjpzcGlsbCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVF
dmVudDo6c2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om1vdkhp
bnQpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OnNwaWxsUmVnaXN0ZXIgY29u
c3QpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om9wZXJhbmQgY29uc3QpOgor
ICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OmJ5dGVjb2RlUmVnaXN0ZXIgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtOjpsb2dFdmVudCk6CisgICAgICAg
IChKU0M6OkRGRzo6VmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QgY29uc3QpOgorICAg
ICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmg6CisgICAgICAgIChKU0M6OkRGRzo6
VmFyaWFibGVFdmVudFN0cmVhbTo6YXBwZW5kQW5kTG9nKToKKyAgICAgICAgKiBmdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAg
KiBmdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpGb3JP
U1JFbnRyeUpJVENvZGU6OkZvck9TUkVudHJ5SklUQ29kZSk6CisgICAgICAgICogZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxv
d2VyKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5vZGUp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlRXh0cmFjdE9T
UkVudHJ5TG9jYWwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlR2V0U3RhY2spOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlR2V0Q2FsbGVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29t
cGlsZVNldENhbGxlZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNv
bXBpbGVTZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVWYXJhcmdzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUxvYWRWYXJhcmdzKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUZvcndhcmRWYXJhcmdzKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Z2V0U3ByZWFkTGVuZ3RoRnJvbUlubGlu
ZUNhbGxGcmFtZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBp
bGVGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0IzOjpjb21waWxlTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Z2V0QXJndW1lbnRzTGVuZ3RoKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Z2V0Q3VycmVudENhbGxlZSk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNhbGxQcmVmbGlnaHQpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphcHBlbmRPU1JFeGl0RGVzY3JpcHRvcik6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmJ1aWxkRXhpdEFyZ3VtZW50cyk6
CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFkZHJlc3NGb3IpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpwYXlsb2FkRm9yKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6dGFnRm9yKToKKyAgICAgICAgKiBmdGwvRlRM
T1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OnByZXBhcmVPU1JFbnRyeSk6CisgICAg
ICAgICogZnRsL0ZUTE9TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXREZXNj
cmlwdG9yOjpPU1JFeGl0RGVzY3JpcHRvcik6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoK
KyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRM
Ojpjb21waWxlU3R1Yik6CisgICAgICAgICogZnRsL0ZUTE9wZXJhdGlvbnMuY3BwOgorICAgICAg
ICAoSlNDOjpGVEw6Om9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IpOgorICAgICAgICAq
IGZ0bC9GVExPdXRwdXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6c2VsZWN0KToK
KyAgICAgICAgKiBmdGwvRlRMT3V0cHV0Lmg6CisgICAgICAgICogZnRsL0ZUTFNlbGVjdFByZWRp
Y3RhYmlsaXR5Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9y
T1NSRW50cnlKSVRDb2RlLmNwcC4KKyAgICAgICAgKiBmdGwvRlRMU2xvd1BhdGhDYWxsLmg6Cisg
ICAgICAgIChKU0M6OkZUTDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgICogZ2VuZXJhdG9yL0No
ZWNrcG9pbnRzLnJiOiBBZGRlZC4KKyAgICAgICAgKiBnZW5lcmF0b3IvT3Bjb2RlLnJiOgorICAg
ICAgICAqIGdlbmVyYXRvci9TZWN0aW9uLnJiOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6Cisg
ICAgICAgIChKU0M6OkhlYXA6OmdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyk6CisgICAgICAgICog
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpjYWxs
U2l0ZUFzUmF3Qml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5zYWZlQ2Fs
bFNpdGVBc1Jhd0JpdHMgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRl
SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRlSW5k
ZXggY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldEN1cnJlbnRWUEMpOgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWU6OmJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWU6OmNvZGVPcmlnaW4pOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgor
ICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpDYWxsU2l0ZUluZGV4KToKKyAgICAgICAgKEpT
Qzo6Q2FsbFNpdGVJbmRleDo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChKU0M6OkNh
bGxTaXRlSW5kZXg6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUlu
ZGV4OjpiaXRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6ZnJvbUJpdHMp
OgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpieXRlY29kZUluZGV4IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6RGlzcG9zYWJsZUNhbGxTaXRlSW5kZXg6OkRpc3Bvc2FibGVDYWxsU2l0ZUlu
ZGV4KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpjYWxsZWUgY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWU6OnVuc2FmZUNhbGxlZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxG
cmFtZTo6YWRkcmVzc09mQ29kZUJsb2NrIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1l
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxG
cmFtZTo6b2Zmc2V0Rm9yKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpzZXRBcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0UmV0dXJuUEMp
OgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6Q2FsbEZyYW1lOjpyKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjp1bmNoZWNrZWRSKToK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpndWFyYW50ZWVkSlNWYWx1ZUNhbGxlZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6anNDYWxsZWUgY29uc3QpOgorICAgICAgICAoSlND
OjpDYWxsRnJhbWU6OmNvZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6
dW5zYWZlQ29kZUJsb2NrIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpzZXRDYWxs
ZWUpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldENvZGVCbG9jayk6CisgICAgICAgICog
aW50ZXJwcmV0ZXIvQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaDogQ29waWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaC4KKyAgICAgICAgKiBpbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OmV2YWwpOgorICAgICAgICAoSlNDOjpz
aXplT2ZWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6bG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlND
OjpzZXR1cFZhcmFyZ3NGcmFtZSk6CisgICAgICAgIChKU0M6OlVud2luZEZ1bmN0b3I6Om9wZXJh
dG9yKCkgY29uc3QpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwpOgor
ICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdCk6CisgICAgICAgICog
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja1Zp
c2l0b3IuY3BwOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OnJlYWRJbmxpbmVkRnJhbWUp
OgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cik6CisgICAgICAgIChKU0M6
OkFzc2VtYmx5SGVscGVyczo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMik6CisgICAgICAg
IChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2NCk6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKToK
KyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXJC
ZWZvcmVQcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFB1dFBh
eWxvYWRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibHlIZWxwZXJzOjplbWl0UHV0VGFnVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZSk6
CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcik6CisgICAgICAgIChK
U0M6OkFzc2VtYmx5SGVscGVyczo6dGFnRm9yKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjpwYXlsb2FkRm9yKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVG
cmFtZVNsb3QpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50
U2xvdCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y2FsbGVlRnJhbWVUYWdTbG90
KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZVBheWxvYWRTbG90
KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZUNhbGxlckZyYW1l
KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjphcmd1bWVudENvdW50KToKKyAgICAg
ICAgKiBqaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVT
aHVmZmxlcjo6Q2FsbEZyYW1lU2h1ZmZsZXIpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVm
Zmxlci5oOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c2V0Q2FsbGVlSlNWYWx1
ZVJlZ3MpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6YXNzdW1lQ2FsbGVlSXND
ZWxsKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdW5zaWduZWQpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25l
ZEFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVt
cEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvd0ltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5jKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9tb2QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2JpdG5vdCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ0Zh
c3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2Rpdik6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxl
U2V0dXBGcmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAg
ICogaml0L0pJVEV4Y2VwdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmljVW53aW5kKToK
KyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFu
ZENvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjpnZXRDb25zdGFudE9wZXJhbmQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcik6CisgICAg
ICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1
bHQpOgorICAgICAgICAoSlNDOjpKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRK
U1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmtTbG93Q2Fz
ZUlmTm90SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFudENoYXIp
OgorICAgICAgICAoSlNDOjpKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludCk6CisgICAgICAgIChK
U0M6OkpJVDo6Z2V0T3BlcmFuZENvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0SW5pdFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZFRhZyk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdExvYWRQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
R2V0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0TG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWQyKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZERvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdExvYWRJbnQzMlRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTdG9yZUludDMyKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U3RvcmVDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U3RvcmVCb29sKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U3RvcmVEb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29u
c3RhbnRJbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKToKKyAgICAgICAgKiBq
aXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb3YpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3Qp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lz
X2VtcHR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2lzX251bWJlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlw
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19vYmplY3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfcmV0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3ByaW1p
dGl2ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9ub3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfamZhbHNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2plcV9udWxsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9qdW5kZWZpbmVkX29yX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam51
bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX3B0cik6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9qZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXEp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpKSVQ6
OmNvbXBpbGVPcFN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BTdHJpY3RF
cUp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3RvX251bWVyaWMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfdG9fc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX29iamVjdCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9nZXRfcGFyZW50X3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRj
aF9pbW0pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25lcV9udWxsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2dldF9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b190aGlzKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2NoZWNrX3Rkeik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25lcSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfbmV3X3JlZ2V4cCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmNDb21t
b24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfbmV3X2FycmF5X3dpdGhfc2l6ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNf
c3RydWN0dXJlX3Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19pbmRl
eGVkX3Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhl
ZF9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1l
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1l
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2dldF9yZXN0X2xlbmd0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYXJndW1l
bnQpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAg
ICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
UHV0QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Rl
bF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X2lkX2RpcmVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX2RpcmVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRSZXNvbHZlQ2xvc3VyZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXNvbHZl
X3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldENsb3N1cmVWYXIpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX2dldF9mcm9tX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsVmFy
aWFibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0Q2xvc3VyZVZhcik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X2Zyb21fYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF90b19h
cmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRXcml0ZUJhcnJpZXIpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dEludFR5cGVkQXJyYXlQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlw
ZWRBcnJheVB1dEJ5VmFsKToKKyAgICAgICAgKiBqaXQvSlNJbnRlcmZhY2VKSVQuaDoKKyAgICAg
ICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSlNDZWxsKToKKyAgICAgICAgKEpTQzo6
SlNJbnRlcmZhY2VKSVQ6OmVtaXRKdW1wSWZOb3RKU0NlbGwpOgorICAgICAgICAoSlNDOjpKU0lu
dGVyZmFjZUpJVDo6ZW1pdExvYWRJbnQzMik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklU
OjplbWl0TG9hZERvdWJsZSk6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjpl
bWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6
ZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcik6CisgICAgICAgICogaml0L1NldHVwVmFyYXJn
c0ZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6ZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2Up
OgorICAgICAgICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6CisgICAgICAgIChKU0M6OlNw
ZWNpYWxpemVkVGh1bmtKSVQ6OmxvYWREb3VibGVBcmd1bWVudCk6CisgICAgICAgIChKU0M6OlNw
ZWNpYWxpemVkVGh1bmtKSVQ6OmxvYWRDZWxsQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpTcGVj
aWFsaXplZFRodW5rSklUOjpsb2FkSW50MzJBcmd1bWVudCk6CisgICAgICAgICogaml0L1RodW5r
R2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OmFic1RodW5rR2VuZXJhdG9yKToKKyAgICAg
ICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpnZXRO
b25Db25zdGFudE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpMTEludDo6Z2V0T3BlcmFuZCk6Cisg
ICAgICAgIChKU0M6OkxMSW50OjpnZW5lcmljQ2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50Ojp2
YXJhcmdzU2V0dXApOgorICAgICAgICAoSlNDOjpMTEludDo6Y29tbW9uQ2FsbEV2YWwpOgorICAg
ICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpM
TEludDo6aGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQpOgorICAgICAgICAoSlNDOjpMTEludDo6ZGlz
cGF0Y2hUb05leHRJbnN0cnVjdGlvbik6CisgICAgICAgIChKU0M6OkxMSW50OjpzbG93X3BhdGhf
Y2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbCk6CisgICAgICAgIChKU0M6OkxM
SW50OjpzbG93X3BhdGhfY2hlY2twb2ludF9vc3JfZXhpdCk6CisgICAgICAgIChKU0M6OkxMSW50
OjpsbGludF90aHJvd19zdGFja19vdmVyZmxvd19lcnJvcik6CisgICAgICAgICogbGxpbnQvTExJ
bnRTbG93UGF0aHMuaDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToK
KyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICAq
IGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9BcmdM
aXN0Lmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyOjpmaWxsKToKKyAgICAg
ICAgKiBydW50aW1lL0NhY2hlZFR5cGVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJs
b2NrOjpoYXNDaGVja3BvaW50cyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJs
b2NrOjpVbmxpbmtlZENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazxD
b2RlQmxvY2tUeXBlPjo6ZW5jb2RlKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHA6CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1l
L0NvbnN0cnVjdERhdGEuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3QpOgorICAgICAgICAq
IHJ1bnRpbWUvQ29uc3RydWN0RGF0YS5oOgorICAgICAgICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1l
bnRzLmNwcDoKKyAgICAgICAgKEpTQzo6RGlyZWN0QXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMp
OgorICAgICAgICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmg6CisgICAgICAgICogcnVudGlt
ZS9HZW5lcmljQXJndW1lbnRzLmg6CisgICAgICAgICogcnVudGltZS9HZW5lcmljQXJndW1lbnRz
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9B
cmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5Lmg6
CisgICAgICAgICogcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHA6CisgICAgICAgIChK
U0M6OkpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaDoKKyAgICAgICAgKiBydW50aW1lL0pTTG9jay5j
cHA6CisgICAgICAgIChKU0M6OkpTTG9jazo6d2lsbFJlbGVhc2VMb2NrKToKKyAgICAgICAgKiBy
dW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6TW9kdWxl
UHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmNw
cDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucyk6CisgICAgICAgICog
cnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwOgorICAgICAgICAoSlNDOjpTY29wZWRBcmd1bWVu
dHM6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9TY29wZWRBcmd1bWVudHMu
aDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OnNjYW5TaWRl
U3RhdGUgY29uc3QpOgorICAgICAgICAoSlNDOjpWTTo6YWRkQ2hlY2twb2ludE9TUlNpZGVTdGF0
ZSk6CisgICAgICAgIChKU0M6OlZNOjpmaW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSk6CisgICAg
ICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6aGFzQ2hlY2twb2ludE9TUlNp
ZGVTdGF0ZSBjb25zdCk6CisgICAgICAgICogdG9vbHMvVk1JbnNwZWN0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpWTUluc3BlY3Rvcjo6ZHVtcFJlZ2lzdGVycyk6CisgICAgICAgICogd2FzbS9XYXNt
RnVuY3Rpb25Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxv
Y2s6OmdldENvbnN0YW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2Rl
QmxvY2s6OmdldENvbnN0YW50VHlwZSBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRH
ZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6c2V0VXNl
c0NoZWNrcG9pbnRzIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21PcGVyYXRpb25zLmNwcDoK
KyAgICAgICAgKEpTQzo6V2FzbTo6b3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRpb24pOgorICAgICAg
ICAqIHdhc20vV2FzbVNsb3dQYXRocy5jcHA6CisKIDIwMjAtMDEtMTYgIERvbiBPbG1zdGVhZCAg
PGRvbi5vbG1zdGVhZEBzb255LmNvbT4KIAogICAgICAgICBOb24tdW5pZmllZCBidWlsZCBmaXhl
cyBtaWQgSmFudWFyeSAyMDIwIGVkaXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggZjM2ZDY1NzA4MzVlNmQ4OGEyODlkNmIw
ZjljNzY2NzEyMDRmMmNiOS4uMzc1YzhiNjdmNDFkMDBkZGYwYmJjYmY1NmUxOGNkOGZjNTg4MDI5
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAyMC0wMS0xNiAgS2VpdGggTWlsbGVyICA8a2VpdGhf
bWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZWxhbmQgYnl0ZWNvZGUgY2hlY2twb2ludHMg
c2luY2UgYnVncyBoYXZlIGJlZW4gZml4ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwNjM2MQorCisgICAgICAgIFVucmV2aWV3ZWQsIHJlbGFuZC4K
KworICAgICAgICBUaGUgd2F0Y2ggYnVncyBoYXZlIGJlZW4gZml4ZWQgYnkgaHR0cHM6Ly90cmFj
LndlYmtpdC5vcmcvY2hhbmdlc2V0LzI1NDY3NAorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0JpdG1hcC5oOgorICAgICAgICAoV1RGOjpX
b3JkVHlwZT46OmludmVydCk6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6b3BlcmF0b3IpOgor
ICAgICAgICAoV1RGOjpXb3JkVHlwZT46Om9wZXJhdG9yIGNvbnN0IGNvbnN0KToKKyAgICAgICAg
KiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3RmL0VudW1DbGFzc09wZXJhdG9yT3Zl
cmxvYWRzLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9GYXN0Qml0VmVjdG9yLmg6CisgICAgICAg
IChXVEY6OkZhc3RCaXRSZWZlcmVuY2U6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAo
V1RGOjpGYXN0Qml0UmVmZXJlbmNlOjpvcGVyYXRvcnw9KToKKyAgICAgICAgKFdURjo6RmFzdEJp
dFJlZmVyZW5jZTo6b3BlcmF0b3ImPSk6CisgICAgICAgIChXVEY6OkZhc3RCaXRWZWN0b3I6OmZp
bGwpOgorICAgICAgICAoV1RGOjpGYXN0Qml0VmVjdG9yOjpncm93KToKKyAgICAgICAgKiB3dGYv
VW5hbGlnbmVkQWNjZXNzLmg6CisgICAgICAgIChXVEY6OnVuYWxpZ25lZExvYWQpOgorICAgICAg
ICAoV1RGOjp1bmFsaWduZWRTdG9yZSk6CisKIDIwMjAtMDEtMTYgIFNhbSBXZWluaWcgIDx3ZWlu
aWdAYXBwbGUuY29tPgogCiAgICAgICAgIFBsYXRmb3JtLmggaXMgb3V0IG9mIGNvbnRyb2wgUGFy
dCA2OiBTcGxpdCBVU0VfKiBtYWNybyBkZWZpbml0aW9ucyBvdXQgb2YgUGxhdGZvcm0uaCBhbmQg
aW50byBhIG5ldyBQbGF0Zm9ybVVzZS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQK
aW5kZXggYjkxN2JjNTg5MDY5NzVhMzQ3ZWVmMWE3YzVhNmJmMDVhOWM1NGI2Yi4uOTFlNDI3YzMw
YzUxMTYzZWRkOWYxMDZkNDJmOTVlMDlkMDJiZTljNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dApAQCAtNTI2LDYgKzUyNiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRF
X0ZSQU1FV09SS19IRUFERVJTCiAgICAgYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24u
aAogICAgIGJ5dGVjb2RlL09wY29kZS5oCiAgICAgYnl0ZWNvZGUvT3Bjb2RlU2l6ZS5oCisgICAg
Ynl0ZWNvZGUvT3BlcmFuZHMuaAogICAgIGJ5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgKICAg
ICBieXRlY29kZS9QdXRCeUlkRmxhZ3MuaAogICAgIGJ5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54
Y2ZpbGVsaXN0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0Lnhj
ZmlsZWxpc3QKaW5kZXggZjhjMWI0YWU1NTZiNTM0YzJhYjEwMWFjMzkwYmE3MTFiNDVjYmFlYS4u
OWVhZDY1M2ZhYWFiMTg5M2ViOTJkZDAyZTk3NTc5NjZkZmE5OWFjNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKQEAg
LTY0LDYgKzY0LDcgQEAgJChQUk9KRUNUX0RJUikvZGlzYXNzZW1ibGVyL3VkaXM4Ni9vcHRhYmxl
LnhtbAogJChQUk9KRUNUX0RJUikvZGlzYXNzZW1ibGVyL3VkaXM4Ni91ZF9pdGFiLnB5CiAkKFBS
T0pFQ1RfRElSKS9nZW5lcmF0b3IvQXJndW1lbnQucmIKICQoUFJPSkVDVF9ESVIpL2dlbmVyYXRv
ci9Bc3NlcnRpb24ucmIKKyQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9DaGVja3BvaW50cy5yYgog
JChQUk9KRUNUX0RJUikvZ2VuZXJhdG9yL0RTTC5yYgogJChQUk9KRUNUX0RJUikvZ2VuZXJhdG9y
L0ZpdHMucmIKICQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9HZW5lcmF0ZWRGaWxlLnJiCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDM5NDBmMWQzNGMzNGQ5YTAzYjUxZGNiNWNjOTU5
MjRhNWM3MWI5ZDguLjY2ZjkzNWRkYjE5MjllY2EzMmQ2ZmNlMTEyYjM5MTE2NjEyNzczOWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05MzEsNiArOTMxLDggQEAKIAkJNTMzM0JC
REIyMTEwRjdEMjAwNzYxOEVDIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY4ODBGMUIxNDMyOEJCOTAw
QjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwICovOyB9OwogCQk1MzMzQkJEQzIx
MTBGN0Q5MDA3NjE4RUMgLyogREZHU3BlY3VsYXRpdmVKSVQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQzlEQzIxMzI4REY4MjAwMkIyQUQ3IC8q
IERGR1NwZWN1bGF0aXZlSklULmNwcCAqLzsgfTsKIAkJNTMzM0JCREQyMTEwRjdFMTAwNzYxOEVD
IC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODY4ODBGNEMxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0
aXZlSklUNjQuY3BwICovOyB9OworCQk1MzM4RTJBNzIzOTZFRkZCMDBDNjFCQUQgLyogQ2hlY2tw
b2ludE9TUkV4aXRTaWRlU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzMzhFMkE2MjM5NkVGRUMwMEM2MUJBRCAvKiBDaGVja3BvaW50T1NSRXhp
dFNpZGVTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTUzMzhFQkEzMjNBQjA0QjgwMDM4MjY2MiAvKiBGVExTZWxlY3RQcmVkaWN0YWJpbGl0
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMzOEVC
QTIyM0FCMDRBMzAwMzgyNjYyIC8qIEZUTFNlbGVjdFByZWRpY3RhYmlsaXR5LmggKi87IH07CiAJ
CTUzNDFGQzcyMURBQzM0M0MwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQxRkM3MTFEQUMz
NDNDMDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oICovOyB9OwogCQk1MzQ2Mzg3
MTFFNzBDRjNEMDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYzODcwMUU3MENGM0QwMEYxMkFDMSAvKiBK
U1J1bkxvb3BUaW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTUzNDYzODc1MUU3MERERUMwMEYxMkFDMSAvKiBQcm9taXNlVGltZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDYzODc0MUU3MERE
RUMwMEYxMkFDMSAvKiBQcm9taXNlVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzYwMSw2ICszNjAzLDggQEAKIAkJNTMxODA0NUQyMkVB
QUYwRjAwNEE3MzQyIC8qIEIzRXh0cmFjdFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIz
RXh0cmFjdFZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzRXh0cmFjdFZhbHVlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMxRDRFMTkxRjU5Q0REMjAwRUM4MzZDIC8qIHRlc3RhcGku
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGFwaS5jcHA7IHBhdGggPSBBUEkvdGVzdHMvdGVz
dGFwaS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMjYzMUIzMjE4Nzc3QTUw
MDdCODE5MSAvKiBKYXZhU2NyaXB0Q29yZS5tb2R1bGVtYXAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSAic291cmNlY29k
ZS5tb2R1bGUtbWFwIjsgcGF0aCA9IEphdmFTY3JpcHRDb3JlLm1vZHVsZW1hcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMzOEUyQTYyMzk2RUZFQzAwQzYxQkFEIC8qIENoZWNrcG9p
bnRPU1JFeGl0U2lkZVN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENo
ZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUzMzhFQkEyMjNBQjA0QTMwMDM4MjY2MiAvKiBGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5o
OyBwYXRoID0gZnRsL0ZUTFNlbGVjdFByZWRpY3RhYmlsaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUzM0IxNURFMURDN0Y0NjMwMDRENTAwQSAvKiBXYXNtT3BzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21PcHMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTM0MUZDNkYxREFDMzNFNTAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNr
VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNXYXNtQm91
bmRzQ2hlY2tWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0MUZDNzExREFDMzQzQzAwRTdFNEQ3IC8q
IEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oOyBwYXRoID0gYjMvQjNXYXNtQm91bmRzQ2hlY2tW
YWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzYxNSw2ICszNjE5LDkgQEAK
IAkJNTM0QzQ1N0ExQkM3MDNEQzAwNzQ3NkE3IC8qIFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qcyAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFR5cGVkQXJyYXlDb25zdHJ1
Y3Rvci5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0QzQ1N0IxQkM3MjQxMTAw
NzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0QzQ1N0QxQkM3MjU0OTAwNzQ3NkE3IC8qIEpTVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1MzREOUJGODIzNjNDNTVEMDA1NDUyNEQgLyogU2V0SXRlcmF0b3JQcm90b3R5
cGUuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBTZXRJdGVyYXRv
clByb3RvdHlwZS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0RDlCRjkyMzYz
QzU1RDAwNTQ1MjREIC8qIEl0ZXJhdG9ySGVscGVycy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
amF2YXNjcmlwdDsgcGF0aCA9IEl0ZXJhdG9ySGVscGVycy5qczsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTM0RDlCRkEyMzYzQzU1RDAwNTQ1MjREIC8qIE1hcEl0ZXJhdG9yUHJvdG90
eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gTWFwSXRlcmF0
b3JQcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEUwMzREMUU0
RDRCMTYwMDIxM0Y2NCAvKiBBY2Nlc3NDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFjY2Vzc0Nhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0RTAz
NEYxRTREOTVFRDAwMjEzRjY0IC8qIEFjY2Vzc0Nhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzQ2FzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUzNEUwMzUzMUU1M0JEMjkwMDIxM0Y2NCAvKiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3ND
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludHJpbnNpY0dldHRlckFj
Y2Vzc0Nhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU1MzQsNiArNTU0MSw3
IEBACiAJCQkJMEY0ODUzMjYxODdERkRFQzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmgg
Ki8sCiAJCQkJMEZDRUZBQTkxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCAq
LywKIAkJCQkwRkNFRkFBQTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuaCAqLywK
KwkJCQk1MzM4RUJBMjIzQUIwNEEzMDAzODI2NjIgLyogRlRMU2VsZWN0UHJlZGljdGFiaWxpdHku
aCAqLywKIAkJCQkwRjI1RjFBQTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmNw
cCAqLywKIAkJCQkwRjI1RjFBQjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmgg
Ki8sCiAJCQkJMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5j
cHAgKi8sCkBAIC01OTYwLDYgKzU5NjgsNyBAQAogCQkJCTE0MjlEOERDMEVEMjIwNUIwMEI4OTYx
OSAvKiBDYWxsRnJhbWUuaCAqLywKIAkJCQlBN0Y4NjlFQzBGOTVDMkVDMDA1NTg2OTcgLyogQ2Fs
bEZyYW1lQ2xvc3VyZS5oICovLAogCQkJCUZFQTNCQkE3MjEyQjY1NTgwMEU5M0FEMSAvKiBDYWxs
RnJhbWVJbmxpbmVzLmggKi8sCisJCQkJNTMzOEUyQTYyMzk2RUZFQzAwQzYxQkFEIC8qIENoZWNr
cG9pbnRPU1JFeGl0U2lkZVN0YXRlLmggKi8sCiAJCQkJMTQyOUQ4NUIwRUQyMThFOTAwQjg5NjE5
IC8qIENMb29wU3RhY2suY3BwICovLAogCQkJCTE0RDc5MjY0MERBQTAzRkIwMDFBOUYwNSAvKiBD
TG9vcFN0YWNrLmggKi8sCiAJCQkJQTdDMUVBRUIxNzk4N0FCNjAwMjk5REIyIC8qIENMb29wU3Rh
Y2tJbmxpbmVzLmggKi8sCkBAIC04NjAwLDcgKzg2MDksOSBAQAogCQkJCUE1MjcwNDg1MUQwMjdD
ODgwMDM1NEMzNyAvKiBHbG9iYWxPcGVyYXRpb25zLmpzICovLAogCQkJCUUzNUUwMzYxMUI3QUI0
ODUwMDczQUQyQSAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuanMgKi8sCiAJCQkJ
RTMzRjUwODgxQjg0NEExQTAwNDEzODU2IC8qIEludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmpz
ICovLAorCQkJCTUzNEQ5QkY5MjM2M0M1NUQwMDU0NTI0RCAvKiBJdGVyYXRvckhlbHBlcnMuanMg
Ki8sCiAJCQkJN0NGOUJDNUIxQjY1RDlBMzAwOURCMUVGIC8qIEl0ZXJhdG9yUHJvdG90eXBlLmpz
ICovLAorCQkJCTUzNEQ5QkZBMjM2M0M1NUQwMDU0NTI0RCAvKiBNYXBJdGVyYXRvclByb3RvdHlw
ZS5qcyAqLywKIAkJCQk3MDM1NTg3QzFDNDE4NDE5MDA0QkQ3QkYgLyogTWFwUHJvdG90eXBlLmpz
ICovLAogCQkJCUUzMDY3Nzk3MUI4QkM2RjUwMDNGODdGMCAvKiBNb2R1bGVMb2FkZXIuanMgKi8s
CiAJCQkJQTUyNzA0ODYxRDAyN0M4ODAwMzU0QzM3IC8qIE51bWJlckNvbnN0cnVjdG9yLmpzICov
LApAQCAtODYxMSw2ICs4NjIyLDcgQEAKIAkJCQk3Q0Y5QkM1RjFCNjVEOUIxMDA5REIxRUYgLyog
UmVmbGVjdE9iamVjdC5qcyAqLywKIAkJCQk2NTQ3ODg0MjFDOTM3RDJDMDAwNzgxQTAgLyogUmVn
RXhwUHJvdG90eXBlLmpzICovLAogCQkJCTg0OTI1QTlDMjJCMzBDQzgwMEQxREZGRiAvKiBSZWdF
eHBTdHJpbmdJdGVyYXRvclByb3RvdHlwZS5qcyAqLywKKwkJCQk1MzREOUJGODIzNjNDNTVEMDA1
NDUyNEQgLyogU2V0SXRlcmF0b3JQcm90b3R5cGUuanMgKi8sCiAJCQkJNzAzNTU4N0QxQzQxODQx
OTAwNEJEN0JGIC8qIFNldFByb3RvdHlwZS5qcyAqLywKIAkJCQk3Q0Y5QkM2MDFCNjVEOUIxMDA5
REIxRUYgLyogU3RyaW5nQ29uc3RydWN0b3IuanMgKi8sCiAJCQkJN0NGOUJDNjExQjY1RDlCMTAw
OURCMUVGIC8qIFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmpzICovLApAQCAtOTExMyw2ICs5MTI1
LDcgQEAKIAkJCQlGRTFCRDAyMTFFNzIwMjc5MDAxMzRCQzkgLyogQ2VsbFByb2ZpbGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUZFQzE2MDMyMjMzOUU5RjkwMEEwNENCOCAvKiBDZWxsU2l6ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYxQzNEREExQkJDRTA5RTAwRTUyM0U0IC8qIENlbGxTdGF0ZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNTMzOEUyQTcyMzk2RUZGQjAwQzYxQkFEIC8qIENoZWNrcG9p
bnRPU1JFeGl0U2lkZVN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzZBQUFFNTBFMUY0MjY1
MDBBRDg3RDggLyogQ2xhc3NJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAyNjFBQTkw
OTU2MDBEMzNCMzMgLyogQ2xvbmVkQXJndW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzQ1RTBFMTZGNUNEMDBCMzQ0NjAgLyogQ0xvb3BTdGFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC05
NDU4LDYgKzk0NzEsNyBAQAogCQkJCTBGOUQ0QzExMUMzRTJDNzQwMDZDRDk4NCAvKiBGVExQYXRj
aHBvaW50RXhjZXB0aW9uSGFuZGxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ4NTMyQTE4N0RG
REVDMDA4M0I2ODcgLyogRlRMUmVjb3ZlcnlPcGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
Q0VGQUFDMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNTMzOEVCQTMyM0FCMDRCODAwMzgyNjYyIC8qIEZUTFNlbGVjdFByZWRpY3RhYmlsaXR5
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI1RjFCMjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xv
d1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI1RjFCNDE4MTYzNUYzMDA1MjJGMzkg
LyogRlRMU2xvd1BhdGhDYWxsS2V5LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzIyRTVBNzFEQTY0
NEE4MDA2RTc3MDkgLyogRlRMU25pcHBldFBhcmFtcy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJl
Zi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVS
ZWYuaAppbmRleCA1NmQ4YTA3ZGJmY2RlZmRlYzc2MDg5YTEzZGZiNTAxMWI2NGIyNWQzLi42ODg0
MDgzZTBmYzE3NmEyMTNjZDY2ODI3NjRiMmY0ZWIzMGM2ZjZjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKQEAg
LTIzOSwxMyArMjM5LDYgQEAgcHVibGljOgogICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lO
VEVSKG1fdmFsdWUpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+Ci0gICAgZXhw
bGljaXQgUmV0dXJuQWRkcmVzc1B0cihGdW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9uKQotICAgICAg
ICA6IG1fdmFsdWUodW50YWdDb2RlUHRyPHRhZz4oZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3Mo
KSkpCi0gICAgewotICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOwot
ICAgIH0KLQogICAgIGNvbnN0IHZvaWQqIHZhbHVlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJl
dHVybiBtX3ZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9Qcm9iZUZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlRnJh
bWUuaAppbmRleCBjYWIzNjhkYzdjZDBmM2I0Zjg1Yjc2OWI3ODhkNDBkNjNlYTU2Mzc3Li40MjI5
YTBkMDk5N2E0YjBmNTgzYWNhZWEzYTBmMTY1NzI5ZjQ2ZTA1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlRnJhbWUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlRnJhbWUuaApAQCAtNDYsMTQgKzQ2LDE0IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIGdldDxUPihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3Vt
ZW50KSAqIHNpemVvZihSZWdpc3RlcikpOwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
ID0gSlNWYWx1ZT4KLSAgICBUIG9wZXJhbmQoaW50IG9wZXJhbmQpCisgICAgVCBvcGVyYW5kKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdldDxUPihzdGF0
aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lz
dGVyKSk7CisgICAgICAgIHJldHVybiBnZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVvZihS
ZWdpc3RlcikpOwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KLSAg
ICBUIG9wZXJhbmQoaW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQpCisgICAgVCBvcGVyYW5k
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0KQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGdldDxUPihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpLm9m
ZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIG9mZnNldCk7CisgICAgICAgIHJldHVybiBnZXQ8
VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBvZmZzZXQpOwogICAgIH0K
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC02MiwxNCArNjIsMTQgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gc2V0PFQ+KENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1lbnQp
ICogc2l6ZW9mKFJlZ2lzdGVyKSwgdmFsdWUpOwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotICAgIHZvaWQgc2V0T3BlcmFuZChpbnQgb3BlcmFuZCwgVCB2YWx1ZSkKKyAgICB2b2lk
IHNldE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIFQgdmFsdWUpCiAgICAgewotICAg
ICAgICBzZXQ8VD4oc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKS5vZmZzZXQo
KSAqIHNpemVvZihSZWdpc3RlciksIHZhbHVlKTsKKyAgICAgICAgc2V0PFQ+KG9wZXJhbmQub2Zm
c2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpLCB2YWx1ZSk7CiAgICAgfQogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZXRPcGVyYW5kKGludCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zm
c2V0LCBUIHZhbHVlKQorICAgIHZvaWQgc2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCwgcHRyZGlmZl90IG9mZnNldCwgVCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHNldDxUPihzdGF0
aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lz
dGVyKSArIG9mZnNldCwgdmFsdWUpOworICAgICAgICBzZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAq
IHNpemVvZihSZWdpc3RlcikgKyBvZmZzZXQsIHZhbHVlKTsKICAgICB9CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy90ZXN0YjMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAppbmRleCAz
NWQwMTc1NmQ1MzJhNzFlYzA3ZmU0MDNlZjdhNTI1MGI1ZmM2ZjYxLi40MWJjOTYxYTE1MzA4NWZi
YTg1NTA2NWMzOWI2YzZkYTZmYjJhODBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCkBA
IC0yNjMsMjAgKzI2MywyMCBAQCBpbmxpbmUgdm9pZCBjaGVja0RvZXNOb3RVc2VJbnN0cnVjdGlv
bihDb21waWxhdGlvbiYgY29tcGlsYXRpb24sIGNvbnN0IGNoYXIqIHRleAogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUeXBlPgotc3RydWN0IE9wZXJhbmQgeworc3RydWN0IEIzT3BlcmFuZCB7CiAg
ICAgY29uc3QgY2hhciogbmFtZTsKICAgICBUeXBlIHZhbHVlOwogfTsKIAotdHlwZWRlZiBPcGVy
YW5kPGludDY0X3Q+IEludDY0T3BlcmFuZDsKLXR5cGVkZWYgT3BlcmFuZDxpbnQzMl90PiBJbnQz
Mk9wZXJhbmQ7Ci10eXBlZGVmIE9wZXJhbmQ8aW50MTZfdD4gSW50MTZPcGVyYW5kOwotdHlwZWRl
ZiBPcGVyYW5kPGludDhfdD4gSW50OE9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQ2NF90
PiBJbnQ2NE9wZXJhbmQ7Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQzMl90PiBJbnQzMk9wZXJhbmQ7
Cit0eXBlZGVmIEIzT3BlcmFuZDxpbnQxNl90PiBJbnQxNk9wZXJhbmQ7Cit0eXBlZGVmIEIzT3Bl
cmFuZDxpbnQ4X3Q+IEludDhPcGVyYW5kOwogCi0jZGVmaW5lIE1BS0VfT1BFUkFORCh2YWx1ZSkg
T3BlcmFuZDxkZWNsdHlwZSh2YWx1ZSk+IHsgI3ZhbHVlLCB2YWx1ZSB9CisjZGVmaW5lIE1BS0Vf
T1BFUkFORCh2YWx1ZSkgQjNPcGVyYW5kPGRlY2x0eXBlKHZhbHVlKT4geyAjdmFsdWUsIHZhbHVl
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRmxvYXRUeXBlPgotdm9pZCBwb3B1bGF0ZVdpdGhJbnRl
cmVzdGluZ1ZhbHVlcyhWZWN0b3I8T3BlcmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMpCit2b2lk
IHBvcHVsYXRlV2l0aEludGVyZXN0aW5nVmFsdWVzKFZlY3RvcjxCM09wZXJhbmQ8RmxvYXRUeXBl
Pj4mIG9wZXJhbmRzKQogewogICAgIG9wZXJhbmRzLmFwcGVuZCh7ICIwLiIsIHN0YXRpY19jYXN0
PEZsb2F0VHlwZT4oMC4pIH0pOwogICAgIG9wZXJhbmRzLmFwcGVuZCh7ICItMC4iLCBzdGF0aWNf
Y2FzdDxGbG9hdFR5cGU+KC0wLikgfSk7CkBAIC0zMDIsOSArMzAyLDkgQEAgdm9pZCBwb3B1bGF0
ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhWZWN0b3I8T3BlcmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFu
ZHMpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZsb2F0VHlwZT4KLVZlY3RvcjxPcGVyYW5kPEZs
b2F0VHlwZT4+IGZsb2F0aW5nUG9pbnRPcGVyYW5kcygpCitWZWN0b3I8QjNPcGVyYW5kPEZsb2F0
VHlwZT4+IGZsb2F0aW5nUG9pbnRPcGVyYW5kcygpCiB7Ci0gICAgVmVjdG9yPE9wZXJhbmQ8Rmxv
YXRUeXBlPj4gb3BlcmFuZHM7CisgICAgVmVjdG9yPEIzT3BlcmFuZDxGbG9hdFR5cGU+PiBvcGVy
YW5kczsKICAgICBwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhvcGVyYW5kcyk7CiAgICAg
cmV0dXJuIG9wZXJhbmRzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BY2Nlc3NDYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlLmNwcAppbmRleCBjOGI1MmI4ODI2YWU5ODIyOGVlODQ0NDk2YjFlZTdhOGU5YTdk
MzNhLi44OTRkMzcyMWIyZDJmMzg1ZTlmZmExM2U5NTVhNzQ1YTBhYWE1NTNiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCkBAIC0xNTIwLDcgKzE1
MjAsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3Rh
dGUmIHN0YXRlKQogCiAgICAgICAgIGppdC5zdG9yZTMyKAogICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5n
T3JPcmlnaW5hbCgpLmJpdHMoKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0Zvcihz
dGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKSkpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKIAogICAgICAgICBpZiAobV90
eXBlID09IEdldHRlciB8fCBtX3R5cGUgPT0gU2V0dGVyKSB7CiAgICAgICAgICAgICBhdXRvJiBh
Y2Nlc3MgPSB0aGlzLT5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpOwpAQCAtMTYwNCwxMyAr
MTYwNCwxMyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9u
U3RhdGUmIHN0YXRlKQogCiAgICAgICAgICAgICBqaXQuc3RvcmVDZWxsKAogICAgICAgICAgICAg
ICAgIHRoaXNHUFIsCi0gICAgICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpKTsK
KyAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50SW5jbHVkaW5nVGhpcygwKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpKTsK
IAogICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBTZXR0ZXIpIHsKICAgICAgICAgICAgICAgICBq
aXQuc3RvcmVWYWx1ZSgKICAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAogICAgICAgICAg
ICAgICAgICAgICBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICAg
ICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0
ZXIpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dEluY2x1ZGluZ1RoaXMoMSkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93Q2FzZSA9IGppdC5i
cmFuY2hQdHJXaXRoUGF0Y2goCkBAIC0xODA5LDcgKzE4MDksNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6
OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAg
ICAgIGppdC5zdG9yZTMyKAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmNhbGxTaXRlSW5kZXhGb3JF
eGNlcHRpb25IYW5kbGluZ09yT3JpZ2luYWwoKS5iaXRzKCkpLAotICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpOworICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcykpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGppdC5tYWtl
U3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICAgICAgICAgICAgICAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZVNuaXBwZXRQYXJhbXMu
Y3BwCmluZGV4IGIxZDQwNGExNDViZDIxNDFiM2EwYTljNDMxOTE4YTU4ZjlhZjE4OWYuLjY5YjVl
ZTEwNmIyZTgxNzU1Nzc3OTcxYmUyNzE0YzRhMWE5OGNiYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNw
cApAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgaml0LnN0b3JlMzIoCiAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0ZS5jYWxsU2l0ZUluZGV4Rm9y
RXhjZXB0aW9uSGFuZGxpbmdPck9yaWdpbmFsKCkuYml0cygpKSwKLSAgICAgICAgICAgIENDYWxs
SGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7CisgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwog
CiAgICAgICAgIGppdC5tYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAKaW5kZXggNjA1OGZi
MDYyMDM5NDZjNGNkNTZlZjZhOTgzODc5ZDJkNmM4MWZiNi4uODM2NTExNWY0MjE3OTFhNWM2NjQ4
M2E1YTc5MDVjYWU1YzBlZTNlMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgQnl0ZWNvZGVE
dW1wZXJCYXNlOjpwcmludExvY2F0aW9uQW5kT3AoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBs
b2NhdGlvbiwKIAogdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OmR1bXBWYWx1ZShWaXJ0dWFsUmVn
aXN0ZXIgcmVnKQogewotICAgIG1fb3V0LnByaW50ZigiJXMiLCByZWdpc3Rlck5hbWUocmVnLm9m
ZnNldCgpKS5kYXRhKCkpOworICAgIG1fb3V0LnByaW50ZigiJXMiLCByZWdpc3Rlck5hbWUocmVn
KS5kYXRhKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUcmFpdHM+CkBAIC04MywxMiArODMs
MTIgQEAgdGVtcGxhdGUgdm9pZCBCeXRlY29kZUR1bXBlckJhc2U6OmR1bXBWYWx1ZShHZW5lcmlj
Qm91bmRMYWJlbDxXYXNtOjpHZW5lcmF0b3JUcmEKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgotQ1N0cmluZyBCeXRlY29kZUR1bXBlcjxCbG9j
az46OnJlZ2lzdGVyTmFtZShpbnQgcikgY29uc3QKK0NTdHJpbmcgQnl0ZWNvZGVEdW1wZXI8Qmxv
Y2s+OjpyZWdpc3Rlck5hbWUoVmlydHVhbFJlZ2lzdGVyIHIpIGNvbnN0CiB7Ci0gICAgaWYgKGlz
Q29uc3RhbnRSZWdpc3RlckluZGV4KHIpKQorICAgIGlmIChyLmlzQ29uc3RhbnQoKSkKICAgICAg
ICAgcmV0dXJuIGNvbnN0YW50TmFtZShyKTsKIAotICAgIHJldHVybiB0b0NTdHJpbmcoVmlydHVh
bFJlZ2lzdGVyKHIpKTsKKyAgICByZXR1cm4gdG9DU3RyaW5nKHIpOwogfQogCiB0ZW1wbGF0ZSA8
Y2xhc3MgQmxvY2s+CkBAIC05OCwxMCArOTgsMTAgQEAgaW50IEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
Pjo6b3V0T2ZMaW5lSnVtcE9mZnNldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IG9mZnNldCkK
IH0KIAogdGVtcGxhdGU8Y2xhc3MgQmxvY2s+Ci1DU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2Nr
Pjo6Y29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3QKK0NTdHJpbmcgQnl0ZWNvZGVEdW1wZXI8
QmxvY2s+Ojpjb25zdGFudE5hbWUoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKIHsKLSAgICBh
dXRvIHZhbHVlID0gYmxvY2soKS0+Z2V0Q29uc3RhbnQoaW5kZXgpOwotICAgIHJldHVybiB0b0NT
dHJpbmcodmFsdWUsICIoIiwgVmlydHVhbFJlZ2lzdGVyKGluZGV4KSwgIikiKTsKKyAgICBhdXRv
IHZhbHVlID0gYmxvY2soKS0+Z2V0Q29uc3RhbnQocmVnKTsKKyAgICByZXR1cm4gdG9DU3RyaW5n
KHZhbHVlLCAiKCIsIHJlZywgIikiKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgQmxvY2s+CkBAIC0z
MzUsNyArMzM1LDcgQEAgdm9pZCBCeXRlY29kZUR1bXBlcjo6ZHVtcENvbnN0YW50cygpCiAgICAg
fQogfQogCi1DU3RyaW5nIEJ5dGVjb2RlRHVtcGVyOjpjb25zdGFudE5hbWUoaW50IGluZGV4KSBj
b25zdAorQ1N0cmluZyBCeXRlY29kZUR1bXBlcjo6Y29uc3RhbnROYW1lKFZpcnR1YWxSZWdpc3Rl
ciBpbmRleCkgY29uc3QKIHsKICAgICBGdW5jdGlvbkNvZGVCbG9jayogYmxvY2sgPSB0aGlzLT5i
bG9jaygpOwogICAgIGF1dG8gdmFsdWUgPSBmb3JtYXRDb25zdGFudChibG9jay0+Z2V0Q29uc3Rh
bnRUeXBlKGluZGV4KSwgYmxvY2stPmdldENvbnN0YW50KGluZGV4KSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oCmluZGV4IDBkNzE2NzUwMzk0
YjE1ZDRlYjVlODdjNWE4ODI1MTA3NWVmZTAzZWUuLmVkYjExMjkyMWFmNzUzZTYzZDg2MTM3MmZi
ZGUwZWVmODlmY2ExNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUR1bXBlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUR1bXBlci5oCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXBW
YWx1ZShUIHYpIHsgbV9vdXQucHJpbnQodik7IH0KIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwg
Q1N0cmluZyByZWdpc3Rlck5hbWUoaW50KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBDU3RyaW5n
IHJlZ2lzdGVyTmFtZShWaXJ0dWFsUmVnaXN0ZXIpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGlu
dCBvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQpIGNvbnN0ID0g
MDsKIAogICAgIEJ5dGVjb2RlRHVtcGVyQmFzZShQcmludFN0cmVhbSYgb3V0KQpAQCAtOTEsMTEg
KzkxLDExIEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgZHVtcEJ5dGVjb2RlKGNvbnN0IEluc3Ry
dWN0aW9uU3RyZWFtOjpSZWYmIGl0LCBjb25zdCBJQ1N0YXR1c01hcCYpOwogCi0gICAgQ1N0cmlu
ZyByZWdpc3Rlck5hbWUoaW50IHIpIGNvbnN0IG92ZXJyaWRlOworICAgIENTdHJpbmcgcmVnaXN0
ZXJOYW1lKFZpcnR1YWxSZWdpc3RlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgaW50IG91dE9mTGlu
ZUp1bXBPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZzZXQpIGNvbnN0IG92ZXJy
aWRlOwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgQ1N0cmluZyBjb25zdGFudE5hbWUoaW50IGlu
ZGV4KSBjb25zdDsKKyAgICB2aXJ0dWFsIENTdHJpbmcgY29uc3RhbnROYW1lKFZpcnR1YWxSZWdp
c3RlcikgY29uc3Q7CiAKICAgICBCbG9jayogbV9ibG9jazsKIH07CkBAIC0xMzUsNyArMTM1LDcg
QEAgcHJpdmF0ZToKICAgICB1c2luZyBKU0M6OkJ5dGVjb2RlRHVtcGVyPEZ1bmN0aW9uQ29kZUJs
b2NrPjo6Qnl0ZWNvZGVEdW1wZXI7CiAKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKLSAgICBD
U3RyaW5nIGNvbnN0YW50TmFtZShpbnQgaW5kZXgpIGNvbnN0IG92ZXJyaWRlOworICAgIENTdHJp
bmcgY29uc3RhbnROYW1lKFZpcnR1YWxSZWdpc3RlciBpbmRleCkgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgQ1N0cmluZyBmb3JtYXRDb25zdGFudChUeXBlLCB1aW50NjRfdCkgY29uc3Q7CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0
b3JpZmljYXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
R2VuZXJhdG9yaWZpY2F0aW9uLmNwcAppbmRleCAzM2QyYmVlZDIwMjc3YTQzM2U1MTAxMGQxYWY0
Y2QzMDkyNjhmYmRlLi5kZmUyZmM3YzM1NGE1OGQ4MDBkM2VkMDVkOTJmZDlmM2I3OTY2MGZmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0
b3JpZmljYXRpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHAKQEAgLTIyNCw3ICsyMjQsNyBAQCB2b2lkIEJ5dGVj
b2RlR2VuZXJhdG9yaWZpY2F0aW9uOjpydW4oKQogICAgIHsKICAgICAgICAgYXV0byBuZXh0VG9F
bnRlclBvaW50ID0gZW50ZXJQb2ludCgpLm5leHQoKTsKICAgICAgICAgdW5zaWduZWQgc3dpdGNo
VGFibGVJbmRleCA9IG1fY29kZUJsb2NrLT5udW1iZXJPZlN3aXRjaEp1bXBUYWJsZXMoKTsKLSAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHN0YXRlID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
c3RhdGljX2Nhc3Q8aW50MzJfdD4oSlNHZW5lcmF0b3I6OkdlbmVyYXRvckFyZ3VtZW50OjpTdGF0
ZSkpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3RhdGUgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoc3RhdGljX2Nhc3Q8aW50MzJfdD4oSlNHZW5lcmF0b3I6Okdl
bmVyYXRvckFyZ3VtZW50OjpTdGF0ZSkpOwogICAgICAgICBhdXRvJiBqdW1wVGFibGUgPSBtX2Nv
ZGVCbG9jay0+YWRkU3dpdGNoSnVtcFRhYmxlKCk7CiAgICAgICAgIGp1bXBUYWJsZS5taW4gPSAw
OwogICAgICAgICBqdW1wVGFibGUuYnJhbmNoT2Zmc2V0cy5yZXNpemUobV95aWVsZHMuc2l6ZSgp
ICsgMSk7CkBAIC0yMzksNyArMjM5LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlv
bjo6cnVuKCkKICAgICB9CiAKICAgICBmb3IgKGNvbnN0IFlpZWxkRGF0YSYgZGF0YSA6IG1feWll
bGRzKSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KHN0YXRpY19jYXN0PGludDMyX3Q+KEpTR2VuZXJhdG9yOjpHZW5lcmF0b3JBcmd1
bWVudDo6RnJhbWUpKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKHN0YXRpY19jYXN0PGludDMyX3Q+KEpTR2Vu
ZXJhdG9yOjpHZW5lcmF0b3JBcmd1bWVudDo6RnJhbWUpKTsKIAogICAgICAgICBhdXRvIGluc3Ry
dWN0aW9uID0gbV9pbnN0cnVjdGlvbnMuYXQoZGF0YS5wb2ludCk7CiAgICAgICAgIC8vIEVtaXQg
c2F2ZSBzZXF1ZW5jZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUluZGV4LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUluZGV4LmNwcAppbmRleCAxNWQ2MWJhOTA0MDFhNzExN2RjMGY5ZjI2ZTE5MTM3ZWIyYzMx
NTliLi5hMmMxZjQxNWIxOTdkNDZiZDY4MTRhMjAxMTFjODdjNTA4NzIyMjRmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwCkBAIC0yNSw2
ICsyNSw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJCeXRlY29kZUluZGV4
LmgiCisKICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBA
IC0zMiw2ICszMyw4IEBAIG5hbWVzcGFjZSBKU0Mgewogdm9pZCBCeXRlY29kZUluZGV4OjpkdW1w
KFdURjo6UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQoImJjIyIsIG9m
ZnNldCgpKTsKKyAgICBpZiAoY2hlY2twb2ludCgpKQorICAgICAgICBvdXQucHJpbnQoImNwIyIs
IGNoZWNrcG9pbnQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgKaW5kZXggNTI5NWMyOWIxMjI4MTMx
ZjcyYWMyMDczMWMxZDNiY2U5MzUxNThkZi4uMTBmYmE0NDA1OGVjOWRmZWQyNTQ4MDlhNmQ3ODMz
N2QwMTFhNGI2MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlSW5kZXguaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVJbmRleC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHd0
Zi9IYXNoVHJhaXRzLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNl
IFdURiB7CiBjbGFzcyBQcmludFN0cmVhbTsKQEAgLTM3LDI0ICszOCwzMyBAQCBjbGFzcyBCeXRl
Y29kZUluZGV4IHsKIHB1YmxpYzoKICAgICBCeXRlY29kZUluZGV4KCkgPSBkZWZhdWx0OwogICAg
IEJ5dGVjb2RlSW5kZXgoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6
IG1fb2Zmc2V0KGRlbGV0ZWRWYWx1ZSgpLmFzQml0cygpKQorICAgICAgICA6IG1fcGFja2VkQml0
cyhkZWxldGVkVmFsdWUoKS5hc0JpdHMoKSkKICAgICB7CiAgICAgfQotICAgIGV4cGxpY2l0IEJ5
dGVjb2RlSW5kZXgodWludDMyX3QgYnl0ZWNvZGVPZmZzZXQpCi0gICAgICAgIDogbV9vZmZzZXQo
Ynl0ZWNvZGVPZmZzZXQpCi0gICAgeyB9CiAKLSAgICB1aW50MzJfdCBvZmZzZXQoKSBjb25zdCB7
IHJldHVybiBtX29mZnNldDsgfQotICAgIHVpbnQzMl90IGFzQml0cygpIGNvbnN0IHsgcmV0dXJu
IG1fb2Zmc2V0OyB9CisgICAgZXhwbGljaXQgQnl0ZWNvZGVJbmRleCh1aW50MzJfdCBieXRlY29k
ZU9mZnNldCwgdWludDhfdCBjaGVja3BvaW50ID0gMCkKKyAgICAgICAgOiBtX3BhY2tlZEJpdHMo
cGFjayhieXRlY29kZU9mZnNldCwgY2hlY2twb2ludCkpCisgICAgeworICAgICAgICBBU1NFUlQo
KnRoaXMpOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgbnVtYmVyT2ZD
aGVja3BvaW50cyA9IDQ7CisgICAgc3RhdGljX2Fzc2VydChoYXNPbmVCaXRTZXQobnVtYmVyT2ZD
aGVja3BvaW50cyksICJudW1iZXJPZkNoZWNrcG9pbnRzIHNob3VsZCBiZSBhIHBvd2VyIG9mIDIi
KTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IGNoZWNrcG9pbnRNYXNrID0gbnVtYmVy
T2ZDaGVja3BvaW50cyAtIDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBjaGVja3Bv
aW50U2hpZnQgPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihudW1iZXJPZkNoZWNrcG9pbnRzKTsK
KworICAgIHVpbnQzMl90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyA+PiBj
aGVja3BvaW50U2hpZnQ7IH0KKyAgICB1aW50OF90IGNoZWNrcG9pbnQoKSBjb25zdCB7IHJldHVy
biBtX3BhY2tlZEJpdHMgJiBjaGVja3BvaW50TWFzazsgfQorICAgIHVpbnQzMl90IGFzQml0cygp
IGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0czsgfQogCi0gICAgdW5zaWduZWQgaGFzaCgpIGNv
bnN0IHsgcmV0dXJuIFdURjo6aW50SGFzaChtX29mZnNldCk7IH0KKyAgICB1bnNpZ25lZCBoYXNo
KCkgY29uc3QgeyByZXR1cm4gV1RGOjppbnRIYXNoKG1fcGFja2VkQml0cyk7IH0KICAgICBzdGF0
aWMgQnl0ZWNvZGVJbmRleCBkZWxldGVkVmFsdWUoKSB7IHJldHVybiBmcm9tQml0cyhpbnZhbGlk
T2Zmc2V0IC0gMSk7IH0KICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gKnRoaXMgPT0gZGVsZXRlZFZhbHVlKCk7IH0KIAogICAgIHN0YXRpYyBCeXRlY29k
ZUluZGV4IGZyb21CaXRzKHVpbnQzMl90IGJpdHMpOwogCiAgICAgLy8gQ29tcGFyaXNvbiBvcGVy
YXRvcnMuCi0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zm
c2V0ICE9IGludmFsaWRPZmZzZXQgJiYgbV9vZmZzZXQgIT0gZGVsZXRlZFZhbHVlKCkub2Zmc2V0
KCk7IH0KKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9wYWNr
ZWRCaXRzICE9IGludmFsaWRPZmZzZXQgJiYgbV9wYWNrZWRCaXRzICE9IGRlbGV0ZWRWYWx1ZSgp
Lm9mZnNldCgpOyB9CiAgICAgYm9vbCBvcGVyYXRvciA9PShjb25zdCBCeXRlY29kZUluZGV4JiBv
dGhlcikgY29uc3QgeyByZXR1cm4gYXNCaXRzKCkgPT0gb3RoZXIuYXNCaXRzKCk7IH0KICAgICBi
b29sIG9wZXJhdG9yICE9KGNvbnN0IEJ5dGVjb2RlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVy
biAhKCp0aGlzID09IG90aGVyKTsgfQogCkBAIC02OSwxMyArNzksMjIgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IGludmFsaWRPZmZzZXQgPSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7CiAKLSAgICB1aW50MzJfdCBtX29mZnNl
dCB7IGludmFsaWRPZmZzZXQgfTsKKyAgICBzdGF0aWMgdWludDMyX3QgcGFjayh1aW50MzJfdCBi
eXRlY29kZUluZGV4LCB1aW50OF90IGNoZWNrcG9pbnQpOworCisgICAgdWludDMyX3QgbV9wYWNr
ZWRCaXRzIHsgaW52YWxpZE9mZnNldCB9OwogfTsKIAoraW5saW5lIHVpbnQzMl90IEJ5dGVjb2Rl
SW5kZXg6OnBhY2sodWludDMyX3QgYnl0ZWNvZGVJbmRleCwgdWludDhfdCBjaGVja3BvaW50KQor
eworICAgIEFTU0VSVChjaGVja3BvaW50IDwgbnVtYmVyT2ZDaGVja3BvaW50cyk7CisgICAgQVNT
RVJUKChieXRlY29kZUluZGV4IDw8IGNoZWNrcG9pbnRTaGlmdCkgPj4gY2hlY2twb2ludFNoaWZ0
ID09IGJ5dGVjb2RlSW5kZXgpOworICAgIHJldHVybiBieXRlY29kZUluZGV4IDw8IGNoZWNrcG9p
bnRTaGlmdCB8IGNoZWNrcG9pbnQ7Cit9CisKIGlubGluZSBCeXRlY29kZUluZGV4IEJ5dGVjb2Rl
SW5kZXg6OmZyb21CaXRzKHVpbnQzMl90IGJpdHMpCiB7CiAgICAgQnl0ZWNvZGVJbmRleCByZXN1
bHQ7Ci0gICAgcmVzdWx0Lm1fb2Zmc2V0ID0gYml0czsKKyAgICByZXN1bHQubV9wYWNrZWRCaXRz
ID0gYml0czsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgppbmRleCA4NjJjY2Q4Y2NmZDQwYmYwZWViNzM0
MjVlZjZkMjhiNDc5NjgwODljLi4zNDgzNDdjNmI0Y2Q3NTQ2ODBjMTI2YTBmNzI3NTM2ZjFiZTM3
YzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVM
aXN0LnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3Qu
cmIKQEAgLTU5LDcgKzU5LDcgQEAgdHlwZXMgWwogICAgIDpXYXRjaHBvaW50U2V0LAogCiAgICAg
OlZhbHVlUHJvZmlsZSwKLSAgICA6VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciwKKyAgICA6
VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyLAogICAgIDpVbmFyeUFyaXRoUHJv
ZmlsZSwKICAgICA6QmluYXJ5QXJpdGhQcm9maWxlLAogICAgIDpBcnJheVByb2ZpbGUsCkBAIC03
OTYsNiArNzk2LDEzIEBAIG9wIDpjYWxsX3ZhcmFyZ3MsCiAgICAgbWV0YWRhdGE6IHsKICAgICAg
ICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJv
ZmlsZSwKKyAgICB9LAorICAgIHRtcHM6IHsKKyAgICAgICAgYXJnQ291bnRJbmNsdWRpbmdUaGlz
OiB1bnNpZ25lZCwKKyAgICB9LAorICAgIGNoZWNrcG9pbnRzOiB7CisgICAgICAgIGRldGVybWlu
aW5nQXJnQ291bnQ6IG5pbCwKKyAgICAgICAgbWFrZUNhbGw6IG5pbCwKICAgICB9CiAKIG9wIDp0
YWlsX2NhbGxfdmFyYXJncywKQEAgLTgxMCw2ICs4MTcsMTMgQEAgb3AgOnRhaWxfY2FsbF92YXJh
cmdzLAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxl
LAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgfSwKKyAgICB0bXBzOiB7Cisg
ICAgICAgIGFyZ0NvdW50SW5jbHVkaW5nVGhpczogdW5zaWduZWQKKyAgICB9LAorICAgIGNoZWNr
cG9pbnRzOiB7CisgICAgICAgIGRldGVybWluaW5nQXJnQ291bnQ6IG5pbCwKKyAgICAgICAgbWFr
ZUNhbGw6IG5pbCwKICAgICB9CiAKIG9wIDp0YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsCkBA
IC04NTAsNiArODY0LDEzIEBAIG9wIDpjb25zdHJ1Y3RfdmFyYXJncywKICAgICBtZXRhZGF0YTog
ewogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTog
VmFsdWVQcm9maWxlLAorICAgIH0sCisgICAgdG1wczogeworICAgICAgICBhcmdDb3VudEluY2x1
ZGluZ1RoaXM6IHVuc2lnbmVkCisgICAgfSwKKyAgICBjaGVja3BvaW50czogeworICAgICAgICBk
ZXRlcm1pbmluZ0FyZ0NvdW50OiBuaWwsCisgICAgICAgIG1ha2VDYWxsOiBuaWwsCiAgICAgfQog
CiBvcCA6cmV0LApAQCAtMTAwMyw3ICsxMDI0LDcgQEAgb3AgOmNhdGNoLAogICAgICAgICB0aHJv
d25WYWx1ZTogVmlydHVhbFJlZ2lzdGVyLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAg
ICAgYnVmZmVyOiBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyLiosCisgICAgICAgIGJ1ZmZl
cjogVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyLiosCiAgICAgfQogCiBvcCA6
dGhyb3csCkBAIC0xMjQ5LDYgKzEyNzAsOCBAQCBvcCA6bGxpbnRfbmF0aXZlX2NhbGxfdHJhbXBv
bGluZQogb3AgOmxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZQogb3AgOmxsaW50X2lu
dGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZQogb3AgOmxsaW50X2ludGVybmFsX2Z1bmN0
aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lCitvcCA6Y2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lu
bGluZWRfY2FsbF90cmFtcG9saW5lCitvcCA6Y2hlY2twb2ludF9vc3JfZXhpdF90cmFtcG9saW5l
CiBvcCA6aGFuZGxlVW5jYXVnaHRFeGNlcHRpb24KIG9wIDpvcF9jYWxsX3JldHVybl9sb2NhdGlv
bgogb3AgOm9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAK
aW5kZXggOTE4ZTFkMjEzNGE2MGI2Y2ZmMTAxMTQzYWI1NTQzM2I4YjQzZjQ0MC4uNzk3NWZlZjNj
ODgxNDMxODE1N2E1OWRiZThiZTU1NDgzODhmZTM2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAK
QEAgLTIwMSw0ICsyMDEsMzkgQEAgdm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmR1bXBS
ZXN1bHRzKENvZGVCbG9jayogY29kZUJsb2NrKQogICAgIH0KIH0KIAordGVtcGxhdGU8dHlwZW5h
bWUgRW51bVR5cGUxLCB0eXBlbmFtZSBFbnVtVHlwZTI+Citjb25zdGV4cHIgYm9vbCBlbnVtVmFs
dWVzRXF1YWxBc0ludGVncmFsKEVudW1UeXBlMSB2MSwgRW51bVR5cGUyIHYyKQoreworICAgIHVz
aW5nIEludFR5cGUxID0gdHlwZW5hbWUgc3RkOjp1bmRlcmx5aW5nX3R5cGU8RW51bVR5cGUxPjo6
dHlwZTsKKyAgICB1c2luZyBJbnRUeXBlMiA9IHR5cGVuYW1lIHN0ZDo6dW5kZXJseWluZ190eXBl
PEVudW1UeXBlMj46OnR5cGU7CisgICAgaWYgY29uc3RleHByIChzaXplb2YoSW50VHlwZTEpID4g
c2l6ZW9mKEludFR5cGUyKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEludFR5cGUxPih2
MSkgPT0gc3RhdGljX2Nhc3Q8SW50VHlwZTE+KHYyKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxJbnRUeXBlMj4odjEpID09IHN0YXRpY19jYXN0PEludFR5cGUyPih2Mik7
Cit9CisKK0JpdG1hcDxtYXhOdW1DaGVja3BvaW50VG1wcz4gdG1wTGl2ZW5lc3NGb3JDaGVja3Bv
aW50KGNvbnN0IENvZGVCbG9jayYgY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXgpCit7CisgICAgQml0bWFwPG1heE51bUNoZWNrcG9pbnRUbXBzPiByZXN1bHQ7CisgICAgdWlu
dDhfdCBjaGVja3BvaW50ID0gYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7CisKKyAgICBpZiAo
IWNoZWNrcG9pbnQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBzd2l0Y2ggKGNvZGVC
bG9jay5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS0+b3Bjb2RlSUQoKSkgeworICAg
IGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6Cisg
ICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KGVu
dW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6bWFrZUNhbGwsIE9wVGFpbENh
bGxWYXJhcmdzOjptYWtlQ2FsbCkgJiYgZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChPcENhbGxW
YXJhcmdzOjphcmdDb3VudEluY2x1ZGluZ1RoaXMsIE9wVGFpbENhbGxWYXJhcmdzOjphcmdDb3Vu
dEluY2x1ZGluZ1RoaXMpKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChlbnVtVmFsdWVzRXF1YWxB
c0ludGVncmFsKE9wQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsLCBPcENvbnN0cnVjdFZhcmFyZ3M6Om1h
a2VDYWxsKSAmJiBlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKE9wQ2FsbFZhcmFyZ3M6OmFyZ0Nv
dW50SW5jbHVkaW5nVGhpcywgT3BDb25zdHJ1Y3RWYXJhcmdzOjphcmdDb3VudEluY2x1ZGluZ1Ro
aXMpKTsKKyAgICAgICAgaWYgKGNoZWNrcG9pbnQgPT0gT3BDYWxsVmFyYXJnczo6bWFrZUNhbGwp
CisgICAgICAgICAgICByZXN1bHQuc2V0KE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50SW5jbHVkaW5n
VGhpcyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAppbmRleCA3Mzc5YjNjOWJjNzIz
MjU5MTA5YzYxZTdhZGE1MzNkOWU3ZDJmMmM5Li4zZTVlZGMwYTY4YWU0NGRmNjUxNWNkYmZkNGI0
MjdlZjY5ZWVmMTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5j
bHVkZSAiQnl0ZWNvZGVCYXNpY0Jsb2NrLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVHcmFwaC5oIgog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KICNpbmNsdWRl
IDx3dGYvRmFzdEJpdFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTk3LDYgKzk4LDgg
QEAgcHJpdmF0ZToKICAgICBCeXRlY29kZUdyYXBoIG1fZ3JhcGg7CiB9OwogCitCaXRtYXA8bWF4
TnVtQ2hlY2twb2ludFRtcHM+IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludChjb25zdCBDb2RlQmxv
Y2smLCBCeXRlY29kZUluZGV4KTsKKwogaW5saW5lIGJvb2wgb3BlcmFuZElzQWx3YXlzTGl2ZShp
bnQgb3BlcmFuZCk7CiBpbmxpbmUgYm9vbCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2
ZShjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKTsKIGlubGluZSBib29sIG9w
ZXJhbmRJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAppbmRleCAzZDEyZTE5NWM2OTllZmJmOTYzNmEyYjk3
NGU3OTQ0Y2RhZWQ3MmMwLi5kZTZjYThkYzkxMDliNzg5NjdmMTA1NTAwOWRhMzBlODk5ODQ4Mjgy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKQEAgLTMzLDIyICszMywyMiBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIGJvb2wgb3BlcmFuZElzQWx3YXlzTGl2ZShpbnQg
b3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3RlcklzQWx3YXlzTGl2ZShWaXJ0dWFs
UmVnaXN0ZXIgcmVnKQogewotICAgIHJldHVybiAhVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLmlz
TG9jYWwoKTsKKyAgICByZXR1cm4gIXJlZy5pc0xvY2FsKCk7CiB9CiAKLWlubGluZSBib29sIG9w
ZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwg
aW50IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNOb3RBbHdheXNM
aXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgVmlydHVhbFJlZ2lzdGVyIHJlZykK
IHsKLSAgICB1bnNpZ25lZCBsb2NhbCA9IFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2Fs
KCk7CisgICAgdW5zaWduZWQgbG9jYWwgPSByZWcudG9Mb2NhbCgpOwogICAgIGlmIChsb2NhbCA+
PSBvdXQubnVtQml0cygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIG91dFts
b2NhbF07CiB9CiAKLWlubGluZSBib29sIG9wZXJhbmRJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3Rv
ciYgb3V0LCBpbnQgb3BlcmFuZCkKK2lubGluZSBib29sIHZpcnR1YWxSZWdpc3RlcklzTGl2ZShj
b25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogewotICAg
IHJldHVybiBvcGVyYW5kSXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IG9wZXJhbmRUaGF0SXNOb3RB
bHdheXNMaXZlSXNMaXZlKG91dCwgb3BlcmFuZCk7CisgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3Rl
cklzQWx3YXlzTGl2ZShvcGVyYW5kKSB8fCB2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNOb3RBbHdheXNM
aXZlSXNMaXZlKG91dCwgb3BlcmFuZCk7CiB9CiAKIGlubGluZSBib29sIGlzVmFsaWRSZWdpc3Rl
ckZvckxpdmVuZXNzKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCAzZjMyZmU4N2U0YzBhYzI3MjJkNjk0
YjQxZjE5YmVjNGQ3ZDU5N2QyLi5mMmMzOTgzZjE5OTJlN2IxZTU4MjViMTcwY2I1NDk5ZGNlMTZj
OWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApA
QCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUg
IkJ5dGVjb2RlVXNlRGVmLmgiCiAjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKKyNpbmNsdWRl
ICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja0lubGlu
ZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tTZXQuaCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRp
ZXMuaCIKQEAgLTQwOSw3ICs0MTAsNyBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjbG9uZWRTeW1ib2xUYWJsZS0+bV9sb2Nr
KTsKICAgICAgICAgICAgIGNsb25lZFN5bWJvbFRhYmxlLT5wcmVwYXJlRm9yVHlwZVByb2ZpbGlu
Zyhsb2NrZXIpOwogICAgICAgICB9Ci0gICAgICAgIHJlcGxhY2VDb25zdGFudCh1bmxpbmtlZE1v
ZHVsZVByb2dyYW1Db2RlQmxvY2stPm1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFu
dFJlZ2lzdGVyT2Zmc2V0KCksIGNsb25lZFN5bWJvbFRhYmxlKTsKKyAgICAgICAgcmVwbGFjZUNv
bnN0YW50KFZpcnR1YWxSZWdpc3Rlcih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2stPm1v
ZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0KCkpLCBjbG9u
ZWRTeW1ib2xUYWJsZSk7CiAgICAgfQogCiAgICAgYm9vbCBzaG91bGRVcGRhdGVGdW5jdGlvbkhh
c0V4ZWN1dGVkQ2FjaGUgPSBtX3VubGlua2VkQ29kZS0+d2FzQ29tcGlsZWRXaXRoVHlwZVByb2Zp
bGVyT3Bjb2RlcygpIHx8IG1fdW5saW5rZWRDb2RlLT53YXNDb21waWxlZFdpdGhDb250cm9sRmxv
d1Byb2ZpbGVyT3Bjb2RlcygpOwpAQCAtNjQzLDcgKzY0NCw3IEBAIGJvb2wgQ29kZUJsb2NrOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwg
VW5saW5rCiAgICAgICAgICAgICBpZiAoYnl0ZWNvZGUubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBl
KCkgPT0gTG9jYWxDbG9zdXJlVmFyKSB7CiAgICAgICAgICAgICAgICAgLy8gT25seSBkbyB3YXRj
aGluZyBpZiB0aGUgcHJvcGVydHkgd2UncmUgcHV0dGluZyB0byBpcyBub3QgYW5vbnltb3VzLgog
ICAgICAgICAgICAgICAgIGlmIChieXRlY29kZS5tX3ZhciAhPSBVSU5UX01BWCkgewotICAgICAg
ICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFi
bGUqPihnZXRDb25zdGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlT3JTY29wZURlcHRoLnN5bWJv
bFRhYmxlKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5
bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9z
eW1ib2xUYWJsZU9yU2NvcGVEZXB0aC5zeW1ib2xUYWJsZSgpKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7
CiAgICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3ltYm9sVGFi
bGUtPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IHN5bWJvbFRhYmxl
LT5maW5kKGxvY2tlciwgaWRlbnQuaW1wbCgpKTsKQEAgLTcxMSw4ICs3MTIsNyBAQCBib29sIENv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4
ZWN1dGFibGUsIFVubGluawogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZUJ5dGVjb2RlTG9jYWxseVJlc29sdmVkOiB7Ci0g
ICAgICAgICAgICAgICAgaW50IHN5bWJvbFRhYmxlSW5kZXggPSBieXRlY29kZS5tX3N5bWJvbFRh
YmxlT3JTY29wZURlcHRoLnN5bWJvbFRhYmxlKCkub2Zmc2V0KCk7Ci0gICAgICAgICAgICAgICAg
U3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29uc3Rh
bnQoc3ltYm9sVGFibGVJbmRleCkpOworICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1i
b2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3lt
Ym9sVGFibGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUoKSkpOwogICAgICAgICAgICAgICAgIGNv
bnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29kZS5tX2lkZW50aWZpZXIp
OwogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUt
Pm1fbG9jayk7CiAgICAgICAgICAgICAgICAgLy8gSWYgb3VyIHBhcmVudCBzY29wZSB3YXMgY3Jl
YXRlZCB3aGlsZSBwcm9maWxpbmcgd2FzIGRpc2FibGVkLCBpdCB3aWxsIG5vdCBoYXZlIHByZXBh
cmVkIGZvciBwcm9maWxpbmcgeWV0LgpAQCAtMTA4OCw2ICsxMDg4LDE1IEBAIHN0YXRpYyBib29s
IHNob3VsZE1hcmtUcmFuc2l0aW9uKFZNJiB2bSwgREZHOjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlv
biYgdHJhbnNpdGlvCiAgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CisKK0J5dGVjb2RlSW5kZXgg
Q29kZUJsb2NrOjpieXRlY29kZUluZGV4Rm9yRXhpdChCeXRlY29kZUluZGV4IGV4aXRJbmRleCkg
Y29uc3QKK3sKKyAgICBpZiAoZXhpdEluZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICBjb25z
dCBhdXRvJiBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmF0KGV4aXRJbmRleCk7CisgICAg
ICAgIGV4aXRJbmRleCA9IGluc3RydWN0aW9uLm5leHQoKS5pbmRleCgpOworICAgIH0KKyAgICBy
ZXR1cm4gZXhpdEluZGV4OworfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiB2b2lkIENv
ZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC0xODE0LDEyICsxODIzLDEyIEBAIHZvaWQgQ29kZUJs
b2NrOjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXhTbG93KGNv
bnN0IE9wQ2F0Y2gmCiAgICAgfSk7CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhcmFt
ZXRlcnMoKTsgKytpKQotICAgICAgICBsaXZlT3BlcmFuZHMuYXBwZW5kKHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KGkpKTsKKyAgICAgICAgbGl2ZU9wZXJhbmRzLmFwcGVuZCh2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkpOwogCi0gICAgYXV0byBwcm9maWxlcyA9
IG1ha2VVbmlxdWU8VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcj4obGl2ZU9wZXJhbmRzLnNp
emUoKSk7CisgICAgYXV0byBwcm9maWxlcyA9IG1ha2VVbmlxdWU8VmFsdWVQcm9maWxlQW5kVmly
dHVhbFJlZ2lzdGVyQnVmZmVyPihsaXZlT3BlcmFuZHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FT
U0VSVChwcm9maWxlcy0+bV9zaXplID09IGxpdmVPcGVyYW5kcy5zaXplKCkpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBwcm9maWxlcy0+bV9zaXplOyArK2kpCi0gICAgICAgIHByb2Zp
bGVzLT5tX2J1ZmZlci5nZXQoKVtpXS5tX29wZXJhbmQgPSBsaXZlT3BlcmFuZHNbaV0ub2Zmc2V0
KCk7CisgICAgICAgIHByb2ZpbGVzLT5tX2J1ZmZlci5nZXQoKVtpXS5tX29wZXJhbmQgPSBsaXZl
T3BlcmFuZHNbaV07CiAKICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7CiAKQEAgLTI3
MTgsNyArMjcyNyw3IEBAIHZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVk
aWN0aW9uc0FuZENvdW50TGl2ZW5lc3ModW5zaWduZWQmIG51bWJlCiAKICAgICBpZiAoYXV0byog
cmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7CiAgICAgICAgIGZvciAoYXV0byYgcHJvZmls
ZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmlsZXMpIHsKLSAgICAgICAgICAgIHByb2Zp
bGVCdWNrZXQtPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7
CisgICAgICAgICAgICBwcm9maWxlQnVja2V0LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5k
VmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgICAgICAgICAgcHJvZmlsZS5jb21w
dXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKaW5kZXggMGY5YmJl
YWMyNzYxYTYzZWQ0MDk4ZTIyNWFlOGJlNDY3OGM3ZWNhNy4uNjhmZDAxZmQ5MTRjNWU0MTllYjg4
MzkyNzlmNTdhZjYwYzRkNjYwYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaApAQCAtMTYzLDYgKzE2Myw3IEBAIHB1YmxpYzoKICAgICBpbnQgbnVtQ2FsbGVl
TG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxsZWVMb2NhbHM7IH0KIAogICAgIGludCBu
dW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CisgICAgaW50IG51bVRtcHMoKSBj
b25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+aGFzQ2hlY2twb2ludHMoKSAqIG1heE51bUNo
ZWNrcG9pbnRUbXBzOyB9CiAKICAgICBpbnQqIGFkZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7IHJl
dHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51
bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bVBh
cmFtZXRlcnMpOyB9CkBAIC0yMzEsMjAgKzIzMiwyMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNJ
bnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0OwogICAgIGJvb2wgaW5zdGFsbFZNVHJh
cEJyZWFrcG9pbnRzKCk7CiAKLSAgICBpbmxpbmUgYm9vbCBpc0tub3duTm90SW1tZWRpYXRlKGlu
dCBpbmRleCkKKyAgICBpbmxpbmUgYm9vbCBpc0tub3duTm90SW1tZWRpYXRlKFZpcnR1YWxSZWdp
c3RlciByZWcpCiAgICAgewotICAgICAgICBpZiAoaW5kZXggPT0gdGhpc1JlZ2lzdGVyKCkub2Zm
c2V0KCkgJiYgIWlzU3RyaWN0TW9kZSgpKQorICAgICAgICBpZiAocmVnID09IHRoaXNSZWdpc3Rl
cigpICYmICFpc1N0cmljdE1vZGUoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
ICAgIGlmIChpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpCi0gICAgICAgICAgICByZXR1
cm4gZ2V0Q29uc3RhbnQoaW5kZXgpLmlzQ2VsbCgpOworICAgICAgICBpZiAocmVnLmlzQ29uc3Rh
bnQoKSkKKyAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFudChyZWcpLmlzQ2VsbCgpOwogCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNU
ZW1wb3JhcnlSZWdpc3RlckluZGV4KGludCBpbmRleCkKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wg
aXNUZW1wb3JhcnlSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGluZGV4ID49IG1fbnVtVmFyczsKKyAgICAgICAgcmV0dXJuIHJlZy5vZmZzZXQoKSA+
PSBtX251bVZhcnM7CiAgICAgfQogCiAgICAgSGFuZGxlckluZm8qIGhhbmRsZXJGb3JCeXRlY29k
ZUluZGV4KEJ5dGVjb2RlSW5kZXgsIFJlcXVpcmVkSGFuZGxlciA9IFJlcXVpcmVkSGFuZGxlcjo6
QW55SGFuZGxlcik7CkBAIC01ODMsMTAgKzU4NCw5IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBj
b25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7
IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9Ci0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+
JiBjb25zdGFudFJlZ2lzdGVyKGludCBpbmRleCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVy
c1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQotICAgIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIGJvb2wgaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW50IGluZGV4KSB7IHJldHVy
biBpbmRleCA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQotICAgIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZSBnZXRDb25zdGFudChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3Rh
bnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0uZ2V0KCk7IH0K
LSAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRz
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXhdOyB9CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlciByZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3Rh
bnRJbmRleCgpXTsgfQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0
dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50
b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihWaXJ0dWFsUmVn
aXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbltyZWcudG9Db25zdGFudEluZGV4KCldOyB9CiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNsc1tpbmRleF0u
Z2V0KCk7IH0KICAgICBpbnQgbnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV9mdW5j
dGlvbkRlY2xzLnNpemUoKTsgfQpAQCAtNzc2LDYgKzc3Niw3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgc2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KENvbXBp
bGF0aW9uUmVzdWx0KTsKICAgICAKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXhGb3JF
eGl0KEJ5dGVjb2RlSW5kZXgpIGNvbnN0OwogICAgIHVpbnQzMl90IG9zckV4aXRDb3VudGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9vc3JFeGl0Q291bnRlcjsgfQogCiAgICAgdm9pZCBjb3VudE9TUkV4
aXQoKSB7IG1fb3NyRXhpdENvdW50ZXIrKzsgfQpAQCAtODc2LDcgKzg3Nyw3IEBAIHB1YmxpYzoK
ICAgICAgICAgVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwogICAg
ICAgICBWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAK
LSAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVm
ZmVyPj4gbV9jYXRjaFByb2ZpbGVzOworICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFZh
bHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcj4+IG1fY2F0Y2hQcm9maWxlczsKIAog
ICAgICAgICBEaXJlY3RFdmFsQ29kZUNhY2hlIG1fZGlyZWN0RXZhbENvZGVDYWNoZTsKICAgICB9
OwpAQCAtOTQzLDEwICs5NDQsMTAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2V0Q29uc3RhbnRS
ZWdpc3RlcnMoY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50cywg
Y29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbiwgU2NyaXB0RXhlY3V0YWJsZSogdG9wTGV2ZWxFeGVjdXRhYmxlKTsK
IAotICAgIHZvaWQgcmVwbGFjZUNvbnN0YW50KGludCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSkKKyAg
ICB2b2lkIHJlcGxhY2VDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBKU1ZhbHVlIHZhbHVl
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSAm
JiBzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgp
IDwgbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkpOwotICAgICAgICBtX2NvbnN0YW50UmVnaXN0
ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdLnNldCgqbV92bSwgdGhpcywg
dmFsdWUpOworICAgICAgICBBU1NFUlQocmVnLmlzQ29uc3RhbnQoKSAmJiBzdGF0aWNfY2FzdDxz
aXplX3Q+KHJlZy50b0NvbnN0YW50SW5kZXgoKSkgPCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUo
KSk7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5z
ZXQoKm1fdm0sIHRoaXMsIHZhbHVlKTsKICAgICB9CiAKICAgICBib29sIHNob3VsZFZpc2l0U3Ry
b25nbHkoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVPcmlnaW4uaAppbmRleCAyMTA2ODEzZjBhMWVhYTUxMzRkMGYzOWJkNzUx
YzczMThlYmMwNDMxLi5mOTgyOWEyODZmOGFhYmY0ZDMzMmZmZjFlNzFlYTNjODNmOWJjNjBhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKQEAgLTE2MCw3
ICsxNjAsOSBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgYXBwcm94aW1hdGVIYXNoKElubGluZUNh
bGxGcmFtZSogdGVybWluYWwgPSBudWxscHRyKSBjb25zdDsKIAogICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBGdW5jdGlvbj4KLSAgICB2b2lkIHdhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9u
Jik7CisgICAgdm9pZCB3YWxrVXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlvbiYpIGNvbnN0Owor
CisgICAgaW5saW5lIGJvb2wgaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSBj
b25zdDsKICAgICAKICAgICAvLyBHZXQgdGhlIGlubGluZSBzdGFjay4gVGhpcyBpcyBzbG93LCBh
bmQgaXMgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZyBvbmx5LgogICAgIFZlY3RvcjxDb2RlT3JpZ2lu
PiBpbmxpbmVTdGFjaygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaAppbmRleCBlNGE1NzViMDNhN2QxYjU5OWFk
MGQ1NmNlZGRkYWY0YmEwNTAyZjNhLi40N2M2NTdjOGRmOTAzODNhZjY1ZWI1YzNiOGE4YjA1OTRk
MGM0ZGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5
dGVjb2RlTGl2ZW5lc3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVs
bEJ5dGVjb2RlTGl2ZW5lc3MuaApAQCAtMjYsMTIgKzI2LDE2IEBACiAjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgorI2luY2x1ZGUgIk9wZXJhbmRz
LmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAK
IGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczsKK2NsYXNzIENvZGVCbG9jazsKIAorLy8g
Tm90ZTogRnVsbCBieXRlY29kZSBsaXZlbmVzcyBkb2VzIG5vdCB0cmFjayBhbnkgaW5mb3JtYXRp
b24gYWJvdXQgdGhlIGxpdmVuZXNzIG9mIHRlbXBzLgorLy8gSWYgeW91IHdhbnQgdG1wIGxpdmVu
ZXNzIGZvciBhIGNoZWNrcG9pbnQgYXNrIHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludC4KIGNsYXNz
IEZ1bGxCeXRlY29kZUxpdmVuZXNzIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKQEAgLTQ3LDE1ICs1MSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgb3BlcmFuZElzTGl2ZShpbnQg
b3BlcmFuZCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBMaXZlbmVzc0NhbGN1bGF0aW9u
UG9pbnQgcG9pbnQpIGNvbnN0CisgICAgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJJc0xpdmUoVmlydHVh
bFJlZ2lzdGVyIHJlZywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBMaXZlbmVzc0NhbGN1
bGF0aW9uUG9pbnQgcG9pbnQpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gb3BlcmFuZElz
QWx3YXlzTGl2ZShvcGVyYW5kKSB8fCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShn
ZXRMaXZlbmVzcyhieXRlY29kZUluZGV4LCBwb2ludCksIG9wZXJhbmQpOworICAgICAgICByZXR1
cm4gdmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZlKHJlZykgfHwgdmlydHVhbFJlZ2lzdGVyVGhh
dElzTm90QWx3YXlzTGl2ZUlzTGl2ZShnZXRMaXZlbmVzcyhieXRlY29kZUluZGV4LCBwb2ludCks
IHJlZyk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzOwogICAgIAotICAgIC8vIEZJWE1FOiBVc2UgRmFzdEJpdFZlY3Rvcidz
IHZpZXcgbWVjaGFuc2ltIHRvIG1ha2UgdGhlbSBjb21wYWN0LgorICAgIC8vIEZJWE1FOiBVc2Ug
RmFzdEJpdFZlY3RvcidzIHZpZXcgbWVjaGFuaXNtIHRvIG1ha2UgdGhlbSBjb21wYWN0LgogICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ0Mjc8UGFzdGU+
CiAgICAgVmVjdG9yPEZhc3RCaXRWZWN0b3IsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2Jl
Zm9yZVVzZVZlY3RvcjsKICAgICBWZWN0b3I8RmFzdEJpdFZlY3RvciwgMCwgVW5zYWZlVmVjdG9y
T3ZlcmZsb3c+IG1fYWZ0ZXJVc2VWZWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgKaW5kZXggOTc1MDhiYmYwYzQ1Y2I5N2E0Nzg1MTU5
NzA0MTcxZGRmNmRkMWRhMy4uZTI5ZjM4NGQxZDA2NzJmZWVhMDcxMjA1YmNhYTI4MWE2NDliMjIy
OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxG
cmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJh
bWUuaApAQCAtMTc5LDcgKzE3OSw4IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIFdy
aXRlQmFycmllcjxDb2RlQmxvY2s+IGJhc2VsaW5lQ29kZUJsb2NrOwogICAgIENvZGVPcmlnaW4g
ZGlyZWN0Q2FsbGVyOwogCi0gICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
eyAwIH07IC8vIERvIG5vdCBpbmNsdWRlIGZpeHVwcy4KKyAgICB1bnNpZ25lZCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyA6IDIyOyAvLyBEbyBub3QgaW5jbHVkZSBmaXh1cHMuCisgICAgdW5z
aWduZWQgdG1wT2Zmc2V0IDogMTA7CiAgICAgc2lnbmVkIHN0YWNrT2Zmc2V0IDogMjg7CiAgICAg
dW5zaWduZWQga2luZCA6IDM7IC8vIHJlYWwgdHlwZSBpcyBLaW5kCiAgICAgYm9vbCBpc0Nsb3N1
cmVDYWxsIDogMTsgLy8gSWYgZmFsc2UgdGhlbiB3ZSBrbm93IHRoYXQgY2FsbGVlL3Njb3BlIGFy
ZSBjb25zdGFudHMgYW5kIHRoZSBERkcgd29uJ3QgdHJlYXQgdGhlbSBhcyB2YXJpYWJsZXMsIGku
ZS4gdGhleSBoYXZlIHRvIGJlIHJlY292ZXJlZCBtYW51YWxseS4KQEAgLTE5MSw3ICsxOTIsOSBA
QCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICAvLyBJbmxpbmVDYWxsRnJhbWUncyBmaWVs
ZHMuIFRoaXMgY29uc3RydWN0b3IgaXMgaGVyZSBqdXN0IHRvIHJlZHVjZSBjb25mdXNpb24gaWYK
ICAgICAvLyB3ZSBmb3Jnb3QgdG8gaW5pdGlhbGl6ZSBleHBsaWNpdGx5LgogICAgIElubGluZUNh
bGxGcmFtZSgpCi0gICAgICAgIDogc3RhY2tPZmZzZXQoMCkKKyAgICAgICAgOiBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcygwKQorICAgICAgICAsIHRtcE9mZnNldCgwKQorICAgICAgICAsIHN0
YWNrT2Zmc2V0KDApCiAgICAgICAgICwga2luZChDYWxsKQogICAgICAgICAsIGlzQ2xvc3VyZUNh
bGwoZmFsc2UpCiAgICAgewpAQCAtMjE5LDYgKzIyMiwxMiBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZy
YW1lIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGljX2Nhc3Q8c2lnbmVkPihzdGFja09m
ZnNldCkgPT0gb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lkIHNldFRtcE9mZnNldCh1bnNpZ25l
ZCBvZmZzZXQpCisgICAgeworICAgICAgICB0bXBPZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bXBPZmZzZXQpID09IG9mZnNldCk7
CisgICAgfQorCiAgICAgcHRyZGlmZl90IGNhbGxlckZyYW1lT2Zmc2V0KCkgY29uc3QgeyByZXR1
cm4gc3RhY2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgQ2FsbEZyYW1lOjpjYWxsZXJGcmFt
ZU9mZnNldCgpOyB9CiAgICAgcHRyZGlmZl90IHJldHVyblBDT2Zmc2V0KCkgY29uc3QgeyByZXR1
cm4gc3RhY2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgQ2FsbEZyYW1lOjpyZXR1cm5QQ09m
ZnNldCgpOyB9CiAKQEAgLTI0Nyw5ICsyNTYsOSBAQCBpbmxpbmUgQ29kZUJsb2NrKiBiYXNlbGlu
ZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGNvbnN0IENvZGVPcmlnaQog
ICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9jazsKIH0KIAotLy8gVGhpcyBmdW5jdGlvbiBpcyBk
ZWZpbmVkIGhlcmUgYW5kIG5vdCBpbiBDb2RlT3JpZ2luIGJlY2F1c2UgaXQgbmVlZHMgYWNjZXNz
IHRvIHRoZSBkaXJlY3RDYWxsZXIgZmllbGQgaW4gSW5saW5lQ2FsbEZyYW1lCisvLyBUaGVzZSBm
dW5jdGlvbiBpcyBkZWZpbmVkIGhlcmUgYW5kIG5vdCBpbiBDb2RlT3JpZ2luIGJlY2F1c2UgaXQg
bmVlZHMgYWNjZXNzIHRvIHRoZSBkaXJlY3RDYWxsZXIgZmllbGQgaW4gSW5saW5lQ2FsbEZyYW1l
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+Ci1pbmxpbmUgdm9pZCBDb2RlT3JpZ2luOjp3
YWxrVXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlvbiYgZnVuY3Rpb24pCitpbmxpbmUgdm9pZCBD
b2RlT3JpZ2luOjp3YWxrVXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlvbiYgZnVuY3Rpb24pIGNv
bnN0CiB7CiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gKnRoaXM7CiAgICAgd2hpbGUgKHRy
dWUpIHsKQEAgLTI2MSwxMSArMjcwLDM4IEBAIGlubGluZSB2b2lkIENvZGVPcmlnaW46OndhbGtV
cElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikKICAgICB9CiB9CiAKLUFMV0FZ
U19JTkxJTkUgVmlydHVhbFJlZ2lzdGVyIHJlbWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK2lubGluZSBib29sIENvZGVPcmln
aW46OmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50KCkgY29uc3QKK3sKKyAgICBi
b29sIHJlc3VsdCA9IGZhbHNlOworICAgIHdhbGtVcElubGluZVN0YWNrKFsmXSAoQ29kZU9yaWdp
biBvcmlnaW4pIHsKKyAgICAgICAgaWYgKG9yaWdpbi5ieXRlY29kZUluZGV4KCkuY2hlY2twb2lu
dCgpKQorICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitBTFdBWVNfSU5MSU5FIE9wZXJhbmQgcmVtYXBPcGVyYW5kKElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpCit7CisgICAgaWYgKGlubGlu
ZUNhbGxGcmFtZSkKKyAgICAgICAgcmV0dXJuIG9wZXJhbmQuaXNUbXAoKSA/IE9wZXJhbmQ6OnRt
cChvcGVyYW5kLnZhbHVlKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCkgOiBvcGVyYW5k
LnZpcnR1YWxSZWdpc3RlcigpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKKyAgICBy
ZXR1cm4gb3BlcmFuZDsKK30KKworQUxXQVlTX0lOTElORSBPcGVyYW5kIHJlbWFwT3BlcmFuZChJ
bmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK3sK
KyAgICByZXR1cm4gcmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZChyZWcpKTsK
K30KKworQUxXQVlTX0lOTElORSBPcGVyYW5kIHVubWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZCBvcGVyYW5kKQogewogICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUpCi0gICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIocmVnLm9mZnNldCgpICsgaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCk7Ci0gICAgcmV0dXJuIHJlZzsKKyAgICAgICAgcmV0
dXJuIG9wZXJhbmQuaXNUbXAoKSA/IE9wZXJhbmQ6OnRtcChvcGVyYW5kLnZhbHVlKCkgLSBpbmxp
bmVDYWxsRnJhbWUtPnRtcE9mZnNldCkgOiBPcGVyYW5kKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVy
KCkgLSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKKyAgICByZXR1cm4gb3BlcmFuZDsK
K30KKworQUxXQVlTX0lOTElORSBPcGVyYW5kIHVubWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK3sKKyAgICByZXR1cm4gdW5t
YXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZChyZWcpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9M
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCmluZGV4IGJmYjk0YjM1ZmNkNjM5YTRhMWYxZDAwYzhh
YmIxNDVlYjFjNjRhNTkuLjgxZjVhMGM0ODljNGVmNmRkY2JhNmUxYjQ2MmQ3MmQ5ZTk4NjQ2ZDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZh
bHVlUHJvZmlsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3Bl
cmFuZFZhbHVlUHJvZmlsZS5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgIkNvbmN1cnJlbnRKU0xvY2suaCIKKyNpbmNsdWRlICJPcGVyYW5kcy5oIgogI2luY2x1
ZGUgIlZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC00OSw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogICAgIAotICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGVLZXkoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBPcGVyYW5kIG9wZXJhbmQp
CiAgICAgICAgIDogbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICwgbV9v
cGVyYW5kKG9wZXJhbmQpCiAgICAgewpAQCAtNjksNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9ieXRlY29k
ZUluZGV4Lmhhc2goKSArIG1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICAgICAgcmV0dXJuIG1fYnl0
ZWNvZGVJbmRleC5oYXNoKCkgKyBtX29wZXJhbmQudmFsdWUoKSArIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihtX29wZXJhbmQua2luZCgpKTsKICAgICB9CiAgICAgCiAgICAgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4KCkgY29uc3QKQEAgLTc4LDcgKzc5LDcgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gbV9ieXRlY29kZUluZGV4OwogICAgIH0KIAotICAgIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKCkgY29uc3QKKyAgICBPcGVyYW5kIG9wZXJhbmQoKSBjb25zdAogICAgIHsKICAgICAgICAg
QVNTRVJUKCEhKnRoaXMpOwogICAgICAgICByZXR1cm4gbV9vcGVyYW5kOwpAQCAtOTAsNyArOTEs
NyBAQCBwdWJsaWM6CiAgICAgfQogcHJpdmF0ZTogCiAgICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVj
b2RlSW5kZXg7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICBPcGVyYW5kIG1f
b3BlcmFuZDsKIH07CiAKIHN0cnVjdCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleUhhc2ggewpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCmluZGV4IDJiNjlmMzZjN2ZiZGExMDU1Nzg5ZGZm
ZGU2N2YzOTZmODZlMmI1MDMuLjcwMWMzMzA4OWI5NTZmNzk3ODZlYzg3YWEyYzY5YThiYzA2NzA0
NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKQEAgLTQyLDcgKzQyLDcgQEAgTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpm
cm9tTGF6eU9wZXJhbmQoCiAgICAgcmVzdWx0Lm1fa2luZCA9IExhenlPcGVyYW5kOwogICAgIHJl
c3VsdC51LmxhenlPcGVyYW5kLmNvZGVCbG9jayA9IGNvZGVCbG9jazsKICAgICByZXN1bHQudS5s
YXp5T3BlcmFuZC5ieXRlY29kZU9mZnNldCA9IGtleS5ieXRlY29kZUluZGV4KCk7Ci0gICAgcmVz
dWx0LnUubGF6eU9wZXJhbmQub3BlcmFuZCA9IGtleS5vcGVyYW5kKCkub2Zmc2V0KCk7CisgICAg
cmVzdWx0LnUubGF6eU9wZXJhbmQub3BlcmFuZCA9IGtleS5vcGVyYW5kKCk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIApAQCAtNTcsNyArNTcsNyBAQCB2b2lkIE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGU6OmVtaXRSZXBvcnRWYWx1ZShDQ2FsbEhlbHBlcnMmIGppdCwgSlNWYWx1ZVJlZwog
ICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgTGF6eU9wZXJhbmQ6IHsKLSAgICAg
ICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNvZGVP
ZmZzZXQsIFZpcnR1YWxSZWdpc3Rlcih1LmxhenlPcGVyYW5kLm9wZXJhbmQpKTsKKyAgICAgICAg
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNvZGVPZmZz
ZXQsIHUubGF6eU9wZXJhbmQub3BlcmFuZCk7CiAgICAgICAgIAogICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKHUubGF6eU9wZXJhbmQuY29kZUJsb2NrLT5tX2xvY2spOwogICAgICAg
ICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9CkBAIC05MSw3ICs5MSw3IEBAIHZv
aWQgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6cmVwb3J0VmFsdWUoSlNWYWx1ZSB2YWx1
ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBMYXp5T3BlcmFuZDogewotICAgICAgICBM
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkodS5sYXp5T3BlcmFuZC5ieXRlY29kZU9mZnNl
dCwgVmlydHVhbFJlZ2lzdGVyKHUubGF6eU9wZXJhbmQub3BlcmFuZCkpOworICAgICAgICBMYXp5
T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkodS5sYXp5T3BlcmFuZC5ieXRlY29kZU9mZnNldCwg
dS5sYXp5T3BlcmFuZC5vcGVyYW5kKTsKIAogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKHUubGF6eU9wZXJhbmQuY29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICBMYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaAppbmRleCA1
N2I0YjE3NzJmMDRmYmRmMzM2ODUwNTQzNjU3YzE1ZDljNDFkYjRlLi5lOGI2NWVhZDQ2ZTQ3NTA1
MzVjZDBhOWRiZjgwYWUzOWIwYjRhMWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgKQEAg
LTEwNyw3ICsxMDcsNyBAQCBwcml2YXRlOgogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2s7CiAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
T2Zmc2V0OwotICAgICAgICAgICAgaW50IG9wZXJhbmQ7CisgICAgICAgICAgICBPcGVyYW5kIG9w
ZXJhbmQ7CiAgICAgICAgIH0gbGF6eU9wZXJhbmQ7CiAgICAgfSB1OwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKaW5kZXggZjI5ZmY5Zjk3MzZhZWIzNzM0NTk0
NDZkYzc0Y2QxMjAyNzU2MjU3Ni4uYWNlZmY1Nzk4NzEwMmRmYTY0MmE3YzZmMTc5NzQzNjI3ODkz
ZDdjNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
NSwxMTEgKzM1LDIyNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IE9wZXJhbmRWYWx1ZVRyYWl0czsKIAotZW51bSBPcGVyYW5kS2luZCB7IEFyZ3VtZW50
T3BlcmFuZCwgTG9jYWxPcGVyYW5kIH07Citjb25zdGV4cHIgdW5zaWduZWQgbWF4TnVtQ2hlY2tw
b2ludFRtcHMgPSA0OworCisvLyBBIE9wZXJhbmRLaW5kOjpUbXAgaXMgb25lIHRoYXQgZXhpc3Rz
IGZvciBleGl0aW5nIHRvIGEgY2hlY2twb2ludCBidXQgZG9lcyBub3QgZXhpc3QgYmV0d2VlbiBi
eXRlY29kZXMuCitlbnVtIGNsYXNzIE9wZXJhbmRLaW5kIHsgQXJndW1lbnQsIExvY2FsLCBUbXAg
fTsKKworY2xhc3MgT3BlcmFuZCB7CitwdWJsaWM6CisgICAgT3BlcmFuZCgpID0gZGVmYXVsdDsK
KyAgICBPcGVyYW5kKGNvbnN0IE9wZXJhbmQmKSA9IGRlZmF1bHQ7CisKKyAgICBPcGVyYW5kKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICA6IG1fa2luZChvcGVyYW5kLmlzTG9jYWwo
KSA/IE9wZXJhbmRLaW5kOjpMb2NhbCA6IE9wZXJhbmRLaW5kOjpBcmd1bWVudCkKKyAgICAgICAg
LCBtX29wZXJhbmQob3BlcmFuZC5vZmZzZXQoKSkKKyAgICB7IH0KKworICAgIE9wZXJhbmQoT3Bl
cmFuZEtpbmQga2luZCwgaW50IG9wZXJhbmQpCisgICAgICAgIDogbV9raW5kKGtpbmQpCisgICAg
ICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCisgICAgeyAKKyAgICAgICAgQVNTRVJUKGtpbmQgPT0g
T3BlcmFuZEtpbmQ6OlRtcCB8fCBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkuaXNMb2NhbCgpID09
IChraW5kID09IE9wZXJhbmRLaW5kOjpMb2NhbCkpOworICAgIH0KKyAgICBzdGF0aWMgT3BlcmFu
ZCB0bXAodWludDMyX3QgaW5kZXgpIHsgcmV0dXJuIE9wZXJhbmQoT3BlcmFuZEtpbmQ6OlRtcCwg
aW5kZXgpOyB9CisKKyAgICBPcGVyYW5kS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5k
OyB9CisgICAgaW50IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYW5kOyB9CisgICAgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQobV9raW5kICE9IE9wZXJhbmRLaW5kOjpUbXApOworICAgICAgICByZXR1cm4gVmlydHVhbFJl
Z2lzdGVyKG1fb3BlcmFuZCk7CisgICAgfQorICAgIHVpbnQ2NF90IGFzQml0cygpIGNvbnN0IHsg
cmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oKnRoaXMpOyB9CisgICAgc3RhdGljIE9wZXJh
bmQgZnJvbUJpdHModWludDY0X3QgdmFsdWUpOworCisgICAgYm9vbCBpc1RtcCgpIGNvbnN0IHsg
cmV0dXJuIGtpbmQoKSA9PSBPcGVyYW5kS2luZDo6VG1wOyB9CisgICAgYm9vbCBpc0FyZ3VtZW50
KCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IE9wZXJhbmRLaW5kOjpBcmd1bWVudDsgfQorICAg
IGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBPcGVyYW5kS2luZDo6TG9j
YWwgJiYgdmlydHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgpOyB9CisgICAgYm9vbCBpc0hlYWRlcigp
IGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBPcGVyYW5kS2luZDo6VG1wICYmIHZpcnR1YWxSZWdp
c3RlcigpLmlzSGVhZGVyKCk7IH0KKyAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVy
biBraW5kKCkgIT0gT3BlcmFuZEtpbmQ6OlRtcCAmJiB2aXJ0dWFsUmVnaXN0ZXIoKS5pc0NvbnN0
YW50KCk7IH0KKworICAgIGludCB0b0FyZ3VtZW50KCkgY29uc3QgeyBBU1NFUlQoaXNBcmd1bWVu
dCgpKTsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcigpLnRvQXJndW1lbnQoKTsgfQorICAgIGludCB0
b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNMb2NhbCgpKTsgcmV0dXJuIHZpcnR1YWxSZWdpc3Rl
cigpLnRvTG9jYWwoKTsgfQorCisgICAgaW5saW5lIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworCisg
ICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPcGVyYW5kJikgY29uc3Q7CisKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBPcGVyYW5kS2lu
ZCBtX2tpbmQgeyBPcGVyYW5kS2luZDo6QXJndW1lbnQgfTsKKyAgICBpbnQgbV9vcGVyYW5kIHsg
VmlydHVhbFJlZ2lzdGVyOjppbnZhbGlkVmlydHVhbFJlZ2lzdGVyIH07Cit9OworCitBTFdBWVNf
SU5MSU5FIGJvb2wgT3BlcmFuZDo6b3BlcmF0b3I9PShjb25zdCBPcGVyYW5kJiBvdGhlcikgY29u
c3QKK3sKKyAgICBpZiAoa2luZCgpICE9IG90aGVyLmtpbmQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChpc1RtcCgpKQorICAgICAgICByZXR1cm4gdmFsdWUoKSA9PSBvdGhlci52
YWx1ZSgpOworICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXIoKSA9PSBvdGhlci52aXJ0dWFsUmVn
aXN0ZXIoKTsKK30KKworaW5saW5lIGJvb2wgT3BlcmFuZDo6aXNWYWxpZCgpIGNvbnN0Cit7Cisg
ICAgaWYgKGlzVG1wKCkpCisgICAgICAgIHJldHVybiB2YWx1ZSgpID49IDA7CisgICAgcmV0dXJu
IHZpcnR1YWxSZWdpc3RlcigpLmlzVmFsaWQoKTsKK30KKworaW5saW5lIE9wZXJhbmQgT3BlcmFu
ZDo6ZnJvbUJpdHModWludDY0X3QgdmFsdWUpCit7CisgICAgT3BlcmFuZCByZXN1bHQgPSBiaXR3
aXNlX2Nhc3Q8T3BlcmFuZD4odmFsdWUpOworICAgIEFTU0VSVChyZXN1bHQuaXNWYWxpZCgpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWNfYXNzZXJ0KHNpemVvZihPcGVyYW5kKSA9
PSBzaXplb2YodWludDY0X3QpLCAiT3BlcmFuZDo6YXNCaXRzKCkgcmVsaWVzIG9uIHRoaXMuIik7
CiAKIGVudW0gT3BlcmFuZHNMaWtlVGFnIHsgT3BlcmFuZHNMaWtlIH07CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CiBjbGFzcyBPcGVyYW5kcyB7CiBwdWJsaWM6Ci0gICAgT3BlcmFuZHMoKQotICAg
ICAgICA6IG1fbnVtQXJndW1lbnRzKDApIHsgfQotICAgIAotICAgIGV4cGxpY2l0IE9wZXJhbmRz
KHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMpCisgICAgdXNpbmcgU3RvcmFn
ZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgRmFzdEJpdFZl
Y3RvciwgVmVjdG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93Pj47CisgICAgdXNpbmcgUmVm
VHlwZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgRmFzdEJp
dFJlZmVyZW5jZSwgVCY+OworICAgIHVzaW5nIENvbnN0UmVmVHlwZSA9IHN0ZDo6Y29uZGl0aW9u
YWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgYm9vbCwgY29uc3QgVCY+OworCisgICAgT3Bl
cmFuZHMoKSA9IGRlZmF1bHQ7CisKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJn
dW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcykKICAgICAgICAgOiBtX251
bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCisgICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxz
KQogICAgIHsKLSAgICAgICAgaWYgKFdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxp
emF0aW9uKSB7Ci0gICAgICAgICAgICBtX3ZhbHVlcy5yZXNpemUobnVtQXJndW1lbnRzICsgbnVt
TG9jYWxzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fdmFsdWVzLmZpbGwoVCgp
LCBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMpOwotICAgICAgICB9CisgICAgICAgIHNpemVfdCBz
aXplID0gbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtVG1wczsKKyAgICAgICAgbV92YWx1
ZXMuZ3JvdyhzaXplKTsKKyAgICAgICAgaWYgKCFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJ
bml0aWFsaXphdGlvbikKKyAgICAgICAgICAgIG1fdmFsdWVzLmZpbGwoVCgpKTsKICAgICB9CiAK
LSAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9j
YWxzLCBjb25zdCBUJiBpbml0aWFsVmFsdWUpCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90
IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2Fscywgc2l6ZV90IG51bVRtcHMsIGNvbnN0IFQm
IGluaXRpYWxWYWx1ZSkKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCisg
ICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMu
ZmlsbChpbml0aWFsVmFsdWUsIG51bUFyZ3VtZW50cyArIG51bUxvY2Fscyk7CisgICAgICAgIG1f
dmFsdWVzLmdyb3cobnVtQXJndW1lbnRzICsgbnVtTG9jYWxzICsgbnVtVG1wcyk7CisgICAgICAg
IG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4KLSAgICBleHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5kc0xpa2VUYWcsIGNvbnN0
IE9wZXJhbmRzPFU+JiBvdGhlcikKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5kc0xpa2VU
YWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhlciwgY29uc3QgVCYgaW5pdGlhbFZhbHVlID0gVCgp
KQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkpCisg
ICAgICAgICwgbV9udW1Mb2NhbHMob3RoZXIubnVtYmVyT2ZMb2NhbHMoKSkKICAgICB7Ci0gICAg
ICAgIG1fdmFsdWVzLmZpbGwoVCgpLCBvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpICsgb3RoZXIu
bnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgpKTsK
KyAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwogICAgIH0KLSAgICAKKwogICAg
IHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJndW1lbnRz
OyB9Ci0gICAgc2l6ZV90IG51bWJlck9mTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMu
c2l6ZSgpIC0gbV9udW1Bcmd1bWVudHM7IH0KLSAgICAKKyAgICBzaXplX3QgbnVtYmVyT2ZMb2Nh
bHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQorICAgIHNpemVfdCBudW1iZXJPZlRt
cHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBudW1iZXJPZkFyZ3VtZW50cygp
IC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQorCisgICAgc2l6ZV90IHRtcEluZGV4KHNpemVfdCBpZHgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZUbXBzKCkpOworICAg
ICAgICByZXR1cm4gaWR4ICsgbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7
CisgICAgfQogICAgIHNpemVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAg
ewotICAgICAgICBBU1NFUlQoaWR4IDwgbV9udW1Bcmd1bWVudHMpOworICAgICAgICBBU1NFUlQo
aWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgICAgIHJldHVybiBpZHg7CiAgICAgfQog
ICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gbV9udW1Bcmd1bWVudHMgKyBpZHg7CisgICAgICAgIEFTU0VSVChpZHggPCBu
dW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBp
ZHg7CiAgICAgfQorCisgICAgUmVmVHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1
ZXNbdG1wSW5kZXgoaWR4KV07IH0KKyAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWVzW3RtcEluZGV4KGlkeCldOyB9CiAgICAgCi0gICAgVCYgYXJn
dW1lbnQoc2l6ZV90IGlkeCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlc1thcmd1bWVu
dEluZGV4KGlkeCldOwotICAgIH0KLSAgICBjb25zdCBUJiBhcmd1bWVudChzaXplX3QgaWR4KSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07
Ci0gICAgfQorICAgIFJlZlR5cGUgYXJndW1lbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1
ZXNbYXJndW1lbnRJbmRleChpZHgpXTsgfQorICAgIENvbnN0UmVmVHlwZSBhcmd1bWVudChzaXpl
X3QgaWR4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9CiAg
ICAgCi0gICAgVCYgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRl
eChpZHgpXTsgfQotICAgIGNvbnN0IFQmIGxvY2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KKyAgICBSZWZUeXBlIGxvY2FsKHNpemVfdCBp
ZHgpIHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KKyAgICBDb25zdFJlZlR5
cGUgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChp
ZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAg
IHNpemVfdCBzaXplRm9yKCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kS2luZCA9
PSBBcmd1bWVudE9wZXJhbmQpCisgICAgICAgIHN3aXRjaCAob3BlcmFuZEtpbmQpIHsKKyAgICAg
ICAgY2FzZSBPcGVyYW5kS2luZDo6VG1wOgorICAgICAgICAgICAgcmV0dXJuIG51bWJlck9mVG1w
cygpOworICAgICAgICBjYXNlIE9wZXJhbmRLaW5kOjpBcmd1bWVudDoKICAgICAgICAgICAgIHJl
dHVybiBudW1iZXJPZkFyZ3VtZW50cygpOwotICAgICAgICByZXR1cm4gbnVtYmVyT2ZMb2NhbHMo
KTsKKyAgICAgICAgY2FzZSBPcGVyYW5kS2luZDo6TG9jYWw6CisgICAgICAgICAgICByZXR1cm4g
bnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgdGVtcGxhdGU8T3BlcmFu
ZEtpbmQgb3BlcmFuZEtpbmQ+Ci0gICAgVCYgYXRGb3Ioc2l6ZV90IGlkeCkKKyAgICBSZWZUeXBl
IGF0Rm9yKHNpemVfdCBpZHgpCiAgICAgewotICAgICAgICBpZiAob3BlcmFuZEtpbmQgPT0gQXJn
dW1lbnRPcGVyYW5kKQorICAgICAgICBzd2l0Y2ggKG9wZXJhbmRLaW5kKSB7CisgICAgICAgIGNh
c2UgT3BlcmFuZEtpbmQ6OlRtcDoKKyAgICAgICAgICAgIHJldHVybiB0bXAoaWR4KTsKKyAgICAg
ICAgY2FzZSBPcGVyYW5kS2luZDo6QXJndW1lbnQ6CiAgICAgICAgICAgICByZXR1cm4gYXJndW1l
bnQoaWR4KTsKLSAgICAgICAgcmV0dXJuIGxvY2FsKGlkeCk7CisgICAgICAgIGNhc2UgT3BlcmFu
ZEtpbmQ6OkxvY2FsOgorICAgICAgICAgICAgcmV0dXJuIGxvY2FsKGlkeCk7CisgICAgICAgIH0K
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHRt
cCgwKTsKICAgICB9CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+Ci0gICAg
Y29uc3QgVCYgYXRGb3Ioc2l6ZV90IGlkeCkgY29uc3QKKyAgICBDb25zdFJlZlR5cGUgYXRGb3Io
c2l6ZV90IGlkeCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1
bWVudE9wZXJhbmQpCisgICAgICAgIHN3aXRjaCAob3BlcmFuZEtpbmQpIHsKKyAgICAgICAgY2Fz
ZSBPcGVyYW5kS2luZDo6VG1wOgorICAgICAgICAgICAgcmV0dXJuIHRtcChpZHgpOworICAgICAg
ICBjYXNlIE9wZXJhbmRLaW5kOjpBcmd1bWVudDoKICAgICAgICAgICAgIHJldHVybiBhcmd1bWVu
dChpZHgpOwotICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAgICAgY2FzZSBPcGVyYW5k
S2luZDo6TG9jYWw6CisgICAgICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICAgICAgfQor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gdG1w
KDApOwogICAgIH0KLSAgICAKLSAgICB2b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSkKKwor
ICAgIHZvaWQgZW5zdXJlTG9jYWxzKHNpemVfdCBzaXplLCBjb25zdCBUJiBlbnN1cmVkVmFsdWUg
PSBUKCkpCiAgICAgewotICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsK
LSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBtX251bUFyZ3VtZW50cyArIHNpemU7Ci0gICAgICAg
IGlmIChuZXdTaXplIDw9IG9sZFNpemUpCisgICAgICAgIGlmIChzaXplIDw9IG51bWJlck9mTG9j
YWxzKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBu
dW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOworICAgICAgICBzaXpl
X3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgc2l6ZV90IG9sZE51
bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXplKTsK
LSAgICAgICAgaWYgKCFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikg
ewotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX3ZhbHVlcy5zaXpl
KCk7ICsraSkKLSAgICAgICAgICAgICAgICBtX3ZhbHVlc1tpXSA9IFQoKTsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBvbGROdW1UbXBzOyArK2kpCisgICAgICAgICAgICBtX3ZhbHVl
c1tuZXdTaXplIC0gMSAtIGldID0gbV92YWx1ZXNbdG1wSW5kZXgob2xkTnVtVG1wcyAtIDEgLSBp
KV07CisKKyAgICAgICAgbV9udW1Mb2NhbHMgPSBzaXplOworICAgICAgICBpZiAoZW5zdXJlZFZh
bHVlICE9IFQoKSB8fCAhV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24p
IHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSAtIG9sZE51bUxvY2Fs
czsgKytpKQorICAgICAgICAgICAgICAgIG1fdmFsdWVzW2xvY2FsSW5kZXgob2xkTnVtTG9jYWxz
ICsgaSldID0gZW5zdXJlZFZhbHVlOwogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBlbnN1
cmVMb2NhbHMoc2l6ZV90IHNpemUsIGNvbnN0IFQmIGVuc3VyZWRWYWx1ZSkKKyAgICB2b2lkIGVu
c3VyZVRtcHMoc2l6ZV90IHNpemUsIGNvbnN0IFQmIGVuc3VyZWRWYWx1ZSA9IFQoKSkKICAgICB7
Ci0gICAgICAgIHNpemVfdCBvbGRTaXplID0gbV92YWx1ZXMuc2l6ZSgpOwotICAgICAgICBzaXpl
X3QgbmV3U2l6ZSA9IG1fbnVtQXJndW1lbnRzICsgc2l6ZTsKLSAgICAgICAgaWYgKG5ld1NpemUg
PD0gb2xkU2l6ZSkKKyAgICAgICAgaWYgKHNpemUgPD0gbnVtYmVyT2ZUbXBzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKKyAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7
CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9m
TG9jYWxzKCkgKyBzaXplOwogICAgICAgICBtX3ZhbHVlcy5ncm93KG5ld1NpemUpOwotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG1fdmFsdWVzLnNpemUoKTsgKytpKQotICAg
ICAgICAgICAgbV92YWx1ZXNbaV0gPSBlbnN1cmVkVmFsdWU7CisKKyAgICAgICAgaWYgKGVuc3Vy
ZWRWYWx1ZSAhPSBUKCkgfHwgIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0
aW9uKSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG5ld1NpemU7
ICsraSkKKyAgICAgICAgICAgICAgICBtX3ZhbHVlc1tpXSA9IGVuc3VyZWRWYWx1ZTsKKyAgICAg
ICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIHNldExvY2FsKHNpemVfdCBpZHgsIGNvbnN0IFQm
IHZhbHVlKQpAQCAtMTY0LDg0ICsyODAsNzYgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoaWR4
ID49IG51bWJlck9mTG9jYWxzKCkgfHwgbG9jYWwoaWR4KSA9PSBUKCkpOwogICAgICAgICBzZXRM
b2NhbChpZHgsIHZhbHVlKTsKICAgICB9Ci0gICAgCi0gICAgc2l6ZV90IG9wZXJhbmRJbmRleChp
bnQgb3BlcmFuZCkgY29uc3QKKworICAgIFJlZlR5cGUgZ2V0Rm9yT3BlcmFuZEluZGV4KHNpemVf
dCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgQ29uc3RSZWZUeXBlIGdl
dEZvck9wZXJhbmRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8
T3BlcmFuZHMqPih0aGlzKS0+Z2V0Rm9yT3BlcmFuZEluZGV4KGluZGV4KTsgfQorCisgICAgc2l6
ZV90IG9wZXJhbmRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKLSAgICAgICAgICAgIHJldHVy
biBhcmd1bWVudEluZGV4KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0FyZ3VtZW50KCkpOwot
ICAgICAgICByZXR1cm4gbG9jYWxJbmRleChWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2Nh
bCgpKTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgcmV0
dXJuIGFyZ3VtZW50SW5kZXgob3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICByZXR1cm4g
bG9jYWxJbmRleChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogICAgIAotICAgIHNpemVfdCBv
cGVyYW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikgY29uc3QKKyAgICBz
aXplX3Qgb3BlcmFuZEluZGV4KE9wZXJhbmQgb3ApIGNvbnN0CiAgICAgewotICAgICAgICByZXR1
cm4gb3BlcmFuZEluZGV4KHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSk7CisgICAgICAgIGlmICgh
b3AuaXNUbXAoKSkKKyAgICAgICAgICAgIHJldHVybiBvcGVyYW5kSW5kZXgob3AudmlydHVhbFJl
Z2lzdGVyKCkpOworICAgICAgICByZXR1cm4gdG1wSW5kZXgob3AudmFsdWUoKSk7CiAgICAgfQog
ICAgIAotICAgIFQmIG9wZXJhbmQoaW50IG9wZXJhbmQpCisgICAgUmVmVHlwZSBvcGVyYW5kKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3Vt
ZW50KG9wZXJhbmQpKQotICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KFZpcnR1YWxSZWdpc3Rl
cihvcGVyYW5kKS50b0FyZ3VtZW50KCkpOwotICAgICAgICByZXR1cm4gbG9jYWwoVmlydHVhbFJl
Z2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKSk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1l
bnQoKSkKKyAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChvcGVyYW5kLnRvQXJndW1lbnQoKSk7
CisgICAgICAgIHJldHVybiBsb2NhbChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogCi0gICAg
VCYgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQorICAgIFJlZlR5cGUg
b3BlcmFuZChPcGVyYW5kIG9wKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wZXJhbmQodmlydHVh
bFJlZ2lzdGVyLm9mZnNldCgpKTsKKyAgICAgICAgaWYgKCFvcC5pc1RtcCgpKQorICAgICAgICAg
ICAgcmV0dXJuIG9wZXJhbmQob3AudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICByZXR1cm4g
dG1wKG9wLnZhbHVlKCkpOwogICAgIH0KIAotICAgIGNvbnN0IFQmIG9wZXJhbmQoaW50IG9wZXJh
bmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29uc3QgVCY+KGNvbnN0X2Nhc3Q8T3BlcmFu
ZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKSk7IH0KLSAgICBjb25zdCBUJiBvcGVyYW5kKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PGNvbnN0IFQm
Pihjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCkpOyB9CisgICAg
Q29uc3RSZWZUeXBlIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0IHsgcmV0
dXJuIGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKTsgfQorICAg
IENvbnN0UmVmVHlwZSBvcGVyYW5kKE9wZXJhbmQgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29u
c3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQpOyB9CiAgICAgCi0gICAg
Ym9vbCBoYXNPcGVyYW5kKGludCBvcGVyYW5kKSBjb25zdAorICAgIGJvb2wgaGFzT3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5k
SXNBcmd1bWVudChvcGVyYW5kKSkKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXpl
X3Q+KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMo
KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3BlcmFuZC50b0xvY2FsKCkp
IDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9Ci0gICAgYm9vbCBoYXNPcGVyYW5kKFZpcnR1YWxS
ZWdpc3RlciByZWcpIGNvbnN0CisgICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0
CiAgICAgewotICAgICAgICByZXR1cm4gaGFzT3BlcmFuZChyZWcub2Zmc2V0KCkpOworICAgICAg
ICBpZiAob3AuaXNUbXAoKSkgeworICAgICAgICAgICAgQVNTRVJUKG9wLnZhbHVlKCkgPj0gMCk7
CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcC52YWx1ZSgpKSA8IG51
bWJlck9mVG1wcygpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBoYXNPcGVyYW5kKG9wLnZp
cnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRPcGVyYW5kKGludCBv
cGVyYW5kLCBjb25zdCBUJiB2YWx1ZSkKKyAgICB2b2lkIHNldE9wZXJhbmQoT3BlcmFuZCBvcGVy
YW5kLCBjb25zdCBUJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIHRoaXMtPm9wZXJhbmQob3BlcmFu
ZCkgPSB2YWx1ZTsKICAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRPcGVyYW5kKFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIsIGNvbnN0IFQmIHZhbHVlKQotICAgIHsKLSAgICAgICAgc2V0
T3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCksIHZhbHVlKTsKLSAgICB9CiAKICAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQotICAgIGNvbnN0
IFQmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9Ci0g
ICAgVCYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KLSAgICBj
b25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgp
OyB9Ci0gICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGF0KGluZGV4KTsg
fQotCi0gICAgYm9vbCBpc0FyZ3VtZW50KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5k
ZXggPCBtX251bUFyZ3VtZW50czsgfQotICAgIGJvb2wgaXNMb2NhbChzaXplX3QgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuICFpc0FyZ3VtZW50KGluZGV4KTsgfQotICAgIGludCBvcGVyYW5kRm9ySW5k
ZXgoc2l6ZV90IGluZGV4KSBjb25zdAorICAgIENvbnN0UmVmVHlwZSBhdChzaXplX3QgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIFJlZlR5cGUgYXQoc2l6ZV90
IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBDb25zdFJlZlR5cGUgb3Bl
cmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIFJl
ZlR5cGUgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisg
ICAgT3BlcmFuZCBvcGVyYW5kRm9ySW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAogICAgIHsKICAg
ICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSkKLSAgICAgICAgICAgIHJldHVy
biB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCkub2Zmc2V0KCk7Ci0gICAgICAgIHJl
dHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG51bWJlck9mQXJndW1lbnRzKCkp
Lm9mZnNldCgpOwotICAgIH0KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9y
SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxS
ZWdpc3RlcihvcGVyYW5kRm9ySW5kZXgoaW5kZXgpKTsKKyAgICAgICAgICAgIHJldHVybiB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaW5kZXgpOworICAgICAgICBlbHNl
IGlmIChpbmRleCA8IG51bWJlck9mTG9jYWxzKCkgKyBudW1iZXJPZkFyZ3VtZW50cygpKQorICAg
ICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4IC0gbnVtYmVyT2ZB
cmd1bWVudHMoKSk7CisgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAoaW5kZXggLSAobnVtYmVy
T2ZMb2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpKTsKICAgICB9Ci0gICAgCi0gICAgdm9p
ZCBzZXRPcGVyYW5kRmlyc3RUaW1lKGludCBvcGVyYW5kLCBjb25zdCBUJiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgewotICAgICAgICAgICAg
c2V0QXJndW1lbnRGaXJzdFRpbWUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvQXJndW1lbnQo
KSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBzZXRMb2NhbEZpcnN0VGltZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgp
LCB2YWx1ZSk7Ci0gICAgfQotICAgIAorCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCiAgICAgewog
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFsdWVzLnNpemUoKTsgKytpKQpAQCAt
MjU3LDYgKzM2NSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChudW1iZXJPZkFy
Z3VtZW50cygpID09IG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkpOwogICAgICAgICBBU1NFUlQo
bnVtYmVyT2ZMb2NhbHMoKSA9PSBvdGhlci5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgQVNT
RVJUKG51bWJlck9mVG1wcygpID09IG90aGVyLm51bWJlck9mVG1wcygpKTsKICAgICAgICAgCiAg
ICAgICAgIHJldHVybiBtX3ZhbHVlcyA9PSBvdGhlci5tX3ZhbHVlczsKICAgICB9CkBAIC0yNjUs
OSArMzc0LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3Q7CiAgICAgCiBwcml2YXRlOgotICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBt
X3ZhbHVlcyBhcmUgYXJndW1lbnRzLCB0aGUgcmVzdCBhcmUgbG9jYWxzLgotICAgIFZlY3RvcjxU
LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV92YWx1ZXM7Ci0gICAgdW5zaWduZWQgbV9udW1B
cmd1bWVudHM7CisgICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFy
ZSBhcmd1bWVudHMsIHRoZSBuZXh0IG1fbnVtTG9jYWxzIGFyZSBsb2NhbHMsIGFuZCB0aGUgcmVz
dCBhcmUgdG1wcy4KKyAgICBTdG9yYWdlIG1fdmFsdWVzOworICAgIHVuc2lnbmVkIG1fbnVtQXJn
dW1lbnRzIHsgMCB9OworICAgIHVuc2lnbmVkIG1fbnVtTG9jYWxzIHsgMCB9OwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHNJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bl
cmFuZHNJbmxpbmVzLmgKaW5kZXggNjVmZWRkYTA3MzBhODM5MWY4MzE1NjNkYmRlYjgxNmFmOTI1
NjZmZC4uMGIxY2MxZjJkMTk3YWQwODM2NWE4Zjc4NTYxZmRmNjdhN2Q5ZWRkZCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaApAQCAtMzAs
NiArMzAsMTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2lubGluZSB2b2lkIE9wZXJhbmQ6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoaXNUbXAoKSkKKyAgICAgICAg
b3V0LnByaW50KCJ0bXAiLCB2YWx1ZSgpKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludCh2
aXJ0dWFsUmVnaXN0ZXIoKSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIE9wZXJh
bmRzPFQ+OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250
ZXh0KSBjb25zdAogewpAQCAtNDQsNiArNTIsMTEgQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVtcElu
Q29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJsb2MiLCBsb2Nh
bEluZGV4LCAiOiIsIGluQ29udGV4dChsb2NhbChsb2NhbEluZGV4KSwgY29udGV4dCkpOwogICAg
IH0KKyAgICBmb3IgKHNpemVfdCB0bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbnVtYmVyT2ZUbXBz
KCk7ICsrdG1wSW5kZXgpIHsKKyAgICAgICAgaWYgKCF0bXAodG1wSW5kZXgpKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRtcEluZGV4LCAi
OiIsIGluQ29udGV4dCh0bXAodG1wSW5kZXgpLCBjb250ZXh0KSk7CisgICAgfQogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgpAQCAtNjAsNiArNzMsMTEgQEAgdm9pZCBPcGVyYW5kczxUPjo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IG91dC5wcmludChjb21tYSwgImxvYyIsIGxvY2FsSW5kZXgsICI6IiwgbG9jYWwobG9jYWxJbmRl
eCkpOwogICAgIH0KKyAgICBmb3IgKHNpemVfdCB0bXBJbmRleCA9IDA7IHRtcEluZGV4IDwgbnVt
YmVyT2ZUbXBzKCk7ICsrdG1wSW5kZXgpIHsKKyAgICAgICAgaWYgKCF0bXAodG1wSW5kZXgpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG91dC5wcmludChjb21tYSwgInRtcCIsIHRt
cEluZGV4LCAiOiIsIHRtcCh0bXBJbmRleCkpOworICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmNwcAppbmRleCAyMDk5M2UyMTJkMmNkNjhiNDFhZmNiZDBkZmI2ODYwMzJkMWNkZGIz
Li5kZGI0MTIxMTkxZmFmN2I0MjE1MzFlOGUyZTA1MjAyNWE2MTI3ZTM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKQEAg
LTcyLDYgKzcyLDcgQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGUKICAgICAsIG1fY29kZVR5cGUo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVUeXBlKSkKICAgICAsIG1fZGlkT3B0aW1pemUoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KE1peGVkVHJpU3RhdGUpKQogICAgICwgbV9hZ2UoMCkKKyAgICAs
IG1faGFzQ2hlY2twb2ludHMoZmFsc2UpCiAgICAgLCBtX3BhcnNlTW9kZShpbmZvLnBhcnNlTW9k
ZSgpKQogICAgICwgbV9jb2RlR2VuZXJhdGlvbk1vZGUoY29kZUdlbmVyYXRpb25Nb2RlKQogICAg
ICwgbV9tZXRhZGF0YShVbmxpbmtlZE1ldGFkYXRhVGFibGU6OmNyZWF0ZSgpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAppbmRleCAz
ZDlmYjNjNTdkNWYzZDRlMmFlZGNiMWUzNTY3YTc0YjhjNzEzYzJiLi4zMTkyMTcwOWFjODMwNmJm
NGRlNGQ5NzM5OTJlMTRhMGQwMzBkYWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaApAQCAtMTQxLDYgKzE0MSw5IEBAIHB1Ymxp
YzoKICAgICBib29sIGhhc0V4cHJlc3Npb25JbmZvKCkgeyByZXR1cm4gbV9leHByZXNzaW9uSW5m
by5zaXplKCk7IH0KICAgICBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4mIGV4cHJl
c3Npb25JbmZvKCkgeyByZXR1cm4gbV9leHByZXNzaW9uSW5mbzsgfQogCisgICAgYm9vbCBoYXND
aGVja3BvaW50cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2hlY2twb2ludHM7IH0KKyAgICB2b2lk
IHNldEhhc0NoZWNrcG9pbnRzKCkgeyBtX2hhc0NoZWNrcG9pbnRzID0gdHJ1ZTsgfQorCiAgICAg
Ly8gU3BlY2lhbCByZWdpc3RlcnMKICAgICB2b2lkIHNldFRoaXNSZWdpc3RlcihWaXJ0dWFsUmVn
aXN0ZXIgdGhpc1JlZ2lzdGVyKSB7IG1fdGhpc1JlZ2lzdGVyID0gdGhpc1JlZ2lzdGVyOyB9CiAg
ICAgdm9pZCBzZXRTY29wZVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyKSB7
IG1fc2NvcGVSZWdpc3RlciA9IHNjb3BlUmVnaXN0ZXI7IH0KQEAgLTE5OCw5ICsyMDEsOCBAQCBw
dWJsaWM6CiAgICAgfQogCiAgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4m
IGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQotICAg
IGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihpbnQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleF07IH0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNDb25zdGFudFJlZ2lz
dGVySW5kZXgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBpbmRleCA+PSBGaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleDsgfQotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChp
bnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleF0uZ2V0KCk7IH0KKyAgICBjb25zdCBXcml0ZUJhcnJpZXI8
VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyBy
ZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAg
QUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNv
bnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5n
ZXQoKTsgfQogICAgIGNvbnN0IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25z
dGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbjsgfQogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZDb25zdGFudElk
ZW50aWZpZXJTZXRzKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1f
Y29uc3RhbnRJZGVudGlmaWVyU2V0cy5zaXplKCkgOiAwOyB9CkBAIC00MjYsNiArNDI4LDcgQEAg
cHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2RpZE9wdGltaXplIDogMjsKICAgICB1bnNpZ25lZCBt
X2FnZSA6IDM7CiAgICAgc3RhdGljX2Fzc2VydCgoKDFVIDw8IDMpIC0gMSkgPj0gbWF4QWdlKTsK
KyAgICBib29sIG1faGFzQ2hlY2twb2ludHMgOiAxOwogcHVibGljOgogICAgIENvbmN1cnJlbnRK
U0xvY2sgbV9sb2NrOwogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYWx1ZVByb2ZpbGUuaAppbmRleCBkZmEwNzc2NGE2YWIwMjE5ZDc4YWQ3YWJlZmVhNmEzYjdj
ODE3YmViLi45MGY5M2RkMWM5MTExY2UzYmNhZmIwYWIzYjAzZDhiN2RiYmY5ZmRkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCkBAIC0xNzYsMjgg
KzE3NiwyOCBAQCBpbmxpbmUgQnl0ZWNvZGVJbmRleCBnZXRSYXJlQ2FzZVByb2ZpbGVCeXRlY29k
ZUluZGV4KFJhcmVDYXNlUHJvZmlsZSogcmFyZUNhc2VQcgogICAgIHJldHVybiByYXJlQ2FzZVBy
b2ZpbGUtPm1fYnl0ZWNvZGVJbmRleDsKIH0KIAotc3RydWN0IFZhbHVlUHJvZmlsZUFuZE9wZXJh
bmQgOiBwdWJsaWMgVmFsdWVQcm9maWxlIHsKLSAgICBpbnQgbV9vcGVyYW5kOworc3RydWN0IFZh
bHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgeworICAg
IFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CiB9OwogCi1zdHJ1Y3QgVmFsdWVQcm9maWxlQW5k
T3BlcmFuZEJ1ZmZlciB7CitzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVm
ZmVyIHsKICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CiAKLSAgICBWYWx1ZVBy
b2ZpbGVBbmRPcGVyYW5kQnVmZmVyKHVuc2lnbmVkIHNpemUpCisgICAgVmFsdWVQcm9maWxlQW5k
VmlydHVhbFJlZ2lzdGVyQnVmZmVyKHVuc2lnbmVkIHNpemUpCiAgICAgICAgIDogbV9zaXplKHNp
emUpCiAgICAgewogICAgICAgICAvLyBGSVhNRTogVmFsdWVQcm9maWxlIGhhcyBtb3JlIHN0dWZm
IHRoYW4gd2UgbmVlZC4gV2UgY291bGQgb3B0aW1pemUgdGhlc2UgdmFsdWUgcHJvZmlsZXMKICAg
ICAgICAgLy8gdG8gYmUgbW9yZSBzcGFjZSBlZmZpY2llbnQuCiAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU0MTMKLSAgICAgICAgbV9idWZmZXIg
PSBNYWxsb2NQdHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZCwgVk1NYWxsb2M+OjptYWxsb2MobV9z
aXplICogc2l6ZW9mKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQpKTsKKyAgICAgICAgbV9idWZmZXIg
PSBNYWxsb2NQdHI8VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyLCBWTU1hbGxvYz46Om1h
bGxvYyhtX3NpemUgKiBzaXplb2YoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyKSk7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NpemU7ICsraSkKLSAgICAgICAgICAg
IG5ldyAoJm1fYnVmZmVyLmdldCgpW2ldKSBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kKCk7CisgICAg
ICAgICAgICBuZXcgKCZtX2J1ZmZlci5nZXQoKVtpXSkgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJl
Z2lzdGVyKCk7CiAgICAgfQogCi0gICAgflZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIoKQor
ICAgIH5WYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIoKQogICAgIHsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKQotICAgICAgICAgICAgbV9i
dWZmZXIuZ2V0KClbaV0uflZhbHVlUHJvZmlsZUFuZE9wZXJhbmQoKTsKKyAgICAgICAgICAgIG1f
YnVmZmVyLmdldCgpW2ldLn5WYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIoKTsKICAgICB9
CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CkBAIC0yMDgsNyArMjA4LDcgQEAg
c3RydWN0IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIgewogICAgIH0KIAogICAgIHVuc2ln
bmVkIG1fc2l6ZTsKLSAgICBNYWxsb2NQdHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZCwgVk1NYWxs
b2M+IG1fYnVmZmVyOworICAgIE1hbGxvY1B0cjxWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXIsIFZNTWFsbG9jPiBtX2J1ZmZlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCmluZGV4IGM1
Y2E0ZGUxZTRiMzYxMTIxNGMzNWFiMWVhMzJkYzFjYmY0NWYzZTkuLmIxMzk0N2YwZTE4ZGYwNjNh
ODhiM2YyMjdjZGNkYmZlZmZlZGMzMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5jcHAKQEAgLTM1LDIyICszNSwyMiBAQCBKU1ZhbHVlIFZh
bHVlUmVjb3Zlcnk6OnJlY292ZXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIGNvbnN0CiB7CiAgICAg
c3dpdGNoICh0ZWNobmlxdWUoKSkgewogICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgotICAg
ICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS5qc1Zh
bHVlKCk7CisgICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLmpz
VmFsdWUoKTsKICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICByZXR1
cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51bmJv
eGVkSW50MzIoKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcihjYWxsRnJhbWUtPnIodmlydHVh
bFJlZ2lzdGVyKCkpLnVuYm94ZWRJbnQzMigpKTsKICAgICBjYXNlIEludDUyRGlzcGxhY2VkSW5K
U1N0YWNrOgotICAgICAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdp
c3RlcigpLm9mZnNldCgpKS51bmJveGVkSW50NTIoKSk7CisgICAgICAgIHJldHVybiBqc051bWJl
cihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkpLnVuYm94ZWRJbnQ1MigpKTsKICAgICBj
YXNlIFN0cmljdEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICByZXR1cm4ganNOdW1i
ZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51bmJveGVkU3RyaWN0
SW50NTIoKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcihjYWxsRnJhbWUtPnIodmlydHVhbFJl
Z2lzdGVyKCkpLnVuYm94ZWRTdHJpY3RJbnQ1MigpKTsKICAgICBjYXNlIERvdWJsZURpc3BsYWNl
ZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHB1cmlmeU5hTihjYWxsRnJhbWUt
PnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94ZWREb3VibGUoKSkpOworICAgICAg
ICByZXR1cm4ganNOdW1iZXIocHVyaWZ5TmFOKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIo
KSkudW5ib3hlZERvdWJsZSgpKSk7CiAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgot
ICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51
bmJveGVkQ2VsbCgpOworICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3Rl
cigpKS51bmJveGVkQ2VsbCgpOwogICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxS
ZWdpc3RlcigpLm9mZnNldCgpKS5qc1ZhbHVlKCk7CisgICAgICAgIHJldHVybiBjYWxsRnJhbWUt
PnIodmlydHVhbFJlZ2lzdGVyKCkpLmpzVmFsdWUoKTsKICNlbHNlCi0gICAgICAgIHJldHVybiBq
c0Jvb2xlYW4oY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51bmJveGVk
Qm9vbGVhbigpKTsKKyAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihjYWxsRnJhbWUtPnIodmlydHVh
bFJlZ2lzdGVyKCkpLnVuYm94ZWRCb29sZWFuKCkpOwogI2VuZGlmCiAgICAgY2FzZSBDb25zdGFu
dDoKICAgICAgICAgcmV0dXJuIGNvbnN0YW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAppbmRleCBkOGYxOGMzZmU4NTU5NGYzMmEyOTNhZmQ4
OTA5MjIzNjEzNjJlYTYzLi41ZTQzYmM3MmJiY2M0ZmY5N2E2OGY4M2RhODMwOTRlNThkYTNiMzE0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVy
eS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1
YWxSZWdpc3Rlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdp
c3Rlci5oCmluZGV4IDM2MTk1Mjk0MmQyYjg2YmFiMTJmNmNjYzdjYzFiYTAyMWY1YWQwNDguLmZi
OTFhZjE5MDJiMTYxNzg0Y2FjZmFhYmJmMzQ2NjYyZGRmYTY0NzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKQEAgLTMxLDEyICszMSwx
MiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIGJvb2wgb3BlcmFuZElzTG9jYWwoaW50
IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJJc0xvY2FsKGludCBvcGVyYW5k
KQogewogICAgIHJldHVybiBvcGVyYW5kIDwgMDsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmFuZElz
QXJndW1lbnQoaW50IG9wZXJhbmQpCitpbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJJc0FyZ3Vt
ZW50KGludCBvcGVyYW5kKQogewogICAgIHJldHVybiBvcGVyYW5kID49IDA7CiB9CkBAIC00Nywy
NyArNDcsMzQgQEAgY2xhc3MgUmVnaXN0ZXJJRDsKIGNsYXNzIFZpcnR1YWxSZWdpc3RlciB7CiBw
dWJsaWM6CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChpbnQpOwotICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoaW50LCBpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGludCwgaW50KTsKKworICAgIHN0YXRpYyBjb25z
dGV4cHIgaW50IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOworICAgIHN0YXRp
YyBjb25zdGV4cHIgaW50IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFu
dFJlZ2lzdGVySW5kZXg7CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIoUmVnaXN0ZXJJRCopOwogICAg
IFZpcnR1YWxSZWdpc3RlcihSZWZQdHI8UmVnaXN0ZXJJRD4pOwogCiAgICAgVmlydHVhbFJlZ2lz
dGVyKCkKLSAgICAgICAgOiBtX3ZpcnR1YWxSZWdpc3RlcihzX2ludmFsaWRWaXJ0dWFsUmVnaXN0
ZXIpCisgICAgICAgIDogbV92aXJ0dWFsUmVnaXN0ZXIoaW52YWxpZFZpcnR1YWxSZWdpc3RlcikK
ICAgICB7IH0KIAogICAgIGV4cGxpY2l0IFZpcnR1YWxSZWdpc3RlcihpbnQgdmlydHVhbFJlZ2lz
dGVyKQogICAgICAgICA6IG1fdmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlcikKICAgICB7
IH0KIAotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3Rl
ciAhPSBzX2ludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0xvY2FsKCkgY29u
c3QgeyByZXR1cm4gb3BlcmFuZElzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9v
bCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4gb3BlcmFuZElzQXJndW1lbnQobV92aXJ0dWFs
UmVnaXN0ZXIpOyB9CisgICAgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Qgc2xvdCkKKyAg
ICAgICAgOiBtX3ZpcnR1YWxSZWdpc3RlcihzdGF0aWNfY2FzdDxpbnQ+KHNsb3QpKQorICAgIHsg
fQorCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gKG1fdmlydHVhbFJlZ2lzdGVy
ICE9IGludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgYm9vbCBpc0xvY2FsKCkgY29uc3Qg
eyByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNMb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KKyAg
ICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0FyZ3Vt
ZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQogICAgIGJvb2wgaXNIZWFkZXIoKSBjb25zdCB7IHJl
dHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSAwICYmIG1fdmlydHVhbFJlZ2lzdGVyIDwgQ2FsbEZy
YW1lU2xvdDo6dGhpc0FyZ3VtZW50OyB9Ci0gICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3QgeyBy
ZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gc19maXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsg
fQorICAgIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVy
ID49IGZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9CiAgICAgaW50IHRvTG9jYWwoKSBjb25z
dCB7IEFTU0VSVChpc0xvY2FsKCkpOyByZXR1cm4gb3BlcmFuZFRvTG9jYWwobV92aXJ0dWFsUmVn
aXN0ZXIpOyB9CiAgICAgaW50IHRvQXJndW1lbnQoKSBjb25zdCB7IEFTU0VSVChpc0FyZ3VtZW50
KCkpOyByZXR1cm4gb3BlcmFuZFRvQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAg
aW50IHRvQ29uc3RhbnRJbmRleCgpIGNvbnN0IHsgQVNTRVJUKGlzQ29uc3RhbnQoKSk7IHJldHVy
biBtX3ZpcnR1YWxSZWdpc3RlciAtIHNfZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KKyAg
ICBpbnQgdG9Db25zdGFudEluZGV4KCkgY29uc3QgeyBBU1NFUlQoaXNDb25zdGFudCgpKTsgcmV0
dXJuIG1fdmlydHVhbFJlZ2lzdGVyIC0gZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KICAg
ICBpbnQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXI7IH0KICAgICBp
bnQgb2Zmc2V0SW5CeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyICogc2l6
ZW9mKFJlZ2lzdGVyKTsgfQogCkBAIC0xMDYsOSArMTEzLDYgQEAgcHVibGljOgogICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgY29u
c3RleHByIGludCBzX2ludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAweDNmZmZmZmZmOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgaW50IHNfZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggPSBGaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleDsKLQogICAgIHN0YXRpYyBpbnQgbG9jYWxUb09wZXJhbmQoaW50
IGxvY2FsKSB7IHJldHVybiAtMSAtIGxvY2FsOyB9CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9M
b2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGlu
dCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KQEAgLTEyNCw3ICsxMjgsNyBAQCBpbmxpbmUg
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGludCBsb2NhbCkKICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6bG9jYWxUb09wZXJhbmQobG9j
YWwpKTsKIH0KIAotaW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChpbnQgYXJndW1lbnQsIGludCBvZmZzZXQgPSAwKQoraW5saW5lIFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaW50IGFyZ3VtZW50LCBp
bnQgb2Zmc2V0ID0gMCkKIHsKICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3Rlcjo6YXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQpICsgb2Zmc2V0KTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAKaW5kZXggOTEwMWQxMGRkOGVjNGZjMjI5YTdmOGEwOTE2OGM3Yzg0NWUyNjkxMS4uYzFm
ODYzOWFhNDhiOGJmYzVkZGI3MTRjZDAyNDE1NzEzYjk4ZmVhMiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAK
QEAgLTUxMiw3ICs1MTIsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3Io
Vk0mIHZtLCBGdW5jdGlvbk5vZGUqIGZ1bmN0aW9uTm9kZSwgVW5saW5rZQogICAgICAgICAgICAg
ICAgICAgICBlbnRyeS5kaXNhYmxlV2F0Y2hpbmcobV92bSk7CiAgICAgICAgICAgICAgICAgICAg
IGZ1bmN0aW9uU3ltYm9sVGFibGUtPnNldChOb0xvY2tpbmdOZWNlc3NhcnksIG5hbWUsIGVudHJ5
KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgT3BQdXRUb1Njb3BlOjplbWl0
KHRoaXMsIG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIsIFVJTlRfTUFYLCB2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudCgxICsgaSksIEdldFB1dEluZm8oVGhyb3dJZk5vdEZvdW5kLCBMb2Nh
bENsb3N1cmVWYXIsIEluaXRpYWxpemF0aW9uTW9kZTo6Tm90SW5pdGlhbGl6YXRpb24pLCBTeW1i
b2xUYWJsZU9yU2NvcGVEZXB0aDo6c3ltYm9sVGFibGUoVmlydHVhbFJlZ2lzdGVyIHsgc3ltYm9s
VGFibGVDb25zdGFudEluZGV4IH0pLCBvZmZzZXQub2Zmc2V0KCkpOworICAgICAgICAgICAgICAg
IE9wUHV0VG9TY29wZTo6ZW1pdCh0aGlzLCBtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyLCBV
SU5UX01BWCwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDEgKyBpKSwg
R2V0UHV0SW5mbyhUaHJvd0lmTm90Rm91bmQsIExvY2FsQ2xvc3VyZVZhciwgSW5pdGlhbGl6YXRp
b25Nb2RlOjpOb3RJbml0aWFsaXphdGlvbiksIFN5bWJvbFRhYmxlT3JTY29wZURlcHRoOjpzeW1i
b2xUYWJsZShWaXJ0dWFsUmVnaXN0ZXIgeyBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXggfSksIG9m
ZnNldC5vZmZzZXQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IC8vIFRoaXMgY3JlYXRlcyBhIHNjb3BlZCBhcmd1bWVudHMgb2JqZWN0IGFuZCBjb3BpZXMgdGhl
IG92ZXJmbG93IGFyZ3VtZW50cyBpbnRvIHRoZQpAQCAtNTQxLDcgKzU0MSw3IEBAIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYgdm0sIEZ1bmN0aW9uTm9kZSogZnVuY3Rp
b25Ob2RlLCBVbmxpbmtlCiAgICAgICAgICAgICBpZiAoIWNhcHR1cmVzKG5hbWUpKSB7CiAgICAg
ICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZWFzeSBjYXNlIC0ganVzdCB0ZWxsIHRoZSBzeW1i
b2wgdGFibGUgYWJvdXQgdGhlIGFyZ3VtZW50LiBJdCB3aWxsCiAgICAgICAgICAgICAgICAgLy8g
YmUgYWNjZXNzZWQgZGlyZWN0bHkuCi0gICAgICAgICAgICAgICAgZnVuY3Rpb25TeW1ib2xUYWJs
ZS0+c2V0KE5vTG9ja2luZ05lY2Vzc2FyeSwgbmFtZSwgU3ltYm9sVGFibGVFbnRyeShWYXJPZmZz
ZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSArIGkpKSkpOworICAgICAgICAgICAgICAg
IGZ1bmN0aW9uU3ltYm9sVGFibGUtPnNldChOb0xvY2tpbmdOZWNlc3NhcnksIG5hbWUsIFN5bWJv
bFRhYmxlRW50cnkoVmFyT2Zmc2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5n
VGhpcygxICsgaSkpKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKQEAgLTU1MCw3ICs1NTAsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0
ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBGdW5jdGlvbk5vZGUqIGZ1bmN0aW9uTm9kZSwgVW5saW5r
ZQogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IEJpbmRpbmdOb2RlKj4ocGFyYW1l
dGVycy5hdChpKS5maXJzdCktPmJvdW5kUHJvcGVydHkoKTsKICAgICAgICAgICAgIGZ1bmN0aW9u
U3ltYm9sVGFibGUtPnNldChOb0xvY2tpbmdOZWNlc3NhcnksIG5hbWUsIFN5bWJvbFRhYmxlRW50
cnkoVmFyT2Zmc2V0KG9mZnNldCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgT3BQdXRU
b1Njb3BlOjplbWl0KHRoaXMsIG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIsIGFkZENvbnN0
YW50KGlkZW50KSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSArIGkpLCBHZXRQdXRJbmZv
KFRocm93SWZOb3RGb3VuZCwgTG9jYWxDbG9zdXJlVmFyLCBJbml0aWFsaXphdGlvbk1vZGU6Ok5v
dEluaXRpYWxpemF0aW9uKSwgU3ltYm9sVGFibGVPclNjb3BlRGVwdGg6OnN5bWJvbFRhYmxlKFZp
cnR1YWxSZWdpc3RlciB7IHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCB9KSwgb2Zmc2V0Lm9mZnNl
dCgpKTsKKyAgICAgICAgICAgIE9wUHV0VG9TY29wZTo6ZW1pdCh0aGlzLCBtX2xleGljYWxFbnZp
cm9ubWVudFJlZ2lzdGVyLCBhZGRDb25zdGFudChpZGVudCksIHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50SW5jbHVkaW5nVGhpcygxICsgaSksIEdldFB1dEluZm8oVGhyb3dJZk5vdEZvdW5kLCBM
b2NhbENsb3N1cmVWYXIsIEluaXRpYWxpemF0aW9uTW9kZTo6Tm90SW5pdGlhbGl6YXRpb24pLCBT
eW1ib2xUYWJsZU9yU2NvcGVEZXB0aDo6c3ltYm9sVGFibGUoVmlydHVhbFJlZ2lzdGVyIHsgc3lt
Ym9sVGFibGVDb25zdGFudEluZGV4IH0pLCBvZmZzZXQub2Zmc2V0KCkpOwogICAgICAgICB9CiAg
ICAgfQogICAgIApAQCAtMTE4NiwxMCArMTE4NiwxMCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9y
Ojppbml0aWFsaXplQXJyb3dGdW5jdGlvbkNvbnRleHRTY29wZUlmTmVlZGVkKFN5bWJvbFRhYmxl
KgogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZU5leHRQYXJhbWV0
ZXIoKQogewotICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVnID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKG1fY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCkpOwogICAgIG1fcGFyYW1ldGVycy5ncm93KG1fcGFyYW1ldGVycy5z
aXplKCkgKyAxKTsKICAgICBhdXRvJiBwYXJhbWV0ZXIgPSByZWdpc3RlckZvcihyZWcpOwotICAg
IHBhcmFtZXRlci5zZXRJbmRleChyZWcub2Zmc2V0KCkpOworICAgIHBhcmFtZXRlci5zZXRJbmRl
eChyZWcpOwogICAgIG1fY29kZUJsb2NrLT5hZGRQYXJhbWV0ZXIoKTsKICAgICByZXR1cm4gJnBh
cmFtZXRlcjsKIH0KQEAgLTExOTgsNyArMTE5OCw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6
OmluaXRpYWxpemVQYXJhbWV0ZXJzKEZ1bmN0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKIHsK
ICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvZGUgYmxvY2sga25vd3MgYWJvdXQgYWxsIG9mIG91ciBw
YXJhbWV0ZXJzLCBhbmQgbWFrZSBzdXJlIHRoYXQgcGFyYW1ldGVycwogICAgIC8vIG5lZWRpbmcg
ZGVzdHJ1Y3R1cmluZyBhcmUgbm90ZWQuCi0gICAgbV90aGlzUmVnaXN0ZXIuc2V0SW5kZXgoaW5p
dGlhbGl6ZU5leHRQYXJhbWV0ZXIoKS0+aW5kZXgoKSk7IC8vIHRoaXMKKyAgICBtX3RoaXNSZWdp
c3Rlci5zZXRJbmRleChWaXJ0dWFsUmVnaXN0ZXIoaW5pdGlhbGl6ZU5leHRQYXJhbWV0ZXIoKS0+
aW5kZXgoKSkpOyAvLyB0aGlzCiAKICAgICBib29sIG5vblNpbXBsZUFyZ3VtZW50cyA9IGZhbHNl
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnNpemUoKTsgKytpKSB7
CkBAIC0xNjM5LDExICsxNjM5LDExIEBAIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFcXVh
bGl0eU9wSW1wbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYzEsIFJlCiAKICAgICBp
ZiAobV9sYXN0SW5zdHJ1Y3Rpb24tPmlzPE9wVHlwZW9mPigpKSB7CiAgICAgICAgIGF1dG8gb3Ag
PSBtX2xhc3RJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCk7Ci0gICAgICAgIGlmIChzcmMxLT5p
bmRleCgpID09IG9wLm1fZHN0Lm9mZnNldCgpCisgICAgICAgIGlmIChzcmMxLT52aXJ0dWFsUmVn
aXN0ZXIoKSA9PSBvcC5tX2RzdAogICAgICAgICAgICAgJiYgc3JjMS0+aXNUZW1wb3JhcnkoKQot
ICAgICAgICAgICAgJiYgbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYzIt
PmluZGV4KCkpCi0gICAgICAgICAgICAmJiBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3Rlcihz
cmMyLT5pbmRleCgpKS5nZXQoKS5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICBjb25zdCBTdHJp
bmcmIHZhbHVlID0gYXNTdHJpbmcobV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+
aW5kZXgoKSkuZ2V0KCkpLT50cnlHZXRWYWx1ZSgpOworICAgICAgICAgICAgJiYgc3JjMi0+dmly
dHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFudCgpCisgICAgICAgICAgICAmJiBtX2NvZGVCbG9jay0+
Y29uc3RhbnRSZWdpc3RlcihzcmMyLT52aXJ0dWFsUmVnaXN0ZXIoKSkuZ2V0KCkuaXNTdHJpbmco
KSkgeworICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGFzU3RyaW5nKG1fY29kZUJs
b2NrLT5jb25zdGFudFJlZ2lzdGVyKHNyYzItPnZpcnR1YWxSZWdpc3RlcigpKS5nZXQoKSktPnRy
eUdldFZhbHVlKCk7CiAgICAgICAgICAgICBpZiAodmFsdWUgPT0gInVuZGVmaW5lZCIpIHsKICAg
ICAgICAgICAgICAgICByZXdpbmQoKTsKICAgICAgICAgICAgICAgICBPcElzVW5kZWZpbmVkOjpl
bWl0KHRoaXMsIGRzdCwgb3AubV92YWx1ZSk7CkBAIC0zMjkwLDYgKzMyOTAsOCBAQCBSZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogZnVuYwogICAgIC8vIEVtaXQgY2FsbC4KICAgICBBU1NFUlQoZHN0ICE9IGln
bm9yZWRSZXN1bHQoKSk7CiAgICAgVmFyYXJnc09wOjplbWl0KHRoaXMsIGRzdCwgZnVuYywgdGhp
c1JlZ2lzdGVyLCBhcmd1bWVudHMgPyBhcmd1bWVudHMgOiBWaXJ0dWFsUmVnaXN0ZXIoMCksIGZp
cnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgaWYgKFZhcmFyZ3NPcDo6
b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQorICAgICAgICBBU1NF
UlQobV9jb2RlQmxvY2stPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIHJldHVybiBkc3Q7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaAppbmRleCBjOWU0ZjY5NjE2ZmVkNzNmNDE5ODkxMGQ3YjRlOWQzOGUzMzU1YTZm
Li40MmM2MzAyNjBlZTZlYjhkYjYxNjMzODJmNjBmNjdjNWU4NDBmN2YwIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
CkBAIC0xMDE5LDYgKzEwMTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzaG91
bGRFbWl0Q29udHJvbEZsb3dQcm9maWxlckhvb2tzKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlR2Vu
ZXJhdGlvbk1vZGUuY29udGFpbnMoQ29kZUdlbmVyYXRpb25Nb2RlOjpDb250cm9sRmxvd1Byb2Zp
bGVyKTsgfQogICAgICAgICAKICAgICAgICAgYm9vbCBpc1N0cmljdE1vZGUoKSBjb25zdCB7IHJl
dHVybiBtX2NvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCk7IH0KKyAgICAgICAgdm9pZCBzZXRVc2Vz
Q2hlY2twb2ludHMoKSB7IG1fY29kZUJsb2NrLT5zZXRIYXNDaGVja3BvaW50cygpOyB9CiAKICAg
ICAgICAgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJs
b2NrLT5wYXJzZU1vZGUoKTsgfQogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9SZWdpc3RlcklELmgKaW5kZXggZGEzZmUxMjgwMDkwZjQwZTczZjgxZDIx
MjBkZmNkNWVmOTBkM2NlZS4uNzNiNDMyMDYzOGMzNDhmOTU1NGFhZTlhM2EzMjAyMzI4M2JkYjNj
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9SZWdpc3Rl
cklELmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9SZWdpc3RlcklE
LmgKQEAgLTY5LDEyICs2OSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAg
ICB9CiAKLSAgICAgICAgdm9pZCBzZXRJbmRleChpbnQgaW5kZXgpCisgICAgICAgIHZvaWQgc2V0
SW5kZXgoVmlydHVhbFJlZ2lzdGVyIGluZGV4KQogICAgICAgICB7CiAjaWYgQVNTRVJUX0VOQUJM
RUQKICAgICAgICAgICAgIG1fZGlkU2V0SW5kZXggPSB0cnVlOwogI2VuZGlmCi0gICAgICAgICAg
ICBtX3ZpcnR1YWxSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihpbmRleCk7CisgICAgICAgICAg
ICBtX3ZpcnR1YWxSZWdpc3RlciA9IGluZGV4OwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBz
ZXRUZW1wb3JhcnkoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEhlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhl
YXAuY3BwCmluZGV4IGI4M2ZlZTBkM2MwOWQxNDk3YWE3ZWExZGUzZTA0OTA2MmYyMjZjMTQuLmU2
NDA3MWIxYWEwZTM0ODk0NDM0MzlmZjI4ZmNhMjUxYjYyYjk2NWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAKQEAgLTQwLDYgKzQwLDE0IEBAIHZv
aWQgQWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAg
ICAgICAgIG91dC5wcmludCh2YWx1ZSgpKTsKIH0KIAordm9pZCBBYnN0cmFjdEhlYXA6OlBheWxv
YWQ6OmR1bXBBc09wZXJhbmQoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoaXNU
b3AoKSkKKyAgICAgICAgb3V0LnByaW50KCJUT1AiKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5w
cmludChPcGVyYW5kOjpmcm9tQml0cyh2YWx1ZSgpKSk7Cit9CisKIHZvaWQgQWJzdHJhY3RIZWFw
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KGtpbmQoKSk7
CkBAIC00OSw2ICs1NywxMyBAQCB2b2lkIEFic3RyYWN0SGVhcDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAogICAgICAgICBvdXQucHJpbnQoIigiLCBET01KSVQ6OkhlYXBSYW5nZTo6ZnJv
bVJhdyhwYXlsb2FkKCkudmFsdWUzMigpKSwgIikiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
KyAgICBpZiAoa2luZCgpID09IFN0YWNrKSB7CisgICAgICAgIG91dC5wcmludCgiKCIpOworICAg
ICAgICBwYXlsb2FkKCkuZHVtcEFzT3BlcmFuZChvdXQpOworICAgICAgICBvdXQucHJpbnQoIiki
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIG91dC5wcmludCgiKCIsIHBheWxvYWQo
KSwgIikiKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEhlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFw
LmgKaW5kZXggYmY5OTM3Nzk3MDQ3MDJkOGQ1YjIwYjZjMmY2ZjczOTVhZmU2Yjg2OC4uM2M0Y2Uz
ZDVkMDJkYzNhODFmM2FhNDI0Y2ZjM2ZkMWM0NDdjNTI5MCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxF
KERGR19KSVQpCiAKICNpbmNsdWRlICJET01KSVRIZWFwUmFuZ2UuaCIKKyNpbmNsdWRlICJPcGVy
YW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgpAQCAtMTIzLDEwICsx
MjQsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgLCBtX3ZhbHVlKGJpdHdpc2VfY2FzdDxpbnRw
dHJfdD4ocG9pbnRlcikpCiAgICAgICAgIHsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
UGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKworICAgICAgICBQYXlsb2FkKE9wZXJh
bmQgb3BlcmFuZCkKICAgICAgICAgICAgIDogbV9pc1RvcChmYWxzZSkKLSAgICAgICAgICAgICwg
bV92YWx1ZShvcGVyYW5kLm9mZnNldCgpKQorICAgICAgICAgICAgLCBtX3ZhbHVlKG9wZXJhbmQu
YXNCaXRzKCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFBheWxvYWQoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgICAgICA6IFBheWxvYWQoT3BlcmFuZChvcGVyYW5k
KSkKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIApAQCAtMTgzLDYgKzE4OSw3IEBAIHB1
YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisgICAgICAgIHZvaWQgZHVtcEFzT3BlcmFuZChQcmludFN0cmVhbSYpIGNvbnN0
OwogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBib29sIG1faXNUb3A7CkBAIC0yMDQs
NiArMjExLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKGtpbmQgIT0gSW52YWxp
ZEFic3RyYWN0SGVhcCAmJiBraW5kICE9IFdvcmxkICYmIGtpbmQgIT0gSGVhcCAmJiBraW5kICE9
IFNpZGVTdGF0ZSk7CiAgICAgICAgIG1fdmFsdWUgPSBlbmNvZGUoa2luZCwgcGF5bG9hZCk7Cisg
ICAgICAgIEFTU0VSVCh0aGlzLT5raW5kKCkgPT0ga2luZCAmJiB0aGlzLT5wYXlsb2FkKCkgPT0g
cGF5bG9hZCk7CiAgICAgfQogICAgIAogICAgIEFic3RyYWN0SGVhcChXVEY6Okhhc2hUYWJsZURl
bGV0ZWRWYWx1ZVR5cGUpCkBAIC0yMTksNiArMjI3LDExIEBAIHB1YmxpYzoKICAgICAgICAgQVNT
RVJUKGtpbmQoKSAhPSBXb3JsZCAmJiBraW5kKCkgIT0gSW52YWxpZEFic3RyYWN0SGVhcCk7CiAg
ICAgICAgIHJldHVybiBwYXlsb2FkSW1wbCgpOwogICAgIH0KKyAgICBPcGVyYW5kIG9wZXJhbmQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFjayAmJiAhcGF5bG9h
ZCgpLmlzVG9wKCkpOworICAgICAgICByZXR1cm4gT3BlcmFuZDo6ZnJvbUJpdHMocGF5bG9hZCgp
LnZhbHVlKCkpOworICAgIH0KICAgICAKICAgICBBYnN0cmFjdEhlYXAgc3VwZXJ0eXBlKCkgY29u
c3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXggYzI2YzI0YWZlYmUxY2Y3ZWRlMWEwNzg0
MGQwYzY2ZDk3NDY2ODAwMy4uZTUyODRhZDg1ZDFkNmY1NGY0Y2EzMmQ0OThmNzkzYWZhY2I1ZmJj
YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlcklubGluZXMuaApAQCAtMzg4LDcgKzM4OCw3IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNs
b2JiZXJMaW1pCiAgICAgICAgICAgICAKICAgICBjYXNlIEdldExvY2FsOiB7CiAgICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQo
dmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLm9mZnNldCgpKTsKKyAgICAgICAgQWJzdHJhY3RW
YWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQo
KSk7CiAgICAgICAgIC8vIFRoZSB2YWx1ZSBpbiB0aGUgbG9jYWwgc2hvdWxkIGFscmVhZHkgYmUg
Y2hlY2tlZC4KICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YWx1ZS5pc1R5cGUo
dHlwZUZpbHRlckZvcih2YXJpYWJsZUFjY2Vzc0RhdGEtPmZsdXNoRm9ybWF0KCkpKSk7CiAgICAg
ICAgIGlmICh2YWx1ZS52YWx1ZSgpKQpAQCAtMzk5LDcgKzM5OSw3IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNs
b2JiZXJMaW1pCiAgICAgICAgIAogICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgU3RhY2tB
Y2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3Ry
YWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+bG9jYWwpOworICAgICAgICBB
YnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpOwogICAg
ICAgICAvLyBUaGUgdmFsdWUgaW4gdGhlIGxvY2FsIHNob3VsZCBhbHJlYWR5IGJlIGNoZWNrZWQu
CiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFsdWUuaXNUeXBlKHR5cGVGaWx0
ZXJGb3IoZGF0YS0+Zm9ybWF0KSkpOwogICAgICAgICBpZiAodmFsdWUudmFsdWUoKSkKQEAgLTQw
OSwxMiArNDA5LDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlw
ZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgfQogICAgICAgICAK
ICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT5sb2Nh
bCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBtX3N0YXRlLm9wZXJhbmQo
bm9kZS0+b3BlcmFuZCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0U3RhY2s6IHsKLSAgICAgICAgbV9zdGF0
ZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkgPSBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0
YSgpLT5vcGVyYW5kKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgIApAQCAtNDM2LDcgKzQzNiw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJM
aW1pCiAgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJl
ZW4gc2V0LiBTZXRBcmd1bWVudERlZmluaXRlbHkvU2V0QXJndW1lbnRNYXliZSBtZWFucwogICAg
ICAgICAvLyB0aGF0IHNvbWVvbmUgc2V0IHRoZSBhcmd1bWVudCB2YWx1ZXMgb3V0LW9mLWJhbmQs
IGFuZCBjdXJyZW50bHkgdGhpcyBhbHdheXMgbWVhbnMgc2V0dGluZyB0byBhCiAgICAgICAgIC8v
IG5vbi1jbGVhciB2YWx1ZS4KLSAgICAgICAgQVNTRVJUKCFtX3N0YXRlLm9wZXJhbmQobm9kZS0+
bG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAgICAgQVNTRVJUKCFtX3N0YXRlLm9wZXJhbmQobm9k
ZS0+b3BlcmFuZCgpKS5pc0NsZWFyKCkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgSW5p
dGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6IHsKQEAgLTQ2NSw2ICs0NjUsMTIgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5z
aWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBWYXJh
cmdzTGVuZ3RoOiB7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBzZXRUeXBlRm9y
Tm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAg
Y2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgIC8v
IEZJWE1FOiBGb3J3YXJkVmFyYXJncyBzaG91bGQgY2hlY2sgaWYgdGhlIGNvdW50IGJlY29tZXMg
a25vd24sIGFuZCBpZiBpdCBkb2VzLCBpdCBzaG91bGQgdHVybgpAQCAtNDgzLDcgKzQ4OSw3IEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZl
Y3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9
IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAgICAgICBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+
Y291bnQpLnNldE5vbkNlbGxUeXBlKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBkYXRhLT5saW1pdCAtIDE7IGktLTspCi0gICAgICAgICAgICBtX3N0YXRlLm9wZXJh
bmQoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS5tYWtlSGVhcFRvcCgpOworICAgICAgICAgICAg
bV9zdGF0ZS5vcGVyYW5kKGRhdGEtPnN0YXJ0ICsgaSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCkBAIC0yMzY1LDkgKzIzNzEsOSBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVy
TGltaQogICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRJbmRleDsKICAgICAgICAgICAgIGlm
IChhcmd1bWVudEluZGV4Q2hlY2tlZC5zYWZlR2V0KGFyZ3VtZW50SW5kZXgpICE9IENoZWNrZWRT
dGF0ZTo6RGlkT3ZlcmZsb3cpIHsKICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1l
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudEluZGV4IDwgaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGFyZ3VtZW50SW5kZXggPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fc3RhdGUub3BlcmFuZCgKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudEluZGV4ICsg
MSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50
SW5kZXggKyAxKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fc3RhdGUuc2V0U2hvdWxkVHJ5Q29uc3RhbnRGb2xkaW5nKHRydWUpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAg
LTIzODgsNyArMjM5NCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAxICsgbm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsgaSA8
IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7ICsraSkgewogICAg
ICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSgKICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5v
cGVyYW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoaSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkgKyBpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91
bmRzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBv
c2l0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24u
aAppbmRleCBkNzMyNDdiOTNjNWRjNzg2YjYxN2FhNWFhZGMyYjBmNjE1Mjg2YjVmLi44OWMwOGZh
MDgwY2VhMzJmZDljNTkxZjMwZjFlN2RkNDZmMWQxMjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaApAQCAtMTIwLDcgKzEyMCw3IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZhcmlhYmxl
cy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZSA9IG1fdmFyaWFibGVzW2ldLT5maW5kKCk7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCA9IHZhcmlhYmxlLT5sb2NhbCgpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5k
ID0gdmFyaWFibGUtPm9wZXJhbmQoKTsKIAogICAgICAgICAgICAgaWYgKGkpCiAgICAgICAgICAg
ICAgICAgb3V0LnByaW50KCIgIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAppbmRleCA3MTNlNzk5OWE3
YmZjYTIxZGRjZWE4ZTM0NjI2MGYzNDMxZTRkOTQyLi45YmI0ZjRmMzRlNjcwMjlhNzQyMjk0YTk1
YTVkNzJmOWRjODg5YjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKQEAgLTM1OCw5ICszNTgsMTIg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKwogICAg
ICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5sb2FkVmFyYXJnc0RhdGEoKS0+b2Zmc2V0ICYmIChub2RlLT5jaGlsZDEoKS0+b3AoKSA9
PSBOZXdBcnJheVdpdGhTcHJlYWQgfHwgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gU3ByZWFkIHx8
IG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IE5ld0FycmF5QnVmZmVyKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGVzY2FwZShub2RlLT5jaGlsZDEoKSwgbm9kZSk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5sb2FkVmFyYXJnc0RhdGEoKS0+b2Zmc2V0ICYmIChub2RlLT5hcmd1bWVu
dHNDaGlsZCgpLT5vcCgpID09IE5ld0FycmF5V2l0aFNwcmVhZCB8fCBub2RlLT5hcmd1bWVudHND
aGlsZCgpLT5vcCgpID09IFNwcmVhZCB8fCBub2RlLT5hcmd1bWVudHNDaGlsZCgpLT5vcCgpID09
IE5ld0FycmF5QnVmZmVyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZShub2RlLT5h
cmd1bWVudHNDaGlsZCgpLCBub2RlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CkBAIC00
OTMsMTAgKzQ5NiwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVCghaGVhcC5wYXlsb2FkKCkuaXNUb3AoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVnKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBoZWFwLm9wZXJhbmQoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFRoZSByZWdpc3RlciBtYXkgbm90IHBvaW50IHRvIGFuIGFy
Z3VtZW50IG9yIGxvY2FsLCBmb3IgZXhhbXBsZSBpZiB3ZSBhcmUgbG9va2luZyBhdCBTZXRBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVn
LmlzSGVhZGVyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvYmJlcmVkQnlUaGlz
QmxvY2sub3BlcmFuZChyZWcpID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
b3BlcmFuZC5pc0hlYWRlcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJl
ZEJ5VGhpc0Jsb2NrLm9wZXJhbmQob3BlcmFuZCkgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICB9LAogICAgICAgICAgICAgICAgICAgICBOb09wQ2xvYmJlcml6ZSgpKTsKICAgICAgICAgICAg
IH0KQEAgLTU2MCwxNiArNTYzLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaXNDbG9iYmVyZWRCeUJsb2NrIHw9IGNsb2JiZXJlZEJ5VGhpc0Jsb2NrLm9wZXJh
bmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcykpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNDbG9iYmVyZWRCeUJsb2NrIHx8IGlubGluZUNh
bGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpc0Nsb2JiZXJlZEJ5QmxvY2sgfD0gY2xvYmJlcmVkQnlUaGlzQmxvY2sub3BlcmFuZCgKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQ2xvYmJlcmVkQnlCbG9jaykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7ICsraSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgLSAxKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkg
KwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZTo6YXJn
dW1lbnRPZmZzZXQoaSk7CkBAIC02MjcsNyArNjMwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgTm9PcENsb2JiZXJpemUoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChBYnN0cmFjdEhlYXAgaGVhcCkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYXAua2luZCgpID09IFN0
YWNrICYmICFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoaW5saW5lQ2Fs
bEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVT
dGFja1Nsb3QoaW5saW5lQ2FsbEZyYW1lLCBoZWFwLm9wZXJhbmQoKSkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CkBAIC03NTIsNyArNzU1LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgREZHX0FTU0VSVCgKICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgs
IG5vZGUsIG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFBoYW50b21EaXJlY3RBcmd1bWVudHMsIG5v
ZGUtPmNoaWxkMSgpLT5vcCgpKTsKICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlZyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dChub2RlLT5jYXB0dXJlZEFyZ3VtZW50c09mZnNldCgpLm9mZnNldCgpICsgMSkgKworICAgICAg
ICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlz
KG5vZGUtPmNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KCkub2Zmc2V0KCkgKyAxKSArCiAgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMuc3RhY2tPZmZzZXQoKTsKICAg
ICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0YWNr
QWNjZXNzRGF0YS5hZGQocmVnLCBGbHVzaGVkSlNWYWx1ZSk7CiAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPmNvbnZlcnRUb0dldFN0YWNrKGRhdGEpOwpAQCAtODA2LDE0ICs4MDksMTQgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBzYWZlVG9HZXRTdGFjayA9IGluZGV4ID49IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOwog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzYWZlVG9HZXRTdGFjayAmPSBpbmRleCA8IGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNhZmVUb0dldFN0YWNrICY9IGluZGV4IDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVU
b0dldFN0YWNrICY9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4IDwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpIC0gMTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzYWZl
VG9HZXRTdGFjaykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0
YSogZGF0YTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJn
ID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXggKyAxKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJnID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnRJbmNsdWRpbmdUaGlzKGluZGV4ICsgMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXJnICs9IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YSA9IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKGFyZywgRmx1c2hl
ZEpTVmFsdWUpOwpAQCAtODQ1LDkgKzg0OCwyMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jb252ZXJ0VG9JZGVudGl0eU9uKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmFyZ3VtZW50c0NoaWxkKCku
bm9kZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWxpbWluYXRlZEFsbG9jYXRpb24o
Y2FuZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICAgICAgICAgIC8vIFZhcmFyZ3NMZW5ndGggY2FuIGV4aXQsIHNvIGl0IGJldHRlciBiZSBleGl0
T0suCisgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+
b3JpZ2luLmV4aXRPSyk7CisgICAgICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0g
bm9kZS0+b3JpZ2luLndpdGhFeGl0T0sodHJ1ZSk7CisKKworICAgICAgICAgICAgICAgICAgICBu
b2RlLT5jb252ZXJ0VG9JZGVudGl0eU9uKGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0
aChpbnNlcnRpb25TZXQsIGNhbmRpZGF0ZSwgbm9kZUluZGV4LCBvcmlnaW4sIC8qIGFkZFRoaXMg
PSAqLyB0cnVlKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKwogICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKLSAgICAgICAgICAgICAg
ICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBub2RlLT5hcmd1bWVudHNDaGlsZCgpLm5vZGUo
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VsaW1pbmF0ZWRBbGxvY2F0aW9uKGNhbmRp
ZGF0ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgCkBAIC04NjIsMTAgKzg3OSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpzTnVtYmVyKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3RhY2ssIG5vZGUtPm9yaWdpbi50
YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5m
byh2YXJhcmdzRGF0YS0+Y291bnQub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBPcEluZm8odmFyYXJnc0RhdGEtPmNvdW50KSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChj
YW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEt
PmNvdW50Lm9mZnNldCgpKSwgRWRnZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc05vZGUpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEtPmNvdW50KSwg
RWRnZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc05vZGUpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRP
SyhjYW5FeGl0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5t
X3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyYXJnc0RhdGEtPmNvdW50LCBGbHVzaGVkSW50MzIpKSwK
QEAgLTg3NCwxNCArODkxLDE1IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICAgICAgYXV0
byBzdG9yZVZhbHVlID0gWyZdIChOb2RlKiB2YWx1ZSwgdW5zaWduZWQgc3RvcmVJbmRleCkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZhcmFyZ3NEYXRh
LT5zdGFydCArIHN0b3JlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVn
LmlzTG9jYWwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRh
dGEgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdGFja0FjY2Vzc0Rh
dGEuYWRkKHJlZywgRmx1c2hlZEpTVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3RhY2ssIG5vZGUt
Pm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLCBPcEluZm8ocmVnLm9mZnNldCgpKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgS2lsbFN0YWNr
LCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwgT3BJbmZvKHJlZykpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgbm9kZS0+b3Jp
Z2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
T3BJbmZvKHJlZy5vZmZzZXQoKSksIEVkZ2UodmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBPcEluZm8ocmVnKSwgRWRnZSh2YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZUluZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNh
bkV4aXQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhkYXRhKSwgRWRnZSh2
YWx1ZSkpOwpAQCAtOTM1LDcgKzk1Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3Qp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3Vt
ZW50c1RvU2tpcCA9IGNhbmRpZGF0ZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUgPSBjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZnJhbWVBcmd1bWVudENvdW50ID0g
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZyYW1lQXJndW1lbnRDb3VudCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzIC0gMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZUFy
Z3VtZW50Q291bnQgPj0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnJhbWVBcmd1bWVudENvdW50IC0gbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAw
OwpAQCAtOTgzLDkgKzEwMDEsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCA9IGNhbmRpZGF0ZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lID0gY2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmcmFtZUFyZ3Vt
ZW50Q291bnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0g
MTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZyYW1lQXJn
dW1lbnRDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGxvYWRJbmRleCA9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
OyBsb2FkSW5kZXggPCBmcmFtZUFyZ3VtZW50Q291bnQ7ICsrbG9hZEluZGV4KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGxvYWRJbmRleCArIDEpICsgaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGxvYWRJbmRleCArIDEpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEg
PSBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZChyZWcsIEZsdXNoZWRKU1ZhbHVlKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGluc2Vy
dGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBHZXRTdGFjaywgbm9kZS0+b3JpZ2luLndpdGhF
eGl0T0soY2FuRXhpdCksCkBAIC0xMDE5LDkgKzEwMzcsNyBAQCBwcml2YXRlOgogCiAgICAgICAg
ICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNhbmRp
ZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLQorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFy
Z3MoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgPiB2YXJhcmdzRGF0YS0+b2Zmc2V0KQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtPSB2YXJhcmdzRGF0YS0+b2Zmc2V0
OwpAQCAtMTAzMCw3ICsxMDQ2LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+PSAxKTsKIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyA8PSB2YXJhcmdzRGF0YS0+bGltaXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlQXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFyYXJnc0RhdGEt
PmxpbWl0IC0gMSA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSwgdmFyYXJnc0RhdGEt
PmxpbWl0LCB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSk7CkBAIC0xMDQ1LDcgKzEwNjAs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbG9hZEluZGV4ID0gc3RvcmVJbmRleCArIHZhcmFyZ3NEYXRhLT5vZmZzZXQ7CiAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2FkSW5kZXggKyAxIDwgaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudChsb2FkSW5kZXggKyAxKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlZyA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhsb2Fk
SW5kZXggKyAxKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFw
aC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlZywgRmx1c2hlZEpTVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIApAQCAtMTIwMSw3ICsxMjE2LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAgPSBjYW5kaWRhdGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDEgKyBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcDsgaSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7
ICsraSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NE
YXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQoCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkg
KyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhp
KSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRmx1c2hlZEpTVmFsdWUpOwogCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKApA
QCAtMTIyNyw3ICsxMjQyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBWZWN0b3I8Tm9kZSo+IGFyZ3VtZW50czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAxICsgdmFyYXJnc0RhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0OyBpIDwg
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgKytpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3Jh
cGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsdXNoZWRKU1Zh
bHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGll
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5j
cHAKaW5kZXggZmYxZDU2ODBmYWUwYTIwMDE0ZDFmMWUxM2RjM2U0OGQ4YzU0MzMxZC4uMWZkYzMw
OTk0ODhmYTk5NmVmYTJjYzBhNjk4MzU4YzBhNDkxNWM2YiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcApAQCAtMzIsMTEgKzMy
LDE1IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotYm9vbCBhcmd1bWVu
dHNJbnZvbHZlU3RhY2tTbG90KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0
dWFsUmVnaXN0ZXIgcmVnKQorYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpCiB7CisgICAgaWYgKG9w
ZXJhbmQuaXNUbXAoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmlydHVhbFJlZ2lz
dGVyIHJlZyA9IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgaWYgKCFpbmxpbmVDYWxs
RnJhbWUpCiAgICAgICAgIHJldHVybiAocmVnLmlzQXJndW1lbnQoKSAmJiByZWcudG9Bcmd1bWVu
dCgpKSB8fCByZWcuaXNIZWFkZXIoKTsKLSAgICAKKwogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUt
PmlzQ2xvc3VyZUNhbGwKICAgICAgICAgJiYgcmVnID09IFZpcnR1YWxSZWdpc3RlcihpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC00NiwxOSArNTAsMTkgQEAgYm9vbCBhcmd1bWVudHNJbnZvbHZlU3Rh
Y2tTbG90KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgLy8gV2UgZG8gbm90IGluY2x1ZGUgZml4
dXBzIGhlcmUgc2luY2UgaXQgaXMgbm90IHJlbGF0ZWQgdG8gfGFyZ3VtZW50c3wsIHJlc3QgcGFy
YW1ldGVycywgYW5kIHZhcmFyZ3MuCi0gICAgdW5zaWduZWQgbnVtQXJndW1lbnRzID0gaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7CisgICAgdW5zaWduZWQg
bnVtQXJndW1lbnRzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1l
bnRTdGFydCA9CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0KSArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCk7CiAgICAgcmV0dXJuIHJlZyA+
PSBhcmd1bWVudFN0YXJ0ICYmIHJlZyA8IGFyZ3VtZW50U3RhcnQgKyBudW1Bcmd1bWVudHM7CiB9
CiAKLWJvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChOb2RlKiBjYW5kaWRhdGUsIFZpcnR1
YWxSZWdpc3RlciByZWcpCitib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoTm9kZSogY2Fu
ZGlkYXRlLCBPcGVyYW5kIG9wZXJhbmQpCiB7Ci0gICAgcmV0dXJuIGFyZ3VtZW50c0ludm9sdmVT
dGFja1Nsb3QoY2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCksIHJl
Zyk7CisgICAgcmV0dXJuIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCksIG9wZXJhbmQpOwogfQogCiBOb2RlKiBlbWl0
Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCi0gICAgSW5zZXJ0aW9uU2V0JiBpbnNlcnRp
b25TZXQsIE5vZGUqIGFyZ3VtZW50cywgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luIG9y
aWdpbikKKyAgICBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCwgTm9kZSogYXJndW1lbnRzLCB1
bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBib29sIGFkZFRoaXMpCiB7CiAg
ICAgR3JhcGgmIGdyYXBoID0gaW5zZXJ0aW9uU2V0LmdyYXBoKCk7CiAKQEAgLTY5LDExICs3Mywx
NCBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAgICAgICAgIHx8
IGFyZ3VtZW50cy0+b3AoKSA9PSBOZXdBcnJheUJ1ZmZlcgogICAgICAgICB8fCBhcmd1bWVudHMt
Pm9wKCkgPT0gUGhhbnRvbURpcmVjdEFyZ3VtZW50cyB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhh
bnRvbUNsb25lZEFyZ3VtZW50cwogICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRv
bUNyZWF0ZVJlc3QgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZlcgot
ICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCwK
KyAgICAgICAgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQg
fHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21TcHJlYWQsCiAgICAgICAgIGFyZ3VtZW50cy0+
b3AoKSk7CiAKKyAgICBpZiAoYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21TcHJlYWQpCisgICAg
ICAgIHJldHVybiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoaW5zZXJ0aW9uU2V0
LCBhcmd1bWVudHMtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZUluZGV4LCBvcmlnaW4sIGFkZFRoaXMp
OworCiAgICAgaWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFk
KSB7Ci0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mTm9uU3ByZWFkQXJndW1lbnRzID0gMDsKKyAg
ICAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25TcHJlYWRBcmd1bWVudHMgPSBhZGRUaGlzOwogICAg
ICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IGFyZ3VtZW50cy0+Yml0VmVjdG9yKCk7CiAgICAg
ICAgIE5vZGUqIGN1cnJlbnRTdW0gPSBudWxscHRyOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgYXJndW1lbnRzLT5udW1DaGlsZHJlbigpOyBpKyspIHsKQEAgLTEwMyw3ICsxMTAs
NyBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAKICAgICBpZiAo
YXJndW1lbnRzLT5vcCgpID09IE5ld0FycmF5QnVmZmVyIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQ
aGFudG9tTmV3QXJyYXlCdWZmZXIpIHsKICAgICAgICAgcmV0dXJuIGluc2VydGlvblNldC5pbnNl
cnRDb25zdGFudCgKLSAgICAgICAgICAgIG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihhcmd1
bWVudHMtPmNhc3RPcGVyYW5kPEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oKS0+bGVuZ3RoKCkpKTsK
KyAgICAgICAgICAgIG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihhcmd1bWVudHMtPmNhc3RP
cGVyYW5kPEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oKS0+bGVuZ3RoKCkgKyBhZGRUaGlzKSk7CiAg
ICAgfQogICAgIAogICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gYXJndW1l
bnRzLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CkBAIC0xMTMsNyArMTIwLDcg
QEAgTm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAogICAgICAgICBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGFyZ3VtZW50cy0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAo
KTsKICAgICAKICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlz
VmFyYXJncygpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50c1NpemUgPSBpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsKKyAgICAgICAgdW5zaWduZWQg
YXJndW1lbnRzU2l6ZSA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgLSAhYWRkVGhpczsKICAgICAgICAgaWYgKGFyZ3VtZW50c1NpemUgPj0gbnVtYmVyT2ZBcmd1
bWVudHNUb1NraXApCiAgICAgICAgICAgICBhcmd1bWVudHNTaXplIC09IG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwOwogICAgICAgICBlbHNlCkBAIC0xMjksMTQgKzEzNiwxNCBAQCBOb2RlKiBlbWl0
Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAgICAgICAgIG5vZGVJbmRleCwgU3BlY0lu
dDMyT25seSwgQXJpdGhTdWIsIG9yaWdpbiwgT3BJbmZvKEFyaXRoOjpVbmNoZWNrZWQpLAogICAg
ICAgICBFZGdlKGFyZ3VtZW50Q291bnQsIEludDMyVXNlKSwKICAgICAgICAgaW5zZXJ0aW9uU2V0
Lmluc2VydENvbnN0YW50Rm9yVXNlKAotICAgICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4sIGpz
TnVtYmVyKDEgKyBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCksIEludDMyVXNlKSk7CisgICAgICAg
ICAgICBub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIobnVtYmVyT2ZBcmd1bWVudHNUb1NraXAg
KyAhYWRkVGhpcyksIEludDMyVXNlKSk7CiAKICAgICBpZiAobnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXApIHsKICAgICAgICAgLy8gVGhlIGFib3ZlIHN1YnRyYWN0aW9uIG1heSBwcm9kdWNlIGEgbmVn
YXRpdmUgbnVtYmVyIGlmIHRoaXMgbnVtYmVyIGlzIG5vbi16ZXJvLiBXZSBjb3JyZWN0IHRoYXQg
aGVyZS4KICAgICAgICAgcmVzdWx0ID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAg
ICAgICBub2RlSW5kZXgsIFNwZWNJbnQzMk9ubHksIEFyaXRoTWF4LCBvcmlnaW4sIAogICAgICAg
ICAgICAgRWRnZShyZXN1bHQsIEludDMyVXNlKSwgCi0gICAgICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0Q29uc3RhbnRGb3JVc2Uobm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKDApLCBJbnQz
MlVzZSkpOworICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50Rm9yVXNlKG5v
ZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYWRkVGhpcykp
LCBJbnQzMlVzZSkpOwogICAgICAgICByZXN1bHQtPnNldFJlc3VsdChOb2RlUmVzdWx0SW50MzIp
OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1
bWVudHNVdGlsaXRpZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRz
VXRpbGl0aWVzLmgKaW5kZXggOWE3NzE4ZmJiZjU0N2IyZjZhZTEwMWRhZjM3NGEwNmEyYzNkZGYx
Mi4uNzRmOTM5ZTgxNjIyZDQwMjQ2ZTIzNTVkNTA5OGE5ZWQyYTg1MjEwZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oCkBAIC0zMSwx
MSArMzEsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1ib29sIGFy
Z3VtZW50c0ludm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVy
KTsKLWJvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChOb2RlKiBjYW5kaWRhdGUsIFZpcnR1
YWxSZWdpc3Rlcik7Citib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZy
YW1lKiwgT3BlcmFuZCk7Citib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoTm9kZSogY2Fu
ZGlkYXRlLCBPcGVyYW5kKTsKIAogTm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVu
Z3RoKAotICAgIEluc2VydGlvblNldCYsIE5vZGUqIGFyZ3VtZW50cywgdW5zaWduZWQgbm9kZUlu
ZGV4LCBOb2RlT3JpZ2luKTsKKyAgICBJbnNlcnRpb25TZXQmLCBOb2RlKiBhcmd1bWVudHMsIHVu
c2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiwgYm9vbCBhZGRUaGlzID0gZmFsc2UpOwogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgKaW5kZXggOTZkYWMzOWE0NDRmZmJkM2NlNTQz
ZjU3ZjM2Y2Q2MWRlY2MyOGJkNC4uODk3YzcwZGZmYmEwNjZiNjQ5Y2FmZGNjMWVmMDkzMzc2ODEw
NGQxMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0
cmFjdFN0YXRlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0
cmFjdFN0YXRlLmgKQEAgLTEzOSw4ICsxMzksNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRh
aWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgfQogICAgIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzKCkg
Y29uc3QgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7IH0K
LSAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKGludCBvcGVyYW5kKSB7IHJldHVybiBtX2Jsb2Nr
LT52YWx1ZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsgfQotICAgIEFic3RyYWN0VmFsdWUmIG9w
ZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0
VGFpbC5vcGVyYW5kKG9wZXJhbmQpOyB9CisgICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChPcGVy
YW5kIG9wZXJhbmQpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5vcGVyYW5kKG9wZXJh
bmQpOyB9CiAgICAgQWJzdHJhY3RWYWx1ZSYgbG9jYWwoc2l6ZV90IGluZGV4KSB7IHJldHVybiBt
X2Jsb2NrLT52YWx1ZXNBdFRhaWwubG9jYWwoaW5kZXgpOyB9CiAgICAgQWJzdHJhY3RWYWx1ZSYg
YXJndW1lbnQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwuYXJn
dW1lbnQoaW5kZXgpOyB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0F2YWlsYWJpbGl0eU1hcC5jcHAKaW5kZXggNzc0M2U3ZDAxZjFjYWQ3ODFkODRhYjAzZDNjMDlj
NzdmODAyOWJhNS4uYzJiNTVhYTVjNGE1MjI5YjFiMWE0NDMxYzE4N2FkZWY0NmMzZGIyNSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcApA
QCAtNjUsMTAgKzY1LDEwIEBAIHZvaWQgQXZhaWxhYmlsaXR5TWFwOjpwcnVuZUhlYXAoKQogCiB2
b2lkIEF2YWlsYWJpbGl0eU1hcDo6cHJ1bmVCeUxpdmVuZXNzKEdyYXBoJiBncmFwaCwgQ29kZU9y
aWdpbiB3aGVyZSkKIHsKLSAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGxvY2Fsc0NvcHkobV9s
b2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwgbV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSwgQXZh
aWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpKTsKKyAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGxv
Y2Fsc0NvcHkoT3BlcmFuZHNMaWtlLCBtX2xvY2FscywgQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJs
ZSgpKTsKICAgICBncmFwaC5mb3JBbGxMaXZlSW5CeXRlY29kZSgKICAgICAgICAgd2hlcmUsCi0g
ICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgeworICAgICAgICBbJl0gKE9wZXJhbmQg
cmVnKSB7CiAgICAgICAgICAgICBsb2NhbHNDb3B5Lm9wZXJhbmQocmVnKSA9IG1fbG9jYWxzLm9w
ZXJhbmQocmVnKTsKICAgICAgICAgfSk7CiAgICAgbV9sb2NhbHMgPSBXVEZNb3ZlKGxvY2Fsc0Nv
cHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxp
dHlNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmgK
aW5kZXggNTM1NTI1NjAyM2RkY2YyODBkYzU5NWIzM2E3YzdmZGVjNTRlNjRmMC4uODBjMTJiZjE4
MDI1YTU2MTA1OTZkYTI0ZTIzYzAyNWYyYWJlNGYyMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5oCkBAIC02Niw5ICs2Niw5IEBAIHN0cnVjdCBB
dmFpbGFiaWxpdHlNYXAgewogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNG
dW5jdG9yLCB0eXBlbmFtZSBBZGRGdW5jdG9yPgotICAgIHZvaWQgY2xvc2VTdGFydGluZ1dpdGhM
b2NhbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBjb25zdCBIYXNGdW5jdG9yJiBoYXMsIGNvbnN0IEFk
ZEZ1bmN0b3ImIGFkZCkKKyAgICB2b2lkIGNsb3NlU3RhcnRpbmdXaXRoTG9jYWwoT3BlcmFuZCBv
cCwgY29uc3QgSGFzRnVuY3RvciYgaGFzLCBjb25zdCBBZGRGdW5jdG9yJiBhZGQpCiAgICAgewot
ICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gbV9sb2NhbHMub3BlcmFuZChyZWcp
OworICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gbV9sb2NhbHMub3BlcmFuZChv
cCk7CiAgICAgICAgIGlmICghYXZhaWxhYmlsaXR5Lmhhc05vZGUoKSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Jhc2ljQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2Nr
LmNwcAppbmRleCBjOGQxZDE3ZDZkOWM3NTUwYzRiMWJlNTBmMGVkOWY3MjYxNzZmMjIzLi5lNDhl
MGMyNGYwMzk3ZjUxMTdkY2ZhNzIxODI0N2U3MjlkNjVjOTNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBERUZJTkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVO
VElGSUVSKEJhc2ljQmxvY2spOwogCi1CYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2Nh
bHMsIGZsb2F0IGV4ZWN1dGlvbkNvdW50KQorQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVt
TG9jYWxzLCB1bnNpZ25lZCBudW1UbXBzLCBmbG9hdCBleGVjdXRpb25Db3VudCkKICAgICA6IGJ5
dGVjb2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKICAgICAsIGluZGV4KE5vQmxvY2spCiAgICAgLCBj
ZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdEhlYWQoU3RydWN0dXJlc0FyZVdhdGNoZWQpCkBAIC01
MCwxMSArNTAsMTEgQEAgQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVj
b2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWcKICAgICAsIGlzTGlua2VkKGZh
bHNlKQogI2VuZGlmCiAgICAgLCBpc1JlYWNoYWJsZShmYWxzZSkKLSAgICAsIHZhcmlhYmxlc0F0
SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKLSAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1B
cmd1bWVudHMsIG51bUxvY2FscykKLSAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51
bUxvY2FscykKLSAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKLSAg
ICAsIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2Fs
cywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKQorICAgICwgdmFyaWFibGVzQXRIZWFkKG51bUFy
Z3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQorICAgICwgdmFyaWFibGVzQXRUYWlsKG51bUFy
Z3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQorICAgICwgdmFsdWVzQXRIZWFkKG51bUFyZ3Vt
ZW50cywgbnVtTG9jYWxzLCBudW1UbXBzKQorICAgICwgdmFsdWVzQXRUYWlsKG51bUFyZ3VtZW50
cywgbnVtTG9jYWxzLCBudW1UbXBzKQorICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRI
ZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1UbXBzLCBBYnN0cmFjdFZhbHVlOjpmdWxs
VG9wKCkpCiAgICAgLCBleGVjdXRpb25Db3VudChleGVjdXRpb25Db3VudCkKIHsKIH0KQEAgLTcy
LDYgKzcyLDE1IEBAIHZvaWQgQmFzaWNCbG9jazo6ZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051
bUxvY2FscykKICAgICBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQuZW5zdXJlTG9jYWxz
KG5ld051bUxvY2FscywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKTsKIH0KIAordm9pZCBCYXNp
Y0Jsb2NrOjplbnN1cmVUbXBzKHVuc2lnbmVkIG5ld051bVRtcHMpCit7CisgICAgdmFyaWFibGVz
QXRIZWFkLmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAgdmFyaWFibGVzQXRUYWlsLmVuc3Vy
ZVRtcHMobmV3TnVtVG1wcyk7CisgICAgdmFsdWVzQXRIZWFkLmVuc3VyZVRtcHMobmV3TnVtVG1w
cyk7CisgICAgdmFsdWVzQXRUYWlsLmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7CisgICAgaW50ZXJz
ZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkLmVuc3VyZVRtcHMobmV3TnVtVG1wcywgQWJzdHJhY3RW
YWx1ZTo6ZnVsbFRvcCgpKTsKK30KKwogdm9pZCBCYXNpY0Jsb2NrOjpyZXBsYWNlVGVybWluYWwo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogewogICAgIE5vZGVBbmRJbmRleCByZXN1bHQgPSBm
aW5kVGVybWluYWwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QmFzaWNCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgK
aW5kZXggZDQ1NzE3NWU4YjcxNTIzNWZjNzlkZDEyMjkwYzllZmQ5NzVlYjdjYi4uZDJjNWFlOWMx
M2YzYjRlNzc5Zjk4YTE0YzE3MDM3ZDk4Zjk2ZDlhYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYXNpY0Jsb2NrLmgKQEAgLTQ5LDExICs0OSwxMiBAQCBERUNMQVJFX0FMTE9DQVRP
Ul9XSVRIX0hFQVBfSURFTlRJRklFUihCYXNpY0Jsb2NrKTsKIHN0cnVjdCBCYXNpY0Jsb2NrIDog
UmVmQ291bnRlZDxCYXNpY0Jsb2NrPiB7CiAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NB
VEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKEJhc2ljQmxvY2spOwogICAgIEJhc2ljQmxvY2soCi0g
ICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRz
LCB1bnNpZ25lZCBudW1Mb2NhbHMsCisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVCZWdp
biwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMsIHVuc2lnbmVkIG51
bVRtcHMsCiAgICAgICAgIGZsb2F0IGV4ZWN1dGlvbkNvdW50KTsKICAgICB+QmFzaWNCbG9jaygp
OwogICAgIAogICAgIHZvaWQgZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxvY2Fscyk7Cisg
ICAgdm9pZCBlbnN1cmVUbXBzKHVuc2lnbmVkIG5ld051bVRtcHMpOwogICAgIAogICAgIHNpemVf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ub2Rlcy5zaXplKCk7IH0KICAgICBib29sIGlzRW1w
dHkoKSBjb25zdCB7IHJldHVybiAhc2l6ZSgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwCmluZGV4IDc1MDhlMjE5ZGM3YzU4M2Ri
OWVhOGZjZTY0Njg1ODk5OWUwNDYwZjkuLjAwOGNmNTIyNjk1N2M5YTgzNTg1YzVlNWUyYzEyNWYy
ZjhjZTRiMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJ
bnNlcnRpb25TZXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJ
bnNlcnRpb25TZXQuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHZvaWQgQmxvY2tJbnNlcnRpb25TZXQ6
Omluc2VydChzaXplX3QgaW5kZXgsIFJlZjxCYXNpY0Jsb2NrPiYmIGJsb2NrKQogCiBCYXNpY0Js
b2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHNpemVfdCBpbmRleCwgZmxvYXQgZXhlY3V0
aW9uQ291bnQpCiB7Ci0gICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBC
YXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXgoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRI
ZWFkLm51bWJlck9mQXJndW1lbnRzKCksIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVh
ZC5udW1iZXJPZkxvY2FscygpLCBleGVjdXRpb25Db3VudCkpOworICAgIFJlZjxCYXNpY0Jsb2Nr
PiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCksIG1fZ3Jh
cGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLCBtX2dyYXBo
LmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSwgbV9ncmFwaC5ibG9j
aygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mVG1wcygpLCBleGVjdXRpb25Db3VudCkpOwog
ICAgIGJsb2NrLT5pc1JlYWNoYWJsZSA9IHRydWU7CiAgICAgYXV0byogcmVzdWx0ID0gYmxvY2su
cHRyKCk7CiAgICAgaW5zZXJ0KGluZGV4LCBXVEZNb3ZlKGJsb2NrKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IDdlZmZhZDA3ZjIy
NDI1OGYwN2EyZTA0ZjZhYmZlZTA2MGIyZmFkNTAuLjA1N2ZkYjQwMmY4YjZkOTY4ZjIzMDM1Y2E2
N2U3ZDJlMmRmYzBiNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCkBAIC0xMTMsNiArMTEzLDcgQEAgcHVibGljOgogICAgICAgICAsIG1f
Y29uc3RhbnRPbmUoZ3JhcGguZnJlZXplKGpzTnVtYmVyKDEpKSkKICAgICAgICAgLCBtX251bUFy
Z3VtZW50cyhtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKQogICAgICAgICAsIG1fbnVtTG9j
YWxzKG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkKKyAgICAgICAgLCBtX251bVRtcHMo
bV9jb2RlQmxvY2stPm51bVRtcHMoKSkKICAgICAgICAgLCBtX3BhcmFtZXRlclNsb3RzKDApCiAg
ICAgICAgICwgbV9udW1QYXNzZWRWYXJBcmdzKDApCiAgICAgICAgICwgbV9pbmxpbmVTdGFja1Rv
cCgwKQpAQCAtMTQxLDYgKzE0MiwxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9ncmFwaC5i
bG9jayhpKS0+ZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7CiAgICAgfQogCisgICAgdm9pZCBl
bnN1cmVUbXBzKHVuc2lnbmVkIG5ld051bVRtcHMpCisgICAgeworICAgICAgICBWRVJCT1NFX0xP
RygiICAgZW5zdXJlVG1wczogdHJ5aW5nIHRvIHJhaXNlIG1fbnVtVG1wcyBmcm9tICIsIG1fbnVt
VG1wcywgIiB0byAiLCBuZXdOdW1UbXBzLCAiXG4iKTsKKyAgICAgICAgaWYgKG5ld051bVRtcHMg
PD0gbV9udW1UbXBzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX251bVRtcHMgPSBu
ZXdOdW1UbXBzOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ3JhcGgubnVtQmxv
Y2tzKCk7ICsraSkKKyAgICAgICAgICAgIG1fZ3JhcGguYmxvY2soaSktPmVuc3VyZVRtcHMobmV3
TnVtVG1wcyk7CisgICAgfQorCisKICAgICAvLyBIZWxwZXIgZm9yIG1pbiBhbmQgbWF4LgogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+CiAgICAgYm9vbCBoYW5kbGVNaW5NYXgo
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9mZnNldCwg
aW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNl
cnRDaGVja3MpOwpAQCAtMjcyLDcgKzI4NCwxNyBAQCBwcml2YXRlOgogICAgIHZvaWQgbGlua0Js
b2NrKEJhc2ljQmxvY2sqLCBWZWN0b3I8QmFzaWNCbG9jayo+JiBwb3NzaWJsZVRhcmdldHMpOwog
ICAgIHZvaWQgbGlua0Jsb2NrcyhWZWN0b3I8QmFzaWNCbG9jayo+JiB1bmxpbmtlZEJsb2Nrcywg
VmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKTsKICAgICAKLSAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICB2b2lkIHByb2dyZXNzVG9OZXh0Q2hlY2twb2ludCgpCisgICAgeworICAgICAgICBt
X2N1cnJlbnRJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgub2Zmc2V0KCksIG1f
Y3VycmVudEluZGV4LmNoZWNrcG9pbnQoKSArIDEpOworICAgICAgICAvLyBBdCB0aGlzIHBvaW50
LCBpdCdzIGFnYWluIE9LIHRvIE9TUiBleGl0LgorICAgICAgICBtX2V4aXRPSyA9IHRydWU7Cisg
ICAgICAgIGFkZFRvR3JhcGgoRXhpdE9LKTsKKworICAgICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1
ZSgpOworICAgIH0KKworICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFibGVBY2Nlc3NE
YXRhKE9wZXJhbmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc0Nv
bnN0YW50KCkpOwogICAgICAgICAKQEAgLTI4MSwxNiArMzAzLDE0IEBAIHByaXZhdGU6CiAgICAg
fQogICAgIAogICAgIC8vIEdldC9TZXQgdGhlIG9wZXJhbmRzL3Jlc3VsdCBvZiBhIGJ5dGVjb2Rl
IGluc3RydWN0aW9uLgotICAgIE5vZGUqIGdldERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKKyAgICBOb2RlKiBnZXREaXJlY3QoT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAg
QVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CiAKLSAgICAgICAgLy8gSXMgdGhpcyBhbiBh
cmd1bWVudD8KICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQotICAgICAgICAgICAg
cmV0dXJuIGdldEFyZ3VtZW50KG9wZXJhbmQpOworICAgICAgICAgICAgcmV0dXJuIGdldEFyZ3Vt
ZW50KG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogCi0gICAgICAgIC8vIE11c3QgYmUgYSBs
b2NhbC4KLSAgICAgICAgcmV0dXJuIGdldExvY2FsKG9wZXJhbmQpOworICAgICAgICByZXR1cm4g
Z2V0TG9jYWxPclRtcChvcGVyYW5kKTsKICAgICB9CiAKICAgICBOb2RlKiBnZXQoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCkBAIC0zMDAsOCArMzIwLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IHVuc2lnbmVkIG9sZFNpemUgPSBtX2NvbnN0YW50cy5zaXplKCk7CiAgICAgICAgICAgICBpZiAo
Y29uc3RhbnRJbmRleCA+PSBvbGRTaXplIHx8ICFtX2NvbnN0YW50c1tjb25zdGFudEluZGV4XSkg
ewogICAgICAgICAgICAgICAgIGNvbnN0IENvZGVCbG9jayYgY29kZUJsb2NrID0gKm1faW5saW5l
U3RhY2tUb3AtPm1fY29kZUJsb2NrOwotICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBj
b2RlQmxvY2suZ2V0Q29uc3RhbnQob3BlcmFuZC5vZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAg
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiA9IGNvZGVC
bG9jay5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihvcGVyYW5kLm9mZnNldCgpKTsK
KyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gY29kZUJsb2NrLmdldENvbnN0YW50KG9w
ZXJhbmQpOworICAgICAgICAgICAgICAgIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBzb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24gPSBjb2RlQmxvY2suY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24ob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50SW5kZXggPj0gb2xk
U2l6ZSkgewogICAgICAgICAgICAgICAgICAgICBtX2NvbnN0YW50cy5ncm93KGNvbnN0YW50SW5k
ZXggKyAxKTsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkU2l6ZTsg
aSA8IG1fY29uc3RhbnRzLnNpemUoKTsgKytpKQpAQCAtMzYwLDkgKzM4MCwxMCBAQCBwcml2YXRl
OgogICAgICAgICAvLyBpbml0aWFsaXppbmcgbG9jYWxzIGF0IHRoZSB0b3Agb2YgYSBmdW5jdGlv
bi4KICAgICAgICAgSW1tZWRpYXRlTmFrZWRTZXQKICAgICB9OwotICAgIE5vZGUqIHNldERpcmVj
dChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9
IE5vcm1hbFNldCkKKworICAgIE5vZGUqIHNldERpcmVjdChPcGVyYW5kIG9wZXJhbmQsIE5vZGUq
IHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAgewotICAgICAgICBhZGRU
b0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhvcGVyYW5kLm9mZnNldCgpKSwgdmFsdWUpOworICAgICAg
ICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhvcGVyYW5kKSwgdmFsdWUpOwogCiAgICAgICAg
IC8vIFdlIGNhbid0IGV4aXQgYW55bW9yZSBiZWNhdXNlIG91ciBPU1IgZXhpdCBzdGF0ZSBoYXMg
Y2hhbmdlZC4KICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsKQEAgLTM3Niw3ICszOTcsNyBAQCBw
cml2YXRlOgogICAgICAgICAKICAgICAgICAgcmV0dXJuIGRlbGF5ZWQuZXhlY3V0ZSh0aGlzKTsK
ICAgICB9Ci0gICAgCisKICAgICB2b2lkIHByb2Nlc3NTZXRMb2NhbFF1ZXVlKCkKICAgICB7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NldExvY2FsUXVldWUuc2l6ZSgpOyAr
K2kpCkBAIC0zOTQsMTggKzQxNSwxNyBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQobm9kZS0+
b3AoKSA9PSBHZXRMb2NhbCk7CiAgICAgICAgIEFTU0VSVChub2RlLT5vcmlnaW4uc2VtYW50aWMu
Ynl0ZWNvZGVJbmRleCgpID09IG1fY3VycmVudEluZGV4KTsKICAgICAgICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7
Ci0gICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleShtX2N1cnJlbnRJbmRleCwg
bm9kZS0+bG9jYWwoKSk7CisgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSht
X2N1cnJlbnRJbmRleCwgbm9kZS0+b3BlcmFuZCgpKTsKICAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiA9IG1faW5saW5lU3RhY2tUb3AtPm1fbGF6eU9wZXJhbmRzLnByZWRpY3Rpb24o
bG9ja2VyLCBrZXkpOwogICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGlj
dChwcmVkaWN0aW9uKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCiAgICAgLy8gVXNl
ZCBpbiBpbXBsZW1lbnRpbmcgZ2V0L3NldCwgYWJvdmUsIHdoZXJlIHRoZSBvcGVyYW5kIGlzIGEg
bG9jYWwgdmFyaWFibGUuCi0gICAgTm9kZSogZ2V0TG9jYWwoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgTm9kZSogZ2V0TG9jYWxPclRtcChPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAg
ICAgICB1bnNpZ25lZCBsb2NhbCA9IG9wZXJhbmQudG9Mb2NhbCgpOwotCi0gICAgICAgIE5vZGUq
IG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKTsKKyAg
ICAgICAgQVNTRVJUKG9wZXJhbmQuaXNUbXAoKSB8fCBvcGVyYW5kLmlzTG9jYWwoKSk7CisgICAg
ICAgIE5vZGUqJiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5k
KG9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgLy8gVGhpcyBoYXMgdHdvIGdvYWxzOiAxKSBs
aW5rIHRvZ2V0aGVyIHZhcmlhYmxlIGFjY2VzcyBkYXRhcywgYW5kIDIpCiAgICAgICAgIC8vIHRy
eSB0byBhdm9pZCBjcmVhdGluZyByZWR1bmRhbnQgR2V0TG9jYWxzLiAoMSkgaXMgcmVxdWlyZWQg
Zm9yCkBAIC00MzAsMjAgKzQ1MCwyNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgdmFyaWFibGUg
PSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CiAgICAgICAgIAogICAgICAgICBub2Rl
ID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcElu
Zm8odmFyaWFibGUpKSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
bG9jYWwobG9jYWwpID0gbm9kZTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQotICAgIE5v
ZGUqIHNldExvY2FsKGNvbnN0IENvZGVPcmlnaW4mIHNlbWFudGljT3JpZ2luLCBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkK
KyAgICBOb2RlKiBzZXRMb2NhbE9yVG1wKGNvbnN0IENvZGVPcmlnaW4mIHNlbWFudGljT3JpZ2lu
LCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxT
ZXQpCiAgICAgeworICAgICAgICBBU1NFUlQob3BlcmFuZC5pc1RtcCgpIHx8IG9wZXJhbmQuaXNM
b2NhbCgpKTsKICAgICAgICAgU2V0Rm9yU2NvcGU8Q29kZU9yaWdpbj4gb3JpZ2luQ2hhbmdlKG1f
Y3VycmVudFNlbWFudGljT3JpZ2luLCBzZW1hbnRpY09yaWdpbik7CiAKLSAgICAgICAgdW5zaWdu
ZWQgbG9jYWwgPSBvcGVyYW5kLnRvTG9jYWwoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzZXRN
b2RlICE9IEltbWVkaWF0ZU5ha2VkU2V0KSB7Ci0gICAgICAgICAgICBBcmd1bWVudFBvc2l0aW9u
KiBhcmd1bWVudFBvc2l0aW9uID0gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JMb2NhbChvcGVyYW5k
KTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
b3BlcmFuZC52YWx1ZSgpKSA+PSBtX251bVRtcHMpIHsKKyAgICAgICAgICAgIGlmIChpbmxpbmVD
YWxsRnJhbWUoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG4oKmlubGluZUNhbGxGcmFtZSgp
KTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiQmFkIG9wZXJhbmQ6ICIsIG9wZXJhbmQsICIgYnV0
IGN1cnJlbnQgbnVtYmVyIG9mIHRtcHMgaXM6ICIsIG1fbnVtVG1wcywgIiBjb2RlIGJsb2NrIGhh
czogIiwgbV9wcm9maWxlZEJsb2NrLT5udW1UbXBzKCksICIgdG1wcy4iKTsKKyAgICAgICAgICAg
IENSQVNIKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2V0TW9kZSAhPSBJbW1lZGlhdGVO
YWtlZFNldCAmJiAhb3BlcmFuZC5pc1RtcCgpKSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgIEFyZ3VtZW50
UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24gPSBmaW5kQXJndW1lbnRQb3NpdGlvbkZvckxvY2Fs
KHJlZyk7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRQb3NpdGlvbikKICAgICAgICAgICAgICAg
ICBmbHVzaERpcmVjdChvcGVyYW5kLCBhcmd1bWVudFBvc2l0aW9uKTsKLSAgICAgICAgICAgIGVs
c2UgaWYgKG1fZ3JhcGgubmVlZHNTY29wZVJlZ2lzdGVyKCkgJiYgb3BlcmFuZCA9PSBtX2NvZGVC
bG9jay0+c2NvcGVSZWdpc3RlcigpKQorICAgICAgICAgICAgZWxzZSBpZiAobV9ncmFwaC5uZWVk
c1Njb3BlUmVnaXN0ZXIoKSAmJiByZWcgPT0gbV9jb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSkK
ICAgICAgICAgICAgICAgICBmbHVzaChvcGVyYW5kKTsKICAgICAgICAgfQogCkBAIC00NTMsNyAr
NDc5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZUNoZWNr
QXJyYXlIb2lzdGluZ0ZhaWxlZCgKICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZXhp
dFByb2ZpbGUuaGFzRXhpdFNpdGUoc2VtYW50aWNPcmlnaW4uYnl0ZWNvZGVJbmRleCgpLCBCYWRJ
bmRleGluZ1R5cGUpKTsKICAgICAgICAgTm9kZSogbm9kZSA9IGFkZFRvR3JhcGgoU2V0TG9jYWws
IE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCB2YWx1ZSk7Ci0gICAgICAgIG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwpID0gbm9kZTsKKyAgICAgICAgbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0gbm9kZTsKICAgICAg
ICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCkBAIC00ODUsMjAgKzUxMSwyMSBAQCBwcml2YXRlOgog
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50
KSA9IG5vZGU7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KLSAgICBOb2RlKiBzZXRBcmd1
bWVudChjb25zdCBDb2RlT3JpZ2luJiBzZW1hbnRpY09yaWdpbiwgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisgICAgTm9k
ZSogc2V0QXJndW1lbnQoY29uc3QgQ29kZU9yaWdpbiYgc2VtYW50aWNPcmlnaW4sIE9wZXJhbmQg
b3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKICAgICB7
CiAgICAgICAgIFNldEZvclNjb3BlPENvZGVPcmlnaW4+IG9yaWdpbkNoYW5nZShtX2N1cnJlbnRT
ZW1hbnRpY09yaWdpbiwgc2VtYW50aWNPcmlnaW4pOwogCi0gICAgICAgIHVuc2lnbmVkIGFyZ3Vt
ZW50ID0gb3BlcmFuZC50b0FyZ3VtZW50KCk7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcg
PSBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICB1bnNpZ25lZCBhcmd1bWVudCA9
IHJlZy50b0FyZ3VtZW50KCk7CiAgICAgICAgIEFTU0VSVChhcmd1bWVudCA8IG1fbnVtQXJndW1l
bnRzKTsKICAgICAgICAgCi0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nl
c3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOworICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShy
ZWcpOwogCiAgICAgICAgIC8vIEFsd2F5cyBmbHVzaCBhcmd1bWVudHMsIGV4Y2VwdCBmb3IgJ3Ro
aXMnLiBJZiAndGhpcycgaXMgY3JlYXRlZCBieSB1cywKICAgICAgICAgLy8gdGhlbiBtYWtlIHN1
cmUgdGhhdCBpdCdzIG5ldmVyIHVuYm94ZWQuCiAgICAgICAgIGlmIChhcmd1bWVudCB8fCBtX2dy
YXBoLm5lZWRzRmx1c2hlZFRoaXMoKSkgewogICAgICAgICAgICAgaWYgKHNldE1vZGUgIT0gSW1t
ZWRpYXRlTmFrZWRTZXQpCi0gICAgICAgICAgICAgICAgZmx1c2hEaXJlY3Qob3BlcmFuZCk7Cisg
ICAgICAgICAgICAgICAgZmx1c2hEaXJlY3QocmVnKTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgaWYgKCFhcmd1bWVudCAmJiBtX2NvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkg
PT0gQ29kZUZvckNvbnN0cnVjdCkKQEAgLTUzNCwxNCArNTYxLDE2IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBpbnQgYXJndW1lbnQgPSBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZC5vZmZzZXQoKSAt
IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvQXJndW1lbnQoKTsKICAgICAgICAgICAg
IHJldHVybiBzdGFjay0+bV9hcmd1bWVudFBvc2l0aW9uc1thcmd1bWVudF07CiAgICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAK
LSAgICBBcmd1bWVudFBvc2l0aW9uKiBmaW5kQXJndW1lbnRQb3NpdGlvbihWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKKyAgICBBcmd1bWVudFBvc2l0aW9uKiBmaW5kQXJndW1lbnRQb3NpdGlvbihP
cGVyYW5kIG9wZXJhbmQpCiAgICAgeworICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQo
KSkKICAgICAgICAgICAgIHJldHVybiBmaW5kQXJndW1lbnRQb3NpdGlvbkZvckFyZ3VtZW50KG9w
ZXJhbmQudG9Bcmd1bWVudCgpKTsKLSAgICAgICAgcmV0dXJuIGZpbmRBcmd1bWVudFBvc2l0aW9u
Rm9yTG9jYWwob3BlcmFuZCk7CisgICAgICAgIHJldHVybiBmaW5kQXJndW1lbnRQb3NpdGlvbkZv
ckxvY2FsKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEFkZEZsdXNoRGlyZWN0RnVuYz4KQEAgLTU1MiwxNCArNTgxLDE0IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBBU1NFUlQoIW1fZ3JhcGguaGFzRGVidWdnZXJFbmFibGVkKCkpOwog
ICAgICAgICAgICAgbnVtQXJndW1lbnRzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNXaXRo
Rml4dXAuc2l6ZSgpOwogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJl
Q2FsbCkKLSAgICAgICAgICAgICAgICBhZGRGbHVzaERpcmVjdChpbmxpbmVDYWxsRnJhbWUsIHJl
bWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpKSk7CisgICAgICAgICAgICAgICAgYWRkRmx1c2hEaXJlY3QoaW5saW5lQ2FsbEZy
YW1lLCByZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUp
KTsKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAgICAg
ICAgICAgICAgIGFkZEZsdXNoRGlyZWN0KGlubGluZUNhbGxGcmFtZSwgcmVtYXBPcGVyYW5kKGlu
bGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKSkpOworICAgICAgICAgICAgICAgIGFkZEZsdXNoRGlyZWN0KGlubGlu
ZUNhbGxGcmFtZSwgcmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICBudW1Bcmd1bWVudHMgPSBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxG
cmFtZSktPm51bVBhcmFtZXRlcnMoKTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50
ID0gbnVtQXJndW1lbnRzOyBhcmd1bWVudC0tOykKLSAgICAgICAgICAgIGFkZEZsdXNoRGlyZWN0
KGlubGluZUNhbGxGcmFtZSwgcmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKSk7CisgICAgICAgICAgICBhZGRGbHVzaERpcmVj
dChpbmxpbmVDYWxsRnJhbWUsIHJlbWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhhcmd1bWVudCkpKTsKIAogICAgICAgICBp
ZiAobV9ncmFwaC5uZWVkc1Njb3BlUmVnaXN0ZXIoKSkKICAgICAgICAgICAgIGFkZEZsdXNoRGly
ZWN0KG51bGxwdHIsIG1fZ3JhcGgubV9jb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSk7CkBAIC01
NzcsNiArNjA2LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpOwog
ICAgICAgICAgICAgICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxsTGl2ZW5lc3MgPSBtX2dy
YXBoLmxpdmVuZXNzRm9yKGNvZGVCbG9jayk7CisgICAgICAgICAgICAgICAgLy8gTm90ZTogV2Ug
ZG9uJ3QgbmVlZCB0byBoYW5kbGUgdG1wcyBoZXJlIGJlY2F1c2UgdG1wcyBhcmUgbm90IHJlcXVp
cmVkIHRvIGJlIGZsdXNoZWQgdG8gdGhlIHN0YWNrLgogICAgICAgICAgICAgICAgIGNvbnN0IGF1
dG8mIGxpdmVuZXNzQXRCeXRlY29kZSA9IGZ1bGxMaXZlbmVzcy5nZXRMaXZlbmVzcyhieXRlY29k
ZUluZGV4LCBtX2dyYXBoLmFwcHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50KG9yaWdp
biwgaXNDYWxsZXJPcmlnaW4pKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2Fs
ID0gY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsgbG9jYWwtLTspIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGxpdmVuZXNzQXRCeXRlY29kZVtsb2NhbF0pCkBAIC01ODYsMjcgKzYxNiwy
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgfSk7CiAgICAgfQogCi0gICAgdm9pZCBmbHVzaChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lkIGZsdXNoKE9wZXJhbmQgb3BlcmFuZCkK
ICAgICB7CiAgICAgICAgIGZsdXNoRGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFu
ZChvcGVyYW5kKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgZmx1c2hEaXJlY3QoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCisgICAgdm9pZCBmbHVzaERpcmVjdChPcGVyYW5kIG9wZXJhbmQpCiAg
ICAgewogICAgICAgICBmbHVzaERpcmVjdChvcGVyYW5kLCBmaW5kQXJndW1lbnRQb3NpdGlvbihv
cGVyYW5kKSk7CiAgICAgfQogCi0gICAgdm9pZCBmbHVzaERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbikKKyAgICB2b2lkIGZs
dXNoRGlyZWN0KE9wZXJhbmQgb3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3Np
dGlvbikKICAgICB7CiAgICAgICAgIGFkZEZsdXNoT3JQaGFudG9tTG9jYWw8Rmx1c2g+KG9wZXJh
bmQsIGFyZ3VtZW50UG9zaXRpb24pOwogICAgIH0KIAogICAgIHRlbXBsYXRlPE5vZGVUeXBlIG5v
ZGVUeXBlPgotICAgIHZvaWQgYWRkRmx1c2hPclBoYW50b21Mb2NhbChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbikKKyAgICB2b2lkIGFk
ZEZsdXNoT3JQaGFudG9tTG9jYWwoT3BlcmFuZCBvcGVyYW5kLCBBcmd1bWVudFBvc2l0aW9uKiBh
cmd1bWVudFBvc2l0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3Rh
bnQoKSk7CiAgICAgICAgIAotICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICBOb2RlKiYgbm9kZSA9IG1f
Y3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAg
CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGU7CiAgICAgICAgIApAQCAtNjE2
LDI2ICs2NDYsMjUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFi
bGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwogICAgICAgICAKICAgICAgICAgbm9kZSA9IGFkZFRvR3Jh
cGgobm9kZVR5cGUsIE9wSW5mbyh2YXJpYWJsZSkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+
dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkgPSBub2RlOwogICAgICAgICBpZiAoYXJn
dW1lbnRQb3NpdGlvbikKICAgICAgICAgICAgIGFyZ3VtZW50UG9zaXRpb24tPmFkZFZhcmlhYmxl
KHZhcmlhYmxlKTsKICAgICB9CiAKLSAgICB2b2lkIHBoYW50b21Mb2NhbERpcmVjdChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB2b2lkIHBoYW50b21Mb2NhbERpcmVjdChPcGVyYW5kIG9w
ZXJhbmQpCiAgICAgewogICAgICAgICBhZGRGbHVzaE9yUGhhbnRvbUxvY2FsPFBoYW50b21Mb2Nh
bD4ob3BlcmFuZCwgZmluZEFyZ3VtZW50UG9zaXRpb24ob3BlcmFuZCkpOwogICAgIH0KIAogICAg
IHZvaWQgZmx1c2goSW5saW5lU3RhY2tFbnRyeSogaW5saW5lU3RhY2tFbnRyeSkKICAgICB7Ci0g
ICAgICAgIGF1dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSosIFZpcnR1
YWxSZWdpc3RlciByZWcpIHsgZmx1c2hEaXJlY3QocmVnKTsgfTsKKyAgICAgICAgYXV0byBhZGRG
bHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgT3BlcmFuZCBvcGVyYW5kKSB7IGZs
dXNoRGlyZWN0KG9wZXJhbmQpOyB9OwogICAgICAgICBmbHVzaEltcGwoaW5saW5lU3RhY2tFbnRy
eS0+bV9pbmxpbmVDYWxsRnJhbWUsIGFkZEZsdXNoRGlyZWN0KTsKICAgICB9CiAKICAgICB2b2lk
IGZsdXNoRm9yVGVybWluYWwoKQogICAgIHsKLSAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9
IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIHJlZykgeyBmbHVzaERpcmVj
dChyZWcpOyB9OwotICAgICAgICBhdXRvIGFkZFBoYW50b21Mb2NhbERpcmVjdCA9IFsmXSAoSW5s
aW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIHJlZykgeyBwaGFudG9tTG9jYWxEaXJlY3Qo
cmVnKTsgfTsKKyAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZy
YW1lKiwgT3BlcmFuZCBvcGVyYW5kKSB7IGZsdXNoRGlyZWN0KG9wZXJhbmQpOyB9OworICAgICAg
ICBhdXRvIGFkZFBoYW50b21Mb2NhbERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgT3Bl
cmFuZCBvcGVyYW5kKSB7IHBoYW50b21Mb2NhbERpcmVjdChvcGVyYW5kKTsgfTsKICAgICAgICAg
Zmx1c2hGb3JUZXJtaW5hbEltcGwoY3VycmVudENvZGVPcmlnaW4oKSwgYWRkRmx1c2hEaXJlY3Qs
IGFkZFBoYW50b21Mb2NhbERpcmVjdCk7CiAgICAgfQogCkBAIC03NjMsNiArNzkyLDExIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBFZGdlKGNoaWxkMSksIEVkZ2UoY2hpbGQyKSwgRWRnZShjaGls
ZDMpKTsKICAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgocmVzdWx0KTsKICAgICB9CisgICAgTm9k
ZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BlcmFuZCBvcGVyYW5kLCBOb2RlKiBjaGlsZDEp
CisgICAgeworICAgICAgICBBU1NFUlQob3AgPT0gTW92SGludCk7CisgICAgICAgIHJldHVybiBh
ZGRUb0dyYXBoKG9wLCBPcEluZm8ob3BlcmFuZC5raW5kKCkpLCBPcEluZm8ob3BlcmFuZC52YWx1
ZSgpKSwgY2hpbGQxKTsKKyAgICB9CiAgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwg
T3BJbmZvIGluZm8xLCBPcEluZm8gaW5mbzIsIEVkZ2UgY2hpbGQxLCBFZGdlIGNoaWxkMiA9IEVk
Z2UoKSwgRWRnZSBjaGlsZDMgPSBFZGdlKCkpCiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQg
PSBtX2dyYXBoLmFkZE5vZGUoCkBAIC04MDUsNyArODM5LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIG1fcGFyYW1ldGVyU2xvdHMgPSBwYXJhbWV0ZXJTbG90czsKIAogICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGFyZ0NvdW50OyArK2kpCi0gICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChn
ZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSwgcmVnaXN0ZXJPZmZzZXQpKSk7CisgICAg
ICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNs
dWRpbmdUaGlzKGksIHJlZ2lzdGVyT2Zmc2V0KSkpOwogCiAgICAgICAgIHJldHVybiBhZGRUb0dy
YXBoKE5vZGU6OlZhckFyZywgb3AsIG9wSW5mbywgcHJlZGljdGlvbik7CiAgICAgfQpAQCAtMTA5
Myw4ICsxMTI3LDEwIEBAIHByaXZhdGU6CiAKICAgICAvLyBUaGUgbnVtYmVyIG9mIGFyZ3VtZW50
cyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgogICAgIHVuc2lnbmVkIG1fbnVtQXJndW1lbnRzOwot
ICAgIC8vIFRoZSBudW1iZXIgb2YgbG9jYWxzICh2YXJzICsgdGVtcG9yYXJpZXMpIHVzZWQgaW4g
dGhlIGZ1bmN0aW9uLgorICAgIC8vIFRoZSBudW1iZXIgb2YgbG9jYWxzICh2YXJzICsgdGVtcG9y
YXJpZXMpIHVzZWQgYnkgdGhlIGJ5dGVjb2RlIGZvciB0aGUgZnVuY3Rpb24uCiAgICAgdW5zaWdu
ZWQgbV9udW1Mb2NhbHM7CisgICAgLy8gVGhlIG1heCBudW1iZXIgb2YgdGVtcHMgdXNlZCBmb3Ig
Zm9yd2FyZGluZyBkYXRhIHRvIGFuIE9TUiBleGl0IGNoZWNrcG9pbnQuCisgICAgdW5zaWduZWQg
bV9udW1UbXBzOwogICAgIC8vIFRoZSBudW1iZXIgb2Ygc2xvdHMgKGluIHVuaXRzIG9mIHNpemVv
ZihSZWdpc3RlcikpIHRoYXQgd2UgbmVlZCB0bwogICAgIC8vIHByZWFsbG9jYXRlIGZvciBhcmd1
bWVudHMgdG8gb3V0Z29pbmcgY2FsbHMgZnJvbSB0aGlzIGZyYW1lLiBUaGlzCiAgICAgLy8gbnVt
YmVyIGluY2x1ZGVzIHRoZSBDYWxsRnJhbWUgc2xvdHMgdGhhdCB3ZSBpbml0aWFsaXplIGZvciB0
aGUgY2FsbGVlCkBAIC0xMTYxLDE0ICsxMTk3LDE3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAg
ICAgICB+SW5saW5lU3RhY2tFbnRyeSgpOwogICAgICAgICAKLSAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKKyAgICAgICAg
T3BlcmFuZCByZW1hcE9wZXJhbmQoT3BlcmFuZCBvcGVyYW5kKSBjb25zdAogICAgICAgICB7CiAg
ICAgICAgICAgICBpZiAoIW1faW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgICAgIHJldHVy
biBvcGVyYW5kOworCisgICAgICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAob3BlcmFuZC52YWx1ZSgpICsgbV9pbmxpbmVDYWxs
RnJhbWUtPnRtcE9mZnNldCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVCghb3Bl
cmFuZC5pc0NvbnN0YW50KCkpOworICAgICAgICAgICAgQVNTRVJUKCFvcGVyYW5kLnZpcnR1YWxS
ZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CiAKLSAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVn
aXN0ZXIob3BlcmFuZC5vZmZzZXQoKSArIG1faW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCk7
CisgICAgICAgICAgICByZXR1cm4gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSArIG1faW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldDsKICAgICAgICAgfQogICAgIH07CiAgICAgCkBAIC0xMTc3
LDEzICsxMjE2LDggQEAgcHJpdmF0ZToKICAgICBJQ1N0YXR1c0NvbnRleHRTdGFjayBtX2ljQ29u
dGV4dFN0YWNrOwogICAgIAogICAgIHN0cnVjdCBEZWxheWVkU2V0TG9jYWwgewotICAgICAgICBD
b2RlT3JpZ2luIG1fb3JpZ2luOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOwot
ICAgICAgICBOb2RlKiBtX3ZhbHVlOwotICAgICAgICBTZXRNb2RlIG1fc2V0TW9kZTsKLSAgICAg
ICAgCiAgICAgICAgIERlbGF5ZWRTZXRMb2NhbCgpIHsgfQotICAgICAgICBEZWxheWVkU2V0TG9j
YWwoY29uc3QgQ29kZU9yaWdpbiYgb3JpZ2luLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9k
ZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSkKKyAgICAgICAgRGVsYXllZFNldExvY2FsKGNvbnN0
IENvZGVPcmlnaW4mIG9yaWdpbiwgT3BlcmFuZCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9k
ZSBzZXRNb2RlKQogICAgICAgICAgICAgOiBtX29yaWdpbihvcmlnaW4pCiAgICAgICAgICAgICAs
IG1fb3BlcmFuZChvcGVyYW5kKQogICAgICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQpAQCAtMTE5
Niw4ICsxMjMwLDEzIEBAIHByaXZhdGU6CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChtX29w
ZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZXItPnNldEFy
Z3VtZW50KG1fb3JpZ2luLCBtX29wZXJhbmQsIG1fdmFsdWUsIG1fc2V0TW9kZSk7Ci0gICAgICAg
ICAgICByZXR1cm4gcGFyc2VyLT5zZXRMb2NhbChtX29yaWdpbiwgbV9vcGVyYW5kLCBtX3ZhbHVl
LCBtX3NldE1vZGUpOworICAgICAgICAgICAgcmV0dXJuIHBhcnNlci0+c2V0TG9jYWxPclRtcCht
X29yaWdpbiwgbV9vcGVyYW5kLCBtX3ZhbHVlLCBtX3NldE1vZGUpOwogICAgICAgICB9CisKKyAg
ICAgICAgQ29kZU9yaWdpbiBtX29yaWdpbjsKKyAgICAgICAgT3BlcmFuZCBtX29wZXJhbmQ7Cisg
ICAgICAgIE5vZGUqIG1fdmFsdWUgeyBudWxscHRyIH07CisgICAgICAgIFNldE1vZGUgbV9zZXRN
b2RlOwogICAgIH07CiAgICAgCiAgICAgVmVjdG9yPERlbGF5ZWRTZXRMb2NhbCwgMj4gbV9zZXRM
b2NhbFF1ZXVlOwpAQCAtMTIxMCw3ICsxMjQ5LDcgQEAgcHJpdmF0ZToKIEJhc2ljQmxvY2sqIEJ5
dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVRhcmdldGFibGVCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgpCiB7CiAgICAgQVNTRVJUKGJ5dGVjb2RlSW5kZXgpOwotICAgIFJlZjxCYXNpY0Js
b2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhieXRlY29kZUluZGV4LCBtX251
bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIDEpKTsKKyAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sg
PSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soYnl0ZWNvZGVJbmRleCwgbV9udW1Bcmd1bWVudHMs
IG1fbnVtTG9jYWxzLCBtX251bVRtcHMsIDEpKTsKICAgICBCYXNpY0Jsb2NrKiBibG9ja1B0ciA9
IGJsb2NrLnB0cigpOwogICAgIC8vIG1fYmxvY2tMaW5raW5nVGFyZ2V0cyBtdXN0IGFsd2F5cyBi
ZSBzb3J0ZWQgaW4gaW5jcmVhc2luZyBvcmRlciBvZiBieXRlY29kZUJlZ2luCiAgICAgaWYgKG1f
aW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5zaXplKCkpCkBAIC0xMjIyLDcg
KzEyNjEsNyBAQCBCYXNpY0Jsb2NrKiBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVUYXJnZXRhYmxl
QmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogCiBCYXNpY0Jsb2NrKiBCeXRlQ29k
ZVBhcnNlcjo6YWxsb2NhdGVVbnRhcmdldGFibGVCbG9jaygpCiB7Ci0gICAgUmVmPEJhc2ljQmxv
Y2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXgoKSwgbV9u
dW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCAxKSk7CisgICAgUmVmPEJhc2ljQmxvY2s+IGJsb2Nr
ID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXgoKSwgbV9udW1Bcmd1bWVu
dHMsIG1fbnVtTG9jYWxzLCBtX251bVRtcHMsIDEpKTsKICAgICBCYXNpY0Jsb2NrKiBibG9ja1B0
ciA9IGJsb2NrLnB0cigpOwogICAgIG1fZ3JhcGguYXBwZW5kQmxvY2soV1RGTW92ZShibG9jaykp
OwogICAgIHJldHVybiBibG9ja1B0cjsKQEAgLTEyOTIsNyArMTMzMSw3IEBAIEJ5dGVDb2RlUGFy
c2VyOjpUZXJtaW5hbGl0eSBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKICAgICBpZiAoY2Fs
bExpbmtTdGF0dXMuY2FuT3B0aW1pemUoKSkgewogICAgICAgICBhZGRUb0dyYXBoKEZpbHRlckNh
bGxMaW5rU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFk
ZENhbGxMaW5rU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIGNhbGxMaW5rU3RhdHVzKSksIGNh
bGxUYXJnZXQpOwogCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQgPSB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCk7CisgICAgICAgIFZpcnR1
YWxSZWdpc3RlciB0aGlzQXJndW1lbnQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1
ZGluZ1RoaXMoMCwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICBhdXRvIG9wdGltaXphdGlvblJl
c3VsdCA9IGhhbmRsZUlubGluaW5nKGNhbGxUYXJnZXQsIHJlc3VsdCwgY2FsbExpbmtTdGF0dXMs
IHJlZ2lzdGVyT2Zmc2V0LCB0aGlzQXJndW1lbnQsCiAgICAgICAgICAgICBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgQnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGlu
c3RydWN0aW9uU2l6ZSksIG9wLCBraW5kLCBwcmVkaWN0aW9uKTsKICAgICAgICAgaWYgKG9wdGlt
aXphdGlvblJlc3VsdCA9PSBDYWxsT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWRUb0p1bXAp
CkBAIC0xMzk5LDcgKzE0MzgsNyBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6Z2V0QXJndW1lbnRD
b3VudCgpCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0QXJndW1lbnRQaGFudG9tcyhpbnQgcmVn
aXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykKIHsKICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2kpCi0gICAgICAg
IGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGksIHJl
Z2lzdGVyT2Zmc2V0KSkpOworICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSwgcmVnaXN0ZXJPZmZzZXQpKSk7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+CkBAIC0xNDI1LDcgKzE0NjQsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVSZWN1cnNpdmVUYWlsQ2FsbChOb2RlKiBjYWxs
VGFyZ2V0Tm9kZSwgQ2FsbFZhcmlhbnQgYwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzICE9IHN0YXRpY19jYXN0PGludD4oY2FsbEZyYW1lLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcykpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAv
LyBJZiB0aGUgdGFyZ2V0IElubGluZUNhbGxGcmFtZSBpcyBWYXJhcmdzLCB3ZSBkbyBub3Qga25v
dyBob3cgbWFueSBhcmd1bWVudHMgYXJlIGFjdHVhbGx5IGZpbGxlZCBieSBMb2FkVmFyYXJncy4g
VmFyYXJncyBJbmxpbmVDYWxsRnJhbWUncwotICAgICAgICAgICAgLy8gYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgaXMgbWF4aW11bSBudW1iZXIgb2YgcG90ZW50aWFsbHkgZmlsbGVkIGFyZ3Vt
ZW50cyBieSBMb2FkVmFyYXJncy4gV2UgImNvbnRpbnVlIiB0byB0aGUgdXBwZXIgZnJhbWUgd2hp
Y2ggbWF5IGJlCisgICAgICAgICAgICAvLyBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyBpcyBt
YXhpbXVtIG51bWJlciBvZiBwb3RlbnRpYWxseSBmaWxsZWQgYXJndW1lbnRzIGJ5IHhrTG9hZFZh
cmFyZ3MuIFdlICJjb250aW51ZSIgdG8gdGhlIHVwcGVyIGZyYW1lIHdoaWNoIG1heSBiZQogICAg
ICAgICAgICAgLy8gYSBnb29kIHRhcmdldCB0byBqdW1wIGludG8uCiAgICAgICAgICAgICBpZiAo
Y2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE0
NTEsNyArMTQ5MCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVJlY3Vyc2l2ZVRhaWxD
YWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBDYWxsVmFyaWFudCBjCiAgICAgICAgIC8vIFdlIG11
c3Qgc2V0IHRoZSBjYWxsZWUgdG8gdGhlIHJpZ2h0IHZhbHVlCiAgICAgICAgIGlmIChzdGFja0Vu
dHJ5LT5tX2lubGluZUNhbGxGcmFtZSkgewogICAgICAgICAgICAgaWYgKHN0YWNrRW50cnktPm1f
aW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgICAgIHNldERpcmVj
dChzdGFja0VudHJ5LT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSkpLCBjYWxsVGFyZ2V0Tm9kZSwgTm9ybWFsU2V0KTsKKyAgICAgICAgICAgICAgICBz
ZXREaXJlY3QocmVtYXBPcGVyYW5kKHN0YWNrRW50cnktPm1faW5saW5lQ2FsbEZyYW1lLCBDYWxs
RnJhbWVTbG90OjpjYWxsZWUpLCBjYWxsVGFyZ2V0Tm9kZSwgTm9ybWFsU2V0KTsKICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICBhZGRUb0dyYXBoKFNldENhbGxlZSwgY2FsbFRhcmdldE5vZGUp
OwogCkBAIC0xNDYwLDEyICsxNDk5LDEyIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVJl
Y3Vyc2l2ZVRhaWxDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBDYWxsVmFyaWFudCBjCiAgICAg
ICAgICAgICBhZGRUb0dyYXBoKFNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBPcEluZm8o
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICAgICAgaW50IGFyZ0luZGV4ID0gMDsK
ICAgICAgICAgZm9yICg7IGFyZ0luZGV4IDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7ICsr
YXJnSW5kZXgpIHsKLSAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KGFyZ0luZGV4LCByZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgc2V0
RGlyZWN0KHN0YWNrRW50cnktPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dChhcmdJbmRleCkpLCB2YWx1ZSwgTm9ybWFsU2V0KTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVl
ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhhcmdJbmRleCwg
cmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgIHNldERpcmVjdChzdGFja0VudHJ5LT5yZW1h
cE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGFyZ0luZGV4
KSksIHZhbHVlLCBOb3JtYWxTZXQpOwogICAgICAgICB9CiAgICAgICAgIE5vZGUqIHVuZGVmaW5l
ZCA9IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnRVbmRlZmluZWQpKTsK
ICAgICAgICAgZm9yICg7IGFyZ0luZGV4IDwgc3RhY2tFbnRyeS0+bV9jb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKTsgKythcmdJbmRleCkKLSAgICAgICAgICAgIHNldERpcmVjdChzdGFja0VudHJ5
LT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJnSW5kZXgpKSwgdW5k
ZWZpbmVkLCBOb3JtYWxTZXQpOworICAgICAgICAgICAgc2V0RGlyZWN0KHN0YWNrRW50cnktPnJl
bWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoYXJnSW5k
ZXgpKSwgdW5kZWZpbmVkLCBOb3JtYWxTZXQpOwogCiAgICAgICAgIC8vIFdlIG11c3QgcmVwZWF0
IHRoZSB3b3JrIG9mIG9wX2VudGVyIGhlcmUgYXMgd2Ugd2lsbCBqdW1wIHJpZ2h0IGFmdGVyIGl0
LgogICAgICAgICAvLyBXZSBqdW1wIHJpZ2h0IGFmdGVyIGl0IGFuZCBub3QgYmVmb3JlIGl0LCBi
ZWNhdXNlIG9mIHNvbWUgaW52YXJpYW50IHNheWluZyB0aGF0IGEgQ0ZHIHJvb3QgY2Fubm90IGhh
dmUgcHJlZGVjZXNzb3JzIGluIHRoZSBJUi4KQEAgLTE2MTYsMTYgKzE2NTUsMTggQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCwgQ2EKICAgICBBU1NFUlQoIShudW1iZXJPZlN0YWNrUGFkZGluZ1Nsb3Rz
ICUgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSkpOwogICAgIGludCByZWdpc3Rlck9mZnNldEFm
dGVyRml4dXAgPSByZWdpc3Rlck9mZnNldCAtIG51bWJlck9mU3RhY2tQYWRkaW5nU2xvdHM7CiAg
ICAgCi0gICAgaW50IGlubGluZUNhbGxGcmFtZVN0YXJ0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVt
YXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldEFmdGVyRml4dXApKS5vZmZz
ZXQoKSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzOworICAgIE9wZXJhbmQgaW5s
aW5lQ2FsbEZyYW1lU3RhcnQgPSBWaXJ0dWFsUmVnaXN0ZXIobV9pbmxpbmVTdGFja1RvcC0+cmVt
YXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldEFmdGVyRml4dXApKS52YWx1
ZSgpICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpOwogICAgIAogICAgIGVuc3Vy
ZUxvY2FscygKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZVN0YXJ0KS50
b0xvY2FsKCkgKyAxICsKKyAgICAgICAgaW5saW5lQ2FsbEZyYW1lU3RhcnQudG9Mb2NhbCgpICsg
MSArCiAgICAgICAgIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgY29kZUJsb2Nr
LT5udW1DYWxsZWVMb2NhbHMoKSk7CiAgICAgCisgICAgZW5zdXJlVG1wcygobV9pbmxpbmVTdGFj
a1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUgPyBtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxG
cmFtZS0+dG1wT2Zmc2V0IDogMCkgKyBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+bnVt
VG1wcygpICsgY29kZUJsb2NrLT5udW1UbXBzKCkpOworCiAgICAgc2l6ZV90IGFyZ3VtZW50UG9z
aXRpb25TdGFydCA9IG1fZ3JhcGgubV9hcmd1bWVudFBvc2l0aW9ucy5zaXplKCk7CiAKICAgICBp
ZiAocmVzdWx0LmlzVmFsaWQoKSkKLSAgICAgICAgcmVzdWx0ID0gbV9pbmxpbmVTdGFja1RvcC0+
cmVtYXBPcGVyYW5kKHJlc3VsdCk7CisgICAgICAgIHJlc3VsdCA9IG1faW5saW5lU3RhY2tUb3At
PnJlbWFwT3BlcmFuZChyZXN1bHQpLnZpcnR1YWxSZWdpc3RlcigpOwogCiAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiBjYWxsZWVWYXJpYWJsZSA9IG51bGxwdHI7CiAgICAgaWYgKGNhbGxlZS5pc0Ns
b3N1cmVDYWxsKCkpIHsKQEAgLTE2MzgsNyArMTY3OSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OmlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQs
IENhCiAKICAgICBJbmxpbmVTdGFja0VudHJ5KiBjYWxsZXJTdGFja1RvcCA9IG1faW5saW5lU3Rh
Y2tUb3A7CiAgICAgSW5saW5lU3RhY2tFbnRyeSBpbmxpbmVTdGFja0VudHJ5KHRoaXMsIGNvZGVC
bG9jaywgY29kZUJsb2NrLCBjYWxsZWUuZnVuY3Rpb24oKSwgcmVzdWx0LAotICAgICAgICAoVmly
dHVhbFJlZ2lzdGVyKWlubGluZUNhbGxGcmFtZVN0YXJ0LCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywga2luZCwgY29udGludWF0aW9uQmxvY2spOworICAgICAgICBpbmxpbmVDYWxsRnJhbWVT
dGFydC52aXJ0dWFsUmVnaXN0ZXIoKSwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGtpbmQs
IGNvbnRpbnVhdGlvbkJsb2NrKTsKIAogICAgIC8vIFRoaXMgaXMgd2hlcmUgdGhlIGFjdHVhbCBp
bmxpbmluZyByZWFsbHkgaGFwcGVucy4KICAgICBCeXRlY29kZUluZGV4IG9sZEluZGV4ID0gbV9j
dXJyZW50SW5kZXg7CkBAIC0xNjczLDkgKzE3MTQsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpp
bmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBD
YQogICAgICAgICAvLyBIb3dldmVyLCB3aGVuIHdlIGJlZ2luIGV4ZWN1dGluZyB0aGUgY2FsbGVl
LCB3ZSBuZWVkIE9TUiBleGl0IHRvIGJlIGF3YXJlIG9mIHdoZXJlIGl0IGNhbiByZWNvdmVyIHRo
ZSBhcmd1bWVudHMgdG8gdGhlIHNldHRlciwgbG9jOSBhbmQgbG9jMTAuIFRoZSBNb3ZIaW50cyBp
biB0aGUgaW5saW5lZAogICAgICAgICAvLyBjYWxsZWUgbWFrZSBpdCBzbyB0aGF0IGlmIHdlIGV4
aXQgYXQgPEhFUkU+LCB3ZSBjYW4gcmVjb3ZlciBsb2M5IGFuZCBsb2MxMC4KICAgICAgICAgZm9y
IChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2lu
ZGV4KSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRUb0dldCA9IGNhbGxl
clN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgs
IHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICBPcGVyYW5kIGFyZ3VtZW50VG9HZXQgPSBj
YWxsZXJTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5j
bHVkaW5nVGhpcyhpbmRleCwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgIE5vZGUqIHZh
bHVlID0gZ2V0RGlyZWN0KGFyZ3VtZW50VG9HZXQpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChN
b3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb0dldC5vZmZzZXQoKSksIHZhbHVlKTsKKyAgICAgICAg
ICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9HZXQpLCB2YWx1ZSk7CiAg
ICAgICAgICAgICBtX3NldExvY2FsUXVldWUuYXBwZW5kKERlbGF5ZWRTZXRMb2NhbCB7IGN1cnJl
bnRDb2RlT3JpZ2luKCksIGFyZ3VtZW50VG9HZXQsIHZhbHVlLCBJbW1lZGlhdGVOYWtlZFNldCB9
KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTE3MTksMTYgKzE3NjAsMTYgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdCwgQ2EKICAgICAgICAgLy8gSW4gc3VjaCBjYXNlcywgd2UgZG8gbm90
IG5lZWQgdG8gbW92ZSBmcmFtZXMuCiAgICAgICAgIGlmIChyZWdpc3Rlck9mZnNldEFmdGVyRml4
dXAgIT0gcmVnaXN0ZXJPZmZzZXQpIHsKICAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsg
aW5kZXggPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgKytpbmRleCkgewotICAgICAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudFRvR2V0ID0gY2FsbGVyU3RhY2tUb3AtPnJl
bWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCwgcmVnaXN0ZXJPZmZz
ZXQpKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIGFyZ3VtZW50VG9HZXQgPSBjYWxsZXJTdGFj
a1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhp
cyhpbmRleCwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9
IGdldERpcmVjdChhcmd1bWVudFRvR2V0KTsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYXJndW1lbnRUb1NldCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCkpOwotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
TW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9TZXQub2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgT3BlcmFuZCBhcmd1bWVudFRvU2V0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBP
cGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpbmRleCkpOwor
ICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9TZXQp
LCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgbV9zZXRMb2NhbFF1ZXVlLmFwcGVuZChEZWxheWVk
U2V0TG9jYWwgeyBjdXJyZW50Q29kZU9yaWdpbigpLCBhcmd1bWVudFRvU2V0LCB2YWx1ZSwgSW1t
ZWRpYXRlTmFrZWRTZXQgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZm9y
IChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFyaXR5Rml4dXBDb3VudDsgKytpbmRleCkgewotICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9w
LT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgKyBpbmRleCkpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBP
cEluZm8oYXJndW1lbnRUb1NldC5vZmZzZXQoKSksIHVuZGVmaW5lZCk7CisgICAgICAgICAgICBP
cGVyYW5kIGFyZ3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzICsgaW5kZXgpKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZv
KGFyZ3VtZW50VG9TZXQpLCB1bmRlZmluZWQpOwogICAgICAgICAgICAgbV9zZXRMb2NhbFF1ZXVl
LmFwcGVuZChEZWxheWVkU2V0TG9jYWwgeyBjdXJyZW50Q29kZU9yaWdpbigpLCBhcmd1bWVudFRv
U2V0LCB1bmRlZmluZWQsIEltbWVkaWF0ZU5ha2VkU2V0IH0pOwogICAgICAgICB9CiAKQEAgLTE4
OTUsMTIgKzE5MzYsMTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0lubGlu
aW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIKICAgICAgICAgZW1pdEZ1
bmN0aW9uQ2hlY2tzKGNhbGxWYXJpYW50LCBjYWxsVGFyZ2V0Tm9kZSwgdGhpc0FyZ3VtZW50KTsK
ICAgICAgICAgCiAgICAgICAgIGludCByZW1hcHBlZFJlZ2lzdGVyT2Zmc2V0ID0KLSAgICAgICAg
bV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9m
ZnNldCkpLm9mZnNldCgpOworICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0
KCk7CiAgICAgICAgIAogICAgICAgICBlbnN1cmVMb2NhbHMoVmlydHVhbFJlZ2lzdGVyKHJlbWFw
cGVkUmVnaXN0ZXJPZmZzZXQpLnRvTG9jYWwoKSk7CiAgICAgICAgIAogICAgICAgICBpbnQgYXJn
dW1lbnRTdGFydCA9IHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdp
c3RlcnM7Ci0gICAgICAgIGludCByZW1hcHBlZEFyZ3VtZW50U3RhcnQgPSBtX2lubGluZVN0YWNr
VG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3RhcnQpKS5vZmZzZXQo
KTsKKyAgICAgICAgaW50IHJlbWFwcGVkQXJndW1lbnRTdGFydCA9IG1faW5saW5lU3RhY2tUb3At
PnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFydCkpLnZpcnR1YWxSZWdp
c3RlcigpLm9mZnNldCgpOwogICAgICAgICAKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRh
ID0gbV9ncmFwaC5tX2xvYWRWYXJhcmdzRGF0YS5hZGQoKTsKICAgICAgICAgZGF0YS0+c3RhcnQg
PSBWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRBcmd1bWVudFN0YXJ0ICsgMSk7CkBAIC0xOTA4LDEx
ICsxOTQ5LDI0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NJbmxpbmluZyhO
b2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyCiAgICAgICAgIGRhdGEtPm9mZnNl
dCA9IGFyZ3VtZW50c09mZnNldDsKICAgICAgICAgZGF0YS0+bGltaXQgPSBtYXhBcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpczsKICAgICAgICAgZGF0YS0+bWFuZGF0b3J5TWluaW11bSA9IG1hbmRh
dG9yeU1pbmltdW07Ci0gICAgICAgIAotICAgICAgICBpZiAoY2FsbE9wID09IFRhaWxDYWxsRm9y
d2FyZFZhcmFyZ3MpCi0gICAgICAgICAgICBhZGRUb0dyYXBoKEZvcndhcmRWYXJhcmdzLCBPcElu
Zm8oZGF0YSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRUb0dyYXBoKExvYWRWYXJh
cmdzLCBPcEluZm8oZGF0YSksIGdldChhcmd1bWVudHNBcmd1bWVudCkpOworCisgICAgICAgIGlm
IChjYWxsT3AgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJncykgeworICAgICAgICAgICAgTm9kZSog
YXJndW1lbnRDb3VudDsKKyAgICAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKCkpCisgICAg
ICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IGFkZFRvR3JhcGgoR2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpOworICAgICAgICAgICAgZWxzZSBpZiAoaW5saW5lQ2FsbEZyYW1lKCktPmlz
VmFyYXJncygpKQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBnZXREaXJlY3QocmVt
YXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSgpLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcykpOworICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICBhcmd1
bWVudENvdW50ID0gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9ncmFwaC5mcmVlemUo
anNOdW1iZXIoaW5saW5lQ2FsbEZyYW1lKCktPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkp
KTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yd2FyZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSwg
YXJndW1lbnRDb3VudCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBOb2RlKiBhcmd1
bWVudHMgPSBnZXQoYXJndW1lbnRzQXJndW1lbnQpOworICAgICAgICAgICAgYXV0byBhcmdDb3Vu
dFRtcCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChPcGVyYW5kOjp0bXAoT3BDYWxs
VmFyYXJnczo6YXJnQ291bnRJbmNsdWRpbmdUaGlzKSk7CisgICAgICAgICAgICBzZXREaXJlY3Qo
YXJnQ291bnRUbXAsIGFkZFRvR3JhcGgoVmFyYXJnc0xlbmd0aCwgT3BJbmZvKGRhdGEpLCBhcmd1
bWVudHMpKTsKKyAgICAgICAgICAgIHByb2dyZXNzVG9OZXh0Q2hlY2twb2ludCgpOworCisgICAg
ICAgICAgICBhZGRUb0dyYXBoKExvYWRWYXJhcmdzLCBPcEluZm8oZGF0YSksIGdldExvY2FsT3JU
bXAoYXJnQ291bnRUbXApLCBhcmd1bWVudHMpOworICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICAvLyBMb2FkVmFyYXJncyBtYXkgT1NSIGV4aXQuIEhlbmNlLCB3ZSBuZWVkIHRvIGtlZXAgYWxp
dmUgY2FsbFRhcmdldE5vZGUsIHRoaXNBcmd1bWVudAogICAgICAgICAvLyBhbmQgYXJndW1lbnRz
QXJndW1lbnQgZm9yIHRoZSBiYXNlbGluZSBKSVQuIEhvd2V2ZXIsIHdlIG9ubHkgbmVlZCBhIFBo
YW50b20gZm9yCkBAIC0xOTI0LDE0ICsxOTc4LDE0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZVZhcmFyZ3NJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVy
CiAgICAgICAgIC8vIFNTQS4gRm9ydHVuYXRlbHksIHdlIGFsc28gaGF2ZSBvdGhlciByZWFzb25z
IGZvciBub3QgaW5zZXJ0aW5nIGNvbnRyb2wgZmxvdwogICAgICAgICAvLyBiZWZvcmUgU1NBLgog
ICAgICAgICAKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBjb3VudFZhcmlhYmxlID0gbmV3
VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlcihyZW1hcHBlZFJlZ2lzdGVyT2Zmc2V0
ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiBjb3VudFZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRh
KGRhdGEtPmNvdW50KTsKICAgICAgICAgLy8gVGhpcyBpcyBwcmV0dHkgbGFtZSwgYnV0IGl0IHdp
bGwgZm9yY2UgdGhlIGNvdW50IHRvIGJlIGZsdXNoZWQgYXMgYW4gaW50LiBUaGlzIGRvZXNuJ3QK
ICAgICAgICAgLy8gbWF0dGVyIHZlcnkgbXVjaCwgc2luY2Ugb3VyIHVzZSBvZiBhIFNldEFyZ3Vt
ZW50RGVmaW5pdGVseSBhbmQgRmx1c2hlcyBmb3IgdGhpcyBsb2NhbCBzbG90IGlzCiAgICAgICAg
IC8vIG1vc3RseSBqdXN0IGEgZm9ybWFsaXR5LgogICAgICAgICBjb3VudFZhcmlhYmxlLT5wcmVk
aWN0KFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBjb3VudFZhcmlhYmxlLT5tZXJnZUlzUHJvZml0
YWJsZVRvVW5ib3godHJ1ZSk7CiAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50Q291bnQgPSBhZGRU
b0dyYXBoKFNldEFyZ3VtZW50RGVmaW5pdGVseSwgT3BJbmZvKGNvdW50VmFyaWFibGUpKTsKLSAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKGNvdW50VmFy
aWFibGUtPmxvY2FsKCksIHNldEFyZ3VtZW50Q291bnQpOworICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQoY291bnRWYXJpYWJsZS0+b3BlcmFuZCgpLCBz
ZXRBcmd1bWVudENvdW50KTsKICAgICAgICAgCiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIo
YXJndW1lbnRTdGFydCksIGdldCh0aGlzQXJndW1lbnQpLCBJbW1lZGlhdGVOYWtlZFNldCk7CiAg
ICAgICAgIHVuc2lnbmVkIG51bVNldEFyZ3VtZW50cyA9IDA7CkBAIC0xOTU1LDcgKzIwMDksNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRh
cmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlcgogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBOb2RlKiBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgobnVtU2V0QXJndW1lbnRz
ID49IG1hbmRhdG9yeU1pbmltdW0gPyBTZXRBcmd1bWVudE1heWJlIDogU2V0QXJndW1lbnREZWZp
bml0ZWx5LCBPcEluZm8odmFyaWFibGUpKTsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52
YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSwgc2V0QXJndW1lbnQp
OworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5k
KHZhcmlhYmxlLT5vcGVyYW5kKCksIHNldEFyZ3VtZW50KTsKICAgICAgICAgICAgICsrbnVtU2V0
QXJndW1lbnRzOwogICAgICAgICB9CiAgICAgfTsKQEAgLTIwNTUsNyArMjEwOSw3IEBAIEJ5dGVD
b2RlUGFyc2VyOjpDYWxsT3B0aW1pemF0aW9uUmVzdWx0IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJ
bmxpbmluZygKICAgICAvLyB5ZXQuCiAgICAgVkVSQk9TRV9MT0coIlJlZ2lzdGVyIG9mZnNldDog
IiwgcmVnaXN0ZXJPZmZzZXQpOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWVSZWcocmVnaXN0
ZXJPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOwotICAgIGNhbGxlZVJlZyA9IG1faW5s
aW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChjYWxsZWVSZWcpOworICAgIGNhbGxlZVJlZyA9IG1f
aW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChjYWxsZWVSZWcpLnZpcnR1YWxSZWdpc3Rlcigp
OwogICAgIFZFUkJPU0VfTE9HKCJDYWxsZWUgaXMgZ29pbmcgdG8gYmUgIiwgY2FsbGVlUmVnLCAi
XG4iKTsKICAgICBzZXREaXJlY3QoY2FsbGVlUmVnLCBjYWxsVGFyZ2V0Tm9kZSwgSW1tZWRpYXRl
U2V0V2l0aEZsdXNoKTsKIApAQCAtMjE3NCw3ICsyMjI4LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlTWluTWF4KFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIE5vZGVUeXBlIG9wLCBpbnQg
cmVnaXMKICAgICAgCiAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDIpIHsK
ICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgIE5vZGUqIHJlc3VsdE5vZGUgPSBnZXQo
VmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zm
c2V0KSkpOworICAgICAgICBOb2RlKiByZXN1bHROb2RlID0gZ2V0KFZpcnR1YWxSZWdpc3Rlcih2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQp
KSk7CiAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgRWRnZShyZXN1bHROb2RlLCBOdW1iZXJV
c2UpKTsKICAgICAgICAgc2V0KHJlc3VsdCwgcmVzdWx0Tm9kZSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwpAQCAtMjE4Miw3ICsyMjM2LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWlu
TWF4KFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIE5vZGVUeXBlIG9wLCBpbnQgcmVnaXMKICAgICAK
ICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMykgewogICAgICAgICBpbnNl
cnRDaGVja3MoKTsKLSAgICAgICAgc2V0KHJlc3VsdCwgYWRkVG9HcmFwaChvcCwgZ2V0KHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSksIGdldCh2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudCgyLCByZWdpc3Rlck9mZnNldCkpKSk7CisgICAgICAgIHNldChyZXN1
bHQsIGFkZFRvR3JhcGgob3AsIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGlu
Z1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQpKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
SW5jbHVkaW5nVGhpcygyLCByZWdpc3Rlck9mZnNldCkpKSk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICAKQEAgLTIyMzAsNyArMjI4NCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUludHJpbnNpY0NhbGwoTm9kZSogY2FsbGVlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
LCBJCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBpbnNlcnRD
aGVja3MoKTsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBhZGRUb0dyYXBoKEFyaXRoQWJzLCBn
ZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSk7CisgICAg
ICAgICAgICBOb2RlKiBub2RlID0gYWRkVG9HcmFwaChBcml0aEFicywgZ2V0KHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rlck9mZnNldCkpKTsKICAgICAg
ICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1f
Y3VycmVudEluZGV4LCBPdmVyZmxvdykpCiAgICAgICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFn
cyhOb2RlTWF5T3ZlcmZsb3dJbnQzMkluREZHKTsKICAgICAgICAgICAgIHNldFJlc3VsdChub2Rl
KTsKQEAgLTIyNjcsNyArMjMyMSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJp
bnNpY0NhbGwoTm9kZSogY2FsbGVlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBJCiAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGluc2VydENoZWNrcygpOwotICAgICAgICAgICAgc2V0UmVzdWx0KGFkZFRvR3Jh
cGgoQXJpdGhVbmFyeSwgT3BJbmZvKHN0YXRpY19jYXN0PHN0ZDo6dW5kZXJseWluZ190eXBlPEFy
aXRoOjpVbmFyeVR5cGU+Ojp0eXBlPih0eXBlKSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKSk7CisgICAgICAgICAgICBzZXRSZXN1bHQoYWRkVG9H
cmFwaChBcml0aFVuYXJ5LCBPcEluZm8oc3RhdGljX2Nhc3Q8c3RkOjp1bmRlcmx5aW5nX3R5cGU8
QXJpdGg6OlVuYXJ5VHlwZT46OnR5cGU+KHR5cGUpKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rlck9mZnNldCkpKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCkBAIC0yMjkxLDcgKzIzNDUsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNhbGxlZSwgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCwgSQogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKLSAgICAgICAg
ICAgIHNldFJlc3VsdChhZGRUb0dyYXBoKG5vZGVUeXBlLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSkpOworICAgICAgICAgICAgc2V0UmVzdWx0KGFk
ZFRvR3JhcGgobm9kZVR5cGUsIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGlu
Z1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQpKSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KIApAQCAtMjMwMyw4ICsyMzU3LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlSW50cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEkK
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGluc2VydENoZWNrcygpOwotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHhPcGVyYW5kID0g
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpOwotICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHlPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
MiwgcmVnaXN0ZXJPZmZzZXQpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHhPcGVyYW5k
ID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDEsIHJlZ2lzdGVyT2Zm
c2V0KTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB5T3BlcmFuZCA9IHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygyLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAg
ICAgICBzZXRSZXN1bHQoYWRkVG9HcmFwaChBcml0aFBvdywgZ2V0KHhPcGVyYW5kKSwgZ2V0KHlP
cGVyYW5kKSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTIzMjAs
OCArMjM3NCw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwoTm9k
ZSogY2FsbGVlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBJCiAgICAgICAgICAgICBpZiAoIW1v
ZGUuaXNTb21lVHlwZWRBcnJheVZpZXcoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tBcnJheSwgT3BJbmZvKG1vZGUuYXNXb3Jk
KCkpLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKSk7
Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrTmV1dGVyZWQsIGdldCh2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpKTsKKyAgICAgICAgICAgIGFkZFRvR3Jh
cGgoQ2hlY2tBcnJheSwgT3BJbmZvKG1vZGUuYXNXb3JkKCkpLCBnZXQodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDAsIHJlZ2lzdGVyT2Zmc2V0KSkpOworICAgICAgICAg
ICAgYWRkVG9HcmFwaChDaGVja05ldXRlcmVkLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnRJbmNsdWRpbmdUaGlzKDAsIHJlZ2lzdGVyT2Zmc2V0KSkpOwogICAgICAgICAgICAgRkFMTFRI
Uk9VR0g7CiAgICAgICAgIH0KIApAQCAtMjM1NCw3ICsyNDA4LDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlSW50cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQsIEkKIAogICAgICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhbiBleGlzdGluZyBlcnJv
ciBzdHJpbmcuCiAgICAgICAgICAgICB1bnNpZ25lZCBlcnJvclN0cmluZ0luZGV4ID0gVUlOVDMy
X01BWDsKLSAgICAgICAgICAgIE5vZGUqIG9iamVjdCA9IGFkZFRvR3JhcGgoVG9PYmplY3QsIE9w
SW5mbyhlcnJvclN0cmluZ0luZGV4KSwgT3BJbmZvKFNwZWNOb25lKSwgZ2V0KHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSkpOworICAgICAgICAgICAgTm9kZSog
b2JqZWN0ID0gYWRkVG9HcmFwaChUb09iamVjdCwgT3BJbmZvKGVycm9yU3RyaW5nSW5kZXgpLCBP
cEluZm8oU3BlY05vbmUpLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKDAsIHJlZ2lzdGVyT2Zmc2V0KSkpOwogCiAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY3VycmVudE5vZGVPcmlnaW4o
KS5zZW1hbnRpYyk7CiAgICAgICAgICAgICBOb2RlKiBpdGVyYXRvciA9IGFkZFRvR3JhcGgoTmV3
QXJyYXlJdGVyYXRvciwgT3BJbmZvKG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2Jq
ZWN0LT5hcnJheUl0ZXJhdG9yU3RydWN0dXJlKCkpKSk7CkBAIC0yMzgyLDcgKzI0MzYsNyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNhbGxlZSwgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdCwgSQogCiAgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
bnVsbHB0cik7IC8vIEZvciBzdG9yYWdlLgogICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7ICsraSkKLSAgICAgICAgICAgICAgICAg
ICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGksIHJlZ2lz
dGVyT2Zmc2V0KSkpOworICAgICAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGksIHJlZ2lzdGVyT2Zmc2V0KSkp
OwogICAgICAgICAgICAgICAgIE5vZGUqIGFycmF5UHVzaCA9IGFkZFRvR3JhcGgoTm9kZTo6VmFy
QXJnLCBBcnJheVB1c2gsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8ocHJlZGlj
dGlvbikpOwogICAgICAgICAgICAgICAgIHNldFJlc3VsdChhcnJheVB1c2gpOwogICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjQzMiw3ICsyNDg2LDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlSW50cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQsIEkKIAogICAgICAgICAgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKIAotICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBhcnJheSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dCgwLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBhcnJheSA9
IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMCwgcmVnaXN0ZXJP
ZmZzZXQpKTsKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG8gYSBmZXcgdGhpbmdzIGhlcmUg
dG8gcHJvdmUgdGhhdCB3ZSBhcmVuJ3Qgc2tpcHBpbmcgZG9pbmcgc2lkZS1lZmZlY3RzIGluIGFu
IG9ic2VydmFibGUgd2F5OgogICAgICAgICAgICAgICAgICAgICAvLyAxLiBXZSBlbnN1cmUgdGhh
dCB0aGUgImNvbnN0cnVjdG9yIiBwcm9wZXJ0eSBoYXNuJ3QgYmVlbiBjaGFuZ2VkIChiZWNhdXNl
IHRoZSBvYnNlcnZhYmxlCiAgICAgICAgICAgICAgICAgICAgIC8vIGVmZmVjdHMgb2Ygc2xpY2Ug
cmVxdWlyZSB0aGF0IHdlIHBlcmZvcm0gYSBHZXQoYXJyYXksICJjb25zdHJ1Y3RvciIpIGFuZCB3
ZSBjYW4gc2tpcApAQCAtMjQ2MCw5ICsyNTE0LDkgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlSW50cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEkK
IAogICAgICAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChhcnJheSk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+PSAyKQotICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpOyAvLyBTdGFydCBpbmRleC4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQpKSk7IC8vIFN0YXJ0IGluZGV4LgogICAgICAg
ICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPj0gMykKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudCgyLCByZWdpc3Rlck9mZnNldCkpKTsgLy8gRW5kIGluZGV4LgorICAgICAgICAgICAg
ICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
SW5jbHVkaW5nVGhpcygyLCByZWdpc3Rlck9mZnNldCkpKTsgLy8gRW5kIGluZGV4LgogICAgICAg
ICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChhZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwgYXJy
YXkpKTsKIAogICAgICAgICAgICAgICAgICAgICBOb2RlKiBhcnJheVNsaWNlID0gYWRkVG9HcmFw
aChOb2RlOjpWYXJBcmcsIEFycmF5U2xpY2UsIE9wSW5mbygpLCBPcEluZm8oKSk7CkBAIC0yNTIx
LDExICsyNTc1LDExIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwo
Tm9kZSogY2FsbGVlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBJCiAKICAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogYXJyYXkg
PSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAg
ICAgICAgICAgICAgICAgICAgTm9kZSogYXJyYXkgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnRJbmNsdWRpbmdUaGlzKDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAg
ICAgIGFkZFZhckFyZ0NoaWxkKGFycmF5KTsKLSAgICAgICAgICAgICAgICAgICAgYWRkVmFyQXJn
Q2hpbGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkp
OyAvLyBTZWFyY2ggZWxlbWVudC4KKyAgICAgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
Z2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rlck9m
ZnNldCkpKTsgLy8gU2VhcmNoIGVsZW1lbnQuCiAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyA+PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgYWRk
VmFyQXJnQ2hpbGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDIsIHJlZ2lzdGVyT2Zm
c2V0KSkpOyAvLyBTdGFydCBpbmRleC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFZhckFy
Z0NoaWxkKGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMiwgcmVn
aXN0ZXJPZmZzZXQpKSk7IC8vIFN0YXJ0IGluZGV4LgogICAgICAgICAgICAgICAgICAgICBhZGRW
YXJBcmdDaGlsZChudWxscHRyKTsKIAogICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0g
YWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEFycmF5SW5kZXhPZiwgT3BJbmZvKGFycmF5TW9kZS5h
c1dvcmQoKSksIE9wSW5mbygpKTsKQEAgLTI1NTQsNyArMjYwOCw3IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwoTm9kZSogY2FsbGVlLCBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0LCBJCiAgICAgICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICAg
ICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7CiAgICAgICAgICAgICAgICAgaW5zZXJ0Q2hl
Y2tzKCk7Ci0gICAgICAgICAgICAgICAgTm9kZSogYXJyYXlQb3AgPSBhZGRUb0dyYXBoKEFycmF5
UG9wLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKSk7CisgICAgICAg
ICAgICAgICAgTm9kZSogYXJyYXlQb3AgPSBhZGRUb0dyYXBoKEFycmF5UG9wLCBPcEluZm8oYXJy
YXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDAsIHJlZ2lzdGVyT2Zmc2V0KSkpOwogICAgICAgICAg
ICAgICAgIHNldFJlc3VsdChhcnJheVBvcCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICB9CkBAIC0yNjM2LDcgKzI2OTAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNhbGxlZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCwgSQogICAgICAgICAgICAgCiAgICAgICAgICAgICBWZWN0b3I8Tm9kZSosIDM+IGFyZ3M7CiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQXJnczsgKytpKQotICAgICAg
ICAgICAgICAgIGFyZ3MuYXBwZW5kKGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxICsg
aSwgcmVnaXN0ZXJPZmZzZXQpKSk7CisgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQoZ2V0KHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxICsgaSwgcmVnaXN0ZXJPZmZz
ZXQpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIE5vZGUqIHJlc3VsdE5vZGU7CiAgICAg
ICAgICAgICBpZiAobnVtQXJncyArIDEgPD0gMykgewpAQCAtMjY2MiwxMyArMjcxNiwxMyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNhbGxlZSwgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdCwgSQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWVPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZz
ZXQpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlT3BlcmFuZCA9IHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rlck9mZnNldCk7CiAgICAg
ICAgICAgICBOb2RlKiBwYXJzZUludDsKICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyA9PSAyKQogICAgICAgICAgICAgICAgIHBhcnNlSW50ID0gYWRkVG9HcmFwaChQ
YXJzZUludCwgT3BJbmZvKCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHZhbHVlT3BlcmFuZCkp
OwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzID4gMik7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJh
ZGl4T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDIsIHJlZ2lzdGVyT2Zmc2V0
KTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmFkaXhPcGVyYW5kID0gdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDIsIHJlZ2lzdGVyT2Zmc2V0KTsKICAg
ICAgICAgICAgICAgICBwYXJzZUludCA9IGFkZFRvR3JhcGgoUGFyc2VJbnQsIE9wSW5mbygpLCBP
cEluZm8ocHJlZGljdGlvbiksIGdldCh2YWx1ZU9wZXJhbmQpLCBnZXQocmFkaXhPcGVyYW5kKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzZXRSZXN1bHQocGFyc2VJbnQpOwpAQCAtMjY4
Myw4ICsyNzM3LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljQ2FsbChO
b2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIGluc2VydENoZWNrcygpOwotICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIHRoaXNPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
MCwgcmVnaXN0ZXJPZmZzZXQpOwotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4T3Bl
cmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzT3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50SW5jbHVkaW5nVGhpcygwLCByZWdpc3Rlck9mZnNldCk7CisgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgaW5kZXhPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJ
bmNsdWRpbmdUaGlzKDEsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAgICAgICAgIE5vZGUqIGNoYXJD
b2RlID0gYWRkVG9HcmFwaChTdHJpbmdDaGFyQ29kZUF0LCBPcEluZm8oQXJyYXlNb2RlKEFycmF5
OjpTdHJpbmcsIEFycmF5OjpSZWFkKS5hc1dvcmQoKSksIGdldCh0aGlzT3BlcmFuZCksIGdldChp
bmRleE9wZXJhbmQpKTsKIAogICAgICAgICAgICAgc2V0UmVzdWx0KGNoYXJDb2RlKTsKQEAgLTI3
MDIsOCArMjc1Niw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwo
Tm9kZSogY2FsbGVlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBJCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKLSAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciB0aGlzT3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KDAsIHJlZ2lzdGVyT2Zmc2V0KTsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleE9w
ZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCk7Cisg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc09wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMCwgcmVnaXN0ZXJPZmZzZXQpOworICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGluZGV4T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgICAgICBOb2RlKiByZXN1
bHQgPSBhZGRUb0dyYXBoKFN0cmluZ0NvZGVQb2ludEF0LCBPcEluZm8oQXJyYXlNb2RlKEFycmF5
OjpTdHJpbmcsIEFycmF5OjpSZWFkKS5hc1dvcmQoKSksIGdldCh0aGlzT3BlcmFuZCksIGdldChp
bmRleE9wZXJhbmQpKTsKIAogICAgICAgICAgICAgc2V0UmVzdWx0KHJlc3VsdCk7CkBAIC0yNzIy
LDggKzI3NzYsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5v
ZGUqIGNhbGxlZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgSQogICAgICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMTY3OAogCiAgICAgICAgICAg
ICBpbnNlcnRDaGVja3MoKTsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzT3BlcmFu
ZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KTsKLSAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleE9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCk7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dGhpc09wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMCwg
cmVnaXN0ZXJPZmZzZXQpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4T3BlcmFu
ZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rlck9m
ZnNldCk7CiAgICAgICAgICAgICBOb2RlKiBjaGFyQ29kZSA9IGFkZFRvR3JhcGgoU3RyaW5nQ2hh
ckF0LCBPcEluZm8oQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcsIEFycmF5OjpSZWFkKS5hc1dvcmQo
KSksIGdldCh0aGlzT3BlcmFuZCksIGdldChpbmRleE9wZXJhbmQpKTsKIAogICAgICAgICAgICAg
c2V0UmVzdWx0KGNoYXJDb2RlKTsKQEAgLTI3MzQsNyArMjc4OCw3IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwoTm9kZSogY2FsbGVlLCBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0LCBJCiAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0g
MSkKICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcElu
Zm8obV9ncmFwaC5mcmVlemUoanNOdW1iZXIoMzIpKSkpKTsKICAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgIE5vZGUqIG9wZXJhbmQgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBvcGVyYW5k
ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rl
ck9mZnNldCkpOwogICAgICAgICAgICAgICAgIHNldFJlc3VsdChhZGRUb0dyYXBoKEFyaXRoQ2x6
MzIsIG9wZXJhbmQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtMjc0NCw3ICsyNzk4LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2lj
Q2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIGluc2VydENoZWNrcygpOwotICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBp
bmRleE9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMSwg
cmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICAgICAgTm9kZSogY2hhckNvZGUgPSBhZGRUb0dyYXBo
KFN0cmluZ0Zyb21DaGFyQ29kZSwgZ2V0KGluZGV4T3BlcmFuZCkpOwogCiAgICAgICAgICAgICBz
ZXRSZXN1bHQoY2hhckNvZGUpOwpAQCAtMjc1Nyw3ICsyODExLDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlSW50cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQsIEkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGluc2VydENoZWNrcygpOwotICAgICAgICAgICAgTm9kZSogcmVnRXhwRXhlYyA9
IGFkZFRvR3JhcGgoUmVnRXhwRXhlYywgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiksIGFk
ZFRvR3JhcGgoR2V0R2xvYmFsT2JqZWN0LCBjYWxsZWUpLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpOworICAgICAgICAgICAgTm9kZSogcmVnRXhwRXhlYyA9
IGFkZFRvR3JhcGgoUmVnRXhwRXhlYywgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiksIGFk
ZFRvR3JhcGgoR2V0R2xvYmFsT2JqZWN0LCBjYWxsZWUpLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnRJbmNsdWRpbmdUaGlzKDAsIHJlZ2lzdGVyT2Zmc2V0KSksIGdldCh2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQpKSk7CiAgICAg
ICAgICAgICBzZXRSZXN1bHQocmVnRXhwRXhlYyk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtMjc5NSw3ICsyODQ5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlSW50cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQs
IEkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICAgICAg
Ly8gQ2hlY2sgdGhhdCByZWdFeHBPYmplY3QgaXMgYWN0dWFsbHkgYSBSZWdFeHAgb2JqZWN0Lgot
ICAgICAgICAgICAgICAgIE5vZGUqIHJlZ0V4cE9iamVjdCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgICAgIE5vZGUqIHJl
Z0V4cE9iamVjdCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
MCwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrLCBF
ZGdlKHJlZ0V4cE9iamVjdCwgUmVnRXhwT2JqZWN0VXNlKSk7CiAKICAgICAgICAgICAgICAgICAv
LyBDaGVjayB0aGF0IHJlZ0V4cE9iamVjdCdzIGV4ZWMgaXMgYWN0dWFsbHkgdGhlIHByaW1vZGlh
bCBSZWdFeHAucHJvdG90eXBlLmV4ZWMuCkBAIC0yODA3LDggKzI4NjEsOCBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNhbGxlZSwgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCwgSQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpbnNlcnRDaGVja3Mo
KTsKLSAgICAgICAgICAgIE5vZGUqIHJlZ0V4cE9iamVjdCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgTm9kZSogcmVnRXhw
RXhlYyA9IGFkZFRvR3JhcGgoUmVnRXhwVGVzdCwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlv
biksIGFkZFRvR3JhcGgoR2V0R2xvYmFsT2JqZWN0LCBjYWxsZWUpLCByZWdFeHBPYmplY3QsIGdl
dCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKTsKKyAgICAg
ICAgICAgIE5vZGUqIHJlZ0V4cE9iamVjdCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dEluY2x1ZGluZ1RoaXMoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgIE5vZGUqIHJl
Z0V4cEV4ZWMgPSBhZGRUb0dyYXBoKFJlZ0V4cFRlc3QsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRp
Y3Rpb24pLCBhZGRUb0dyYXBoKEdldEdsb2JhbE9iamVjdCwgY2FsbGVlKSwgcmVnRXhwT2JqZWN0
LCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDEsIHJlZ2lzdGVy
T2Zmc2V0KSkpOwogICAgICAgICAgICAgc2V0UmVzdWx0KHJlZ0V4cEV4ZWMpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI4MTgsNyArMjg3Miw3IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwoTm9kZSogY2FsbGVlLCBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0LCBJCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyA9PSAyKTsKIAogICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0g
ICAgICAgICAgICBOb2RlKiByZWdFeHBNYXRjaCA9IGFkZFRvR3JhcGgoUmVnRXhwTWF0Y2hGYXN0
LCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYWRkVG9HcmFwaChHZXRHbG9iYWxPYmpl
Y3QsIGNhbGxlZSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9m
ZnNldCkpLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQp
KSk7CisgICAgICAgICAgICBOb2RlKiByZWdFeHBNYXRjaCA9IGFkZFRvR3JhcGgoUmVnRXhwTWF0
Y2hGYXN0LCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYWRkVG9HcmFwaChHZXRHbG9i
YWxPYmplY3QsIGNhbGxlZSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGlu
Z1RoaXMoMCwgcmVnaXN0ZXJPZmZzZXQpKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rlck9mZnNldCkpKTsKICAgICAgICAgICAgIHNldFJlc3Vs
dChyZWdFeHBNYXRjaCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAt
MjgyOCw3ICsyODgyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljQ2Fs
bChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIGluc2VydENoZWNrcygpOwotICAgICAgICAg
ICAgc2V0UmVzdWx0KGFkZFRvR3JhcGgoT2JqZWN0Q3JlYXRlLCBnZXQodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSkpOworICAgICAgICAgICAgc2V0UmVzdWx0
KGFkZFRvR3JhcGgoT2JqZWN0Q3JlYXRlLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJ
bmNsdWRpbmdUaGlzKDEsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAKQEAgLTI4MzcsNyArMjg5MSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUludHJpbnNpY0NhbGwoTm9kZSogY2FsbGVlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0LCBJCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBpbnNl
cnRDaGVja3MoKTsKLSAgICAgICAgICAgIHNldFJlc3VsdChhZGRUb0dyYXBoKEdldFByb3RvdHlw
ZU9mLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsKKyAgICAgICAgICAgIHNldFJlc3VsdChh
ZGRUb0dyYXBoKEdldFByb3RvdHlwZU9mLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwg
Z2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rlck9m
ZnNldCkpKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCkBAIC0yODQ2
LDcgKzI5MDAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5v
ZGUqIGNhbGxlZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgSQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgICAgICBz
ZXRSZXN1bHQoYWRkVG9HcmFwaChTYW1lVmFsdWUsIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudCgxLCByZWdpc3Rlck9mZnNldCkpLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
MiwgcmVnaXN0ZXJPZmZzZXQpKSkpOworICAgICAgICAgICAgc2V0UmVzdWx0KGFkZFRvR3JhcGgo
U2FtZVZhbHVlLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDEs
IHJlZ2lzdGVyT2Zmc2V0KSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGlu
Z1RoaXMoMiwgcmVnaXN0ZXJPZmZzZXQpKSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KIApAQCAtMjg1NSw3ICsyOTA5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlSW50cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIGluc2VydENoZWNr
cygpOwotICAgICAgICAgICAgc2V0UmVzdWx0KGFkZFRvR3JhcGgoT2JqZWN0S2V5cywgZ2V0KHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsKKyAgICAgICAg
ICAgIHNldFJlc3VsdChhZGRUb0dyYXBoKE9iamVjdEtleXMsIGdldCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQpKSkpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIApAQCAtMjg2NCw3ICsyOTE4LDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQsIEkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAg
ICAgICAgIGluc2VydENoZWNrcygpOwotICAgICAgICAgICAgc2V0UmVzdWx0KGFkZFRvR3JhcGgo
R2V0UHJvdG90eXBlT2YsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBFZGdlKGdldCh2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpLCBPYmplY3RVc2Up
KSk7CisgICAgICAgICAgICBzZXRSZXN1bHQoYWRkVG9HcmFwaChHZXRQcm90b3R5cGVPZiwgT3BJ
bmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiksIEVkZ2UoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rlck9mZnNldCkpLCBPYmplY3RVc2UpKSk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCkBAIC0yODcyLDEzICsyOTI2LDEz
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwoTm9kZSogY2FsbGVl
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBJCiAgICAgICAgICAgICBBU1NFUlQoYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgPT0gMik7CiAKICAgICAgICAgICAgIGluc2VydENoZWNrcygpOwot
ICAgICAgICAgICAgc2V0UmVzdWx0KGFkZFRvR3JhcGgoSXNUeXBlZEFycmF5VmlldywgT3BJbmZv
KHByZWRpY3Rpb24pLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJP
ZmZzZXQpKSkpOworICAgICAgICAgICAgc2V0UmVzdWx0KGFkZFRvR3JhcGgoSXNUeXBlZEFycmF5
VmlldywgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJ
bmNsdWRpbmdUaGlzKDEsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBTdHJpbmdQcm90b3R5cGVWYWx1ZU9mSW50
cmluc2ljOiB7CiAgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKLSAgICAgICAgICAgIE5vZGUq
IHZhbHVlID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0
KSk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgIHNldFJl
c3VsdChhZGRUb0dyYXBoKFN0cmluZ1ZhbHVlT2YsIHZhbHVlKSk7CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMjkzMCw3ICsyOTg0LDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlSW50cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQsIEkKIAogICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAKLSAgICAgICAgICAgIE5v
ZGUqIHJlc3VsdE5vZGUgPSBhZGRUb0dyYXBoKFN0cmluZ1JlcGxhY2UsIE9wSW5mbygwKSwgT3BJ
bmZvKHByZWRpY3Rpb24pLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0
ZXJPZmZzZXQpKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zm
c2V0KSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgyLCByZWdpc3Rlck9mZnNldCkp
KTsKKyAgICAgICAgICAgIE5vZGUqIHJlc3VsdE5vZGUgPSBhZGRUb0dyYXBoKFN0cmluZ1JlcGxh
Y2UsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnRJbmNsdWRpbmdUaGlzKDAsIHJlZ2lzdGVyT2Zmc2V0KSksIGdldCh2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQpKSwgZ2V0KHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygyLCByZWdpc3Rlck9mZnNldCkp
KTsKICAgICAgICAgICAgIHNldFJlc3VsdChyZXN1bHROb2RlKTsKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICB9CkBAIC0yOTQwLDcgKzI5OTQsNyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNhbGxlZSwgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCwgSQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgICAgICBOb2RlKiByZXN1bHROb2RlID0g
YWRkVG9HcmFwaChTdHJpbmdSZXBsYWNlUmVnRXhwLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0
aW9uKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSks
IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpLCBnZXQo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMiwgcmVnaXN0ZXJPZmZzZXQpKSk7CisgICAgICAg
ICAgICBOb2RlKiByZXN1bHROb2RlID0gYWRkVG9HcmFwaChTdHJpbmdSZXBsYWNlUmVnRXhwLCBP
cEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50SW5jbHVkaW5nVGhpcygwLCByZWdpc3Rlck9mZnNldCkpLCBnZXQodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDEsIHJlZ2lzdGVyT2Zmc2V0KSksIGdldCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMiwgcmVnaXN0ZXJPZmZzZXQpKSk7CiAg
ICAgICAgICAgICBzZXRSZXN1bHQocmVzdWx0Tm9kZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQpAQCAtMjk1NSw3ICszMDA5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlSW50cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQs
IEkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGluc2VydENoZWNrcygpOwotICAgICAgICAgICAgTm9kZSogb3BlcmFuZCA9IGdldCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAg
Tm9kZSogb3BlcmFuZCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1Ro
aXMoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgIE5vZGVUeXBlIG9wOwogICAgICAg
ICAgICAgaWYgKGludHJpbnNpYyA9PSBSb3VuZEludHJpbnNpYykKICAgICAgICAgICAgICAgICBv
cCA9IEFyaXRoUm91bmQ7CkBAIC0yOTc1LDggKzMwMjksOCBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNhbGxlZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCwgSQogICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDwgMykKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsK
LSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsZWZ0T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KTsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciByaWdodE9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgyLCByZWdpc3Rl
ck9mZnNldCk7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbGVmdE9wZXJhbmQgPSB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQpOwor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJpZ2h0T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygyLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgICAg
ICBOb2RlKiBsZWZ0ID0gZ2V0KGxlZnRPcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGUqIHJpZ2h0
ID0gZ2V0KHJpZ2h0T3BlcmFuZCk7CiAgICAgICAgICAgICBzZXRSZXN1bHQoYWRkVG9HcmFwaChB
cml0aElNdWwsIGxlZnQsIHJpZ2h0KSk7CkBAIC0zMDE3LDcgKzMwNzEsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNhbGxlZSwgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCwgSQogICAgICAgICBjYXNlIFNldEludDMySGVhcFByZWRpY3Rpb25JbnRyaW5z
aWM6IHsKICAgICAgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDE7IGkgPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgKytpKSB7Ci0gICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpLCByZWdp
c3Rlck9mZnNldCkpOworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBnZXQodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGksIHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmhhc0hlYXBQcmVkaWN0aW9uKCkpCiAgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPnNldEhlYXBQcmVkaWN0aW9uKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAg
ICAgfQpAQCAtMzAyOCw3ICszMDgyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50
cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEkKICAgICAg
ICAgY2FzZSBDaGVja0ludDMySW50cmluc2ljOiB7CiAgICAgICAgICAgICBpbnNlcnRDaGVja3Mo
KTsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXM7ICsraSkgewotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBnZXQodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoaSwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBO
b2RlKiBub2RlID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhp
LCByZWdpc3Rlck9mZnNldCkpOwogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwg
RWRnZShub2RlLCBJbnQzMlVzZSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2V0UmVz
dWx0KGpzQ29uc3RhbnQoanNCb29sZWFuKHRydWUpKSk7CkBAIC0zMDM5LDcgKzMwOTMsNyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNhbGxlZSwgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdCwgSQogICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzIDwgMikKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICBpbnNlcnRDaGVja3MoKTsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0g
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpOworICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICAgICAgaWYgKGVuYWJsZUlu
dDUyKCkpCiAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KGFkZFRvR3JhcGgoRmlhdEludDUyLCBn
ZXQob3BlcmFuZCkpKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTMwNTIsOCArMzEwNiw4IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwoTm9kZSogY2FsbGVlLCBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0LCBJCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKLSAgICAgICAgICAgIE5vZGUqIG1hcCA9IGdldCh2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAg
ICAgTm9kZSoga2V5ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVy
T2Zmc2V0KSk7CisgICAgICAgICAgICBOb2RlKiBtYXAgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnRJbmNsdWRpbmdUaGlzKDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICBO
b2RlKiBrZXkgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDEs
IHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAgICAgICAgICBOb2RlKiBub3JtYWxpemVkS2V5ID0gYWRk
VG9HcmFwaChOb3JtYWxpemVNYXBLZXksIGtleSk7CiAgICAgICAgICAgICBOb2RlKiBoYXNoID0g
YWRkVG9HcmFwaChNYXBIYXNoLCBub3JtYWxpemVkS2V5KTsKICAgICAgICAgICAgIE5vZGUqIGJ1
Y2tldCA9IGFkZFRvR3JhcGgoR2V0TWFwQnVja2V0LCBFZGdlKG1hcCwgTWFwT2JqZWN0VXNlKSwg
RWRnZShub3JtYWxpemVkS2V5KSwgRWRnZShoYXNoKSk7CkBAIC0zMDY4LDggKzMxMjIsOCBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNhbGxlZSwgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdCwgSQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgICAgICBOb2RlKiBtYXBPclNldCA9
IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOwotICAg
ICAgICAgICAgTm9kZSoga2V5ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJl
Z2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICBOb2RlKiBtYXBPclNldCA9IGdldCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAg
ICAgICAgICAgIE5vZGUqIGtleSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1
ZGluZ1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgIE5vZGUqIG5vcm1hbGl6
ZWRLZXkgPSBhZGRUb0dyYXBoKE5vcm1hbGl6ZU1hcEtleSwga2V5KTsKICAgICAgICAgICAgIE5v
ZGUqIGhhc2ggPSBhZGRUb0dyYXBoKE1hcEhhc2gsIG5vcm1hbGl6ZWRLZXkpOwogICAgICAgICAg
ICAgVXNlS2luZCB1c2VLaW5kID0gaW50cmluc2ljID09IEpTU2V0SGFzSW50cmluc2ljID8gU2V0
T2JqZWN0VXNlIDogTWFwT2JqZWN0VXNlOwpAQCAtMzA5Miw4ICszMTQ2LDggQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdp
c3RlciByZXN1bHQsIEkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAg
ICAgIGluc2VydENoZWNrcygpOwotICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgTm9k
ZSoga2V5ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0
KSk7CisgICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50SW5jbHVkaW5nVGhpcygwLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgTm9kZSog
a2V5ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxLCByZWdp
c3Rlck9mZnNldCkpOwogICAgICAgICAgICAgTm9kZSogbm9ybWFsaXplZEtleSA9IGFkZFRvR3Jh
cGgoTm9ybWFsaXplTWFwS2V5LCBrZXkpOwogICAgICAgICAgICAgTm9kZSogaGFzaCA9IGFkZFRv
R3JhcGgoTWFwSGFzaCwgbm9ybWFsaXplZEtleSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFNl
dEFkZCwgYmFzZSwgbm9ybWFsaXplZEtleSwgaGFzaCk7CkBAIC0zMTA2LDkgKzMxNjAsOSBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNhbGxlZSwgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdCwgSQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0
KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAg
ICAgICBOb2RlKiBrZXkgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0
ZXJPZmZzZXQpKTsKLSAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KDIsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICBOb2RlKiBiYXNl
ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygwLCByZWdpc3Rl
ck9mZnNldCkpOworICAgICAgICAgICAgTm9kZSoga2V5ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAg
Tm9kZSogdmFsdWUgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlz
KDIsIHJlZ2lzdGVyT2Zmc2V0KSk7CiAKICAgICAgICAgICAgIE5vZGUqIG5vcm1hbGl6ZWRLZXkg
PSBhZGRUb0dyYXBoKE5vcm1hbGl6ZU1hcEtleSwga2V5KTsKICAgICAgICAgICAgIE5vZGUqIGhh
c2ggPSBhZGRUb0dyYXBoKE1hcEhhc2gsIG5vcm1hbGl6ZWRLZXkpOwpAQCAtMzEyNyw3ICszMTgx
LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljQ2FsbChOb2RlKiBjYWxs
ZWUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEkKICAgICAgICAgICAgIEFTU0VSVChhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyA9PSAyKTsKIAogICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7
Ci0gICAgICAgICAgICBOb2RlKiBtYXAgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
MSwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgIE5vZGUqIG1hcCA9IGdldCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKICAg
ICAgICAgICAgIFVzZUtpbmQgdXNlS2luZCA9IGludHJpbnNpYyA9PSBKU1NldEJ1Y2tldEhlYWRJ
bnRyaW5zaWMgPyBTZXRPYmplY3RVc2UgOiBNYXBPYmplY3RVc2U7CiAgICAgICAgICAgICBOb2Rl
KiByZXN1bHROb2RlID0gYWRkVG9HcmFwaChHZXRNYXBCdWNrZXRIZWFkLCBFZGdlKG1hcCwgdXNl
S2luZCkpOwogICAgICAgICAgICAgc2V0UmVzdWx0KHJlc3VsdE5vZGUpOwpAQCAtMzEzOSw3ICsz
MTkzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljQ2FsbChOb2RlKiBj
YWxsZWUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEkKICAgICAgICAgICAgIEFTU0VSVChhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAyKTsKIAogICAgICAgICAgICAgaW5zZXJ0Q2hlY2tz
KCk7Ci0gICAgICAgICAgICBOb2RlKiBidWNrZXQgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgIE5vZGUqIGJ1Y2tldCA9IGdl
dCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMSwgcmVnaXN0ZXJPZmZz
ZXQpKTsKICAgICAgICAgICAgIEJ1Y2tldE93bmVyVHlwZSB0eXBlID0gaW50cmluc2ljID09IEpT
U2V0QnVja2V0TmV4dEludHJpbnNpYyA/IEJ1Y2tldE93bmVyVHlwZTo6U2V0IDogQnVja2V0T3du
ZXJUeXBlOjpNYXA7CiAgICAgICAgICAgICBOb2RlKiByZXN1bHROb2RlID0gYWRkVG9HcmFwaChH
ZXRNYXBCdWNrZXROZXh0LCBPcEluZm8odHlwZSksIGJ1Y2tldCk7CiAgICAgICAgICAgICBzZXRS
ZXN1bHQocmVzdWx0Tm9kZSk7CkBAIC0zMTUxLDcgKzMyMDUsNyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNhbGxlZSwgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCwgSQogICAgICAgICAgICAgQVNTRVJUKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09
IDIpOwogCiAgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKLSAgICAgICAgICAgIE5vZGUqIGJ1
Y2tldCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkp
OworICAgICAgICAgICAgTm9kZSogYnVja2V0ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rlck9mZnNldCkpOwogICAgICAgICAgICAgQnVja2V0
T3duZXJUeXBlIHR5cGUgPSBpbnRyaW5zaWMgPT0gSlNTZXRCdWNrZXRLZXlJbnRyaW5zaWMgPyBC
dWNrZXRPd25lclR5cGU6OlNldCA6IEJ1Y2tldE93bmVyVHlwZTo6TWFwOwogICAgICAgICAgICAg
Tm9kZSogcmVzdWx0Tm9kZSA9IGFkZFRvR3JhcGgoTG9hZEtleUZyb21NYXBCdWNrZXQsIE9wSW5m
byh0eXBlKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBidWNrZXQpOwogICAgICAgICAgICAgc2V0UmVz
dWx0KHJlc3VsdE5vZGUpOwpAQCAtMzE2Miw3ICszMjE2LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlSW50cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciByZXN1
bHQsIEkKICAgICAgICAgICAgIEFTU0VSVChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAy
KTsKIAogICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgICAgICBOb2RlKiBidWNr
ZXQgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKTsK
KyAgICAgICAgICAgIE5vZGUqIGJ1Y2tldCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dEluY2x1ZGluZ1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgIE5vZGUqIHJl
c3VsdE5vZGUgPSBhZGRUb0dyYXBoKExvYWRWYWx1ZUZyb21NYXBCdWNrZXQsIE9wSW5mbyhCdWNr
ZXRPd25lclR5cGU6Ok1hcCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYnVja2V0KTsKICAgICAgICAg
ICAgIHNldFJlc3VsdChyZXN1bHROb2RlKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAt
MzE3Niw4ICszMjMwLDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljQ2Fs
bChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIGluc2VydENoZWNrcygpOwotICAgICAgICAg
ICAgTm9kZSogbWFwID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVy
T2Zmc2V0KSk7Ci0gICAgICAgICAgICBOb2RlKiBrZXkgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgIE5vZGUqIG1hcCA9IGdl
dCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMCwgcmVnaXN0ZXJPZmZz
ZXQpKTsKKyAgICAgICAgICAgIE5vZGUqIGtleSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgIGFkZFRv
R3JhcGgoQ2hlY2ssIEVkZ2Uoa2V5LCBPYmplY3RVc2UpKTsKICAgICAgICAgICAgIE5vZGUqIGhh
c2ggPSBhZGRUb0dyYXBoKE1hcEhhc2gsIGtleSk7CiAgICAgICAgICAgICBOb2RlKiBob2xkZXIg
PSBhZGRUb0dyYXBoKFdlYWtNYXBHZXQsIEVkZ2UobWFwLCBXZWFrTWFwT2JqZWN0VXNlKSwgRWRn
ZShrZXksIE9iamVjdFVzZSksIEVkZ2UoaGFzaCwgSW50MzJVc2UpKTsKQEAgLTMxOTUsOCArMzI0
OSw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwoTm9kZSogY2Fs
bGVlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBJCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKLSAgICAgICAgICAgIE5vZGUqIG1h
cCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOwot
ICAgICAgICAgICAgTm9kZSoga2V5ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEs
IHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICBOb2RlKiBtYXAgPSBnZXQodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAg
ICAgICAgICBOb2RlKiBrZXkgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRp
bmdUaGlzKDEsIHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNr
LCBFZGdlKGtleSwgT2JqZWN0VXNlKSk7CiAgICAgICAgICAgICBOb2RlKiBoYXNoID0gYWRkVG9H
cmFwaChNYXBIYXNoLCBrZXkpOwogICAgICAgICAgICAgTm9kZSogaG9sZGVyID0gYWRkVG9HcmFw
aChXZWFrTWFwR2V0LCBFZGdlKG1hcCwgV2Vha01hcE9iamVjdFVzZSksIEVkZ2Uoa2V5LCBPYmpl
Y3RVc2UpLCBFZGdlKGhhc2gsIEludDMyVXNlKSk7CkBAIC0zMjE1LDggKzMyNjksOCBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNhbGxlZSwgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdCwgSQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
ICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgICAgICBOb2RlKiBtYXAgPSBnZXQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAgICAgICAg
IE5vZGUqIGtleSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9m
ZnNldCkpOworICAgICAgICAgICAgTm9kZSogbWFwID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50SW5jbHVkaW5nVGhpcygwLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgTm9k
ZSoga2V5ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxLCBy
ZWdpc3Rlck9mZnNldCkpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVjaywgRWRnZShrZXks
IE9iamVjdFVzZSkpOwogICAgICAgICAgICAgTm9kZSogaGFzaCA9IGFkZFRvR3JhcGgoTWFwSGFz
aCwga2V5KTsKICAgICAgICAgICAgIE5vZGUqIGhvbGRlciA9IGFkZFRvR3JhcGgoV2Vha01hcEdl
dCwgRWRnZShtYXAsIFdlYWtTZXRPYmplY3RVc2UpLCBFZGdlKGtleSwgT2JqZWN0VXNlKSwgRWRn
ZShoYXNoLCBJbnQzMlVzZSkpOwpAQCAtMzIzNSw4ICszMjg5LDggQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlSW50cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQsIEkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIGlu
c2VydENoZWNrcygpOwotICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldCh2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgTm9kZSoga2V5
ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSk7Cisg
ICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5j
bHVkaW5nVGhpcygwLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgTm9kZSoga2V5ID0g
Z2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rlck9m
ZnNldCkpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVjaywgRWRnZShrZXksIE9iamVjdFVz
ZSkpOwogICAgICAgICAgICAgTm9kZSogaGFzaCA9IGFkZFRvR3JhcGgoTWFwSGFzaCwga2V5KTsK
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoV2Vha1NldEFkZCwgRWRnZShiYXNlLCBXZWFrU2V0T2Jq
ZWN0VXNlKSwgRWRnZShrZXksIE9iamVjdFVzZSksIEVkZ2UoaGFzaCwgSW50MzJVc2UpKTsKQEAg
LTMyNTIsOSArMzMwNiw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpY0Nh
bGwoTm9kZSogY2FsbGVlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBJCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKLSAgICAgICAg
ICAgIE5vZGUqIGJhc2UgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0
ZXJPZmZzZXQpKTsKLSAgICAgICAgICAgIE5vZGUqIGtleSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgTm9kZSogdmFsdWUg
PSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMiwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAg
ICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNs
dWRpbmdUaGlzKDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICBOb2RlKiBrZXkgPSBn
ZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDEsIHJlZ2lzdGVyT2Zm
c2V0KSk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoMiwgcmVnaXN0ZXJPZmZzZXQpKTsKIAogICAgICAgICAgICAg
YWRkVG9HcmFwaChDaGVjaywgRWRnZShrZXksIE9iamVjdFVzZSkpOwogICAgICAgICAgICAgTm9k
ZSogaGFzaCA9IGFkZFRvR3JhcGgoTWFwSGFzaCwga2V5KTsKQEAgLTMyNzIsNyArMzMyNiw3IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwoTm9kZSogY2FsbGVlLCBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBJCiAgICAgICAgICAgICBpZiAoIWlzNjRCaXQoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsK
LSAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
MCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQodmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CiAg
ICAgICAgICAgICBzZXRSZXN1bHQoYWRkVG9HcmFwaChEYXRlR2V0VGltZSwgT3BJbmZvKGludHJp
bnNpYyksIE9wSW5mbygpLCBiYXNlKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQpAQCAtMzI5OCw3ICszMzUyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50
cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEkKICAgICAg
ICAgICAgIGlmICghaXM2NEJpdCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgIGluc2VydENoZWNrcygpOwotICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldCh2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAg
ICAgTm9kZSogYmFzZSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1Ro
aXMoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgIHNldFJlc3VsdChhZGRUb0dyYXBo
KERhdGVHZXRJbnQzMk9yTmFOLCBPcEluZm8oaW50cmluc2ljKSwgT3BJbmZvKHByZWRpY3Rpb24p
LCBiYXNlKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMzM2OCw3
ICszNDIyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljQ2FsbChOb2Rl
KiBjYWxsZWUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEkKICAgICAgICAgICAgICAgICBpZiAo
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPCAzKQogICAgICAgICAgICAgICAgICAgICBpc0xp
dHRsZUVuZGlhbiA9IEZhbHNlVHJpU3RhdGU7CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGxpdHRsZUVuZGlhbkNoaWxkID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDIsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgIGxpdHRs
ZUVuZGlhbkNoaWxkID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhp
cygyLCByZWdpc3Rlck9mZnNldCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAobGl0dGxlRW5k
aWFuQ2hpbGQtPmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFs
dWUgY29uc3RhbnQgPSBsaXR0bGVFbmRpYW5DaGlsZC0+Y29uc3RhbnQoKS0+dmFsdWUoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdGFudCkgewpAQCAtMzM4Nyw3ICszNDQxLDcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljQ2FsbChOb2RlKiBjYWxsZWUs
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEkKICAgICAgICAgICAgIGRhdGEuYnl0ZVNpemUgPSBi
eXRlU2l6ZTsKIAogICAgICAgICAgICAgc2V0UmVzdWx0KAotICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgob3AsIE9wSW5mbyhkYXRhLmFzUXVhZFdvcmQpLCBPcEluZm8ocHJlZGljdGlvbiksIGdl
dCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpLCBnZXQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSwgbGl0dGxlRW5kaWFu
Q2hpbGQpKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKG9wLCBPcEluZm8oZGF0YS5hc1F1
YWRXb3JkKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnRJbmNsdWRpbmdUaGlzKDAsIHJlZ2lzdGVyT2Zmc2V0KSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQpKSwgbGl0dGxlRW5kaWFu
Q2hpbGQpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKQEAgLTM0NTMs
NyArMzUwNyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwoTm9k
ZSogY2FsbGVlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBJCiAgICAgICAgICAgICAgICAgaWYg
KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDwgNCkKICAgICAgICAgICAgICAgICAgICAgaXNM
aXR0bGVFbmRpYW4gPSBGYWxzZVRyaVN0YXRlOwogICAgICAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBsaXR0bGVFbmRpYW5DaGlsZCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudCgzLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICBsaXR0
bGVFbmRpYW5DaGlsZCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1Ro
aXMoMywgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGxpdHRsZUVu
ZGlhbkNoaWxkLT5oYXNDb25zdGFudCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBKU1Zh
bHVlIGNvbnN0YW50ID0gbGl0dGxlRW5kaWFuQ2hpbGQtPmNvbnN0YW50KCktPnZhbHVlKCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnQpIHsKQEAgLTM0NzIsOSArMzUyNiw5
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwoTm9kZSogY2FsbGVl
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBJCiAgICAgICAgICAgICBkYXRhLmJ5dGVTaXplID0g
Ynl0ZVNpemU7CiAgICAgICAgICAgICBkYXRhLmlzRmxvYXRpbmdQb2ludCA9IGlzRmxvYXRpbmdQ
b2ludDsKIAotICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSkpOwotICAgICAgICAgICAgYWRkVmFyQXJnQ2hp
bGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpOwot
ICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KDIsIHJlZ2lzdGVyT2Zmc2V0KSkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygwLCByZWdpc3Rlck9mZnNldCkp
KTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQpKSk7CisgICAgICAgICAgICBhZGRW
YXJBcmdDaGlsZChnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDIs
IHJlZ2lzdGVyT2Zmc2V0KSkpOwogICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQobGl0dGxlRW5k
aWFuQ2hpbGQpOwogCiAgICAgICAgICAgICBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgRGF0YVZp
ZXdTZXQsIE9wSW5mbyhkYXRhLmFzUXVhZFdvcmQpLCBPcEluZm8oKSk7CkBAIC0zNDk1LDggKzM1
NDksOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNh
bGxlZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgSQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgICAgICBOb2RlKiBv
YmplY3QgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQp
KTsKLSAgICAgICAgICAgIE5vZGUqIGtleSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dCgxLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgTm9kZSogb2JqZWN0ID0gZ2V0KHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygwLCByZWdpc3Rlck9mZnNldCkp
OworICAgICAgICAgICAgTm9kZSoga2V5ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rlck9mZnNldCkpOwogICAgICAgICAgICAgTm9kZSogcmVz
dWx0Tm9kZSA9IGFkZFRvR3JhcGgoSGFzT3duUHJvcGVydHksIG9iamVjdCwga2V5KTsKICAgICAg
ICAgICAgIHNldFJlc3VsdChyZXN1bHROb2RlKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtMzUxMCwxMSArMzU2NCwxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5z
aWNDYWxsKE5vZGUqIGNhbGxlZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgSQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAg
ICAgICAgICBOb2RlKiB0aGlzU3RyaW5nID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICBOb2RlKiBzdGFydCA9IGdldCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAg
Tm9kZSogdGhpc1N0cmluZyA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGlu
Z1RoaXMoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgIE5vZGUqIHN0YXJ0ID0gZ2V0
KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rlck9mZnNl
dCkpOwogICAgICAgICAgICAgTm9kZSogZW5kID0gbnVsbHB0cjsKICAgICAgICAgICAgIGlmIChh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+IDIpCi0gICAgICAgICAgICAgICAgZW5kID0gZ2V0
KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDIsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAg
ICAgICAgICAgZW5kID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhp
cygyLCByZWdpc3Rlck9mZnNldCkpOwogICAgICAgICAgICAgTm9kZSogcmVzdWx0Tm9kZSA9IGFk
ZFRvR3JhcGgoU3RyaW5nU2xpY2UsIHRoaXNTdHJpbmcsIHN0YXJ0LCBlbmQpOwogICAgICAgICAg
ICAgc2V0UmVzdWx0KHJlc3VsdE5vZGUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0z
NTI1LDcgKzM1NzksNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxs
KE5vZGUqIGNhbGxlZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgSQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgICAg
ICBOb2RlKiB0aGlzU3RyaW5nID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJl
Z2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICBOb2RlKiB0aGlzU3RyaW5nID0gZ2V0KHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygwLCByZWdpc3Rlck9mZnNldCkpOwog
ICAgICAgICAgICAgTm9kZSogcmVzdWx0Tm9kZSA9IGFkZFRvR3JhcGgoVG9Mb3dlckNhc2UsIHRo
aXNTdHJpbmcpOwogICAgICAgICAgICAgc2V0UmVzdWx0KHJlc3VsdE5vZGUpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC0zNTM2LDEyICszNTkwLDEyIEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUludHJpbnNpY0NhbGwoTm9kZSogY2FsbGVlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0LCBJCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBpbnNl
cnRDaGVja3MoKTsKLSAgICAgICAgICAgIE5vZGUqIHRoaXNOdW1iZXIgPSBnZXQodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgIE5vZGUq
IHRoaXNOdW1iZXIgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlz
KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgPT0gMSkgewogICAgICAgICAgICAgICAgIE5vZGUqIHJlc3VsdE5vZGUgPSBhZGRU
b0dyYXBoKFRvU3RyaW5nLCB0aGlzTnVtYmVyKTsKICAgICAgICAgICAgICAgICBzZXRSZXN1bHQo
cmVzdWx0Tm9kZSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIE5vZGUq
IHJhZGl4ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0
KSk7CisgICAgICAgICAgICAgICAgTm9kZSogcmFkaXggPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnRJbmNsdWRpbmdUaGlzKDEsIHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAgICAgICAgICAg
ICAgTm9kZSogcmVzdWx0Tm9kZSA9IGFkZFRvR3JhcGgoTnVtYmVyVG9TdHJpbmdXaXRoUmFkaXgs
IHRoaXNOdW1iZXIsIHJhZGl4KTsKICAgICAgICAgICAgICAgICBzZXRSZXN1bHQocmVzdWx0Tm9k
ZSk7CiAgICAgICAgICAgICB9CkBAIC0zNTUzLDcgKzM2MDcsNyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNhbGxlZSwgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCwgSQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgaW5z
ZXJ0Q2hlY2tzKCk7Ci0gICAgICAgICAgICBOb2RlKiBpbnB1dCA9IGdldCh2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgTm9kZSogaW5w
dXQgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDEsIHJlZ2lz
dGVyT2Zmc2V0KSk7CiAgICAgICAgICAgICBOb2RlKiByZXN1bHROb2RlID0gYWRkVG9HcmFwaChO
dW1iZXJJc0ludGVnZXIsIGlucHV0KTsKICAgICAgICAgICAgIHNldFJlc3VsdChyZXN1bHROb2Rl
KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzg1MSw3ICszOTA1LDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlVHlwZWRBcnJheUNvbnN0cnVjdG9yKAogCiAgICAgaW5zZXJ0
Q2hlY2tzKCk7CiAgICAgc2V0KHJlc3VsdCwKLSAgICAgICAgYWRkVG9HcmFwaChOZXdUeXBlZEFy
cmF5LCBPcEluZm8odHlwZSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdp
c3Rlck9mZnNldCkpKSk7CisgICAgICAgIGFkZFRvR3JhcGgoTmV3VHlwZWRBcnJheSwgT3BJbmZv
KHR5cGUpLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDEsIHJl
Z2lzdGVyT2Zmc2V0KSkpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzg2OCw3ICszOTIy
LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9u
KAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ29uc3Ry
dWN0KSB7Ci0gICAgICAgIE5vZGUqIG5ld1RhcmdldE5vZGUgPSBnZXQodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgTm9kZSogbmV3VGFyZ2V0
Tm9kZSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMCwgcmVn
aXN0ZXJPZmZzZXQpKTsKICAgICAgICAgLy8gV2UgY2Fubm90IGhhbmRsZSB0aGUgY2FzZSB3aGVy
ZSBuZXcudGFyZ2V0ICE9IGNhbGxlZSAoaS5lLiBhIGNvbnN0cnVjdCBmcm9tIGEgc3VwZXIgY2Fs
bCkgYmVjYXVzZSB3ZQogICAgICAgICAvLyBkb24ndCBrbm93IHdoYXQgdGhlIHByb3RvdHlwZSBv
ZiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUuCiAgICAgICAgIC8vIEZJWE1FOiBJZiB3
ZSBoYXZlIGlubGluZWQgc3VwZXIgY2FsbHMgdXAgdG8gdGhlIGNhbGwgc2l0ZSwgaG93ZXZlciwg
d2Ugc2hvdWxkIGJlIGFibGUgdG8gZmlndXJlIG91dCB0aGUgc3RydWN0dXJlLiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNzAwCkBAIC0zODgzLDEyICszOTM3LDEy
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbigK
ICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyA9PSAyKSB7CiAgICAgICAgICAgICBzZXQocmVzdWx0LAotICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoTmV3QXJyYXlXaXRoU2l6ZSwgT3BJbmZvKEFycmF5V2l0aFVuZGVjaWRlZCks
IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKSk7Cisg
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChOZXdBcnJheVdpdGhTaXplLCBPcEluZm8oQXJyYXlX
aXRoVW5kZWNpZGVkKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhp
cygxLCByZWdpc3Rlck9mZnNldCkpKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpczsgKytpKQotICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGksIHJlZ2lzdGVyT2Zmc2V0KSkpOworICAgICAgICAgICAg
YWRkVmFyQXJnQ2hpbGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhp
cyhpLCByZWdpc3Rlck9mZnNldCkpKTsKICAgICAgICAgc2V0KHJlc3VsdCwKICAgICAgICAgICAg
IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBOZXdBcnJheSwgT3BJbmZvKEFycmF5V2l0aFVuZGVj
aWRlZCksIE9wSW5mbyhhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpKSk7CiAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtMzkwMiw3ICszOTU2LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKAogICAgICAgICBpZiAoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPD0gMSkKICAgICAgICAgICAgIHNldChyZXN1bHQsIGpzQ29uc3RhbnQo
anNOdW1iZXIoMCkpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0KHJlc3VsdCwgYWRk
VG9HcmFwaChUb051bWJlciwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiksIGdldCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKSk7CisgICAgICAgICAg
ICBzZXQocmVzdWx0LCBhZGRUb0dyYXBoKFRvTnVtYmVyLCBPcEluZm8oMCksIE9wSW5mbyhwcmVk
aWN0aW9uKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxLCBy
ZWdpc3Rlck9mZnNldCkpKSk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzkx
NSw3ICszOTY5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcm5h
bEZ1bmN0aW9uKAogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPD0gMSkK
ICAgICAgICAgICAgIHJlc3VsdE5vZGUgPSBqc0NvbnN0YW50KG1fdm0tPnNtYWxsU3RyaW5ncy5l
bXB0eVN0cmluZygpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0Tm9kZSA9IGFk
ZFRvR3JhcGgoQ2FsbFN0cmluZ0NvbnN0cnVjdG9yLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSk7CisgICAgICAgICAgICByZXN1bHROb2RlID0gYWRk
VG9HcmFwaChDYWxsU3RyaW5nQ29uc3RydWN0b3IsIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoMSwgcmVnaXN0ZXJPZmZzZXQpKSk7CiAgICAgICAgIAogICAgICAg
ICBpZiAoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KQogICAgICAgICAgICAgcmVzdWx0Tm9kZSA9
IGFkZFRvR3JhcGgoTmV3U3RyaW5nT2JqZWN0LCBPcEluZm8obV9ncmFwaC5yZWdpc3RlclN0cnVj
dHVyZShmdW5jdGlvbi0+Z2xvYmFsT2JqZWN0KCktPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpKSks
IHJlc3VsdE5vZGUpOwpAQCAtMzkzMiw3ICszOTg2LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKAogICAgICAgICBpZiAoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPD0gMSkKICAgICAgICAgICAgIHJlc3VsdE5vZGUgPSBhZGRUb0dyYXBo
KE5ld1N5bWJvbCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdE5vZGUgPSBhZGRU
b0dyYXBoKE5ld1N5bWJvbCwgYWRkVG9HcmFwaChUb1N0cmluZywgZ2V0KHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsKKyAgICAgICAgICAgIHJlc3VsdE5v
ZGUgPSBhZGRUb0dyYXBoKE5ld1N5bWJvbCwgYWRkVG9HcmFwaChUb1N0cmluZywgZ2V0KHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxLCByZWdpc3Rlck9mZnNldCkpKSk7
CiAKICAgICAgICAgc2V0KHJlc3VsdCwgcmVzdWx0Tm9kZSk7CiAgICAgICAgIHJldHVybiB0cnVl
OwpAQCAtMzk0Niw3ICs0MDAwLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3Rh
bnRJbnRlcm5hbEZ1bmN0aW9uKAogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgPD0gMSkKICAgICAgICAgICAgIHJlc3VsdE5vZGUgPSBhZGRUb0dyYXBoKE5ld09iamVjdCwg
T3BJbmZvKG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoZnVuY3Rpb24tPmdsb2JhbE9iamVjdCgp
LT5vYmplY3RTdHJ1Y3R1cmVGb3JPYmplY3RDb25zdHJ1Y3RvcigpKSkpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICByZXN1bHROb2RlID0gYWRkVG9HcmFwaChDYWxsT2JqZWN0Q29uc3RydWN0
b3IsIE9wSW5mbyhtX2dyYXBoLmZyZWV6ZShmdW5jdGlvbi0+Z2xvYmFsT2JqZWN0KCkpKSwgT3BJ
bmZvKHByZWRpY3Rpb24pLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0
ZXJPZmZzZXQpKSk7CisgICAgICAgICAgICByZXN1bHROb2RlID0gYWRkVG9HcmFwaChDYWxsT2Jq
ZWN0Q29uc3RydWN0b3IsIE9wSW5mbyhtX2dyYXBoLmZyZWV6ZShmdW5jdGlvbi0+Z2xvYmFsT2Jq
ZWN0KCkpKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnRJbmNsdWRpbmdUaGlzKDEsIHJlZ2lzdGVyT2Zmc2V0KSkpOwogICAgICAgICBzZXQocmVzdWx0
LCByZXN1bHROb2RlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNDU0OCw3ICs0
NjAyLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICAvLyAgICB0
aGUgZHJlYWRlZCBhcmd1bWVudHMgb2JqZWN0IG9uIHRoZSBnZXR0ZXIsIHRoZSByaWdodCB0aGlu
Z3MgaGFwcGVuLiBXZWxsLCBzb3J0IG9mIC0KICAgICAvLyAgICBzaW5jZSB3ZSBvbmx5IHJlYWxs
eSBjYXJlIGFib3V0ICd0aGlzJyBpbiB0aGlzIGNhc2UuIEJ1dCB3ZSdyZSBub3QgZ29pbmcgdG8g
dGFrZSB0aGF0CiAgICAgLy8gICAgc2hvcnRjdXQuCi0gICAgc2V0KHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSwgYmFzZSwgSW1tZWRpYXRlTmFrZWRTZXQpOwor
ICAgIHNldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMCwgcmVnaXN0
ZXJPZmZzZXQpLCBiYXNlLCBJbW1lZGlhdGVOYWtlZFNldCk7CiAKICAgICAvLyBXZSd2ZSBzZXQg
c29tZSBsb2NhbHMsIGJ1dCB0aGV5IGFyZSBub3QgdXNlci12aXNpYmxlLiBJdCdzIHN0aWxsIE9L
IHRvIGV4aXQgZnJvbSBoZXJlLgogICAgIG1fZXhpdE9LID0gdHJ1ZTsKQEAgLTQ3MzEsOCArNDc4
NSw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgICAgICBt
X2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoCiAgICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkudG9Mb2NhbCgpKTsKICAgICAKLSAgICAgICAgc2V0KHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSwgYmFzZSwgSW1tZWRp
YXRlTmFrZWRTZXQpOwotICAgICAgICBzZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwg
cmVnaXN0ZXJPZmZzZXQpLCB2YWx1ZSwgSW1tZWRpYXRlTmFrZWRTZXQpOworICAgICAgICBzZXQo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDAsIHJlZ2lzdGVyT2Zmc2V0
KSwgYmFzZSwgSW1tZWRpYXRlTmFrZWRTZXQpOworICAgICAgICBzZXQodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDEsIHJlZ2lzdGVyT2Zmc2V0KSwgdmFsdWUsIEltbWVk
aWF0ZU5ha2VkU2V0KTsKIAogICAgICAgICAvLyBXZSd2ZSBzZXQgc29tZSBsb2NhbHMsIGJ1dCB0
aGV5IGFyZSBub3QgdXNlci12aXNpYmxlLiBJdCdzIHN0aWxsIE9LIHRvIGV4aXQgZnJvbSBoZXJl
LgogICAgICAgICBtX2V4aXRPSyA9IHRydWU7CkBAIC00ODQ5LDcgKzQ5MDMsNyBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICBtX2V4aXRP
SyA9IHRydWU7CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8
IG1fbnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKAotICAgICAgICAgICAgICAg
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSk7CisgICAgICAgICAgICAgICAg
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50KSk7CiAgICAg
ICAgICAgICB2YXJpYWJsZS0+bWVyZ2VTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKAogICAg
ICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUo
bV9jdXJyZW50SW5kZXgsIEJhZENhY2hlKSk7CiAgICAgICAgICAgICB2YXJpYWJsZS0+bWVyZ2VD
aGVja0FycmF5SG9pc3RpbmdGYWlsZWQoCkBAIC01MTU4LDcgKzUyMTIsNyBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICBjYXNlIG9wX25l
d19yZWdleHA6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlLm1fcmVn
ZXhwLmlzQ29uc3RhbnQoKSk7Ci0gICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuUmVnRXhw
ID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdl
dENvbnN0YW50KGJ5dGVjb2RlLm1fcmVnZXhwLm9mZnNldCgpKSk7CisgICAgICAgICAgICBGcm96
ZW5WYWx1ZSogZnJvemVuUmVnRXhwID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFj
a1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fcmVnZXhwKSk7CiAgICAg
ICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTmV3UmVnZXhwLCBPcEluZm8o
ZnJvemVuUmVnRXhwKSwganNDb25zdGFudChqc051bWJlcigwKSkpKTsKICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX25ld19yZWdleHApOwogICAgICAgICB9CkBAIC02MjM5LDcgKzYyOTMsNyBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogCiAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPnNpemUoKSB8fCAobV9ncmFw
aC5jb21waWxhdGlvbigpICYmIG1fY3VycmVudEJsb2NrLT5zaXplKCkgPT0gMSAmJiBtX2N1cnJl
bnRCbG9jay0+YXQoMCktPm9wKCkgPT0gQ291bnRFeGVjdXRpb24pKTsKIAotICAgICAgICAgICAg
VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gYnl0ZWNvZGUubWV0YWRhdGEo
Y29kZUJsb2NrKS5tX2J1ZmZlcjsKKyAgICAgICAgICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2J1
ZmZlcjsKIAogICAgICAgICAgICAgaWYgKCFidWZmZXIpIHsKICAgICAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9jYXRjaCk7IC8vIFRoaXMgY2F0Y2ggaGFzIHlldCB0byBleGVjdXRlLiBOb3Rl
OiB0aGlzIGxvYWQgY2FuIGJlIHJhY3kgd2l0aCB0aGUgbWFpbiB0aHJlYWQuCkBAIC02MjU2LDcg
KzYzMTAsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwogCi0gICAgICAg
ICAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJv
ZmlsZSkgeworICAgICAgICAgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmls
ZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZChwcm9maWxlLm1fb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJl
ZGljdGlvbihsb2NrZXIpOwogICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2Fs
KCkpCkBAIC02Mjg0LDE0ICs2MzM4LDE0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBtX2V4aXRPSyA9IGZhbHNlOyAKIAogICAg
ICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMgPSAwOwotICAgICAgICAgICAgYnVmZmVy
LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgICAg
ICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVy
JiBwcm9maWxlKSB7CiAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQocHJv
ZmlsZS5tX29wZXJhbmQpOwogICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQo
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIEFTU0VSVChv
cGVyYW5kLmlzTG9jYWwoKSk7CiAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBhZGRUb0dy
YXBoKEV4dHJhY3RDYXRjaExvY2FsLCBPcEluZm8obnVtYmVyT2ZMb2NhbHMpLCBPcEluZm8obG9j
YWxQcmVkaWN0aW9uc1tudW1iZXJPZkxvY2Fsc10pKTsKICAgICAgICAgICAgICAgICArK251bWJl
ck9mTG9jYWxzOwotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKHBy
b2ZpbGUubV9vcGVyYW5kKSwgdmFsdWUpOworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92
SGludCwgT3BJbmZvKG9wZXJhbmQpLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgbG9jYWxzVG9T
ZXQudW5jaGVja2VkQXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG9wZXJhbmQsIHZhbHVlKSk7CiAgICAg
ICAgICAgICB9KTsKICAgICAgICAgICAgIGlmIChudW1iZXJPZkxvY2FscykKQEAgLTYzMjIsNyAr
NjM3Niw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQp
CiAgICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBleGl0Qnl0ZWNvZGVJbmRleCA9IEJ5dGVj
b2RlSW5kZXgobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNp
emUoKSk7CiAKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJn
dW1lbnQgPCBhcmd1bWVudFByZWRpY3Rpb25zLnNpemUoKTsgKythcmd1bWVudCkgewotICAgICAg
ICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbmV3VmFyaWFibGVB
Y2Nlc3NEYXRhKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSk7CisgICAgICAg
ICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFj
Y2Vzc0RhdGEodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50
KSk7CiAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5wcmVkaWN0KGFyZ3VtZW50UHJlZGlj
dGlvbnNbYXJndW1lbnRdKTsKIAogICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bWVyZ2VT
dHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKApAQCAtNjQxOSw3ICs2NDczLDcgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIG9wX2puZXFfcHRyOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7Ci0gICAgICAgICAgICBGcm96ZW5W
YWx1ZSogZnJvemVuUG9pbnRlciA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tU
b3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLm9m
ZnNldCgpKSk7CisgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuUG9pbnRlciA9IG1fZ3Jh
cGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFu
dChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKSk7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxh
dGl2ZU9mZnNldCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgICAg
ICAgICBOb2RlKiBjaGlsZCA9IGdldChieXRlY29kZS5tX3ZhbHVlKTsKICAgICAgICAgICAgIGlm
IChieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1faGFzSnVtcGVkKSB7CkBAIC02ODg3LDgg
KzY5NDEsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0
KQogICAgICAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OiB7CiAgICAgICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUxleGlj
YWxFbnZpcm9ubWVudD4oKTsKICAgICAgICAgICAgIEFTU0VSVChieXRlY29kZS5tX3N5bWJvbFRh
YmxlLmlzQ29uc3RhbnQoKSAmJiBieXRlY29kZS5tX2luaXRpYWxWYWx1ZS5pc0NvbnN0YW50KCkp
OwotICAgICAgICAgICAgRnJvemVuVmFsdWUqIHN5bWJvbFRhYmxlID0gbV9ncmFwaC5mcmVlemVT
dHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2Rl
Lm1fc3ltYm9sVGFibGUub2Zmc2V0KCkpKTsKLSAgICAgICAgICAgIEZyb3plblZhbHVlKiBpbml0
aWFsVmFsdWUgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVC
bG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9pbml0aWFsVmFsdWUub2Zmc2V0KCkpKTsKKyAg
ICAgICAgICAgIEZyb3plblZhbHVlKiBzeW1ib2xUYWJsZSA9IG1fZ3JhcGguZnJlZXplU3Ryb25n
KG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX3N5
bWJvbFRhYmxlKSk7CisgICAgICAgICAgICBGcm96ZW5WYWx1ZSogaW5pdGlhbFZhbHVlID0gbV9n
cmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0
YW50KGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlKSk7CiAgICAgICAgICAgICBOb2RlKiBzY29wZSA9
IGdldChieXRlY29kZS5tX3Njb3BlKTsKICAgICAgICAgICAgIE5vZGUqIGxleGljYWxFbnZpcm9u
bWVudCA9IGFkZFRvR3JhcGgoQ3JlYXRlQWN0aXZhdGlvbiwgT3BJbmZvKHN5bWJvbFRhYmxlKSwg
T3BJbmZvKGluaXRpYWxWYWx1ZSksIHNjb3BlKTsKICAgICAgICAgICAgIHNldChieXRlY29kZS5t
X2RzdCwgbGV4aWNhbEVudmlyb25tZW50KTsKQEAgLTY5MTgsNyArNjk3Miw3IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAvLyBs
b2FkcyBmcm9tIHRoZSBzY29wZSByZWdpc3RlciBsYXRlciwgYXMgdGhhdCB3b3VsZCBwcmV2ZW50
IHRoZSBERkcgZnJvbSB0cmFja2luZyB0aGUKICAgICAgICAgICAgIC8vIGJ5dGVjb2RlLWxldmVs
IGxpdmVuZXNzIG9mIHRoZSBzY29wZSByZWdpc3Rlci4KICAgICAgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7Ci0gICAgICAgICAgICBO
b2RlKiBjYWxsZWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkp
OworICAgICAgICAgICAgTm9kZSogY2FsbGVlID0gZ2V0KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7
CiAgICAgICAgICAgICBOb2RlKiByZXN1bHQ7CiAgICAgICAgICAgICBpZiAoSlNGdW5jdGlvbiog
ZnVuY3Rpb24gPSBjYWxsZWUtPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNGdW5jdGlvbio+KCptX3Zt
KSkKICAgICAgICAgICAgICAgICByZXN1bHQgPSB3ZWFrSlNDb25zdGFudChmdW5jdGlvbi0+c2Nv
cGUoKSk7CkBAIC02OTk1LDcgKzcwNDksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAh
aW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgICAgIGludDMyX3Qg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNXaXRoRml4dXAgPSBpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50c1dpdGhGaXh1cC5zaXplKCk7CiAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50SW5k
ZXhJbmNsdWRpbmdUaGlzIDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNXaXRoRml4dXApCi0g
ICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KGFyZ3VtZW50SW5kZXhJbmNsdWRpbmdUaGlzKSk7CisgICAgICAgICAgICAgICAgICAgIGFy
Z3VtZW50ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhhcmd1
bWVudEluZGV4SW5jbHVkaW5nVGhpcykpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgYXJndW1lbnQgPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2Nv
bnN0YW50VW5kZWZpbmVkKSk7CiAgICAgICAgICAgICB9IGVsc2UKQEAgLTczNDMsOCArNzM5Nywx
MCBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSgK
ICAgICAgICAgLy8gVGhlIG93bmVyIGlzIHRoZSBtYWNoaW5lIGNvZGUgYmxvY2ssIGFuZCB3ZSBh
bHJlYWR5IGhhdmUgYSBiYXJyaWVyIG9uIHRoYXQgd2hlbiB0aGUKICAgICAgICAgLy8gcGxhbiBm
aW5pc2hlcy4KICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLnNl
dFdpdGhvdXRXcml0ZUJhcnJpZXIoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSk7CisgICAg
ICAgIG1faW5saW5lQ2FsbEZyYW1lLT5zZXRUbXBPZmZzZXQoKG1fY2FsbGVyLT5tX2lubGluZUNh
bGxGcmFtZSA/IG1fY2FsbGVyLT5tX2lubGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0IDogMCkgKyBt
X2NhbGxlci0+bV9jb2RlQmxvY2stPm51bVRtcHMoKSk7CiAgICAgICAgIG1faW5saW5lQ2FsbEZy
YW1lLT5zZXRTdGFja09mZnNldChpbmxpbmVDYWxsRnJhbWVTdGFydC5vZmZzZXQoKSAtIENhbGxG
cmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKTsKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyA9PSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAgICAgIGlm
IChjYWxsZWUpIHsKICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVy
eSA9IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGNhbGxlZSk7CiAgICAgICAgICAgICBtX2lubGlu
ZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCA9IGZhbHNlOwpAQCAtNzcwNiw3ICs3NzYyLDcgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YShtX2dyYXBoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1hcHBpbmcub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG5vZGUtPm9w
ZXJhbmQoKSkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKIAogICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSAhPSBGb3JjZU9TUkV4aXQpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKQEAgLTc3MjYsMjQgKzc3ODIsMjQgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2UoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN1
Y2Nlc3Nvci0+cHJlZGVjZXNzb3JzLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgICAgICBhdXRvIGluc2VydExpdmVuZXNzUHJlc2VydmluZ09wID0g
WyZdIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgTm9kZVR5cGUgb3AsIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5zZXJ0TGl2
ZW5lc3NQcmVzZXJ2aW5nT3AgPSBbJl0gKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
LCBOb2RlVHlwZSBvcCwgT3BlcmFuZCBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQp
OwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJsZSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9
IHZhcmlhYmxlOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnQgPSBvcGVyYW5kIC0gKGlubGluZUNhbGxG
cmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnQgPSB1bm1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1l
LCBvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudC5pc0FyZ3Vt
ZW50KCkgJiYgIWFyZ3VtZW50LmlzSGVhZGVyKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBWZWN0b3I8QXJndW1lbnRQb3NpdGlvbio+JiBhcmd1bWVudHMgPSBtX2lubGlu
ZUNhbGxGcmFtZVRvQXJndW1lbnRQb3NpdGlvbnMuZ2V0KGlubGluZUNhbGxGcmFtZSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzW2FyZ3VtZW50LnRvQXJndW1lbnQoKV0t
PmFkZFZhcmlhYmxlKHZhcmlhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3Bl
Y05vbmUsIG9wLCBvcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSkpOwogICAgICAgICAgICAgICAgICAg
ICB9OwotICAgICAgICAgICAgICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsK
KyAgICAgICAgICAgICAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgaW5zZXJ0TGl2ZW5lc3NQcmVzZXJ2aW5nT3AoaW5saW5lQ2FsbEZyYW1lLCBG
bHVzaCwgb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAg
ICAgIGF1dG8gYWRkUGhhbnRvbUxvY2FsRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgYXV0byBhZGRQaGFudG9tTG9jYWxEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGluc2VydExpdmVuZXNzUHJlc2VydmluZ09wKGlubGluZUNhbGxGcmFtZSwgUGhhbnRvbUxv
Y2FsLCBvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAg
ICAgZmx1c2hGb3JUZXJtaW5hbEltcGwob3JpZ2luLnNlbWFudGljLCBhZGRGbHVzaERpcmVjdCwg
YWRkUGhhbnRvbUxvY2FsRGlyZWN0KTsKQEAgLTc4MDgsNiArNzg2NCw3IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlKCkKICAgICAgICAgQVNTRVJUKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
bnVtYmVyT2ZBcmd1bWVudHMoKSA9PSBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQu
bnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgfQogCisgICAgbV9ncmFwaC5tX3RtcHMgPSBtX251
bVRtcHM7CiAgICAgbV9ncmFwaC5tX2xvY2FsVmFycyA9IG1fbnVtTG9jYWxzOwogICAgIG1fZ3Jh
cGgubV9wYXJhbWV0ZXJTbG90cyA9IG1fcGFyYW1ldGVyU2xvdHM7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCmluZGV4IGEyNDAxNDkyMTM4MzZiNjFlNzVjMmI4
ODc2NTM0NzNlMjBlZDViMTEuLjRiZGI3YmFkNGRjOTA4OTgwNDg4OGYzNmEwYWRhMmYyMjM4ODM2
NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCkBAIC0xNzAs
MjIgKzE3MCwyMiBAQCBwcml2YXRlOgogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAg
ICAgICAgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVz
ID0gbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcygpOwogICAgICAgICBmb3IgKHNpemVf
dCBpID0gbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIGludCBv
cGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAg
ICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsK
ICAgICAgICAgICAgIE9wdGlvbmFsPEpTVmFsdWU+IHZhbHVlID0gbXVzdEhhbmRsZVZhbHVlc1tp
XTsKICAgICAgICAgICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgICAgICAgICBpZiAobV92ZXJi
b3NlKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBOb3QgbGl2ZSBpbiBieXRlY29k
ZTogIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgTm90IGxpdmUgaW4gYnl0ZWNvZGU6ICIsIG9wZXJhbmQsICJcbiIpOwog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChvcGVyYW5kKTsKICAgICAg
ICAgICAgIGlmICghbm9kZSkgewogICAgICAgICAgICAgICAgIGlmIChtX3ZlcmJvc2UpCi0gICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIE5vdCBsaXZlOiAiLCBWaXJ0dWFsUmVnaXN0ZXIo
b3BlcmFuZCksICJcbiIpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBOb3QgbGl2
ZTogIiwgb3BlcmFuZCwgIlxuIik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChtX3ZlcmJvc2UpCi0gICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgV2lkZW5pbmcgIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQp
LCAiIHdpdGggIiwgdmFsdWUudmFsdWUoKSwgIlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgV2lkZW5pbmcgIiwgb3BlcmFuZCwgIiB3aXRoICIsIHZhbHVlLnZhbHVlKCksICJcbiIp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiB0YXJnZXQgPSBibG9j
ay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9
IHRhcmdldC5tZXJnZU9TUkVudHJ5VmFsdWUobV9ncmFwaCwgdmFsdWUudmFsdWUoKSwgbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCksIG5vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKaW5kZXggNzc4MzUyNzc1
OTVhY2E3YTUzMjY3MTg4Njc0NmNhM2VjYzI3MjFmYi4uZTdmNmU3NjI0NjY5YjMwMWY1YTAyMDQ4
YzI1ZDQ4MTVjM2ExMzM5ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCkBAIC0zMDMsNyArMzAzLDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGpldHRpc29uQmxvY2soQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxv
Y2sqIGpldHRpc29uZWRCbG9jaywgTm9kZU9yaWdpbiBib3VuZGFyeU5vZGVPcmlnaW4pCiAgICAg
ewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+dmFyaWFi
bGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkKLSAgICAgICAgICAgIGtlZXBPcGVy
YW5kQWxpdmUoYmxvY2ssIGpldHRpc29uZWRCbG9jaywgYm91bmRhcnlOb2RlT3JpZ2luLCB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSk7CisgICAgICAgICAgICBrZWVwT3BlcmFuZEFsaXZl
KGJsb2NrLCBqZXR0aXNvbmVkQmxvY2ssIGJvdW5kYXJ5Tm9kZU9yaWdpbiwgdmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBqZXR0aXNvbmVkQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2Fscygp
OyArK2kpCiAgICAgICAgICAgICBrZWVwT3BlcmFuZEFsaXZlKGJsb2NrLCBqZXR0aXNvbmVkQmxv
Y2ssIGJvdW5kYXJ5Tm9kZU9yaWdpbiwgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkpOwogICAg
ICAgICAKQEAgLTM1NCw3ICszNTQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gZGlmZmVy
ZW50IHBhdGggdGhhbiBzZWNvbmRCbG9jay4KICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBqZXR0aXNvbmVkQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpCi0gICAgICAgICAgICAgICAga2VlcE9wZXJhbmRBbGl2ZShm
aXJzdEJsb2NrLCBqZXR0aXNvbmVkQmxvY2ssIGJvdW5kYXJ5Tm9kZU9yaWdpbiwgdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoaSkpOworICAgICAgICAgICAgICAgIGtlZXBPcGVyYW5kQWxpdmUo
Zmlyc3RCbG9jaywgamV0dGlzb25lZEJsb2NrLCBib3VuZGFyeU5vZGVPcmlnaW4sIHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSk7CiAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9m
TG9jYWxzKCk7ICsraSkKICAgICAgICAgICAgICAgICBrZWVwT3BlcmFuZEFsaXZlKGZpcnN0Qmxv
Y2ssIGpldHRpc29uZWRCbG9jaywgYm91bmRhcnlOb2RlT3JpZ2luLCB2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChpKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCmluZGV4IGQ5OGZkNGFmNDQwZjA3Y2JjMTZi
NjdkNjAyYmE2NDI2YWYwZjIzODIuLjg3M2ZhMDQzMDU4YTBmZDE4ZTRkZjEyMzNkZTZmOTY3NmEy
YmRlMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJl
YWRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRo
cmVhZGluZ1BoYXNlLmNwcApAQCAtNTQsOCArNTQsOSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZ3Jh
cGguY2xlYXJSZXBsYWNlbWVudHMoKTsKICAgICAgICAgY2Fub25pY2FsaXplTG9jYWxzSW5CbG9j
a3MoKTsKICAgICAgICAgc3BlY2lhbENhc2VBcmd1bWVudHMoKTsKLSAgICAgICAgcHJvcGFnYXRl
UGhpczxMb2NhbE9wZXJhbmQ+KCk7Ci0gICAgICAgIHByb3BhZ2F0ZVBoaXM8QXJndW1lbnRPcGVy
YW5kPigpOworICAgICAgICBwcm9wYWdhdGVQaGlzPE9wZXJhbmRLaW5kOjpMb2NhbD4oKTsKKyAg
ICAgICAgcHJvcGFnYXRlUGhpczxPcGVyYW5kS2luZDo6QXJndW1lbnQ+KCk7CisgICAgICAgIHBy
b3BhZ2F0ZVBoaXM8T3BlcmFuZEtpbmQ6OlRtcD4oKTsKICAgICAgICAgY29tcHV0ZUlzRmx1c2hl
ZCgpOwogICAgICAgICAKICAgICAgICAgbV9ncmFwaC5tX2Zvcm0gPSBUaHJlYWRlZENQUzsKQEAg
LTIxMSwxMCArMjEyLDIwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjYW5vbmljYWxpemVHZXRMb2Nh
bChOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBpZiAodmFyaWFibGUtPmxv
Y2FsKCkuaXNBcmd1bWVudCgpKQotICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8
QXJndW1lbnRPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9Bcmd1
bWVudCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxG
b3I8TG9jYWxPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9Mb2Nh
bCgpKTsKKyAgICAgICAgc3dpdGNoICh2YXJpYWJsZS0+b3BlcmFuZCgpLmtpbmQoKSkgeworICAg
ICAgICBjYXNlIE9wZXJhbmRLaW5kOjpBcmd1bWVudDogeworICAgICAgICAgICAgY2Fub25pY2Fs
aXplR2V0TG9jYWxGb3I8T3BlcmFuZEtpbmQ6OkFyZ3VtZW50Pihub2RlLCB2YXJpYWJsZSwgdmFy
aWFibGUtPm9wZXJhbmQoKS50b0FyZ3VtZW50KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBPcGVyYW5kS2luZDo6TG9jYWw6IHsKKyAgICAgICAgICAgIGNh
bm9uaWNhbGl6ZUdldExvY2FsRm9yPE9wZXJhbmRLaW5kOjpMb2NhbD4obm9kZSwgdmFyaWFibGUs
IHZhcmlhYmxlLT5vcGVyYW5kKCkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgT3BlcmFuZEtpbmQ6OlRtcDogeworICAgICAgICAgICAgY2Fu
b25pY2FsaXplR2V0TG9jYWxGb3I8T3BlcmFuZEtpbmQ6OlRtcD4obm9kZSwgdmFyaWFibGUsIHZh
cmlhYmxlLT5vcGVyYW5kKCkudmFsdWUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPE5vZGVUeXBlIG5vZGVUeXBl
LCBPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KQEAgLTIyOSw2ICsyNDAsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgY2FzZSBGbHVzaDoKICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgog
ICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBBU1NFUlQob3RoZXJO
b2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgICAgIG90aGVyTm9kZSA9IG90aGVy
Tm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgZGVmYXVsdDoKQEAgLTI3MCwxNSArMjgyLDI1IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjYW5v
bmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7
Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkpCi0gICAgICAgICAg
ICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBBcmd1bWVudE9w
ZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKS50b0FyZ3VtZW50KCkpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2Fs
Rm9yPG5vZGVUeXBlLCBMb2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9j
YWwoKS50b0xvY2FsKCkpOworICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT5vcGVyYW5kKCkua2lu
ZCgpKSB7CisgICAgICAgIGNhc2UgT3BlcmFuZEtpbmQ6OkFyZ3VtZW50OiB7CisgICAgICAgICAg
ICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBPcGVyYW5kS2lu
ZDo6QXJndW1lbnQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgpLnRvQXJndW1l
bnQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE9wZXJh
bmRLaW5kOjpMb2NhbDogeworICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21M
b2NhbEZvcjxub2RlVHlwZSwgT3BlcmFuZEtpbmQ6OkxvY2FsPihub2RlLCB2YXJpYWJsZSwgdmFy
aWFibGUtPm9wZXJhbmQoKS50b0xvY2FsKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBPcGVyYW5kS2luZDo6VG1wOiB7CisgICAgICAgICAgICBjYW5vbmlj
YWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBPcGVyYW5kS2luZDo6VG1wPihu
b2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS52YWx1ZSgpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBjYW5v
bmljYWxpemVTZXQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIG1fYmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5zZXRPcGVyYW5kKG5vZGUtPmxvY2FsKCksIG5vZGUpOworICAgICAgICBtX2Jsb2Nr
LT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZChub2RlLT5vcGVyYW5kKCksIG5vZGUpOwogICAg
IH0KICAgICAKICAgICB2b2lkIGNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2soKQpAQCAtMjg3LDgg
KzMwOSw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIEFTU0VSVCht
X2Jsb2NrLT5pc1JlYWNoYWJsZSk7CiAgICAgICAgIAotICAgICAgICBjbGVhclZhcmlhYmxlczxB
cmd1bWVudE9wZXJhbmQ+KCk7Ci0gICAgICAgIGNsZWFyVmFyaWFibGVzPExvY2FsT3BlcmFuZD4o
KTsKKyAgICAgICAgY2xlYXJWYXJpYWJsZXM8T3BlcmFuZEtpbmQ6OkFyZ3VtZW50PigpOworICAg
ICAgICBjbGVhclZhcmlhYmxlczxPcGVyYW5kS2luZDo6TG9jYWw+KCk7CisgICAgICAgIGNsZWFy
VmFyaWFibGVzPE9wZXJhbmRLaW5kOjpUbXA+KCk7CiAgICAgICAgIAogICAgICAgICAvLyBBc3N1
bWVzIHRoYXQgYWxsIHBoaSByZWZlcmVuY2VzIGhhdmUgYmVlbiByZW1vdmVkLiBBc3N1bWVzIHRo
YXQgdGhpbmdzIHRoYXQKICAgICAgICAgLy8gc2hvdWxkIGJlIGxpdmUgaGF2ZSBhIG5vbi16ZXJv
IHJlZiBjb3VudCwgYnV0IGRvZXNuJ3QgYXNzdW1lIHRoYXQgdGhlIHJlZgpAQCAtMzg4LDcgKzQx
MSw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CiAg
ICAgdm9pZCBwcm9wYWdhdGVQaGlzKCkKICAgICB7Ci0gICAgICAgIFZlY3RvcjxQaGlTdGFja0Vu
dHJ5LCAxMjg+JiBwaGlTdGFjayA9IG9wZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCA/IG1f
YXJndW1lbnRQaGlTdGFjayA6IG1fbG9jYWxQaGlTdGFjazsKKyAgICAgICAgVmVjdG9yPFBoaVN0
YWNrRW50cnksIDEyOD4mIHBoaVN0YWNrID0gcGhpU3RhY2tGb3I8b3BlcmFuZEtpbmQ+KCk7CiAg
ICAgICAgIAogICAgICAgICAvLyBFbnN1cmUgdGhhdCBhdHRlbXB0cyB0byB1c2UgdGhpcyBmYWls
IGluc3RhbnRseS4KICAgICAgICAgbV9ibG9jayA9IDA7CkBAIC00NjYsOSArNDg5LDEyIEBAIHBy
aXZhdGU6CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CiAgICAgVmVjdG9y
PFBoaVN0YWNrRW50cnksIDEyOD4mIHBoaVN0YWNrRm9yKCkKICAgICB7Ci0gICAgICAgIGlmIChv
cGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCi0gICAgICAgICAgICByZXR1cm4gbV9hcmd1
bWVudFBoaVN0YWNrOwotICAgICAgICByZXR1cm4gbV9sb2NhbFBoaVN0YWNrOworICAgICAgICBz
d2l0Y2ggKG9wZXJhbmRLaW5kKSB7CisgICAgICAgIGNhc2UgT3BlcmFuZEtpbmQ6OkFyZ3VtZW50
OiByZXR1cm4gbV9hcmd1bWVudFBoaVN0YWNrOworICAgICAgICBjYXNlIE9wZXJhbmRLaW5kOjpM
b2NhbDogcmV0dXJuIG1fbG9jYWxQaGlTdGFjazsKKyAgICAgICAgY2FzZSBPcGVyYW5kS2luZDo6
VG1wOiByZXR1cm4gbV90bXBQaGlTdGFjazsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXB1dGVJc0ZsdXNo
ZWQoKQpAQCAtNTIxLDYgKzU0Nyw3IEBAIHByaXZhdGU6CiAgICAgQmFzaWNCbG9jayogbV9ibG9j
azsKICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiBtX2FyZ3VtZW50UGhpU3RhY2s7CiAg
ICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4gbV9sb2NhbFBoaVN0YWNrOworICAgIFZlY3Rv
cjxQaGlTdGFja0VudHJ5LCAxMjg+IG1fdG1wUGhpU3RhY2s7CiAgICAgVmVjdG9yPE5vZGUqLCAx
Mjg+IG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDU0VQaGFzZS5jcHAKaW5kZXggMjM4MWM2YjhmOGY0YmE3NjM0YmI2NmIxMjM5NDcx
YjVhNjE2NjdjZS4uNGNjZTE3NDg4M2UyMDQxMGQ2MjIzYTZmNDE3MmVkZGU2OThhYWViZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKQEAgLTE0Nyw4ICsxNDcs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTdGFjazogewog
ICAgICAgICAgICAgQVNTRVJUKCFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKTsKLSAgICAgICAgICAg
IEFTU0VSVChoZWFwLnBheWxvYWQoKS52YWx1ZSgpID09IGhlYXAucGF5bG9hZCgpLnZhbHVlMzIo
KSk7Ci0gICAgICAgICAgICBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLnJlbW92ZShoZWFwLnBheWxv
YWQoKS52YWx1ZTMyKCkpOworICAgICAgICAgICAgbV9hYnN0cmFjdEhlYXBTdGFja01hcC5yZW1v
dmUoaGVhcC5wYXlsb2FkKCkudmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAoY2xvYmJlckNvbnNl
cnZhdGl2ZWx5KQogICAgICAgICAgICAgICAgIG1fZmFsbGJhY2tTdGFja01hcC5jbGVhcigpOwog
ICAgICAgICAgICAgZWxzZQpAQCAtMTcyLDcgKzE3MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICBpZiAoIWNsb2JiZXJDb25zZXJ2YXRpdmVseSkKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgaWYgKHBhaXIua2V5LmhlYXAoKS5raW5kKCkgPT0gU3RhY2sp
IHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fYWJzdHJhY3RIZWFwU3Rh
Y2tNYXAuZmluZChwYWlyLmtleS5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmZpbmQo
cGFpci5rZXkuaGVhcCgpLnBheWxvYWQoKS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKGl0ZXJhdG9yICE9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZW5kKCkgJiYgaXRlcmF0b3It
PnZhbHVlLT5rZXkgPT0gcGFpci5rZXkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjI2LDggKzIyNSw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBBYnN0cmFjdEhlYXAgYWJzdHJhY3RIZWFwID0gbG9j
YXRpb24uaGVhcCgpOwogICAgICAgICAgICAgaWYgKGFic3RyYWN0SGVhcC5wYXlsb2FkKCkuaXNU
b3AoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gYWRkKG1fZmFsbGJhY2tTdGFja01hcCwgbG9j
YXRpb24sIG5vZGUpOwotICAgICAgICAgICAgQVNTRVJUKGFic3RyYWN0SGVhcC5wYXlsb2FkKCku
dmFsdWUoKSA9PSBhYnN0cmFjdEhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7Ci0gICAgICAgICAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuYWRkKGFic3RyYWN0SGVh
cC5wYXlsb2FkKCkudmFsdWUzMigpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGF1dG8gYWRkUmVz
dWx0ID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5hZGQoYWJzdHJhY3RIZWFwLnBheWxvYWQoKS52
YWx1ZSgpLCBudWxscHRyKTsKICAgICAgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkg
ewogICAgICAgICAgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUucmVzZXQobmV3IElt
cHVyZURhdGFTbG90IHtsb2NhdGlvbiwgbm9kZSwgMH0pOwogICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwpAQCAtMjQ5LDggKzI0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgU2lk
ZVN0YXRlOgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgY2FzZSBTdGFjazogewotICAgICAgICAgICAgQVNTRVJUKGxvY2F0aW9uLmhlYXAoKS5wYXls
b2FkKCkudmFsdWUoKSA9PSBsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIoKSk7Ci0g
ICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5maW5kKGxv
Y2F0aW9uLmhlYXAoKS5wYXlsb2FkKCkudmFsdWUzMigpKTsKKyAgICAgICAgICAgIGF1dG8gaXRl
cmF0b3IgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmZpbmQobG9jYXRpb24uaGVhcCgpLnBheWxv
YWQoKS52YWx1ZSgpKTsKICAgICAgICAgICAgIGlmIChpdGVyYXRvciAhPSBtX2Fic3RyYWN0SGVh
cFN0YWNrTWFwLmVuZCgpCiAgICAgICAgICAgICAgICAgJiYgaXRlcmF0b3ItPnZhbHVlLT5rZXkg
PT0gbG9jYXRpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS0+dmFs
dWU7CkBAIC0yOTgsNyArMjk1LDcgQEAgcHJpdmF0ZToKICAgICAvLyBhIGR1cGxpY2F0ZSBpbiB0
aGUgcGFzdCBhbmQgbm93IG9ubHkgbGl2ZSBpbiBtX2ZhbGxiYWNrU3RhY2tNYXAuCiAgICAgLy8K
ICAgICAvLyBPYnZpb3VzbHksIFRPUCBhbHdheXMgZ29lcyBpbnRvIG1fZmFsbGJhY2tTdGFja01h
cCBzaW5jZSBpdCBkb2VzIG5vdCBoYXZlIGEgdW5pcXVlIHZhbHVlLgotICAgIEhhc2hNYXA8aW50
MzJfdCwgc3RkOjp1bmlxdWVfcHRyPEltcHVyZURhdGFTbG90PiwgRGVmYXVsdEhhc2g8aW50MzJf
dD46Okhhc2gsIFdURjo6U2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPGludDMyX3Q+PiBtX2Fi
c3RyYWN0SGVhcFN0YWNrTWFwOworICAgIEhhc2hNYXA8aW50NjRfdCwgc3RkOjp1bmlxdWVfcHRy
PEltcHVyZURhdGFTbG90PiwgRGVmYXVsdEhhc2g8aW50NjRfdD46Okhhc2gsIFdURjo6U2lnbmVk
V2l0aFplcm9LZXlIYXNoVHJhaXRzPGludDY0X3Q+PiBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwOwog
ICAgIE1hcCBtX2ZhbGxiYWNrU3RhY2tNYXA7CiAKICAgICBNYXAgbV9oZWFwTWFwOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCmluZGV4IGIxODIzMTdi
OWZmODQxNmE1OTc0MTYxZTNkYzJiOGE1NzNmNWFlOGQuLmNlNWY2YWFhNjg4MjczZDliZTcwZWQ0
OGFiMTlmNTYyNjFjZGZhYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2FwYWJpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nh
cGFiaWxpdGllcy5jcHAKQEAgLTMwOCw2ICszMDgsOCBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJp
bGl0eUxldmVsKE9wY29kZUlEIG9wY29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3Qg
SQogICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5lOgogICAgIGNhc2Ug
bGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lOgogICAgIGNhc2UgbGxpbnRf
aW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVja3Bv
aW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBjaGVj
a3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmU6CiAgICAgY2FzZSBoYW5kbGVVbmNhdWdodEV4Y2Vw
dGlvbjoKICAgICBjYXNlIG9wX2NhbGxfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfY29u
c3RydWN0X3JldHVybl9sb2NhdGlvbjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9i
YmVyaXplLmgKaW5kZXggYmZiMWQxNDYxNTVjNGM3ZTJiYTk4ZTkxYjNiOWIzYjI4NGZiYzAzNC4u
ZWVlOWJhZWNkMjg5ZDhmMjg3MzcyNDUxMDcwYzRmYjJhMjhlODNkYyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKQEAgLTExMSw5ICsxMTEsOSBAQCB2b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVh
ZCwgY29uc3QgV3JpdGVGdQogICAgIC8vIHNjYW4gd291bGQgcmVhZC4gVGhhdCdzIHdoYXQgdGhp
cyBkb2VzLgogICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBub2Rl
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7IGlubGluZUNhbGxGcmFtZTsgaW5s
aW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIuaW5saW5lQ2FsbEZy
YW1lKCkpIHsKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAg
ICAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisgICAgICAgICAgICByZWFkKEFic3Ry
YWN0SGVhcChTdGFjaywgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJh
bWUtPmlzVmFyYXJncygpKQotICAgICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcykpOworICAgICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIFZp
cnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7CiAgICAgfQogCiAgICAgLy8gV2UgZG9u
J3Qgd2FudCB0byBzcGVjaWZpY2FsbHkgYWNjb3VudCB3aGljaCBub2RlcyBjYW4gcmVhZCBmcm9t
IHRoZSBzY29wZQpAQCAtNDQxLDcgKzQ0MSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAg
ICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgS2lsbFN0YWNrOgotICAgICAgICB3cml0ZShBYnN0
cmFjdEhlYXAoU3RhY2ssIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpOworICAgICAgICB3cml0ZShB
YnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICAgICAgIAogICAgIGNhc2UgTW92SGludDoKQEAgLTQ5Nyw3ICs0OTcsNyBAQCB2
b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3Rv
ciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIEZsdXNo
OgotICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpOworICAg
ICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+b3BlcmFuZCgpKSk7CiAgICAgICAg
IHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJldHVybjsKIApAQCAtNzM5LDcgKzczOSw3IEBA
IHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5j
dG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgY2FzZSBDYWxsRXZhbDoKICAgICAgICAgQVNT
RVJUKCFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCkpOwogICAgICAgICBy
ZWFkKEFic3RyYWN0SGVhcChTdGFjaywgZ3JhcGgubV9jb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIo
KSkpOwotICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgdmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoMCkpKTsKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygwKSkpOwogICAgICAgICByZWFkKFdvcmxk
KTsKICAgICAgICAgd3JpdGUoSGVhcCk7CiAgICAgICAgIHJldHVybjsKQEAgLTc2NSwxMiArNzY1
LDEyIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJl
YWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJldHVybjsKICAgICAgICAg
CiAgICAgY2FzZSBHZXRDYWxsZWU6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBD
YWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xv
YywgQWJzdHJhY3RIZWFwKFN0YWNrLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSwgTGF6eU5vZGUo
bm9kZSkpOworICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgVmlydHVhbFJlZ2lzdGVy
KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFj
a0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2Ug
U2V0Q2FsbGVlOgotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSkpOworICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCiAgICAgY2FzZSBHZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczogewpAQCAtNzgxLDcg
Kzc4MSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0
IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgfQogCiAgICAgY2FzZSBTZXRB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpczoKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0
YWNrLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworICAgICAg
ICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Y2FzZSBHZXRSZXN0TGVuZ3RoOgpAQCAtNzg5LDM2ICs3ODksNDIgQEAgdm9pZCBjbG9iYmVyaXpl
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0
IFdyaXRlRnUKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldExvY2FsOgot
ICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpOwotICAgICAg
ICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxv
Y2FsKCkpKSwgTGF6eU5vZGUobm9kZSkpOworICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFj
aywgbm9kZS0+b3BlcmFuZCgpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2Ms
IEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+b3BlcmFuZCgpKSksIExhenlOb2RlKG5vZGUpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFNldExvY2FsOgotICAgICAgICB3
cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKTsKLSAgICAgICAgZGVmKEhl
YXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgpKSks
IExhenlOb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOworICAgICAgICB3cml0ZShBYnN0cmFj
dEhlYXAoU3RhY2ssIG5vZGUtPm9wZXJhbmQoKSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9u
KFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPm9wZXJhbmQoKSkpLCBMYXp5Tm9k
ZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAg
ICBjYXNlIEdldFN0YWNrOiB7Ci0gICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2Rl
LT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpOworICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChT
dGFjaywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpOwogICAgICAgICByZWFkKGhl
YXApOwogICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBoZWFwKSwgTGF6eU5vZGUo
bm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFB1dFN0
YWNrOiB7Ci0gICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vz
c0RhdGEoKS0+bG9jYWwpOworICAgICAgICBBYnN0cmFjdEhlYXAgaGVhcChTdGFjaywgbm9kZS0+
c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpOwogICAgICAgICB3cml0ZShoZWFwKTsKICAgICAg
ICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgaGVhcCksIExhenlOb2RlKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKKyAgICBjYXNl
IFZhcmFyZ3NMZW5ndGg6IHsKKyAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgIHdyaXRlKEhl
YXApOworICAgICAgICByZXR1cm47ICAKKyAgICB9CisKICAgICBjYXNlIExvYWRWYXJhcmdzOiB7
CiAgICAgICAgIHJlYWQoV29ybGQpOwogICAgICAgICB3cml0ZShIZWFwKTsKICAgICAgICAgTG9h
ZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgIHdy
aXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+Y291bnQub2Zmc2V0KCkpKTsKKyAgICAgICAg
d3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5jb3VudCkpOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykKLSAgICAgICAgICAgIHdyaXRlKEFic3RyYWN0
SGVhcChTdGFjaywgZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBzdGF0aWNfY2FzdDxpbnQ+KGkpKSk7
CisgICAgICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0ICsgc3Rh
dGljX2Nhc3Q8aW50PihpKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAg
LTgyNyw5ICs4MzMsOSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
LCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZWFkKFN0
YWNrKTsKICAgICAgICAgCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxv
YWRWYXJhcmdzRGF0YSgpOwotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEt
PmNvdW50Lm9mZnNldCgpKSk7CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0
YS0+Y291bnQpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTsp
Ci0gICAgICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0Lm9mZnNl
dCgpICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOworICAgICAgICAgICAgd3JpdGUoQWJzdHJhY3RI
ZWFwKFN0YWNrLCBkYXRhLT5zdGFydCArIHN0YXRpY19jYXN0PGludD4oaSkpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb21iaW5lZExpdmVuZXNzLmNwcAppbmRleCA5NTg2NmE3ZjkxYTcxNDQyZGExYzRmN2U0
NzAwZDA5Y2QyYWMzMGYzLi4xNTc0NmMwNTRmMGRmMzNiYTMyZDM5ZmFmZTAyZGJiZDdkMjkxNGNi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5l
c3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVz
cy5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgc3RhdGljIHZvaWQgYWRkQnl0ZWNvZGVMaXZlbmVzcyhH
cmFwaCYgZ3JhcGgsIEF2YWlsYWJpbGl0eU1hcCYgYXZhaWxhYmlsaXR5TWFwLAogewogICAgIGdy
YXBoLmZvckFsbExpdmVJbkJ5dGVjb2RlKAogICAgICAgICBub2RlLT5vcmlnaW4uZm9yRXhpdCwK
LSAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAgIFsmXSAoT3BlcmFu
ZCByZWcpIHsKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcC5jbG9zZVN0YXJ0aW5nV2l0aExv
Y2FsKAogICAgICAgICAgICAgICAgIHJlZywKICAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIG5v
ZGUpIC0+IGJvb2wgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb25EYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5j
cHAKaW5kZXggYjRmYzhkNDllNjA3MmVjMWFiZGQzZmY2YmQyNTMwMDIyNTkxODI2Mi4uMDcxMmNj
YjNiZTk5MjhlZWE4NjIzZTRkNzI4ZDhiNDcyN2YxNzI4MSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCkBAIC01Niw3ICs1Niw3IEBAIENhbGxTaXRlSW5k
ZXggQ29tbW9uRGF0YTo6YWRkQ29kZU9yaWdpbihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAg
ICAgIGNvZGVPcmlnaW5zLmFwcGVuZChjb2RlT3JpZ2luKTsKICAgICB1bnNpZ25lZCBpbmRleCA9
IGNvZGVPcmlnaW5zLnNpemUoKSAtIDE7CiAgICAgQVNTRVJUKGNvZGVPcmlnaW5zW2luZGV4XSA9
PSBjb2RlT3JpZ2luKTsKLSAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGlu
ZGV4KSk7CisgICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoaW5kZXgpOwogfQogCiBDYWxsU2l0ZUlu
ZGV4IENvbW1vbkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgoQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luKQpAQCAtNjQsMTMgKzY0LDEzIEBAIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6YWRkVW5p
cXVlQ2FsbFNpdGVJbmRleChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgY29kZU9yaWdpbnMu
YXBwZW5kKGNvZGVPcmlnaW4pOwogICAgIHVuc2lnbmVkIGluZGV4ID0gY29kZU9yaWdpbnMuc2l6
ZSgpIC0gMTsKICAgICBBU1NFUlQoY29kZU9yaWdpbnNbaW5kZXhdID09IGNvZGVPcmlnaW4pOwot
ICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoaW5kZXgpKTsKKyAgICByZXR1
cm4gQ2FsbFNpdGVJbmRleChpbmRleCk7CiB9CiAKIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6
bGFzdENhbGxTaXRlKCkgY29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVChjb2RlT3JpZ2lucy5z
aXplKCkpOwotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoY29kZU9yaWdp
bnMuc2l6ZSgpIC0gMSkpOworICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW5zLnNp
emUoKSAtIDEpOwogfQogCiBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjphZGRE
aXNwb3NhYmxlQ2FsbFNpdGVJbmRleChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCmlu
ZGV4IGQzN2QyOThiYTg5YzZjMzFkZWZlNjM3MTkxNjljNzI5MDYwNjkzOTkuLmNlYmIzYzhlOWNi
OGFkZmQ4OWE2Y2Q2YzJjNTM0YjAwMTgyYjNlMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCkBAIC0zODMsNyArMzgz
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBHZXRNeUFyZ3VtZW50QnlWYWwgaW4g
c3VjaCBzdGF0aWNhbGx5LW91dC1vZi1ib3VuZHMgYWNjZXNzZXM7IHdlIGp1c3QgbG9zZSBDRkEg
dW5sZXNzCiAgICAgICAgICAgICAgICAgLy8gR0NTRSByZW1vdmVzIHRoZSBhY2Nlc3MgZW50aXJl
bHkuCiAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoaW5kZXggPj0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyAtIDEpCisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAt
IDEpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IG1fc3RhdGUubnVtYmVyT2ZB
cmd1bWVudHMoKSAtIDEpCkBAIC00MDEsMTAgKzQwMSwxMCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICAgICAgRmx1c2hlZEpTVmFsdWUpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFk
ZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGlu
ZGV4ICsgMSksIEZsdXNoZWRKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpbmRleCArIDEpLCBGbHVzaGVkSlNW
YWx1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkg
JiYgaW5kZXggPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0g
MSkgeworICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxG
cmFtZS0+aXNWYXJhcmdzKCkgJiYgaW5kZXggPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldFN0YWNrKGRhdGEpOwogICAgICAgICAgICAgICAg
ICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKaW5kZXggYTU4Mzk5MzQyYWFhOWViNWE5
NTkwZDQ4NjU5ZDQ5MjQ3NTY4YmZlZi4uMWYzMGRmZjYxNzljMGMzM2VlZjUxOTMyMjI3Yzc1OTY2
NzVhYmZhZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0Mu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcApAQCAtMjk3
LDYgKzI5Nyw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBj
YXNlIEluQnlWYWw6CiAgICAgY2FzZSBJbnN0YW5jZU9mOgogICAgIGNhc2UgSW5zdGFuY2VPZkN1
c3RvbToKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAg
ICBjYXNlIE51bWJlclRvU3RyaW5nV2l0aFJhZGl4OgogICAgIGNhc2UgTnVtYmVyVG9TdHJpbmdX
aXRoVmFsaWRSYWRpeENvbnN0YW50OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEcml2ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIu
Y3BwCmluZGV4IDE3YjM3MDc1OGMwNTM4NzAzYjdkNzllZTYyMjcyZDQ3OTk5OGI1MzkuLjQ1ZmJj
NDM5ZDUzYmE5NTBlN2E4ZDg5YWM5ZWMxOTcyYmEwOTM5YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RyaXZlci5jcHAKQEAgLTkwLDcgKzkwLDYgQEAgc3RhdGljIENvbXBpbGF0aW9u
UmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFueSBzdHVicyB0aGF0
IHRoZSBERkcgaXMgZ29pbmcgdG8gdXNlIGFyZSBpbml0aWFsaXplZC4gV2Ugd2FudCB0bwogICAg
IC8vIG1ha2Ugc3VyZSB0aGF0IGFsbCBKSVQgY29kZSBnZW5lcmF0aW9uIGRvZXMgZmluYWxpemF0
aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KICAgICB2bS5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5l
cmF0b3IpOwotICAgIHZtLmdldENUSVN0dWIob3NyRXhpdFRodW5rR2VuZXJhdG9yKTsKICAgICB2
bS5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOwogICAgIHZtLmdl
dENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKTsKICAgICB2
bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKaW5kZXggMzc0ZDUyNjA5YzNlYzY2NmI1Y2M2MzA3
NjcwMTRlZGI0NTBmNGZkOC4uOTIyZDM1YmJmYWYwYmIxZGQ5MGIwOTAzYTVmMmNkZTQ5YWI4NmJi
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCkBAIC0y
NDM5LDYgKzI0MzksMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAKKyAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBMb2FkVmFyYXJn
czogeworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAg
ICAgICAgLy8gSGF2ZSB0aGVzZSBuby1vcCBjYXNlcyBoZXJlIHRvIGVuc3VyZSB0aGF0IG5vYm9k
eSBmb3JnZXRzIHRvIGFkZCBoYW5kbGVycyBmb3IgbmV3IG9wY29kZXMuCiAgICAgICAgIGNhc2Ug
U2V0QXJndW1lbnREZWZpbml0ZWx5OgpAQCAtMjQ3MSw4ICsyNDc3LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBUYWlsQ2Fs
bEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxp
bmVkQ2FsbGVyOgotICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgotICAgICAgICBjYXNlIEZvcndh
cmRWYXJhcmdzOgorICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgICAgIGNhc2UgUHJv
ZmlsZUNvbnRyb2xGbG93OgogICAgICAgICBjYXNlIE5ld09iamVjdDoKICAgICAgICAgY2FzZSBO
ZXdQcm9taXNlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JB
bGxLaWxscy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCmlu
ZGV4IDBiZjFjM2ZiYmFjNGE2NjI5OGNmOTI5ZmVmNTBhNjBkY2ZkZTI4YjkuLmJmNDM1MGM0Y2Qx
N2UzZDUwMDY2MzhmNTVhYWMzNWE1NjUyOTk0YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZvckFsbEtpbGxzLmgKQEAgLTMyLDYgKzMyLDEwIEBACiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAorbmFtZXNwYWNlIEZvckFsbEtpbGxzSW50ZXJuYWwgeworY29u
c3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworfQorCiAvLyBVdGlsaXRpZXMgZm9yIGZpbmRp
bmcgdGhlIGxhc3QgcG9pbnRzIHdoZXJlIGEgbm9kZSBpcyBsaXZlIGluIERGRyBTU0EuIFRoaXMg
YWNjb3VudHMgZm9yIGxpdmVuZXNzIGR1ZQogLy8gdG8gT1NSIGV4aXQuIFRoaXMgaXMgdXN1YWxs
eSB1c2VkIGZvciBlbnVtZXJhdGluZyBvdmVyIGFsbCBvZiB0aGUgcHJvZ3JhbSBwb2ludHMgd2hl
cmUgYSBub2RlIGlzIGxpdmUsCiAvLyBieSBleHBsb3JpbmcgYWxsIGJsb2NrcyB3aGVyZSB0aGUg
bm9kZSBpcyBsaXZlIGF0IHRhaWwgYW5kIHRoZW4gZXhwbG9yaW5nIGFsbCBwcm9ncmFtIHBvaW50
cyB3aGVyZSB0aGUKQEAgLTUzLDEzICs1NywxMyBAQCB2b2lkIGZvckFsbEtpbGxlZE9wZXJhbmRz
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZUJlZm9yZSwgTm9kZSogbm9kZUFmdGVyLCBjb25zdAog
ICAgIAogICAgIENvZGVPcmlnaW4gYWZ0ZXIgPSBub2RlQWZ0ZXItPm9yaWdpbi5mb3JFeGl0Owog
ICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciBhbHJlYWR5Tm90ZWQ7CisgICAgT3BlcmFuZCBhbHJl
YWR5Tm90ZWQ7CiAgICAgLy8gSWYgd2UgTW92SGludCBzb21ldGhpbmcgdGhhdCBpcyBsaXZlIGF0
IHRoZSB0aW1lLCB0aGVuIHdlIGtpbGwgdGhlIG9sZCB2YWx1ZS4KICAgICBpZiAobm9kZUFmdGVy
LT5jb250YWluc01vdkhpbnQoKSkgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gbm9k
ZUFmdGVyLT51bmxpbmtlZExvY2FsKCk7Ci0gICAgICAgIGlmIChncmFwaC5pc0xpdmVJbkJ5dGVj
b2RlKHJlZywgYWZ0ZXIpKSB7Ci0gICAgICAgICAgICBmdW5jdG9yKHJlZyk7Ci0gICAgICAgICAg
ICBhbHJlYWR5Tm90ZWQgPSByZWc7CisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5vZGVBZnRl
ci0+dW5saW5rZWRPcGVyYW5kKCk7CisgICAgICAgIGlmIChncmFwaC5pc0xpdmVJbkJ5dGVjb2Rl
KG9wZXJhbmQsIGFmdGVyKSkgeworICAgICAgICAgICAgZnVuY3RvcihvcGVyYW5kKTsKKyAgICAg
ICAgICAgIGFscmVhZHlOb3RlZCA9IG9wZXJhbmQ7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBA
IC03MCwyOSArNzQsNDggQEAgdm9pZCBmb3JBbGxLaWxsZWRPcGVyYW5kcyhHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGVCZWZvcmUsIE5vZGUqIG5vZGVBZnRlciwgY29uc3QKICAgICAvLyBvdGhlciBs
b29wLCBiZWxvdy4KICAgICBhdXRvKiBiZWZvcmVJbmxpbmVDYWxsRnJhbWUgPSBiZWZvcmUuaW5s
aW5lQ2FsbEZyYW1lKCk7CiAgICAgaWYgKGJlZm9yZUlubGluZUNhbGxGcmFtZSA9PSBhZnRlci5p
bmxpbmVDYWxsRnJhbWUoKSkgewotICAgICAgICBpbnQgc3RhY2tPZmZzZXQgPSBiZWZvcmVJbmxp
bmVDYWxsRnJhbWUgPyBiZWZvcmVJbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMDsKICAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihi
ZWZvcmVJbmxpbmVDYWxsRnJhbWUpOworICAgICAgICBpZiAoYWZ0ZXIuYnl0ZWNvZGVJbmRleCgp
LmNoZWNrcG9pbnQoKSkgeworICAgICAgICAgICAgQVNTRVJUKGJlZm9yZS5ieXRlY29kZUluZGV4
KCkuY2hlY2twb2ludCgpICE9IGFmdGVyLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkpOwor
ICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShiZWZvcmUuYnl0ZWNvZGVJbmRleCgpLm9m
ZnNldCgpID09IGFmdGVyLmJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKSwgIldoZW4gdGhlIERGRyBk
b2VzIGNvZGUgbW90aW9uIGl0IHNob3VsZCBjaGFuZ2UgdGhlIGZvckV4aXQgb3JpZ2luIHRvIG1h
dGNoIHRoZSBzdXJyb3VuZGluZyBieXRlY29kZXMuIik7CisKKyAgICAgICAgICAgIGF1dG8gbGl2
ZUJlZm9yZSA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBiZWZvcmUuYnl0
ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAgIGF1dG8gbGl2ZUFmdGVyID0gdG1wTGl2ZW5lc3NG
b3JDaGVja3BvaW50KCpjb2RlQmxvY2ssIGFmdGVyLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAg
ICAgICBsaXZlQWZ0ZXIuaW52ZXJ0KCk7CisgICAgICAgICAgICBsaXZlQmVmb3JlLmZpbHRlcihs
aXZlQWZ0ZXIpOworCisgICAgICAgICAgICBsaXZlQmVmb3JlLmZvckVhY2hTZXRCaXQoWyZdIChz
aXplX3QgdG1wKSB7CisgICAgICAgICAgICAgICAgZnVuY3RvcihyZW1hcE9wZXJhbmQoYmVmb3Jl
SW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kOjp0bXAodG1wKSkpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAvLyBObyBsb2NhbHMgY2FuIGRpZSBhdCBhIGNoZWNrcG9pbnQuCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYg
ZnVsbExpdmVuZXNzID0gZ3JhcGgubGl2ZW5lc3NGb3IoY29kZUJsb2NrKTsKICAgICAgICAgY29u
c3QgRmFzdEJpdFZlY3RvciYgbGl2ZUJlZm9yZSA9IGZ1bGxMaXZlbmVzcy5nZXRMaXZlbmVzcyhi
ZWZvcmUuYnl0ZWNvZGVJbmRleCgpLCBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQ6OkJlZm9yZVVz
ZSk7CiAgICAgICAgIGNvbnN0IEZhc3RCaXRWZWN0b3ImIGxpdmVBZnRlciA9IGZ1bGxMaXZlbmVz
cy5nZXRMaXZlbmVzcyhhZnRlci5ieXRlY29kZUluZGV4KCksIExpdmVuZXNzQ2FsY3VsYXRpb25Q
b2ludDo6QmVmb3JlVXNlKTsKICAgICAgICAgCiAgICAgICAgIChsaXZlQmVmb3JlICYgfmxpdmVB
ZnRlcikuZm9yRWFjaFNldEJpdCgKICAgICAgICAgICAgIFsmXSAoc2l6ZV90IHJlbGF0aXZlTG9j
YWwpIHsKLSAgICAgICAgICAgICAgICBmdW5jdG9yKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKHJl
bGF0aXZlTG9jYWwpICsgc3RhY2tPZmZzZXQpOworICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVt
YXBPcGVyYW5kKGJlZm9yZUlubGluZUNhbGxGcmFtZSwgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwo
cmVsYXRpdmVMb2NhbCkpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIAorCisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghYWZ0ZXIuYnl0ZWNvZGVJbmRleCgp
LmNoZWNrcG9pbnQoKSwgIlRyYW5zaXRpb25pbmcgYWNyb3NzIGEgY2hlY2twb2ludCBidXQgYmVm
b3JlIGFuZCBhZnRlciBkb24ndCBzaGFyZSBhbiBpbmxpbmVDYWxsRnJhbWUuIik7CisKICAgICAv
LyBEZXRlY3Qga2lsbHMgdGhlIHN1cGVyIGNvbnNlcnZhdGl2ZSB3YXk6IGl0IGlzIGtpbGxlZCBp
ZiBpdCB3YXMgbGl2ZSBiZWZvcmUgYW5kIGRlYWQgYWZ0ZXIuCi0gICAgQml0VmVjdG9yIGxpdmVB
ZnRlciA9IGdyYXBoLmxvY2Fsc0xpdmVJbkJ5dGVjb2RlKGFmdGVyKTsKLSAgICBncmFwaC5mb3JB
bGxMb2NhbHNMaXZlSW5CeXRlY29kZSgKKyAgICBCaXRWZWN0b3IgbGl2ZUFmdGVyID0gZ3JhcGgu
bG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKGFmdGVyKTsKKyAgICB1bnNpZ25lZCBudW1Mb2Nh
bHMgPSBncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7Cisg
ICAgZ3JhcGguZm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKAogICAgICAgICBiZWZv
cmUsCi0gICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgewotICAgICAgICAgICAgaWYg
KHJlZyA9PSBhbHJlYWR5Tm90ZWQpCisgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7Cisg
ICAgICAgICAgICBpZiAob3BlcmFuZCA9PSBhbHJlYWR5Tm90ZWQpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgaWYgKGxpdmVBZnRlci5nZXQocmVnLnRvTG9jYWwoKSkpCisg
ICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBvcGVyYW5kLmlzVG1wKCkgPyBudW1Mb2NhbHMg
KyBvcGVyYW5kLnZhbHVlKCkgOiBvcGVyYW5kLnRvTG9jYWwoKTsKKyAgICAgICAgICAgIGlmIChs
aXZlQWZ0ZXIuZ2V0KG9mZnNldCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgZnVuY3RvcihyZWcpOworICAgICAgICAgICAgZnVuY3RvcihvcGVyYW5kKTsKICAgICAgICAg
fSk7CiB9CiAgICAgCkBAIC0xMDUsNyArMTI4LDggQEAgdm9pZCBmb3JBbGxLaWxsZWROb2Rlc0F0
Tm9kZUluZGV4KAogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc2VlbkluQ2xvc3VyZUZs
YWcgPSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2FsbGVkRnVuY3RvckZsYWcg
PSAyOwogICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPiBmbGFnczsKLSAgICAKKworICAgIEFT
U0VSVChub2RlSW5kZXgpOwogICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsK
ICAgICAKICAgICBncmFwaC5kb1RvQ2hpbGRyZW4oCkBAIC0xMjAsMTUgKzE0NCwxMyBAQCB2b2lk
IGZvckFsbEtpbGxlZE5vZGVzQXROb2RlSW5kZXgoCiAgICAgICAgICAgICB9CiAgICAgICAgIH0p
OwogCi0gICAgTm9kZSogYmVmb3JlID0gbnVsbHB0cjsKLSAgICBpZiAobm9kZUluZGV4KQotICAg
ICAgICBiZWZvcmUgPSBibG9jay0+YXQobm9kZUluZGV4IC0gMSk7CisgICAgTm9kZSogYmVmb3Jl
ID0gYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpOwogCiAgICAgZm9yQWxsS2lsbGVkT3BlcmFuZHMo
CiAgICAgICAgIGdyYXBoLCBiZWZvcmUsIG5vZGUsCi0gICAgICAgIFsmXSAoVmlydHVhbFJlZ2lz
dGVyIHJlZykgeworICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAg
YXZhaWxhYmlsaXR5TWFwLmNsb3NlU3RhcnRpbmdXaXRoTG9jYWwoCi0gICAgICAgICAgICAgICAg
cmVnLAorICAgICAgICAgICAgICAgIG9wZXJhbmQsCiAgICAgICAgICAgICAgICAgWyZdIChOb2Rl
KiBub2RlKSAtPiBib29sIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZsYWdzLmdldChu
b2RlKSAmIHNlZW5JbkNsb3N1cmVGbGFnOwogICAgICAgICAgICAgICAgIH0sCkBAIC0xNTksNiAr
MTgxLDcgQEAgdm9pZCBmb3JBbGxLaWxsc0luQmxvY2soCiAgICAgLy8gU3RhcnQgYXQgdGhlIHNl
Y29uZCBub2RlLCBiZWNhdXNlIHRoZSBmdW5jdG9yIGlzIGV4cGVjdGVkIHRvIG9ubHkgaW5zcGVj
dCBub2RlcyBmcm9tIHRoZSBzdGFydCBvZgogICAgIC8vIHRoZSBibG9jayB1cCB0byBub2RlSW5k
ZXggKGV4Y2x1c2l2ZSksIHNvIGlmIG5vZGVJbmRleCBpcyB6ZXJvIHRoZW4gdGhlIGZ1bmN0b3Ig
aGFzIG5vdGhpbmcgdG8gZG8uCiAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAxOyBub2Rl
SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICBkYXRhTG9nTG5J
ZihGb3JBbGxLaWxsc0ludGVybmFsOjp2ZXJib3NlLCAibG9jYWwgYXZhaWxhYmlsaXR5IGF0IGlu
ZGV4OiAiLCBub2RlSW5kZXgsICIgIiwgbG9jYWxBdmFpbGFiaWxpdHkubV9hdmFpbGFiaWxpdHkp
OwogICAgICAgICBmb3JBbGxLaWxsZWROb2Rlc0F0Tm9kZUluZGV4KAogICAgICAgICAgICAgZ3Jh
cGgsIGxvY2FsQXZhaWxhYmlsaXR5Lm1fYXZhaWxhYmlsaXR5LCBibG9jaywgbm9kZUluZGV4LAog
ICAgICAgICAgICAgWyZdIChOb2RlKiBub2RlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCmluZGV4IGU1MTM1NWM1NTFiNDhjMjY2ZjllM2FiNzU2OGJhMTBiN2Q4MjRlYzIu
LmI5Zjg1NzI5NWVmYWY3NTI2MTRiNDRmNzU5ZjQ4OThhNGZiYzcyNWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCkBAIC0zMDgsOCArMzA4LDggQEAgdm9pZCBHcmFwaDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXhTdHIsIE5vZGUqIG5vZGUs
IER1bXBDb250ZXgKICAgICBpZiAobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCp0aGlzKSkg
ewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUt
PnRyeUdldFZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NE
YXRhKSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZhcmlhYmxlQWNj
ZXNzRGF0YS0+bG9jYWwoKTsKLSAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgdmFyaWFibGVB
Y2Nlc3NEYXRhLT5sb2NhbCgpLCAiKCIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAoKnRoaXMsIHZh
cmlhYmxlQWNjZXNzRGF0YSksICIpIik7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSB2
YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKTsKKyAgICAgICAgICAgIG91dC5wcmludChjb21t
YSwgdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCksICIoIiwgVmFyaWFibGVBY2Nlc3NEYXRh
RHVtcCgqdGhpcywgdmFyaWFibGVBY2Nlc3NEYXRhKSwgIikiKTsKICAgICAgICAgICAgIG9wZXJh
bmQgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1hY2hpbmVMb2NhbCgpOwogICAgICAgICAgICAgaWYg
KG9wZXJhbmQuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgIm1h
Y2hpbmU6Iiwgb3BlcmFuZCk7CkBAIC0zMTcsMTMgKzMxNywxMyBAQCB2b2lkIEdyYXBoOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeFN0ciwgTm9kZSogbm9kZSwgRHVt
cENvbnRleAogICAgIH0KICAgICBpZiAobm9kZS0+aGFzU3RhY2tBY2Nlc3NEYXRhKCkpIHsKICAg
ICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0g
ICAgICAgIG91dC5wcmludChjb21tYSwgZGF0YS0+bG9jYWwpOworICAgICAgICBvdXQucHJpbnQo
Y29tbWEsIGRhdGEtPm9wZXJhbmQpOwogICAgICAgICBpZiAoZGF0YS0+bWFjaGluZUxvY2FsLmlz
VmFsaWQoKSkKICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgIm1hY2hpbmU6IiwgZGF0YS0+
bWFjaGluZUxvY2FsKTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBkYXRhLT5mb3JtYXQpOwog
ICAgIH0KLSAgICBpZiAobm9kZS0+aGFzVW5saW5rZWRMb2NhbCgpKSAKLSAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCBub2RlLT51bmxpbmtlZExvY2FsKCkpOworICAgIGlmIChub2RlLT5oYXNVbmxp
bmtlZE9wZXJhbmQoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBub2RlLT51bmxpbmtlZE9w
ZXJhbmQoKSk7CiAgICAgaWYgKG5vZGUtPmhhc1ZlY3Rvckxlbmd0aEhpbnQoKSkKICAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAidmVjdG9yTGVuZ3RoSGludCA9ICIsIG5vZGUtPnZlY3Rvckxlbmd0
aEhpbnQoKSk7CiAgICAgaWYgKG5vZGUtPmhhc0xhenlKU1ZhbHVlKCkpCkBAIC01MTUsOSArNTE1
LDEwIEBAIHZvaWQgR3JhcGg6OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYgb3V0LCBjb25z
dCBjaGFyKiBwcmVmaXhTdHIsIEJhc2ljQmxvY2sqCiAgICAgICAgIG91dC5wcmludChwcmVmaXgs
ICIgIFBoaSBOb2RlczoiKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+
cGhpcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IGJsb2NrLT5w
aGlzW2ldOworICAgICAgICAgICAgQVNTRVJUKHBoaU5vZGUtPm9wKCkgPT0gUGhpKTsKICAgICAg
ICAgICAgIGlmICghcGhpTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSAmJiBwaGlOb2RlRHVtcE1vZGUg
PT0gRHVtcExpdmVQaGlzT25seSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIG91dC5wcmludCgiIEAiLCBwaGlOb2RlLT5pbmRleCgpLCAiPCIsIHBoaU5vZGUtPmxvY2Fs
KCksICIsIiwgcGhpTm9kZS0+cmVmQ291bnQoKSwgIj4tPigiKTsKKyAgICAgICAgICAgIG91dC5w
cmludCgiIEAiLCBwaGlOb2RlLT5pbmRleCgpLCAiPCIsIHBoaU5vZGUtPm9wZXJhbmQoKSwgIiwi
LCBwaGlOb2RlLT5yZWZDb3VudCgpLCAiPi0+KCIpOwogICAgICAgICAgICAgaWYgKHBoaU5vZGUt
PmNoaWxkMSgpKSB7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJAIiwgcGhpTm9kZS0+Y2hp
bGQxKCktPmluZGV4KCkpOwogICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDIoKSkg
ewpAQCAtODg0LDcgKzg4NSw3IEBAIHZvaWQgR3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbChCYXNp
Y0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxvY2ssIFZhCiAgICAgICAgIGJv
b2wgc2hvdWxkQ29udGludWUgPSB0cnVlOwogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
ICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgaWYgKG5vZGUtPmxvY2FsKCkg
PT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKQorICAgICAgICAgICAgaWYgKG5vZGUtPm9w
ZXJhbmQoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSkKICAgICAgICAgICAgICAg
ICBzaG91bGRDb250aW51ZSA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
QEAgLTg5Myw5ICs4OTQsOSBAQCB2b2lkIEdyYXBoOjpzdWJzdGl0dXRlR2V0TG9jYWwoQmFzaWNC
bG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJbkJsb2NrLCBWYQogICAgICAgICAgICAg
aWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IHZhcmlhYmxlQWNjZXNzRGF0YSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHN1YnN0aXR1dGUoYmxvY2ssIGlu
ZGV4SW5CbG9jaywgbm9kZSwgbmV3R2V0TG9jYWwpOwotICAgICAgICAgICAgTm9kZSogb2xkVGFp
bE5vZGUgPSBibG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEt
PmxvY2FsKCkpOworICAgICAgICAgICAgTm9kZSogb2xkVGFpbE5vZGUgPSBibG9jay52YXJpYWJs
ZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSk7CiAgICAgICAg
ICAgICBpZiAob2xkVGFpbE5vZGUgPT0gbm9kZSkKLSAgICAgICAgICAgICAgICBibG9jay52YXJp
YWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpID0gbmV3R2V0
TG9jYWw7CisgICAgICAgICAgICAgICAgYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFy
aWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCkpID0gbmV3R2V0TG9jYWw7CiAgICAgICAgICAgICBz
aG91bGRDb250aW51ZSA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAg
LTExMzMsMzYgKzExMzQsNTYgQEAgQnl0ZWNvZGVLaWxscyYgR3JhcGg6OmtpbGxzRm9yKElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogICAgIHJldHVybiBraWxsc0ZvcihiYXNlbGlu
ZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpKTsKIH0KIAotYm9vbCBHcmFwaDo6aXNMaXZl
SW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
KQorYm9vbCBHcmFwaDo6aXNMaXZlSW5CeXRlY29kZShPcGVyYW5kIG9wZXJhbmQsIENvZGVPcmln
aW4gY29kZU9yaWdpbikKIHsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZh
bHNlOwogICAgIAogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDaGVja2luZyBv
ZiBvcGVyYW5kIGlzIGxpdmU6ICIsIG9wZXJhbmQsICJcbiIpOwogICAgIGJvb2wgaXNDYWxsZXJP
cmlnaW4gPSBmYWxzZTsKKwogICAgIENvZGVPcmlnaW4qIGNvZGVPcmlnaW5QdHIgPSAmY29kZU9y
aWdpbjsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBWaXJ0
dWFsUmVnaXN0ZXIoCi0gICAgICAgICAgICBvcGVyYW5kLm9mZnNldCgpIC0gY29kZU9yaWdpblB0
ci0+c3RhY2tPZmZzZXQoKSk7CisgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdp
blB0ci0+aW5saW5lQ2FsbEZyYW1lKCk7CisgICAgLy8gV2UgbmVlZCB0byBoYW5kbGUgdGFpbCBj
YWxsZXJzIGJlY2F1c2Ugd2UgbWF5IGRlY2lkZSB0byBleGl0IHRvIHRoZQorICAgIC8vIHRoZSBy
ZXR1cm4gYnl0ZWNvZGUgZm9sbG93aW5nIHRoZSB0YWlsIGNhbGwuCisgICAgZm9yICg7IGNvZGVP
cmlnaW5QdHI7IGNvZGVPcmlnaW5QdHIgPSBpbmxpbmVDYWxsRnJhbWUgPyAmaW5saW5lQ2FsbEZy
YW1lLT5kaXJlY3RDYWxsZXIgOiBudWxscHRyKSB7CisgICAgICAgIGlubGluZUNhbGxGcmFtZSA9
IGNvZGVPcmlnaW5QdHItPmlubGluZUNhbGxGcmFtZSgpOworICAgICAgICBpZiAob3BlcmFuZC5p
c1RtcCgpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCB0bXBPZmZzZXQgPSBpbmxpbmVDYWxsRnJh
bWUgPyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCA6IDA7CisgICAgICAgICAgICB1bnNpZ25l
ZCBvcGVyYW5kSW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob3BlcmFuZC52YWx1ZSgpKTsK
KworICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmQudmFsdWUoKSA+PSAwKTsKKyAgICAgICAgICAg
IC8vIFRoaXMgdG1wIHNob3VsZCBoYXZlIGJlbG9uZ2VkIHRvIHNvbWVvbmUgd2UgaW5saW5lZC4K
KyAgICAgICAgICAgIGlmIChvcGVyYW5kSW5kZXggPiB0bXBPZmZzZXQgKyBtYXhOdW1DaGVja3Bv
aW50VG1wcykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1l
KTsKKyAgICAgICAgICAgIGlmICghY29kZUJsb2NrLT5udW1UbXBzKCkgfHwgb3BlcmFuZEluZGV4
IDwgdG1wT2Zmc2V0KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBh
dXRvIGJpdE1hcCA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBjb2RlT3Jp
Z2luUHRyLT5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgcmV0dXJuIGJpdE1hcC5nZXQo
b3BlcmFuZEluZGV4IC0gdG1wT2Zmc2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciByZWcgPSBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpIC0gY29kZU9yaWdpblB0ci0+
c3RhY2tPZmZzZXQoKTsKICAgICAgICAgCiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAg
ICAgZGF0YUxvZygicmVnID0gIiwgcmVnLCAiXG4iKTsKIAotICAgICAgICBhdXRvKiBpbmxpbmVD
YWxsRnJhbWUgPSBjb2RlT3JpZ2luUHRyLT5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICAgICAgaWYg
KG9wZXJhbmQub2Zmc2V0KCkgPCBjb2RlT3JpZ2luUHRyLT5zdGFja09mZnNldCgpICsgQ2FsbEZy
YW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpIHsKKyAgICAgICAgaWYgKG9wZXJhbmQudmlydHVh
bFJlZ2lzdGVyKCkub2Zmc2V0KCkgPCBjb2RlT3JpZ2luUHRyLT5zdGFja09mZnNldCgpICsgQ2Fs
bEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpIHsKICAgICAgICAgICAgIGlmIChyZWcuaXNB
cmd1bWVudCgpKSB7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVnLm9mZnNldCgp
IDwgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpOwogCiAKICAgICAgICAgICAgICAg
ICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsCi0gICAgICAgICAgICAgICAgICAg
ICYmIHJlZy5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90OjpjYWxsZWUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgJiYgcmVnID09IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgewogICAgICAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkxv
b2tzIGxpa2UgYSBjYWxsZWUuXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlm
IChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpCi0gICAgICAgICAgICAgICAgICAgICYmIHJl
Zy5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykg
eworICAgICAgICAgICAgICAgICAgICAmJiByZWcgPT0gQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJMb29rcyBsaWtlIHRoZSBhcmd1bWVudCBj
b3VudC5cbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExNzYsNDIg
KzExOTcsMzkgQEAgYm9vbCBHcmFwaDo6aXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgICAgICAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpOwogICAgICAg
ICAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9IGxpdmVuZXNzRm9yKGNv
ZGVCbG9jayk7CiAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2Rl
T3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgICAgICByZXR1cm4gZnVsbExpdmVu
ZXNzLm9wZXJhbmRJc0xpdmUocmVnLm9mZnNldCgpLCBieXRlY29kZUluZGV4LCBhcHByb3ByaWF0
ZUxpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludCgqY29kZU9yaWdpblB0ciwgaXNDYWxsZXJPcmlnaW4p
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKSB7Ci0gICAgICAg
ICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJSYW4gb3V0IG9mIHN0
YWNrLCByZXR1cm5pbmcgdHJ1ZS5cbiIpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICByZXR1cm4gZnVsbExpdmVuZXNzLnZpcnR1YWxSZWdpc3RlcklzTGl2ZShyZWcsIGJ5
dGVjb2RlSW5kZXgsIGFwcHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50KCpjb2RlT3Jp
Z2luUHRyLCBpc0NhbGxlck9yaWdpbikpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gQXJndW1l
bnRzIGFyZSBhbHdheXMgbGl2ZS4gVGhpcyB3b3VsZCBiZSByZWR1bmRhbnQgaWYgaXQgd2Fzbid0
IGZvciBvdXIKICAgICAgICAgLy8gb3BfY2FsbF92YXJhcmdzIGlubGluaW5nLgotICAgICAgICBp
ZiAocmVnLmlzQXJndW1lbnQoKQorICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmIHJlZy5p
c0FyZ3VtZW50KCkKICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PHNpemVfdD4ocmVnLnRvQXJn
dW1lbnQoKSkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1dpdGhGaXh1cC5zaXplKCkpIHsK
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkFyZ3Vt
ZW50IGlzIGxpdmUuXG4iKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAK
LSAgICAgICAgLy8gV2UgbmVlZCB0byBoYW5kbGUgdGFpbCBjYWxsZXJzIGJlY2F1c2Ugd2UgbWF5
IGRlY2lkZSB0byBleGl0IHRvIHRoZQotICAgICAgICAvLyB0aGUgcmV0dXJuIGJ5dGVjb2RlIGZv
bGxvd2luZyB0aGUgdGFpbCBjYWxsLgotICAgICAgICBjb2RlT3JpZ2luUHRyID0gJmlubGluZUNh
bGxGcmFtZS0+ZGlyZWN0Q2FsbGVyOwogICAgICAgICBpc0NhbGxlck9yaWdpbiA9IHRydWU7CiAg
ICAgfQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICBpZiAo
b3BlcmFuZC5pc1RtcCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgZGF0YUxvZygiUmFuIG91dCBvZiBzdGFjaywgcmV0dXJuaW5nIHRydWUuXG4i
KTsKKyAgICByZXR1cm4gdHJ1ZTsgICAgCiB9CiAKLUJpdFZlY3RvciBHcmFwaDo6bG9jYWxzTGl2
ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQorQml0VmVjdG9yIEdyYXBoOjpsb2Nh
bHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogewogICAgIEJp
dFZlY3RvciByZXN1bHQ7Ci0gICAgcmVzdWx0LmVuc3VyZVNpemUoYmxvY2soMCktPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKLSAgICBmb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29k
ZSgKKyAgICB1bnNpZ25lZCBudW1Mb2NhbHMgPSBibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51
bWJlck9mTG9jYWxzKCk7CisgICAgcmVzdWx0LmVuc3VyZVNpemUobnVtTG9jYWxzICsgYmxvY2so
MCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZlRtcHMoKSk7CisgICAgZm9yQWxsTG9jYWxzQW5k
VG1wc0xpdmVJbkJ5dGVjb2RlKAogICAgICAgICBjb2RlT3JpZ2luLAotICAgICAgICBbJl0gKFZp
cnR1YWxSZWdpc3RlciByZWcpIHsKLSAgICAgICAgICAgIEFTU0VSVChyZWcuaXNMb2NhbCgpKTsK
LSAgICAgICAgICAgIHJlc3VsdC5xdWlja1NldChyZWcudG9Mb2NhbCgpKTsKKyAgICAgICAgWyZd
IChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG9wZXJh
bmQuaXNUbXAoKSA/IG51bUxvY2FscyArIG9wZXJhbmQudmFsdWUoKSA6IG9wZXJhbmQudG9Mb2Nh
bCgpOworICAgICAgICAgICAgcmVzdWx0LnF1aWNrU2V0KG9mZnNldCk7CiAgICAgICAgIH0pOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xNjM1LDggKzE2NTMsOCBAQCBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlIEdyYXBoOjptZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKE5v
ZGUqIGN1cnJlbgogCiAgICAgZm9yIChOb2RlKiBub2RlID0gb3BlcmFuZE5vZGU7IG5vZGU7KSB7
CiAgICAgICAgIGlmIChub2RlLT5hY2Nlc3Nlc1N0YWNrKCp0aGlzKSkgewotICAgICAgICAgICAg
aWYgKG1fZm9ybSAhPSBTU0EgJiYgbm9kZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkpIHsKLSAgICAg
ICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBub2RlLT5sb2NhbCgpLnRvQXJndW1lbnQoKTsKKyAg
ICAgICAgICAgIGlmIChtX2Zvcm0gIT0gU1NBICYmIG5vZGUtPm9wZXJhbmQoKS5pc0FyZ3VtZW50
KCkpIHsKKyAgICAgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBub2RlLT5vcGVyYW5kKCkudG9B
cmd1bWVudCgpOwogICAgICAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50Tm9kZSA9IG1fcm9vdFRv
QXJndW1lbnRzLmZpbmQoYmxvY2soMCkpLT52YWx1ZVthcmd1bWVudF07CiAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYXRjaCBTZXRBcmd1bWVudERlZmluaXRlbHkgbm9kZXMg
YXQgb3RoZXIgZW50cnlwb2ludHMgYXMgd2VsbDoKICAgICAgICAgICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1ODQxCkBAIC0xNjU2LDcgKzE2NzQs
NyBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIEdyYXBoOjptZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlRm9yKE5vZGUqIGN1cnJlbgogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZnJvbUxhenlPcGVyYW5kKAogICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgIExh
enlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCksIG5vZGUtPmxvY2FsKCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJ
bmRleCgpLCBub2RlLT5vcGVyYW5kKCkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAppbmRleCBlYzRmMjJiZWU1NWYx
YjI5MDQyYmZiMjNlMTI2NGZhMjAzY2FkZGU3Li45NDdlZmFhYmE5ZTY0OTZiM2IwNWM2ZjU1MTQy
YWI3Yzc3YjViNWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCkBAIC04NDAs
MTMgKzg0MCwxMyBAQCBwdWJsaWM6CiAgICAgLy8gUXVpY2tseSBxdWVyeSBpZiBhIHNpbmdsZSBs
b2NhbCBpcyBsaXZlIGF0IHRoZSBnaXZlbiBwb2ludC4gVGhpcyBpcyBmYXN0ZXIgdGhhbiBjYWxs
aW5nCiAgICAgLy8gZm9yQWxsTGl2ZUluQnl0ZWNvZGUoKSBpZiB5b3Ugd2lsbCBvbmx5IHF1ZXJ5
IG9uZSBsb2NhbC4gQnV0LCBpZiB5b3Ugd2FudCB0byBrbm93IGFsbCBvZiB0aGUKICAgICAvLyBs
b2NhbHMgbGl2ZSwgdGhlbiBjYWxsaW5nIHRoaXMgZm9yIGVhY2ggbG9jYWwgaXMgbXVjaCBzbG93
ZXIgdGhhbiBmb3JBbGxMaXZlSW5CeXRlY29kZSgpLgotICAgIGJvb2wgaXNMaXZlSW5CeXRlY29k
ZShWaXJ0dWFsUmVnaXN0ZXIsIENvZGVPcmlnaW4pOworICAgIGJvb2wgaXNMaXZlSW5CeXRlY29k
ZShPcGVyYW5kLCBDb2RlT3JpZ2luKTsKICAgICAKLSAgICAvLyBRdWlja2x5IGdldCBhbGwgb2Yg
dGhlIG5vbi1hcmd1bWVudCBsb2NhbHMgbGl2ZSBhdCB0aGUgZ2l2ZW4gcG9pbnQuIFRoaXMgZG9l
c24ndCBnaXZlIHlvdQorICAgIC8vIFF1aWNrbHkgZ2V0IGFsbCBvZiB0aGUgbm9uLWFyZ3VtZW50
IGxvY2FscyBhbmQgdG1wcyBsaXZlIGF0IHRoZSBnaXZlbiBwb2ludC4gVGhpcyBkb2Vzbid0IGdp
dmUgeW91CiAgICAgLy8gYW55IGFyZ3VtZW50cyBiZWNhdXNlIHRob3NlIGFyZSBhbGwgcHJlc3Vt
ZWQgbGl2ZS4gWW91IGNhbiBjYWxsIGZvckFsbExpdmVJbkJ5dGVjb2RlKCkgdG8KICAgICAvLyBh
bHNvIGdldCB0aGUgYXJndW1lbnRzLiBUaGlzIGlzIG11Y2ggZmFzdGVyIHRoYW4gY2FsbGluZyBp
c0xpdmVJbkJ5dGVjb2RlKCkgZm9yIGVhY2ggbG9jYWwuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4KLSAgICB2b2lkIGZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4g
Y29kZU9yaWdpbiwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB2b2lkIGZvckFsbExvY2Fs
c0FuZFRtcHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IpCiAgICAgewogICAgICAgICAvLyBTdXBwb3J0IGZvciBub3QgcmVkdW5kYW50
bHkgcmVwb3J0aW5nIGFyZ3VtZW50cy4gTmVjZXNzYXJ5IGJlY2F1c2UgaW4gY2FzZSBvZiBhIHZh
cmFyZ3MKICAgICAgICAgLy8gY2FsbCwgb25seSB0aGUgY2FsbGVlIGtub3dzIHRoYXQgYXJndW1l
bnRzIGFyZSBsaXZlIHdoaWxlIGluIHRoZSBjYXNlIG9mIGEgbm9uLXZhcmFyZ3MKQEAgLTg4MSw2
ICs4ODEsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmIChsaXZlbmVzc0F0Qnl0ZWNv
ZGVbcmVsYXRpdmVMb2NhbF0pCiAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVnKTsKICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5k
ZXgoKS5jaGVja3BvaW50KCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5u
dW1UbXBzKCkpOworICAgICAgICAgICAgICAgIGF1dG8gbGl2ZVRtcHMgPSB0bXBMaXZlbmVzc0Zv
ckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgY29kZU9yaWdpblB0ci0+Ynl0ZWNvZGVJbmRleCgpKTsK
KyAgICAgICAgICAgICAgICBsaXZlVG1wcy5mb3JFYWNoU2V0Qml0KFsmXSAoc2l6ZV90IHRtcCkg
eworICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHJlbWFwT3BlcmFuZChpbmxpbmVDYWxsRnJh
bWUsIE9wZXJhbmQ6OnRtcCh0bXApKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTA0LDkgKzkxMiw5IEBAIHB1YmxpYzoKICAgICAgICAg
fQogICAgIH0KICAgICAKLSAgICAvLyBHZXQgYSBCaXRWZWN0b3Igb2YgYWxsIG9mIHRoZSBub24t
YXJndW1lbnQgbG9jYWxzIGxpdmUgcmlnaHQgbm93LiBUaGlzIGlzIG1vc3RseSB1c2VmdWwgaWYK
KyAgICAvLyBHZXQgYSBCaXRWZWN0b3Igb2YgYWxsIG9mIHRoZSBsb2NhbHMgYW5kIHRtcHMgbGl2
ZSByaWdodCBub3cuIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCBpZgogICAgIC8vIHlvdSB3YW50IHRv
IGNvbXBhcmUgdHdvIHNldHMgb2YgbGl2ZSBsb2NhbHMgZnJvbSB0d28gZGlmZmVyZW50IENvZGVP
cmlnaW5zLgotICAgIEJpdFZlY3RvciBsb2NhbHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luKTsK
KyAgICBCaXRWZWN0b3IgbG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4pOwog
CiAgICAgTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50IGFwcHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxh
dGlvblBvaW50KENvZGVPcmlnaW4gb3JpZ2luLCBib29sIGlzQ2FsbGVyT3JpZ2luKQogICAgIHsK
QEAgLTkzOCwxNiArOTQ2LDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIExpdmVuZXNzQ2Fs
Y3VsYXRpb25Qb2ludDo6QmVmb3JlVXNlOwogICAgIH0KICAgICAKLSAgICAvLyBUZWxscyB5b3Ug
YWxsIG9mIHRoZSBhcmd1bWVudHMgYW5kIGxvY2FscyBsaXZlIGF0IHRoZSBnaXZlbiBDb2RlT3Jp
Z2luLiBUaGlzIGlzIGEgc21hbGwKLSAgICAvLyBleHRlbnNpb24gdG8gZm9yQWxsTG9jYWxzTGl2
ZUluQnl0ZWNvZGUoKSwgc2luY2UgYWxsIGFyZ3VtZW50cyBhcmUgYWx3YXlzIHByZXN1bWVkIGxp
dmUuCisgICAgLy8gVGVsbHMgeW91IGFsbCBvZiB0aGUgb3BlcmFuZHMgbGl2ZSBhdCB0aGUgZ2l2
ZW4gQ29kZU9yaWdpbi4gVGhpcyBpcyBhIHNtYWxsCisgICAgLy8gZXh0ZW5zaW9uIHRvIGZvckFs
bExvY2Fsc09yVG1wc0xpdmVJbkJ5dGVjb2RlKCksIHNpbmNlIGFsbCBhcmd1bWVudHMgYXJlIGFs
d2F5cyBwcmVzdW1lZCBsaXZlLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAg
dm9pZCBmb3JBbGxMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IEZ1
bmN0b3ImIGZ1bmN0b3IpCiAgICAgewotICAgICAgICBmb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29k
ZShjb2RlT3JpZ2luLCBmdW5jdG9yKTsKKyAgICAgICAgZm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJ
bkJ5dGVjb2RlKGNvZGVPcmlnaW4sIGZ1bmN0b3IpOwogICAgICAgICAKICAgICAgICAgLy8gUmVw
b3J0IGFsbCBhcmd1bWVudHMgYXMgYmVpbmcgbGl2ZS4KICAgICAgICAgZm9yICh1bnNpZ25lZCBh
cmd1bWVudCA9IGJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsg
YXJndW1lbnQtLTspCi0gICAgICAgICAgICBmdW5jdG9yKHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KGFyZ3VtZW50KSk7CisgICAgICAgICAgICBmdW5jdG9yKHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50SW5jbHVkaW5nVGhpcyhhcmd1bWVudCkpOwogICAgIH0KICAgICAKICAgICBCeXRlY29k
ZUtpbGxzJiBraWxsc0ZvcihDb2RlQmxvY2sqKTsKQEAgLTExMTQsNiArMTEyMiw3IEBAIHB1Ymxp
YzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja3dhcmRzQ0ZHPiBtX2JhY2t3YXJkc0NGRzsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QmFja3dhcmRzRG9taW5hdG9ycz4gbV9iYWNrd2FyZHNEb21pbmF0
b3JzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcz4gbV9j
b250cm9sRXF1aXZhbGVuY2VBbmFseXNpczsKKyAgICB1bnNpZ25lZCBtX3RtcHM7CiAgICAgdW5z
aWduZWQgbV9sb2NhbFZhcnM7CiAgICAgdW5zaWduZWQgbV9uZXh0TWFjaGluZUxvY2FsOwogICAg
IHVuc2lnbmVkIG1fcGFyYW1ldGVyU2xvdHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCmluZGV4IDk5YWVmZmNkYzA1YTEx
YzQ1YjA1NzQxMjUwZjRkMmFlYjRlMjI4Y2QuLjIwMmQyMjUwNTNmYTlkZmJlNWMyM2M2NGJjZjhi
ZTM4NGUzZTc2NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5Q
bGFjZUFic3RyYWN0U3RhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCkBAIC00NSw4ICs0NSw4IEBAIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6SW5QbGFjZUFi
c3RyYWN0U3RhdGUoR3JhcGgmIGdyYXBoKQogICAgIDogbV9ncmFwaChncmFwaCkKICAgICAsIG1f
YWJzdHJhY3RWYWx1ZXMoKmdyYXBoLm1fYWJzdHJhY3RWYWx1ZXNDYWNoZSkKLSAgICAsIG1fdmFy
aWFibGVzKG1fZ3JhcGgubV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgZ3JhcGgubV9sb2Nh
bFZhcnMpCi0gICAgLCBtX2Jsb2NrKDApCisgICAgLCBtX3ZhcmlhYmxlcyhPcGVyYW5kc0xpa2Us
IGdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCisgICAgLCBtX2Jsb2NrKG51bGxwdHIp
CiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFj
ZUFic3RyYWN0U3RhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFi
c3RyYWN0U3RhdGUuaAppbmRleCBiZjVlYWQxOGVjMTY0N2VlMTY3NjY4ODM1NzQwMWZhN2ZlYzcx
Mjk5Li4xODY1ZTZhMWVmZmMzZGFhZWZlNTg0Y2E4NjJjNDliYzM2ODU4NTAwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCkBA
IC0xNjcsMTMgKzE2NywxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmYXN0Rm9yd2FyZCht
X3ZhcmlhYmxlc1tpbmRleF0pOwogICAgIH0KIAotICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQo
aW50IG9wZXJhbmQpCisgICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChPcGVyYW5kIG9wZXJhbmQp
CiAgICAgewogICAgICAgICByZXR1cm4gdmFyaWFibGVBdChtX3ZhcmlhYmxlcy5vcGVyYW5kSW5k
ZXgob3BlcmFuZCkpOwogICAgIH0KICAgICAKLSAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7IHJldHVybiB0aGlzLT5vcGVyYW5kKG9wZXJhbmQub2Zm
c2V0KCkpOyB9Ci0gICAgCiAgICAgQWJzdHJhY3RWYWx1ZSYgbG9jYWwoc2l6ZV90IGluZGV4KQog
ICAgIHsKICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQXQobV92YXJpYWJsZXMubG9jYWxJbmRleChp
bmRleCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcApp
bmRleCA3MGVlZjg4NmI0YThmZTI5NDNmNDZiYWU3NmVjNmI2MzcwZTQ1MmQ1Li5jNTU0NGJiYzVj
OTgwNTY2OWY5ZTdmNmZmODBiOWFjMTk2ZjRkZjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcApAQCAtODUsOCArODUsNiBAQCB2b2lkIEpJVENvbXBp
bGVyOjpsaW5rT1NSRXhpdHMoKQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5rID0gdm0oKS5nZXRDVElT
dHViKG9zckV4aXRUaHVua0dlbmVyYXRvcik7Ci0gICAgYXV0byBvc3JFeGl0VGh1bmtMYWJlbCA9
IENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPihvc3JFeGl0VGh1bmsuY29kZSgpKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsg
KytpKSB7CiAgICAgICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2V4aXRDb21w
aWxhdGlvbkluZm9baV07CiAgICAgICAgIEp1bXBMaXN0JiBmYWlsdXJlSnVtcHMgPSBpbmZvLm1f
ZmFpbHVyZUp1bXBzOwpAQCAtOTcsMTMgKzk1LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua09T
UkV4aXRzKCkKIAogICAgICAgICBqaXRBc3NlcnRIYXNWYWxpZENhbGxGcmFtZSgpOwogICAgICAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihpKSwgJnZtKCkub3NyRXhpdEluZGV4KTsKLSAgICAgICAg
aWYgKE9wdGlvbnM6OnVzZVByb2JlT1NSRXhpdCgpKSB7Ci0gICAgICAgICAgICBKdW1wIHRhcmdl
dCA9IGp1bXAoKTsKLSAgICAgICAgICAgIGFkZExpbmtUYXNrKFt0YXJnZXQsIG9zckV4aXRUaHVu
a0xhYmVsXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayh0YXJnZXQsIG9zckV4aXRUaHVua0xhYmVsKTsKLSAgICAgICAgICAgIH0pOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGluZm8ubV9wYXRjaGFibGVKdW1wID0gcGF0Y2hh
YmxlSnVtcCgpOworICAgICAgICBpbmZvLm1fcGF0Y2hhYmxlSnVtcCA9IHBhdGNoYWJsZUp1bXAo
KTsKICAgICB9CiB9CiAKQEAgLTU5NSwxMSArNTg3LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6Om5v
dGljZU9TUkVudHJ5KEJhc2ljQmxvY2smIGJhc2ljQmxvY2ssIEpJVENvbXBpbGVyOjpMYWJlbCBi
bG9jCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkg
IT0gdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSB7CisKKyAgICAgICAgICAgIEFTU0VSVCghdmFy
aWFibGUtPm9wZXJhbmQoKS5pc1RtcCgpKTsKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+b3Bl
cmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpICE9IHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkgewog
ICAgICAgICAgICAgICAgIGVudHJ5LT5tX3Jlc2h1ZmZsaW5ncy5hcHBlbmQoCiAgICAgICAgICAg
ICAgICAgICAgIE9TUkVudHJ5UmVzaHVmZmxpbmcoCi0gICAgICAgICAgICAgICAgICAgICAgICB2
YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLm9mZnNl
dCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1
YWxSZWdpc3RlcigpLm9mZnNldCgpLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkub2Zmc2V0KCkp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuaAppbmRleCBkMWJkN2RhOWRmZmRjMzZjMjYwZTYzNWNiNjAw
YTliMmYxOTE5ZDM1Li40ODgwODc0YzI4NWFiN2Q0NDdlYjg5M2E2ZThiNGJiZjAxMDczMWQ0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCkBAIC0xMzUsNyAr
MTM1LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBlbWl0U3RvcmVDYWxsU2l0ZUluZGV4KENhbGxT
aXRlSW5kZXggY2FsbFNpdGUpCiAgICAgewotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihj
YWxsU2l0ZS5iaXRzKCkpLCB0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKKyAgICAgICAgc3RvcmUz
MihUcnVzdGVkSW1tMzIoY2FsbFNpdGUuYml0cygpKSwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgfQogCiAgICAgLy8gQWRkIGEgY2FsbCBv
dXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0
aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJp
YWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcAppbmRleCA0MmY2OGFkYTMyNDc4YTExNzFjZWFkMGY5
M2UwOGFjMjVjYTYzMTM0Li41YzM1ZTUzNWU1ZGQ2NjFkMzFkZDUxMzBkN2MxMmJhY2JhZGIyYzBm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlh
YmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAKQEAgLTYzLDcgKzYzLDcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBib29sIGlzVmFs
aWRGbHVzaExvY2F0aW9uKEJhc2ljQmxvY2sqIHN0YXJ0aW5nQmxvY2ssIHVuc2lnbmVkIGluZGV4
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBib29sIGlzVmFsaWRGbHVzaExvY2F0aW9u
KEJhc2ljQmxvY2sqIHN0YXJ0aW5nQmxvY2ssIHVuc2lnbmVkIGluZGV4LCBPcGVyYW5kIG9wZXJh
bmQpCiAgICAgewogICAgICAgICAvLyBUaGlzIGNvZGUgaXMgbm90IG1lYW50IHRvIGJlIGZhc3Qu
IFdlIGp1c3QgdXNlIGl0IGZvciBhc3NlcnRpb25zLiBJZiB3ZSBnb3QgbGl2ZW5lc3Mgd3Jvbmcs
CiAgICAgICAgIC8vIHRoaXMgZnVuY3Rpb24gd291bGQgcmV0dXJuIGZhbHNlIGZvciBhIEZsdXNo
IHRoYXQgd2UgaW5zZXJ0LgpAQCAtODEsNyArODEsNyBAQCBwdWJsaWM6CiAgICAgICAgIGF1dG8g
Zmx1c2hJc0RlZmluaXRlbHlJbnZhbGlkID0gWyZdIChCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWdu
ZWQgaW5kZXgpIHsKICAgICAgICAgICAgIGJvb2wgYWxsR29vZCA9IGZhbHNlOwogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gaW5kZXg7IGktLTsgKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGJsb2NrLT5hdChpKS0+YWNjZXNzZXNTdGFjayhtX2dyYXBoKSAmJiBibG9jay0+YXQoaSktPmxv
Y2FsKCkgPT0gb3BlcmFuZCkgeworICAgICAgICAgICAgICAgIGlmIChibG9jay0+YXQoaSktPmFj
Y2Vzc2VzU3RhY2sobV9ncmFwaCkgJiYgYmxvY2stPmF0KGkpLT5vcGVyYW5kKCkgPT0gb3BlcmFu
ZCkgewogICAgICAgICAgICAgICAgICAgICBhbGxHb29kID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTE1LDggKzExNSw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGhhbmRsZUJsb2NrRm9yVHJ5Q2F0Y2goQmFzaWNCbG9jayogYmxvY2ssIElu
c2VydGlvblNldCYgaW5zZXJ0aW9uU2V0KQogICAgIHsKICAgICAgICAgSGFuZGxlckluZm8qIGN1
cnJlbnRFeGNlcHRpb25IYW5kbGVyID0gbnVsbHB0cjsKLSAgICAgICAgRmFzdEJpdFZlY3RvciBs
aXZlQXRDYXRjaEhlYWQ7Ci0gICAgICAgIGxpdmVBdENhdGNoSGVhZC5yZXNpemUobV9ncmFwaC5i
bG9jaygwKS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkpOworICAgICAgICBPcGVy
YW5kczxib29sPiBsaXZlQXRDYXRjaEhlYWQoMCwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVz
QXRUYWlsLm51bWJlck9mTG9jYWxzKCksIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0VGFp
bC5udW1iZXJPZlRtcHMoKSk7CiAKICAgICAgICAgSGFuZGxlckluZm8qIGNhY2hlZEhhbmRsZXJS
ZXN1bHQ7CiAgICAgICAgIENvZGVPcmlnaW4gY2FjaGVkQ29kZU9yaWdpbjsKQEAgLTEzMywxMSAr
MTMyLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSA9IG9yaWdpbi5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICAgICAgICAgICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5l
Q2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICBpZiAoSGFuZGxlckluZm8qIGhhbmRsZXIgPSBj
b2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXhUb0NoZWNrKSkg
ewotICAgICAgICAgICAgICAgICAgICBsaXZlQXRDYXRjaEhlYWQuY2xlYXJBbGwoKTsKKyAgICAg
ICAgICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLmZpbGwoZmFsc2UpOwogCiAgICAgICAgICAg
ICAgICAgICAgIEJ5dGVjb2RlSW5kZXggY2F0Y2hCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRl
eChoYW5kbGVyLT50YXJnZXQpOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmZvckFsbExv
Y2Fsc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4oY2F0Y2hCeXRlY29kZUluZGV4LCBpbmxpbmVD
YWxsRnJhbWUpLCBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBsaXZlQXRDYXRjaEhlYWRbb3BlcmFuZC50b0xvY2FsKCldID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC5mb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNv
ZGUoQ29kZU9yaWdpbihjYXRjaEJ5dGVjb2RlSW5kZXgsIGlubGluZUNhbGxGcmFtZSksIFsmXSAo
T3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXZlQXRDYXRjaEhl
YWQub3BlcmFuZChvcGVyYW5kKSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogCiAg
ICAgICAgICAgICAgICAgICAgIGNhY2hlZEhhbmRsZXJSZXN1bHQgPSBoYW5kbGVyOwpAQCAtMTU2
LDEyICsxNTUsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGNhY2hlZEhhbmRsZXJS
ZXN1bHQ7CiAgICAgICAgIH07CiAKLSAgICAgICAgT3BlcmFuZHM8VmFyaWFibGVBY2Nlc3NEYXRh
Kj4gY3VycmVudEJsb2NrQWNjZXNzRGF0YShibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9m
QXJndW1lbnRzKCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSwgbnVs
bHB0cik7CisgICAgICAgIE9wZXJhbmRzPFZhcmlhYmxlQWNjZXNzRGF0YSo+IGN1cnJlbnRCbG9j
a0FjY2Vzc0RhdGEoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLCBudWxscHRy
KTsKIAogICAgICAgICBhdXRvIGZsdXNoRXZlcnl0aGluZyA9IFsmXSAoTm9kZU9yaWdpbiBvcmln
aW4sIHVuc2lnbmVkIGluZGV4KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjdXJyZW50
RXhjZXB0aW9uSGFuZGxlcik7Ci0gICAgICAgICAgICBhdXRvIGZsdXNoID0gWyZdIChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkgewotICAgICAgICAgICAgICAgIGlmICgob3BlcmFuZC5pc0xvY2Fs
KCkgJiYgbGl2ZUF0Q2F0Y2hIZWFkW29wZXJhbmQudG9Mb2NhbCgpXSkgfHwgb3BlcmFuZC5pc0Fy
Z3VtZW50KCkpIHsKKyAgICAgICAgICAgIGF1dG8gZmx1c2ggPSBbJl0gKE9wZXJhbmQgb3BlcmFu
ZCkgeworICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSB8fCBsaXZlQXRD
YXRjaEhlYWQub3BlcmFuZChvcGVyYW5kKSkgewogCiAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChpc1ZhbGlkRmx1c2hMb2NhdGlvbihibG9jaywgaW5kZXgsIG9wZXJhbmQpKTsKIApAQCAtMTc4
LDYgKzE3Nyw4IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsb2NhbCA9
IDA7IGxvY2FsIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpOyBsb2Nh
bCsrKQogICAgICAgICAgICAgICAgIGZsdXNoKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGxvY2Fs
KSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcCA9IDA7IHRtcCA8IGJsb2NrLT52YXJp
YWJsZXNBdFRhaWwubnVtYmVyT2ZUbXBzKCk7ICsrdG1wKQorICAgICAgICAgICAgICAgIGZsdXNo
KE9wZXJhbmQ6OnRtcCh0bXApKTsKICAgICAgICAgICAgIGZsdXNoKFZpcnR1YWxSZWdpc3RlcihD
YWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpKSk7CiAgICAgICAgIH07CiAKQEAgLTE5Miw5
ICsxOTMsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChjdXJy
ZW50RXhjZXB0aW9uSGFuZGxlciAmJiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBub2RlLT5v
cCgpID09IFNldEFyZ3VtZW50RGVmaW5pdGVseSB8fCBub2RlLT5vcCgpID09IFNldEFyZ3VtZW50
TWF5YmUpKSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBub2Rl
LT5sb2NhbCgpOwotICAgICAgICAgICAgICAgIGlmICgob3BlcmFuZC5pc0xvY2FsKCkgJiYgbGl2
ZUF0Q2F0Y2hIZWFkW29wZXJhbmQudG9Mb2NhbCgpXSkgfHwgb3BlcmFuZC5pc0FyZ3VtZW50KCkp
IHsKLQorICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5vZGUtPm9wZXJhbmQoKTsK
KyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkgfHwgbGl2ZUF0Q2F0Y2hI
ZWFkLm9wZXJhbmQob3BlcmFuZCkpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlzVmFs
aWRGbHVzaExvY2F0aW9uKGJsb2NrLCBub2RlSW5kZXgsIG9wZXJhbmQpKTsKIAogICAgICAgICAg
ICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IGN1cnJl
bnRCbG9ja0FjY2Vzc0RhdGEub3BlcmFuZChvcGVyYW5kKTsKQEAgLTIwNyw3ICsyMDcsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChub2RlLT5hY2Nlc3Nlc1N0
YWNrKG1fZ3JhcGgpKQotICAgICAgICAgICAgICAgIGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEub3Bl
cmFuZChub2RlLT5sb2NhbCgpKSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAg
ICAgICAgICAgIGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEub3BlcmFuZChub2RlLT5vcGVyYW5kKCkp
ID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
Y3VycmVudEV4Y2VwdGlvbkhhbmRsZXIpIHsKQEAgLTIxNiw3ICsyMTYsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNj
ZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShPcGVyYW5kIG9wZXJhbmQpCiAgICAgewogICAgICAgICBB
U1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcAppbmRleCA3M2Ez
ZDc1Yjc2MGI1MmI5Njc2MzcxMzNkNmEwZmVmYjAwZWJlZDg3Li5mZmY5NmJmY2Y2MjllYjRkMDUy
ZTdiMTQyN2IyYjY3YjA1NGMxYTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAKQEAgLTg1LDcgKzg1LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgbV9zdGF0ZS5maWxsKEVwb2NoKCkpOwogICAgICAgICBtX2dyYXBoLmZvckFs
bExpdmVJbkJ5dGVjb2RlKAogICAgICAgICAgICAgYmxvY2stPnRlcm1pbmFsKCktPm9yaWdpbi5m
b3JFeGl0LAotICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAg
ICAgICBbJl0gKE9wZXJhbmQgcmVnKSB7CiAgICAgICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5k
KHJlZykgPSBjdXJyZW50RXBvY2g7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgCkBAIC05OSw3
ICs5OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5v
ZGVJbmRleCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IE1v
dkhpbnQpIHsKLSAgICAgICAgICAgICAgICBFcG9jaCBsb2NhbEVwb2NoID0gbV9zdGF0ZS5vcGVy
YW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgRXBvY2ggbG9jYWxF
cG9jaCA9IG1fc3RhdGUub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSk7CiAgICAgICAg
ICAgICAgICAgaWYgKERGR01vdkhpbnRSZW1vdmFsUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEF0ICIsIG5vZGUsICI6IGN1cnJlbnQgPSAi
LCBjdXJyZW50RXBvY2gsICIsIGxvY2FsID0gIiwgbG9jYWxFcG9jaCwgIlxuIik7CiAgICAgICAg
ICAgICAgICAgaWYgKCFsb2NhbEVwb2NoIHx8IGxvY2FsRXBvY2ggPT0gY3VycmVudEVwb2NoKSB7
CkBAIC0xMDcsNyArMTA3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCkgPSBFZGdlKCk7CiAgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fc3RhdGUub3BlcmFuZChub2Rl
LT51bmxpbmtlZExvY2FsKCkpID0gRXBvY2goKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRlLm9w
ZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gRXBvY2goKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1heUV4aXQobV9ncmFwaCwgbm9kZSkgIT0g
RG9lc05vdEV4aXQpCkBAIC0xMTYsMTUgKzExNiwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
aWYgKG5vZGVJbmRleCkgewogICAgICAgICAgICAgICAgIGZvckFsbEtpbGxlZE9wZXJhbmRzKAog
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBibG9jay0+YXQobm9kZUluZGV4IC0gMSksIG5v
ZGUsCi0gICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgeworICAg
ICAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBhIGJpdCBzbG9wcHkgLSBpdCBtaWdodCBjbGFp
bSB0byBraWxsIGEgbG9jYWwgZXZlbiBpZgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXQn
cyBzdGlsbCBsaXZlIGFmdGVyLiBXZSBuZWVkIHRvIHByb3RlY3QgYWdhaW5zdCB0aGF0LgotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbV9zdGF0ZS5vcGVyYW5kKHJlZykpCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoISFtX3N0YXRlLm9wZXJhbmQob3BlcmFuZCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHTW92SGludFJlbW92YWxQaGFzZUludGVybmFs
Ojp2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBLaWxs
ZWQgb3BlcmFuZCBhdCAiLCBub2RlLCAiOiAiLCByZWcsICJcbiIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKHJlZykgPSBjdXJyZW50RXBvY2g7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxlZCBvcGVyYW5kIGF0ICIsIG5vZGUs
ICI6ICIsIG9wZXJhbmQsICJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5v
cGVyYW5kKG9wZXJhbmQpID0gY3VycmVudEVwb2NoOwogICAgICAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaApp
bmRleCA0YmZkM2U1YTUyMTAwNTExYTllNzIzMDgzNDViZGI5YzBhMDZmYjc2Li41MTdhZjEwMDNh
ZmNlNmQzNWY3MTQ1ZGJiNjk1MWYxOGNjMjIzYjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaApAQCAtMjUxLDEzICsyNTEsMTMgQEAgc3RydWN0IFN0YWNrQWNjZXNzRGF0YSB7CiAg
ICAgewogICAgIH0KICAgICAKLSAgICBTdGFja0FjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIGxv
Y2FsLCBGbHVzaEZvcm1hdCBmb3JtYXQpCi0gICAgICAgIDogbG9jYWwobG9jYWwpCisgICAgU3Rh
Y2tBY2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFuZCwgRmx1c2hGb3JtYXQgZm9ybWF0KQorICAgICAg
ICA6IG9wZXJhbmQob3BlcmFuZCkKICAgICAgICAgLCBmb3JtYXQoZm9ybWF0KQogICAgIHsKICAg
ICB9CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsOworICAgIE9wZXJhbmQgb3BlcmFu
ZDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZUxvY2FsOwogICAgIEZsdXNoRm9ybWF0IGZv
cm1hdDsKICAgICAKQEAgLTkxNSw2ICs5MTUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHN3aXRjaCAo
b3AoKSkgewogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICAgICAgY2FzZSBH
ZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3Ro
OgogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdz
OgogICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgpAQCAtOTM2LDkgKzkzNywxMSBAQCBwdWJsaWM6
CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZh
bDoKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKKyAgICAgICAg
Y2FzZSBWYXJhcmdzTGVuZ3RoOgorICAgICAgICAgICAgcmV0dXJuIGNoaWxkMSgpOwogICAgICAg
ICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgotICAgICAg
ICAgICAgcmV0dXJuIGNoaWxkMSgpOworICAgICAgICAgICAgcmV0dXJuIGNoaWxkMigpOwogICAg
ICAgICBjYXNlIENhbGxWYXJhcmdzOgogICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoK
ICAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgpAQCAtOTg2LDkgKzk4OSw5IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFZhcmlhYmxlQWNjZXNzRGF0YSo+KCktPmZp
bmQoKTsKICAgICB9CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsKCkKKyAgICBPcGVy
YW5kIG9wZXJhbmQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHZhcmlhYmxlQWNjZXNzRGF0YSgp
LT5sb2NhbCgpOworICAgICAgICByZXR1cm4gdmFyaWFibGVBY2Nlc3NEYXRhKCktPm9wZXJhbmQo
KTsKICAgICB9CiAgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVMb2NhbCgpCkBAIC05
OTYsNyArOTk5LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdmFyaWFibGVBY2Nlc3NEYXRh
KCktPm1hY2hpbmVMb2NhbCgpOwogICAgIH0KICAgICAKLSAgICBib29sIGhhc1VubGlua2VkTG9j
YWwoKQorICAgIGJvb2wgaGFzVW5saW5rZWRPcGVyYW5kKCkKICAgICB7CiAgICAgICAgIHN3aXRj
aCAob3AoKSkgewogICAgICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgpAQCAtMTAwOSwx
MCArMTAxMiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgVmlydHVh
bFJlZ2lzdGVyIHVubGlua2VkTG9jYWwoKQorICAgIE9wZXJhbmQgdW5saW5rZWRPcGVyYW5kKCkK
ICAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNVbmxpbmtlZExvY2FsKCkpOwotICAgICAgICByZXR1
cm4gVmlydHVhbFJlZ2lzdGVyKG1fb3BJbmZvLmFzPGludDMyX3Q+KCkpOworICAgICAgICBBU1NF
UlQoaGFzVW5saW5rZWRPcGVyYW5kKCkpOworICAgICAgICByZXR1cm4gT3BlcmFuZDo6ZnJvbUJp
dHMobV9vcEluZm8uYXM8dWludDY0X3Q+KCkpOwogICAgIH0KICAgICAKICAgICBib29sIGhhc1N0
YWNrQWNjZXNzRGF0YSgpCkBAIC0xMzYzLDcgKzEzNjYsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Ym9vbCBoYXNMb2FkVmFyYXJnc0RhdGEoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkgPT0g
TG9hZFZhcmFyZ3MgfHwgb3AoKSA9PSBGb3J3YXJkVmFyYXJnczsKKyAgICAgICAgcmV0dXJuIG9w
KCkgPT0gTG9hZFZhcmFyZ3MgfHwgb3AoKSA9PSBGb3J3YXJkVmFyYXJncyB8fCBvcCgpID09IFZh
cmFyZ3NMZW5ndGg7CiAgICAgfQogICAgIAogICAgIExvYWRWYXJhcmdzRGF0YSogbG9hZFZhcmFy
Z3NEYXRhKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCBjMDQ3
YzZlNzE4MjU5YWE5NWY1ZDEzYWFhODcwZjgxNzE0NjFjY2ViLi43YzZkMWIyYWZjNWFmZjQ3NDc2
ODEwM2E1ZTEzZDNhMjIyNmNhNmZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVUeXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCkBAIC03NCw2ICs3NCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
ICAgICBtYWNybyhHZXRMb2NhbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAog
ICAgIG1hY3JvKFNldExvY2FsLCAwKSBcCiAgICAgXAorICAgIC8qIFRoZXNlIGFyZSB1c2VkIGlu
IFNTQSBmb3JtIHRvIHJlcHJlc2VudCB0byB0cmFjayAqL1wKICAgICBtYWNybyhQdXRTdGFjaywg
Tm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEtpbGxTdGFjaywgTm9kZU11c3RHZW5lcmF0
ZSkgXAogICAgIG1hY3JvKEdldFN0YWNrLCBOb2RlUmVzdWx0SlMpIFwKQEAgLTIwMiw2ICsyMDMs
NyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oR2V0QnlWYWxX
aXRoVGhpcywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdl
dE15QXJndW1lbnRCeVZhbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAg
IG1hY3JvKEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzLCBOb2RlUmVzdWx0SlMgfCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oVmFyYXJnc0xlbmd0aCwgTm9kZU11c3RHZW5lcmF0
ZSB8IE5vZGVSZXN1bHRJbnQzMikgXAogICAgIG1hY3JvKExvYWRWYXJhcmdzLCBOb2RlTXVzdEdl
bmVyYXRlKSBcCiAgICAgbWFjcm8oRm9yd2FyZFZhcmFyZ3MsIE5vZGVNdXN0R2VuZXJhdGUpIFwK
ICAgICBtYWNybyhQdXRCeVZhbERpcmVjdCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJB
cmdzKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAppbmRleCA3OWJjNzk2ODMxMTMwYzAzN2Q1
NDcwYzBlNzlkNWIwZDk5NTYyNjNmLi5mNTlmNTg5NzIwNDM0ZGY0Y2Q2ZWI4YWZmNDVhMWE1Mzlk
OTMyNmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKQEAgLTM1LDExICszNSw5IEBACiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
Ci1uYW1lc3BhY2UgREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFsIHsKLXN0
YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci19CiAKIGNsYXNzIE9TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBwdWJsaWM6CiAgICAgT1NSQXZhaWxhYmlsaXR5QW5h
bHlzaXNQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJPU1IgYXZh
aWxhYmlsaXR5IGFuYWx5c2lzIikKQEAgLTc1LDggKzczLDggQEAgcHVibGljOgogICAgICAgICAg
ICAgZGF0YUxvZygiTGl2ZTogIik7CiAgICAgICAgICAgICBtX2dyYXBoLmZvckFsbExpdmVJbkJ5
dGVjb2RlKAogICAgICAgICAgICAgICAgIGJsb2NrLT5hdCgwKS0+b3JpZ2luLmZvckV4aXQsCi0g
ICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2cocmVnLCAiICIpOworICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCBv
cGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2cob3BlcmFuZCwgIiAiKTsKICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGRhdGFMb2dMbigiIik7CiAgICAgICAgIH07
CkBAIC05MSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQog
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBpZiAoREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFsOjp2ZXJi
b3NlKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZ0xuKCJCZWZvcmUgY2hhbmdpbmcgQmxvY2sgIyIsIGJsb2NrLT5pbmRleCk7CiAg
ICAgICAgICAgICAgICAgICAgIGR1bXBBdmFpbGFiaWxpdHkoYmxvY2spOwogICAgICAgICAgICAg
ICAgIH0KQEAgLTEwNiw3ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgYmxvY2st
PnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsID0gY2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eTsKICAg
ICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKIAotICAgICAgICAgICAgICAgIGlmIChERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkFm
dGVyIGNoYW5naW5nIEJsb2NrICMiLCBibG9jay0+aW5kZXgpOwogICAgICAgICAgICAgICAgICAg
ICBkdW1wQXZhaWxhYmlsaXR5KGJsb2NrKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMjAsNyAr
MTE4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNz
b3IgPSBibG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsKICAgICAgICAgICAgICAgICAg
ICAgc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5wcnVuZUJ5TGl2ZW5lc3MoCiAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBzdWNjZXNzb3ItPmF0KDApLT5vcmlnaW4u
Zm9yRXhpdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdPU1JBdmFpbGFiaWxpdHlBbmFs
eXNpc1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZl
cmJvc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiQWZ0ZXIgcHJ1bmlu
ZyBCbG9jayAjIiwgc3VjY2Vzc29yLT5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBk
dW1wQXZhaWxhYmlsaXR5KHN1Y2Nlc3Nvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBkdW1w
Qnl0ZWNvZGVMaXZlbmVzc0F0SGVhZChzdWNjZXNzb3IpOwpAQCAtMjA4LDI4ICsyMDYsMjggQEAg
dm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKE5vZGUqIG5v
ZGUpCiAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBQdXRTdGFjazogewogICAg
ICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAg
ICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5sb2NhbCkuc2V0Rmx1
c2goZGF0YS0+Zmx1c2hlZEF0KCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5v
cGVyYW5kKGRhdGEtPm9wZXJhbmQpLnNldEZsdXNoKGRhdGEtPmZsdXNoZWRBdCgpKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEtpbGxTdGFjazogewotICAgICAg
ICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSku
c2V0Rmx1c2goRmx1c2hlZEF0KENvbmZsaWN0aW5nRmx1c2gpKTsKKyAgICAgICAgbV9hdmFpbGFi
aWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkuc2V0Rmx1c2go
Rmx1c2hlZEF0KENvbmZsaWN0aW5nRmx1c2gpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAg
ICAgY2FzZSBHZXRTdGFjazogewogICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2Rl
LT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3Bl
cmFuZChkYXRhLT5sb2NhbCkgPSBBdmFpbGFiaWxpdHkobm9kZSwgZGF0YS0+Zmx1c2hlZEF0KCkp
OworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPm9wZXJhbmQp
ID0gQXZhaWxhYmlsaXR5KG5vZGUsIGRhdGEtPmZsdXNoZWRBdCgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCiAgICAgY2FzZSBNb3ZIaW50OiB7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1f
bG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKS5zZXROb2RlKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9k
ZS0+dW5saW5rZWRPcGVyYW5kKCkpLnNldE5vZGUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgIG1f
YXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKS5zZXRO
b2RlVW5hdmFpbGFibGUoKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFu
ZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkuc2V0Tm9kZVVuYXZhaWxhYmxlKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIApAQCAtMjM3LDIwICsyMzUsMjMgQEAgdm9pZCBMb2NhbE9TUkF2YWls
YWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgICAgIHVuc2ln
bmVkIGVudHJ5cG9pbnRJbmRleCA9IG5vZGUtPmVudHJ5cG9pbnRJbmRleCgpOwogICAgICAgICBj
b25zdCBWZWN0b3I8Rmx1c2hGb3JtYXQ+JiBhcmd1bWVudEZvcm1hdHMgPSBtX2dyYXBoLm1fYXJn
dW1lbnRGb3JtYXRzW2VudHJ5cG9pbnRJbmRleF07CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJn
dW1lbnQgPSBhcmd1bWVudEZvcm1hdHMuc2l6ZSgpOyBhcmd1bWVudC0tOyApIHsKLSAgICAgICAg
ICAgIEZsdXNoZWRBdCBmbHVzaGVkQXQgPSBGbHVzaGVkQXQoYXJndW1lbnRGb3JtYXRzW2FyZ3Vt
ZW50XSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICAgICAgICAg
IEZsdXNoZWRBdCBmbHVzaGVkQXQgPSBGbHVzaGVkQXQoYXJndW1lbnRGb3JtYXRzW2FyZ3VtZW50
XSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50KSk7CiAg
ICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5hcmd1bWVudChhcmd1bWVudCkgPSBB
dmFpbGFiaWxpdHkoZmx1c2hlZEF0KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9
Ci0gICAgICAgIAorCisgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKwogICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczog
ewogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEo
KTsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5jb3VudCkg
PQotICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSW50MzIsIGRhdGEt
Pm1hY2hpbmVDb3VudCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5k
KGRhdGEtPmNvdW50KSA9IEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEludDMyLCBkYXRh
LT5tYWNoaW5lQ291bnQpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7
IGktLTspIHsKLSAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoVmly
dHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkpID0KLSAgICAgICAgICAgICAg
ICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIo
ZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpICsgaSkpKTsKKyAgICAgICAgICAgIG1fYXZhaWxh
YmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+c3RhcnQgKyBpKSA9CisgICAgICAgICAgICAg
ICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgZGF0YS0+bWFjaGluZVN0
YXJ0ICsgaSkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTI3MiwyMCAr
MjczLDIwIEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9k
ZShOb2RlKiBub2RlKQogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkg
ewogICAgICAgICAgICAgLy8gUmVjb3JkIGhvdyB0byByZWFkIGVhY2ggYXJndW1lbnQgYW5kIHRo
ZSBhcmd1bWVudCBjb3VudC4KICAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBhcmd1bWVudENvdW50
ID0KLSAgICAgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyk7CisgICAgICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3Bl
cmFuZChWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQoUHJvbW90ZWRIZWFwTG9jYXRpb24o
QXJndW1lbnRDb3VudFBMb2MsIG5vZGUpLCBhcmd1bWVudENvdW50KTsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkgewogICAg
ICAgICAgICAgQXZhaWxhYmlsaXR5IGNhbGxlZSA9IG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9w
ZXJhbmQoCi0gICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKICAg
ICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQoUHJvbW90ZWRIZWFwTG9jYXRpb24o
QXJndW1lbnRzQ2FsbGVlUExvYywgbm9kZSksIGNhbGxlZSk7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOyBpIDwg
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7ICsraSkgewor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgaSA8IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzIC0gMSk7ICsraSkgewogICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGFyZ3VtZW50ID0g
bV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZCgKLSAgICAgICAgICAgICAgICBpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChpKSk7Cisg
ICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkpKSk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQoUHJvbW90ZWRIZWFwTG9jYXRpb24oQXJn
dW1lbnRQTG9jLCBub2RlLCBpKSwgYXJndW1lbnQpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCmluZGV4IDQ0OTczMDgzOWM5NDQ1MDcyNTcxYTVi
MGM3Yzk0Yjg0M2U4OTBkYzcuLjc3N2VhNmY0MDk2YmU3NGVlMjE2MDg5YzZiMzY4ZmYwZTNkNmZm
M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCkBAIC03Niw3
ICs3Niw3IEBAIHZvaWQgT1NSRW50cnlEYXRhOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBv
dXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogICAgIENvbW1hUHJpbnRlciBjb21tYTsK
ICAgICBmb3IgKHNpemVfdCBhcmd1bWVudEluZGV4ID0gbV9leHBlY3RlZFZhbHVlcy5udW1iZXJP
ZkFyZ3VtZW50cygpOyBhcmd1bWVudEluZGV4LS07KSB7CiAgICAgICAgIG91dC5wcmludChjb21t
YSwgImFyZyIsIGFyZ3VtZW50SW5kZXgsICI6Iik7Ci0gICAgICAgIHByaW50T3BlcmFuZCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudEluZGV4KSk7CisgICAgICAgIHByaW50T3Bl
cmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoYXJndW1lbnRJbmRl
eCkpOwogICAgIH0KICAgICBmb3IgKHNpemVfdCBsb2NhbEluZGV4ID0gMDsgbG9jYWxJbmRleCA8
IG1fZXhwZWN0ZWRWYWx1ZXMubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbEluZGV4KSB7CiAgICAg
ICAgIG91dC5wcmludChjb21tYSwgImxvYyIsIGxvY2FsSW5kZXgsICI6Iik7CkBAIC0zMjIsNyAr
MzIyLDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY28KICAgICAKICAgICAvLyA3KSBGaXggdGhl
IGNhbGwgZnJhbWUgdG8gaGF2ZSB0aGUgcmlnaHQgY29kZSBibG9jay4KICAgICAKLSAgICAqYml0
d2lzZV9jYXN0PENvZGVCbG9jayoqPihwaXZvdCAtIDEgLSBDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spID0gY29kZUJsb2NrOworICAgICpiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKio+KHBpdm90IC0g
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayArIDEpKSA9IGNvZGVCbG9jazsKICAgICAKICAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQogICAgICAgICBkYXRhTG9nRigiICAgIE9TUiByZXR1
cm5pbmcgZGF0YSBidWZmZXIgJXAuXG4iLCBzY3JhdGNoKTsKQEAgLTM1MSw3ICszNTEsNyBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFyZUNhdGNo
T1NSRW50cnkoVk0mIHZtLCBDYWxsRgogCiAgICAgLy8gV2UncmUgb25seSBhbGxvd2VkIHRvIE9T
UiBlbnRlciBpZiB3ZSd2ZSBwcm92ZW4gd2UgaGF2ZSBjb21wYXRpYmxlIGFyZ3VtZW50IHR5cGVz
LgogICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGNhdGNoRW50cnlw
b2ludC0+YXJndW1lbnRGb3JtYXRzLnNpemUoKTsgKythcmd1bWVudCkgewotICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KGFyZ3VtZW50KSkuanNWYWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRSKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhh
cmd1bWVudCkpLmpzVmFsdWUoKTsKICAgICAgICAgc3dpdGNoIChjYXRjaEVudHJ5cG9pbnQtPmFy
Z3VtZW50Rm9ybWF0c1thcmd1bWVudF0pIHsKICAgICAgICAgY2FzZSBERkc6OkZsdXNoZWRJbnQz
MjoKICAgICAgICAgICAgIGlmICghdmFsdWUuaXNJbnQzMigpKQpAQCAtMzgyLDEwICszODIsMTAg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IHByZXBhcmVD
YXRjaE9TUkVudHJ5KFZNJiB2bSwgQ2FsbEYKIAogICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBiYXNl
bGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4
KCkpOwogICAgIEFTU0VSVChpbnN0cnVjdGlvbi0+aXM8T3BDYXRjaD4oKSk7Ci0gICAgVmFsdWVQ
cm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+
KCkubWV0YWRhdGEoYmFzZWxpbmVDb2RlQmxvY2spLm1fYnVmZmVyOworICAgIFZhbHVlUHJvZmls
ZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0
Y2g+KCkubWV0YWRhdGEoYmFzZWxpbmVDb2RlQmxvY2spLm1fYnVmZmVyOwogICAgIEpTVmFsdWUq
IGRhdGFCdWZmZXIgPSByZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihkZmdDb21tb24tPmNhdGNo
T1NSRW50cnlCdWZmZXItPmRhdGFCdWZmZXIoKSk7CiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwot
ICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUp
IHsKKyAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXImIHByb2ZpbGUpIHsKICAgICAgICAgaWYgKCFWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29w
ZXJhbmQpLmlzTG9jYWwoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZGF0YUJ1ZmZl
cltpbmRleF0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIocHJvZmlsZS5tX29wZXJhbmQpLmpzVmFs
dWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlw
b2ludENyZWF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKaW5kZXggZGM3NmJjYmFlZDQxZWVlMDYzZGZkYmVh
ODQ1MDY2NTUzZDBjYjRkNi4uNjA5Njg2NjNiNjRjMmI2ODU0ZTQ2MTYxZjk0OTk0NjU3ZTFhZWZk
NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50
Q3JlYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKQEAgLTEwMiwxMCArMTAyLDEwIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBwcmV2aW91c0hlYWQt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgbG9jYWxzW2xvY2FsXSA9IG5ld1Jv
b3QtPmFwcGVuZE5vZGUoCiAgICAgICAgICAgICAgICAgbV9ncmFwaCwgdmFyaWFibGUtPnByZWRp
Y3Rpb24oKSwgRXh0cmFjdE9TUkVudHJ5TG9jYWwsIG9yaWdpbiwKLSAgICAgICAgICAgICAgICBP
cEluZm8odmFyaWFibGUtPmxvY2FsKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICBPcElu
Zm8odmFyaWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSkpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBuZXdSb290LT5hcHBlbmROb2RlKAotICAgICAgICAgICAgICAgIG1fZ3Jh
cGgsIFNwZWNOb25lLCBNb3ZIaW50LCBvcmlnaW4sIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5v
ZmZzZXQoKSksCisgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIE1vdkhpbnQsIG9y
aWdpbiwgT3BJbmZvKHZhcmlhYmxlLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkpLAogICAg
ICAgICAgICAgICAgIEVkZ2UobG9jYWxzW2xvY2FsXSkpOwogICAgICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCmluZGV4IDFiOGUyNzhlNGQ1ZWUxMmRhMDk2
YzBlOTAxYThjZjQ5M2RmYjJmYzYuLjIzOWRmNTJhODI5MmEyYjM1Y2U2Zjc3MjU2OGZlN2NjOWM2
ZDNhODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcApAQCAtMzAs
NiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiQnl0
ZWNvZGVVc2VEZWYuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgog
I2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5j
bHVkZSAiREZHTWF5RXhpdC5oIgpAQCAtNDcsODk1ICs0OCw2IEBACiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAotLy8gUHJvYmUgYmFzZWQgT1NSIEV4aXQuCi0KLXVzaW5nIENQ
VVN0YXRlID0gUHJvYmU6OkNQVVN0YXRlOwotdXNpbmcgQ29udGV4dCA9IFByb2JlOjpDb250ZXh0
OwotdXNpbmcgRnJhbWUgPSBQcm9iZTo6RnJhbWU7Ci0KLXN0YXRpYyB2b2lkIHJlaWZ5SW5saW5l
ZENhbGxGcmFtZXMoUHJvYmU6OkNvbnRleHQmLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2Nr
LCBjb25zdCBPU1JFeGl0QmFzZSYpOwotc3RhdGljIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0
KFByb2JlOjpDb250ZXh0JiwgVk0mLCBDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29k
ZUJsb2NrLCBPU1JFeGl0Jik7Ci1zdGF0aWMgdm9pZCBwcmludE9TUkV4aXQoQ29udGV4dCYsIHVp
bnQzMl90IG9zckV4aXRJbmRleCwgY29uc3QgT1NSRXhpdCYpOwotCi1zdGF0aWMgSlNWYWx1ZSBq
c1ZhbHVlRm9yKENQVVN0YXRlJiBjcHUsIEpTVmFsdWVTb3VyY2Ugc291cmNlKQotewotICAgIGlm
IChzb3VyY2UuaXNBZGRyZXNzKCkpIHsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQ7Ci0gICAgICAg
IHN0ZDo6bWVtY3B5KCZyZXN1bHQsIGNwdS5ncHI8dWludDhfdCo+KHNvdXJjZS5iYXNlKCkpICsg
c291cmNlLm9mZnNldCgpLCBzaXplb2YoSlNWYWx1ZSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIH0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUo
Y3B1LmdwcjxFbmNvZGVkSlNWYWx1ZT4oc291cmNlLmdwcigpKSk7Ci0jZWxzZQotICAgIGlmIChz
b3VyY2UuaGFzS25vd25UYWcoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoc291cmNlLnRhZygp
LCBjcHUuZ3ByPGludDMyX3Q+KHNvdXJjZS5wYXlsb2FkR1BSKCkpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZShjcHUuZ3ByPGludDMyX3Q+KHNvdXJjZS50YWdHUFIoKSksIGNwdS5ncHI8aW50MzJfdD4o
c291cmNlLnBheWxvYWRHUFIoKSkpOwotI2VuZGlmCi19Ci0KLSNpZiBOVU1CRVJfT0ZfQ0FMTEVF
X1NBVkVTX1JFR0lTVEVSUyA+IDAKLQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjplbWl0
UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCkuCi1zdGF0aWMgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNG
b3IoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAgQVNTRVJU
KGNvZGVCbG9jayk7Ci0KLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2
ZXMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlclNldCBk
b250UmVzdG9yZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lz
dGVycygpLCBSZWdpc3RlclNldDo6YWxsRlBScygpKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNv
dW50ID0gY2FsbGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIFVDUFVSZWdpc3RlciogcGh5c2ljYWxT
dGFja0ZyYW1lID0gY29udGV4dC5mcDxVQ1BVUmVnaXN0ZXIqPigpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9m
ZnNldCBlbnRyeSA9IGNhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRSZXN0b3Jl
UmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgLy8gVGhlIGNhbGxlZSBzYXZlZCB2YWx1ZXMgY29tZSBmcm9tIHRoZSBvcmlnaW5hbCBzdGFj
aywgbm90IHRoZSByZWNvdmVyZWQgc3RhY2suCi0gICAgICAgIC8vIEhlbmNlLCB3ZSByZWFkIHRo
ZSB2YWx1ZXMgZGlyZWN0bHkgZnJvbSB0aGUgcGh5c2ljYWwgc3RhY2sgbWVtb3J5IGluc3RlYWQg
b2YKLSAgICAgICAgLy8gZ29pbmcgdGhyb3VnaCBjb250ZXh0LnN0YWNrKCkuCi0gICAgICAgIEFT
U0VSVCghKGVudHJ5Lm9mZnNldCgpICUgc2l6ZW9mKFVDUFVSZWdpc3RlcikpKTsKLSAgICAgICAg
Y29udGV4dC5ncHIoZW50cnkucmVnKCkuZ3ByKCkpID0gcGh5c2ljYWxTdGFja0ZyYW1lW2VudHJ5
Lm9mZnNldCgpIC8gc2l6ZW9mKFVDUFVSZWdpc3RlcildOwotICAgIH0KLX0KLQotLy8gQmFzZWQg
b24gQXNzZW1ibHlIZWxwZXJzOjplbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKCkuCi1zdGF0aWMgdm9p
ZCBzYXZlQ2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCi17Ci0gICAgYXV0byYgc3RhY2sgPSBjb250ZXh0LnN0YWNrKCk7Ci0gICAgQVNTRVJUKGNv
ZGVCbG9jayk7Ci0KLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZXMg
PSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlclNldCBkb250
U2F2ZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygp
LCBSZWdpc3RlclNldDo6YWxsRlBScygpKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0g
Y2FsbGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdp
c3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGNhbGxl
ZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRTYXZlUmVnaXN0ZXJzLmdldChlbnRyeS5y
ZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgc3RhY2suc2V0KGNvbnRleHQu
ZnAoKSwgZW50cnkub2Zmc2V0KCksIGNvbnRleHQuZ3ByPFVDUFVSZWdpc3Rlcj4oZW50cnkucmVn
KCkuZ3ByKCkpKTsKLSAgICB9Ci19Ci0KLS8vIEJhc2VkIG9uIEFzc2VtYmx5SGVscGVyczo6cmVz
dG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCkuCi1zdGF0
aWMgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIoQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0qPigp
OwotCi0gICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJT
ZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwotICAgIFJlZ2lzdGVyU2V0IGRvbnRS
ZXN0b3JlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7Ci0gICAgdW5z
aWduZWQgcmVnaXN0ZXJDb3VudCA9IGFsbENhbGxlZVNhdmVzLT5zaXplKCk7Ci0KLSAgICBWTUVu
dHJ5UmVjb3JkKiBlbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQodm0udG9wRW50cnlGcmFtZSk7
Ci0gICAgVUNQVVJlZ2lzdGVyKiBjYWxsZWVTYXZlQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxV
Q1BVUmVnaXN0ZXIqPihlbnRyeVJlY29yZC0+Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlcik7Ci0K
LSAgICAvLyBSZXN0b3JlIGFsbCBjYWxsZWUgc2F2ZXMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVu
dHJ5ID0gYWxsQ2FsbGVlU2F2ZXMtPmF0KGkpOwotICAgICAgICBpZiAoZG9udFJlc3RvcmVSZWdp
c3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBz
aXplX3QgdWludHB0ck9mZnNldCA9IGVudHJ5Lm9mZnNldCgpIC8gc2l6ZW9mKFVDUFVSZWdpc3Rl
cik7Ci0gICAgICAgIGlmIChlbnRyeS5yZWcoKS5pc0dQUigpKQotICAgICAgICAgICAgY29udGV4
dC5ncHIoZW50cnkucmVnKCkuZ3ByKCkpID0gY2FsbGVlU2F2ZUJ1ZmZlclt1aW50cHRyT2Zmc2V0
XTsKLSAgICAgICAgZWxzZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGNvbnRl
eHQuZnByKGVudHJ5LnJlZygpLmZwcigpKSA9IGJpdHdpc2VfY2FzdDxkb3VibGU+KGNhbGxlZVNh
dmVCdWZmZXJbdWludHB0ck9mZnNldF0pOwotI2Vsc2UKLSAgICAgICAgICAgIC8vIEZJWE1FOiA8
aHR0cHM6Ly93ZWJraXQub3JnL2IvMTkzMjc1PiBzdXBwb3J0IGNhbGxlZS1zYXZlZCBmbG9hdGlu
ZyBwb2ludCByZWdpc3RlcnMgb24gMzItYml0IGFyY2hpdGVjdHVyZXMKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgIH0KLX0K
LQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKCkuCi1zdGF0aWMgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb1ZN
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgVk0m
IHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLSAgICBhdXRvJiBzdGFjayA9IGNvbnRleHQuc3Rh
Y2soKTsKLQotICAgIFZNRW50cnlSZWNvcmQqIGVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29yZCh2
bS50b3BFbnRyeUZyYW1lKTsKLSAgICB2b2lkKiBjYWxsZWVTYXZlQnVmZmVyID0gZW50cnlSZWNv
cmQtPmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXI7Ci0KLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlz
dCogYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJPZmZz
ZXRzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udENvcHlSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6
c3RhY2tSZWdpc3RlcnMoKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVl
U2F2ZXMtPnNpemUoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNv
dW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGFsbENhbGxlZVNh
dmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRDb3B5UmVnaXN0ZXJzLmdldChlbnRyeS5yZWco
KSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGVudHJ5LnJlZygpLmlzR1BS
KCkpCi0gICAgICAgICAgICBzdGFjay5zZXQoY2FsbGVlU2F2ZUJ1ZmZlciwgZW50cnkub2Zmc2V0
KCksIGNvbnRleHQuZ3ByPFVDUFVSZWdpc3Rlcj4oZW50cnkucmVnKCkuZ3ByKCkpKTsKLSAgICAg
ICAgZWxzZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIHN0YWNrLnNldChjYWxs
ZWVTYXZlQnVmZmVyLCBlbnRyeS5vZmZzZXQoKSwgY29udGV4dC5mcHI8VUNQVVJlZ2lzdGVyPihl
bnRyeS5yZWcoKS5mcHIoKSkpOwotI2Vsc2UKLSAgICAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6
Ly93ZWJraXQub3JnL2IvMTkzMjc1PiBzdXBwb3J0IGNhbGxlZS1zYXZlZCBmbG9hdGluZyBwb2lu
dCByZWdpc3RlcnMgb24gMzItYml0IGFyY2hpdGVjdHVyZXMKLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8g
QmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjplbWl0U2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKCku
Ci1zdGF0aWMgdm9pZCBzYXZlT3JDb3B5Q2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYgY29udGV4dCwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFZpcnR1YWxSZWdpc3RlciBvZmZzZXRWaXJ0dWFsUmVnaXN0
ZXIsIGJvb2wgd2FzQ2FsbGVkVmlhVGFpbENhbGwpCi17Ci0gICAgRnJhbWUgZnJhbWUoY29udGV4
dC5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOwotICAgIEFTU0VSVChjb2RlQmxvY2spOwotCi0gICAg
Y29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVzID0gY29kZUJsb2NrLT5jYWxs
ZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udFNhdmVSZWdpc3RlcnMgPSBS
ZWdpc3RlclNldChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6OmFs
bEZQUnMoKSk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGNhbGxlZVNhdmVzLT5zaXpl
KCk7Ci0KLSAgICBSZWdpc3RlclNldCBiYXNlbGluZUNhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6
OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZz
ZXQgZW50cnkgPSBjYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250U2F2ZVJlZ2lz
dGVycy5nZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
dWludHB0cl90IHNhdmVkUmVnaXN0ZXJWYWx1ZTsKLQotICAgICAgICBpZiAod2FzQ2FsbGVkVmlh
VGFpbENhbGwgJiYgYmFzZWxpbmVDYWxsZWVTYXZlcy5nZXQoZW50cnkucmVnKCkpKQotICAgICAg
ICAgICAgc2F2ZWRSZWdpc3RlclZhbHVlID0gZnJhbWUuZ2V0PHVpbnRwdHJfdD4oZW50cnkub2Zm
c2V0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzYXZlZFJlZ2lzdGVyVmFsdWUgPSBj
b250ZXh0LmdwcihlbnRyeS5yZWcoKS5ncHIoKSk7Ci0KLSAgICAgICAgZnJhbWUuc2V0KG9mZnNl
dFZpcnR1YWxSZWdpc3Rlci5vZmZzZXRJbkJ5dGVzKCkgKyBlbnRyeS5vZmZzZXQoKSwgc2F2ZWRS
ZWdpc3RlclZhbHVlKTsKLSAgICB9Ci19Ci0jZWxzZSAvLyBub3QgTlVNQkVSX09GX0NBTExFRV9T
QVZFU19SRUdJU1RFUlMgPiAwCi0KLXN0YXRpYyB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0ZvcihD
b250ZXh0JiwgQ29kZUJsb2NrKikgeyB9Ci1zdGF0aWMgdm9pZCBzYXZlQ2FsbGVlU2F2ZXNGb3Io
Q29udGV4dCYsIENvZGVCbG9jayopIHsgfQotc3RhdGljIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVz
RnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQmKSB7IH0KLXN0YXRpYyB2
b2lkIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoQ29udGV4
dCYpIHsgfQotc3RhdGljIHZvaWQgc2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKENvbnRleHQmLCBD
b2RlQmxvY2sqLCBWaXJ0dWFsUmVnaXN0ZXIsIGJvb2wpIHsgfQotCi0jZW5kaWYgLy8gTlVNQkVS
X09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCi0KLXN0YXRpYyBKU0NlbGwqIGNyZWF0ZURp
cmVjdEFyZ3VtZW50c0R1cmluZ0V4aXQoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBjYWxs
ZWUsIGludDMyX3QgYXJndW1lbnRDb3VudCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8
Vk0qPigpOwotCi0gICAgQVNTRVJUKHZtLmhlYXAuaXNEZWZlcnJlZCgpKTsKLQotICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9y
SW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGgg
PSBhcmd1bWVudENvdW50IC0gMTsKLSAgICB1bnNpZ25lZCBjYXBhY2l0eSA9IHN0ZDo6bWF4KGxl
bmd0aCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpIC0g
MSkpOwotICAgIERpcmVjdEFyZ3VtZW50cyogcmVzdWx0ID0gRGlyZWN0QXJndW1lbnRzOjpjcmVh
dGUoCi0gICAgICAgIHZtLCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5kaXJlY3RBcmd1bWVu
dHNTdHJ1Y3R1cmUoKSwgbGVuZ3RoLCBjYXBhY2l0eSk7Ci0KLSAgICByZXN1bHQtPnNldENhbGxl
ZSh2bSwgY2FsbGVlKTsKLQotICAgIHZvaWQqIGZyYW1lQmFzZSA9IGNvbnRleHQuZnA8UmVnaXN0
ZXIqPigpICsgKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
OiAwKTsKLSAgICBGcmFtZSBmcmFtZShmcmFtZUJhc2UsIGNvbnRleHQuc3RhY2soKSk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQotICAgICAgICByZXN1bHQtPnNldEluZGV4
UXVpY2tseSh2bSwgaSwgZnJhbWUuYXJndW1lbnQoaSkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotc3RhdGljIEpTQ2VsbCogY3JlYXRlQ2xvbmVkQXJndW1lbnRzRHVyaW5nRXhpdChDb250
ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUsIEpTRnVuY3Rpb24qIGNhbGxlZSwgaW50MzJfdCBhcmd1bWVudENvdW50KQot
ewotICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7Ci0KLSAgICBBU1NFUlQodm0uaGVh
cC5pc0RlZmVycmVkKCkpOwotCi0gICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgY29k
ZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZy
YW1lKTsKLQotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFyZ3VtZW50Q291bnQgLSAxOwot
ICAgIENsb25lZEFyZ3VtZW50cyogcmVzdWx0ID0gQ2xvbmVkQXJndW1lbnRzOjpjcmVhdGVFbXB0
eSgKLSAgICAgICAgdm0sIGdsb2JhbE9iamVjdC0+Y2xvbmVkQXJndW1lbnRzU3RydWN0dXJlKCks
IGNhbGxlZSwgbGVuZ3RoKTsKLQotICAgIHZvaWQqIGZyYW1lQmFzZSA9IGNvbnRleHQuZnA8UmVn
aXN0ZXIqPigpICsgKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgOiAwKTsKLSAgICBGcmFtZSBmcmFtZShmcmFtZUJhc2UsIGNvbnRleHQuc3RhY2soKSk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQotICAgICAgICByZXN1bHQtPnB1dERp
cmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaSwgZnJhbWUuYXJndW1lbnQoaSkpOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGVtaXRSZXN0b3JlQXJndW1lbnRzKENvbnRleHQm
IGNvbnRleHQsIENvZGVCbG9jayogY29kZUJsb2NrLCBERkc6OkpJVENvZGUqIGRmZ0pJVENvZGUs
IGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcykKLXsKLSAgICBGcmFtZSBm
cmFtZShjb250ZXh0LmZwKCksIGNvbnRleHQuc3RhY2soKSk7Ci0KLSAgICBIYXNoTWFwPE1pbmlm
aWVkSUQsIGludD4gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50czsgLy8gTWFwcyBwaGFudG9tIGFy
Z3VtZW50cyBub2RlIElEIHRvIG9wZXJhbmQuCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBp
bmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBjb25zdCBWYWx1ZVJl
Y292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgaW50IG9wZXJhbmQg
PSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOwotCi0gICAgICAgIGlmIChyZWNvdmVy
eS50ZWNobmlxdWUoKSAhPSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQKLSAgICAg
ICAgICAgICYmIHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IENsb25lZEFyZ3VtZW50c1RoYXRXZXJl
Tm90Q3JlYXRlZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIE1pbmlmaWVkSUQg
aWQgPSByZWNvdmVyeS5ub2RlSUQoKTsKLSAgICAgICAgYXV0byBpdGVyID0gYWxyZWFkeUFsbG9j
YXRlZEFyZ3VtZW50cy5maW5kKGlkKTsKLSAgICAgICAgaWYgKGl0ZXIgIT0gYWxyZWFkeUFsbG9j
YXRlZEFyZ3VtZW50cy5lbmQoKSkgewotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVy
YW5kLCBmcmFtZS5vcGVyYW5kKGl0ZXItPnZhbHVlKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgfQotCi0gICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0K
LSAgICAgICAgICAgIGRmZ0pJVENvZGUtPm1pbmlmaWVkREZHLmF0KGlkKS0+aW5saW5lQ2FsbEZy
YW1lKCk7Ci0KLSAgICAgICAgaW50IHN0YWNrT2Zmc2V0OwotICAgICAgICBpZiAoaW5saW5lQ2Fs
bEZyYW1lKQotICAgICAgICAgICAgc3RhY2tPZmZzZXQgPSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdGFja09mZnNldCA9IDA7Ci0KLSAg
ICAgICAgSlNGdW5jdGlvbiogY2FsbGVlOwotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8
fCBpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICBjYWxsZWUgPSBq
c0Nhc3Q8SlNGdW5jdGlvbio+KGZyYW1lLm9wZXJhbmQoc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVT
bG90OjpjYWxsZWUpLmFzQ2VsbCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbGVl
ID0ganNDYXN0PEpTRnVuY3Rpb24qPihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNv
bnN0YW50KCkuYXNDZWxsKCkpOwotCi0gICAgICAgIGludDMyX3QgYXJndW1lbnRDb3VudDsKLSAg
ICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3Mo
KSkKLSAgICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBmcmFtZS5vcGVyYW5kPGludDMyX3Q+KHN0
YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFBh
eWxvYWRPZmZzZXQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcmd1bWVudENvdW50ID0g
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKLQotICAgICAgICBK
U0NlbGwqIGFyZ3VtZW50c09iamVjdDsKLSAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlx
dWUoKSkgewotICAgICAgICBjYXNlIERpcmVjdEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoK
LSAgICAgICAgICAgIGFyZ3VtZW50c09iamVjdCA9IGNyZWF0ZURpcmVjdEFyZ3VtZW50c0R1cmlu
Z0V4aXQoY29udGV4dCwgY29kZUJsb2NrLCBpbmxpbmVDYWxsRnJhbWUsIGNhbGxlZSwgYXJndW1l
bnRDb3VudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDbG9uZWRBcmd1bWVu
dHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgICAgICBhcmd1bWVudHNPYmplY3QgPSBjcmVh
dGVDbG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0KGNvbnRleHQsIGNvZGVCbG9jaywgaW5saW5lQ2Fs
bEZyYW1lLCBjYWxsZWUsIGFyZ3VtZW50Q291bnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChv
cGVyYW5kLCBKU1ZhbHVlKGFyZ3VtZW50c09iamVjdCkpOwotCi0gICAgICAgIGFscmVhZHlBbGxv
Y2F0ZWRBcmd1bWVudHMuYWRkKGlkLCBvcGVyYW5kKTsKLSAgICB9Ci19Ci0KLS8vIFRoZSBmb2xs
b3dpbmcgaXMgYSBsaXN0IG9mIGV4dHJhIGluaXRpYWxpemF0aW9ucyB0aGF0IG5lZWQgdG8gYmUg
ZG9uZSBpbiBvcmRlcgotLy8gb2YgbW9zdCBsaWtlbHkgbmVlZGVkIChsb3dlciBlbnVtIHZhbHVl
KSB0byBsZWFzdCBsaWtlbHkgbmVlZGVkIChoaWdoZXIgZW51bSB2YWx1ZSkuCi0vLyBFYWNoIGxl
dmVsIGluaXRpYWxpemF0aW9uIGluY2x1ZGVzIHRoZSBwcmV2aW91cyBsb3dlciBlbnVtIHZhbHVl
IChzZWUgdXNlIG9mIHRoZQotLy8gZXh0cmFJbml0aWFsaXphdGlvbkxldmVsIHZhbHVlIGJlbG93
KS4KLWVudW0gY2xhc3MgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsIHsKLSAgICBOb25lLAotICAg
IFNwZWN1bGF0aW9uUmVjb3ZlcnksCi0gICAgVmFsdWVQcm9maWxlVXBkYXRlLAotICAgIEFycmF5
UHJvZmlsZVVwZGF0ZSwKLSAgICBPdGhlcgotfTsKLQotdm9pZCBPU1JFeGl0OjpleGVjdXRlT1NS
RXhpdChDb250ZXh0JiBjb250ZXh0KQotewotICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+
KCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7Ci0gICAgQVNTRVJU
KCZjYWxsRnJhbWUtPmRlcHJlY2F0ZWRWTSgpID09ICZ2bSk7Ci0gICAgYXV0byYgY3B1ID0gY29u
dGV4dC5jcHU7Ci0KLSAgICBpZiAodmFsaWRhdGVERkdEb2VzR0MpIHsKLSAgICAgICAgLy8gV2Un
cmUgYWJvdXQgdG8gZXhpdCBvcHRpbWl6ZWQgY29kZS4gU28sIHRoZXJlJ3Mgbm8gbG9uZ2VyIGFu
eSBvcHRpbWl6ZWQKLSAgICAgICAgLy8gY29kZSBydW5uaW5nIHRoYXQgZXhwZWN0cyBubyBHQy4K
LSAgICAgICAgdm0uaGVhcC5zZXRFeHBlY3REb2VzR0ModHJ1ZSk7Ci0gICAgfQotCi0gICAgaWYg
KHZtLmNhbGxGcmFtZUZvckNhdGNoKSB7Ci0gICAgICAgIGNhbGxGcmFtZSA9IHZtLmNhbGxGcmFt
ZUZvckNhdGNoOwotICAgICAgICBjb250ZXh0LmZwKCkgPSBjYWxsRnJhbWU7Ci0gICAgfQotCi0g
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIEFT
U0VSVChjb2RlQmxvY2spOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRU
eXBlOjpERkdKSVQpOwotCi0gICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFibGUgdGhhdCB3ZSBk
b24ndCBHQyB3aGlsZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3VsZG4ndAotICAgIC8v
IHJlYWxseSBiZSBwcm9maXRhYmxlLgotICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5o
ZWFwKTsKLQotICAgIHVpbnQzMl90IGV4aXRJbmRleCA9IHZtLm9zckV4aXRJbmRleDsKLSAgICBE
Rkc6OkpJVENvZGUqIGRmZ0pJVENvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCk7Ci0g
ICAgT1NSRXhpdCYgZXhpdCA9IGRmZ0pJVENvZGUtPm9zckV4aXRbZXhpdEluZGV4XTsKLQotICAg
IEFTU0VSVCghdm0uY2FsbEZyYW1lRm9yQ2F0Y2ggfHwgZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vu
d2luZCk7Ci0gICAgRVhDRVBUSU9OX0FTU0VSVF9VTlVTRUQoc2NvcGUsICEhc2NvcGUuZXhjZXB0
aW9uKCkgfHwgIWV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpOwotCi0gICAgaWYgKFVOTElLRUxZ
KCFleGl0LmV4aXRTdGF0ZSkpIHsKLSAgICAgICAgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsIGV4
dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6Tm9uZTsK
LQotICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gZXhlY3V0ZSB0aGlzIGJsb2NrIG9uY2UgZm9y
IGVhY2ggT1NSRXhpdCByZWNvcmQuIFRoZSBjb21wdXRlZAotICAgICAgICAvLyByZXN1bHRzIHdp
bGwgYmUgY2FjaGVkIGluIHRoZSBPU1JFeGl0U3RhdGUgcmVjb3JkIGZvciB1c2Ugb2YgdGhlIHJl
c3Qgb2YgdGhlCi0gICAgICAgIC8vIGV4aXQgcmFtcCBjb2RlLgotCi0gICAgICAgIENvZGVCbG9j
ayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsK
LSAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGJhc2VsaW5lQ29kZUJsb2Nr
LT5qaXRUeXBlKCkpKTsKLQotICAgICAgICBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSA9
IG51bGxwdHI7Ci0gICAgICAgIGlmIChleGl0Lm1fcmVjb3ZlcnlJbmRleCAhPSBVSU5UX01BWCkg
ewotICAgICAgICAgICAgcmVjb3ZlcnkgPSAmZGZnSklUQ29kZS0+c3BlY3VsYXRpb25SZWNvdmVy
eVtleGl0Lm1fcmVjb3ZlcnlJbmRleF07Ci0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9u
TGV2ZWwgPSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6
YXRpb25MZXZlbDo6U3BlY3VsYXRpb25SZWNvdmVyeSk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoVU5MSUtFTFkoZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCkpCi0gICAgICAgICAgICBl
eHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2
ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6T3RoZXIpOwotCi0gICAgICAgIEFycmF5UHJv
ZmlsZSogYXJyYXlQcm9maWxlID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKCEhZXhpdC5tX2pzVmFs
dWVTb3VyY2UpIHsKLSAgICAgICAgICAgIGlmIChleGl0Lm1fdmFsdWVQcm9maWxlKQotICAgICAg
ICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5pdGlh
bGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpWYWx1ZVByb2ZpbGVVcGRh
dGUpOwotICAgICAgICAgICAgaWYgKGV4aXQubV9raW5kID09IEJhZENhY2hlIHx8IGV4aXQubV9r
aW5kID09IEJhZEluZGV4aW5nVHlwZSkgewotICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGU7Ci0gICAgICAgICAgICAg
ICAgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3Jp
Z2luQW5kQmFzZWxpbmVDb2RlQmxvY2soY29kZU9yaWdpbiwgYmFzZWxpbmVDb2RlQmxvY2spOwot
ICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZSA9IHByb2ZpbGVkQ29kZUJsb2NrLT5nZXRBcnJh
eVByb2ZpbGUoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOwotICAgICAgICAgICAgICAgIGlm
IChhcnJheVByb2ZpbGUpCi0gICAgICAgICAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25M
ZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXph
dGlvbkxldmVsOjpBcnJheVByb2ZpbGVVcGRhdGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgaW50MzJfdCBhY3RpdmVUaHJlc2hvbGQgPSBiYXNlbGluZUNvZGVCbG9jay0+
YWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxv
bmdXYXJtVXAoKSk7Ci0gICAgICAgIGRvdWJsZSBhZGp1c3RlZFRocmVzaG9sZCA9IGFwcGx5TWVt
b3J5VXNhZ2VIZXVyaXN0aWNzQW5kQ29udmVydFRvSW50KGFjdGl2ZVRocmVzaG9sZCwgYmFzZWxp
bmVDb2RlQmxvY2spOwotICAgICAgICBBU1NFUlQoYWRqdXN0ZWRUaHJlc2hvbGQgPiAwKTsKLSAg
ICAgICAgYWRqdXN0ZWRUaHJlc2hvbGQgPSBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBw
ZWRUaHJlc2hvbGQoY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgYWRqdXN0ZWRUaHJlc2hvbGQp
OwotCi0gICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yRXhpdCA9IGJhc2VsaW5lQ29kZUJs
b2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soZXhpdC5tX2NvZGVPcmlnaW4sIGJhc2Vs
aW5lQ29kZUJsb2NrKTsKLSAgICAgICAgYm9vbCBleGl0VG9MTEludCA9IE9wdGlvbnM6OmZvcmNl
T1NSRXhpdFRvTExJbnQoKSB8fCBjb2RlQmxvY2tGb3JFeGl0LT5qaXRUeXBlKCkgPT0gSklUVHlw
ZTo6SW50ZXJwcmV0ZXJUaHVuazsKLSAgICAgICAgdm9pZCoganVtcFRhcmdldDsKLSAgICAgICAg
aWYgKGV4aXRUb0xMSW50KSB7Ci0gICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zm
c2V0ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwotICAgICAgICAgICAgY29u
c3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICpjb2RlQmxvY2tGb3JFeGl0LT5p
bnN0cnVjdGlvbnMoKS5hdChieXRlY29kZU9mZnNldCkucHRyKCk7Ci0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6Z2V0
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgICAgICAgICAg
anVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCk7ICAgIAotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgY29uc3QgSklUQ29kZU1hcCYgY29kZU1hcCA9IGNvZGVC
bG9ja0ZvckV4aXQtPmppdENvZGVNYXAoKTsKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlvbiA9IGNvZGVNYXAuZmluZChleGl0Lm1fY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4KCkpOwotICAgICAgICAgICAgQVNTRVJUKGNvZGVMb2NhdGlvbik7
Ci0gICAgICAgICAgICBqdW1wVGFyZ2V0ID0gY29kZUxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNz
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDb21wdXRlIHRoZSB2YWx1ZSByZWNvdmVyaWVz
LgotICAgICAgICBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiBvcGVyYW5kczsKLSAgICAgICAgVmVj
dG9yPFVuZGVmaW5lZE9wZXJhbmRTcGFuPiB1bmRlZmluZWRPcGVyYW5kU3BhbnM7Ci0gICAgICAg
IGRmZ0pJVENvZGUtPnZhcmlhYmxlRXZlbnRTdHJlYW0ucmVjb25zdHJ1Y3QoY29kZUJsb2NrLCBl
eGl0Lm1fY29kZU9yaWdpbiwgZGZnSklUQ29kZS0+bWluaWZpZWRERkcsIGV4aXQubV9zdHJlYW1J
bmRleCwgb3BlcmFuZHMsICZ1bmRlZmluZWRPcGVyYW5kU3BhbnMpOwotICAgICAgICBwdHJkaWZm
X3Qgc3RhY2tQb2ludGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oY29kZUJsb2Nr
LT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5yZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGl0KSAq
IHNpemVvZihSZWdpc3Rlcik7Ci0KLSAgICAgICAgZXhpdC5leGl0U3RhdGUgPSBhZG9wdFJlZihu
ZXcgT1NSRXhpdFN0YXRlKGV4aXQsIGNvZGVCbG9jaywgYmFzZWxpbmVDb2RlQmxvY2ssIG9wZXJh
bmRzLCBXVEZNb3ZlKHVuZGVmaW5lZE9wZXJhbmRTcGFucyksIHJlY292ZXJ5LCBzdGFja1BvaW50
ZXJPZmZzZXQsIGFjdGl2ZVRocmVzaG9sZCwgYWRqdXN0ZWRUaHJlc2hvbGQsIGp1bXBUYXJnZXQs
IGFycmF5UHJvZmlsZSwgZXhpdFRvTExJbnQpKTsKLQotICAgICAgICBpZiAoVU5MSUtFTFkodm0u
bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24o
KS0+Y29tcGlsYXRpb24pKSB7Ci0gICAgICAgICAgICBQcm9maWxlcjo6RGF0YWJhc2UmIGRhdGFi
YXNlID0gKnZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlcjsKLSAgICAgICAgICAgIFByb2ZpbGVyOjpD
b21waWxhdGlvbiogY29tcGlsYXRpb24gPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9u
KCktPmNvbXBpbGF0aW9uLmdldCgpOwotCi0gICAgICAgICAgICBQcm9maWxlcjo6T1NSRXhpdCog
cHJvZmlsZXJFeGl0ID0gY29tcGlsYXRpb24tPmFkZE9TUkV4aXQoCi0gICAgICAgICAgICAgICAg
ZXhpdEluZGV4LCBQcm9maWxlcjo6T3JpZ2luU3RhY2soZGF0YWJhc2UsIGNvZGVCbG9jaywgZXhp
dC5tX2NvZGVPcmlnaW4pLAotICAgICAgICAgICAgICAgIGV4aXQubV9raW5kLCBleGl0Lm1fa2lu
ZCA9PSBVbmNvdW50YWJsZUludmFsaWRhdGlvbik7Ci0gICAgICAgICAgICBleGl0LmV4aXRTdGF0
ZS0+cHJvZmlsZXJFeGl0ID0gcHJvZmlsZXJFeGl0OwotICAgICAgICAgICAgZXh0cmFJbml0aWFs
aXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUlu
aXRpYWxpemF0aW9uTGV2ZWw6Ok90aGVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChVTkxJ
S0VMWShPcHRpb25zOjpwcmludEVhY2hPU1JFeGl0KCkpKQotICAgICAgICAgICAgZXh0cmFJbml0
aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRy
YUluaXRpYWxpemF0aW9uTGV2ZWw6Ok90aGVyKTsKLQotICAgICAgICBleGl0LmV4aXRTdGF0ZS0+
ZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gZXh0cmFJbml0aWFsaXphdGlvbkxldmVsOwotCi0g
ICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlT1NSKCkgfHwgT3B0aW9uczo6dmVy
Ym9zZURGR09TUkV4aXQoKSkpIHsKLSAgICAgICAgICAgIGRhdGFMb2dGKCJERkcgT1NSIGV4aXQg
IyV1ICglcywgJXMpIGZyb20gJXMsIHdpdGggb3BlcmFuZHMgPSAlc1xuIiwKLSAgICAgICAgICAg
ICAgICBleGl0SW5kZXgsIHRvQ1N0cmluZyhleGl0Lm1fY29kZU9yaWdpbikuZGF0YSgpLAotICAg
ICAgICAgICAgICAgIGV4aXRLaW5kVG9TdHJpbmcoZXhpdC5tX2tpbmQpLCB0b0NTdHJpbmcoKmNv
ZGVCbG9jaykuZGF0YSgpLAotICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhpZ25vcmluZ0NvbnRl
eHQ8RHVtcENvbnRleHQ+KG9wZXJhbmRzKSkuZGF0YSgpKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIE9TUkV4aXRTdGF0ZSYgZXhpdFN0YXRlID0gKmV4aXQuZXhpdFN0YXRlLmdldCgpOwotICAg
IENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBleGl0U3RhdGUuYmFzZWxpbmVDb2RlQmxv
Y2s7Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGJhc2VsaW5lQ29kZUJsb2Nr
LT5qaXRUeXBlKCkpKTsKLQotICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcyA9
IGV4aXRTdGF0ZS5vcGVyYW5kczsKLSAgICBWZWN0b3I8VW5kZWZpbmVkT3BlcmFuZFNwYW4+JiB1
bmRlZmluZWRPcGVyYW5kU3BhbnMgPSBleGl0U3RhdGUudW5kZWZpbmVkT3BlcmFuZFNwYW5zOwot
Ci0gICAgY29udGV4dC5zcCgpID0gY29udGV4dC5mcDx1aW50OF90Kj4oKSArIGV4aXRTdGF0ZS5z
dGFja1BvaW50ZXJPZmZzZXQ7Ci0KLSAgICAvLyBUaGUgb25seSByZWFzb24gZm9yIHVzaW5nIHRo
aXMgZG8gd2hpbGUgbG9vcCBpcyBzbyB3ZSBjYW4gYnJlYWsgb3V0IG1pZHdheSB3aGVuIGFwcHJv
cHJpYXRlLgotICAgIGRvIHsKLSAgICAgICAgYXV0byBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwg
PSBzdGF0aWNfY2FzdDxFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw+KGV4aXRTdGF0ZS5leHRyYUlu
aXRpYWxpemF0aW9uTGV2ZWwpOwotCi0gICAgICAgIGlmIChleHRyYUluaXRpYWxpemF0aW9uTGV2
ZWwgPT0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpOb25lKQotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgLy8gQmVnaW4gZXh0cmEgaW5pdGlsaXphdGlvbiBsZXZlbDogU3BlY3VsYXRp
b25SZWNvdmVyeQotCi0gICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gc3BlY3VsYXRpb24gcmVjb3Zl
cnkgZmlyc3QgYmVjYXVzZSBhcnJheSBwcm9maWxpbmcgYW5kIHZhbHVlIHByb2ZpbGluZwotICAg
ICAgICAvLyBtYXkgcmVseSBvbiBhIHZhbHVlIHRoYXQgaXQgcmVjb3ZlcnMuIEhvd2V2ZXIsIHRo
YXQgZG9lc24ndCBtZWFuIHRoYXQgaXQgaXMgbGlrZWx5Ci0gICAgICAgIC8vIHRvIGhhdmUgYSBy
ZWNvdmVyeSB2YWx1ZS4gU28sIHdlJ2xsIGRlY29yYXRlIGl0IGFzIFVOTElLRUxZLgotICAgICAg
ICBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSA9IGV4aXRTdGF0ZS5yZWNvdmVyeTsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKHJlY292ZXJ5KSkgewotICAgICAgICAgICAgc3dpdGNoIChyZWNv
dmVyeS0+dHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkOgotICAgICAg
ICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPSBjcHUuZ3ByPHVpbnQzMl90Pihy
ZWNvdmVyeS0+ZGVzdCgpKSAtIGNwdS5ncHI8dWludDMyX3Q+KHJlY292ZXJ5LT5zcmMoKSk7Ci0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBBU1NFUlQoIShjcHUuZ3ByKHJlY292
ZXJ5LT5kZXN0KCkpID4+IDMyKSk7Ci0gICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+
ZGVzdCgpKSB8PSBKU1ZhbHVlOjpOdW1iZXJUYWc7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZFNlbGY6Ci0gICAgICAgICAg
ICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pihj
cHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5LT5kZXN0KCkpID4+IDEpIF4gMHg4MDAwMDAwMFU7Ci0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBBU1NFUlQoIShjcHUuZ3ByKHJlY292
ZXJ5LT5kZXN0KCkpID4+IDMyKSk7Ci0gICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+
ZGVzdCgpKSB8PSBKU1ZhbHVlOjpOdW1iZXJUYWc7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZEltbWVkaWF0ZToKLSAgICAg
ICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID0gKGNwdS5ncHI8dWludDMyX3Q+
KHJlY292ZXJ5LT5kZXN0KCkpIC0gcmVjb3ZlcnktPmltbWVkaWF0ZSgpKTsKLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgICAgICAgICAgICAgIEFTU0VSVCghKGNwdS5ncHIocmVjb3ZlcnktPmRlc3Qo
KSkgPj4gMzIpKTsKLSAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpIHw9
IEpTVmFsdWU6Ok51bWJlclRhZzsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgICAgICBjYXNlIEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrOgotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA9IGNwdS5ncHIo
cmVjb3ZlcnktPmRlc3QoKSkgXiBKU1ZhbHVlOjpWYWx1ZUZhbHNlOwotI2VuZGlmCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV4dHJhSW5pdGlh
bGl6YXRpb25MZXZlbCA8PSBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6OlNwZWN1bGF0aW9uUmVj
b3ZlcnkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBCZWdpbiBleHRyYSBpbml0
aWxpemF0aW9uIGxldmVsOiBWYWx1ZVByb2ZpbGVVcGRhdGUKLSAgICAgICAgSlNWYWx1ZSBwcm9m
aWxlZFZhbHVlOwotICAgICAgICBpZiAoISFleGl0Lm1fanNWYWx1ZVNvdXJjZSkgewotICAgICAg
ICAgICAgcHJvZmlsZWRWYWx1ZSA9IGpzVmFsdWVGb3IoY3B1LCBleGl0Lm1fanNWYWx1ZVNvdXJj
ZSk7Ci0gICAgICAgICAgICBpZiAoTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBwcm9maWxl
ID0gZXhpdC5tX3ZhbHVlUHJvZmlsZSkKLSAgICAgICAgICAgICAgICBwcm9maWxlLnJlcG9ydFZh
bHVlKHByb2ZpbGVkVmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChleHRyYUluaXRpYWxp
emF0aW9uTGV2ZWwgPD0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpWYWx1ZVByb2ZpbGVVcGRh
dGUpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBCZWdpbiBleHRyYSBpbml0aWxp
emF0aW9uIGxldmVsOiBBcnJheVByb2ZpbGVVcGRhdGUKLSAgICAgICAgaWYgKEFycmF5UHJvZmls
ZSogYXJyYXlQcm9maWxlID0gZXhpdFN0YXRlLmFycmF5UHJvZmlsZSkgewotICAgICAgICAgICAg
QVNTRVJUKCEhZXhpdC5tX2pzVmFsdWVTb3VyY2UpOwotICAgICAgICAgICAgQVNTRVJUKGV4aXQu
bV9raW5kID09IEJhZENhY2hlIHx8IGV4aXQubV9raW5kID09IEJhZEluZGV4aW5nVHlwZSk7Ci0g
ICAgICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxv
Y2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhleGl0Lm1fY29kZU9yaWdpbkZvckV4aXRQ
cm9maWxlLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24gPSBwcm9maWxlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoZXhp
dC5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZS5ieXRlY29kZUluZGV4KCkpLnB0cigpOwotICAg
ICAgICAgICAgYm9vbCBkb1Byb2ZpbGUgPSAhaW5zdHJ1Y3Rpb24tPmlzPE9wR2V0QnlJZD4oKSB8
fCBpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpLm1ldGFkYXRhKHByb2ZpbGVkQ29kZUJsb2Nr
KS5tX21vZGVNZXRhZGF0YS5tb2RlID09IEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aDsKLSAgICAg
ICAgICAgIGlmIChkb1Byb2ZpbGUpIHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHByb2ZpbGVkVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgICAg
ICAgICAgYXJyYXlQcm9maWxlLT5vYnNlcnZlU3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAg
ICAgICAgICAgYXJyYXlQcm9maWxlLT5vYnNlcnZlQXJyYXlNb2RlKGFycmF5TW9kZXNGcm9tU3Ry
dWN0dXJlKHN0cnVjdHVyZSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlm
IChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPD0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpB
cnJheVByb2ZpbGVVcGRhdGUpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBCZWdp
biBFeHRyYSBpbml0aWxpemF0aW9uIGxldmVsOiBPdGhlcgotICAgICAgICBpZiAoVU5MSUtFTFko
ZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCkpIHsKLSAgICAgICAgICAgIC8vIFdlIGFyZSBh
Y3RpbmcgYXMgYSBkZWZhY3RvIG9wX2NhdGNoIGJlY2F1c2Ugd2UgYXJyaXZlIGhlcmUgZnJvbSBn
ZW5lcmljVW53aW5kKCkuCi0gICAgICAgICAgICAvLyBTbywgd2UgbXVzdCByZXN0b3JlIG91ciBj
YWxsIGZyYW1lIGFuZCBzdGFjayBwb2ludGVyLgotICAgICAgICAgICAgcmVzdG9yZUNhbGxlZVNh
dmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKGNvbnRleHQpOwotICAgICAgICAg
ICAgQVNTRVJUKGNvbnRleHQuZnAoKSA9PSB2bS5jYWxsRnJhbWVGb3JDYXRjaCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoZXhpdFN0YXRlLnByb2ZpbGVyRXhpdCkKLSAgICAgICAgICAgIGV4
aXRTdGF0ZS5wcm9maWxlckV4aXQtPmluY0NvdW50KCk7Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZ
KE9wdGlvbnM6OnByaW50RWFjaE9TUkV4aXQoKSkpCi0gICAgICAgICAgICBwcmludE9TUkV4aXQo
Y29udGV4dCwgdm0ub3NyRXhpdEluZGV4LCBleGl0KTsKLQotICAgIH0gd2hpbGUgKGZhbHNlKTsg
Ly8gRW5kIGV4dHJhIGluaXRpYWxpemF0aW9uLgotCi0gICAgRnJhbWUgZnJhbWUoY3B1LmZwKCks
IGNvbnRleHQuc3RhY2soKSk7Ci0gICAgQVNTRVJUKCEoY29udGV4dC5mcDx1aW50cHRyX3Q+KCkg
JiAweDcpKTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgQVNTRVJUKGNwdS5ncHI8aW50NjRf
dD4oR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpID09IEpTVmFsdWU6Ok51bWJlclRhZyk7Ci0g
ICAgQVNTRVJUKGNwdS5ncHI8aW50NjRfdD4oR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3Rlcikg
PT0gSlNWYWx1ZTo6Tm90Q2VsbE1hc2spOwotI2VuZGlmCi0KLSAgICAvLyBEbyBhbGwgZGF0YSBm
b3JtYXQgY29udmVyc2lvbnMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGludG8gdGhlIHN0YWNrLgot
ICAgIC8vIE5vdGU6IHdlIG5lZWQgdG8gcmVjb3ZlciB2YWx1ZXMgYmVmb3JlIHJlc3RvcmluZyBj
YWxsZWUgc2F2ZSByZWdpc3RlcnMgYmVsb3cKLSAgICAvLyBiZWNhdXNlIHRoZSByZWNvdmVyeSBt
YXkgcmVseSBvbiB2YWx1ZXMgaW4gc29tZSBvZiBjYWxsZWUgc2F2ZSByZWdpc3RlcnMuCi0KLSAg
ICBpbnQgY2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzID0gc3RhdGljX2Nhc3Q8aW50
PihiYXNlbGluZUNvZGVCbG9jay0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkp
OwotICAgIHNpemVfdCBudW1iZXJPZk9wZXJhbmRzID0gb3BlcmFuZHMuc2l6ZSgpOwotICAgIHNp
emVfdCBudW1VbmRlZmluZWRPcGVyYW5kU3BhbnMgPSB1bmRlZmluZWRPcGVyYW5kU3BhbnMuc2l6
ZSgpOwotCi0gICAgc2l6ZV90IG5leHRVbmRlZmluZWRTcGFuSW5kZXggPSAwOwotICAgIHNpemVf
dCBuZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4ID0gbnVtYmVyT2ZPcGVyYW5kczsKLSAgICBpZiAo
bnVtVW5kZWZpbmVkT3BlcmFuZFNwYW5zKQotICAgICAgICBuZXh0VW5kZWZpbmVkT3BlcmFuZElu
ZGV4ID0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zW25leHRVbmRlZmluZWRTcGFuSW5kZXhdLmZpcnN0
SW5kZXg7Ci0KLSAgICBKU1ZhbHVlIHVuZGVmaW5lZCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgZm9y
IChzaXplX3Qgc3BhbkluZGV4ID0gMDsgc3BhbkluZGV4IDwgbnVtVW5kZWZpbmVkT3BlcmFuZFNw
YW5zOyArK3NwYW5JbmRleCkgewotICAgICAgICBhdXRvJiBzcGFuID0gdW5kZWZpbmVkT3BlcmFu
ZFNwYW5zW3NwYW5JbmRleF07Ci0gICAgICAgIGludCBmaXJzdE9mZnNldCA9IHNwYW4ubWluT2Zm
c2V0OwotICAgICAgICBpbnQgbGFzdE9mZnNldCA9IGZpcnN0T2Zmc2V0ICsgc3Bhbi5udW1iZXJP
ZlJlZ2lzdGVyczsKLQotICAgICAgICBmb3IgKGludCBvZmZzZXQgPSBmaXJzdE9mZnNldDsgb2Zm
c2V0IDwgbGFzdE9mZnNldDsgKytvZmZzZXQpCi0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5k
KG9mZnNldCwgdW5kZWZpbmVkKTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7
IGluZGV4IDwgbnVtYmVyT2ZPcGVyYW5kczsgKytpbmRleCkgewotICAgICAgICBjb25zdCBWYWx1
ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlZyA9IG9wZXJhbmRzLnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGluZGV4KTsKLQot
ICAgICAgICBpZiAoVU5MSUtFTFkoaW5kZXggPT0gbmV4dFVuZGVmaW5lZE9wZXJhbmRJbmRleCkp
IHsKLSAgICAgICAgICAgIGluZGV4ICs9IHVuZGVmaW5lZE9wZXJhbmRTcGFuc1tuZXh0VW5kZWZp
bmVkU3BhbkluZGV4KytdLm51bWJlck9mUmVnaXN0ZXJzIC0gMTsKLSAgICAgICAgICAgIGlmIChu
ZXh0VW5kZWZpbmVkU3BhbkluZGV4IDwgbnVtVW5kZWZpbmVkT3BlcmFuZFNwYW5zKQotICAgICAg
ICAgICAgICAgIG5leHRVbmRlZmluZWRPcGVyYW5kSW5kZXggPSB1bmRlZmluZWRPcGVyYW5kU3Bh
bnNbbmV4dFVuZGVmaW5lZFNwYW5JbmRleF0uZmlyc3RJbmRleDsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBuZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4ID0gbnVtYmVyT2ZPcGVy
YW5kczsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJl
Zy5pc0xvY2FsKCkgJiYgcmVnLnRvTG9jYWwoKSA8IGNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJl
Z2lzdGVycykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGludCBvcGVyYW5kID0g
cmVnLm9mZnNldCgpOwotCi0gICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsK
LSAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRP
cGVyYW5kKG9wZXJhbmQsIGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSku
YXNhblVuc2FmZUpTVmFsdWUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNl
IEluRlBSOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBjcHUuZnByPEpT
VmFsdWU+KHJlY292ZXJ5LmZwcigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgICAgIGNhc2UgSW5HUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVy
YW5kKG9wZXJhbmQsIGNwdS5ncHI8SlNWYWx1ZT4ocmVjb3ZlcnkuZ3ByKCkpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotI2Vsc2UKLSAgICAgICAgY2FzZSBJblBhaXI6Ci0gICAgICAgICAgICBmcmFt
ZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQzMl90PihyZWNvdmVyeS50
YWdHUFIoKSksIGNwdS5ncHI8aW50MzJfdD4ocmVjb3ZlcnkucGF5bG9hZEdQUigpKSkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLQotICAgICAgICBjYXNlIFVuYm94ZWRDZWxsSW5HUFI6
Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxK
U0NlbGwqPihyZWNvdmVyeS5ncHIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
IGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJh
bmQob3BlcmFuZCwgSlNWYWx1ZShjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVy
KCkpLmFzYW5VbnNhZmVVbmJveGVkQ2VsbCgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjoKLSAg
ICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwganNCb29sZWFuKGNwdS5ncHI8Ym9v
bD4ocmVjb3ZlcnkuZ3ByKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZgotCi0gICAg
ICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBjYWxsRnJhbWUtPnIocmVjb3Zl
cnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVKU1ZhbHVlKCkpOwotI2Vsc2UKLSAgICAg
ICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwganNCb29sZWFuKGNhbGxGcmFtZS0+cihy
ZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZUpTVmFsdWUoKS5wYXlsb2FkKCkp
KTsKLSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBVbmJveGVkSW50
MzJJbkdQUjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShj
cHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5LmdwcigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1l
LnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVh
bFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVVbmJveGVkSW50MzIoKSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBjYXNlIFVuYm94ZWRJbnQ1MkluR1BS
OgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8
aW50NjRfdD4ocmVjb3ZlcnkuZ3ByKCkpID4+IEpTVmFsdWU6OmludDUyU2hpZnRBbW91bnQpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgSW50NTJEaXNwbGFjZWRJbkpTU3Rh
Y2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY2FsbEZy
YW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hlZEludDUy
KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgVW5ib3hlZFN0cmljdElu
dDUySW5HUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUo
Y3B1LmdwcjxpbnQ2NF90PihyZWNvdmVyeS5ncHIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgIGNhc2UgU3RyaWN0SW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAg
ICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY2FsbEZyYW1lLT5yKHJlY292ZXJ5
LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hlZFN0cmljdEludDUyKCkpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0KLSAgICAgICAgY2FzZSBVbmJveGVkRG91YmxlSW5G
UFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoSlNWYWx1
ZTo6RW5jb2RlQXNEb3VibGUsIHB1cmlmeU5hTihjcHUuZnByKHJlY292ZXJ5LmZwcigpKSkpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5KU1N0
YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKEpTVmFs
dWU6OkVuY29kZUFzRG91YmxlLCBwdXJpZnlOYU4oY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1
YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hlZERvdWJsZSgpKSkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgY2FzZSBDb25zdGFudDoKLSAgICAgICAgICAgIGZyYW1lLnNldE9w
ZXJhbmQob3BlcmFuZCwgcmVjb3ZlcnkuY29uc3RhbnQoKSk7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIERpcmVjdEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKLSAgICAg
ICAgY2FzZSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgICAgICAv
LyBEb24ndCBkbyB0aGlzLCB5ZXQuCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmVzdG9yZSB0aGUgREZHIGNh
bGxlZSBzYXZlcyBhbmQgdGhlbiBzYXZlIHRoZSBvbmVzIHRoZSBiYXNlbGluZSBKSVQgdXNlcy4K
LSAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoY29udGV4dCwgY29kZUJsb2NrKTsKLSAgICBzYXZl
Q2FsbGVlU2F2ZXNGb3IoY29udGV4dCwgYmFzZWxpbmVDb2RlQmxvY2spOwotCi0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBjcHUuZ3ByKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKSA9IHN0YXRp
Y19jYXN0PEpTQzo6VUNQVVJlZ2lzdGVyPihKU1ZhbHVlOjpOdW1iZXJUYWcpOwotICAgIGNwdS5n
cHIoR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3RlcikgPSBzdGF0aWNfY2FzdDxKU0M6OlVDUFVS
ZWdpc3Rlcj4oSlNWYWx1ZTo6Tm90Q2VsbE1hc2spOwotI2VuZGlmCi0KLSAgICBpZiAoZXhpdC5p
c0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcihjb250ZXh0KTsKLQotICAgIC8vIE5vdyB0aGF0IHRoaW5ncyBv
biB0aGUgc3RhY2sgYXJlIHJlY292ZXJlZCwgZG8gdGhlIGFyZ3VtZW50cyByZWNvdmVyeS4gV2Ug
YXNzdW1lIHRoYXQgYXJndW1lbnRzCi0gICAgLy8gcmVjb3ZlcmllcyBkb24ndCByZWN1cnNpdmVs
eSByZWZlciB0byBlYWNoIG90aGVyLiBCdXQsIHdlIGRvbid0IHRyeSB0byBhc3N1bWUgdGhhdCB0
aGV5IG9ubHkKLSAgICAvLyByZWZlciB0byBjZXJ0YWluIHJhbmdlcyBvZiBsb2NhbHMuIEhlbmNl
IHdoeSB3ZSBuZWVkIHRvIGRvIHRoaXMgaGVyZSwgb25jZSB0aGUgc3RhY2sgaXMgc2Vuc2libGUu
Ci0gICAgLy8gTm90ZSB0aGF0IHdlIGFsc28gcm91Z2hseSBhc3N1bWUgdGhhdCB0aGUgYXJndW1l
bnRzIG1pZ2h0IHN0aWxsIGJlIG1hdGVyaWFsaXplZCBvdXRzaWRlIG9mIGl0cwotICAgIC8vIGlu
bGluZSBjYWxsIGZyYW1lIHNjb3BlIC0gYnV0IGZvciBub3cgdGhlIERGRyB3b3VsZG4ndCBkbyB0
aGF0LgotCi0gICAgREZHOjplbWl0UmVzdG9yZUFyZ3VtZW50cyhjb250ZXh0LCBjb2RlQmxvY2ss
IGRmZ0pJVENvZGUsIG9wZXJhbmRzKTsKLQotICAgIC8vIEFkanVzdCB0aGUgb2xkIEpJVCdzIGV4
ZWN1dGUgY291bnRlci4gU2luY2Ugd2UgYXJlIGV4aXRpbmcgT1NSLCB3ZSBrbm93Ci0gICAgLy8g
dGhhdCBhbGwgbmV3IGNhbGxzIGludG8gdGhpcyBjb2RlIHdpbGwgZ28gdG8gdGhlIG5ldyBKSVQs
IHNvIHRoZSBleGVjdXRlCi0gICAgLy8gY291bnRlciBvbmx5IGFmZmVjdHMgY2FsbCBmcmFtZXMg
dGhhdCBwZXJmb3JtZWQgT1NSIGV4aXQgYW5kIGNhbGwgZnJhbWVzCi0gICAgLy8gdGhhdCB3ZXJl
IHN0aWxsIGV4ZWN1dGluZyB0aGUgb2xkIEpJVCBhdCB0aGUgdGltZSBvZiBhbm90aGVyIGNhbGwg
ZnJhbWUncwotICAgIC8vIE9TUiBleGl0LiBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBmb2xs
b3dpbmcgaXMgdHJ1ZToKLSAgICAvLwotICAgIC8vIChhKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBP
U1IgZXhpdCBnZXRzIGEgY2hhbmNlIHRvIHJlZW50ZXIgb3B0aW1pemVkCi0gICAgLy8gICAgIGNv
ZGUgZXZlbnR1YWxseSwgc2luY2Ugb3B0aW1pemVkIGNvZGUgaXMgZmFzdGVyLiBCdXQgd2UgZG9u
J3QKLSAgICAvLyAgICAgd2FudCB0byBkbyBzdWNoIHJlZW50ZXJ5IHRvbyBhZ2dyZXNzaXZlbHkg
KHNlZSAoYykgYmVsb3cpLgotICAgIC8vCi0gICAgLy8gKGIpIElmIHRoZXJlIGlzIGNvZGUgb24g
dGhlIGNhbGwgc3RhY2sgdGhhdCBpcyBzdGlsbCBydW5uaW5nIHRoZSBvbGQKLSAgICAvLyAgICAg
SklUJ3MgY29kZSBhbmQgaGFzIG5ldmVyIE9TUidkLCB0aGVuIGl0IHNob3VsZCBnZXQgYSBjaGFu
Y2UgdG8KLSAgICAvLyAgICAgcGVyZm9ybSBPU1IgZW50cnkgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0
IHdlJ3ZlIGV4aXRlZC4KLSAgICAvLwotICAgIC8vIChjKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBP
U1IgZXhpdCBzaG91bGQgbm90IGltbWVkaWF0ZWx5IHJldHJ5IE9TUgotICAgIC8vICAgICBlbnRy
eSwgc2luY2UgYm90aCBmb3JtcyBvZiBPU1IgYXJlIGV4cGVuc2l2ZS4gT1NSIGVudHJ5IGlzCi0g
ICAgLy8gICAgIHBhcnRpY3VsYXJseSBleHBlbnNpdmUuCi0gICAgLy8KLSAgICAvLyAoZCkgRnJl
cXVlbnQgT1NSIGZhaWx1cmVzLCBldmVuIHRob3NlIHRoYXQgZG8gbm90IHJlc3VsdCBpbiB0aGUg
Y29kZQotICAgIC8vICAgICBydW5uaW5nIGluIGEgaG90IGxvb3AsIHJlc3VsdCBpbiByZWNvbXBp
bGF0aW9uIGdldHRpbmcgdHJpZ2dlcmVkLgotICAgIC8vCi0gICAgLy8gVG8gZW5zdXJlIChjKSwg
d2UnZCBsaWtlIHRvIHNldCB0aGUgZXhlY3V0ZSBjb3VudGVyIHRvCi0gICAgLy8gY291bnRlclZh
bHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLiBUaGlzIHNlZW1zIGxpa2UgaXQgd291bGQgZW5k
YW5nZXIKLSAgICAvLyAoYSkgYW5kIChiKSwgc2luY2UgdGhlbiBldmVyeSBPU1IgZXhpdCB3b3Vs
ZCBkZWxheSB0aGUgb3Bwb3J0dW5pdHkgZm9yCi0gICAgLy8gZXZlcnkgY2FsbCBmcmFtZSB0byBw
ZXJmb3JtIE9TUiBlbnRyeS4gRXNzZW50aWFsbHksIGlmIE9TUiBleGl0IGhhcHBlbnMKLSAgICAv
LyBmcmVxdWVudGx5IGFuZCB0aGUgZnVuY3Rpb24gaGFzIGZldyBsb29wcywgdGhlbiB0aGUgY291
bnRlciB3aWxsIG5ldmVyCi0gICAgLy8gYmVjb21lIG5vbi1uZWdhdGl2ZSBhbmQgT1NSIGVudHJ5
IHdpbGwgbmV2ZXIgYmUgdHJpZ2dlcmVkLiBPU1IgZW50cnkKLSAgICAvLyB3aWxsIG9ubHkgaGFw
cGVuIGlmIGEgbG9vcCBnZXRzIGhvdCBpbiB0aGUgb2xkIEpJVCwgd2hpY2ggZG9lcyBhIHByZXR0
eQotICAgIC8vIGdvb2Qgam9iIG9mIGVuc3VyaW5nIChhKSBhbmQgKGIpLiBCdXQgdGhhdCBkb2Vz
bid0IHRha2UgY2FyZSBvZiAoZCksCi0gICAgLy8gc2luY2UgZWFjaCBzcGVjdWxhdGlvbiBmYWls
dXJlIHdvdWxkIHJlc2V0IHRoZSBleGVjdXRlIGNvdW50ZXIuCi0gICAgLy8gU28gd2UgY2hlY2sg
aGVyZSBpZiB0aGUgbnVtYmVyIG9mIHNwZWN1bGF0aW9uIGZhaWx1cmVzIGlzIHNpZ25pZmljYW50
bHkKLSAgICAvLyBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NlcyAod2Ugd2FudCA5
MCUgc3VjY2VzcyByYXRlKSwgYW5kIGlmCi0gICAgLy8gdGhlcmUgaGF2ZSBiZWVuIGEgbGFyZ2Ug
ZW5vdWdoIG51bWJlciBvZiBmYWlsdXJlcy4gSWYgc28sIHdlIHNldCB0aGUKLSAgICAvLyBjb3Vu
dGVyIHRvIDA7IG90aGVyd2lzZSB3ZSBzZXQgdGhlIGNvdW50ZXIgdG8KLSAgICAvLyBjb3VudGVy
VmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuCi0KLSAgICBpZiAoVU5MSUtFTFkoY29kZUJs
b2NrLT51cGRhdGVPU1JFeGl0Q291bnRlckFuZENoZWNrSWZOZWVkVG9SZW9wdGltaXplKGV4aXRT
dGF0ZSkgPT0gQ29kZUJsb2NrOjpPcHRpbWl6ZUFjdGlvbjo6UmVvcHRpbWl6ZU5vdykpCi0gICAg
ICAgIHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdyhiYXNlbGluZUNvZGVCbG9jaywgY29kZUJsb2Nr
LCAmZXhpdCk7Ci0KLSAgICByZWlmeUlubGluZWRDYWxsRnJhbWVzKGNvbnRleHQsIGJhc2VsaW5l
Q29kZUJsb2NrLCBleGl0KTsKLSAgICBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoY29udGV4dCwgdm0s
IGNvZGVCbG9jaywgYmFzZWxpbmVDb2RlQmxvY2ssIGV4aXQpOwotfQotCi1zdGF0aWMgdm9pZCBy
ZWlmeUlubGluZWRDYWxsRnJhbWVzKENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogb3V0ZXJt
b3N0QmFzZWxpbmVDb2RlQmxvY2ssIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQotewotICAgIGF1
dG8mIGNwdSA9IGNvbnRleHQuY3B1OwotICAgIEZyYW1lIGZyYW1lKGNwdS5mcCgpLCBjb250ZXh0
LnN0YWNrKCkpOwotCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBsZWF2ZSBob2xlcyBvbiB0
aGUgc3RhY2sgd2hlbiBwZXJmb3JtaW5nIGFuIE9TUiBleGl0Ci0gICAgLy8gaW4gcHJlc2VuY2Ug
b2YgaW5saW5lZCB0YWlsIGNhbGxzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDc1MTEKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUo
b3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2stPmppdFR5cGUoKSkpOwotICAgIGZyYW1lLnNldE9w
ZXJhbmQ8Q29kZUJsb2NrKj4oQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCBvdXRlcm1vc3RCYXNl
bGluZUNvZGVCbG9jayk7Ci0KLSAgICBjb25zdCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luOwotICAg
IGZvciAoY29kZU9yaWdpbiA9ICZleGl0Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdpbiAmJiBjb2Rl
T3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4tPmlubGlu
ZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygpKSB7Ci0gICAgICAgIElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZy
YW1lKCk7Ci0gICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBiYXNlbGluZUNv
ZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKCpjb2RlT3JpZ2luLCBvdXRlcm1v
c3RCYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgIElubGluZUNhbGxGcmFtZTo6S2luZCB0cnVl
Q2FsbGVyQ2FsbEtpbmQ7Ci0gICAgICAgIENvZGVPcmlnaW4qIHRydWVDYWxsZXIgPSBpbmxpbmVD
YWxsRnJhbWUtPmdldENhbGxlclNraXBwaW5nVGFpbENhbGxzKCZ0cnVlQ2FsbGVyQ2FsbEtpbmQp
OwotICAgICAgICB2b2lkKiBjYWxsZXJGcmFtZSA9IGNwdS5mcCgpOwotCi0gICAgICAgIGJvb2wg
Y2FsbGVySXNMTEludCA9IGZhbHNlOwotCi0gICAgICAgIGlmICghdHJ1ZUNhbGxlcikgewotICAg
ICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZS0+aXNUYWlsKCkpOwotICAgICAgICAgICAg
dm9pZCogcmV0dXJuUEMgPSBmcmFtZS5nZXQ8dm9pZCo+KENhbGxGcmFtZTo6cmV0dXJuUENPZmZz
ZXQoKSk7Ci0jaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAgICAgIHZvaWQqIG9sZEVudHJ5U1AgPSBj
cHUuZnA8dWludDhfdCo+KCkgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7Ci0gICAgICAgICAg
ICB2b2lkKiBuZXdFbnRyeVNQID0gY3B1LmZwPHVpbnQ4X3QqPigpICsgaW5saW5lQ2FsbEZyYW1l
LT5yZXR1cm5QQ09mZnNldCgpICsgc2l6ZW9mKHZvaWQqKTsKLSAgICAgICAgICAgIHJldHVyblBD
ID0gcmV0YWdDb2RlUHRyKHJldHVyblBDLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihvbGRFbnRyeVNQ
KSwgYml0d2lzZV9jYXN0PFB0clRhZz4obmV3RW50cnlTUCkpOwotI2VuZGlmCi0gICAgICAgICAg
ICBmcmFtZS5zZXQ8dm9pZCo+KGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSwgcmV0
dXJuUEMpOwotICAgICAgICAgICAgY2FsbGVyRnJhbWUgPSBmcmFtZS5nZXQ8dm9pZCo+KENhbGxG
cmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gYmFzZWxpbmVDb2RlQmxv
Y2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jaygqdHJ1ZUNhbGxlciwgb3V0ZXJtb3N0QmFz
ZWxpbmVDb2RlQmxvY2spOwotICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBjYWxsQnl0ZWNvZGVJ
bmRleCA9IHRydWVDYWxsZXItPmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgICAgIHZvaWQqIGp1
bXBUYXJnZXQgPSBjYWxsZXJSZXR1cm5QQyhiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciwgY2Fs
bEJ5dGVjb2RlSW5kZXgsIHRydWVDYWxsZXJDYWxsS2luZCwgY2FsbGVySXNMTEludCkudW50YWdn
ZWRFeGVjdXRhYmxlQWRkcmVzcygpOwotCi0gICAgICAgICAgICBpZiAodHJ1ZUNhbGxlci0+aW5s
aW5lQ2FsbEZyYW1lKCkpCi0gICAgICAgICAgICAgICAgY2FsbGVyRnJhbWUgPSBjcHUuZnA8dWlu
dDhfdCo+KCkgKyB0cnVlQ2FsbGVyLT5pbmxpbmVDYWxsRnJhbWUoKS0+c3RhY2tPZmZzZXQgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpOwotCi0jaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAgICAgIHZv
aWQqIG5ld0VudHJ5U1AgPSBjcHUuZnA8dWludDhfdCo+KCkgKyBpbmxpbmVDYWxsRnJhbWUtPnJl
dHVyblBDT2Zmc2V0KCkgKyBzaXplb2Yodm9pZCopOwotICAgICAgICAgICAganVtcFRhcmdldCA9
IHRhZ0NvZGVQdHIoanVtcFRhcmdldCwgYml0d2lzZV9jYXN0PFB0clRhZz4obmV3RW50cnlTUCkp
OwotI2VuZGlmCi0gICAgICAgICAgICBmcmFtZS5zZXQ8dm9pZCo+KGlubGluZUNhbGxGcmFtZS0+
cmV0dXJuUENPZmZzZXQoKSwganVtcFRhcmdldCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmcmFt
ZS5zZXRPcGVyYW5kPHZvaWQqPihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrLCBiYXNlbGluZUNvZGVCbG9jayk7Ci0KLSAgICAgICAgLy8gUmVz
dG9yZSB0aGUgaW5saW5lIGNhbGwgZnJhbWUncyBjYWxsZWUgc2F2ZSByZWdpc3RlcnMuCi0gICAg
ICAgIC8vIElmIHRoaXMgaW5saW5lZCBmcmFtZSBpcyBhIHRhaWwgY2FsbCB0aGF0IHdpbGwgcmV0
dXJuIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGNhbGxlciwgd2UgbmVlZCB0bwotICAgICAgICAvLyBj
b3B5IHRoZSBwcmlvciBjb250ZW50cyBvZiB0aGUgdGFnIHJlZ2lzdGVycyBhbHJlYWR5IHNhdmVk
IGZvciB0aGUgb3V0ZXIgZnJhbWUgdG8gdGhpcyBmcmFtZS4KLSAgICAgICAgc2F2ZU9yQ29weUNh
bGxlZVNhdmVzRm9yKGNvbnRleHQsIGJhc2VsaW5lQ29kZUJsb2NrLCBWaXJ0dWFsUmVnaXN0ZXIo
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCksICF0cnVlQ2FsbGVyKTsKLQotICAgICAgICBp
ZiAoY2FsbGVySXNMTEludCkgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVC
bG9ja0ZvckNhbGxlciA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2Rl
QmxvY2soKnRydWVDYWxsZXIsIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAg
ICAgIGZyYW1lLnNldDxjb25zdCB2b2lkKj4oY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1l
LCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUiku
b2Zmc2V0LCBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0YWRhdGFUYWJsZSgpKTsKLSNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgZnJhbWUuc2V0PGNvbnN0IHZvaWQqPihjYWxs
ZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBMTEludDo6UmVn
aXN0ZXJzOjpwYkdQUikub2Zmc2V0LCBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+aW5zdHJ1
Y3Rpb25zUmF3UG9pbnRlcigpKTsKLSNlbmRpZgotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFp
bmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFu
ZDx1aW50MzJfdD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBQYXlsb2FkT2Zmc2V0LCBpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKLSAgICAgICAgQVNTRVJUKGNhbGxlckZy
YW1lKTsKLSAgICAgICAgZnJhbWUuc2V0PHZvaWQqPihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlckZy
YW1lT2Zmc2V0KCksIGNhbGxlckZyYW1lKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICB1
aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4tPmJ5dGVjb2Rl
SW5kZXgoKSkuYml0cygpOwotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90Pihpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIFRhZ09mZnNldCwgbG9jYXRpb25CaXRzKTsKLSAgICAgICAgaWYgKCFpbmxp
bmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5k
KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUsIEpT
VmFsdWUoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpKSk7Ci0jZWxzZSAvLyBVU0Uo
SlNWQUxVRTY0KSAvLyBzbyB0aGlzIGlzIHRoZSAzMi1iaXQgcGFydAotICAgICAgICBjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBiYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5wdHIoKTsKLSAgICAgICAgdWludDMy
X3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGJpdHdpc2VfY2Fz
dDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKSkuYml0cygpOwotICAgICAgICBmcmFtZS5zZXRPcGVy
YW5kPHVpbnQzMl90PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFRhZ09mZnNldCwgbG9jYXRpb25CaXRzKTsK
LSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJfdD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgVGFnT2Zmc2V0LCBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oSlNWYWx1ZTo6Q2VsbFRhZykpOwotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFt
ZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQoaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgUGF5bG9hZE9mZnNl
dCwgaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpKTsKLSNlbmRpZiAvLyBVU0UoSlNW
QUxVRTY0KSAvLyBlbmRpbmcgdGhlICNlbHNlIHBhcnQsIHNvIGRpcmVjdGx5IGFib3ZlIGlzIHRo
ZSAzMi1iaXQgcGFydAotICAgIH0KLQotICAgIC8vIERvbid0IG5lZWQgdG8gc2V0IHRoZSB0b3Bs
ZXZlbCBjb2RlIG9yaWdpbiBpZiB3ZSBvbmx5IGRpZCBpbmxpbmUgdGFpbCBjYWxscwotICAgIGlm
IChjb2RlT3JpZ2luKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdWludDMyX3QgbG9j
YXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLmJp
dHMoKTsKLSNlbHNlCi0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IG91
dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2luLT5i
eXRlY29kZUluZGV4KCkpLnB0cigpOwotICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBD
YWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVj
dGlvbikpKS5iaXRzKCk7Ci0jZW5kaWYKLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJf
dD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFRhZ09mZnNldCwg
bG9jYXRpb25CaXRzKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGFkanVzdEFuZEp1bXBUb1Rh
cmdldChDb250ZXh0JiBjb250ZXh0LCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBPU1JFeGl0JiBleGl0KQotewotICAgIE9TUkV4aXRT
dGF0ZSogZXhpdFN0YXRlID0gZXhpdC5leGl0U3RhdGUuZ2V0KCk7Ci0KLSAgICBXVEY6OnN0b3Jl
TG9hZEZlbmNlKCk7IC8vIFRoZSBvcHRpbWl6aW5nIGNvbXBpbGVyIGV4cGVjdHMgdGhhdCB0aGUg
T1NSIGV4aXQgbWVjaGFuaXNtIHdpbGwgZXhlY3V0ZSB0aGlzIGZlbmNlLgotICAgIHZtLmhlYXAu
d3JpdGVCYXJyaWVyKGJhc2VsaW5lQ29kZUJsb2NrKTsKLQotICAgIC8vIFdlIGJhcnJpZXIgYWxs
IGlubGluZWQgZnJhbWVzIC0tIGFuZCBub3QganVzdCB0aGUgY3VycmVudCBpbmxpbmUgc3RhY2sg
LS0KLSAgICAvLyBiZWNhdXNlIHdlIGRvbid0IGtub3cgd2hpY2ggaW5saW5lZCBmdW5jdGlvbiBv
d25zIHRoZSB2YWx1ZSBwcm9maWxlIHRoYXQKLSAgICAvLyB3ZSdsbCB1cGRhdGUgd2hlbiB3ZSBl
eGl0LiBJbiB0aGUgY2FzZSBvZiAiZigpIHsgYSgpOyBiKCk7IH0iLCBpZiBib3RoCi0gICAgLy8g
YSBhbmQgYiBhcmUgaW5saW5lZCwgd2UgbWlnaHQgZXhpdCBpbnNpZGUgYiBkdWUgdG8gYSBiYWQg
dmFsdWUgbG9hZGVkCi0gICAgLy8gZnJvbSBhLgotICAgIC8vIEZJWE1FOiBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlIHNob3VsZCByZW1lbWJlciB3aGljaCBDb2RlQmxvY2sgb3ducwotICAg
IC8vIHRoZSB2YWx1ZSBwcm9maWxlLgotICAgIElubGluZUNhbGxGcmFtZVNldCogaW5saW5lQ2Fs
bEZyYW1lcyA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+aW5saW5lQ2FsbEZy
YW1lcy5nZXQoKTsKLSAgICBpZiAoaW5saW5lQ2FsbEZyYW1lcykgewotICAgICAgICBmb3IgKElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lIDogKmlubGluZUNhbGxGcmFtZXMpCi0gICAg
ICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29k
ZUJsb2NrLmdldCgpKTsKLSAgICB9Ci0KLSAgICBhdXRvKiBleGl0SW5saW5lQ2FsbEZyYW1lID0g
ZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAgaWYgKGV4aXRJbmxpbmVD
YWxsRnJhbWUpCi0gICAgICAgIGNvbnRleHQuZnAoKSA9IGNvbnRleHQuZnA8dWludDhfdCo+KCkg
KyBleGl0SW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSk7Ci0KLSAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gZXhpdFN0YXRlLT5qdW1wVGFyZ2V0OwotICAg
IEFTU0VSVChqdW1wVGFyZ2V0KTsKLQotICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigp
KSB7Ci0gICAgICAgIC8vIFNpbmNlIHdlJ3JlIGp1bXBpbmcgdG8gb3BfY2F0Y2gsIHdlIG5lZWQg
dG8gc2V0IGNhbGxGcmFtZUZvckNhdGNoLgotICAgICAgICB2bS5jYWxsRnJhbWVGb3JDYXRjaCA9
IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsKLSAgICB9Ci0KLSAgICB2bS50b3BDYWxsRnJhbWUg
PSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7Ci0KLSAgICBpZiAoZXhpdFN0YXRlLT5pc0p1bXBU
b0xMSW50KSB7Ci0gICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yRXhpdCA9IGJhc2VsaW5l
Q29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soZXhpdC5tX2NvZGVPcmlnaW4s
IGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwotICAgICAgICBjb25zdCBJbnN0
cnVjdGlvbiYgY3VycmVudEluc3RydWN0aW9uID0gKmNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0
aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLnB0cigpOwotCi0gICAgICAgIGNvbnRleHQuZ3ByKExM
SW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpID0gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4oY29kZUJsb2NrRm9yRXhpdC0+bWV0YWRhdGFUYWJsZSgpKTsKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6UmVnaXN0ZXJzOjpwYkdQUikgPSBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90Pihjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnNSYXdQb2ludGVy
KCkpOwotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6UmVnaXN0ZXJzOjpwY0dQUikgPSBzdGF0
aWNfY2FzdDx1aW50cHRyX3Q+KGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKS5vZmZz
ZXQoKSk7Ci0jZWxzZQotICAgICAgICBjb250ZXh0LmdwcihMTEludDo6UmVnaXN0ZXJzOjpwY0dQ
UikgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PigmY3VycmVudEluc3RydWN0aW9uKTsKLSNlbmRp
ZgotCi0gICAgICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQotICAgICAgICAgICAg
dm0udGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93ID0gJmN1cnJlbnRJbnN0cnVjdGlvbjsKLSAg
ICB9Ci0KLSAgICBjb250ZXh0LnBjKCkgPSB1bnRhZ0NvZGVQdHI8SlNFbnRyeVB0clRhZz4oanVt
cFRhcmdldCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50T1NSRXhpdChDb250ZXh0JiBjb250ZXh0
LCB1aW50MzJfdCBvc3JFeGl0SW5kZXgsIGNvbnN0IE9TUkV4aXQmIGV4aXQpCi17Ci0gICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7Ci0gICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIENvZGVCbG9jayog
YWx0ZXJuYXRpdmUgPSBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7Ci0gICAgRXhpdEtpbmQga2lu
ZCA9IGV4aXQubV9raW5kOwotICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBleGl0
Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0KLSAgICBkYXRhTG9nKCJTcGVjdWxhdGlv
biBmYWlsdXJlIGluICIsICpjb2RlQmxvY2spOwotICAgIGRhdGFMb2coIiBAIGV4aXQgIyIsIG9z
ckV4aXRJbmRleCwgIiAoIiwgYnl0ZWNvZGVPZmZzZXQsICIsICIsIGV4aXRLaW5kVG9TdHJpbmco
a2luZCksICIpIHdpdGggIik7Ci0gICAgaWYgKGFsdGVybmF0aXZlKSB7Ci0gICAgICAgIGRhdGFM
b2coCi0gICAgICAgICAgICAiZXhlY3V0ZUNvdW50ZXIgPSAiLCBhbHRlcm5hdGl2ZS0+aml0RXhl
Y3V0ZUNvdW50ZXIoKSwKLSAgICAgICAgICAgICIsIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVy
ID0gIiwgYWx0ZXJuYXRpdmUtPnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCksCi0gICAgICAg
ICAgICAiLCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPSAiLCBhbHRlcm5hdGl2ZS0+b3B0aW1p
emF0aW9uRGVsYXlDb3VudGVyKCkpOwotICAgIH0gZWxzZQotICAgICAgICBkYXRhTG9nKCJubyBh
bHRlcm5hdGl2ZSBjb2RlIGJsb2NrIChpLmUuIHdlJ3ZlIGJlZW4gamV0dGlzb25lZCkiKTsKLSAg
ICBkYXRhTG9nKCIsIG9zckV4aXRDb3VudGVyID0gIiwgY29kZUJsb2NrLT5vc3JFeGl0Q291bnRl
cigpLCAiXG4iKTsKLSAgICBkYXRhTG9nKCIgICAgR1BScyBhdCB0aW1lIG9mIGV4aXQ6Iik7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyAr
K2kpIHsKLSAgICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7Ci0gICAg
ICAgIGRhdGFMb2coIiAiLCBjb250ZXh0Lmdwck5hbWUoZ3ByKSwgIjoiLCBSYXdQb2ludGVyKGNv
bnRleHQuZ3ByPHZvaWQqPihncHIpKSk7Ci0gICAgfQotICAgIGRhdGFMb2coIlxuIik7Ci0gICAg
ZGF0YUxvZygiICAgIEZQUnMgYXQgdGltZSBvZiBleGl0OiIpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7Ci0gICAgICAgIEZQ
UlJlZyBmcHIgPSBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAgICBkYXRhTG9nKCIgIiwg
Y29udGV4dC5mcHJOYW1lKGZwciksICI6Iik7Ci0gICAgICAgIHVpbnQ2NF90IGJpdHMgPSBjb250
ZXh0LmZwcjx1aW50NjRfdD4oZnByKTsKLSAgICAgICAgZG91YmxlIHZhbHVlID0gY29udGV4dC5m
cHIoZnByKTsKLSAgICAgICAgZGF0YUxvZ0YoIiVsbHg6JWxmIiwgc3RhdGljX2Nhc3Q8bG9uZyBs
b25nPihiaXRzKSwgdmFsdWUpOwotICAgIH0KLSAgICBkYXRhTG9nKCJcbiIpOwotfQotCi0vLyBK
SVQgYmFzZWQgT1NSIEV4aXQuCi0KIE9TUkV4aXQ6Ok9TUkV4aXQoRXhpdEtpbmQga2luZCwgSlNW
YWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHZh
bHVlUHJvZmlsZSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgdW5zaWduZWQgc3RyZWFtSW5kZXgsIHVu
c2lnbmVkIHJlY292ZXJ5SW5kZXgpCiAgICAgOiBPU1JFeGl0QmFzZShraW5kLCBqaXQtPm1fb3Jp
Z2luLmZvckV4aXQsIGppdC0+bV9vcmlnaW4uc2VtYW50aWMsIGppdC0+bV9vcmlnaW4ud2FzSG9p
c3RlZCkKICAgICAsIG1fanNWYWx1ZVNvdXJjZShqc1ZhbHVlU291cmNlKQpAQCAtOTU4LDE1ICs3
MCwxOCBAQCBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IE9TUkV4aXQ6OmNvZGVM
b2NhdGlvbkZvclJlcGF0Y2goKSBjb25zdAogCiB2b2lkIE9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJn
dW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVj
b3Zlcnk+JiBvcGVyYW5kcykKIHsKLSAgICBIYXNoTWFwPE1pbmlmaWVkSUQsIGludD4gYWxyZWFk
eUFsbG9jYXRlZEFyZ3VtZW50czsgLy8gTWFwcyBwaGFudG9tIGFyZ3VtZW50cyBub2RlIElEIHRv
IG9wZXJhbmQuCisgICAgSGFzaE1hcDxNaW5pZmllZElELCBWaXJ0dWFsUmVnaXN0ZXI+IGFscmVh
ZHlBbGxvY2F0ZWRBcmd1bWVudHM7IC8vIE1hcHMgcGhhbnRvbSBhcmd1bWVudHMgbm9kZSBJRCB0
byBvcGVyYW5kLgogICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5z
aXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3Zlcnkg
PSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIGludCBvcGVyYW5kID0gb3BlcmFuZHMub3BlcmFu
ZEZvckluZGV4KGluZGV4KTsKIAogICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0g
RGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkCiAgICAgICAgICAgICAmJiByZWNvdmVy
eS50ZWNobmlxdWUoKSAhPSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAorICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBvcGVyYW5kcy5v
cGVyYW5kRm9ySW5kZXgoaW5kZXgpOworICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQorICAg
ICAgICAgICAgY29udGludWU7CisKICAgICAgICAgTWluaWZpZWRJRCBpZCA9IHJlY292ZXJ5Lm5v
ZGVJRCgpOwogICAgICAgICBhdXRvIGl0ZXIgPSBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmZp
bmQoaWQpOwogICAgICAgICBpZiAoaXRlciAhPSBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmVu
ZCgpKSB7CkBAIC05ODcsNyArMTAyLDcgQEAgdm9pZCBPU1JFeGl0OjplbWl0UmVzdG9yZUFyZ3Vt
ZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPcGVyYW5kczxWYWwKIAogICAg
ICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNh
bGwpIHsKICAgICAgICAgICAgIGppdC5sb2FkUHRyKAotICAgICAgICAgICAgICAgIEFzc2VtYmx5
SGVscGVyczo6YWRkcmVzc0ZvcihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSks
CisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKFZpcnR1YWxSZWdp
c3RlcihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpLAogICAgICAgICAgICAg
ICAgIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGppdC5t
b3ZlKApAQCAtOTk3LDcgKzExMiw3IEBAIHZvaWQgT1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVu
dHMoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT3BlcmFuZHM8VmFsCiAKICAgICAg
ICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkg
ewogICAgICAgICAgICAgaml0LmxvYWQzMigKLSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBl
cnM6OnBheWxvYWRGb3Ioc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyksCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2Fk
Rm9yKFZpcnR1YWxSZWdpc3RlcihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKSksCiAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDEpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaml0Lm1vdmUoCkBAIC0xMDIzLDcgKzEzOCw3
IEBAIHZvaWQgT1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQs
IFZNJiB2bSwgY29uc3QgT3BlcmFuZHM8VmFsCiAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5v
bkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgIGppdC5zdG9yZUNlbGwoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kKSk7
CiAKLSAgICAgICAgYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5hZGQoaWQsIG9wZXJhbmQpOwor
ICAgICAgICBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmFkZChpZCwgb3BlcmFuZC52aXJ0dWFs
UmVnaXN0ZXIoKSk7CiAgICAgfQogfQogCkBAIC0xNDY2LDE2ICs1ODEsNzkgQEAgdm9pZCBPU1JF
eGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPU1JFeGl0
JiBleGl0LCBjb25zdAogICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQogICAgICAg
ICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9w
RW50cnlGcmFtZSk7CiAKKyAgICBpZiAoZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lU3RhY2tDb250
YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSkgeworICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2Ugc2hv
dWxkbid0IHVzZSBhIHByb2JlIGJ1dCBmaWxsaW5nIGFsbCB0aGUgc2lkZSBzdGF0ZSBvYmplY3Rz
IGlzIHRyaWNreSBvdGhlcndpc2UuLi4KKyAgICAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+IHZh
bHVlcyhvcGVyYW5kcy5udW1iZXJPZlRtcHMoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgb3BlcmFuZHMubnVtYmVyT2ZUbXBzKCk7ICsraSkKKyAgICAgICAgICAgIHZhbHVlc1tp
XSA9IG9wZXJhbmRzLnRtcChpKTsKKworICAgICAgICBWTSogdm1QdHIgPSAmdm07CisgICAgICAg
IGF1dG8qIHRtcFNjcmF0Y2ggPSBzY3JhdGNoICsgb3BlcmFuZHMudG1wSW5kZXgoMCk7CisgICAg
ICAgIGppdC5wcm9iZShbPSwgdmFsdWVzID0gV1RGTW92ZSh2YWx1ZXMpXSAoUHJvYmU6OkNvbnRl
eHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgIGF1dG8gYWRkU2lkZVN0YXRlID0gWyZdIChDYWxs
RnJhbWUqIGZyYW1lLCBCeXRlY29kZUluZGV4IGluZGV4LCBzaXplX3QgdG1wT2Zmc2V0KSB7Cisg
ICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRl
PiBzaWRlU3RhdGUgPSBXVEY6Om1ha2VVbmlxdWU8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+
KCk7CisKKyAgICAgICAgICAgICAgICBzaWRlU3RhdGUtPmJ5dGVjb2RlSW5kZXggPSBpbmRleDsK
KyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heE51bUNoZWNrcG9pbnRU
bXBzOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byYgcmVjb3ZlcnkgPSB2YWx1ZXNb
aSArIHRtcE9mZnNldF07CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
ZG8gd2hhdCB0aGUgRlRMIGRvZXMgYW5kIG1hdGVyaWFsaXplIGFsbCB0aGUgSlNWYWx1ZXMgaW50
byB0aGUgc2NyYXRjaCBidWZmZXIuCisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3Zl
cnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDb25zdGFudDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9IHJlY292ZXJ5LmNvbnN0
YW50KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAg
ICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgorICAgICAgICAgICAgICAgICAgICBjYXNlIElu
dDMyRGlzcGxhY2VkSW5KU1N0YWNrOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBzaWRlU3Rh
dGUtPnRtcHNbaV0gPSBqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90Pih0bXBTY3JhdGNoW2kg
KyB0bXBPZmZzZXRdKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNl
ZEluSlNTdGFjazoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBVbmJveGVkQ2VsbEluR1BSOgor
ICAgICAgICAgICAgICAgICAgICBjYXNlIENlbGxEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRGlzcGxh
Y2VkSW5KU1N0YWNrOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBzaWRlU3RhdGUtPnRtcHNb
aV0gPSByZWludGVycHJldF9jYXN0PEpTVmFsdWUqPih0bXBTY3JhdGNoKVtpICsgdG1wT2Zmc2V0
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IAorICAgICAgICAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgdm1QdHItPmFkZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoZnJhbWUsIFdURk1vdmUo
c2lkZVN0YXRlKSk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBjb25zdCBDb2RlT3Jp
Z2luKiBjb2RlT3JpZ2luOworICAgICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250
ZXh0LmdwcjxDYWxsRnJhbWUqPihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAg
ICAgICBmb3IgKGNvZGVPcmlnaW4gPSAmZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4gJiYg
Y29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLT5p
bmxpbmVDYWxsRnJhbWUoKS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMoKSkgeworICAgICAg
ICAgICAgICAgIEJ5dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5i
eXRlY29kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjYWxsQnl0ZWNvZGVJbmRleC5j
aGVja3BvaW50KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAg
ICAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1l
KCk7CisgICAgICAgICAgICAgICAgYWRkU2lkZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbEZy
YW1lKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY2FsbEZyYW1lKSArIGlubGluZUNhbGxGcmFt
ZS0+cmV0dXJuUENPZmZzZXQoKSAtIHNpemVvZihDUFVSZWdpc3RlcikpLCBjYWxsQnl0ZWNvZGVJ
bmRleCwgaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoIWNvZGVPcmlnaW4pCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgICAgICBpZiAoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+Ynl0
ZWNvZGVJbmRleCgpOyBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgICAgICAg
ICBhZGRTaWRlU3RhdGUoY2FsbEZyYW1lLCBieXRlY29kZUluZGV4LCAwKTsKKyAgICAgICAgfSk7
CisgICAgfQorCiAgICAgLy8gRG8gYWxsIGRhdGEgZm9ybWF0IGNvbnZlcnNpb25zIGFuZCBzdG9y
ZSB0aGUgcmVzdWx0cyBpbnRvIHRoZSBzdGFjay4KIAogICAgIGZvciAoc2l6ZV90IGluZGV4ID0g
MDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgY29uc3QgVmFs
dWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIFZpcnR1YWxS
ZWdpc3RlciByZWcgPSBvcGVyYW5kcy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChpbmRleCk7Ci0K
LSAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkgJiYgcmVnLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0
PGludD4oaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJl
Z2lzdGVycygpKSkKKyAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gb3BlcmFuZHMub3BlcmFuZEZv
ckluZGV4KGluZGV4KTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIGludCBvcGVyYW5kID0gcmVnLm9mZnNldCgpOworICAgICAg
ICBpZiAob3BlcmFuZC5pc0xvY2FsKCkgJiYgb3BlcmFuZC50b0xvY2FsKCkgPCBzdGF0aWNfY2Fz
dDxpbnQ+KGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxS
ZWdpc3RlcnMoKSkpCisgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBzd2l0Y2ggKHJl
Y292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAppbmRleCBhN2U1ODc4YzA3MTcwOGEx
ZGE3NmMwYjBlYjU0ZDU0ZjFhMDRlYjhlLi45ZTliY2VhNDgxYzFkNjg3Nzk3MmYyNTlkNjJjMWEy
MzAwYjJiMTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaApAQCAtMTUw
LDggKzE1MCw2IEBAIHN0cnVjdCBPU1JFeGl0IDogcHVibGljIE9TUkV4aXRCYXNlIHsKIAogICAg
IGZyaWVuZCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGlsZU9TUkV4aXQoQ2FsbEZy
YW1lKik7CiAKLSAgICBzdGF0aWMgdm9pZCBleGVjdXRlT1NSRXhpdChQcm9iZTo6Q29udGV4dCYp
OwotCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9wYXRjaGFibGVK
dW1wTG9jYXRpb247CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE9TUkV4aXRQdHJUYWc+IG1f
Y29kZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
QmFzZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCmluZGV4
IDMxMDk2M2Q4NDQzNmM1MzMyNzg0ZjBhMjkyYTQ5Y2JlMWI4MmE1OWIuLjAwM2I2MThjZDQ0MGU0
MDBhYmFhY2VjMGFmYmMzYzEyNDM1ZGI5NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRCYXNlLmgKQEAgLTcwLDYgKzcwLDExIEBAIHN0cnVjdCBPU1JFeGl0QmFzZSB7
CiAgICAgICAgIHJldHVybiBtX2tpbmQgPT0gR2VuZXJpY1Vud2luZDsKICAgICB9CiAKKyAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgaXNFeGl0aW5nVG9DaGVja3BvaW50SGFuZGxlcigpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3Bv
aW50KCk7CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBjb25zaWRlckFkZGluZ0FzRnJl
cXVlbnRFeGl0U2l0ZShDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrLCBFeGl0aW5nSklUVHlw
ZSBqaXRUeXBlKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAppbmRleCA3YmE1ZDZlMjJiZTVmYWI0NjJlMjA1
ZTAwMDBkMTg1ZmZkODgwMTI0Li4yN2UyYWE4ZDk4Zjc3YzJjYmZkZDM3ZTJhY2RjNzJmNDhkYzVl
OWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uY3BwCkBAIC0yOSwxMiArMjksMTUgQEAKICNpZiBFTkFCTEUoREZHX0pJ
VCkKIAogI2luY2x1ZGUgIkJ5dGVjb2Rlcy5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0
U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09wZXJh
dGlvbnMuaCIKICNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKKyNpbmNs
dWRlICJMTEludFRodW5rcy5oIgorI2luY2x1ZGUgIlByb2JlQ29udGV4dC5oIgogI2luY2x1ZGUg
IlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
QEAgLTE0Miw2ICsxNDUsMTAgQEAgdm9pZCBoYW5kbGVFeGl0Q291bnRzKFZNJiB2bSwgQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+IGNhbGxlclJldHVyblBDKENvZGVCbG9jayogYmFzZWxpbmVDb2Rl
QmxvY2tGb3JDYWxsZXIsIEJ5dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXgsIElubGluZUNh
bGxGcmFtZTo6S2luZCB0cnVlQ2FsbGVyQ2FsbEtpbmQsIGJvb2wmIGNhbGxlcklzTExJbnQpCiB7
CiAgICAgY2FsbGVySXNMTEludCA9IE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8fCBi
YXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJl
dGVyVGh1bms7CisKKyAgICBpZiAoY2FsbEJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQorICAg
ICAgICByZXR1cm4gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY2hlY2twb2ludF9v
c3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lKTsKKwogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqdW1wVGFyZ2V0OwogCiAgICAgaWYgKGNhbGxlcklz
TExJbnQpIHsKQEAgLTIzNyw3ICsyNDQsNyBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgIC8vIGluIHBy
ZXNlbmNlIG9mIGlubGluZWQgdGFpbCBjYWxscy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NTExCiAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxp
bmVDb2RlKGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKTsKLSAgICBqaXQuc3Rv
cmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5iYXNlbGluZUNvZGVCbG9j
aygpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSk7CisgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbVB0cihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKSksIEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKIAogICAgIGNvbnN0IENvZGVP
cmlnaW4qIGNvZGVPcmlnaW47CiAgICAgZm9yIChjb2RlT3JpZ2luID0gJmV4aXQubV9jb2RlT3Jp
Z2luOyBjb2RlT3JpZ2luICYmIGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpOyBjb2RlT3Jp
Z2luID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCktPmdldENhbGxlclNraXBwaW5nVGFp
bENhbGxzKCkpIHsKQEAgLTMwNCwzMyArMzExLDM0IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZy
YW1lcyhDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCi0gICAgICAg
ICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXls
b2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKKyAgICAgICAgICAg
IGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRG
b3IoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKICNpZiBVU0UoSlNWQUxVRTY0
KQogICAgICAgICBqaXQuc3RvcmVQdHIoY2FsbGVyRnJhbWVHUFIsIEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9mZnNldCgp
KSk7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9y
aWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5iaXRzKCk7Ci0gICAgICAgIGppdC5zdG9yZTMyKEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVyczo6
dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKKyAgICAgICAgdWlu
dDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChiYXNlbGluZUNvZGVCbG9jay0+Ynl0
ZWNvZGVJbmRleEZvckV4aXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKSkuYml0cygpOwor
ICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlv
bkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKSkpOwogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkK
LSAgICAgICAgICAgIGppdC5zdG9yZTY0KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSkp
KSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CisgICAgICAg
ICAgICBqaXQuc3RvcmU2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZShpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKSksIEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICNlbHNlIC8vIFVTRShKU1ZB
TFVFNjQpIC8vIHNvIHRoaXMgaXMgdGhlIDMyLWJpdCBwYXJ0CiAgICAgICAgIGppdC5zdG9yZVB0
cihjYWxsZXJGcmFtZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldChp
bmxpbmVDYWxsRnJhbWUtPmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKICAgICAgICAgY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LmF0KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0gICAgICAgIHVpbnQzMl90
IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChiaXR3aXNlX2Nhc3Q8
dWludDMyX3Q+KGluc3RydWN0aW9uKSkpLmJpdHMoKTsKLSAgICAgICAgaml0LnN0b3JlMzIoQXNz
ZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJz
Ojp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpOwotICAgICAgICBq
aXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKKyAgICAgICAgdWlu
dDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleCgpLmJpdHMoKTsKKyAgICAgICAgaml0
LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNz
ZW1ibHlIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsK
KyAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6Q2VsbFRhZyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3Rlcihpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogICAg
ICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIGpp
dC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1l
LT5jYWxsZWVDb25zdGFudCgpKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFs
UmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpKSk7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSksIEFzc2VtYmx5SGVs
cGVyczo6cGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0
KSAvLyBlbmRpbmcgdGhlICNlbHNlIHBhcnQsIHNvIGRpcmVjdGx5IGFib3ZlIGlzIHRoZSAzMi1i
aXQgcGFydAogICAgIH0KIAogICAgIC8vIERvbid0IG5lZWQgdG8gc2V0IHRoZSB0b3BsZXZlbCBj
b2RlIG9yaWdpbiBpZiB3ZSBvbmx5IGRpZCBpbmxpbmUgdGFpbCBjYWxscwogICAgIGlmIChjb2Rl
T3JpZ2luKSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25C
aXRzID0gQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLmJpdHMoKTsK
KyAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUlu
ZGV4KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKSkpLmJpdHMoKTsKICNlbHNl
Ci0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGppdC5iYXNlbGluZUNv
ZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkp
LnB0cigpOwotICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KEJ5
dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikpKS5iaXRzKCk7
CisgICAgICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5i
eXRlY29kZUluZGV4Rm9yRXhpdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpOworICAgICAg
ICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2so
KS0+aW5zdHJ1Y3Rpb25zKGJ5dGVjb2RlSW5kZXgpLmF0KCkucHRyKCk7CisgICAgICAgIHVpbnQz
Ml90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90Pihp
bnN0cnVjdGlvbikpLmJpdHMoKTsKICNlbmRpZgotICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJs
eUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRh
Z0ZvcigoVmlydHVhbFJlZ2lzdGVyKShDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcykpKTsKKyAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVk
SW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICB9CiB9CiAKQEAgLTM4NSw3ICsz
OTMsMTEgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAgICAgaWYgKGV4aXRUb0xMSW50KSB7CiAg
ICAgICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgoKTsKICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICpj
b2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5wdHIoKTsK
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9u
ID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY3VycmVudEluc3RydWN0aW9uKTsK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9u
OworICAgICAgICBpZiAoYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICBk
ZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGNoZWNrcG9pbnRf
b3NyX2V4aXRfdHJhbXBvbGluZSk7CisgICAgICAgIGVsc2UgCisgICAgICAgICAgICBkZXN0aW5h
dGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlv
bik7CiAKICAgICAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKICAgICAgICAg
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmY3VycmVudEluc3RydWN0
aW9uKSwgR1BSSW5mbzo6cmVnVDIpOwpAQCAtNDAxLDEwICs0MTMsMTggQEAgdm9pZCBhZGp1c3RB
bmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJh
c2UmIGV4aXQpCiAjZW5kaWYKICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLnJldGFn
Z2VkPE9TUkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24gPSBj
b2RlQmxvY2tGb3JFeGl0LT5qaXRDb2RlTWFwKCkuZmluZChleGl0Lm1fY29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KCkpOwotICAgICAgICBBU1NFUlQoY29kZUxvY2F0aW9uKTsKKyAgICAgICAgQnl0
ZWNvZGVJbmRleCBleGl0SW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlv
bjsKKyAgICAgICAgaWYgKGV4aXRJbmRleC5jaGVja3BvaW50KCkpCisgICAgICAgICAgICBkZXN0
aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGNoZWNrcG9pbnRfb3Ny
X2V4aXRfdHJhbXBvbGluZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKGNv
ZGVCbG9ja0ZvckV4aXQtPmJ5dGVjb2RlSW5kZXhGb3JFeGl0KGV4aXRJbmRleCkgPT0gZXhpdElu
ZGV4KTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gY29kZUJsb2NrRm9yRXhpdC0+aml0Q29k
ZU1hcCgpLmZpbmQoZXhpdEluZGV4KTsKKyAgICAgICAgfQogCi0gICAgICAgIGp1bXBUYXJnZXQg
PSBjb2RlTG9jYXRpb24ucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVz
cygpOworICAgICAgICBBU1NFUlQoZGVzdGluYXRpb24pOworCisgICAgICAgIGp1bXBUYXJnZXQg
PSBkZXN0aW5hdGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNz
KCk7CiAgICAgfQogCiAgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0z
MihKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2tGb3JFeGl0KSAqIHNpemVvZihS
ZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQXNzZW1ibHlIZWxwZXJzOjpz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAppbmRleCBhOTk1
OTdmNjY0MzhjZGE3ODRlZTM5NmQzMWU0MTY4YWIzZjk4NjExLi5iODU5NTk4MTA3MTA4MDRjMjUy
Nzc2NTI1ZTUxMjZjNjNhMjZlNzZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKQEAgLTIy
NDIsNyArMjI0Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobV9oZWFwLmZvbGxvdyhh
dmFpbGFiaWxpdHkubV9sb2NhbHNbaV0ubm9kZSgpKSAhPSBlc2NhcGVlKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGF2YWlsYWJpbGl0eS5t
X2xvY2Fscy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQg
PSBhdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNw
ZWNOb25lLCBNb3ZIaW50LCBvcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwgT3BJbmZvKG9w
ZXJhbmQpLAogICAgICAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvbi0+ZGVmYXVsdEVkZ2UoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wSW5mby5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcEluZm8uaAppbmRleCBmMzljMTRiOWYwYTQ0ODc4
OWQ3NzJkYzI3ZGYxNTg4MWU1MDg2ODk1Li43N2VmY2ZiMjQ4MDAyYTRiZjVlYTYwYTZlNjY1MjBm
ZTA1MTQ0YmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wSW5m
by5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BJbmZvLmgKQEAgLTQ0LDcg
KzQ0LDcgQEAgc3RydWN0IE9wSW5mbyB7CiAgICAgZXhwbGljaXQgT3BJbmZvKEludGVncmFsVHlw
ZSB2YWx1ZSkKICAgICAgICAgOiBtX3ZhbHVlKHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZSkp
IHsgfQogICAgIGV4cGxpY2l0IE9wSW5mbyhSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkg
OiBtX3ZhbHVlKHN0YXRpY19jYXN0PHVpbnQ2NF90PihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihz
dHJ1Y3R1cmUpKSkgeyB9Ci0KKyAgICBleHBsaWNpdCBPcEluZm8oT3BlcmFuZCBvcCkgOiBtX3Zh
bHVlKG9wLmFzQml0cygpKSB7IH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgIGV4
cGxpY2l0IE9wSW5mbyhUKiBwdHIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAppbmRleCBiYjVjODM1OWMxMjg1YWNiMzYxMWRiNTI3NjhmMzUwOTA4ZjA0ZjYz
Li5jZGFmN2JlOGRjZmE0MGI5MWU2NzZiNjc1NGM4MGU3NGY2NWQxM2EyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKQEAgLTI5NzEsMTcgKzI5NzEsMTgg
QEAgaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5SW5kZXhPZlZhbHVlRG91Ymxl
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmoKICAgICByZXR1cm4gLTE7CiB9CiAKLXZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25Mb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBpbnQzMl90IGZpcnN0RWxlbWVudERlc3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1
bWVudHMsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBtYW5kYXRv
cnlNaW5pbXVtKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxvYWRWYXJhcmdzKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgZmlyc3RFbGVtZW50RGVzdCwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEFyZ3VtZW50cywgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5n
dGhJbmNsdWRpbmdUaGlzLCB1aW50MzJfdCBtYW5kYXRvcnlNaW5pbXVtKQogeworICAgIFZpcnR1
YWxSZWdpc3RlciBmaXJzdEVsZW1lbnQgeyBmaXJzdEVsZW1lbnREZXN0IH07CiAgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFS
RV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50cyk7CiAgICAgCi0gICAgbG9hZFZhcmFyZ3MoZ2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlcihmaXJzdEVsZW1lbnREZXN0KSwgYXJn
dW1lbnRzLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgbG9hZFZhcmFyZ3MoZ2xvYmFsT2JqZWN0LCBi
aXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCZjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50KSksIGFyZ3Vt
ZW50cywgb2Zmc2V0LCBsZW5ndGhJbmNsdWRpbmdUaGlzIC0gMSk7CiAgICAgCi0gICAgZm9yICh1
aW50MzJfdCBpID0gbGVuZ3RoOyBpIDwgbWFuZGF0b3J5TWluaW11bTsgKytpKQotICAgICAgICBj
YWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0ganNVbmRlZmluZWQoKTsKKyAgICBm
b3IgKHVpbnQzMl90IGkgPSBsZW5ndGhJbmNsdWRpbmdUaGlzIC0gMTsgaSA8IG1hbmRhdG9yeU1p
bmltdW07ICsraSkKKyAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudCArIGkpID0ganNV
bmRlZmluZWQoKTsKIH0KIAogZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50
cyhpbnQzMl90IGEsIGludDMyX3QgYikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcAppbmRleCBjYmMyYzhiZmFlNGU5NGQw
OTVkZGM5MTU3ZGIzNmFiNWEwYzZhZGMyLi4yYjEwNWIyY2FkZTdiN2Q1NTg5ZmFkZWFmYjAyYmMw
OTY0NWUwOWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50
b21JbnNlcnRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
aGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwCkBAIC00MywxMSArNDMsOCBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKIG5hbWVzcGFjZSB7CiAKLW5hbWVzcGFjZSBERkdQaGFudG9t
SW5zZXJ0aW9uUGhhc2VJbnRlcm5hbCB7Ci1zdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9
IGZhbHNlOwotfQotCiBjbGFzcyBQaGFudG9tSW5zZXJ0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2Ug
eworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBwdWJsaWM6CiAg
ICAgUGhhbnRvbUluc2VydGlvblBoYXNlKEdyYXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFzZShn
cmFwaCwgInBoYW50b20gaW5zZXJ0aW9uIikKQEAgLTYyLDcgKzU5LDcgQEAgcHVibGljOgogICAg
ICAgICAvLyBTZXRMb2NhbHMgZXhlY3V0ZSwgd2hpY2ggaXMgaW5hY2N1cmF0ZS4gVGhhdCBjYXVz
ZXMgdXMgdG8gaW5zZXJ0IHRvbyBmZXcgUGhhbnRvbXMuCiAgICAgICAgIERGR19BU1NFUlQobV9n
cmFwaCwgbnVsbHB0ciwgbV9ncmFwaC5tX3JlZkNvdW50U3RhdGUgPT0gRXhhY3RSZWZDb3VudCk7
CiAgICAgICAgIAotICAgICAgICBpZiAoREZHUGhhbnRvbUluc2VydGlvblBoYXNlSW50ZXJuYWw6
OnZlcmJvc2UpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2co
IkdyYXBoIGJlZm9yZSBQaGFudG9tIGluc2VydGlvbjpcbiIpOwogICAgICAgICAgICAgbV9ncmFw
aC5kdW1wKCk7CiAgICAgICAgIH0KQEAgLTcyLDcgKzY5LDcgQEAgcHVibGljOgogICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKQog
ICAgICAgICAgICAgaGFuZGxlQmxvY2soYmxvY2spOwogICAgICAgICAKLSAgICAgICAgaWYgKERG
R1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgIGlmICh2
ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBhZnRlciBQaGFudG9tIGluc2Vy
dGlvbjpcbiIpOwogICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CiAgICAgICAgIH0KQEAgLTEw
MywyMiArMTAwLDIyIEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIGxhc3RFeGl0aW5nSW5k
ZXggPSAwOwogICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8
IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0g
YmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICBpZiAoREZHUGhhbnRvbUluc2VydGlv
blBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyAiLCBub2RlLCAiXG4iKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNl
IE1vdkhpbnQ6Ci0gICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT51bmxpbmtl
ZExvY2FsKCkpID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIG1fdmFs
dWVzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgY2FzZSBab21iaWVIaW50OgotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9k
ZS0+dW5saW5rZWRMb2NhbCgpKSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV92YWx1ZXMu
b3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBudWxscHRyOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgY2Fz
ZSBTZXRBcmd1bWVudERlZmluaXRlbHk6CiAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50TWF5
YmU6Ci0gICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG51
bGxwdHI7CisgICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkp
ID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGRlZmF1bHQ6CkBAIC0xMzQsMzggKzEzMSw0MiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCiAgICAgICAgICAgICAgICAgbm9kZSwKICAgICAg
ICAgICAgICAgICBbJl0gKEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
TG5JZih2ZXJib3NlLCAiVXBkYXRpbmcgZXBvY2ggZm9yICIsIGVkZ2UsICIgdG8gIiwgY3VycmVu
dEVwb2NoKTsKICAgICAgICAgICAgICAgICAgICAgZWRnZS0+c2V0RXBvY2goY3VycmVudEVwb2No
KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbm9kZS0+
c2V0RXBvY2goY3VycmVudEVwb2NoKTsKIAotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFs
cmVhZHlLaWxsZWQ7CisgICAgICAgICAgICBPcGVyYW5kIGFscmVhZHlLaWxsZWQ7CiAKLSAgICAg
ICAgICAgIGF1dG8gcHJvY2Vzc0tpbGxlZE9wZXJhbmQgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBy
ZWcpIHsKLSAgICAgICAgICAgICAgICBpZiAoREZHUGhhbnRvbUluc2VydGlvblBoYXNlSW50ZXJu
YWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBLaWxsZWQgb3Bl
cmFuZDogIiwgcmVnLCAiXG4iKTsKKyAgICAgICAgICAgIGF1dG8gcHJvY2Vzc0tpbGxlZE9wZXJh
bmQgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgIGRhdGFMb2dMbklm
KHZlcmJvc2UsICIgICAgS2lsbGVkIG9wZXJhbmQ6ICIsIG9wZXJhbmQpOwogCiAgICAgICAgICAg
ICAgICAgLy8gQWxyZWFkeSBoYW5kbGVkIGZyb20gU2V0TG9jYWwuCi0gICAgICAgICAgICAgICAg
aWYgKHJlZyA9PSBhbHJlYWR5S2lsbGVkKQorICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kID09
IGFscmVhZHlLaWxsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9z
ZSwgIiAgICBPcGVyYW5kICIsIG9wZXJhbmQsICIgYWxyZWFkeSBraWxsZWQgYnkgc2V0IGxvY2Fs
Iik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTm9kZSoga2lsbGVkTm9kZSA9IG1fdmFsdWVz
Lm9wZXJhbmQocmVnKTsKLSAgICAgICAgICAgICAgICBpZiAoIWtpbGxlZE5vZGUpCisgICAgICAg
ICAgICAgICAgTm9kZSoga2lsbGVkTm9kZSA9IG1fdmFsdWVzLm9wZXJhbmQob3BlcmFuZCk7IAor
ICAgICAgICAgICAgICAgIGlmICgha2lsbGVkTm9kZSkgeworICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nTG5JZih2ZXJib3NlLCAiICAgIE9wZXJhbmQgIiwgb3BlcmFuZCwgIiB3YXMgbm90IGRl
ZmluZWQgaW4gdGhpcyBibG9jay4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQocmVnKSA9
IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChvcGVyYW5kKSA9IG51
bGxwdHI7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVk
IHRvIGluc2VydCBhIFBoYW50b20gaWYgdGhlIG5vZGUgaGFzbid0IGJlZW4gdXNlZCBzaW5jZSB0
aGUgbGFzdAogICAgICAgICAgICAgICAgIC8vIGV4aXQsIGFuZCB3YXMgYm9ybiBiZWZvcmUgdGhl
IGxhc3QgZXhpdC4KLSAgICAgICAgICAgICAgICBpZiAoa2lsbGVkTm9kZS0+ZXBvY2goKSA9PSBj
dXJyZW50RXBvY2gpCisgICAgICAgICAgICAgICAgaWYgKGtpbGxlZE5vZGUtPmVwb2NoKCkgPT0g
Y3VycmVudEVwb2NoKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2Us
ICIgICAgT3BlcmFuZCAiLCBvcGVyYW5kLCAiIGhhcyBjdXJyZW50IGVwb2NoICIsIGN1cnJlbnRF
cG9jaCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBpZiAoREZHUGhhbnRvbUluc2VydGlvblBoYXNlSW50ZXJuYWw6OnZlcmJv
c2UpIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICAgICAgICAg
ICAgICIgICAgSW5zZXJ0aW5nIFBoYW50b20gb24gIiwga2lsbGVkTm9kZSwgIiBhZnRlciAiLAot
ICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPmF0KGxhc3RFeGl0aW5nSW5kZXgpLCAiXG4i
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ZGF0YUxvZ0xuSWYodmVyYm9zZSwKKyAgICAgICAgICAgICAgICAgICAgIiAgICBJbnNlcnRpbmcg
UGhhbnRvbSBvbiAiLCBraWxsZWROb2RlLCAiIGFmdGVyICIsCisgICAgICAgICAgICAgICAgICAg
IGJsb2NrLT5hdChsYXN0RXhpdGluZ0luZGV4KSk7CisgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgLy8gV2UgaGF2ZSBleGFjdCByZWYgY291bnRzLCBzbyBjcmVhdGluZyBhIG5ldyB1
c2UgbWVhbnMgdGhhdCB3ZSBoYXZlIHRvCiAgICAgICAgICAgICAgICAgLy8gaW5jcmVtZW50IHRo
ZSByZWYgY291bnQuCiAgICAgICAgICAgICAgICAga2lsbGVkTm9kZS0+cG9zdGZpeFJlZigpOwpA
QCAtMTc5LDE0ICsxODAsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH07CiAKICAgICAgICAg
ICAgIGlmIChub2RlLT5vcCgpID09IFNldExvY2FsKSB7Ci0gICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5k
IG9wZXJhbmQgPSBub2RlLT5vcGVyYW5kKCk7CiAgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXlF
eGl0KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBTZXRMb2NhbCBkb2VzIGV4aXQs
IHdlIG5lZWQgdGhlIE1vdkhpbnQgb2YgaXRzIGxvY2FsCiAgICAgICAgICAgICAgICAgICAgIC8v
IHRvIGJlIGxpdmUgdW50aWwgdGhlIFNldExvY2FsIGlzIGRvbmUuCi0gICAgICAgICAgICAgICAg
ICAgIHByb2Nlc3NLaWxsZWRPcGVyYW5kKGxvY2FsKTsKLSAgICAgICAgICAgICAgICAgICAgYWxy
ZWFkeUtpbGxlZCA9IGxvY2FsOworICAgICAgICAgICAgICAgICAgICBwcm9jZXNzS2lsbGVkT3Bl
cmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUtpbGxlZCA9IG9wZXJh
bmQ7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQo
bG9jYWwpID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG9wZXJh
bmQpID0gbnVsbHB0cjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZm9yQWxsS2lsbGVk
T3BlcmFuZHMobV9ncmFwaCwgbm9kZSwgYmxvY2stPnRyeUF0KG5vZGVJbmRleCArIDEpLCBwcm9j
ZXNzS2lsbGVkT3BlcmFuZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCmluZGV4IDEyOGM4NDFmMGFjN2Y5ZGViNjJmN2U2
ZmM0NjNhNTI4NzM0Yzc1NTkuLjM2MTgxYTI4MjEzMzllODhiNjYzYzY1ODcxYzBkYTNjYzQ0ZGU4
YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2Fs
Q2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxv
Y2FsQ2xvYmJlcml6ZS5oCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhbGxJ
ZkFwcHJvcHJpYXRlKG1fcmVhZCwgVmlydHVhbFJlZ2lzdGVyKGhlYXAucGF5bG9hZCgpLnZhbHVl
MzIoKSkpOworICAgICAgICAgICAgY2FsbElmQXBwcm9wcmlhdGUobV9yZWFkLCBoZWFwLm9wZXJh
bmQoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkBAIC02OCw3
ICs2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gV2UgZXhwZWN0IHN0YWNrIHdyaXRlcyB0byBh
bHJlYWR5IGJlIHByZWNpc2VseSBjaGFyYWN0ZXJpemVkIGJ5IERGRzo6Y2xvYmJlcml6ZSgpLgog
ICAgICAgICBpZiAoaGVhcC5raW5kKCkgPT0gU3RhY2spIHsKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKTsKLSAgICAgICAgICAgIGNhbGxJZkFwcHJv
cHJpYXRlKG1fdW5jb25kaXRpb25hbFdyaXRlLCBWaXJ0dWFsUmVnaXN0ZXIoaGVhcC5wYXlsb2Fk
KCkudmFsdWUzMigpKSk7CisgICAgICAgICAgICBjYWxsSWZBcHByb3ByaWF0ZShtX3VuY29uZGl0
aW9uYWxXcml0ZSwgaGVhcC5vcGVyYW5kKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIApAQCAtODcsMTIgKzg3LDEyIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGxvY2F0aW9uLmhlYXAoKS5raW5kKCkgPT0gU3RhY2spOwogICAg
ICAgICAKLSAgICAgICAgbV9kZWYoVmlydHVhbFJlZ2lzdGVyKGxvY2F0aW9uLmhlYXAoKS5wYXls
b2FkKCkudmFsdWUzMigpKSwgbm9kZSk7CisgICAgICAgIG1fZGVmKGxvY2F0aW9uLmhlYXAoKS5v
cGVyYW5kKCksIG5vZGUpOwogICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGNhbGxJZkFwcHJvcHJpYXRlKGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIHZvaWQgY2FsbElmQXBwcm9w
cmlhdGUoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgT3BlcmFuZCBvcGVyYW5kKQogICAgIHsKICAg
ICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihvcGVy
YW5kLnRvTG9jYWwoKSkgPj0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJl
ck9mTG9jYWxzKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMDksMTMgKzEwOSwxMyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpIHsKICAgICAgICAgICAg
ICAgICAvLyBSZWFkIHRoZSBvdXRlcm1vc3QgYXJndW1lbnRzIGFuZCBhcmd1bWVudCBjb3VudC4K
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tp
cDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2dyYXBoLm1fY29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCkpOyBpKyspCi0gICAgICAgICAgICAgICAgICAgIG1fcmVhZCh2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudChpKSk7CisgICAgICAgICAgICAgICAgICAgIG1fcmVhZCh2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkpOwogICAgICAgICAgICAgICAgIG1fcmVh
ZChWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
OyBpIDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNXaXRoRml4dXAuc2l6ZSgpOyBpKyspCi0g
ICAgICAgICAgICAgICAgbV9yZWFkKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkub2Zmc2V0KCkpKTsKKyAg
ICAgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkub2Zm
c2V0KCkpKTsKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQog
ICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7
CiAgICAgICAgIH07CkBAIC0yMjUsMTQgKzIyNSwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
dW5zaWduZWQgaW5kZXhJbmNsdWRpbmdUaGlzID0gbV9ub2RlLT5hcmd1bWVudEluZGV4KCk7CiAg
ICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkgewogICAgICAgICAgICAgICAgIGlmIChp
bmRleEluY2x1ZGluZ1RoaXMgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9ncmFwaC5tX2NvZGVC
bG9jay0+bnVtUGFyYW1ldGVycygpKSkKLSAgICAgICAgICAgICAgICAgICAgbV9yZWFkKHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4SW5jbHVkaW5nVGhpcykpOworICAgICAgICAgICAg
ICAgICAgICBtX3JlYWQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGlu
ZGV4SW5jbHVkaW5nVGhpcykpOwogICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0
ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRShpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpLCAiR2V0QXJndW1lbnQgaXMgb25s
eSB1c2VkIGZvciBJbmxpbmVDYWxsRnJhbWUgaWYgdGhlIGNhbGwgZnJhbWUgaXMgdmFyYXJncy4i
KTsKICAgICAgICAgICAgIGlmIChpbmRleEluY2x1ZGluZ1RoaXMgPCBpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50c1dpdGhGaXh1cC5zaXplKCkpCi0gICAgICAgICAgICAgICAgbV9yZWFkKFZpcnR1
YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoaW5kZXhJbmNsdWRpbmdUaGlzKS5vZmZzZXQoKSkpOworICAgICAgICAgICAg
ICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpbmRleEluY2x1ZGluZ1Ro
aXMpLm9mZnNldCgpKSk7CiAgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcykpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTI0MSw3ICsy
NDEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gQWxsIG9mIHRoZSBvdXRlcm1vc3QgYXJn
dW1lbnRzLCBleGNlcHQgdGhpcywgYXJlIHJlYWQgaW4gc2xvcHB5IG1vZGUuCiAgICAgICAgICAg
ICBpZiAoIW1fZ3JhcGgubV9jb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKSB7CiAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KQotICAgICAgICAgICAgICAgICAgICBtX3JlYWQodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoaSkpOworICAgICAgICAgICAgICAgICAgICBtX3JlYWQodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgICAgICAvLyBUaGUgc3RhY2sgaGVhZGVyIGlzIHJlYWQuCkBAIC0yNTIsNyArMjUyLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUgPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsgaW5saW5l
Q2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUtPmdldENhbGxlcklu
bGluZUZyYW1lU2tpcHBpbmdUYWlsQ2FsbHMoKSkgewogICAgICAgICAgICAgICAgIGlmICghaW5s
aW5lQ2FsbEZyYW1lLT5pc1N0cmljdE1vZGUoKSkgewogICAgICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1dpdGhGaXh1cC5zaXplKCk7
IGktLTspCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChp
KS5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9yZWFkKFZpcnR1YWxSZWdp
c3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnRJbmNsdWRpbmdUaGlzKGkpLm9mZnNldCgpKSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAgICAg
ICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCmluZGV4
IDQ0N2UyNGUyYTExNjMzN2M4M2UzYmFhMzEyNzM1NzkyYjkwNDcyOWQuLjViNGY5OTI5MzQxMTc5
YzIwNDk5NTJiZGMzODY5NjUyOWYwZmMzMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAKQEAgLTcyLDcg
KzcyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
Y29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzID0gbV9n
cmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcygpOwogICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgaW50IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAg
ICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRG
b3JJbmRleChpKTsKICAgICAgICAgICAgICAgICBPcHRpb25hbDxKU1ZhbHVlPiB2YWx1ZSA9IG11
c3RIYW5kbGVWYWx1ZXNbaV07CiAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IGYxMWNlNzY0
YjM5NmQ5YTNhOWZmN2E4ZDVlYzRjMThhZTExZTQ3MDcuLmY5MmFlOWRiMGJkN2QzODFlMGViNWZh
Mjc2MDc2ZDFhNDE5ZDAzNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0xMzc0LDYgKzEz
NzQsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgWm9t
YmllSGludDoKICAgICAgICAgY2FzZSBFeGl0T0s6CisgICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0
aDoKICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJn
czoKICAgICAgICAgY2FzZSBQdXREeW5hbWljVmFyOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAppbmRleCA4NzI3NzYwYzZl
Y2JkYjMyZWFlNjAzYmFjYmQxMDAzNzRkODE0ZmU3Li5jOTc5MzM1YTMwMWVmNDZiOTkyM2VkZmY1
NTZiZTczZDU3ZjU4ZjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcApAQCAtNDIsMTEgKzQyLDggQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBuYW1lc3BhY2UgewogCi1uYW1lc3BhY2UgREZHUHV0
U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbCB7Ci1zdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9z
ZSA9IGZhbHNlOwotfQotCiBjbGFzcyBQdXRTdGFja1NpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFz
ZSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIHB1YmxpYzoK
ICAgICBQdXRTdGFja1NpbmtpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2Uo
Z3JhcGgsICJQdXRTdGFjayBzaW5raW5nIikKQEAgLTczLDcgKzcwLDcgQEAgcHVibGljOgogICAg
ICAgICAvLyB0aGUgc3RhY2suIEl0J3Mgbm90IGNsZWFyIHRvIG1lIGlmIHRoaXMgaXMgaW1wb3J0
YW50IG9yIG5vdC4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0NTI5NgogICAgICAgICAKLSAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1Bo
YXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAg
ICAgIGRhdGFMb2coIkdyYXBoIGJlZm9yZSBQdXRTdGFjayBzaW5raW5nOlxuIik7CiAgICAgICAg
ICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQpAQCAtODgsMTEgKzg1LDggQEAgcHVibGlj
OgogICAgICAgICBCbG9ja01hcDxPcGVyYW5kczxib29sPj4gbGl2ZUF0VGFpbChtX2dyYXBoKTsK
ICAgICAgICAgCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nr
c0luTmF0dXJhbE9yZGVyKCkpIHsKLSAgICAgICAgICAgIGxpdmVBdEhlYWRbYmxvY2tdID0gT3Bl
cmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAg
ICAgICAgIGxpdmVBdFRhaWxbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBi
bG9jay0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbGl2ZUF0
SGVhZFtibG9ja10uZmlsbChmYWxzZSk7Ci0gICAgICAgICAgICBsaXZlQXRUYWlsW2Jsb2NrXS5m
aWxsKGZhbHNlKTsKKyAgICAgICAgICAgIGxpdmVBdEhlYWRbYmxvY2tdID0gT3BlcmFuZHM8Ym9v
bD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkLCBmYWxzZSk7CisgICAgICAg
ICAgICBsaXZlQXRUYWlsW2Jsb2NrXSA9IE9wZXJhbmRzPGJvb2w+KE9wZXJhbmRzTGlrZSwgYmxv
Y2stPnZhcmlhYmxlc0F0SGVhZCwgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBib29sIGNoYW5nZWQ7CkBAIC0xMDcsMzMgKzEwMSwzNCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgT3BlcmFuZHM8Ym9vbD4gbGl2ZSA9IGxpdmVBdFRhaWxbYmxvY2tdOwogICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4
LS07KSB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUlu
ZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50
ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTGl2ZSBhdCAiLCBub2RlLCAiOiAiLCBsaXZlLCAi
XG4iKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIFZlY3RvcjxW
aXJ0dWFsUmVnaXN0ZXIsIDQ+IHJlYWRzOwotICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Vmly
dHVhbFJlZ2lzdGVyLCA0PiB3cml0ZXM7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBl
SGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgVmVjdG9yPE9wZXJhbmQsIDQ+IHJlYWRzOworICAgICAgICAgICAgICAgICAgICBWZWN0
b3I8T3BlcmFuZCwgND4gd3JpdGVzOworICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhh
bmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJ
bnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAiLCBvcGVyYW5kLCAiIGlz
IGxpdmUgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICByZWFkcy5h
cHBlbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9w
ZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBQdXRTdGFjayB8fCBub2RlLT5vcCgp
ID09IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MgfHwgbm9kZS0+
b3AoKSA9PSBLaWxsU3RhY2spOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBvcCA9IG5v
ZGUtPm9wKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChvcCA9PSBQ
dXRTdGFjayB8fCBvcCA9PSBMb2FkVmFyYXJncyB8fCBvcCA9PSBGb3J3YXJkVmFyYXJncyB8fCBv
cCA9PSBLaWxsU3RhY2spOwogICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVzLmFwcGVuZChv
cGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgICAgICAgICBw
cmVjaXNlTG9jYWxDbG9iYmVyaXplKAogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwg
bm9kZSwgZXNjYXBlSGFuZGxlciwgd3JpdGVIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIsIExhenlOb2RlKSB7IH0pOworICAgICAgICAgICAgICAg
ICAgICAgICAgWyZdIChPcGVyYW5kLCBMYXp5Tm9kZSkgeyB9KTsKIAotICAgICAgICAgICAgICAg
ICAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIDogd3JpdGVzKQorICAgICAgICAgICAg
ICAgICAgICBmb3IgKE9wZXJhbmQgb3BlcmFuZCA6IHdyaXRlcykKICAgICAgICAgICAgICAgICAg
ICAgICAgIGxpdmUub3BlcmFuZChvcGVyYW5kKSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAg
ICBmb3IgKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIDogcmVhZHMpCisgICAgICAgICAgICAgICAg
ICAgIGZvciAoT3BlcmFuZCBvcGVyYW5kIDogcmVhZHMpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBsaXZlLm9wZXJhbmQob3BlcmFuZCkgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAKQEAgLTIzNCw3ICsyMjksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
T3BlcmFuZHM8Rmx1c2hGb3JtYXQ+IGRlZmVycmVkID0gZGVmZXJyZWRBdEhlYWRbYmxvY2tdOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9j
aykgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRl
cm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCJEZWZlcnJlZCBhdCAiLCBub2RlLCAiOiIsIGRlZmVy
cmVkLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlm
IChub2RlLT5vcCgpID09IEdldFN0YWNrKSB7CkBAIC0yNjEsNyArMjU2LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1MDM5OAogCiAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzQ29uZmxp
Y3RpbmcgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9k
ZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSA9PSBDb25mbGljdGluZ0ZsdXNoOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NE
YXRhKCktPm9wZXJhbmQpID09IENvbmZsaWN0aW5nRmx1c2g7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgIWlz
Q29uZmxpY3RpbmcpOwpAQCAtMjc1LDE3ICsyNzAsMjAgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gZnJvbS4KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPm9wKCkgPT0gUHV0U3RhY2spIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gbm9kZS0+
c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsOworICAgICAgICAgICAgICAgICAgICAgICAgT3BlcmFu
ZCBvcGVyYW5kID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiU2V0dGluZyBmbHVzaCBmb3JtYXQg
Zm9yICIsIG5vZGUsICIgYXQgb3BlcmFuZCAiLCBvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEo
KS0+Zm9ybWF0OwogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+b3AoKSA9PSBLaWxsU3RhY2spIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gc2luayBhIFB1dFN0YWNrIHBhc3Qg
YSBLaWxsU3RhY2suCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5v
ZGUtPnVubGlua2VkTG9jYWwoKSkgPSBDb25mbGljdGluZ0ZsdXNoOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
Z0xuKCJLaWxsaW5nIHN0YWNrIGZvciAiLCBub2RlLT51bmxpbmtlZE9wZXJhbmQoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFu
ZCgpKSA9IENvbmZsaWN0aW5nRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byBlc2NhcGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1Bo
YXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFu
ZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJGb3IgIiwg
bm9kZSwgIiBlc2NhcGluZyAiLCBvcGVyYW5kLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMjkzLDE2ICsyOTEsMTggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAgICAg
ICAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsm
XSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byB3
cml0ZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzVG1wKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09
IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBWYXJhcmdzTGVuZ3Ro
IHx8IG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFy
YXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiV3Jp
dGluZyBkZWFkIGZsdXNoIGZvciAiLCBub2RlLCAiIGF0IG9wZXJhbmQgIiwgb3BlcmFuZCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVhZEZs
dXNoOwogICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSgKICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIsIHdyaXRlSGFuZGxlciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyLCBMYXp5Tm9kZSkgeyB9KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCwgTGF6eU5vZGUpIHsgfSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChk
ZWZlcnJlZCA9PSBkZWZlcnJlZEF0VGFpbFtibG9ja10pCkBAIC0zMTMsMTMgKzMxMywxMyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CiAgICAgICAgICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSBkZWZlcnJlZC5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nICIsIFZpcnR1
YWxSZWdpc3RlcihkZWZlcnJlZC5vcGVyYW5kRm9ySW5kZXgoaSkpLCAiIGF0ICIsIHBvaW50ZXJE
dW1wKGJsb2NrKSwgIi0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yKSwgIjogIiwgZGVmZXJyZWRb
aV0sICIgYW5kICIsIGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0sICIgbWVyZ2VzIHRvICIp
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgIiwgZGVmZXJyZWQub3BlcmFuZEZvcklu
ZGV4KGkpLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIi0+IiwgcG9pbnRlckR1bXAoc3Vj
Y2Vzc29yKSwgIjogIiwgZGVmZXJyZWRbaV0sICIgYW5kICIsIGRlZmVycmVkQXRIZWFkW3N1Y2Nl
c3Nvcl1baV0sICIgbWVyZ2VzIHRvICIpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZl
cnJlZEF0SGVhZFtzdWNjZXNzb3JdW2ldID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
ZXJnZShkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JdW2ldLCBkZWZlcnJlZFtpXSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFj
a1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhkZWZlcnJl
ZEF0SGVhZFtzdWNjZXNzb3JdW2ldLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIH0KQEAgLTM1MiwxMCArMzUyLDEwIEBAIHB1YmxpYzoKICAgICAgICAgCiAg
ICAgICAgIE9wZXJhbmRzPFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKj4gb3BlcmFuZFRvVmFyaWFi
bGUoCiAgICAgICAgICAgICBPcGVyYW5kc0xpa2UsIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxl
c0F0SGVhZCk7Ci0gICAgICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+IGluZGV4VG9PcGVyYW5k
OworICAgICAgICBWZWN0b3I8T3BlcmFuZD4gaW5kZXhUb09wZXJhbmQ7CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQuc2l6ZSgpOyBpLS07
KSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZChtX2dyYXBoLmJsb2NrKDAp
LT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpKTsKLSAgICAgICAgICAgIAorICAg
ICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRI
ZWFkLm9wZXJhbmRGb3JJbmRleChpKTsKKwogICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFy
aWFibGUqIHZhcmlhYmxlID0gc3NhQ2FsY3VsYXRvci5uZXdWYXJpYWJsZSgpOwogICAgICAgICAg
ICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChvcGVyYW5kKSA9IHZhcmlhYmxlOwogICAgICAg
ICAgICAgQVNTRVJUKGluZGV4VG9PcGVyYW5kLnNpemUoKSA9PSB2YXJpYWJsZS0+aW5kZXgoKSk7
CkBAIC0zNzAsMTIgKzM3MCwxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRT
dGFjazoKICAgICAgICAgICAgICAgICAgICAgcHV0U3RhY2tzVG9TaW5rLmFkZChub2RlKTsKICAg
ICAgICAgICAgICAgICAgICAgc3NhQ2FsY3VsYXRvci5uZXdEZWYoCi0gICAgICAgICAgICAgICAg
ICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgp
LT5sb2NhbCksCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVy
YW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJsb2NrLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOgogICAgICAgICAgICAgICAg
ICAgICBzc2FDYWxjdWxhdG9yLm5ld0RlZigKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJh
bmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+c3Rh
Y2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpLAogICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2ss
IG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBkZWZh
dWx0OgpAQCAtMzg2LDcgKzM4Niw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIHNzYUNh
bGN1bGF0b3IuY29tcHV0ZVBoaXMoCiAgICAgICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZh
cmlhYmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9jayogYmxvY2spIC0+IE5vZGUqIHsKLSAgICAgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxl
LT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBpbmRleFRvT3Bl
cmFuZFt2YXJpYWJsZS0+aW5kZXgoKV07CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgaWYgKCFsaXZlQXRIZWFkW2Jsb2NrXS5vcGVyYW5kKG9wZXJhbmQpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTM5Nyw3ICszOTcsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgaWYgKCFpc0NvbmNyZXRlKGZvcm1hdCkpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2lu
Z1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkFkZGluZyBQaGkgZm9yICIsIG9wZXJhbmQsICIg
YXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiXG4iKTsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gbV9ncmFwaC5hZGROb2RlKFNwZWNIZWFwVG9wLCBQ
aGksIGJsb2NrLT5hdCgwKS0+b3JpZ2luLndpdGhJbnZhbGlkRXhpdCgpKTsKQEAgLTQxMSw3ICs0
MTEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtYXBwaW5nLmZpbGwobnVsbHB0cik7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtYXBwaW5nLnNpemUoKTsgaS0t
OykgewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKG1hcHBpbmcub3Bl
cmFuZEZvckluZGV4KGkpKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQobWFwcGlu
Zy5vcGVyYW5kRm9ySW5kZXgoaSkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG9wZXJhbmRUb1ZhcmlhYmxlLm9w
ZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6RGVmKiBkZWYg
PSBzc2FDYWxjdWxhdG9yLnJlYWNoaW5nRGVmQXRIZWFkKGJsb2NrLCB2YXJpYWJsZSk7CkBAIC00
MjEsMTUgKzQyMSwxNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5k
KG9wZXJhbmQpID0gZGVmLT52YWx1ZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkK
KyAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBp
bmcgYXQgdG9wIG9mICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIjogIiwgbWFwcGluZywgIlxuIik7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlE
ZWYgOiBzc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhibG9jaykpIHsKLSAgICAgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3BoaURlZi0+dmFyaWFi
bGUoKS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gaW5kZXhU
b09wZXJhbmRbcGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KDAsIHBoaURlZi0+dmFsdWUoKSk7
CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2lu
Z1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIE1hcHBpbmcgIiwgb3BlcmFuZCwgIiB0byAi
LCBwaGlEZWYtPnZhbHVlKCksICJcbiIpOwogICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFu
ZChvcGVyYW5kKSA9IHBoaURlZi0+dmFsdWUoKTsKICAgICAgICAgICAgIH0KQEAgLTQzNywxNSAr
NDM3LDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGRlZmVycmVkID0gZGVmZXJyZWRBdEhlYWRb
YmxvY2tdOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5k
ZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewogICAgICAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKLSAgICAgICAgICAgICAgICBpZiAoREZHUHV0
U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiRGVmZXJyZWQgYXQgIiwgbm9k
ZSwgIjoiLCBkZWZlcnJlZCwgIlxuIik7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdGFjazog
ewogICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFj
a0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQgPSBkYXRhLT5sb2NhbDsKKyAgICAgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0g
ZGF0YS0+b3BlcmFuZDsKICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVy
YW5kKSA9IGRhdGEtPmZvcm1hdDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNr
U2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmICh2
ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTWFwcGluZyAiLCBv
cGVyYW5kLCAiIHRvICIsIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgIiBhdCAiLCBub2RlLCAiXG4i
KTsKICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpID0gbm9kZS0+
Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTQ1MywxNiAr
NDUzLDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
Y2FzZSBHZXRTdGFjazogewogICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRh
dGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgRmx1c2hG
b3JtYXQgZm9ybWF0ID0gZGVmZXJyZWQub3BlcmFuZChkYXRhLT5sb2NhbCk7CisgICAgICAgICAg
ICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+b3Bl
cmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNDb25jcmV0ZShmb3JtYXQpKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgsIG5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJy
ZWQub3BlcmFuZChkYXRhLT5sb2NhbCkgIT0gQ29uZmxpY3RpbmdGbHVzaCwgZGVmZXJyZWQub3Bl
cmFuZChkYXRhLT5sb2NhbCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVk
Lm9wZXJhbmQoZGF0YS0+b3BlcmFuZCkgIT0gQ29uZmxpY3RpbmdGbHVzaCwgZGVmZXJyZWQub3Bl
cmFuZChkYXRhLT5vcGVyYW5kKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhlcmUgaXMgbm8gZGVmZXJyYWwuIE5vIGRl
ZmVycmFsIG1lYW5zIHRoYXQgdGhlIG1vc3QKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF1
dGhvcml0YXRpdmUgdmFsdWUgZm9yIHRoaXMgc3RhY2sgc2xvdCBpcyB3aGF0IGlzIHN0b3JlZCBp
biB0aGUgc3RhY2suIFNvLAogICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2VlcCB0aGUgR2V0
U3RhY2suCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQoZGF0YS0+bG9j
YWwpID0gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChkYXRh
LT5vcGVyYW5kKSA9IG5vZGU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTQ3MiwyMCArNDcyLDIw
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBzdG9yZWQgYW5kIGdldCBy
aWQgb2YgdGhlIEdldFN0YWNrLgogICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3Jh
cGgsIG5vZGUsIGZvcm1hdCA9PSBkYXRhLT5mb3JtYXQsIGZvcm1hdCwgZGF0YS0+Zm9ybWF0KTsK
ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5n
ID0gbWFwcGluZy5vcGVyYW5kKGRhdGEtPmxvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgTm9k
ZSogaW5jb21pbmcgPSBtYXBwaW5nLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCk7CiAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gaW5jb21pbmctPmRlZmF1bHRFZGdlKCk7CiAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0lkZW50aXR5KCk7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGNhc2Ug
S2lsbFN0YWNrOiB7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+
dW5saW5rZWRMb2NhbCgpKSA9IENvbmZsaWN0aW5nRmx1c2g7CisgICAgICAgICAgICAgICAgICAg
IGRlZmVycmVkLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gQ29uZmxpY3RpbmdG
bHVzaDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byBlc2NhcGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50
ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9
IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJGb3IgIiwgbm9kZSwg
IiBlc2NhcGluZyAiLCBvcGVyYW5kLCAiXG4iKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKQEAgLTQ5OSw3ICs0OTksNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gR290dGEgaW5zZXJ0IGEgUHV0U3RhY2suCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIkluc2VydGluZyBhIFB1dFN0YWNrIGZvciAiLCBvcGVyYW5kLCAiIGF0
ICIsIG5vZGUsICJcbiIpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBpbmNvbWlu
ZyA9IG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKTsKQEAgLTUxMyw3ICs1MTMsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVh
ZEZsdXNoOwogICAgICAgICAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgIGF1
dG8gd3JpdGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAg
ICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IExvYWRWYXJhcmdzIGFuZCBGb3J3YXJkVmFyYXJncyBhcmUgdW5jb25kaXRpb25hbCB3cml0ZXMg
dG8gdGhlIHN0YWNrCkBAIC01MjEsMTMgKzUyMSwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBsb2NhdGlvbnMgdGhleSB3cml0ZSB0by4gVGhpcyBtYWtlcyB0aG9zZSBz
dGFjayBsb2NhdGlvbnMgZGVhZCByaWdodCAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJl
Zm9yZSBhIExvYWRWYXJhcmdzL0ZvcndhcmRWYXJhcmdzLiBUaGlzIG1lYW5zIHdlIHNob3VsZCBu
ZXZlciBzaW5rCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQdXRTdGFja3MgcmlnaHQgdG8g
dGhpcyBwb2ludC4KLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUt
Pm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFZhcmFy
Z3NMZW5ndGggfHwgbm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZv
cndhcmRWYXJhcmdzKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQo
b3BlcmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKICAgICAgICAg
ICAgICAgICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSgKICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIsIHdyaXRlSGFuZGxlciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyLCBMYXp5Tm9kZSkgeyB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCwgTGF6eU5vZGUpIHsgfSk7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0gfQogICAgICAgICAgICAg
fQpAQCAtNTM5LDggKzUzOSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBmb3IgKFNTQUNh
bGN1bGF0b3I6OkRlZiogcGhpRGVmIDogc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soc3VjY2Vz
c29yQmxvY2spKSB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBwaGlEZWYt
PnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2
YXJpYWJsZSA9IHBoaURlZi0+dmFyaWFibGUoKTsKLSAgICAgICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFt2YXJpYWJsZS0+aW5kZXgoKV07Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2
ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBpbmRleFRvT3Bl
cmFuZFt2YXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ3JlYXRpbmcgVXBzaWxvbiBmb3Ig
Iiwgb3BlcmFuZCwgIiBhdCAiLCBwb2ludGVyRHVtcChibG9jayksICItPiIsIHBvaW50ZXJEdW1w
KHN1Y2Nlc3NvckJsb2NrKSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0
IGZvcm1hdCA9IGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3NvckJsb2NrXS5vcGVyYW5kKG9wZXJhbmQp
OwogICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIGlzQ29u
Y3JldGUoZm9ybWF0KSwgZm9ybWF0KTsKQEAgLTU4NSw3ICs1ODUsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChERkdQdXRTdGFja1Np
bmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgIGlmICh2ZXJib3NlKSB7CiAg
ICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBhZnRlciBQdXRTdGFjayBzaW5raW5nOlxuIik7CiAg
ICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCmluZGV4IDIzZDRiOTQ1
MzEwNjY2NTBhOGFkOTBlZTUxYWE1YmRiMmUyOWNlYzUuLmNhOTkwMjYxYzkzMzViOTkyZWQwNjI5
OWY3NTEzOTFlMGEyNzdmNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKQEAgLTE1OCw3ICsxNTgsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
CiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgICAgICAgICBHZXRTdGFjaywg
bm9kZS0+b3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9z
dGFja0FjY2Vzc0RhdGEuYWRkKHZhcmlhYmxlLT5sb2NhbCgpLCB2YXJpYWJsZS0+Zmx1c2hGb3Jt
YXQoKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fc3RhY2tB
Y2Nlc3NEYXRhLmFkZCh2YXJpYWJsZS0+b3BlcmFuZCgpLCB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQo
KSkpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKQogICAgICAgICAg
ICAgICAgICAgICAgICAgbV9hcmd1bWVudEdldHRlcnMuYWRkKGNoaWxkTm9kZSk7CiAgICAgICAg
ICAgICAgICAgICAgIG1fYXJndW1lbnRNYXBwaW5nLmFkZChub2RlLCBjaGlsZE5vZGUpOwpAQCAt
MTc4LDcgKzE3OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlID0gbV92YXJpYWJsZUZvclNTQUluZGV4W3NzYVZhcmlhYmxlLT5pbmRleCgp
XTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBQcnVuZSBieSBsaXZlbmVz
cy4gVGhpcyBkb2Vzbid0IGJ1eSB1cyBtdWNoIG90aGVyIHRoYW4gY29tcGlsZSB0aW1lcy4KLSAg
ICAgICAgICAgICAgICBOb2RlKiBoZWFkTm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3Bl
cmFuZCh2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgICAgICAgICAgICAgTm9kZSogaGVhZE5vZGUg
PSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSk7CiAg
ICAgICAgICAgICAgICAgaWYgKCFoZWFkTm9kZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKQEAgLTMwMCw3ICszMDAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoIW5vZGUtPnJlcGxhY2VtZW50KCkpOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiTWFwcGluZzogIiwgVmlydHVhbFJlZ2lzdGVyKHZhbHVlRm9yT3BlcmFu
ZC5vcGVyYW5kRm9ySW5kZXgoaSkpLCAiIC0+ICIsIG5vZGUsICJcbiIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiTWFwcGluZzogIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmRG
b3JJbmRleChpKSwgIiAtPiAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgdmFs
dWVGb3JPcGVyYW5kW2ldID0gbm9kZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CkBAIC0zMTMsMTEgKzMxMywxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVGb3JTU0FJbmRleFtwaGlEZWYtPnZhcmlh
YmxlKCktPmluZGV4KCldOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydChwaGlJbnNlcnRpb25Qb2ludCwgcGhpRGVmLT52YWx1ZSgpKTsKLSAg
ICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkg
PSBwaGlEZWYtPnZhbHVlKCk7CisgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJh
bmQodmFyaWFibGUtPm9wZXJhbmQoKSkgPSBwaGlEZWYtPnZhbHVlKCk7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAg
ICAgICAgICAgICAgcGhpSW5zZXJ0aW9uUG9pbnQsIFNwZWNOb25lLCBNb3ZIaW50LCBibG9jay0+
YXQoMCktPm9yaWdpbi53aXRoSW52YWxpZEV4aXQoKSwKLSAgICAgICAgICAgICAgICAgICAgT3BJ
bmZvKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKSwgcGhpRGVmLT52YWx1ZSgpLT5kZWZhdWx0
RWRnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmlhYmxlLT5vcGVyYW5kKCkp
LCBwaGlEZWYtPnZhbHVlKCktPmRlZmF1bHRFZGdlKCkpOwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBpZiAoYmxvY2stPmF0KDApLT5vcmlnaW4uZXhpdE9LKQpAQCAtMzM3LDcgKzMzNyw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6IHsKICAgICAgICAgICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEtpbGxTdGFjaywgbm9kZS0+b3JpZ2luLAotICAgICAg
ICAgICAgICAgICAgICAgICAgT3BJbmZvKG5vZGUtPnVubGlua2VkTG9jYWwoKS5vZmZzZXQoKSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG5vZGUtPnVubGlua2VkT3BlcmFuZCgp
KSk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5leGl0T0sgPSBmYWxzZTsgLy8g
S2lsbFN0YWNrIGNsb2JiZXJzIGV4aXQuCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KQEAgLTM0OSwxOSArMzQ5LDE5IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCEhKG5vZGUtPmZsYWdzKCkgJiBOb2RlSXNGbHVzaGVkKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUHV0U3RhY2soCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQoCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5sb2NhbCgpLCB2YXJpYWJsZS0+Zmx1c2hG
b3JtYXQoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+b3Bl
cmFuZCgpLCB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkpOwogICAgICAgICAgICAgICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlbW92ZShtX2dyYXBoKTsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTWFwcGluZzogIiwgdmFyaWFibGUtPmxvY2Fs
KCksICIgLT4gIiwgY2hpbGQsICJcbiIpOwotICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9w
ZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBjaGlsZDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIHZhcmlhYmxlLT5vcGVyYW5kKCksICIgLT4g
IiwgY2hpbGQsICJcbiIpOworICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3Bl
cmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKSA9IGNoaWxkOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fYXJn
dW1lbnRHZXR0ZXJzLmNvbnRhaW5zKG5vZGUpKTsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVG
b3JPcGVyYW5kLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSA9IG5vZGU7
CisgICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKG5vZGUtPnN0YWNr
QWNjZXNzRGF0YSgpLT5vcGVyYW5kKSA9IG5vZGU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC0zNzEsOCArMzcx
LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
bm9kZS0+cmVtb3ZlKG1fZ3JhcGgpOwogICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIlJlcGxhY2luZyBub2RlICIsIG5vZGUs
ICIgd2l0aCAiLCB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSksICJc
biIpOwotICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRSZXBsYWNlbWVudCh2YWx1ZUZvck9w
ZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiUmVwbGFjaW5nIG5vZGUgIiwgbm9kZSwgIiB3aXRoICIsIHZhbHVlRm9yT3Bl
cmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpLCAiXG4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+c2V0UmVwbGFjZW1lbnQodmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFi
bGUtPm9wZXJhbmQoKSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMzg1LDcgKzM4NSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDogewogICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpOwogICAgICAg
ICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gdmFs
dWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLT5kZWZhdWx0RWRnZSgpOwor
ICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IHZhbHVlRm9yT3BlcmFuZC5vcGVy
YW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpLT5kZWZhdWx0RWRnZSgpOwogICAgICAgICAgICAgICAg
ICAgICBub2RlLT5yZW1vdmUobV9ncmFwaCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTQyNSwxMiArNDI1LDEyIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgLy8gaXMgbm90IGV4aXRPSy4KICAgICAgICAgICAgICAgICAgICAgVXNlS2lu
ZCB1c2VLaW5kID0gdW5jaGVja2VkVXNlS2luZEZvcihmb3JtYXQpOwogCi0gICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJJbnNlcnRpbmcgVXBzaWxvbiBmb3IgIiwgdmFy
aWFibGUtPmxvY2FsKCksICIgcHJvcGFnYXRpbmcgIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQo
dmFyaWFibGUtPmxvY2FsKCkpLCAiIHRvICIsIHBoaU5vZGUpOworICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiSW5zZXJ0aW5nIFVwc2lsb24gZm9yICIsIHZhcmlhYmxl
LT5vcGVyYW5kKCksICIgcHJvcGFnYXRpbmcgIiwgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFy
aWFibGUtPm9wZXJhbmQoKSksICIgdG8gIiwgcGhpTm9kZSk7CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAg
ICAgICAgICAgICAgICAgICAgdXBzaWxvbkluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgVXBzaWxv
biwgdXBzaWxvbk9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhwaGlOb2Rl
KSwgRWRnZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3Bl
cmFuZCh2YXJpYWJsZS0+bG9jYWwoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs
dWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdXNlS2luZCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKaW5kZXgg
ZjkxYmE0OGY1ODg5ZDU0M2NmOTliZmFiZjQ3ZDFjMDMzOGE0OWVmZS4uMjAzMzg3YjY2NTY0ODZj
MDY1Mzk5ZTFlMWNkYmUwYjljMzU1ZTZlYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTYWZlVG9FeGVjdXRlLmgKQEAgLTMyMyw2ICszMjMsNyBAQCBib29sIHNhZmVUb0V4ZWN1
dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJv
b2wgaWdubwogICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICBjYXNl
IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgIGNhc2UgQ29uc3RydWN0
VmFyYXJnczoKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6CiAgICAgY2FzZSBMb2FkVmFyYXJnczoK
ICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRW
YXJhcmdzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAppbmRleCBlYmYzYjZiY2VmOGE1MjdjOTNjOGZkMzhhM2RhMmJmNTFjNGU0ZWFiLi4wNzAy
NGNkYjQwNjU0OWIyNmFmMjc3ZjMzMzg5NTUyNWU2NGJkZTQwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtMTc3OCw3ICsxNzc4LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQoTm9kZSogbm9kZSkKICAgICBO
b2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICBub3RpY2VPU1JCaXJ0aChj
aGlsZCk7CiAgICAgCi0gICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50Ojpt
b3ZIaW50KE1pbmlmaWVkSUQoY2hpbGQpLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKTsKKyAgICBt
X3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQoTWluaWZpZWRJRChj
aGlsZCksIG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVDaGVja05ldXRlcmVkKE5vZGUqIG5vZGUpCkBAIC0xODQzLDcgKzE4NDMsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKCkKICAgICBtX3N0YXRl
LmJlZ2luQmFzaWNCbG9jayhtX2Jsb2NrKTsKICAgICAKICAgICBmb3IgKHNpemVfdCBpID0gbV9i
bG9jay0+dmFyaWFibGVzQXRIZWFkLnNpemUoKTsgaS0tOykgewotICAgICAgICBpbnQgb3BlcmFu
ZCA9IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAg
IE9wZXJhbmQgb3BlcmFuZCA9IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kRm9ySW5k
ZXgoaSk7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV07
CiAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBObyBuZWVkIHRv
IHJlY29yZCBkZWFkIFNldExvY2FsJ3MuCkBAIC0xODUzLDExICsxODUzLDggQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jaygpCiAgICAgICAgIGlmICghbm9kZS0+cmVm
Q291bnQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBObyBuZWVkIHRvIHJlY29yZCBkZWFk
IFNldExvY2FsJ3MuCiAgICAgICAgIGZvcm1hdCA9IGRhdGFGb3JtYXRGb3IodmFyaWFibGUtPmZs
dXNoRm9ybWF0KCkpOwotICAgICAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKAotICAgICAgICAg
ICAgVmFyaWFibGVFdmVudDo6c2V0TG9jYWwoCi0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyKG9wZXJhbmQpLAotICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwK
LSAgICAgICAgICAgICAgICBmb3JtYXQpKTsKKyAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFw
aCgpLCBub2RlLCAhb3BlcmFuZC5pc0FyZ3VtZW50KCkgfHwgb3BlcmFuZC52aXJ0dWFsUmVnaXN0
ZXIoKS50b0FyZ3VtZW50KCkgPj0gMCk7CisgICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2co
VmFyaWFibGVFdmVudDo6c2V0TG9jYWwob3BlcmFuZCwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgp
LCBmb3JtYXQpKTsKICAgICB9CiAKICAgICBtX29yaWdpbiA9IE5vZGVPcmlnaW4oKTsKQEAgLTE5
MzcsNyArMTkzNCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcygp
CiAgICAgICAgIGlmIChmb3JtYXQgPT0gRmx1c2hlZEpTVmFsdWUpCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIg
PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCk7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXIgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKS52aXJ0dWFsUmVn
aXN0ZXIoKTsKKyAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3Rlci5pc0FyZ3VtZW50KCkpOwog
CiAgICAgICAgIEpTVmFsdWVTb3VyY2UgdmFsdWVTb3VyY2UgPSBKU1ZhbHVlU291cmNlKEpJVENv
bXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlcikpOwogICAgICAgICAKQEAgLTczNjAs
NTQgKzczNTgsNTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNldEZ1bmN0aW9uTmFt
ZShOb2RlKiBub2RlKQogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlTG9hZFZhcmFyZ3MoTm9kZSogbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVWYXJhcmdzTGVuZ3RoKE5vZGUqIG5vZGUpCiB7CiAgICAgTG9hZFZhcmFyZ3NEYXRh
KiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAKICAgICBKU1ZhbHVlUmVncyBhcmd1
bWVudHNSZWdzOwotICAgIHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgYXJndW1lbnRzUmVncyA9IGFyZ3VtZW50cy5qc1Zh
bHVlUmVncygpOwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgIH0KKyAgICBsb2NrKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhp
cywgbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7CisgICAgYXJndW1lbnRzUmVncyA9IGFyZ3VtZW50
cy5qc1ZhbHVlUmVncygpOworICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgdW5sb2NrKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKTsKIAogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2l6ZU9m
VmFyYXJncywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YykpLCBhcmd1bWVudHNSZWdzLCBkYXRhLT5vZmZzZXQpOwogICAgIG1faml0LmV4Y2VwdGlvbkNo
ZWNrKCk7CiAKICAgICBsb2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICB7Ci0gICAg
ICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAg
ICAgIGFyZ3VtZW50c1JlZ3MgPSBhcmd1bWVudHMuanNWYWx1ZVJlZ3MoKTsKLSAgICAgICAgZmx1
c2hSZWdpc3RlcnMoKTsKLSAgICB9CisgICAgR1BSVGVtcG9yYXJ5IGFyZ0NvdW50SW5jbHVkaW5n
VGhpcyh0aGlzKTsKKyAgICBHUFJSZWcgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSID0gYXJnQ291
bnRJbmNsdWRpbmdUaGlzLmdwcigpOwogICAgIHVubG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
Uik7CiAKLSAgICAvLyBGSVhNRTogVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSB3aWxsIGNhbGwg
YW4gZWZmZWN0ZnVsIGxlbmd0aCBwcm9wZXJ0eSB0d2ljZS4gVGhpcyBpcyBzYWZlCi0gICAgLy8g
ZnJvbSB0aGUgc3RhbmRwb2ludCBvZiB0aGUgVk0ncyBpbnRlZ3JpdHksIGJ1dCBpdCdzIHN1YnRs
eSB3cm9uZyBmcm9tIGEgc3BlYyBjb21wbGlhbmNlCi0gICAgLy8gc3RhbmRwb2ludC4gVGhlIGJl
c3Qgc29sdXRpb24gd291bGQgYmUgb25lIHdoZXJlIHdlIGNhbiBleGl0ICppbnRvKiB0aGUgb3Bf
Y2FsbF92YXJhcmdzIHJpZ2h0Ci0gICAgLy8gcGFzdCB0aGUgc2l6aW5nLgotICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE0NDgKKyAgICBtX2ppdC5hZGQz
MihUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBhcmdDb3VudEluY2x1
ZGluZ1RoaXNHUFIpOwogCi0gICAgR1BSUmVnIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiA9Ci0g
ICAgICAgIEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBhcmd1bWVudHNSZWdzKTsKKyAgICBpbnQzMlJlc3VsdChhcmdDb3VudEluY2x1ZGluZ1Ro
aXNHUFIsIG5vZGUpOyAgCit9CiAKLSAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIpOwordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKE5vZGUqIG5vZGUpCit7CisgICAgTG9h
ZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisKKyAgICBTcGVj
dWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgYXJndW1lbnRDb3VudCh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7ICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5hcmd1bWVu
dHNDaGlsZCgpKTsKKyAgICBHUFJSZWcgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBhcmd1
bWVudENvdW50LmdwcigpOworICAgIEpTVmFsdWVSZWdzIGFyZ3VtZW50c1JlZ3MgPSBhcmd1bWVu
dHMuanNWYWx1ZVJlZ3MoKTsKIAogICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgIFZhcmFy
Z3NPdmVyZmxvdywgSlNWYWx1ZVNvdXJjZSgpLCBFZGdlKCksIG1faml0LmJyYW5jaDMyKAotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLAotICAgICAgICAgICAgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIsCi0gICAgICAgICAgICBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIpKTsKKyAg
ICAgICAgVmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVkZ2UoKSwgbV9qaXQuYnJh
bmNoVGVzdDMyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisgICAgICAgICAg
ICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogCiAgICAgc3BlY3VsYXRpb25DaGVjaygK
ICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVkZ2UoKSwgbV9qaXQu
YnJhbmNoMzIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsCi0gICAgICAgICAg
ICBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIsCisgICAgICAgICAgICBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcywKICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihkYXRhLT5saW1pdCkpKTsKIAot
ICAgIG1faml0LnN0b3JlMzIoYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSLCBKSVRDb21waWxlcjo6
cGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKKyAgICBmbHVzaFJlZ2lzdGVycygpOwor
CisgICAgbV9qaXQuc3RvcmUzMihhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgSklUQ29tcGls
ZXI6OnBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CiAKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkxvYWRWYXJhcmdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgZGF0YS0+
bWFjaGluZVN0YXJ0Lm9mZnNldCgpLCBhcmd1bWVudHNSZWdzLCBkYXRhLT5vZmZzZXQsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCBkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkxvYWRWYXJhcmdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwg
ZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpLCBhcmd1bWVudHNSZWdzLCBkYXRhLT5vZmZzZXQs
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKICAg
ICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAgICAgbm9SZXN1bHQobm9kZSk7CkBAIC03NDE3
LDE3ICs3NDE2LDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVGb3J3YXJkVmFyYXJn
cyhOb2RlKiBub2RlKQogewogICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRW
YXJhcmdzRGF0YSgpOwogICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lOwotICAg
IGlmIChub2RlLT5jaGlsZDEoKSkKLSAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+Y2hp
bGQxKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICBpZiAobm9kZS0+
YXJndW1lbnRzQ2hpbGQoKSkKKyAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+YXJndW1l
bnRzQ2hpbGQoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogICAgIGVsc2UK
ICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNh
bGxGcmFtZSgpOwogCisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGFyZ3VtZW50Q291
bnQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSBsZW5ndGgodGhpcyk7
CiAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgdGVtcCh0aGlzKTsKLSAgICBHUFJSZWcgbGVuZ3Ro
R1BSID0gbGVuZ3RoLmdwcigpOworICAgIEdQUlJlZyBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyA9IGFyZ3VtZW50Q291bnQuZ3ByKCk7CisgICAgR1BSUmVnIGxlbmd0aEdQUiA9IGFyZ3VtZW50
Q291bnQuZ3ByKCk7CiAgICAgSlNWYWx1ZVJlZ3MgdGVtcFJlZ3MgPSB0ZW1wLnJlZ3MoKTsKLSAg
ICAgICAgCi0gICAgZW1pdEdldExlbmd0aChpbmxpbmVDYWxsRnJhbWUsIGxlbmd0aEdQUiwgLyog
aW5jbHVkZVRoaXMgPSAqLyB0cnVlKTsKKyAgICAKKyAgICBtX2ppdC5tb3ZlKGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLCBsZW5ndGhHUFIpOwogICAgIGlmIChkYXRhLT5vZmZzZXQpCiAgICAg
ICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMihkYXRhLT5vZmZzZXQpLCBsZW5ndGhHUFIpOwog
ICAgICAgICAKQEAgLTc1ODYsNyArNzU4Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVDcmVhdGVEaXJlY3RBcmd1bWVudHMoTm9kZSogbm9kZSkKICAgICBhdXRvKiBpbmxpbmVDYWxs
RnJhbWUgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgaWYg
KGlubGluZUNhbGxGcmFtZQogICAgICAgICAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3Mo
KSkgewotICAgICAgICBrbm93bkxlbmd0aCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgLSAxOworICAgICAgICBrbm93bkxlbmd0aCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7
CiAgICAgICAgIGxlbmd0aElzS25vd24gPSB0cnVlOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGtu
b3duTGVuZ3RoID0gVUlOVF9NQVg7CkBAIC0xMjQ5MSw3ICsxMjQ5Miw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhOb2RlKiBub2Rl
KQogICAgIGlmIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPmFyZ3Vt
ZW50c0lubGluZUNhbGxGcmFtZSgpKQogICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKICAgICBlbHNlCi0gICAgICAg
IGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CisgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3Rl
ciA9IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAgIG1faml0
LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIpLCBy
ZXN1bHQuZ3ByKCkpOwogICAgIGludDMyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKaW5kZXggMjIy
MzAzNDQ3ZWM0NmRjYTZmMDljNDc5OTg3OTM5Yjc2MmM4MzBiMi4uNGEyZjBmNzQ5NjkzOGFiY2Iz
YjYyYmIwZjY0MDQ0NTliOGYzYmMxZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaApAQCAtMTM5NSw2ICsxMzk1LDcgQEAgcHVibGljOgogICAgIHZv
aWQgY29tcGlsZVNldEZ1bmN0aW9uTmFtZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTmV3UmVn
ZXhwKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVGb3J3YXJkVmFyYXJncyhOb2RlKik7CisgICAg
dm9pZCBjb21waWxlVmFyYXJnc0xlbmd0aChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTG9hZFZh
cmFyZ3MoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUNyZWF0ZUFjdGl2YXRpb24oTm9kZSopOwog
ICAgIHZvaWQgY29tcGlsZUNyZWF0ZURpcmVjdEFyZ3VtZW50cyhOb2RlKik7CkBAIC0xNjczLDE1
ICsxNjc0LDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhZ2VUeXBlZEFycmF5U3RvcmFnZShHUFJS
ZWcsIEdQUlJlZyk7CiAgICAgCiAgICAgdm9pZCByZWNvcmRTZXRMb2NhbCgKLSAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGJ5dGVjb2RlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZywgRGF0
YUZvcm1hdCBmb3JtYXQpCisgICAgICAgIE9wZXJhbmQgYnl0ZWNvZGVSZWcsIFZpcnR1YWxSZWdp
c3RlciBtYWNoaW5lUmVnLCBEYXRhRm9ybWF0IGZvcm1hdCkKICAgICB7CisgICAgICAgIEFTU0VS
VCghYnl0ZWNvZGVSZWcuaXNBcmd1bWVudCgpIHx8IGJ5dGVjb2RlUmVnLnZpcnR1YWxSZWdpc3Rl
cigpLnRvQXJndW1lbnQoKSA+PSAwKTsKICAgICAgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhW
YXJpYWJsZUV2ZW50OjpzZXRMb2NhbChieXRlY29kZVJlZywgbWFjaGluZVJlZywgZm9ybWF0KSk7
CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVjb3JkU2V0TG9jYWwoRGF0YUZvcm1hdCBmb3JtYXQp
CiAgICAgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9jdXJyZW50
Tm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIHJlY29yZFNldExvY2FsKHZhcmlh
YmxlLT5sb2NhbCgpLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCksIGZvcm1hdCk7CisgICAgICAg
IHJlY29yZFNldExvY2FsKHZhcmlhYmxlLT5vcGVyYW5kKCksIHZhcmlhYmxlLT5tYWNoaW5lTG9j
YWwoKSwgZm9ybWF0KTsKICAgICB9CiAKICAgICBHZW5lcmF0aW9uSW5mbyYgZ2VuZXJhdGlvbklu
Zm9Gcm9tVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAppbmRleCA5ZTY1MGM4MzIwNzFkZDcwZjI5OTRhYmM0YTI4Yjg1MGFiZDVmZjQwLi41MTYy
OTE3NzliZWE0NGExYTYxOGY3YTc1NmRjYWFmMzY3ZWFmNTlkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKQEAgLTE4Mjgs
NyArMTgyOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgIEFic3RyYWN0VmFs
dWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpOworICAgICAgICBBYnN0
cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpOwogCiAg
ICAgICAgIC8vIElmIHRoZSBDRkEgaXMgdHJhY2tpbmcgdGhpcyB2YXJpYWJsZSBhbmQgaXQgZm91
bmQgdGhhdCB0aGUgdmFyaWFibGUKICAgICAgICAgLy8gY2Fubm90IGhhdmUgYmVlbiBhc3NpZ25l
ZCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIHByb2NlZWQuCkBAIC0xOTEyLDcgKzE5MTIsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAK
ICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgcmVjb3JkU2V0TG9jYWwobV9jdXJyZW50
Tm9kZS0+dW5saW5rZWRMb2NhbCgpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdERlYWQp
OworICAgICAgICByZWNvcmRTZXRMb2NhbChtX2N1cnJlbnROb2RlLT51bmxpbmtlZE9wZXJhbmQo
KSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXREZWFkKTsKICAgICAgICAgbm9SZXN1bHQo
bm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTM4MzQsNiArMzgzNCwxMSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGVtaXRDYWxsKG5v
ZGUpOwogICAgICAgICBicmVhazsKIAorICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogeworICAgICAg
ICBjb21waWxlVmFyYXJnc0xlbmd0aChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAg
ICAgY2FzZSBMb2FkVmFyYXJnczogewogICAgICAgICBjb21waWxlTG9hZFZhcmFyZ3Mobm9kZSk7
CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAKaW5kZXggNDQ3MzkyNTQwNDcyOGRmYTYzNzE1NzExMzk5MWJmYzFm
NDMzYjdjNi4uNDZiMTFkYWIyMWY1MTIzZDUwNmRmNTNjZTM1YjI0N2U1MWZlOGEzYSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBA
IC0xOTM2LDcgKzE5MzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICBBYnN0
cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChub2RlLT5sb2NhbCgpKTsKKyAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgp
KTsKIAogICAgICAgICAvLyBJZiB0aGUgQ0ZBIGlzIHRyYWNraW5nIHRoaXMgdmFyaWFibGUgYW5k
IGl0IGZvdW5kIHRoYXQgdGhlIHZhcmlhYmxlCiAgICAgICAgIC8vIGNhbm5vdCBoYXZlIGJlZW4g
YXNzaWduZWQsIHRoZW4gZG9uJ3QgYXR0ZW1wdCB0byBwcm9jZWVkLgpAQCAtMjAwNyw3ICsyMDA3
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAg
ICAgICAgCiAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgIHJlY29yZFNldExvY2FsKG1f
Y3VycmVudE5vZGUtPnVubGlua2VkTG9jYWwoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3Jt
YXREZWFkKTsKKyAgICAgICAgcmVjb3JkU2V0TG9jYWwobV9jdXJyZW50Tm9kZS0+dW5saW5rZWRP
cGVyYW5kKCksIFZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0RGVhZCk7CiAgICAgICAgIG5v
UmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00NDc0LDYgKzQ0NzQsMTEg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBlbWl0
Q2FsbChub2RlKTsKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsK
KyAgICAgICAgY29tcGlsZVZhcmFyZ3NMZW5ndGgobm9kZSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKwogICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKICAgICAgICAgY29tcGlsZUxvYWRWYXJhcmdz
KG5vZGUpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCmluZGV4IDE2OGIzZGY0MzM0NjU3ZTZhYWRiNjRiYmY2
MzNlZWM1YWZhMWIwNDQuLjI3M2Y3ZDRiNTA1MzEwMmQ0YzUxYmEyZGRjOGE0ZDZkODgxMGIwNDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFz
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNl
LmNwcApAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIHRyZWF0IGEgdmFyaWFi
bGUgYXMgYmVpbmcgInVzZWQiIGlmIHRoZXJlIGV4aXN0cyBhbiBhY2Nlc3MgdG8gaXQgKFNldExv
Y2FsLCBHZXRMb2NhbCwKICAgICAgICAgLy8gRmx1c2gsIFBoYW50b21Mb2NhbCkuCiAgICAgICAg
IAotICAgICAgICBCaXRWZWN0b3IgdXNlZExvY2FsczsKKyAgICAgICAgT3BlcmFuZHM8Ym9vbD4g
dXNlZE9wZXJhbmRzKDAsIGdyYXBoKCkubV9sb2NhbFZhcnMsIGdyYXBoKCkubV90bXBzLCBmYWxz
ZSk7CiAgICAgICAgIAogICAgICAgICAvLyBDb2xsZWN0IHRob3NlIHZhcmlhYmxlcyB0aGF0IGFy
ZSB1c2VkIGZyb20gSVIuCiAgICAgICAgIGJvb2wgaGFzTm9kZXNUaGF0TmVlZEZpeHVwID0gZmFs
c2U7CkBAIC02NywyMyArNjcsMjIgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgRmx1
c2g6CiAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6IHsKICAgICAgICAgICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkuaXNBcmd1
bWVudCgpKQorICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPm9wZXJhbmQoKS5pc0Fy
Z3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgdXNlZExvY2Fscy5zZXQodmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQo
KSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoK
ICAgICAgICAgICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgICAgICAgICAg
ICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoZGF0YS0+Y291bnQuaXNMb2NhbCgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoZGF0YS0+Y291bnQudG9Mb2NhbCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoZGF0YS0+Y291bnQsIHRydWUp
OwogICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS0+c3RhcnQuaXNMb2NhbCgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHBhcnQgcmVhbGx5IHJlbGllcyBvbiB0aGUgY29u
dGlndWl0eSBvZiBzdGFjayBsYXlvdXQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2ln
bm1lbnRzLgogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKFZpcnR1YWxSZWdpc3Rlcihk
YXRhLT5zdGFydC5vZmZzZXQoKSArIGRhdGEtPmxpbWl0IC0gMSkuaXNMb2NhbCgpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KSAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0
ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS50b0xvY2FsKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihkYXRh
LT5zdGFydC5vZmZzZXQoKSArIGkpLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgfSAvLyB0
aGUgZWxzZSBjYXNlIHNob3VsZG4ndCBoYXBwZW4uCiAgICAgICAgICAgICAgICAgICAgIGhhc05v
ZGVzVGhhdE5lZWRGaXh1cCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
OTIsOSArOTEsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdGFjazoKICAg
ICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIFN0YWNr
QWNjZXNzRGF0YSogc3RhY2sgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHN0YWNrLT5sb2NhbC5pc0FyZ3VtZW50KCkpCisgICAgICAgICAgICAgICAg
ICAgIGlmIChzdGFjay0+b3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoc3RhY2stPmxv
Y2FsLnRvTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVy
YW5kKHN0YWNrLT5vcGVyYW5kLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTEwOCwyMSArMTA3LDIx
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
ID0gKml0ZXI7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpKSB7Ci0gICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVhbFJl
Z2lzdGVyKAotICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSk7
CisgICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVy
KAorICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLCB0cnVlKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9
IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzV2l0aEZpeHVwLnNpemUoKTsgYXJndW1lbnQtLTsp
IHsKLSAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoCi0gICAg
ICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZz
ZXQoKSArCi0gICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQp
LnRvTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoVmly
dHVhbFJlZ2lzdGVyKAorICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoYXJndW1lbnQpLm9mZnNldCgpICsKKyAgICAgICAgICAgICAgICAg
ICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCksIHRydWUpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IGFsbG9jYXRpb24o
dXNlZExvY2Fscy5zaXplKCkpOworICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IGFsbG9jYXRpb24o
dXNlZE9wZXJhbmRzLnNpemUoKSk7CiAgICAgICAgIG1fZ3JhcGgubV9uZXh0TWFjaGluZUxvY2Fs
ID0gY29kZUJsb2NrKCktPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZExvY2Fscy5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgaWYgKCF1c2VkTG9jYWxzLmdldChpKSkgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdXNlZE9wZXJhbmRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBp
ZiAoIXVzZWRPcGVyYW5kcy5nZXRGb3JPcGVyYW5kSW5kZXgoaSkpIHsKICAgICAgICAgICAgICAg
ICBhbGxvY2F0aW9uW2ldID0gVUlOVF9NQVg7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB9CkBAIC0xMzUsNDkgKzEzNCw1MCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBp
ZiAoIXZhcmlhYmxlLT5pc1Jvb3QoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkg
ewotICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IHZhcmlhYmxlLT5s
b2NhbCgpOworICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5vcGVyYW5kKCkuaXNBcmd1bWVudCgp
KSB7CisgICAgICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gdmFyaWFibGUt
Pm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgc2l6ZV90IGxvY2FsID0g
dmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgpOwotICAgICAgICAgICAgaWYgKGxvY2FsID49IGFs
bG9jYXRpb24uc2l6ZSgpKQorICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gdmFyaWFibGUt
Pm9wZXJhbmQoKTsKKyAgICAgICAgICAgIHNpemVfdCBpbmRleCA9IHVzZWRPcGVyYW5kcy5vcGVy
YW5kSW5kZXgob3BlcmFuZCk7CisgICAgICAgICAgICBpZiAoaW5kZXggPj0gYWxsb2NhdGlvbi5z
aXplKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChhbGxvY2F0aW9uW2xvY2FsXSA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgIGlmIChh
bGxvY2F0aW9uW2luZGV4XSA9PSBVSU5UX01BWCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gYXNz
aWduKGFsbG9jYXRpb24sIHZhcmlhYmxlLT5sb2NhbCgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxl
LT5tYWNoaW5lTG9jYWwoKSA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIHZhcmlh
YmxlLT5vcGVyYW5kKCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBmb3IgKFN0YWNr
QWNjZXNzRGF0YSogZGF0YSA6IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEpIHsKLSAgICAgICAg
ICAgIGlmICghZGF0YS0+bG9jYWwuaXNMb2NhbCgpKSB7Ci0gICAgICAgICAgICAgICAgZGF0YS0+
bWFjaGluZUxvY2FsID0gZGF0YS0+bG9jYWw7CisgICAgICAgICAgICBpZiAoZGF0YS0+b3BlcmFu
ZC5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lTG9jYWwgPSBk
YXRhLT5vcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc3RhdGljX2Nh
c3Q8c2l6ZV90PihkYXRhLT5sb2NhbC50b0xvY2FsKCkpID49IGFsbG9jYXRpb24uc2l6ZSgpKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25bZGF0
YS0+bG9jYWwudG9Mb2NhbCgpXSA9PSBVSU5UX01BWCkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGlmIChkYXRhLT5vcGVyYW5kLmlzTG9jYWwoKSkgeworICAgICAgICAg
ICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEtPm9wZXJhbmQudG9Mb2NhbCgpKSA+
PSBhbGxvY2F0aW9uLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25bZGF0YS0+b3BlcmFuZC50b0xvY2FsKCldID09IFVJ
TlRfTUFYKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIAotICAgICAgICAgICAgZGF0YS0+bWFjaGluZUxvY2FsID0gYXNzaWduKGFsbG9j
YXRpb24sIGRhdGEtPmxvY2FsKTsKKyAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVMb2NhbCA9IGFz
c2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIGRhdGEtPm9wZXJhbmQpOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBpZiAoIW1fZ3JhcGgubmVlZHNTY29wZVJlZ2lzdGVyKCkpCiAg
ICAgICAgICAgICBjb2RlQmxvY2soKS0+c2V0U2NvcGVSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIo
KSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvZGVCbG9jaygpLT5zZXRTY29wZVJlZ2lz
dGVyKGFzc2lnbihhbGxvY2F0aW9uLCBjb2RlQmxvY2soKS0+c2NvcGVSZWdpc3RlcigpKSk7Cisg
ICAgICAgICAgICBjb2RlQmxvY2soKS0+c2V0U2NvcGVSZWdpc3Rlcihhc3NpZ24odXNlZE9wZXJh
bmRzLCBhbGxvY2F0aW9uLCBjb2RlQmxvY2soKS0+c2NvcGVSZWdpc3RlcigpKSk7CiAKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX2lubGluZVZhcmlhYmxlRGF0YS5zaXplKCk7
IGktLTspIHsKICAgICAgICAgICAgIElubGluZVZhcmlhYmxlRGF0YSBkYXRhID0gbV9ncmFwaC5t
X2lubGluZVZhcmlhYmxlRGF0YVtpXTsKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lID0gZGF0YS5pbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0gICAgICAgICAgICAg
ICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIgPSBhc3NpZ24oCi0gICAg
ICAgICAgICAgICAgICAgIGFsbG9jYXRpb24sIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlubGlu
ZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCisgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudENvdW50UmVnaXN0ZXIgPSBhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9u
LCBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisKICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgYXJndW1lbnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1dpdGhGaXh1cC5z
aXplKCk7IGFyZ3VtZW50LS07KSB7CiAgICAgICAgICAgICAgICAgQXJndW1lbnRQb3NpdGlvbiYg
cG9zaXRpb24gPSBtX2dyYXBoLm1fYXJndW1lbnRQb3NpdGlvbnNbCiAgICAgICAgICAgICAgICAg
ICAgIGRhdGEuYXJndW1lbnRQb3NpdGlvblN0YXJ0ICsgYXJndW1lbnRdOwpAQCAtMjE1LDggKzIx
NSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczogewogICAgICAgICAgICAgICAg
ICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lQ291bnQgPSBhc3NpZ24oYWxs
b2NhdGlvbiwgZGF0YS0+Y291bnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFj
aGluZVN0YXJ0ID0gYXNzaWduKGFsbG9jYXRpb24sIGRhdGEtPnN0YXJ0KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVDb3VudCA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFs
bG9jYXRpb24sIGRhdGEtPmNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1h
Y2hpbmVTdGFydCA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIGRhdGEtPnN0YXJ0
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTIzMSwxNyArMjMxLDE2IEBAIHB1YmxpYzoK
ICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGFzc2lnbihjb25zdCBWZWN0
b3I8dW5zaWduZWQ+JiBhbGxvY2F0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjKQorICAgIFZpcnR1
YWxSZWdpc3RlciBhc3NpZ24oY29uc3QgT3BlcmFuZHM8Ym9vbD4mIHVzZWRPcGVyYW5kcywgY29u
c3QgVmVjdG9yPHVuc2lnbmVkPiYgYWxsb2NhdGlvbiwgT3BlcmFuZCBvcGVyYW5kKQogICAgIHsK
LSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IHNyYzsKLSAgICAgICAgaWYgKHJlc3Vs
dC5pc0xvY2FsKCkpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIG15QWxsb2NhdGlvbiA9IGFsbG9j
YXRpb25bcmVzdWx0LnRvTG9jYWwoKV07Ci0gICAgICAgICAgICBpZiAobXlBbGxvY2F0aW9uID09
IFVJTlRfTUFYKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IFZpcnR1YWxSZWdpc3RlcigpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHZpcnR1YWxSZWdpc3Rl
ckZvckxvY2FsKG15QWxsb2NhdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgcmV0dXJu
IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7CisKKyAgICAgICAgc2l6ZV90IG9wZXJhbmRJbmRl
eCA9IHVzZWRPcGVyYW5kcy5vcGVyYW5kSW5kZXgob3BlcmFuZCk7CisgICAgICAgIHVuc2lnbmVk
IG15QWxsb2NhdGlvbiA9IGFsbG9jYXRpb25bb3BlcmFuZEluZGV4XTsKKyAgICAgICAgaWYgKG15
QWxsb2NhdGlvbiA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0
ZXIoKTsKKyAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG15QWxsb2NhdGlv
bik7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAKaW5kZXggMThlNjdlNzYyNTcxY2RiYTVlZWJm
MWUwZmM0ZjkxODdiZjMyNWQ1Ny4uYjNlNDFkOGQ3ZTFkZTM2ZTI3MTYxM2E0NjI1NTc2YzlmNjZl
NzYyYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJl
ZHVjdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVu
Z3RoUmVkdWN0aW9uUGhhc2UuY3BwCkBAIC0yODUsMTcgKzI4NSwxNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBOb2RlKiBzZXRMb2NhbCA9IG51
bGxwdHI7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBtX25vZGUtPmxvY2Fs
KCk7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtX25vZGUtPm9wZXJhbmQoKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ub2RlSW5kZXg7IGkt
LTspIHsKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9ibG9jay0+YXQoaSk7CiAKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCAmJiBub2RlLT5sb2NhbCgp
ID09IGxvY2FsKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwg
JiYgbm9kZS0+b3BlcmFuZCgpID09IG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgc2V0
TG9jYWwgPSBub2RlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoYWNjZXNzZXNPdmVybGFwKG1fZ3JhcGgsIG5vZGUs
IEFic3RyYWN0SGVhcChTdGFjaywgbG9jYWwpKSkKKyAgICAgICAgICAgICAgICBpZiAoYWNjZXNz
ZXNPdmVybGFwKG1fZ3JhcGgsIG5vZGUsIEFic3RyYWN0SGVhcChTdGFjaywgb3BlcmFuZCkpKQog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCmluZGV4IDZhY2FmYmYzYmY1MzVjOTY5NmJlNjQ4YTIw
NzBiNmVlNmY0ZjhiZjkuLmYxYjFmZjY0ZGRhNTNjZjQ1OTY3MDRlZWI4MzE1ZjE2YmZiZTkwOWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKQEAgLTQwLDE0ICs0MCw2
IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1bmtHZW5lcmF0b3IoVk0mIHZtKQotewot
ICAgIENDYWxsSGVscGVycyBqaXQobnVsbHB0cik7Ci0gICAgaml0LnByb2JlKE9TUkV4aXQ6OmV4
ZWN1dGVPU1JFeGl0LCAmdm0pOwotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9C
QUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRU
aHVua1B0clRhZywgIkRGRyBPU1IgZXhpdCB0aHVuayIpOwotfQotCiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0m
IHZtKQogewogICAgIENDYWxsSGVscGVycyBqaXQobnVsbHB0cik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUaHVua3MuaAppbmRleCAwNWE1MGE1NGIyNWQ1MWRiY2IxODU4ZmU3YWFkY2E0ODY4
MjA1ZDllLi44YjVjM2YwMWE0ODUyMGI3YWFhYWFlYmFmZjkzYzNiMjZjY2Q5ODRmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgKQEAgLTM1LDcgKzM1LDYgQEAgY2xhc3MgVk07
CiAKIG5hbWVzcGFjZSBERkcgewogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IG9zckV4aXRUaHVua0dlbmVyYXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNJik7CiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckVudHJ5VGh1bmtHZW5lcmF0b3Io
Vk0mKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hl
Y2tIb2lzdGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNo
ZWNrSG9pc3RpbmdQaGFzZS5jcHAKaW5kZXggMGUyNWQ3ZDE0YmU1ZmQ0YWE0MDkxZmQ5ODEzZjE0
ZDBkY2Y4NjZlZC4uZjViOWVkMmYzNTgzNTNkMmNjOGEwZWFjZmU0YmE4NmExMWFjNDdiNyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1Bo
YXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0
aW5nUGhhc2UuY3BwCkBAIC0xNDYsOSArMTQ2LDkgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICBpZiAoaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dG8gY2hlY2tPcCA9IENoZWNrU3RydWN0dXJlOwogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKFNwZWNDZWxsQ2hlY2sgJiBTcGVjRW1wdHkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KS0+bG9jYWwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bG9jYWwgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdp
c3RlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8qIGlubGluZUNhbGxGcmFt
ZSA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoKGxvY2FsIC0gKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwKSkgPT0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
MCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGxvY2FsIC0gKGlubGluZUNh
bGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwKSkgPT0gdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDApKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHx0aGlzfCBjYW4gYmUgdGhlIFREWiB2YWx1ZS4gVGhlIGNhbGwgZW50
cnlwb2ludCB3b24ndCBoYXZlIHx0aGlzfCBhcyBURFosCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGJ1dCBhIGNhdGNoIG9yIGEgbG9vcCBPU1IgZW50cnkgbWF5IGhhdmUgfHRo
aXN8IGJlIFREWi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tPcCA9IENo
ZWNrU3RydWN0dXJlT3JFbXB0eTsKQEAgLTE2OCw4ICsxNjgsOCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9PSBub2RlKQotICAgICAgICAg
ICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKSA9IGdldExvY2FsOworICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpID09IG5vZGUpCisgICAgICAg
ICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUt
Pm9wZXJhbmQoKSkgPSBnZXRMb2NhbDsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguc3Vic3RpdHV0ZUdldExvY2FsKCpibG9jaywgaW5kZXhJbkJsb2Nr
LCB2YXJpYWJsZSwgZ2V0TG9jYWwpOwogICAgICAgICAgICAgICAgICAgICAKQEAgLTQ0OCw3ICs0
NDgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
Y29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzID0gbV9n
cmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcygpOwogICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgaW50IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAg
ICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRG
b3JJbmRleChpKTsKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgIGlmICghbm9kZSkKICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsaWRhdGUuY3BwCmluZGV4IDdlYTkzNDg5ZGVhYzE3NGFlNzJlZjU2OGYzYWNlNjU1YWFkZmU5
NDcuLmU5NDE4ODcxMTFhMzgwMjRiMzE5ZDNhN2QxMzgxYjRiNDI4NWUzMjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCkBAIC00ODMsNyArNDgzLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnBoaXNbaV07CiAgICAg
ICAgICAgICAgICAgQVNTRVJUKHBoaXNJblRoaXNCbG9jay5jb250YWlucyhub2RlKSk7CiAgICAg
ICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCBub2RlLT5vcCgpID09IFBoaSk7Ci0gICAgICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+bG9jYWwoKTsKKyAgICAgICAg
ICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBub2RlLT5vcGVyYW5kKCk7CiAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7ICsr
aikgewogICAgICAgICAgICAgICAgICAgICAvLyBQaGkgY2hpbGRyZW4gaW4gTG9hZFN0b3JlIGZv
cm0gYXJlIGludmFsaWQuCiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9
PSBMb2FkU3RvcmUgJiYgYmxvY2stPmlzUGhpSW5kZXgoaSkpCkBAIC01MTksMTAgKzUxOSwxMCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwg
YmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7ICsraykgewogICAgICAgICAgICAgICAgICAgICAg
ICAgQmFzaWNCbG9jayogcHJldkJsb2NrID0gYmxvY2stPnByZWRlY2Vzc29yc1trXTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChibG9jay0+cHJlZGVjZXNzb3JzW2tdKSwgcHJl
dkJsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHByZXZOb2RlID0gcHJldkJs
b2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBwcmV2Tm9kZSA9IHByZXZCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQo
b3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgUGhpIHRo
YXQgaXMgbm90IHJlZmVycmluZyB0byAqdGhpcyogYmxvY2sgdGhlbiBhbGwgcHJlZGVjZXNzb3Jz
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtdXN0IGhhdmUgdGhhdCBsb2NhbCBhdmFpbGFi
bGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLCBibG9j
ay0+cHJlZGVjZXNzb3JzW2tdKSwgcHJldk5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKG9wZXJhbmQsIGJsb2NrLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdKSwgcHJldk5v
ZGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwcmV2Tm9kZS0+b3AoKSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgRmx1c2g6CkBAIC01MzMsMTEgKzUzMywxMSBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5wcmVkZWNl
c3NvcnNba10sIHByZXZOb2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgob3BlcmFuZCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb2NhbCwgYmxvY2stPnByZWRlY2Vz
c29yc1trXSwgcHJldk5vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcGVyYW5k
LCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJldk5vZGUtPm9wKCkgPT0gU2V0TG9jYWwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudERlZmluaXRlbHkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudE1h
eWJlCkBAIC01NDcsMjQgKzU0NywyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCBpdCBjYW5ub3QgcmVmZXIgaW50byB0aGlzIGJsb2Nr
LgotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+cHJlZGVj
ZXNzb3JzW2tdLCBwcmV2Tm9kZSksICFwcmV2QmxvY2stPmlzSW5CbG9jayhlZGdlLm5vZGUoKSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG9wZXJhbmQsIGJsb2NrLT5wcmVk
ZWNlc3NvcnNba10sIHByZXZOb2RlKSwgIXByZXZCbG9jay0+aXNJbkJsb2NrKGVkZ2Uubm9kZSgp
KSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZm91bmQpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgT3BlcmFuZHM8
c2l6ZV90PiBnZXRMb2NhbFBvc2l0aW9ucygKLSAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFi
bGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksCi0gICAgICAgICAgICAgICAgYmxvY2stPnZh
cmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKLSAgICAgICAgICAgIE9wZXJhbmRzPHNp
emVfdD4gc2V0TG9jYWxQb3NpdGlvbnMoCi0gICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLAotICAgICAgICAgICAgICAgIGJsb2NrLT52YXJp
YWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgICAgICBPcGVyYW5kczxzaXpl
X3Q+IGdldExvY2FsUG9zaXRpb25zKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVh
ZCk7CisgICAgICAgICAgICBPcGVyYW5kczxzaXplX3Q+IHNldExvY2FsUG9zaXRpb25zKE9wZXJh
bmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJP
ZkFyZ3VtZW50cygpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBWQUxJREFURSgodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoaSksIGJsb2NrKSwgIWJsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXJn
dW1lbnQoaSkgfHwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChpKS0+YWNjZXNzZXNT
dGFjayhtX2dyYXBoKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoKHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSwgYmxvY2spLCAhYmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5hcmd1bWVudChpKSB8fCBibG9jay0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpLT5h
Y2Nlc3Nlc1N0YWNrKG1fZ3JhcGgpKTsKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zv
cm0gPT0gVGhyZWFkZWRDUFMpCi0gICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChpKSwgYmxvY2spLCAhYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5h
cmd1bWVudChpKSB8fCBibG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGkpLT5hY2Nlc3Nl
c1N0YWNrKG1fZ3JhcGgpKTsKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSwgYmxvY2spLCAhYmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5hcmd1bWVudChpKSB8fCBibG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50
KGkpLT5hY2Nlc3Nlc1N0YWNrKG1fZ3JhcGgpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5hcmd1bWVudChpKSA9IG5vdFNldDsKICAgICAgICAg
ICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5hcmd1bWVudChpKSA9IG5vdFNldDsKQEAgLTY2OCwy
NCArNjY0LDI0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGlmICghbV9teVJlZkNv
dW50cy5nZXQobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgYmxvY2spLCBnZXRMb2NhbFBvc2l0aW9u
cy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID09IG5vdFNldCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURSgobm9kZSwgYmxvY2spLCBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5v
ZGUtPm9wZXJhbmQoKSkgPT0gbm90U2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKChub2RlLCBibG9jayksICEhbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgVkFMSURBVEUoKG5vZGUsIGJsb2NrKSwgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gU2V0
QXJndW1lbnREZWZpbml0ZWx5IHx8IG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFBoaSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMu
b3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGk7CisgICAgICAgICAgICAgICAgICAgIGdldExvY2Fs
UG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IGk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICAg
ICAgICAgIC8vIE9ubHkgcmVjb3JkIHRoZSBmaXJzdCBTZXRMb2NhbC4gVGhlcmUgbWF5IGJlIG11
bHRpcGxlIFNldExvY2FscwogICAgICAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIG9mIGZsdXNo
aW5nLgotICAgICAgICAgICAgICAgICAgICBpZiAoc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChu
b2RlLT5sb2NhbCgpKSAhPSBub3RTZXQpCisgICAgICAgICAgICAgICAgICAgIGlmIChzZXRMb2Nh
bFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgIT0gbm90U2V0KQogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRp
b25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBpOworICAgICAgICAgICAgICAgICAgICBzZXRM
b2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50RGVmaW5pdGVs
eToKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBhY3RzIGxpa2UgYSByZXNldC4gSXQncyBv
ayB0byBoYXZlIGEgc2Vjb25kIEdldExvY2FsIGZvciBhIGxvY2FsIGluIHRoZSBzYW1lCiAgICAg
ICAgICAgICAgICAgICAgIC8vIGJsb2NrIGlmIHdlIGhhZCBhIFNldEFyZ3VtZW50RGVmaW5pdGVs
eSBmb3IgdGhhdCBsb2NhbC4KLSAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMu
b3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vdFNldDsKLSAgICAgICAgICAgICAgICAgICAgc2V0
TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vdFNldDsKKyAgICAgICAg
ICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0g
bm90U2V0OworICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5v
ZGUtPm9wZXJhbmQoKSkgPSBub3RTZXQ7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnRNYXliZToKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CkBAIC03MTEsNyArNzA3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJl
ck9mQXJndW1lbnRzKCk7ICsraSkgewogICAgICAgICAgICAgICAgIGNoZWNrT3BlcmFuZCgKLSAg
ICAgICAgICAgICAgICAgICAgYmxvY2ssIGdldExvY2FsUG9zaXRpb25zLCBzZXRMb2NhbFBvc2l0
aW9ucywgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpOworICAgICAgICAgICAgICAgICAg
ICBibG9jaywgZ2V0TG9jYWxQb3NpdGlvbnMsIHNldExvY2FsUG9zaXRpb25zLCB2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJl
ck9mTG9jYWxzKCk7ICsraSkgewogICAgICAgICAgICAgICAgIGNoZWNrT3BlcmFuZCgKQEAgLTk2
OCwyNiArOTY0LDI2IEBAIHByaXZhdGU6CiAgICAgICAgIGRhdGFMb2cobm9kZSwgIiAtPiAiLCBl
ZGdlKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChWaXJ0
dWFsUmVnaXN0ZXIgbG9jYWwsIEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHZvaWQgcmVwb3J0VmFs
aWRhdGlvbkNvbnRleHQoT3BlcmFuZCBvcGVyYW5kLCBCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7
CiAgICAgICAgIGlmICghYmxvY2spIHsKLSAgICAgICAgICAgIGRhdGFMb2cobG9jYWwsICIgaW4g
bnVsbCBCbG9jayAiKTsKKyAgICAgICAgICAgIGRhdGFMb2cob3BlcmFuZCwgIiBpbiBudWxsIEJs
b2NrICIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgZGF0YUxv
Zyhsb2NhbCwgIiBpbiBCbG9jayAiLCAqYmxvY2spOworICAgICAgICBkYXRhTG9nKG9wZXJhbmQs
ICIgaW4gQmxvY2sgIiwgKmJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxp
ZGF0aW9uQ29udGV4dCgKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCYXNpY0Jsb2Nr
KiBzb3VyY2VCbG9jaywgQmFzaWNCbG9jayogZGVzdGluYXRpb25CbG9jaykKKyAgICAgICAgT3Bl
cmFuZCBvcGVyYW5kLCBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9jaywgQmFzaWNCbG9jayogZGVzdGlu
YXRpb25CbG9jaykKICAgICB7Ci0gICAgICAgIGRhdGFMb2cobG9jYWwsICIgaW4gQmxvY2sgIiwg
KnNvdXJjZUJsb2NrLCAiIC0+ICIsICpkZXN0aW5hdGlvbkJsb2NrKTsKKyAgICAgICAgZGF0YUxv
ZyhvcGVyYW5kLCAiIGluIEJsb2NrICIsICpzb3VyY2VCbG9jaywgIiAtPiAiLCAqZGVzdGluYXRp
b25CbG9jayk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQo
Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgQmFzaWNCbG9jayogc291cmNlQmxvY2ss
IE5vZGUqIHByZXZOb2RlKQorICAgICAgICBPcGVyYW5kIG9wZXJhbmQsIEJhc2ljQmxvY2sqIHNv
dXJjZUJsb2NrLCBOb2RlKiBwcmV2Tm9kZSkKICAgICB7Ci0gICAgICAgIGRhdGFMb2cocHJldk5v
ZGUsICIgZm9yICIsIGxvY2FsLCAiIGluIEJsb2NrICIsICpzb3VyY2VCbG9jayk7CisgICAgICAg
IGRhdGFMb2cocHJldk5vZGUsICIgZm9yICIsIG9wZXJhbmQsICIgaW4gQmxvY2sgIiwgKnNvdXJj
ZUJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChO
b2RlKiBub2RlLCBCYXNpY0Jsb2NrKiBibG9jaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCmluZGV4IDAzZTg5MjBm
MmY2ZjNlZThiYTE0ODZiMGJkNzc2NTYxZjEwZTU5NGMuLjc0ZWE2MThlOTAxMTI5YTU3ZTJjODNi
Yjg5MmE3NWI3YjgwNjMzYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcApAQCAtNDEsMTEgKzQxLDkgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBuYW1lc3BhY2UgewogCi1uYW1lc3BhY2Ug
REZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsIHsKLXN0YXRpYyBjb25zdGV4cHIgYm9v
bCB2ZXJib3NlID0gZmFsc2U7Ci19CiAKIGNsYXNzIFZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UgOiBw
dWJsaWMgUGhhc2UgeworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7
CiBwdWJsaWM6CiAgICAgVmFyYXJnc0ZvcndhcmRpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAg
ICAgIDogUGhhc2UoZ3JhcGgsICJ2YXJhcmdzIGZvcndhcmRpbmciKQpAQCAtNTYsNyArNTQsNyBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIG1f
Z3JhcGgubV9mb3JtICE9IFNTQSk7CiAgICAgICAgIAotICAgICAgICBpZiAoREZHVmFyYXJnc0Zv
cndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgIGlmICh2ZXJib3NlKSB7
CiAgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUgdmFyYXJncyBmb3J3YXJkaW5nOlxu
Iik7CiAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQpAQCAtODgsNyArODYs
NyBAQCBwcml2YXRlOgogICAgICAgICAvLyBXZSBleHBlY3QgY2FsbHMgaW50byB0aGlzIGZ1bmN0
aW9uIHRvIGJlIHJhcmUuIFNvLCB0aGlzIGlzIHdyaXR0ZW4gaW4gYSBzaW1wbGUgTyhuKSBtYW5u
ZXIuCiAgICAgICAgIAogICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBibG9jay0+YXQoY2FuZGlk
YXRlTm9kZUluZGV4KTsKLSAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRl
cm5hbDo6dmVyYm9zZSkKKyAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9n
KCJIYW5kbGluZyBjYW5kaWRhdGUgIiwgY2FuZGlkYXRlLCAiXG4iKTsKICAgICAgICAgCiAgICAg
ICAgIC8vIFdlIGVsaW1pbmF0ZSBHZXRCdXR0ZXJmbHkgb3ZlciBDcmVhdGVDbG9uZWRBcmd1bWVu
dHMgaWYgdGhlIGJ1dHRlcmZseSBpcyBvbmx5CkBAIC0xMDUsNyArMTAzLDcgQEAgcHJpdmF0ZToK
IAogICAgICAgICAgICAgYXV0byBkZWZhdWx0RXNjYXBlID0gWyZdIHsKICAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC51c2VzKG5vZGUsIGNhbmRpZGF0ZSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgRXNjYXBlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMTcsOSArMTE1LDEwIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpICE9IGNhbmRpZGF0ZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbm9kZS0+dW5saW5rZWRPcGVyYW5kKCku
aXNUbXAoKSwgIldlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IGEgdG1wIHJlZmVycmluZyB0byBh
biBhcmd1bWVudHMgb2JqZWN0LiIpOwogICAgICAgICAgICAgICAgIGxhc3RVc2VySW5kZXggPSBu
b2RlSW5kZXg7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZWxldmFudExvY2Fscy5jb250YWlucyhu
b2RlLT51bmxpbmtlZExvY2FsKCkpKQotICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2Fs
cy5hcHBlbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJl
bGV2YW50TG9jYWxzLmNvbnRhaW5zKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpLnZpcnR1YWxSZWdp
c3RlcigpKSkKKyAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbHMuYXBwZW5kKG5vZGUt
PnVubGlua2VkT3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQ2hlY2tWYXJhcmdzOgpA
QCAtMTQwLDEzICsxMzksMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIHNh
d0VzY2FwZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAg
IGlmIChzYXdFc2NhcGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3
YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRXNjYXBlIGF0ICIs
IG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgICAgICAgICAgY2FzZSBM
b2FkVmFyYXJnczoKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC51c2VzKG5vZGUsIGNhbmRp
ZGF0ZSkpCiAgICAgICAgICAgICAgICAgICAgIGxhc3RVc2VySW5kZXggPSBub2RlSW5kZXg7CkBA
IC0xNTcsNyArMTU3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJh
cmdzOgogICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjYW5kaWRhdGUgfHwgbm9kZS0+Y2hp
bGQyKCkgPT0gY2FuZGlkYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEVzY2FwZSBh
dCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgICAgIH0KQEAgLTE2Nyw3ICsxNjcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCkgPT0gY2FuZGlkYXRlICYmIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0xvYWRl
ZEZyb20oKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQ
aGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBFc2NhcGUgYXQgIiwgbm9kZSwg
IlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBA
IC0yMjYsNyArMjI2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICghdmFsaWRHZXRCeU9m
ZnNldCkgewogICAgICAgICAgICAgICAgIGZvciAoTm9kZSogYnV0dGVyZmx5IDogY2FuZGlkYXRl
QnV0dGVyZmxpZXMpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudXNlcyhub2Rl
LCBidXR0ZXJmbHkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0Zv
cndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEJ1
dHRlcmZseSBlc2NhcGVkIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yMzUsMTEgKzIzNSwxMSBAQCBw
cml2YXRlOgogCiAgICAgICAgICAgICBmb3JBbGxLaWxsZWRPcGVyYW5kcygKICAgICAgICAgICAg
ICAgICBtX2dyYXBoLCBub2RlLCBibG9jay0+dHJ5QXQobm9kZUluZGV4ICsgMSksCi0gICAgICAg
ICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgS2lsbGluZyAiLCByZWcsICIgd2hpbGUgd2Ug
YXJlIGludGVyZXN0ZWQgaW4gIiwgbGlzdER1bXAocmVsZXZhbnRMb2NhbHMpLCAiXG4iKTsKKyAg
ICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBLaWxs
aW5nICIsIG9wZXJhbmQsICIgd2hpbGUgd2UgYXJlIGludGVyZXN0ZWQgaW4gIiwgbGlzdER1bXAo
cmVsZXZhbnRMb2NhbHMpLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJlbGV2YW50TG9jYWxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocmVsZXZhbnRMb2NhbHNbaV0gPT0gcmVnKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAob3BlcmFuZCA9PSByZWxldmFudExvY2Fsc1tpXSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxzW2ktLV0gPSByZWxldmFudExvY2Fscy5s
YXN0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbHMucmVtb3Zl
TGFzdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RVc2VySW5kZXggPSBub2Rl
SW5kZXg7CkBAIC0yNDcsNyArMjQ3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9Ci0gICAgICAgIGlmIChERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgIGlmICh2ZXJib3NlKQog
ICAgICAgICAgICAgZGF0YUxvZygiU2VsZWN0ZWQgbGFzdFVzZXJJbmRleCA9ICIsIGxhc3RVc2Vy
SW5kZXgsICIsICIsIGJsb2NrLT5hdChsYXN0VXNlckluZGV4KSwgIlxuIik7CiAgICAgICAgIAog
ICAgICAgICAvLyBXZSdyZSBzdGlsbCBpbiBidXNpbmVzcy4gRGV0ZXJtaW5lIGlmIGJldHdlZW4g
dGhlIGNhbmRpZGF0ZSBhbmQgdGhlIGxhc3QgdXNlciB0aGVyZSBpcyBhbnkKQEAgLTI2MywxNiAr
MjYzLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgICAg
ICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgICAgICBjYXNlIEtpbGxTdGFjazoKLSAgICAgICAg
ICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPnVu
bGlua2VkTG9jYWwoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3
YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAoYXJndW1l
bnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiAgICBJbnRlcmZlcmVuY2UgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dFN0YWNrOgotICAg
ICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9k
ZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
REZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAg
ICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+c3RhY2tB
Y2Nlc3NEYXRhKCktPm9wZXJhbmQpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEludGVyZmVyZW5jZSBhdCAi
LCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
ICAgIH0KQEAgLTI4MCw4ICsyODAsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgIGNhc2UgRmx1c2g6Ci0gICAgICAg
ICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT5s
b2NhbCgpKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQ
aGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZv
bHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+b3BlcmFuZCgpKSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
ICBJbnRlcmZlcmVuY2UgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgICAgICB9CkBAIC0yOTcsMTMgKzI5NywxMiBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaGVhcC5wYXlsb2FkKCkuaXNU
b3AoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnKGhlYXAu
cGF5bG9hZCgpLnZhbHVlMzIoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1l
bnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIHJlZykpCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIGhlYXAub3BlcmFu
ZCgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2VzSW50ZXJmZXJlID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgTm9PcENsb2JiZXJp
emUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGRvZXNJbnRlcmZlcmUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgSW50ZXJmZXJlbmNlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtMzExLDcgKzMxMCw3IEBA
IHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIFdlIGNhbiBtYWtlIHRo
aXMgd29yay4KLSAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6
dmVyYm9zZSkKKyAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
V2lsbCBkbyBmb3J3YXJkaW5nIVxuIik7CiAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAg
ICAgIApAQCAtMzQxLDggKzM0MCwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIFdl
IGRvbid0IG5lZWQgdG8gY2hhbmdlIGFueXRoaW5nIHdpdGggdGhlc2UuCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFZhcmFyZ3NMZW5n
dGg6IHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJndW1lbnRzQ2hpbGQoKSAhPSBjYW5k
aWRhdGUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgbm9k
ZS0+Y29udmVydFRvSWRlbnRpdHlPbihlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgo
aW5zZXJ0aW9uU2V0LCBjYW5kaWRhdGUsIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2luLCAvKiBhZGRU
aGlzID0gKi8gdHJ1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
CiAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgotICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKSAhPSBjYW5kaWRhdGUpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFyZ3Vt
ZW50c0NoaWxkKCkgIT0gY2FuZGlkYXRlKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhGb3J3YXJkVmFyYXJncyk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAKaW5kZXggOGViZmZiNDM1ZWQ0ZGJmNjAyYmQ2
MmFlZDRjMzQzMmVhNWE4MjkwMi4uMmFjMmVlMzliNGNjYWQzMDgxMjViNGU2ZWNjODhhODdjN2Qx
NzlkOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFj
Y2Vzc0RhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVB
Y2Nlc3NEYXRhLmNwcApAQCAtMzEsOCArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCiBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNzRGF0YSgpCi0gICAg
OiBtX2xvY2FsKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ+OjptaW4oKSkpCi0gICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCisgICAgOiBtX3By
ZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgLCBtX2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKFNwZWNO
b25lKQogICAgICwgbV9mbGFncygwKQogICAgICwgbV9zaG91bGROZXZlclVuYm94KGZhbHNlKQpA
QCAtNDUsMTAgKzQ0LDEwIEBAIFZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRh
KCkKICAgICBjbGVhclZvdGVzKCk7CiB9CiAKLVZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVB
Y2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBsb2NhbCkKLSAgICA6IG1fbG9jYWwobG9jYWwpCi0g
ICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCitWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxl
QWNjZXNzRGF0YShPcGVyYW5kIG9wZXJhbmQpCisgICAgOiBtX3ByZWRpY3Rpb24oU3BlY05vbmUp
CiAgICAgLCBtX2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKFNwZWNOb25lKQorICAgICwgbV9vcGVy
YW5kKG9wZXJhbmQpCiAgICAgLCBtX2ZsYWdzKDApCiAgICAgLCBtX3Nob3VsZE5ldmVyVW5ib3go
ZmFsc2UpCiAgICAgLCBtX3N0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoZmFsc2UpCkBAIC04
Nyw3ICs4Niw3IEBAIGJvb2wgVmFyaWFibGVBY2Nlc3NEYXRhOjpzaG91bGRVc2VEb3VibGVGb3Jt
YXRBY2NvcmRpbmdUb1ZvdGUoKQogewogICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgdGhpcyBmYWNp
bGl0eSBmb3IgYXJndW1lbnRzLCB5ZXQuCiAgICAgLy8gRklYTUU6IG1ha2UgdGhpcyB3b3JrIGZv
ciBhcmd1bWVudHMuCi0gICAgaWYgKGxvY2FsKCkuaXNBcmd1bWVudCgpKQorICAgIGlmIChvcGVy
YW5kKCkuaXNBcmd1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAg
IC8vIElmIHRoZSB2YXJpYWJsZSBpcyBub3QgYSBudW1iZXIgcHJlZGljdGlvbiwgdGhlbiB0aGlz
IGRvZXNuJ3QKQEAgLTEyMSw3ICsxMjAsNyBAQCBib29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6dGFs
bHlWb3Rlc0ZvclNob3VsZFVzZURvdWJsZUZvcm1hdCgpCiB7CiAgICAgQVNTRVJUKGlzUm9vdCgp
KTsKICAgICAgICAgCi0gICAgaWYgKGxvY2FsKCkuaXNBcmd1bWVudCgpIHx8IHNob3VsZE5ldmVy
VW5ib3goKQorICAgIGlmIChvcGVyYW5kKCkuaXNBcmd1bWVudCgpIHx8IHNob3VsZE5ldmVyVW5i
b3goKQogICAgICAgICB8fCAoZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc0FycmF5SW5kZXgp
KQogICAgICAgICByZXR1cm4gREZHOjptZXJnZURvdWJsZUZvcm1hdFN0YXRlKG1fZG91YmxlRm9y
bWF0U3RhdGUsIE5vdFVzaW5nRG91YmxlRm9ybWF0KTsKICAgICAKQEAgLTE3Niw3ICsxNzUsNyBA
QCBib29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6Y291bGRSZXByZXNlbnRJbnQ1MkltcGwoKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gV2UgcHVudCBmb3IgbWFjaGluZSBhcmd1
bWVudHMuCi0gICAgaWYgKG1fbG9jYWwuaXNBcmd1bWVudCgpKQorICAgIGlmIChvcGVyYW5kKCku
aXNBcmd1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gVGhlIGFy
Z3VtZW50LWF3YXJlIHByZWRpY3Rpb24gLS0gd2hpY2ggbWVyZ2VzIGFsbCBvZiBhbiAoaW5saW5l
ZCBvciBtYWNoaW5lKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YXJpYWJsZUFjY2Vzc0RhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmgKaW5kZXggMWQzODkyZjllYzA5Y2JhMjA0M2ZhMjU0ZTYwOTQyMzIwMTRh
Mjg0ZS4uYmUyZmI1NDAxMzUyNjU1YjljN2FjYjEzYmRhZWE3NTU3M2ZjZWZmOSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCkBAIC00
OCwxMiArNDgsMTIgQEAgY2xhc3MgVmFyaWFibGVBY2Nlc3NEYXRhIDogcHVibGljIFVuaW9uRmlu
ZDxWYXJpYWJsZUFjY2Vzc0RhdGE+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShWYXJpYWJs
ZUFjY2Vzc0RhdGEpOwogcHVibGljOgogICAgIFZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgIFZh
cmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwpOworICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YShPcGVyYW5kKTsKICAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwoKQorICAg
IE9wZXJhbmQgb3BlcmFuZCgpCiAgICAgewotICAgICAgICBBU1NFUlQobV9sb2NhbCA9PSBmaW5k
KCktPm1fbG9jYWwpOwotICAgICAgICByZXR1cm4gbV9sb2NhbDsKKyAgICAgICAgQVNTRVJUKG1f
b3BlcmFuZCA9PSBmaW5kKCktPm1fb3BlcmFuZCk7CisgICAgICAgIHJldHVybiBtX29wZXJhbmQ7
CiAgICAgfQogICAgIAogICAgIFZpcnR1YWxSZWdpc3RlciYgbWFjaGluZUxvY2FsKCkKQEAgLTIw
OCwxMCArMjA4LDEwIEBAIHByaXZhdGU6CiAgICAgLy8gcHV0dGluZyB0aGVtIGhlcmUgc2ltcGxp
ZmllcyB0aGUgY29kZSwgYW5kIHdlIGRvbid0IGV4cGVjdCBERkcgc3BhY2UKICAgICAvLyB1c2Fn
ZSBmb3IgdmFyaWFibGUgYWNjZXNzIG5vZGVzIGRvIGJlIHNpZ25pZmljYW50LgogCi0gICAgVmly
dHVhbFJlZ2lzdGVyIG1fbG9jYWw7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG1fbWFjaGluZUxvY2Fs
OwogICAgIFNwZWN1bGF0ZWRUeXBlIG1fcHJlZGljdGlvbjsKICAgICBTcGVjdWxhdGVkVHlwZSBt
X2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9uOworICAgIE9wZXJhbmQgbV9vcGVyYW5kOworICAgIFZp
cnR1YWxSZWdpc3RlciBtX21hY2hpbmVMb2NhbDsKICAgICBOb2RlRmxhZ3MgbV9mbGFnczsKIAog
ICAgIGJvb2wgbV9zaG91bGROZXZlclVuYm94OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFyaWFibGVFdmVudC5jcHAKaW5kZXggZDNiNjZjYmFhNjExZmM0MDVlZTRmZWMwODEw
NjM3YTg5Njc4ZDEyZS4uOWNlMGY2N2Y5Nzk1MTk5YzA1YmYxMDA4OTRmOTg1OWFmMzQ5OGU2ZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwCkBA
IC02MCwxMSArNjAsMTEgQEAgdm9pZCBWYXJpYWJsZUV2ZW50OjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0CiAgICAgICAgIG91dC5wcmludCgiRGVhdGgoIiwgaWQoKSwgIikiKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBNb3ZIaW50RXZlbnQ6Ci0gICAgICAgIG91dC5wcmludCgiTW92
SGludCgiLCBpZCgpLCAiLCAiLCBieXRlY29kZVJlZ2lzdGVyKCksICIpIik7CisgICAgICAgIG91
dC5wcmludCgiTW92SGludCgiLCBpZCgpLCAiLCAiLCBvcGVyYW5kKCksICIpIik7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgU2V0TG9jYWxFdmVudDoKICAgICAgICAgb3V0LnByaW50KAotICAg
ICAgICAgICAgIlNldExvY2FsKG1hY2hpbmU6IiwgbWFjaGluZVJlZ2lzdGVyKCksICIgLT4gYnl0
ZWNvZGU6IiwgYnl0ZWNvZGVSZWdpc3RlcigpLAorICAgICAgICAgICAgIlNldExvY2FsKG1hY2hp
bmU6IiwgbWFjaGluZVJlZ2lzdGVyKCksICIgLT4gYnl0ZWNvZGU6Iiwgb3BlcmFuZCgpLAogICAg
ICAgICAgICAgIiwgIiwgZGF0YUZvcm1hdFRvU3RyaW5nKGRhdGFGb3JtYXQoKSksICIpIik7CiAg
ICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyaWFibGVFdmVudC5oCmluZGV4IGNlMmNhYzAxOTIzZjg2ODQ5YjE3OGZlMDZmNzY3OTAz
MTUxOWYwODEuLjdjOTkyMmM5MDZhYjQ0ZDdiMDM3NWY1NjlmY2YzZTI1ZTRmOGQ4ZTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oCkBAIC02OSw2ICs2
OSwxMCBAQCBlbnVtIFZhcmlhYmxlRXZlbnRLaW5kIDogdWludDhfdCB7CiB9OwogCiB1bmlvbiBW
YXJpYWJsZVJlcHJlc2VudGF0aW9uIHsKKyAgICBWYXJpYWJsZVJlcHJlc2VudGF0aW9uKCkgCisg
ICAgICAgIDogb3BlcmFuZCgpIAorICAgIHsgfQorCiAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lz
dGVySUQgZ3ByOwogICAgIE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgZnByOwogI2lmIFVT
RShKU1ZBTFVFMzJfNjQpCkBAIC03Nyw3ICs4MSw3IEBAIHVuaW9uIFZhcmlhYmxlUmVwcmVzZW50
YXRpb24gewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXlsb2FkR1BSOwog
ICAgIH0gcGFpcjsKICNlbmRpZgotICAgIGludDMyX3QgdmlydHVhbFJlZzsKKyAgICBPcGVyYW5k
IG9wZXJhbmQ7CiB9OwogCiBjbGFzcyBWYXJpYWJsZUV2ZW50IHsKQEAgLTE2Myw3ICsxNjcsNyBA
QCBwdWJsaWM6CiAgICAgICAgIFdoaWNoVHlwZSB3aGljaDsKICAgICAgICAgd2hpY2guaWQgPSBp
ZC5iaXRzKCk7CiAgICAgICAgIFZhcmlhYmxlUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb247
Ci0gICAgICAgIHJlcHJlc2VudGF0aW9uLnZpcnR1YWxSZWcgPSB2aXJ0dWFsUmVnaXN0ZXIub2Zm
c2V0KCk7CisgICAgICAgIHJlcHJlc2VudGF0aW9uLm9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXI7
CiAgICAgICAgIGV2ZW50Lm1fa2luZCA9IGtpbmQ7CiAgICAgICAgIGV2ZW50Lm1fZGF0YUZvcm1h
dCA9IGZvcm1hdDsKICAgICAgICAgZXZlbnQubV93aGljaCA9IFdURk1vdmUod2hpY2gpOwpAQCAt
MTgyLDEzICsxODYsMTMgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBzdGF0aWMgVmFyaWFi
bGVFdmVudCBzZXRMb2NhbCgKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2RlUmVnLCBW
aXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZywgRGF0YUZvcm1hdCBmb3JtYXQpCisgICAgICAgIE9w
ZXJhbmQgYnl0ZWNvZGVPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZywgRGF0YUZv
cm1hdCBmb3JtYXQpCiAgICAgewogICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50OwogICAgICAg
ICBXaGljaFR5cGUgd2hpY2g7CiAgICAgICAgIHdoaWNoLnZpcnR1YWxSZWcgPSBtYWNoaW5lUmVn
Lm9mZnNldCgpOwogICAgICAgICBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9u
OwotICAgICAgICByZXByZXNlbnRhdGlvbi52aXJ0dWFsUmVnID0gYnl0ZWNvZGVSZWcub2Zmc2V0
KCk7CisgICAgICAgIHJlcHJlc2VudGF0aW9uLm9wZXJhbmQgPSBieXRlY29kZU9wZXJhbmQ7CiAg
ICAgICAgIGV2ZW50Lm1fa2luZCA9IFNldExvY2FsRXZlbnQ7CiAgICAgICAgIGV2ZW50Lm1fZGF0
YUZvcm1hdCA9IGZvcm1hdDsKICAgICAgICAgZXZlbnQubV93aGljaCA9IFdURk1vdmUod2hpY2gp
OwpAQCAtMTk2LDEzICsyMDAsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZXZlbnQ7CiAg
ICAgfQogICAgIAotICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IG1vdkhpbnQoTWluaWZpZWRJRCBp
ZCwgVmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2RlUmVnKQorICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50
IG1vdkhpbnQoTWluaWZpZWRJRCBpZCwgT3BlcmFuZCBieXRlY29kZVJlZykKICAgICB7CiAgICAg
ICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7CiAgICAgICAgIFdoaWNoVHlwZSB3aGljaDsKICAgICAg
ICAgd2hpY2guaWQgPSBpZC5iaXRzKCk7CiAgICAgICAgIFZhcmlhYmxlUmVwcmVzZW50YXRpb24g
cmVwcmVzZW50YXRpb247Ci0gICAgICAgIHJlcHJlc2VudGF0aW9uLnZpcnR1YWxSZWcgPSBieXRl
Y29kZVJlZy5vZmZzZXQoKTsKKyAgICAgICAgcmVwcmVzZW50YXRpb24ub3BlcmFuZCA9IGJ5dGVj
b2RlUmVnOwogICAgICAgICBldmVudC5tX2tpbmQgPSBNb3ZIaW50RXZlbnQ7CiAgICAgICAgIGV2
ZW50Lm1fd2hpY2ggPSBXVEZNb3ZlKHdoaWNoKTsKICAgICAgICAgZXZlbnQubV9yZXByZXNlbnRh
dGlvbiA9IFdURk1vdmUocmVwcmVzZW50YXRpb24pOwpAQCAtMjY2LDEzICsyNzAsMTMgQEAgcHVi
bGljOgogICAgIFZpcnR1YWxSZWdpc3RlciBzcGlsbFJlZ2lzdGVyKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIEFTU0VSVChtX2tpbmQgPT0gQmlydGhUb1NwaWxsIHx8IG1fa2luZCA9PSBTcGlsbCk7
Ci0gICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIobV9yZXByZXNlbnRhdGlvbi5nZXQoKS52
aXJ0dWFsUmVnKTsKKyAgICAgICAgcmV0dXJuIG1fcmVwcmVzZW50YXRpb24uZ2V0KCkub3BlcmFu
ZC52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICB9Ci0gICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGJ5
dGVjb2RlUmVnaXN0ZXIoKSBjb25zdAorCisgICAgT3BlcmFuZCBvcGVyYW5kKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gU2V0TG9jYWxFdmVudCB8fCBtX2tpbmQgPT0g
TW92SGludEV2ZW50KTsKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX3JlcHJlc2Vu
dGF0aW9uLmdldCgpLnZpcnR1YWxSZWcpOworICAgICAgICByZXR1cm4gbV9yZXByZXNlbnRhdGlv
bi5nZXQoKS5vcGVyYW5kOwogICAgIH0KICAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGlu
ZVJlZ2lzdGVyKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCmluZGV4IDRiMjZjYjAyYzkzYTllODFjZmY0MDc0NmM2
N2U3MDVjZDVkMjEwYzUuLmVmNzA4NzQ1MWIwMzQ0NzFmYWI2MTk5ZjJlMTNjMDhlYTJhZmZjNzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0
cmVhbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50
U3RyZWFtLmNwcApAQCAtNDMsNyArNDMsNyBAQCB2b2lkIFZhcmlhYmxlRXZlbnRTdHJlYW06Omxv
Z0V2ZW50KGNvbnN0IFZhcmlhYmxlRXZlbnQmIGV2ZW50KQogewogICAgIGRhdGFMb2dGKCJzZXEj
JXU6Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNpemUoKSkpOwogICAgIGV2ZW50LmR1bXAoV1RG
OjpkYXRhRmlsZSgpKTsKLSAgICBkYXRhTG9nRigiICIpOworICAgIGRhdGFMb2dMbigiICIpOwog
fQogCiBuYW1lc3BhY2UgewpAQCAtMTIwLDEwICsxMjAsMTIgQEAgdW5zaWduZWQgVmFyaWFibGVF
dmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVP
cmlnaW4gY29kZU9yaWdpbiwgTWluaWZpZWRHcmFwaCYgZ3JhcGgsCiAgICAgdW5zaWduZWQgaW5k
ZXgsIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiB2YWx1ZVJlY292ZXJpZXMsIFZlY3RvcjxVbmRl
ZmluZWRPcGVyYW5kU3Bhbj4qIHVuZGVmaW5lZE9wZXJhbmRTcGFucykgY29uc3QKIHsKKyAgICBj
b25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0
VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7CiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVC
bG9jayA9IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CiAKICAgICB1bnNpZ25lZCBudW1W
YXJpYWJsZXM7CisgICAgdW5zaWduZWQgbnVtVG1wczsKICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIGludmFsaWRJbmRleCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KTsKICAgICB1bnNpZ25lZCBmaXJzdFVuZGVmaW5lZCA9IGludmFsaWRJbmRleDsKICAgICBib29s
IGZpcnN0VW5kZWZpbmVkSXNBcmd1bWVudCA9IGZhbHNlOwpAQCAtMTMxLDM3ICsxMzMsNDIgQEAg
dW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgYXV0byBmbHVz
aFVuZGVmaW5lZE9wZXJhbmRTcGFuID0gWyZdICh1bnNpZ25lZCBpKSB7CiAgICAgICAgIGlmIChm
aXJzdFVuZGVmaW5lZCA9PSBpbnZhbGlkSW5kZXgpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGludCBmaXJzdE9mZnNldCA9IHZhbHVlUmVjb3Zlcmllcy52aXJ0dWFsUmVnaXN0ZXJGb3JJ
bmRleChmaXJzdFVuZGVmaW5lZCkub2Zmc2V0KCk7Ci0gICAgICAgIGludCBsYXN0T2Zmc2V0ID0g
dmFsdWVSZWNvdmVyaWVzLnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGkgLSAxKS5vZmZzZXQoKTsK
KyAgICAgICAgaW50IGZpcnN0T2Zmc2V0ID0gdmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRl
eChmaXJzdFVuZGVmaW5lZCkudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7CisgICAgICAgIGlu
dCBsYXN0T2Zmc2V0ID0gdmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpIC0gMSkudmly
dHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7CiAgICAgICAgIGludCBtaW5PZmZzZXQgPSBzdGQ6Om1p
bihmaXJzdE9mZnNldCwgbGFzdE9mZnNldCk7CiAgICAgICAgIHVuZGVmaW5lZE9wZXJhbmRTcGFu
cy0+YXBwZW5kKHsgZmlyc3RVbmRlZmluZWQsIG1pbk9mZnNldCwgaSAtIGZpcnN0VW5kZWZpbmVk
IH0pOwogICAgICAgICBmaXJzdFVuZGVmaW5lZCA9IGludmFsaWRJbmRleDsKICAgICB9OwogICAg
IGF1dG8gcmVjb3JkVW5kZWZpbmVkT3BlcmFuZCA9IFsmXSAodW5zaWduZWQgaSkgewogICAgICAg
ICAvLyBXZSB3YW50IHRvIHNlcGFyYXRlIHRoZSBzcGFuIG9mIGFyZ3VtZW50cyBmcm9tIHRoZSBz
cGFuIG9mIGxvY2FscyBldmVuIGlmIHRoZXkgaGF2ZSBhZGphY2VudCBvcGVyYW5kcyBpbmRleGVz
LgotICAgICAgICBpZiAoZmlyc3RVbmRlZmluZWQgIT0gaW52YWxpZEluZGV4ICYmIGZpcnN0VW5k
ZWZpbmVkSXNBcmd1bWVudCAhPSB2YWx1ZVJlY292ZXJpZXMuaXNBcmd1bWVudChpKSkKKyAgICAg
ICAgaWYgKGZpcnN0VW5kZWZpbmVkICE9IGludmFsaWRJbmRleCAmJiBmaXJzdFVuZGVmaW5lZElz
QXJndW1lbnQgIT0gdmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKS5pc0FyZ3VtZW50
KCkpCiAgICAgICAgICAgICBmbHVzaFVuZGVmaW5lZE9wZXJhbmRTcGFuKGkpOwogCiAgICAgICAg
IGlmIChmaXJzdFVuZGVmaW5lZCA9PSBpbnZhbGlkSW5kZXgpIHsKICAgICAgICAgICAgIGZpcnN0
VW5kZWZpbmVkID0gaTsKLSAgICAgICAgICAgIGZpcnN0VW5kZWZpbmVkSXNBcmd1bWVudCA9IHZh
bHVlUmVjb3Zlcmllcy5pc0FyZ3VtZW50KGkpOworICAgICAgICAgICAgZmlyc3RVbmRlZmluZWRJ
c0FyZ3VtZW50ID0gdmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKS5pc0FyZ3VtZW50
KCk7CiAgICAgICAgIH0KICAgICB9OwogCiAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQotICAg
ICAgICBudW1WYXJpYWJsZXMgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShp
bmxpbmVDYWxsRnJhbWUpLT5udW1DYWxsZWVMb2NhbHMoKSArIFZpcnR1YWxSZWdpc3Rlcihpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkgKyAxOwotICAgIGVsc2UKKyAgICBp
ZiAoaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFz
ZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAg
ICAgbnVtVmFyaWFibGVzID0gY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIFZpcnR1YWxS
ZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkgKyAxOworICAg
ICAgICBudW1UbXBzID0gY29kZUJsb2NrLT5udW1UbXBzKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnRt
cE9mZnNldDsKKyAgICB9IGVsc2UgewogICAgICAgICBudW1WYXJpYWJsZXMgPSBiYXNlbGluZUNv
ZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCk7CisgICAgICAgIG51bVRtcHMgPSBiYXNlbGluZUNv
ZGVCbG9jay0+bnVtVG1wcygpOworICAgIH0KICAgICAKICAgICAvLyBDcmF6eSBzcGVjaWFsIGNh
c2U6IGlmIHdlJ3JlIGF0IGluZGV4ID09IDAgdGhlbiB0aGlzIG11c3QgYmUgYW4gYXJndW1lbnQg
Y2hlY2sKICAgICAvLyBmYWlsdXJlLCBpbiB3aGljaCBjYXNlIGFsbCB2YXJpYWJsZXMgYXJlIGFs
cmVhZHkgc2V0IHVwLiBUaGUgcmVjb3ZlcmllcyBzaG91bGQKICAgICAvLyByZWZsZWN0IHRoaXMu
CiAgICAgaWYgKCFpbmRleCkgewotICAgICAgICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxW
YWx1ZVJlY292ZXJ5Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzKTsK
KyAgICAgICAgLy8gV2UgZG9uJ3QgaW5jbHVkZSB0bXBzIGhlcmUgYmVjYXVzZSB0aGV5IGNhbid0
IGJlIHVzZWQgeWV0LgorICAgICAgICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxWYWx1ZVJl
Y292ZXJ5Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzLCAwKTsKICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZVJlY292ZXJpZXMuc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9IFZhbHVlUmVjb3Zlcnk6OmRpc3Bs
YWNlZEluSlNTdGFjaygKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIodmFsdWVSZWNv
dmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKSksIERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICAg
ICAgdmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKS52aXJ0dWFsUmVnaXN0ZXIoKSwg
RGF0YUZvcm1hdEpTKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVtVmFyaWFibGVzOwog
ICAgIH0KQEAgLTE3MiwxMiArMTc5LDEzIEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06
OnJlY29uc3RydWN0KAogICAgICAgICBzdGFydEluZGV4LS07CiAgICAgCiAgICAgLy8gU3RlcCAy
OiBDcmVhdGUgYSBtb2NrLXVwIG9mIHRoZSBERkcncyBzdGF0ZSBhbmQgZXhlY3V0ZSB0aGUgZXZl
bnRzLgotICAgIE9wZXJhbmRzPFZhbHVlU291cmNlPiBvcGVyYW5kU291cmNlcyhjb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzKTsKKyAgICBPcGVyYW5kczxWYWx1ZVNvdXJj
ZT4gb3BlcmFuZFNvdXJjZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcmlhYmxl
cywgbnVtVG1wcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gb3BlcmFuZFNvdXJjZXMuc2l6ZSgp
OyBpLS07KQogICAgICAgICBvcGVyYW5kU291cmNlc1tpXSA9IFZhbHVlU291cmNlKFNvdXJjZUlz
RGVhZCk7CiAgICAgSGFzaE1hcDxNaW5pZmllZElELCBNaW5pZmllZEdlbmVyYXRpb25JbmZvPiBn
ZW5lcmF0aW9uSW5mb3M7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRJbmRleDsgaSA8IGlu
ZGV4OyArK2kpIHsKICAgICAgICAgY29uc3QgVmFyaWFibGVFdmVudCYgZXZlbnQgPSBhdChpKTsK
KyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlByb2Nlc3NpbmcgZXZlbnQgIiwgZXZlbnQp
OwogICAgICAgICBzd2l0Y2ggKGV2ZW50LmtpbmQoKSkgewogICAgICAgICBjYXNlIFJlc2V0Ogog
ICAgICAgICAgICAgLy8gbm90aGluZyB0byBkby4KQEAgLTE5OSwyMSArMjA3LDIzIEBAIHVuc2ln
bmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBNb3ZIaW50RXZlbnQ6Ci0gICAgICAgICAgICBpZiAo
b3BlcmFuZFNvdXJjZXMuaGFzT3BlcmFuZChldmVudC5ieXRlY29kZVJlZ2lzdGVyKCkpKQotICAg
ICAgICAgICAgICAgIG9wZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQoZXZlbnQuYnl0ZWNvZGVSZWdp
c3RlcigpLCBWYWx1ZVNvdXJjZShldmVudC5pZCgpKSk7CisgICAgICAgICAgICBpZiAob3BlcmFu
ZFNvdXJjZXMuaGFzT3BlcmFuZChldmVudC5vcGVyYW5kKCkpKQorICAgICAgICAgICAgICAgIG9w
ZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQoZXZlbnQub3BlcmFuZCgpLCBWYWx1ZVNvdXJjZShldmVu
dC5pZCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTZXRMb2NhbEV2ZW50
OgotICAgICAgICAgICAgaWYgKG9wZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQuYnl0ZWNv
ZGVSZWdpc3RlcigpKSkKLSAgICAgICAgICAgICAgICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5k
KGV2ZW50LmJ5dGVjb2RlUmVnaXN0ZXIoKSwgVmFsdWVTb3VyY2U6OmZvckRhdGFGb3JtYXQoZXZl
bnQubWFjaGluZVJlZ2lzdGVyKCksIGV2ZW50LmRhdGFGb3JtYXQoKSkpOworICAgICAgICAgICAg
aWYgKG9wZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQub3BlcmFuZCgpKSkKKyAgICAgICAg
ICAgICAgICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSwgVmFsdWVT
b3VyY2U6OmZvckRhdGFGb3JtYXQoZXZlbnQubWFjaGluZVJlZ2lzdGVyKCksIGV2ZW50LmRhdGFG
b3JtYXQoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICB9CisKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiT3BlcmFuZCBzb3Vy
Y2VzOiAiLCBvcGVyYW5kU291cmNlcyk7CiAgICAgCiAgICAgLy8gU3RlcCAzOiBDb21wdXRlIHZh
bHVlIHJlY292ZXJpZXMhCi0gICAgdmFsdWVSZWNvdmVyaWVzID0gT3BlcmFuZHM8VmFsdWVSZWNv
dmVyeT4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcmlhYmxlcyk7CisgICAgdmFs
dWVSZWNvdmVyaWVzID0gT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4oT3BlcmFuZHNMaWtlLCBvcGVy
YW5kU291cmNlcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9wZXJhbmRTb3VyY2Vz
LnNpemUoKTsgKytpKSB7CiAgICAgICAgIFZhbHVlU291cmNlJiBzb3VyY2UgPSBvcGVyYW5kU291
cmNlc1tpXTsKICAgICAgICAgaWYgKHNvdXJjZS5pc1RyaXZpYWxseVJlY292ZXJhYmxlKCkpIHsK
QEAgLTIzMSw2ICsyNDEsNyBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0
cnVjdCgKICAgICAgICAgTWluaWZpZWROb2RlKiBub2RlID0gZ3JhcGguYXQoc291cmNlLmlkKCkp
OwogICAgICAgICBNaW5pZmllZEdlbmVyYXRpb25JbmZvIGluZm8gPSBnZW5lcmF0aW9uSW5mb3Mu
Z2V0KHNvdXJjZS5pZCgpKTsKICAgICAgICAgaWYgKCFpbmZvLmFsaXZlKSB7CisgICAgICAgICAg
ICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiT3BlcmFuZCAiLCB2YWx1ZVJlY292ZXJpZXMub3BlcmFu
ZEZvckluZGV4KGkpLCAiIGlzIGRlYWQuIik7CiAgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXNb
aV0gPSBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAg
IGlmIChzdHlsZSA9PSBSZWNvbnN0cnVjdGlvblN0eWxlOjpTZXBhcmF0ZWQpCiAgICAgICAgICAg
ICAgICAgcmVjb3JkVW5kZWZpbmVkT3BlcmFuZChpKTsKQEAgLTIzOCw2ICsyNDksNyBAQCB1bnNp
Z25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgfQogCiAgICAg
ICAgIGlmICh0cnlUb1NldENvbnN0YW50UmVjb3ZlcnkodmFsdWVSZWNvdmVyaWVzW2ldLCBub2Rl
KSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk9wZXJhbmQgIiwgdmFsdWVS
ZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKSwgIiBpcyBjb25zdGFudC4iKTsKICAgICAgICAg
ICAgIGlmIChzdHlsZSA9PSBSZWNvbnN0cnVjdGlvblN0eWxlOjpTZXBhcmF0ZWQpIHsKICAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSAmJiBub2RlLT5jb25zdGFudCgpID09
IGpzVW5kZWZpbmVkKCkpCiAgICAgICAgICAgICAgICAgICAgIHJlY29yZFVuZGVmaW5lZE9wZXJh
bmQoaSk7CkBAIC0yNjcsNyArMjc5LDcgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6
cmVjb25zdHJ1Y3QoCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZhbHVlUmVjb3Zlcmll
c1tpXSA9Ci0gICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soc3Rh
dGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihpbmZvLnUudmlydHVhbFJlZyksIGluZm8uZm9ybWF0
KTsKKyAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjayhpbmZvLnUu
b3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSwgaW5mby5mb3JtYXQpOwogICAgIH0KICAgICBpZiAo
c3R5bGUgPT0gUmVjb25zdHJ1Y3Rpb25TdHlsZTo6U2VwYXJhdGVkKQogICAgICAgICBmbHVzaFVu
ZGVmaW5lZE9wZXJhbmRTcGFuKG9wZXJhbmRTb3VyY2VzLnNpemUoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oCmluZGV4IDAxNTcz
MDA3ZWRkZGQ3MGYzMWQxN2FjMGQ5OWY3OGViZjVlYTZlYmMuLmU5ZTQzYWJmZWM0ODVmZWM3ZTY2
MzE1MWMxYzIyZWM1MTg5NzQxM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oCkBAIC00Miw5ICs0MiwxMiBAQCBzdHJ1Y3QgVW5k
ZWZpbmVkT3BlcmFuZFNwYW4gewogfTsKIAogY2xhc3MgVmFyaWFibGVFdmVudFN0cmVhbSA6IHB1
YmxpYyBWZWN0b3I8VmFyaWFibGVFdmVudD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2
ZXJib3NlID0gZmFsc2U7CiBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmRBbmRMb2coY29uc3QgVmFy
aWFibGVFdmVudCYgZXZlbnQpCiAgICAgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgIGxvZ0V2ZW50KGV2ZW50KTsKICAgICAgICAgYXBwZW5kKGV2ZW50KTsKICAgICB9CiAgICAg
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKaW5kZXgg
NGU3YTNjMTc0OWIwYWVlNWFhMDYyNDE4ZDUyOWNmM2MzMDdmYTg2ZC4uYjk1M2NmZWM3MTVjNmFh
ZGQyYjYyMTM4MWRhMTVhYTExYzJmY2M1MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ2FwYWJpbGl0aWVzLmNwcApAQCAtMTkzLDYgKzE5Myw3IEBAIGlubGluZSBDYXBhYmls
aXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgVGFpbENhbGxGb3J3YXJk
VmFyYXJnczoKICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgog
ICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBWYXJhcmdzTGVuZ3Ro
OgogICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CiAgICAgY2Fz
ZSBCcmFuY2g6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9T
UkVudHJ5SklUQ29kZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVu
dHJ5SklUQ29kZS5jcHAKaW5kZXggMzA4MGRjMzQ1MDljNzMzMzI0YjgxNDNkMmE5NTRmMDhlZGFm
MTNmYi4uYzAwNGZhY2NjMWFkMDVkMzZjZWRiZWRmOTY3ODJhYWI3ZGNiOTgzMyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcApA
QCAtMzEsOCArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiBGb3JP
U1JFbnRyeUpJVENvZGU6OkZvck9TUkVudHJ5SklUQ29kZSgpCi0gICAgOiBtX2J5dGVjb2RlSW5k
ZXgoVUlOVF9NQVgpCi0gICAgLCBtX2VudHJ5RmFpbHVyZUNvdW50KDApCisgICAgOiBtX2VudHJ5
RmFpbHVyZUNvdW50KDApCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAppbmRleCA0ZjJjYzgyODhkOTMwZTNkNWViY2E4MjA1MDdjM2EzZGU5
N2EwNjFkLi41ODM5MGQzNjk4MjExZjMyNGNiZDJjOTQyYmQwYjFiMjAwNjI2M2EzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0yMDksNyAr
MjA5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmNsZWFyU3RhY2tG
cmFtZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50
ZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDAsIGNvZGUuZnJhbWVTaXplKCkpOwogCiAgICAgICAg
ICAgICAgICAgICAgIGppdC5lbWl0U2F2ZShjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0
TGlzdCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRl
cihjb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAgICAgICAgICAg
ICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoY29kZUJsb2NrLCBWaXJ0dWFsUmVnaXN0
ZXIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7CiAgICAgICAgICAgICAgICAgfSk7CiAKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgY2F0Y2hFbnRyeXBvaW50SW5kZXggOiBtX2dyYXBoLm1f
ZW50cnlwb2ludEluZGV4VG9DYXRjaEJ5dGVjb2RlSW5kZXgua2V5cygpKSB7CkBAIC0yNzUsNyAr
Mjc1LDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUg
Q29kZUJsb2NrIHRvIGhhdmUgYSB3ZWFrIHBvaW50ZXIgdG8gaXRzZWxmIGJlY2F1c2UKICAgICAg
ICAgLy8gdGhhdCB3b3VsZCBjYXVzZSBpdCB0byBhbHdheXMgZ2V0IGNvbGxlY3RlZC4KLSAgICAg
ICAgbV9vdXQuc3RvcmVQdHIobV9vdXQuY29uc3RJbnRQdHIoYml0d2lzZV9jYXN0PGludHB0cl90
Pihjb2RlQmxvY2soKSkpLCBhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOwor
ICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5jb25zdEludFB0cihiaXR3aXNlX2Nhc3Q8aW50
cHRyX3Q+KGNvZGVCbG9jaygpKSksIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jaykpKTsKIAogICAgICAgICAvLyBTdGFjayBPdmVyZmxvdyBDaGVjay4K
ICAgICAgICAgdW5zaWduZWQgZXhpdEZyYW1lU2l6ZSA9IG1fZ3JhcGgucmVxdWlyZWRSZWdpc3Rl
ckNvdW50Rm9yRXhpdCgpICogc2l6ZW9mKFJlZ2lzdGVyKTsKQEAgLTM1NiwxNSArMzU2LDE1IEBA
IHB1YmxpYzoKIAogICAgICAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgogICAgICAgICAgICAg
YXZhaWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgp
Lm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1l
dGVycygpLCAwKTsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3Bl
cmFuZHM8QXZhaWxhYmlsaXR5Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwLCAwKTsK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJz
KCk7IGktLTspIHsKICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5h
cmd1bWVudChpKSA9Ci0gICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQo
Rmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKSk7CisgICAgICAg
ICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSkpOwogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZSBwcm9maWxlKCZtX2dyYXBoLm1fcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1l
bnQoaSkpOwotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoaSk7CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSk7CiAg
ICAgICAgICAgICAgICAgTFZhbHVlIGpzVmFsdWUgPSBtX291dC5sb2FkNjQoYWRkcmVzc0Zvcihv
cGVyYW5kKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc3dpdGNoIChtX2dy
YXBoLm1fYXJndW1lbnRGb3JtYXRzWzBdW2ldKSB7CkBAIC0xMjkxLDYgKzEyOTEsOSBAQCBwcml2
YXRlOgogICAgICAgICBjYXNlIENhbGxFdmFsOgogICAgICAgICAgICAgY29tcGlsZUNhbGxFdmFs
KCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgorICAg
ICAgICAgICAgY29tcGlsZVZhcmFyZ3NMZW5ndGgoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICAgICAgY29tcGlsZUxvYWRWYXJhcmdzKCk7
CiAgICAgICAgICAgICBicmVhazsKQEAgLTE5NjcsNyArMTk3MCw3IEBAIHByaXZhdGU6CiAgICAg
ewogICAgICAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpT
VmFsdWUqPigKICAgICAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+ZnRsRm9yT1NSRW50cnko
KS0+ZW50cnlCdWZmZXIoKS0+ZGF0YUJ1ZmZlcigpKTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291
dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUoYnVmZmVyICsgbV9ub2RlLT51bmxpbmtlZExvY2FsKCku
dG9Mb2NhbCgpKSkpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChtX291dC5hYnNv
bHV0ZShidWZmZXIgKyBtX25vZGUtPnVubGlua2VkT3BlcmFuZCgpLnZpcnR1YWxSZWdpc3Rlcigp
LnRvTG9jYWwoKSkpKTsKICAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVFeHRyYWN0Q2F0Y2hMb2Nh
bCgpCkBAIC0xOTg2LDcgKzE5ODksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZUdldFN0
YWNrKCkKICAgICB7CiAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fbm9kZS0+c3Rh
Y2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5v
cGVyYW5kKGRhdGEtPmxvY2FsKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0
YXRlLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCk7CiAgICAgICAgIAogICAgICAgICBERkdfQVNTRVJU
KG1fZ3JhcGgsIG1fbm9kZSwgaXNDb25jcmV0ZShkYXRhLT5mb3JtYXQpLCBkYXRhLT5mb3JtYXQp
OwogICAgICAgICAKQEAgLTQ3NDgsNyArNDc1MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBp
ZiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+IDEpCiAgICAg
ICAgICAgICAgICAgYmFzZSA9IGFkZHJlc3NGb3IoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNX
aXRoRml4dXBbMF0udmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIGJhc2UgPSBhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDApKTsKKyAg
ICAgICAgICAgIGJhc2UgPSBhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5j
bHVkaW5nVGhpcygwKSk7CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgcmVzdWx0OwogICAgICAg
ICBpZiAoYmFzZSkgewpAQCAtNzk4MSwxMyArNzk4NCwxMyBAQCBwcml2YXRlOgogICAgIAogICAg
IHZvaWQgY29tcGlsZUdldENhbGxlZSgpCiAgICAgewotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0
LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CisgICAgICAgIHNl
dEpTVmFsdWUobV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJh
bWVTbG90OjpjYWxsZWUpKSkpOwogICAgIH0KIAogICAgIHZvaWQgY29tcGlsZVNldENhbGxlZSgp
CiAgICAgewogICAgICAgICBhdXRvIGNhbGxlZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7
Ci0gICAgICAgIG1fb3V0LnN0b3JlUHRyKGNhbGxlZSwgcGF5bG9hZEZvcihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpKTsKKyAgICAgICAgbV9vdXQuc3RvcmVQdHIoY2FsbGVlLCBwYXlsb2FkRm9yKFZp
cnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAgICAgfQogICAgIAogICAg
IHZvaWQgY29tcGlsZUdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKQEAgLTgwMDIsNyAr
ODAwNSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNvbXBpbGVTZXRBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcygpCiAgICAgewotICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50
MzIobV9ub2RlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSwgcGF5bG9hZEZvcihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworICAgICAgICBtX291dC5z
dG9yZTMyKG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpKSwgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdldFNj
b3BlKCkKQEAgLTg1MjYsNyArODUyOSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGFkZEFyZ3VtZW50
KGpzQ2FsbGVlLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwgMCk7CiAg
ICAgICAgIGFkZEFyZ3VtZW50KG1fb3V0LmNvbnN0SW50MzIobnVtQXJncyksIFZpcnR1YWxSZWdp
c3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIFBheWxvYWRP
ZmZzZXQpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQXJnczsgKytpKQot
ICAgICAgICAgICAgYWRkQXJndW1lbnQobG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEgKyBpKSksIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpLCAwKTsKKyAgICAgICAg
ICAgIGFkZEFyZ3VtZW50KGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxICsg
aSkpLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSksIDApOwogCiAg
ICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNocG9pbnQoSW50
NjQpOwogICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRWZWN0b3IoYXJndW1lbnRzKTsKQEAgLTg2
MzYsOSArODYzOSw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBhZGRBcmd1bWVudChqc0NhbGxl
ZSwgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIDApOwogICAgICAgICAg
ICAgYWRkQXJndW1lbnQobV9vdXQuY29uc3RJbnQzMihudW1QYXNzZWRBcmdzKSwgVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgUGF5bG9h
ZE9mZnNldCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2Vk
QXJnczsgKytpKQotICAgICAgICAgICAgICAgIGFkZEFyZ3VtZW50KGxvd0pTVmFsdWUobV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxICsgaSkpLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChp
KSwgMCk7CisgICAgICAgICAgICAgICAgYWRkQXJndW1lbnQobG93SlNWYWx1ZShtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEgKyBpKSksIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVk
aW5nVGhpcyhpKSwgMCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1QYXNzZWRB
cmdzOyBpIDwgbnVtQWxsb2NhdGVkQXJnczsgKytpKQotICAgICAgICAgICAgICAgIGFkZEFyZ3Vt
ZW50KG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSksIDApOworICAgICAgICAgICAgICAgIGFkZEFyZ3Vt
ZW50KG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpLCAwKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdz
OyArK2kpCiAgICAgICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChDb25zdHJhaW5lZFZhbHVl
KGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxICsgaSkpLCBWYWx1ZVJlcDo6
V2FybUFueSkpOwpAQCAtOTUzNCw3ICs5NTM3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgYWRkQXJn
dW1lbnQoanNDYWxsZWUsIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpLCAw
KTsKICAgICAgICAgYWRkQXJndW1lbnQobV9vdXQuY29uc3RJbnQzMihudW1BcmdzKSwgVmlydHVh
bFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgUGF5
bG9hZE9mZnNldCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1BcmdzOyAr
K2kpCi0gICAgICAgICAgICBhZGRBcmd1bWVudChsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSArIGkpKSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSksIDApOworICAg
ICAgICAgICAgYWRkQXJndW1lbnQobG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDEgKyBpKSksIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSwgMCk7
CiAgICAgICAgIAogICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5w
YXRjaHBvaW50KEludDY0KTsKICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kVmVjdG9yKGFyZ3Vt
ZW50cyk7CkBAIC05NTk3LDUxICs5NjAwLDUxIEBAIHByaXZhdGU6CiAgICAgICAgIHNldEpTVmFs
dWUocGF0Y2hwb2ludCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29tcGlsZUxvYWRWYXJhcmdz
KCkKKyAgICB2b2lkIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKCkKICAgICB7CiAgICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUt
Pm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9k
ZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgIExWYWx1ZSBqc0FyZ3VtZW50cyA9IGxvd0pT
VmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIAorICAgICAgICBMVmFsdWUganNBcmd1
bWVudHMgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7CisKICAgICAgICAg
TFZhbHVlIGxlbmd0aCA9IHZtQ2FsbCgKICAgICAgICAgICAgIEludDMyLCBvcGVyYXRpb25TaXpl
T2ZWYXJhcmdzLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBqc0FyZ3VtZW50cywKICAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0KSk7Ci0gICAgICAgIAotICAgICAg
ICAvLyBGSVhNRTogVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSB3aWxsIGNhbGwgYW4gZWZmZWN0
ZnVsIGxlbmd0aCBwcm9wZXJ0eSB0d2ljZS4gVGhpcyBpcyBzYWZlCi0gICAgICAgIC8vIGZyb20g
dGhlIHN0YW5kcG9pbnQgb2YgdGhlIFZNJ3MgaW50ZWdyaXR5LCBidXQgaXQncyBzdWJ0bHkgd3Jv
bmcgZnJvbSBhIHNwZWMgY29tcGxpYW5jZQotICAgICAgICAvLyBzdGFuZHBvaW50LiBUaGUgYmVz
dCBzb2x1dGlvbiB3b3VsZCBiZSBvbmUgd2hlcmUgd2UgY2FuIGV4aXQgKmludG8qIHRoZSBvcF9j
YWxsX3ZhcmFyZ3MgcmlnaHQKLSAgICAgICAgLy8gcGFzdCB0aGUgc2l6aW5nLgotICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNDQ4Ci0gICAgICAg
IAorCiAgICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0
aCwgbV9vdXQuaW50MzJPbmUpOwogCi0gICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgIFZh
cmFyZ3NPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLAotICAgICAgICAgICAgbV9vdXQuYWJv
dmUobGVuZ3RoLCBsZW5ndGhJbmNsdWRpbmdUaGlzKSk7CisgICAgICAgIHNldEludDMyKGxlbmd0
aEluY2x1ZGluZ1RoaXMpOworICAgIH0KIAorICAgIHZvaWQgY29tcGlsZUxvYWRWYXJhcmdzKCkK
KyAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIExvYWRWYXJh
cmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgIExWYWx1
ZSBqc0FyZ3VtZW50cyA9IGxvd0pTVmFsdWUobV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpKTsKKyAg
ICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgCiAgICAgICAgIHNwZWN1bGF0ZSgKICAgICAgICAgICAgIFZhcmFyZ3NP
dmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLAotICAgICAgICAgICAgbV9vdXQuYWJvdmUobGVu
Z3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5saW1pdCkpKTsKLSAgICAg
ICAgCisgICAgICAgICAgICBtX291dC5iaXRPcihtX291dC5pc1plcm8zMihsZW5ndGhJbmNsdWRp
bmdUaGlzKSwgbV9vdXQuYWJvdmUobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJbnQz
MihkYXRhLT5saW1pdCkpKSk7IAorCiAgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoSW5jbHVk
aW5nVGhpcywgcGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKICAgICAgICAgCi0gICAg
ICAgIC8vIEZJWE1FOiBUaGlzIGNvbXB1dGF0aW9uIGlzIHJhdGhlciBzaWxseS4gSWYgb3BlcmF0
aW9uTGFvZFZhcmFyZ3MganVzdCB0b29rIGEgcG9pbnRlciBpbnN0ZWFkCisgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGNvbXB1dGF0aW9uIGlzIHJhdGhlciBzaWxseS4gSWYgb3BlcmF0aW9uTG9hZFZh
cmFyZ3MganVzdCB0b29rIGEgcG9pbnRlciBpbnN0ZWFkCiAgICAgICAgIC8vIG9mIGEgVmlydHVh
bFJlZ2lzdGVyLCB3ZSB3b3VsZG4ndCBoYXZlIHRvIGRvIHRoaXMuCiAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE2NjAKICAgICAgICAgTFZhbHVl
IG1hY2hpbmVTdGFydCA9IG1fb3V0LmxTaHIoCi0gICAgICAgICAgICBtX291dC5zdWIoYWRkcmVz
c0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCkpLnZhbHVlKCksIG1fY2FsbEZyYW1lKSwK
KyAgICAgICAgICAgIG1fb3V0LnN1YihhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFydCkudmFs
dWUoKSwgbV9jYWxsRnJhbWUpLAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoMykpOwog
ICAgICAgICAKICAgICAgICAgdm1DYWxsKAogICAgICAgICAgICAgVm9pZCwgb3BlcmF0aW9uTG9h
ZFZhcmFyZ3MsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksCiAgICAgICAgICAgICBtX291dC5j
YXN0VG9JbnQzMihtYWNoaW5lU3RhcnQpLCBqc0FyZ3VtZW50cywgbV9vdXQuY29uc3RJbnQzMihk
YXRhLT5vZmZzZXQpLAotICAgICAgICAgICAgbGVuZ3RoLCBtX291dC5jb25zdEludDMyKGRhdGEt
Pm1hbmRhdG9yeU1pbmltdW0pKTsKKyAgICAgICAgICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1f
b3V0LmNvbnN0SW50MzIoZGF0YS0+bWFuZGF0b3J5TWluaW11bSkpOwogICAgIH0KICAgICAKICAg
ICB2b2lkIGNvbXBpbGVGb3J3YXJkVmFyYXJncygpCiAgICAgewotICAgICAgICBpZiAobV9ub2Rl
LT5jaGlsZDEoKSkgewotICAgICAgICAgICAgTm9kZSogYXJndW1lbnRzID0gbV9ub2RlLT5jaGls
ZDEoKS5ub2RlKCk7CisgICAgICAgIGlmIChtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkpIHsKKyAg
ICAgICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS5ub2Rl
KCk7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdp
dGhTcHJlYWQgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZlciB8fCBh
cmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCkgewogICAgICAgICAgICAgICAgIGNvbXBp
bGVGb3J3YXJkVmFyYXJnc1dpdGhTcHJlYWQoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBA
IC05NjUwLDUwICs5NjUzLDIxIEBAIHByaXZhdGU6CiAKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRh
KiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKICAgICAgICAgSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpKQotICAg
ICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFu
dGljLmlubGluZUNhbGxGcmFtZSgpOworICAgICAgICBpZiAobV9ub2RlLT5hcmd1bWVudHNDaGls
ZCgpKQorICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5hcmd1bWVudHNDaGls
ZCgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZSgpOwogCi0gICAgICAgIExWYWx1ZSBsZW5ndGggPSBudWxscHRyOyAKLSAgICAg
ICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBudWxscHRyOwotICAgICAgICBBcmd1bWVu
dHNMZW5ndGggYXJndW1lbnRzTGVuZ3RoID0gZ2V0QXJndW1lbnRzTGVuZ3RoKGlubGluZUNhbGxG
cmFtZSk7Ci0gICAgICAgIGlmIChhcmd1bWVudHNMZW5ndGguaXNLbm93bikgewotICAgICAgICAg
ICAgdW5zaWduZWQga25vd25MZW5ndGggPSBhcmd1bWVudHNMZW5ndGgua25vd247Ci0gICAgICAg
ICAgICBpZiAoa25vd25MZW5ndGggPj0gZGF0YS0+b2Zmc2V0KQotICAgICAgICAgICAgICAgIGtu
b3duTGVuZ3RoID0ga25vd25MZW5ndGggLSBkYXRhLT5vZmZzZXQ7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAga25vd25MZW5ndGggPSAwOwotICAgICAgICAgICAgbGVuZ3RoID0g
bV9vdXQuY29uc3RJbnQzMihrbm93bkxlbmd0aCk7Ci0gICAgICAgICAgICBsZW5ndGhJbmNsdWRp
bmdUaGlzID0gbV9vdXQuY29uc3RJbnQzMihrbm93bkxlbmd0aCArIDEpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBwZXJmb3JtIHRoZSBzYW1lIGxvZ2ljYWwg
b3BlcmF0aW9uIGFzIHRoZSBjb2RlIGFib3ZlLCBidXQgdGhyb3VnaCBkeW5hbWljIG9wZXJhdGlv
bnMuCi0gICAgICAgICAgICBpZiAoIWRhdGEtPm9mZnNldCkKLSAgICAgICAgICAgICAgICBsZW5n
dGggPSBhcmd1bWVudHNMZW5ndGgudmFsdWU7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBpc0xhcmdlciA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKLQot
ICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0
ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50MzIoMCkpOwotICAgICAgICAgICAgICAgIG1f
b3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmUoYXJndW1lbnRzTGVu
Z3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCkpLCB1bnN1cmUoaXNMYXJn
ZXIpLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0xhcmdlciwgY29udGludWF0aW9uKTsKLSAgICAg
ICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBsYXJnZXJMZW5ndGhSZXN1bHQgPSBtX291dC5hbmNo
b3IobV9vdXQuc3ViKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihkYXRh
LT5vZmZzZXQpKSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwot
Ci0gICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7
Ci0gICAgICAgICAgICAgICAgbGVuZ3RoID0gbV9vdXQucGhpKEludDMyLCBzbWFsbGVyT3JFcXVh
bExlbmd0aFJlc3VsdCwgbGFyZ2VyTGVuZ3RoUmVzdWx0KTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5hZGQobGVuZ3RoLCBtX291dC5jb25z
dEludDMyKDEpKTsKLSAgICAgICAgfQorICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCA9IGRhdGEtPm9mZnNldDsKKyAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1Ro
aXMgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKIAorICAgICAgICBMVmFsdWUgbGVuZ3Ro
ID0gbV9vdXQuc3ViKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmludDMyT25lKTsKICAgICAg
ICAgc3BlY3VsYXRlKAogICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBub1ZhbHVlKCksIG51
bGxwdHIsCiAgICAgICAgICAgICBtX291dC5hYm92ZShsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291
dC5jb25zdEludDMyKGRhdGEtPmxpbWl0KSkpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuc3Rv
cmUzMihsZW5ndGhJbmNsdWRpbmdUaGlzLCBwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3VudCkp
OwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBk
YXRhLT5vZmZzZXQ7CiAgICAgICAgIExWYWx1ZSBzb3VyY2VTdGFydCA9IGdldEFyZ3VtZW50c1N0
YXJ0KGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApOwogICAgICAgICBM
VmFsdWUgdGFyZ2V0U3RhcnQgPSBhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFydCkudmFsdWUo
KTsKIApAQCAtOTc1Miw2NSArOTcyNiwyMCBAQCBwcml2YXRlOgogICAgICAgICAvLyBXZSBuZWVk
IHRvIHBlcmZvcm0gdGhlIHNhbWUgbG9naWNhbCBvcGVyYXRpb24gYXMgdGhlIGNvZGUgYWJvdmUs
IGJ1dCB0aHJvdWdoIGR5bmFtaWMgb3BlcmF0aW9ucy4KICAgICAgICAgaWYgKCFudW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCkKICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudHNMZW5ndGgudmFsdWU7
CisgICAgICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VSVChudW1iZXJPZkFyZ3VtZW50c1RvU2tp
cCA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihJTlQzMl9NSU4pKTsKIAotICAgICAgICBMQmFzaWNC
bG9jayBpc0xhcmdlciA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0KLSAgICAgICAgVmFsdWVGcm9tQmxvY2sg
c21hbGxlck9yRXF1YWxMZW5ndGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQz
MigwKSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFy
Z3VtZW50c0xlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1Rv
U2tpcCkpLCB1bnN1cmUoaXNMYXJnZXIpLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNMYXJnZXIsIGNvbnRpbnVh
dGlvbik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGxhcmdlckxlbmd0aFJlc3VsdCA9IG1fb3V0
LmFuY2hvcihtX291dC5zdWIoYXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMy
KG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVh
dGlvbik7CisgICAgICAgIExWYWx1ZSBmaXhlZExlbmd0aCA9IG1fb3V0LnN1Yihhcmd1bWVudHNM
ZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIobnVtYmVyT2ZBcmd1bWVudHNUb1NraXApKTsK
IAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAg
ICAgcmV0dXJuIG1fb3V0LnBoaShJbnQzMiwgc21hbGxlck9yRXF1YWxMZW5ndGhSZXN1bHQsIGxh
cmdlckxlbmd0aFJlc3VsdCk7CisgICAgICAgIHJldHVybiBtX291dC5zZWxlY3QobV9vdXQuZ3Jl
YXRlclRoYW5PckVxdWFsKGZpeGVkTGVuZ3RoLCBtX291dC5pbnQzMlplcm8pLCBmaXhlZExlbmd0
aCwgbV9vdXQuaW50MzJaZXJvLCBTZWxlY3RQcmVkaWN0YWJpbGl0eTo6UHJlZGljdGFibGUpOwog
ICAgIH0KIAogICAgIHZvaWQgY29tcGlsZUZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZCgpCiAgICAg
ewotICAgICAgICBIYXNoTWFwPElubGluZUNhbGxGcmFtZSosIExWYWx1ZSwgV1RGOjpEZWZhdWx0
SGFzaDxJbmxpbmVDYWxsRnJhbWUqPjo6SGFzaCwgV1RGOjpOdWxsYWJsZUhhc2hUcmFpdHM8SW5s
aW5lQ2FsbEZyYW1lKj4+IGNhY2hlZFNwcmVhZExlbmd0aHM7Ci0KLSAgICAgICAgTm9kZSogYXJn
dW1lbnRzID0gbV9ub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgIE5vZGUqIGFyZ3VtZW50
cyA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS5ub2RlKCk7CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkIHx8IGFyZ3Vt
ZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIgfHwgYXJndW1lbnRzLT5vcCgpID09
IFBoYW50b21TcHJlYWQpOwogCi0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mU3RhdGljQXJndW1l
bnRzID0gMDsKLSAgICAgICAgVmVjdG9yPExWYWx1ZSwgMj4gc3ByZWFkTGVuZ3RoczsKLQotICAg
ICAgICBhdXRvIGNvbGxlY3RBcmd1bWVudENvdW50ID0gcmVjdXJzYWJsZUxhbWJkYShbJl0oYXV0
byBzZWxmLCBOb2RlKiB0YXJnZXQpIC0+IHZvaWQgewotICAgICAgICAgICAgaWYgKHRhcmdldC0+
b3AoKSA9PSBQaGFudG9tU3ByZWFkKSB7Ci0gICAgICAgICAgICAgICAgc2VsZih0YXJnZXQtPmNo
aWxkMSgpLm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBpZiAodGFyZ2V0LT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJl
YWQpIHsKLSAgICAgICAgICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IHRhcmdldC0+Yml0
VmVjdG9yKCk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhcmdl
dC0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0
b3ItPmdldChpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYobV9ncmFwaC52YXJBcmdD
aGlsZCh0YXJnZXQsIGkpLm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgICAgICsrbnVtYmVyT2ZTdGF0aWNBcmd1bWVudHM7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKHRhcmdldC0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIpIHsKLSAgICAg
ICAgICAgICAgICBudW1iZXJPZlN0YXRpY0FyZ3VtZW50cyArPSB0YXJnZXQtPmNhc3RPcGVyYW5k
PEpTSW1tdXRhYmxlQnV0dGVyZmx5Kj4oKS0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQodGFyZ2V0LT5vcCgpID09
IFBoYW50b21DcmVhdGVSZXN0KTsKLSAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lID0gdGFyZ2V0LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IHRhcmdldC0+bnVt
YmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKLSAgICAgICAgICAgIHNwcmVhZExlbmd0aHMuYXBwZW5k
KGNhY2hlZFNwcmVhZExlbmd0aHMuZW5zdXJlKGlubGluZUNhbGxGcmFtZSwgWyZdICgpIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy0+Z2V0U3ByZWFkTGVuZ3RoRnJvbUlubGluZUNhbGxG
cmFtZShpbmxpbmVDYWxsRnJhbWUsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKTsKLSAgICAgICAg
ICAgIH0pLml0ZXJhdG9yLT52YWx1ZSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGNvbGxlY3RB
cmd1bWVudENvdW50KGFyZ3VtZW50cyk7Ci0gICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdU
aGlzID0gbV9vdXQuY29uc3RJbnQzMigxICsgbnVtYmVyT2ZTdGF0aWNBcmd1bWVudHMpOwotICAg
ICAgICBmb3IgKExWYWx1ZSBsZW5ndGggOiBzcHJlYWRMZW5ndGhzKQotICAgICAgICAgICAgbGVu
Z3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFkZChsZW5ndGhJbmNsdWRpbmdUaGlzLCBsZW5ndGgp
OworICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IGxvd0ludDMyKG1fbm9kZS0+
Y2hpbGQxKCkpOwogCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9h
ZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgIHNwZWN1bGF0ZSgKQEAgLTk4MjEsNyArOTc1MCw3IEBA
IHByaXZhdGU6CiAKICAgICAgICAgTFZhbHVlIHRhcmdldFN0YXJ0ID0gYWRkcmVzc0ZvcihkYXRh
LT5tYWNoaW5lU3RhcnQpLnZhbHVlKCk7CiAKLSAgICAgICAgYXV0byBmb3J3YXJkU3ByZWFkID0g
cmVjdXJzYWJsZUxhbWJkYShbdGhpcywgJmNhY2hlZFNwcmVhZExlbmd0aHMsICZ0YXJnZXRTdGFy
dF0oYXV0byBzZWxmLCBOb2RlKiB0YXJnZXQsIExWYWx1ZSBzdG9yZUluZGV4KSAtPiBMVmFsdWUg
eworICAgICAgICBhdXRvIGZvcndhcmRTcHJlYWQgPSByZWN1cnNhYmxlTGFtYmRhKFt0aGlzLCAm
dGFyZ2V0U3RhcnRdKGF1dG8gc2VsZiwgTm9kZSogdGFyZ2V0LCBMVmFsdWUgc3RvcmVJbmRleCkg
LT4gTFZhbHVlIHsKICAgICAgICAgICAgIGlmICh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbVNwcmVh
ZCkKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZih0YXJnZXQtPmNoaWxkMSgpLm5vZGUoKSwg
c3RvcmVJbmRleCk7CiAKQEAgLTk4NTMsOCArOTc4Miw5IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOwogICAg
ICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSB0YXJnZXQtPm9yaWdp
bi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKIAotICAgICAgICAgICAgTFZhbHVlIHNvdXJj
ZVN0YXJ0ID0gdGhpcy0+Z2V0QXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lLCB0YXJnZXQt
Pm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkpOwotICAgICAgICAgICAgTFZhbHVlIHNwcmVhZExl
bmd0aCA9IG1fb3V0Lnplcm9FeHRQdHIoY2FjaGVkU3ByZWFkTGVuZ3Rocy5nZXQoaW5saW5lQ2Fs
bEZyYW1lKSk7CisgICAgICAgICAgICBhdXRvIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gdGFy
Z2V0LT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworICAgICAgICAgICAgTFZhbHVlIHNvdXJj
ZVN0YXJ0ID0gdGhpcy0+Z2V0QXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCk7CisgICAgICAgICAgICBMVmFsdWUgc3ByZWFkTGVuZ3RoID0gbV9v
dXQuemVyb0V4dFB0cihnZXRTcHJlYWRMZW5ndGhGcm9tSW5saW5lQ2FsbEZyYW1lKGlubGluZUNh
bGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApKTsKIAogICAgICAgICAgICAgTEJhc2lj
QmxvY2sgbG9vcCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwpAQCAtMTIzNjYsOCArMTIyOTYsOCBAQCBw
cml2YXRlOgogICAgICAgICBMVmFsdWUgc2NvcGUgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkp
OwogCiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fY2FsbEZyYW1lLCBwYWNrZXQsIG1faGVhcHMu
U2hhZG93Q2hpY2tlbl9QYWNrZXRfZnJhbWUpOwotICAgICAgICBtX291dC5zdG9yZVB0cihtX291
dC5sb2FkUHRyKGFkZHJlc3NGb3IoMCkpLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9Q
YWNrZXRfY2FsbGVyRnJhbWUpOwotICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5sb2FkUHRy
KHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSksIHBhY2tldCwgbV9oZWFwcy5TaGFk
b3dDaGlja2VuX1BhY2tldF9jYWxsZWUpOworICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5s
b2FkUHRyKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKDApKSksIHBhY2tldCwgbV9oZWFwcy5T
aGFkb3dDaGlja2VuX1BhY2tldF9jYWxsZXJGcmFtZSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRy
KG1fb3V0LmxvYWRQdHIocGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSkpLCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9QYWNrZXRfY2FsbGVlKTsK
ICAgICAgICAgbV9vdXQuc3RvcmVQdHIoc2NvcGUsIHBhY2tldCwgbV9oZWFwcy5TaGFkb3dDaGlj
a2VuX1BhY2tldF9zY29wZSk7CiAgICAgfQogICAgIApAQCAtMTI0MjgsNyArMTIzNTgsNyBAQCBw
cml2YXRlOgogICAgICAgICBBcmd1bWVudHNMZW5ndGggbGVuZ3RoOwogCiAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLSAgICAg
ICAgICAgIGxlbmd0aC5rbm93biA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgLSAxOworICAgICAgICAgICAgbGVuZ3RoLmtub3duID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsK
ICAgICAgICAgICAgIGxlbmd0aC5pc0tub3duID0gdHJ1ZTsKICAgICAgICAgICAgIGxlbmd0aC52
YWx1ZSA9IG1fb3V0LmNvbnN0SW50MzIobGVuZ3RoLmtub3duKTsKICAgICAgICAgfSBlbHNlIHsK
QEAgLTEyNDU4LDcgKzEyMzg4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4g
bV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKGZyYW1lLT5jYWxsZWVSZWNvdmVyeS52aXJ0dWFsUmVn
aXN0ZXIoKSkpOwogICAgICAgICAgICAgcmV0dXJuIHdlYWtQb2ludGVyKGZyYW1lLT5jYWxsZWVS
ZWNvdmVyeS5jb25zdGFudCgpLmFzQ2VsbCgpKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4g
bV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOworICAgICAg
ICByZXR1cm4gbV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJh
bWVTbG90OjpjYWxsZWUpKSk7CiAgICAgfQogICAgIAogICAgIExWYWx1ZSBnZXRBcmd1bWVudHNT
dGFydChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgdW5zaWduZWQgb2Zmc2V0ID0g
MCkKQEAgLTE3NzIzLDcgKzE3NjUzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgQ2FsbFNpdGVJbmRl
eCBjYWxsU2l0ZUluZGV4ID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5jb21tb24uYWRkQ29kZU9yaWdp
bihjb2RlT3JpZ2luKTsKICAgICAgICAgbV9vdXQuc3RvcmUzMigKICAgICAgICAgICAgIG1fb3V0
LmNvbnN0SW50MzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAotICAgICAgICAgICAgdGFnRm9yKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisgICAgICAgICAgICB0
YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKSkpOwogI2lmICFVU0UoQlVJTFRJTl9GUkFNRV9BRERSRVNTKSB8fCBBU1NFUlRfRU5B
QkxFRAogICAgICAgICBtX291dC5zdG9yZVB0cihtX2NhbGxGcmFtZSwgbV9vdXQuYWJzb2x1dGUo
JnZtKCkudG9wQ2FsbEZyYW1lKSk7CiAjZW5kaWYKQEAgLTE3ODMxLDcgKzE3NzYxLDggQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuICZtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXREZXNjcmlw
dG9ycy5hbGxvYygKICAgICAgICAgICAgIGxvd1ZhbHVlLmZvcm1hdCgpLCBwcm9maWxlLAogICAg
ICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwK
LSAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCkp
OworICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMo
KSwKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mVG1wcygp
KTsKICAgICB9CiAKICAgICB2b2lkIGFwcGVuZE9TUkV4aXQoCkBAIC0xNzkzNiwxNSArMTc4Njcs
MTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0pOwogICAgICAgICAKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVlcy5zaXplKCk7ICsraSkg
ewotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBleGl0RGVzY3JpcHRvci0+bV92YWx1ZXMub3Bl
cmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gZXhpdERlc2Ny
aXB0b3ItPm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSA9IGF2YWlsYWJpbGl0eU1hcC5tX2xvY2Fs
c1tpXTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlRlRM
T1NSRXhpdExpdmVuZXNzKCkKICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLm1fcGxhbi5tb2Rl
KCkgIT0gRlRMRm9yT1NSRW50cnlNb2RlKSB7CiAKLSAgICAgICAgICAgICAgICBpZiAoYXZhaWxh
YmlsaXR5LmlzRGVhZCgpICYmIG1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0
ZXIob3BlcmFuZCksIGV4aXRPcmlnaW4pKQotICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0go
bV9ncmFwaCwgbV9ub2RlLCB0b0NTdHJpbmcoIkxpdmUgYnl0ZWNvZGUgbG9jYWwgbm90IGF2YWls
YWJsZTogb3BlcmFuZCA9ICIsIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgIiwgYXZhaWxhYmls
aXR5ID0gIiwgYXZhaWxhYmlsaXR5LCAiLCBvcmlnaW4gPSAiLCBleGl0T3JpZ2luKS5kYXRhKCkp
OworICAgICAgICAgICAgICAgIGlmIChhdmFpbGFiaWxpdHkuaXNEZWFkKCkgJiYgbV9ncmFwaC5p
c0xpdmVJbkJ5dGVjb2RlKG9wZXJhbmQsIGV4aXRPcmlnaW4pKQorICAgICAgICAgICAgICAgICAg
ICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCB0b0NTdHJpbmcoIkxpdmUgYnl0ZWNvZGUgbG9j
YWwgbm90IGF2YWlsYWJsZTogb3BlcmFuZCA9ICIsIG9wZXJhbmQsICIsIGF2YWlsYWJpbGl0eSA9
ICIsIGF2YWlsYWJpbGl0eSwgIiwgb3JpZ2luID0gIiwgZXhpdE9yaWdpbikuZGF0YSgpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIEV4aXRWYWx1ZSBleGl0VmFsdWUgPSBleGl0VmFsdWVG
b3JBdmFpbGFiaWxpdHkoYXJndW1lbnRzLCBtYXAsIGF2YWlsYWJpbGl0eSk7CiAgICAgICAgICAg
ICBpZiAoZXhpdFZhbHVlLmhhc0luZGV4SW5TdGFja21hcExvY2F0aW9ucygpKQpAQCAtMTgyNDQs
MzkgKzE4MTc1LDM5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX291dC5hbHJlYWR5UmVn
aXN0ZXJlZFdlYWtQb2ludGVyKG1fZ3JhcGgsIHN0cnVjdHVyZS5nZXQoKSk7CiAgICAgfQogICAg
IAotICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFuZCwg
cHRyZGlmZl90IG9mZnNldCA9IDApCisgICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoTFZhbHVl
IGJhc2UsIE9wZXJhbmQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCiAgICAgewotICAg
ICAgICByZXR1cm4gbV9vdXQuYWRkcmVzcyhiYXNlLCBtX2hlYXBzLnZhcmlhYmxlc1tvcGVyYW5k
XSwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmFkZHJlc3MoYmFzZSwgbV9oZWFwcy52
YXJpYWJsZXNbb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKV0sIG9mZnNldCk7CiAg
ICAgfQotICAgIFR5cGVkUG9pbnRlciBwYXlsb2FkRm9yKExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFu
ZCkKKyAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZvcihMVmFsdWUgYmFzZSwgT3BlcmFuZCBvcGVy
YW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IoYmFzZSwgb3BlcmFuZCwgUGF5
bG9hZE9mZnNldCk7CiAgICAgfQotICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoTFZhbHVlIGJhc2Us
IGludCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoTFZhbHVlIGJhc2UsIE9wZXJh
bmQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKGJhc2UsIG9wZXJh
bmQsIFRhZ09mZnNldCk7CiAgICAgfQotICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKGludCBv
cGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKKyAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0Zv
cihPcGVyYW5kIG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBvZmZzZXQpOworICAg
ICAgICByZXR1cm4gYWRkcmVzc0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLCBvZmZzZXQp
OwogICAgIH0KICAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCiAgICAgewogICAgICAgICBpZiAob3BlcmFuZC5p
c0xvY2FsKCkpCi0gICAgICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhcHR1cmVkLCBvcGVy
YW5kLm9mZnNldCgpLCBvZmZzZXQpOwotICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhbGxG
cmFtZSwgb3BlcmFuZC5vZmZzZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBhZGRy
ZXNzRm9yKG1fY2FwdHVyZWQsIG9wZXJhbmQsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBhZGRy
ZXNzRm9yKG1fY2FsbEZyYW1lLCBvcGVyYW5kLCBvZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBv
aW50ZXIgcGF5bG9hZEZvcihpbnQgb3BlcmFuZCkKKyAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZv
cihPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICByZXR1cm4gcGF5bG9hZEZvcihWaXJ0
dWFsUmVnaXN0ZXIob3BlcmFuZCkpOworICAgICAgICByZXR1cm4gcGF5bG9hZEZvcihvcGVyYW5k
LnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAgICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3Io
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRkcmVzc0Zv
cihvcGVyYW5kLCBQYXlsb2FkT2Zmc2V0KTsKICAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHRhZ0Zv
cihpbnQgb3BlcmFuZCkKKyAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKE9wZXJhbmQgb3BlcmFuZCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpKTsK
KyAgICAgICAgcmV0dXJuIHRhZ0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9
CiAgICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCmluZGV4IDkzMzE3NzEw
ZjZkMDY4NjA5MTliYzAwMjUzMTNhMTMyMTkwNDQ5MTkuLjM0MzE0NDFkYmQyMWRhN2MyMTQ5MWZi
OWM0YzlhYjllY2NhYTVkMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRW50cnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50
cnkuY3BwCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeSgKICAgICAgICAg
ZGF0YUxvZygiICAgIFZhbHVlcyBhdCBlbnRyeTogIiwgdmFsdWVzLCAiXG4iKTsKICAgICAKICAg
ICBmb3IgKGludCBhcmd1bWVudCA9IHZhbHVlcy5udW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVu
dC0tOykgewotICAgICAgICBKU1ZhbHVlIHZhbHVlT25TdGFjayA9IGNhbGxGcmFtZS0+cih2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkpLmFzYW5VbnNhZmVKU1Zh
bHVlKCk7CisgICAgICAgIEpTVmFsdWUgdmFsdWVPblN0YWNrID0gY2FsbEZyYW1lLT5yKHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhhcmd1bWVudCkpLmFzYW5VbnNhZmVK
U1ZhbHVlKCk7CiAgICAgICAgIE9wdGlvbmFsPEpTVmFsdWU+IHJlY29uc3RydWN0ZWRWYWx1ZSA9
IHZhbHVlcy5hcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgIGlmICgocmVjb25zdHJ1Y3RlZFZh
bHVlICYmIHZhbHVlT25TdGFjayA9PSByZWNvbnN0cnVjdGVkVmFsdWUudmFsdWUoKSkgfHwgIWFy
Z3VtZW50KQogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0LmNwcAppbmRleCAwOTk1OGQyYzRmOWE1ZDg5YjVmYmJiNjVmODZiYjZkYWJjZGYx
OGUzLi4wNGM4NTc5OWU0ZDQ2OTIzYTMxODY3MThlMTlmMjRiZGZmZGFiYTRmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAKQEAgLTQ3LDEwICs0NywxMCBAQCB1c2lu
ZyBuYW1lc3BhY2UgREZHOwogCiBPU1JFeGl0RGVzY3JpcHRvcjo6T1NSRXhpdERlc2NyaXB0b3Io
CiAgICAgRGF0YUZvcm1hdCBwcm9maWxlRGF0YUZvcm1hdCwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZSB2YWx1ZVByb2ZpbGUsCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVu
c2lnbmVkIG51bWJlck9mTG9jYWxzKQorICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzLCB1
bnNpZ25lZCBudW1iZXJPZkxvY2FscywgdW5zaWduZWQgbnVtYmVyT2ZUbXBzKQogICAgIDogbV9w
cm9maWxlRGF0YUZvcm1hdChwcm9maWxlRGF0YUZvcm1hdCkKICAgICAsIG1fdmFsdWVQcm9maWxl
KHZhbHVlUHJvZmlsZSkKLSAgICAsIG1fdmFsdWVzKG51bWJlck9mQXJndW1lbnRzLCBudW1iZXJP
ZkxvY2FscykKKyAgICAsIG1fdmFsdWVzKG51bWJlck9mQXJndW1lbnRzLCBudW1iZXJPZkxvY2Fs
cywgbnVtYmVyT2ZUbXBzKQogewogfQogCkBAIC0xMTcsNSArMTE3LDMgQEAgQ29kZUxvY2F0aW9u
SnVtcDxKU0ludGVybmFsUHRyVGFnPiBPU1JFeGl0Ojpjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENv
ZGVCbG9jayogZnQKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJM
RShGVExfSklUKQotCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRXhpdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKaW5kZXgg
ZGE4N2NjZjMyNzNmZTRiZTM2MDY4M2I4YWYzYmJmNTE2ZDYyMjVlYi4uZmQ3ZjlmMDViYzQ4OWMx
ZjZhZWNlMDk3YWQ4YTRkMWUyN2I4MDMyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0LmgKQEAgLTY5LDcgKzY5LDcgQEAgc3RydWN0IE9TUkV4aXRIYW5kbGU7CiBzdHJ1Y3Qg
T1NSRXhpdERlc2NyaXB0b3IgewogICAgIE9TUkV4aXREZXNjcmlwdG9yKAogICAgICAgICBEYXRh
Rm9ybWF0IHByb2ZpbGVEYXRhRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLAot
ICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVtYmVyT2ZMb2Nh
bHMpOworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVtYmVy
T2ZMb2NhbHMsIHVuc2lnbmVkIG51bWJlck9mVG1wcyk7CiAKICAgICAvLyBUaGUgZmlyc3QgYXJn
dW1lbnQgdG8gdGhlIGV4aXQgY2FsbCBtYXkgYmUgYSB2YWx1ZSB3ZSB3aXNoIHRvIHByb2ZpbGUu
CiAgICAgLy8gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGUgZm9ybWF0IHdpbGwgYmUgbm90IEludmFs
aWQgYW5kIHdlJ2xsIGhhdmUgYQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0Q29tcGlsZXIuY3BwCmluZGV4IDY2NGQzYjk4OGFmN2VhODNmNmZiODJiY2IzYThjMGE4
ODE3NmVlNzIuLjIxNzE1ZDNkZDIyYzM4NzllYjA0ZmI2Yjc4ZTc5NTI4NGY1ZTAzOTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKQEAg
LTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkJ5dGVjb2Rl
U3RydWN0cy5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5j
bHVkZSAiREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgiCiAjaW5jbHVkZSAiRlRMRXhpdEFyZ3Vt
ZW50Rm9yT3BlcmFuZC5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKQEAgLTM3LDEwICszOCwx
MSBAQAogI2luY2x1ZGUgIkZUTE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJGVExTdGF0ZS5oIgog
I2luY2x1ZGUgIkZUTFNhdmVSZXN0b3JlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbC5oIgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJQcm9iZUNvbnRleHQuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgewogCkBAIC00NzQsMTYgKzQ3Niw1MiBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1
YihWTSYgdm0sIHVuc2lnbmVkIGV4aXRJRCwgSklUQ29kZSogaml0Q29kZSwgT1NSRXhpdCYgZXhp
dAogCiAgICAgc2l6ZV90IGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVzID0g
YmFzZWxpbmVDb2RlQmxvY2stPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwog
CisgICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVj
a3BvaW50KCkpIHsKKyAgICAgICAgSlNWYWx1ZSogdG1wU2NyYXRjaCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8SlNWYWx1ZSo+KHNjcmF0Y2ggKyBleGl0Lm1fZGVzY3JpcHRvci0+bV92YWx1ZXMudG1wSW5k
ZXgoMCkpOworICAgICAgICBWTSogdm1QdHIgPSAmdm07CisgICAgICAgIGppdC5wcm9iZShbPV0g
KFByb2JlOjpDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICBhdXRvIGFkZFNpZGVTdGF0
ZSA9IFsmXSAoQ2FsbEZyYW1lKiBmcmFtZSwgQnl0ZWNvZGVJbmRleCBpbmRleCwgc2l6ZV90IHRt
cE9mZnNldCkgeworICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NS
RXhpdFNpZGVTdGF0ZT4gc2lkZVN0YXRlID0gV1RGOjptYWtlVW5pcXVlPENoZWNrcG9pbnRPU1JF
eGl0U2lkZVN0YXRlPigpOworCisgICAgICAgICAgICAgICAgc2lkZVN0YXRlLT5ieXRlY29kZUlu
ZGV4ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhO
dW1DaGVja3BvaW50VG1wczsgKytpKQorICAgICAgICAgICAgICAgICAgICBzaWRlU3RhdGUtPnRt
cHNbaV0gPSB0bXBTY3JhdGNoW2kgKyB0bXBPZmZzZXRdOworCisgICAgICAgICAgICAgICAgdm1Q
dHItPmFkZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoZnJhbWUsIFdURk1vdmUoc2lkZVN0YXRlKSk7
CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBjb25zdCBDb2RlT3JpZ2luKiBjb2RlT3Jp
Z2luOworICAgICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmdwcjxDYWxs
RnJhbWUqPihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgICAgICBmb3IgKGNv
ZGVPcmlnaW4gPSAmZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4gJiYgY29kZU9yaWdpbi0+
aW5saW5lQ2FsbEZyYW1lKCk7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJh
bWUoKS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMoKSkgeworICAgICAgICAgICAgICAgIEJ5
dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4
KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjYWxsQnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgYXV0byog
aW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7CisgICAgICAg
ICAgICAgICAgYWRkU2lkZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbEZyYW1lKj4ocmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oY2FsbEZyYW1lKSArIGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENP
ZmZzZXQoKSAtIHNpemVvZihDUFVSZWdpc3RlcikpLCBjYWxsQnl0ZWNvZGVJbmRleCwgaW5saW5l
Q2FsbEZyYW1lLT50bXBPZmZzZXQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
IWNvZGVPcmlnaW4pCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAo
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgp
OyBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKKyAgICAgICAgICAgICAgICBhZGRTaWRlU3Rh
dGUoY2FsbEZyYW1lLCBieXRlY29kZUluZGV4LCAwKTsKKyAgICAgICAgfSk7CisgICAgfQorCiAg
ICAgLy8gTm93IGdldCBzdGF0ZSBvdXQgb2YgdGhlIHNjcmF0Y2ggYnVmZmVyIGFuZCBwbGFjZSBp
dCBiYWNrIGludG8gdGhlIHN0YWNrLiBUaGUgdmFsdWVzIGFyZQogICAgIC8vIGFscmVhZHkgcmVi
b3hlZCBzbyB3ZSBqdXN0IG1vdmUgdGhlbS4KICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gZXhp
dC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLnNpemUoKTsgaW5kZXgtLTspIHsKLSAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHJlZyA9IGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlcy52aXJ0dWFsUmVn
aXN0ZXJGb3JJbmRleChpbmRleCk7CisgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGV4aXQubV9k
ZXNjcmlwdG9yLT5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOworCisgICAgICAgIGlm
IChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAo
cmVnLmlzTG9jYWwoKSAmJiByZWcudG9Mb2NhbCgpIDwgc3RhdGljX2Nhc3Q8aW50PihiYXNlbGlu
ZVZpcnR1YWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlcykpCisgICAgICAgIGlmIChvcGVyYW5kLmlz
TG9jYWwoKSAmJiBvcGVyYW5kLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGludD4oYmFzZWxpbmVW
aXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMpKQogICAgICAgICAgICAgY29udGludWU7CiAK
ICAgICAgICAgaml0LmxvYWQ2NChzY3JhdGNoICsgaW5kZXgsIEdQUkluZm86OnJlZ1QwKTsKLSAg
ICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvcihyZWcpKTsKKyAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5
SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKSk7CiAgICAgfQog
ICAgIAogICAgIGhhbmRsZUV4aXRDb3VudHModm0sIGppdCwgZXhpdCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAppbmRleCA0NDdjMDBhNzNkNTVkMGUwYjk2
YTQxY2I1MGE3ZmMyNmMwYmRmNjA1Li4wMDY5YTNhNmU2ZmUxZGVmNjk2ODliMzhiMjIzYWYwNDRi
MTgyOTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlv
bnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAK
QEAgLTU0MSw3ICs1NDEsNyBAQCBleHRlcm4gIkMiIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVy
YXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKEpTR2xvYmFsT2JqZWN0KgogICAgICAgICAgICAg
Ly8gV2UgYWxzbyBjYW5ub3QgYWxsb2NhdGUgYSBuZXcgYnV0dGVyZmx5IGZyb20gY29tcGlsYXRp
b24gdGhyZWFkcyBzaW5jZSBpdCdzIGludmFsaWQgdG8gYWxsb2NhdGUgY2VsbHMgZnJvbQogICAg
ICAgICAgICAgLy8gYSBjb21waWxhdGlvbiB0aHJlYWQuCiAgICAgICAgICAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOwotICAgICAgICAgICAgY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKG5l
d0FycmF5QnVmZmVyLm1faW1tdXRhYmxlQnV0dGVyZmx5Lm9mZnNldCgpKS5zZXQodm0sIGNvZGVC
bG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+Y29uc3Rh
bnRSZWdpc3RlcihuZXdBcnJheUJ1ZmZlci5tX2ltbXV0YWJsZUJ1dHRlcmZseSkuc2V0KHZtLCBj
b2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7CiAgICAgICAgICAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT3V0cHV0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0
LmNwcAppbmRleCA3NDkzM2RjNjA1MTVjNWRhMDBlYTE4ZmM3ZDVkYjNhZDljZTVlOWNmLi5kNTdm
YjFlZWE4MDQ0YTM0Yjc5MTc2OGE5MDk3Njk4OTk4YWMzMzkyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPdXRwdXQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjU1LDE1ICs2NTUsMzcgQEAgTFZhbHVlIE91dHB1
dDo6bm90WmVybzY0KExWYWx1ZSB2YWx1ZSkKICAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3
PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6Tm90RXF1YWwsIG9yaWdpbigpLCB2YWx1ZSwgaW50NjRa
ZXJvKTsKIH0KIAotTFZhbHVlIE91dHB1dDo6c2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHRh
a2VuLCBMVmFsdWUgbm90VGFrZW4pCitMVmFsdWUgT3V0cHV0OjpzZWxlY3QoTFZhbHVlIHZhbHVl
LCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0LCBTZWxlY3RQcmVkaWN0YWJpbGl0eSBwcmVkaWN0
YWJpbGl0eSkKIHsKICAgICBpZiAodmFsdWUtPmhhc0ludDMyKCkpIHsKICAgICAgICAgaWYgKHZh
bHVlLT5hc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdGFrZW47CisgICAgICAgICAgICBy
ZXR1cm4gbGVmdDsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIG5vdFRha2VuOwor
ICAgICAgICAgICAgcmV0dXJuIHJpZ2h0OwogICAgIH0KLSAgICByZXR1cm4gbV9ibG9jay0+YXBw
ZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwgdmFsdWUsIHRh
a2VuLCBub3RUYWtlbik7CisKKyAgICBpZiAocHJlZGljdGFiaWxpdHkgPT0gU2VsZWN0UHJlZGlj
dGFiaWxpdHk6Ok5vdFByZWRpY3RhYmxlKQorICAgICAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5k
TmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwgdmFsdWUsIGxlZnQs
IHJpZ2h0KTsKKworICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG5ld0Jsb2NrKCk7Cisg
ICAgTEJhc2ljQmxvY2sgbGVmdFRha2VuQmxvY2sgPSBuZXdCbG9jaygpOworICAgIExCYXNpY0Js
b2NrIHJpZ2h0VGFrZW5CbG9jayA9IG5ld0Jsb2NrKCk7CisKKyAgICBtX2Jsb2NrLT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUoCisgICAgICAgIG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCksIHZh
bHVlLAorICAgICAgICBGcmVxdWVudGVkQmxvY2sobGVmdFRha2VuQmxvY2ssIHByZWRpY3RhYmls
aXR5ICE9IFNlbGVjdFByZWRpY3RhYmlsaXR5OjpSaWdodExpa2VseSA/IEZyZXF1ZW5jeUNsYXNz
OjpOb3JtYWwgOiBGcmVxdWVuY3lDbGFzczo6UmFyZSksCisgICAgICAgIEZyZXF1ZW50ZWRCbG9j
ayhyaWdodFRha2VuQmxvY2ssIHByZWRpY3RhYmlsaXR5ICE9IFNlbGVjdFByZWRpY3RhYmlsaXR5
OjpMZWZ0TGlrZWx5ID8gRnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbCA6IEZyZXF1ZW5jeUNsYXNzOjpS
YXJlKSk7CisKKyAgICBMVmFsdWUgcGhpID0gY29udGludWF0aW9uLT5hcHBlbmROZXc8QjM6OlZh
bHVlPihtX3Byb2MsIEIzOjpQaGksIGxlZnQtPnR5cGUoKSwgb3JpZ2luKCkpOworCisgICAgbGVm
dFRha2VuQmxvY2stPmFwcGVuZE5ldzxCMzo6VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigp
LCBsZWZ0LCBwaGkpOworICAgIGxlZnRUYWtlbkJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUo
bV9wcm9jLCBCMzo6SnVtcCwgb3JpZ2luKCksIEIzOjpGcmVxdWVudGVkQmxvY2soY29udGludWF0
aW9uKSk7CisKKyAgICByaWdodFRha2VuQmxvY2stPmFwcGVuZE5ldzxCMzo6VXBzaWxvblZhbHVl
PihtX3Byb2MsIG9yaWdpbigpLCByaWdodCwgcGhpKTsKKyAgICByaWdodFRha2VuQmxvY2stPmFw
cGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpKdW1wLCBvcmlnaW4oKSwgQjM6OkZyZXF1
ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsKKworICAgIG1fYmxvY2sgPSBjb250aW51YXRpb247
CisgICAgcmV0dXJuIHBoaTsKIH0KIAogTFZhbHVlIE91dHB1dDo6YXRvbWljWGNoZ0FkZChMVmFs
dWUgb3BlcmFuZCwgVHlwZWRQb2ludGVyIHBvaW50ZXIsIFdpZHRoIHdpZHRoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKaW5kZXggYzU2YjRlZjdlMDYwZjkzNjJiM2JkY2EwZmQ0
NmEwM2FhNTcwY2EyZS4uNGMwMmIzNDA4NTE0NmY3ZGYwMjU2MjdkNWZmMzFjNzgxMGQ4ZmI3NiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCkBAIC0zOSw2ICszOSw3IEBACiAj
aW5jbHVkZSAiRlRMQWJicmV2aWF0ZWRUeXBlcy5oIgogI2luY2x1ZGUgIkZUTEFic3RyYWN0SGVh
cFJlcG9zaXRvcnkuaCIKICNpbmNsdWRlICJGVExDb21tb25WYWx1ZXMuaCIKKyNpbmNsdWRlICJG
VExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oIgogI2luY2x1ZGUgIkZUTFN0YXRlLmgiCiAjaW5jbHVk
ZSAiRlRMU3dpdGNoQ2FzZS5oIgogI2luY2x1ZGUgIkZUTFR5cGVkUG9pbnRlci5oIgpAQCAtMzY1
LDcgKzM2Niw3IEBAIHB1YmxpYzoKICAgICBMVmFsdWUgdGVzdElzWmVyb1B0cihMVmFsdWUgdmFs
dWUsIExWYWx1ZSBtYXNrKSB7IHJldHVybiBpc051bGwoYml0QW5kKHZhbHVlLCBtYXNrKSk7IH0K
ICAgICBMVmFsdWUgdGVzdE5vblplcm9QdHIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgbWFzaykgeyBy
ZXR1cm4gbm90TnVsbChiaXRBbmQodmFsdWUsIG1hc2spKTsgfQogCi0gICAgTFZhbHVlIHNlbGVj
dChMVmFsdWUgdmFsdWUsIExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2VuKTsKKyAgICBMVmFs
dWUgc2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4sIFNl
bGVjdFByZWRpY3RhYmlsaXR5ID0gU2VsZWN0UHJlZGljdGFiaWxpdHk6Ok5vdFByZWRpY3RhYmxl
KTsKICAgICAKICAgICAvLyBUaGVzZSBhcmUgcmVsYXhlZCBhdG9taWNzIGJ5IGRlZmF1bHQuIFVz
ZSBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0ZUZlbmNlZEFjY2VzcygpIHdpdGggYQog
ICAgIC8vIG5vbi1udWxsIGhlYXAgdG8gbWFrZSB0aGVtIHNlcV9jc3QgZmVuY2VkLgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjc2MDJhY2ZmZTQwNDQ1NTUxMDBlYjQ1ZDhmNmEwMzA5ZjM1ODExZDUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNlbGVjdFByZWRpY3Rh
YmlsaXR5LmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShGVExfSklUKQorCitu
YW1lc3BhY2UgSlNDOjpGVEwgeworCitlbnVtIGNsYXNzIFNlbGVjdFByZWRpY3RhYmlsaXR5IDog
dWludDhfdCB7CisgICAgLy8gVXNlIHRoaXMgd2hlbiB3ZSBleHBlY3QgaXQgdG8gYmUgdmVyeSB1
bmxpa2VseSB0aGUgYnJhbmNoIHByZWRpY3RvciB3aWxsIGJlIGFibGUgdG8gZ3Vlc3Mgd2hpY2gg
c2lkZSBvZiB0aGUgc2VsZWN0IHdpbGwgYmUgY2hvc2VuLiBUaGlzIHRlbGxzIEIzIHRvIHRyeSB0
byBlbWl0IHRoZSBzZWxlY3QgYXMgYSBjb25kaXRpb25hbCBtb3ZlLCB3aGljaCAodXN1YWxseSkg
aXMgbm90IHNwZWN1bGF0ZWQgYnkgdGhlIENQVS4KKyAgICBOb3RQcmVkaWN0YWJsZSwKKyAgICAv
LyBVc2UgdGhpcyB3aGVuIGl0J3MgcG9zc2libGUgYSBicmFuY2ggcHJlZGljdG9yIHdpbGwgZG8g
YSBnb29kIGpvYiBndWVzc2luZyB0aGUgc2VsZWN0ZWQgdmFsdWUgYnV0IHdlIGRvbid0IGtub3cg
YSBwcmlvcmkgd2hpY2ggc2lkZSBpcyBtb3JlIGxpa2VseS4KKyAgICBQcmVkaWN0YWJsZSwKKyAg
ICAvLyBVc2UgdGhlc2Ugd2hlbiB3ZSBhcmUgdmVyeSBzdXJlIG9uZSBvZiB0aGUgdHdvIHNpZGVz
IGlzIHN1YnN0YW50aWFsbHkgbW9yZSBsaWtlbHkgdGhhbiB0aGUgb3RoZXIuCisgICAgTGVmdExp
a2VseSwKKyAgICBSaWdodExpa2VseSwKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisK
KyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFNsb3dQYXRoQ2FsbC5oCmluZGV4IGZlMmE0ZWM3MjZjZWNlZDM0MTMwOTM5OTQ5NGVhOWViN2U2
YjRiNWYuLjcwZDI4OGUwM2YxZDhkODFmMjc3ZjZiODIxN2FjOWYzZmE4MGMxMmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaApAQCAtMTAwLDcgKzEwMCw3
IEBAIFNsb3dQYXRoQ2FsbCBjYWxsT3BlcmF0aW9uKAogICAgIGlmIChjYWxsU2l0ZUluZGV4KSB7
CiAgICAgICAgIGppdC5zdG9yZTMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0
YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKICAgICB9CiAgICAgcmV0dXJuIGNhbGxP
cGVyYXRpb24odm0sIHVzZWRSZWdpc3RlcnMsIGppdCwgZXhjZXB0aW9uVGFyZ2V0LCBmdW5jdGlv
biwgcmVzdWx0R1BSLCBhcmd1bWVudHMuLi4pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2dlbmVyYXRvci9DaGVja3BvaW50cy5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9nZW5lcmF0b3IvQ2hlY2twb2ludHMucmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTZhNWY1Mjc3ZGQ2MzFhY2Q0
Y2NiZWNkMTRiMjRjYzVkNGEzOWEyNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9nZW5lcmF0b3IvQ2hlY2twb2ludHMucmIKQEAgLTAsMCArMSw2NCBAQAorIyBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
IyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworY2xhc3MgQ2hlY2twb2ludAorICAgIGF0
dHJfcmVhZGVyIDp1c2VzCisgICAgYXR0cl9yZWFkZXIgOmRlZnMKKyAgICBhdHRyX3JlYWRlciA6
bmFtZQorICAgIGF0dHJfcmVhZGVyIDppbmRleAorCisgICAgZGVmIGluaXRpYWxpemUobmFtZSwg
aW5kZXgsIHRtcHMpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAgICAgICBAaW5kZXggPSBpbmRl
eAorICAgICAgICBAdXNlcyA9IHRtcHMuZmlsdGVyIHsgfCh0bXAsIHVzZURlZil8IHVzZURlZiA9
PSA6dXNlIH0KKyAgICAgICAgQGRlZnMgPSB0bXBzLmZpbHRlciB7IHwodG1wLCB1c2VEZWYpfCB1
c2VEZWYgPT0gOmRlZmluZSB9CisgICAgZW5kCisKKyAgICBkZWYgbGl2ZW5lc3MobmFtZXNwYWNl
KQorICAgICAgICBFT0Y8LS0KKyAgICBjYXNlICN7bmFtZXNwYWNlfTo6I3tuYW1lfToKK0VPRgor
ICAgIGVuZAorZW5kCisKK2NsYXNzIENoZWNrcG9pbnRzCisgICAgZGVmIGluaXRpYWxpemUob3Bj
b2RlLCB0bXBzLCBjaGVja3BvaW50cykKKyAgICAgICAgQG9wY29kZSA9IG9wY29kZQorICAgICAg
ICBAdG1wcyA9IHRtcHMKKyAgICAgICAgQGNoZWNrcG9pbnRzID0gY2hlY2twb2ludHMubWFwX3dp
dGhfaW5kZXggeyB8KG5hbWUsIHRtcHMpLCBpbmRleHwgQ2hlY2twb2ludC5uZXcobmFtZSwgaW5k
ZXgsIHRtcHMpIH0KKyAgICBlbmQKKworICAgIGRlZiBsaXZlbmVzcworICAgICAgICBAY2hlY2tw
b2ludHMuZWFjaCBkbyB8Y2hlY2twb2ludHwKKworICAgICAgICBlbmQKKyAgICAgICAgRU9GPC0t
CitCaXRNYXA8bWF4TnVtVG1wcz4gdG1wTGl2ZW5lc3NGb3Ije0BvcGNvZGUuY2FwaXRhbGl6ZWRf
bmFtZX0odWludDhfdCBjaGVja3BvaW50KQoreworICAgIHN3aXRjaCAoY2hlY2twb2ludCkgewor
CisgICAgfQorfQorRU9GCisgICAgZW5kCitlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVy
YXRvci9PcGNvZGUucmIKaW5kZXggNjg0YjMwMGU5ZDk4MTQxNDE2MTU3M2MwNjZhOWIxMmQ2NzE3
MGZjMi4uODIzNzRiN2ZiZTg2ZDU3ODhiM2E0MDU4MTU4YTg5OGQ2YTZhMjA4YyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIKQEAgLTMwLDYgKzMwLDcgQEAgY2xh
c3MgT3Bjb2RlCiAgICAgYXR0cl9yZWFkZXIgOmFyZ3MKICAgICBhdHRyX3JlYWRlciA6bWV0YWRh
dGEKICAgICBhdHRyX3JlYWRlciA6ZXh0cmFzCisgICAgYXR0cl9yZWFkZXIgOmNoZWNrcG9pbnRz
CiAKICAgICBtb2R1bGUgU2l6ZQogICAgICAgICBOYXJyb3cgPSAiT3Bjb2RlU2l6ZTo6TmFycm93
IgpAQCAtNDUsMTIgKzQ2LDE0IEBAIGNsYXNzIE9wY29kZQogICAgICAgICB0aWQKICAgICBlbmQK
IAotICAgIGRlZiBpbml0aWFsaXplKHNlY3Rpb24sIG5hbWUsIGV4dHJhcywgYXJncywgbWV0YWRh
dGEsIG1ldGFkYXRhX2luaXRpYWxpemVycykKKyAgICBkZWYgaW5pdGlhbGl6ZShzZWN0aW9uLCBu
YW1lLCBleHRyYXMsIGFyZ3MsIG1ldGFkYXRhLCBtZXRhZGF0YV9pbml0aWFsaXplcnMsIHRtcHMs
IGNoZWNrcG9pbnRzKQogICAgICAgICBAc2VjdGlvbiA9IHNlY3Rpb24KICAgICAgICAgQG5hbWUg
PSBuYW1lCiAgICAgICAgIEBleHRyYXMgPSBleHRyYXMgfHwge30KICAgICAgICAgQG1ldGFkYXRh
ID0gTWV0YWRhdGEubmV3IG1ldGFkYXRhLCBtZXRhZGF0YV9pbml0aWFsaXplcnMKICAgICAgICAg
QGFyZ3MgPSBhcmdzLm1hcC53aXRoX2luZGV4IHsgfChhcmdfbmFtZSwgdHlwZSksIGluZGV4fCBB
cmd1bWVudC5uZXcgYXJnX25hbWUsIHR5cGUsIGluZGV4IH0gdW5sZXNzIGFyZ3MubmlsPworICAg
ICAgICBAdG1wcyA9IHRtcHMKKyAgICAgICAgQGNoZWNrcG9pbnRzID0gY2hlY2twb2ludHMubWFw
IHsgfChjaGVja3BvaW50LCBfKXwgY2hlY2twb2ludCB9IHVubGVzcyBjaGVja3BvaW50cy5uaWw/
CiAgICAgZW5kCiAKICAgICBkZWYgY3JlYXRlX2lkIQpAQCAtMTI3LDYgKzEzMCw4IEBAIGNsYXNz
IE9wY29kZQogICAgICAgICA8PC1FT0YKIHN0cnVjdCAje2NhcGl0YWxpemVkX25hbWV9IDogcHVi
bGljIEluc3RydWN0aW9uIHsKICAgICAje29wY29kZUlEfQorICAgICN7dGVtcHN9CisgICAgI3tj
aGVja3BvaW50VmFsdWVzfQogCiAje2VtaXR0ZXJ9CiAje2R1bXBlcn0KQEAgLTE0MSw2ICsxNDYs
MTggQEAgRU9GCiAgICAgICAgICJzdGF0aWMgY29uc3RleHByICN7b3Bjb2RlSURUeXBlfSBvcGNv
ZGVJRCA9ICN7bmFtZX07IgogICAgIGVuZAogCisgICAgZGVmIGNoZWNrcG9pbnRWYWx1ZXMKKyAg
ICAgICAgcmV0dXJuIGlmIEBjaGVja3BvaW50cy5uaWw/CisKKyAgICAgICAgWyJlbnVtIENoZWNr
cG9pbnRzIDogdWludDhfdCB7Il0uY29uY2F0KGNoZWNrcG9pbnRzLm1hcHsgfGNoZWNrcG9pbnR8
ICIgICAgICAgICN7Y2hlY2twb2ludH0sIiB9KS5jb25jYXQoWyIgICAgICAgIG51bWJlck9mQ2hl
Y2twb2ludHMsIiwgIiAgICB9OyJdKS5qb2luKCJcbiIpCisgICAgZW5kCisKKyAgICBkZWYgdGVt
cHMKKyAgICAgICAgcmV0dXJuIGlmIEB0bXBzLm5pbD8KKworICAgICAgICBbImVudW0gVG1wcyA6
IHVpbnQ4X3QgeyJdLmNvbmNhdChAdG1wcy5tYXAge3wodG1wLCB0eXBlKXwgIiAgICAgICAgI3t0
bXB9LCJ9KS5wdXNoKCIgICAgfTsiKS5qb2luKCJcbiIpCisgICAgZW5kCisKICAgICBkZWYgZW1p
dHRlcgogICAgICAgICBvcF93aWRlMTYgPSBBcmd1bWVudC5uZXcod2lkZTE2LCBvcGNvZGVJRFR5
cGUsIDApCiAgICAgICAgIG9wX3dpZGUzMiA9IEFyZ3VtZW50Lm5ldyh3aWRlMzIsIG9wY29kZUlE
VHlwZSwgMCkKQEAgLTIwOSw2ICsyMjYsNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPE9wY29k
ZVNpemUgX19zaXplLCBib29sIHJlY29yZE9wY29kZSwgdHlwZW5hbWUgQnl0ZWNvZGVHZW5lcmF0
b3I+CiAgICAgc3RhdGljIGJvb2wgZW1pdEltcGwoQnl0ZWNvZGVHZW5lcmF0b3IqIGdlbiN7dHlw
ZWRfYXJnc30je21ldGFkYXRhX3BhcmFtfSkKICAgICB7CisgICAgICAgICN7IUBjaGVja3BvaW50
cy5uaWw/ID8gImdlbi0+c2V0VXNlc0NoZWNrcG9pbnRzKCk7IiA6ICIifQogICAgICAgICBpZiAo
X19zaXplID09IE9wY29kZVNpemU6OldpZGUxNikKICAgICAgICAgICAgIGdlbi0+YWxpZ25XaWRl
T3Bjb2RlMTYoKTsKICAgICAgICAgZWxzZSBpZiAoX19zaXplID09IE9wY29kZVNpemU6OldpZGUz
MikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlvbi5y
YiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlvbi5yYgppbmRleCAyMDRh
Yzc1OWUxM2VmZjE1MWY4Y2QxNzdmM2JmMWI3MGUwNzc5Y2FhLi42Njg1NWJhNjUwMDgwZTRjMjNj
YzBlYmVjMTBlNzk0OWNkZTc2OGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Z2VuZXJhdG9yL1NlY3Rpb24ucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRv
ci9TZWN0aW9uLnJiCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIFNlY3Rpb24KICAgZW5kCiAKICAg
ZGVmIGNyZWF0ZV9vcGNvZGUobmFtZSwgY29uZmlnKQotICAgICAgT3Bjb2RlLm5ldyhzZWxmLCBu
YW1lLCBjb25maWdbOmV4dHJhc10sIGNvbmZpZ1s6YXJnc10sIGNvbmZpZ1s6bWV0YWRhdGFdLCBj
b25maWdbOm1ldGFkYXRhX2luaXRpYWxpemVyc10pCisgICAgICBPcGNvZGUubmV3KHNlbGYsIG5h
bWUsIGNvbmZpZ1s6ZXh0cmFzXSwgY29uZmlnWzphcmdzXSwgY29uZmlnWzptZXRhZGF0YV0sIGNv
bmZpZ1s6bWV0YWRhdGFfaW5pdGlhbGl6ZXJzXSwgY29uZmlnWzp0bXBzXSwgY29uZmlnWzpjaGVj
a3BvaW50c10pCiAgIGVuZAogCiAgIGRlZiBhZGRfb3Bjb2RlX2dyb3VwKG5hbWUsIG9wY29kZXMs
IGNvbmZpZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKaW5kZXggNjc1NDBkOTA3ZmRm
ZDdlNWY5YTRiNmMxOTA3MTkxZDY4ZmNiNjE3My4uNDM5NjMwNTA3ZDY0MzA3MGNhNzRhYTA1OTE3
YjMxM2M3MzhkOTNmYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKQEAgLTcyMSw2
ICs3MjEsNyBAQCB2b2lkIEhlYXA6OmdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhDb25zZXJ2YXRp
dmVSb290cyYgcm9vdHMpCiAgICAgaWYgKCFWTTo6Y2FuVXNlSklUKCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBtX3ZtLmdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhyb290cyk7CisgICAgbV92bS5z
Y2FuU2lkZVN0YXRlKHJvb3RzKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHJvb3RzKTsKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNw
cAppbmRleCAyNDEwMWMwN2U4MDMxZDY0ZTMyZjI4NTRmOTQ2Mjk3OGZmZjAyMjBiLi4yYzc3NWY5
NDRmOGVlNzRkNDFjZTk5MjM2MjViNTgyNzY3NGVjYmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcApAQCAtOTAsMjIgKzkwLDIyIEBAIGJv
b2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVDb2RlT3JpZ2luSW5kZXgoKSBjb25zdAogCiB1
bnNpZ25lZCBDYWxsRnJhbWU6OmNhbGxTaXRlQXNSYXdCaXRzKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gdGhpc1tDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc10udGFnKCk7
CisgICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyldLnRhZygpOwogfQogCiBTVVBQUkVTU19BU0FOIHVuc2lnbmVk
IENhbGxGcmFtZTo6dW5zYWZlQ2FsbFNpdGVBc1Jhd0JpdHMoKSBjb25zdAogewotICAgIHJldHVy
biB0aGlzW0NhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzXS51bnNhZmVU
YWcoKTsKKyAgICByZXR1cm4gdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKV0udW5zYWZlVGFnKCk7CiB9CiAKIENhbGxTaXRlSW5k
ZXggQ2FsbEZyYW1lOjpjYWxsU2l0ZUluZGV4KCkgY29uc3QKIHsKLSAgICByZXR1cm4gQ2FsbFNp
dGVJbmRleChCeXRlY29kZUluZGV4KGNhbGxTaXRlQXNSYXdCaXRzKCkpKTsKKyAgICByZXR1cm4g
Q2FsbFNpdGVJbmRleDo6ZnJvbUJpdHMoY2FsbFNpdGVBc1Jhd0JpdHMoKSk7CiB9CiAKIFNVUFBS
RVNTX0FTQU4gQ2FsbFNpdGVJbmRleCBDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRlSW5kZXgoKSBj
b25zdAogewotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgodW5zYWZlQ2Fs
bFNpdGVBc1Jhd0JpdHMoKSkpOworICAgIHJldHVybiBDYWxsU2l0ZUluZGV4Ojpmcm9tQml0cyh1
bnNhZmVDYWxsU2l0ZUFzUmF3Qml0cygpKTsKIH0KIAogY29uc3QgSW5zdHJ1Y3Rpb24qIENhbGxG
cmFtZTo6Y3VycmVudFZQQygpIGNvbnN0CkBAIC0xMTcsNyArMTE3LDggQEAgY29uc3QgSW5zdHJ1
Y3Rpb24qIENhbGxGcmFtZTo6Y3VycmVudFZQQygpIGNvbnN0CiB2b2lkIENhbGxGcmFtZTo6c2V0
Q3VycmVudFZQQyhjb25zdCBJbnN0cnVjdGlvbiogdnBjKQogewogICAgIENhbGxTaXRlSW5kZXgg
Y2FsbFNpdGUoY29kZUJsb2NrKCktPmJ5dGVjb2RlSW5kZXgodnBjKSk7Ci0gICAgdGhpc1tDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc10udGFnKCkgPSBzdGF0aWNfY2Fz
dDxpbnQzMl90PihjYWxsU2l0ZS5iaXRzKCkpOworICAgIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyldLnRhZygpID0gY2FsbFNp
dGUuYml0cygpOworICAgIEFTU0VSVChjdXJyZW50VlBDKCkgPT0gdnBjKTsKIH0KIAogdW5zaWdu
ZWQgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCkgY29uc3QKQEAgLTE0
NCw3ICsxNDUsNyBAQCBCeXRlY29kZUluZGV4IENhbGxGcmFtZTo6Ynl0ZWNvZGVJbmRleCgpCiAg
ICAgfQogI2VuZGlmCiAgICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkp
OwotICAgIHJldHVybiBCeXRlY29kZUluZGV4KGNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQo
KSk7CisgICAgcmV0dXJuIGNhbGxTaXRlSW5kZXgoKS5ieXRlY29kZUluZGV4KCk7CiB9CiAKIENv
ZGVPcmlnaW4gQ2FsbEZyYW1lOjpjb2RlT3JpZ2luKCkKQEAgLTE1OCw3ICsxNTksNyBAQCBDb2Rl
T3JpZ2luIENhbGxGcmFtZTo6Y29kZU9yaWdpbigpCiAgICAgICAgIHJldHVybiBjb2RlQmxvY2so
KS0+Y29kZU9yaWdpbihpbmRleCk7CiAgICAgfQogI2VuZGlmCi0gICAgcmV0dXJuIENvZGVPcmln
aW4oQnl0ZWNvZGVJbmRleChjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCkpKTsKKyAgICBy
ZXR1cm4gQ29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KCkuYnl0ZWNvZGVJbmRleCgpKTsKIH0KIAog
UmVnaXN0ZXIqIENhbGxGcmFtZTo6dG9wT2ZGcmFtZUludGVybmFsKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAppbmRleCA4YWJkZGI4MTA2YjQxYjFh
ZTAzZDc1NzZhODAxZDdiZjkxZjIxNmM4Li43ZDU2ZmM3NTQ2YmNmZTAxMjllMjcwYjEzZmVkNjA0
OWFiZWJjNjdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Q2FsbEZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiU3RhY2tWaXNpdG9yLmgiCiAjaW5j
bHVkZSAiVk0uaCIKICNpbmNsdWRlICJWTUVudHJ5UmVjb3JkLmgiCisjaW5jbHVkZSA8d3RmL0Vu
dW1DbGFzc09wZXJhdG9yT3ZlcmxvYWRzLmg+CiAKIG5hbWVzcGFjZSBKU0MgIHsKIApAQCAtNDYs
MTggKzQ3LDI0IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgQ2FsbFNpdGVJbmRleCgpID0g
ZGVmYXVsdDsKICAgICAgICAgCiAgICAgICAgIGV4cGxpY2l0IENhbGxTaXRlSW5kZXgoQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4KQotICAgICAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoYnl0
ZWNvZGVJbmRleCkKKyAgICAgICAgICAgIDogbV9iaXRzKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkp
CisgICAgICAgIHsgCisgICAgICAgICAgICBBU1NFUlQoIWJ5dGVjb2RlSW5kZXguY2hlY2twb2lu
dCgpKTsKKyAgICAgICAgfQorICAgICAgICBleHBsaWNpdCBDYWxsU2l0ZUluZGV4KHVpbnQzMl90
IGJpdHMpCisgICAgICAgICAgICA6IG1fYml0cyhiaXRzKQogICAgICAgICB7IH0KIAotICAgICAg
ICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2J5dGVjb2RlSW5k
ZXg7IH0KLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGxTaXRlSW5kZXgmIG90aGVy
KSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXggPT0gb3RoZXIubV9ieXRlY29kZUluZGV4
OyB9CisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1f
Yml0czsgfQorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsbFNpdGVJbmRleCYgb3Ro
ZXIpIGNvbnN0IHsgcmV0dXJuIG1fYml0cyA9PSBvdGhlci5tX2JpdHM7IH0KIAotICAgICAgICB1
aW50MzJfdCBiaXRzKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4LmFzQml0cygpOyB9
CisgICAgICAgIHVpbnQzMl90IGJpdHMoKSBjb25zdCB7IHJldHVybiBtX2JpdHM7IH0KKyAgICAg
ICAgc3RhdGljIENhbGxTaXRlSW5kZXggZnJvbUJpdHModWludDMyX3QgYml0cykgeyByZXR1cm4g
Q2FsbFNpdGVJbmRleChiaXRzKTsgfQogCi0gICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsgfQorICAgICAgICBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBCeXRlY29kZUluZGV4KGJpdHMo
KSk7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUlu
ZGV4OworICAgICAgICB1aW50MzJfdCBtX2JpdHMgeyBCeXRlY29kZUluZGV4KCkub2Zmc2V0KCkg
fTsKICAgICB9OwogCiAgICAgY2xhc3MgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggOiBwdWJsaWMg
Q2FsbFNpdGVJbmRleCB7CkBAIC02NSw3ICs3Miw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAg
ICAgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgZXhwbGlj
aXQgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgodWludDMyX3QgYml0cykKLSAgICAgICAgICAgIDog
Q2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4Ojpmcm9tQml0cyhiaXRzKSkKKyAgICAgICAgICAg
IDogQ2FsbFNpdGVJbmRleChiaXRzKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtNzgsMjQg
Kzg1LDI3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAvLyBhcm02NF8zMiBleHBlY3RzIGNhbGxl
ciBmcmFtZSBhbmQgcmV0dXJuIHBjIHRvIHVzZSA4IGJ5dGVzIAogICAgIHN0cnVjdCBDYWxsZXJG
cmFtZUFuZFBDIHsKICAgICAgICAgYWxpZ25hcyhDUFVSZWdpc3RlcikgQ2FsbEZyYW1lKiBjYWxs
ZXJGcmFtZTsKLSAgICAgICAgYWxpZ25hcyhDUFVSZWdpc3RlcikgY29uc3QgSW5zdHJ1Y3Rpb24q
IHJldHVyblBDOworICAgICAgICBhbGlnbmFzKENQVVJlZ2lzdGVyKSB2b2lkKiByZXR1cm5QQzsK
ICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgc2l6ZUluUmVnaXN0ZXJzID0gMiAqIHNpemVv
ZihDUFVSZWdpc3RlcikgLyBzaXplb2YoUmVnaXN0ZXIpOwogICAgIH07CiAgICAgc3RhdGljX2Fz
c2VydChDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMgPT0gc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKSwgIkNhbGxlckZyYW1lQW5kUEM6OnNpemVJblJl
Z2lzdGVycyBpcyBpbmNvcnJlY3QuIik7CiAKLSAgICBzdHJ1Y3QgQ2FsbEZyYW1lU2xvdCB7Ci0g
ICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGNvZGVCbG9jayA9IENhbGxlckZyYW1lQW5kUEM6
OnNpemVJblJlZ2lzdGVyczsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgY2FsbGVlID0g
Y29kZUJsb2NrICsgMTsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPSBjYWxsZWUgKyAxOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIGlu
dCB0aGlzQXJndW1lbnQgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIDE7Ci0gICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgaW50IGZpcnN0QXJndW1lbnQgPSB0aGlzQXJndW1lbnQgKyAxOwor
ICAgIGVudW0gY2xhc3MgQ2FsbEZyYW1lU2xvdCA6IGludCB7CisgICAgICAgIGNvZGVCbG9jayA9
IENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycywKKyAgICAgICAgY2FsbGVlID0gY29k
ZUJsb2NrICsgMSwKKyAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsZWUg
KyAxLAorICAgICAgICB0aGlzQXJndW1lbnQgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAr
IDEsCisgICAgICAgIGZpcnN0QXJndW1lbnQgPSB0aGlzQXJndW1lbnQgKyAxLAogICAgIH07CiAK
KyAgICBPVkVSTE9BRF9NQVRIX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSVRIX0lOVEVHUkFM
UyhDYWxsRnJhbWVTbG90KQorICAgIE9WRVJMT0FEX1JFTEFUSU9OQUxfT1BFUkFUT1JTX0ZPUl9F
TlVNX0NMQVNTX1dJVEhfSU5URUdSQUxTKENhbGxGcmFtZVNsb3QpCisKICAgICAvLyBSZXByZXNl
bnRzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHNjcmlwdCBleGVjdXRpb24uCiAgICAgLy8gUGFzc2Vk
IGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBtb3N0IGZ1bmN0aW9ucy4KICAgICBjbGFzcyBDYWxs
RnJhbWUgOiBwcml2YXRlIFJlZ2lzdGVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGhlYWRlclNpemVJblJlZ2lzdGVycyA9IENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzICsgMTsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQg
aGVhZGVyU2l6ZUluUmVnaXN0ZXJzID0gc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykgKyAxOwogCiAgICAgICAgIC8vIFRoaXMgZnVuY3Rp
b24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGluIHZlcnkgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcwog
ICAgICAgICAvLyB3aGVuIHlvdSd2ZSBndWFyYW50ZWVkIHRoZSBjYWxsZWUgY2FuJ3QgYmUgYSBX
YXNtIGNhbGxlZSwgYW5kIGNhbgpAQCAtMTA2LDEwICsxMTYsMTAgQEAgbmFtZXNwYWNlIEpTQyAg
ewogICAgICAgICAvLyB0byBzZWUgaWYgaXQncyBhIGNlbGwsIGFuZCBpZiBpdCdzIG5vdCwgd2Ug
dGhyb3cgYW4gZXhjZXB0aW9uLgogICAgICAgICBpbmxpbmUgSlNWYWx1ZSBndWFyYW50ZWVkSlNW
YWx1ZUNhbGxlZSgpIGNvbnN0OwogICAgICAgICBpbmxpbmUgSlNPYmplY3QqIGpzQ2FsbGVlKCkg
Y29uc3Q7Ci0gICAgICAgIENhbGxlZUJpdHMgY2FsbGVlKCkgY29uc3QgeyByZXR1cm4gQ2FsbGVl
Qml0cyh0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0ucG9pbnRlcigpKTsgfQotICAgICAgICBT
VVBQUkVTU19BU0FOIENhbGxlZUJpdHMgdW5zYWZlQ2FsbGVlKCkgY29uc3QgeyByZXR1cm4gQ2Fs
bGVlQml0cyh0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0uYXNhblVuc2FmZVBvaW50ZXIoKSk7
IH0KKyAgICAgICAgQ2FsbGVlQml0cyBjYWxsZWUoKSBjb25zdCB7IHJldHVybiBDYWxsZWVCaXRz
KHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXS5wb2ludGVyKCkp
OyB9CisgICAgICAgIFNVUFBSRVNTX0FTQU4gQ2FsbGVlQml0cyB1bnNhZmVDYWxsZWUoKSBjb25z
dCB7IHJldHVybiBDYWxsZWVCaXRzKHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpXS5hc2FuVW5zYWZlUG9pbnRlcigpKTsgfQogICAgICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jaygpIGNvbnN0OwotICAgICAgICBDb2RlQmxvY2sqKiBhZGRyZXNzT2ZDb2RlQmxvY2so
KSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKio+KHRoaXMgKyBDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spOyB9CisgICAgICAgIENvZGVCbG9jayoqIGFkZHJlc3NPZkNvZGVC
bG9jaygpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxDb2RlQmxvY2sqKj4odGhpcyArIHN0
YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7IH0KICAgICAgICAgaW5s
aW5lIFNVUFBSRVNTX0FTQU4gQ29kZUJsb2NrKiB1bnNhZmVDb2RlQmxvY2soKSBjb25zdDsKICAg
ICAgICAgaW5saW5lIEpTU2NvcGUqIHNjb3BlKGludCBzY29wZVJlZ2lzdGVyT2Zmc2V0KSBjb25z
dDsKIApAQCAtMTgyLDE1ICsxOTIsMTMgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBzdGF0
aWMgdm9pZCBpbml0RGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKENhbGxGcmFtZSogZ2xv
YmFsRXhlYywgSlNDYWxsZWUqIGdsb2JhbENhbGxlZSk7CiAKICAgICAgICAgLy8gUmVhZCBhIHJl
Z2lzdGVyIGZyb20gdGhlIGNvZGVmcmFtZSAob3IgY29uc3RhbnQgZnJvbSB0aGUgQ29kZUJsb2Nr
KS4KLSAgICAgICAgUmVnaXN0ZXImIHIoaW50KTsKICAgICAgICAgUmVnaXN0ZXImIHIoVmlydHVh
bFJlZ2lzdGVyKTsKLSAgICAgICAgLy8gUmVhZCBhIHJlZ2lzdGVyIGZvciBhIG5vbi1jb25zdGFu
dAotICAgICAgICBSZWdpc3RlciYgdW5jaGVja2VkUihpbnQpOworICAgICAgICAvLyBSZWFkIGEg
cmVnaXN0ZXIgZm9yIGEga25vd24gbm9uLWNvbnN0YW50CiAgICAgICAgIFJlZ2lzdGVyJiB1bmNo
ZWNrZWRSKFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgLy8gQWNjZXNzIHRvIGFyZ3VtZW50
cyBhcyBwYXNzZWQuIChBZnRlciBjYXB0dXJlLCBhcmd1bWVudHMgbWF5IG1vdmUgdG8gYSBkaWZm
ZXJlbnQgbG9jYXRpb24uKQogICAgICAgICBzaXplX3QgYXJndW1lbnRDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgLSAxOyB9Ci0gICAgICAgIHNpemVf
dCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIGNvbnN0IHsgcmV0dXJuIHRoaXNbQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNdLnBheWxvYWQoKTsgfQorICAgICAg
ICBzaXplX3QgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSBjb25zdCB7IHJldHVybiB0aGlz
W3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpXS5wYXlsb2FkKCk7IH0KICAgICAgICAgc3RhdGljIGludCBhcmd1bWVudE9mZnNldChpbnQg
YXJndW1lbnQpIHsgcmV0dXJuIChDYWxsRnJhbWVTbG90OjpmaXJzdEFyZ3VtZW50ICsgYXJndW1l
bnQpOyB9CiAgICAgICAgIHN0YXRpYyBpbnQgYXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKGlu
dCBhcmd1bWVudCkgeyByZXR1cm4gKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGFyZ3Vt
ZW50KTsgfQogCkBAIC0yMzksNyArMjQ3LDcgQEAgbmFtZXNwYWNlIEpTQyAgewogCiAgICAgICAg
IEpTVmFsdWUgYXJndW1lbnRBZnRlckNhcHR1cmUoc2l6ZV90IGFyZ3VtZW50KTsKIAotICAgICAg
ICBzdGF0aWMgaW50IG9mZnNldEZvcihzaXplX3QgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
IHsgcmV0dXJuIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgQ2FsbEZyYW1lU2xvdDo6dGhp
c0FyZ3VtZW50IC0gMTsgfQorICAgICAgICBzdGF0aWMgaW50IG9mZnNldEZvcihzaXplX3QgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpIHsgcmV0dXJuIENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1
bWVudCArIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsgfQogCiAgICAgICAgIHN0YXRp
YyBDYWxsRnJhbWUqIG5vQ2FsbGVyKCkgeyByZXR1cm4gbnVsbHB0cjsgfQogICAgICAgICBib29s
IGlzRGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKCkgY29uc3QKQEAgLTI1MSwxMCArMjU5
LDEwIEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgYm9vbCBpc1N0YWNrT3ZlcmZsb3dGcmFt
ZSgpIGNvbnN0OwogICAgICAgICBib29sIGlzV2FzbUZyYW1lKCkgY29uc3Q7CiAKLSAgICAgICAg
dm9pZCBzZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhpbnQgY291bnQpIHsgc3RhdGljX2Nh
c3Q8UmVnaXN0ZXIqPih0aGlzKVtDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpc10ucGF5bG9hZCgpID0gY291bnQ7IH0KKyAgICAgICAgdm9pZCBzZXRBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyhpbnQgY291bnQpIHsgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtz
dGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KV0ucGF5bG9hZCgpID0gY291bnQ7IH0KICAgICAgICAgaW5saW5lIHZvaWQgc2V0Q2FsbGVlKEpT
T2JqZWN0Kik7CiAgICAgICAgIGlubGluZSB2b2lkIHNldENvZGVCbG9jayhDb2RlQmxvY2sqKTsK
LSAgICAgICAgdm9pZCBzZXRSZXR1cm5QQyh2b2lkKiB2YWx1ZSkgeyBjYWxsZXJGcmFtZUFuZFBD
KCkucmV0dXJuUEMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4odmFsdWUp
OyB9CisgICAgICAgIHZvaWQgc2V0UmV0dXJuUEModm9pZCogdmFsdWUpIHsgY2FsbGVyRnJhbWVB
bmRQQygpLnJldHVyblBDID0gdmFsdWU7IH0KIAogICAgICAgICBTdHJpbmcgZnJpZW5kbHlGdW5j
dGlvbk5hbWUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0NhbGxGcmFtZUlubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9DYWxsRnJhbWVJbmxpbmVzLmgKaW5kZXggYTk3ZGVjYTUzYmNlMTc5Mjg5YjBjMzgwZDA0ZThm
MmE4NjA0NzdkMS4uZWU3ZWMyYWIxMDRhN2EzNGQ5OGIwZjQzOGY2NDRjMmRjYTFjNTE2OCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUlubGlu
ZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5s
aW5lcy5oCkBAIC0zMiw1MCArMzIsMzkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBS
ZWdpc3RlciYgQ2FsbEZyYW1lOjpyKGludCBpbmRleCkKLXsKLSAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IHRoaXMtPmNvZGVCbG9jaygpOwotICAgIGlmIChjb2RlQmxvY2stPmlzQ29uc3RhbnRS
ZWdpc3RlckluZGV4KGluZGV4KSkKLSAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJl
Z2lzdGVyKj4oJmNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCkpOwotICAgIHJldHVy
biB0aGlzW2luZGV4XTsKLX0KLQogaW5saW5lIFJlZ2lzdGVyJiBDYWxsRnJhbWU6OnIoVmlydHVh
bFJlZ2lzdGVyIHJlZykKIHsKLSAgICByZXR1cm4gcihyZWcub2Zmc2V0KCkpOwotfQotCi1pbmxp
bmUgUmVnaXN0ZXImIENhbGxGcmFtZTo6dW5jaGVja2VkUihpbnQgaW5kZXgpCi17Ci0gICAgUkVM
RUFTRV9BU1NFUlQoaW5kZXggPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7Ci0gICAgcmV0
dXJuIHRoaXNbaW5kZXhdOworICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIqPigmdGhpcy0+Y29kZUJsb2NrKCktPmNvbnN0
YW50UmVnaXN0ZXIocmVnKSk7CisgICAgcmV0dXJuIHRoaXNbcmVnLm9mZnNldCgpXTsKIH0KIAog
aW5saW5lIFJlZ2lzdGVyJiBDYWxsRnJhbWU6OnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyIHJl
ZykKIHsKLSAgICByZXR1cm4gdW5jaGVja2VkUihyZWcub2Zmc2V0KCkpOworICAgIEFTU0VSVCgh
cmVnLmlzQ29uc3RhbnQoKSk7CisgICAgcmV0dXJuIHRoaXNbcmVnLm9mZnNldCgpXTsKIH0KIAog
aW5saW5lIEpTVmFsdWUgQ2FsbEZyYW1lOjpndWFyYW50ZWVkSlNWYWx1ZUNhbGxlZSgpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKCFjYWxsZWUoKS5pc1dhc20oKSk7Ci0gICAgcmV0dXJuIHRoaXNbQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlXS5qc1ZhbHVlKCk7CisgICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nh
c3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXS5qc1ZhbHVlKCk7CiB9CiAKIGlubGluZSBK
U09iamVjdCogQ2FsbEZyYW1lOjpqc0NhbGxlZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFjYWxs
ZWUoKS5pc1dhc20oKSk7Ci0gICAgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXS5v
YmplY3QoKTsKKyAgICByZXR1cm4gdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSldLm9iamVjdCgpOwogfQogCiBpbmxpbmUgQ29kZUJsb2NrKiBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrXS5SZWdpc3Rlcjo6Y29kZUJsb2NrKCk7CisgICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nhc3Q8
aW50PihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spXS5SZWdpc3Rlcjo6Y29kZUJsb2NrKCk7CiB9
CiAKIGlubGluZSBTVVBQUkVTU19BU0FOIENvZGVCbG9jayogQ2FsbEZyYW1lOjp1bnNhZmVDb2Rl
QmxvY2soKSBjb25zdAogewotICAgIHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
a10uUmVnaXN0ZXI6OmFzYW5VbnNhZmVDb2RlQmxvY2soKTsKKyAgICByZXR1cm4gdGhpc1tzdGF0
aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayldLlJlZ2lzdGVyOjphc2FuVW5z
YWZlQ29kZUJsb2NrKCk7CiB9CiAKIGlubGluZSBKU0dsb2JhbE9iamVjdCogQ2FsbEZyYW1lOjps
ZXhpY2FsR2xvYmFsT2JqZWN0KFZNJiB2bSkgY29uc3QKQEAgLTEwMiwxMiArOTEsMTIgQEAgaW5s
aW5lIGJvb2wgQ2FsbEZyYW1lOjppc1dhc21GcmFtZSgpIGNvbnN0CiAKIGlubGluZSB2b2lkIENh
bGxGcmFtZTo6c2V0Q2FsbGVlKEpTT2JqZWN0KiBjYWxsZWUpCiB7Ci0gICAgc3RhdGljX2Nhc3Q8
UmVnaXN0ZXIqPih0aGlzKVtDYWxsRnJhbWVTbG90OjpjYWxsZWVdID0gY2FsbGVlOworICAgIHN0
YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpXSA9IGNhbGxlZTsKIH0KIAogaW5saW5lIHZvaWQgQ2FsbEZyYW1lOjpzZXRDb2Rl
QmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIq
Pih0aGlzKVtDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2tdID0gY29kZUJsb2NrOworICAgIHN0YXRp
Y19jYXN0PFJlZ2lzdGVyKj4odGhpcylbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spXSA9IGNvZGVCbG9jazsKIH0KIAogaW5saW5lIHZvaWQgQ2FsbEZyYW1lOjpzZXRT
Y29wZShpbnQgc2NvcGVSZWdpc3Rlck9mZnNldCwgSlNTY29wZSogc2NvcGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2hlY2twb2ludE9TUkV4aXRTaWRl
U3RhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DaGVja3BvaW50T1NS
RXhpdFNpZGVTdGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg5Mzg5ZDg4OTEzYTJkMGE1NmE3YmMxMmQ0ZDFj
MGM0ZDgwZGQxZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaApAQCAtMCwwICsxLDQxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiQnl0ZWNvZGVJbmRleC5oIgorI2luY2x1ZGUgIk9wZXJhbmRzLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorCisgICAgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4OworICAgIEpTVmFsdWUgdG1wc1ttYXhOdW1DaGVja3BvaW50VG1wc10g
eyB9OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5jcHAKaW5kZXggNTcwYjBhZmEzYmEwODZhNDUwOGE1MWViY2U4MGJmYjViZjU5
Y2QyNS4uMzQwNjU4NmRlOTVkZThjNjJkMTExZTFlZmY4NjllYWZiZTkwYmUzYiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC0z
NCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1l
Q2xvc3VyZS5oIgogI2luY2x1ZGUgIkNhdGNoU2NvcGUuaCIKKyNpbmNsdWRlICJDaGVja3BvaW50
T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNv
ZGVDYWNoZS5oIgogI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgpAQCAtMTIzLDcgKzEyNCw3
IEBAIEpTVmFsdWUgZXZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxs
ZXJGcmFtZSgpOwogICAgIENhbGxTaXRlSW5kZXggY2FsbGVyQ2FsbFNpdGVJbmRleCA9IGNhbGxl
ckZyYW1lLT5jYWxsU2l0ZUluZGV4KCk7CiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sg
PSBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgSlNTY29wZSogY2FsbGVyU2NvcGVDaGFp
biA9IGNhbGxlckZyYW1lLT51bmNoZWNrZWRSKGNhbGxlckNvZGVCbG9jay0+c2NvcGVSZWdpc3Rl
cigpLm9mZnNldCgpKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBjYWxsZXJTY29w
ZUNoYWluID0gY2FsbGVyRnJhbWUtPnVuY2hlY2tlZFIoY2FsbGVyQ29kZUJsb2NrLT5zY29wZVJl
Z2lzdGVyKCkpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIFVubGlua2VkQ29kZUJsb2NrKiBjYWxs
ZXJVbmxpbmtlZENvZGVCbG9jayA9IGNhbGxlckNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2so
KTsKIAogICAgIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCA9IGNhbGxlclVubGlua2VkQ29k
ZUJsb2NrLT5pc0Fycm93RnVuY3Rpb24oKSB8fCBjYWxsZXJVbmxpbmtlZENvZGVCbG9jay0+aXNB
cnJvd0Z1bmN0aW9uQ29udGV4dCgpOwpAQCAtMjE1LDYgKzIxNiw5IEBAIHVuc2lnbmVkIHNpemVP
ZlZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBhcmd1bWVudHMs
IHVpbnQzMl90CiAgICAgfQogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwogICAg
IAorICAgIGlmIChsZW5ndGggPiBtYXhBcmd1bWVudHMpCisgICAgICAgIHRocm93U3RhY2tPdmVy
Zmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOworCiAgICAgaWYgKGxlbmd0aCA+PSBmaXJz
dFZhckFyZ09mZnNldCkKICAgICAgICAgbGVuZ3RoIC09IGZpcnN0VmFyQXJnT2Zmc2V0OwogICAg
IGVsc2UKQEAgLTI1MSw3ICsyNTUsNyBAQCB1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLAogICAgIHJl
dHVybiBsZW5ndGg7CiB9CiAKLXZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1l
bnREZXN0LCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5n
dGgpCit2b2lkIGxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUqIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBvZmZzZXQs
IHVpbnQzMl90IGxlbmd0aCkKIHsKICAgICBpZiAoVU5MSUtFTFkoIWFyZ3VtZW50cy5pc0NlbGwo
KSkgfHwgIWxlbmd0aCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjYzLDMxICsyNjcsMzEgQEAgdm9p
ZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgVmlydHVhbFJlZ2kKICAgICBzd2l0Y2ggKGNlbGwtPnR5cGUoKSkgewogICAgIGNh
c2UgRGlyZWN0QXJndW1lbnRzVHlwZToKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAg
ICBqc0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxP
YmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAg
ICAgICBqc0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9i
YWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgU2NvcGVkQXJndW1lbnRzVHlwZToKICAgICAgICAgc2NvcGUucmVsZWFz
ZSgpOwotICAgICAgICBqc0Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3Vt
ZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBs
ZW5ndGgpOworICAgICAgICBqc0Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0Fy
Z3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSlNJbW11dGFibGVCdXR0ZXJmbHlUeXBlOgogICAg
ICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIGpzQ2FzdDxKU0ltbXV0YWJsZUJ1dHRlcmZs
eSo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0
RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAganNDYXN0PEpTSW1tdXRhYmxl
QnV0dGVyZmx5Kj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxl
bWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOyAKICAgICBkZWZhdWx0
OiB7CiAgICAgICAgIEFTU0VSVChhcmd1bWVudHMuaXNPYmplY3QoKSk7CiAgICAgICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKICAgICAgICAgaWYgKGlzSlNB
cnJheShvYmplY3QpKSB7CiAgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgICAg
ICBqc0Nhc3Q8SlNBcnJheSo+KG9iamVjdCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICAg
ICAganNDYXN0PEpTQXJyYXkqPihvYmplY3QpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0
LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgdW5zaWduZWQgaTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8
IGxlbmd0aCAmJiBvYmplY3QtPmNhbkdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsgKytpKQot
ICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IG9iamVjdC0+
Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVz
dFtpXSA9IG9iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOwogICAgICAgICBmb3Ig
KDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0
LT5nZXQoZ2xvYmFsT2JqZWN0LCBpICsgb2Zmc2V0KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RF
bGVtZW50RGVzdCArIGkpID0gdmFsdWU7CisgICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ld
ID0gdmFsdWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0gfQpAQCAtMjk5LDgg
KzMwMyw3IEBAIHZvaWQgc2V0dXBWYXJhcmdzRnJhbWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxGCiAgICAgCiAgICAgbG9hZFZhcmFyZ3Mo
CiAgICAgICAgIGdsb2JhbE9iamVjdCwKLSAgICAgICAgY2FsbEZyYW1lLAotICAgICAgICBjYWxs
ZWVGcmFtZU9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCksCisgICAgICAgIGJp
dHdpc2VfY2FzdDxKU1ZhbHVlKj4oJmNhbGxGcmFtZS0+cihjYWxsZWVGcmFtZU9mZnNldCArIENh
bGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCkpKSwKICAgICAgICAgYXJndW1lbnRzLCBvZmZzZXQs
IGxlbmd0aCk7CiAgICAgCiAgICAgbmV3Q2FsbEZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyhsZW5ndGggKyAxKTsKQEAgLTU0MCw4ICs1NDMsMTMgQEAgcHVibGljOgogICAgICAg
ICBtX2NvZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVCbG9jaygpOwogCiAgICAgICAgIG1faGFuZGxl
ciA9IG51bGxwdHI7Ci0gICAgICAgIGlmICghbV9pc1Rlcm1pbmF0aW9uKSB7Ci0gICAgICAgICAg
ICBpZiAobV9jb2RlQmxvY2spIHsKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrKSB7CisgICAgICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgZXhjZXB0aW9uIGhhbmRsaW5nIGluIGNo
ZWNrcG9pbnRzLgorI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICAgICAgaWYgKHJlbW92ZUNv
ZGVQdHJUYWcobV9yZXR1cm5QQykgPT0gTExJbnQ6OmdldENvZGVQdHI8Tm9QdHJUYWc+KGNoZWNr
cG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZSkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+dm0oKS5maW5kQ2hlY2twb2lu
dE9TUlNpZGVTdGF0ZShtX2NhbGxGcmFtZSk7CisjZW5kaWYKKyAgICAgICAgICAgIGlmICghbV9p
c1Rlcm1pbmF0aW9uKSB7CiAgICAgICAgICAgICAgICAgbV9oYW5kbGVyID0gZmluZEV4Y2VwdGlv
bkhhbmRsZXIodmlzaXRvciwgbV9jb2RlQmxvY2ssIFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxl
cik7CiAgICAgICAgICAgICAgICAgaWYgKG1faGFuZGxlcikKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKQEAgLTU2Myw2ICs1NzEsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIGlmIChzaG91bGRTdG9wVW53aW5kaW5nKQogICAgICAgICAgICAgcmV0dXJuIFN0YWNr
VmlzaXRvcjo6RG9uZTsKIAorICAgICAgICBtX3JldHVyblBDID0gbV9jYWxsRnJhbWUtPnJldHVy
blBDKCkudmFsdWUoKTsKICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CiAg
ICAgfQogCkBAIC01OTksNiArNjA4LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNUZXJtaW5h
dGlvbjsKICAgICBDb2RlQmxvY2sqJiBtX2NvZGVCbG9jazsKICAgICBIYW5kbGVySW5mbyomIG1f
aGFuZGxlcjsKKyAgICBtdXRhYmxlIGNvbnN0IHZvaWQqIG1fcmV0dXJuUEMgeyBudWxscHRyIH07
CiB9OwogCiBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp1bndpbmQoVk0m
IHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQpAQCAtODY4
LDcgKzg3OCw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU09iamVjdCoKICAgICB9CiAKICAgICBWTUVudHJ5
U2NvcGUgZW50cnlTY29wZSh2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICBpZiAoVU5MSUtFTFkoIXZt
LmlzU2FmZVRvUmVjdXJzZVNvZnQoKSkpCisgICAgaWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1Jl
Y3Vyc2VTb2Z0KCkgfHwgYXJncy5zaXplKCkgPiBtYXhBcmd1bWVudHMpKQogICAgICAgICByZXR1
cm4gY2hlY2tlZFJldHVybih0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUpKTsKIAogICAgIGlmIChpc0pTQ2FsbCkgewpAQCAtOTM3LDcgKzk0Nyw3IEBAIEpT
T2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNPCiAgICAgfQogCiAgICAgVk1FbnRyeVNjb3BlIGVudHJ5U2Nv
cGUodm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgaWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vy
c2VTb2Z0KCkpKSB7CisgICAgaWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vyc2VTb2Z0KCkg
fHwgYXJncy5zaXplKCkgPiBtYXhBcmd1bWVudHMpKSB7CiAgICAgICAgIHRocm93U3RhY2tPdmVy
Zmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmgKaW5kZXggMTgxMTI5N2IxOGFkYzJkNzNmZjZmZTFkZjk1ODAyYTZhMGIxNWRjNS4u
ZTgzZjQ4OTJlNDYzOWExMjM2Y2VlMzlkY2RhOTlmZWM4YWRjMDU4ZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKQEAgLTE3MSw3ICsxNzEs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heEFy
Z3VtZW50cyA9IDB4MTAwMDA7CiAgICAgdW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFyYXJncyhKU0ds
b2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZNJiwgSlNWYWx1ZSBhcmd1bWVudHMsIHVuc2lnbmVk
IG51bVVzZWRTdGFja1Nsb3RzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgdW5z
aWduZWQgc2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxG
cmFtZSosIFZNJiwgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMpOwotICAgIHZvaWQgbG9hZFZh
cmFyZ3MoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIFZpcnR1YWxSZWdp
c3RlciBmaXJzdEVsZW1lbnREZXN0LCBKU1ZhbHVlIHNvdXJjZSwgdWludDMyX3Qgb2Zmc2V0LCB1
aW50MzJfdCBsZW5ndGgpOworICAgIHZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCBKU1ZhbHVlIHNvdXJjZSwgdWludDMyX3Qgb2Zmc2V0
LCB1aW50MzJfdCBsZW5ndGgpOwogICAgIHZvaWQgc2V0dXBWYXJhcmdzRnJhbWUoSlNHbG9iYWxP
YmplY3QqLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIENhbGxGcmFtZSogZXhlY0NhbGxlZSwgSlNW
YWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0LCB1aW50MzJfdCBsZW5n
dGgpOwogICAgIHZvaWQgc2V0dXBWYXJhcmdzRnJhbWVBbmRTZXRUaGlzKEpTR2xvYmFsT2JqZWN0
KiwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUg
dGhpc1ZhbHVlLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQs
IHVpbnQzMl90IGxlbmd0aCk7CiAgICAgdm9pZCBzZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZShK
U0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogZXhlY0NhbGxlciwgQ2FsbEZyYW1lKiBleGVjQ2Fs
bGVlLCB1aW50MzJfdCBsZW5ndGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAppbmRleCBhYTdhODc3OGUyMzdiZjdhMDliMGZkY2Rm
ZmU3YWFhZGFkZmI1NmQ5Li44NTViODU2MjNhOWQyOTUxYTg1ZWUxNzk4YmNiMTEzYTNhYzMwZDk1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNp
dG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNp
dG9yLmNwcApAQCAtMjA5LDcgKzIwOSw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFkSW5saW5l
ZEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luCiAgICAg
ICAgIG1fZnJhbWUubV9jYWxsRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgICAgIG1fZnJhbWUubV9p
bmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBtX2Zy
YW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIub2Zmc2V0KCkpLnVuYm94ZWRJbnQzMigpOwor
ICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZy
YW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyKS51bmJveGVkSW50
MzIoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
czsKICAgICAgICAgbV9mcmFtZS5tX2NvZGVCbG9jayA9IGlubGluZUNhbGxGcmFtZS0+YmFzZWxp
bmVDb2RlQmxvY2suZ2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaAppbmRleCAyODIwY2IxNzg0NWNmY2ZjODlmNTU5NmExYjY0OTc1ODRiZmYwNjFlLi42
OTM0MmRlZmFmZWI1M2MzNmZmOWYzYTQwNWNlMDAyNWQ1ZDg1ZGIxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTY0NywyOCArNjQ3LDI4IEBAIHB1
YmxpYzoKICAgICB9CiAjZW5kaWYKIAotICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFk
ZXJQdHIoaW50IGVudHJ5LCBHUFJSZWcgdG8sIEdQUlJlZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIpCisgICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihWaXJ0
dWFsUmVnaXN0ZXIgZW50cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlcikKICAgICB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhmcm9tLCBlbnRy
eSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhmcm9t
LCBlbnRyeS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CiAgICAgfQotICAgIHZv
aWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMihpbnQgZW50cnksIEdQUlJlZyB0bywgR1BS
UmVnIGZyb20gPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKKyAgICB2b2lkIGVtaXRHZXRG
cm9tQ2FsbEZyYW1lSGVhZGVyMzIoVmlydHVhbFJlZ2lzdGVyIGVudHJ5LCBHUFJSZWcgdG8sIEdQ
UlJlZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCiAgICAgewotICAgICAgICBs
b2FkMzIoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CisgICAg
ICAgIGxvYWQzMihBZGRyZXNzKGZyb20sIGVudHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVy
KSksIHRvKTsKICAgICB9CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICB2b2lkIGVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyNjQoaW50IGVudHJ5LCBHUFJSZWcgdG8sIEdQUlJlZyBmcm9tID0gR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCisgICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlcjY0KFZpcnR1YWxSZWdpc3RlciBlbnRyeSwgR1BSUmVnIHRvLCBHUFJSZWcgZnJvbSA9IEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQogICAgIHsKLSAgICAgICAgbG9hZDY0KEFkZHJlc3Mo
ZnJvbSwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOworICAgICAgICBsb2FkNjQoQWRk
cmVzcyhmcm9tLCBlbnRyeS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CiAgICAg
fQogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCi0gICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVI
ZWFkZXIoR1BSUmVnIGZyb20sIGludCBlbnRyeSkKKyAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFt
ZUhlYWRlcihHUFJSZWcgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKLSAgICAg
ICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZW50
cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgICAgIHN0b3JlUHRyKGZyb20sIEFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lz
dGVyKSkpOwogICAgIH0KIAotICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQq
IHZhbHVlLCBpbnQgZW50cnkpCisgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9p
ZCogdmFsdWUsIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKICAgICB7Ci0gICAgICAgIHN0b3JlUHRy
KFRydXN0ZWRJbW1QdHIodmFsdWUpLCBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZElt
bVB0cih2YWx1ZSksIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5Lm9m
ZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgIH0KIAogICAgIHZvaWQgZW1pdEdldENh
bGxlckZyYW1lRnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlcklEIHRvKQpAQCAtNjk2LDE5
ICs2OTYsMTkgQEAgcHVibGljOgogICAgIC8vIGNhbGxlcidzIGZyYW1lIHBvaW50ZXIuIE9uIHNv
bWUgcGxhdGZvcm1zLCB0aGUgY2FsbGVlIGlzIHJlc3BvbnNpYmxlIGZvciBwdXNoaW5nIHRoZQog
ICAgIC8vICJsaW5rIHJlZ2lzdGVyIiBjb250YWluaW5nIHRoZSByZXR1cm4gYWRkcmVzcyBpbiB0
aGUgZnVuY3Rpb24gcHJvbG9ndWUuCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICB2b2lkIGVtaXRQ
dXRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3VlKEdQUlJlZyBmcm9tLCBpbnQgZW50cnkp
CisgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShHUFJSZWcg
ZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKLSAgICAgICAgc3RvcmVQdHIoZnJv
bSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZW50cnkgKiBzdGF0aWNfY2FzdDxwdHJk
aWZmX3Q+KHNpemVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpKSk7
CisgICAgICAgIHN0b3JlUHRyKGZyb20sIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVu
dHJ5Lm9mZnNldCgpICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAt
IHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEoKSkpOwogICAgIH0KICNlbHNlCi0gICAgdm9pZCBl
bWl0UHV0UGF5bG9hZFRvQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJvbG9ndWUoR1BSUmVnIGZyb20s
IGludCBlbnRyeSkKKyAgICB2b2lkIGVtaXRQdXRQYXlsb2FkVG9DYWxsRnJhbWVIZWFkZXJCZWZv
cmVQcm9sb2d1ZShHUFJSZWcgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKLSAg
ICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZW50cnkg
KiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFj
a1BvaW50ZXJEZWx0YSgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICBzdG9yZVB0cihmcm9tLCBBZGRyZXNzKHN0YWNr
UG9pbnRlclJlZ2lzdGVyLCBlbnRyeS5vZmZzZXQoKSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
c2l6ZW9mKFJlZ2lzdGVyKSkgLSBwcm9sb2d1ZVN0YWNrUG9pbnRlckRlbHRhKCkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CiAgICAg
fQogCi0gICAgdm9pZCBlbWl0UHV0VGFnVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShU
cnVzdGVkSW1tMzIgdGFnLCBpbnQgZW50cnkpCisgICAgdm9pZCBlbWl0UHV0VGFnVG9DYWxsRnJh
bWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShUcnVzdGVkSW1tMzIgdGFnLCBWaXJ0dWFsUmVnaXN0ZXIg
ZW50cnkpCiAgICAgewotICAgICAgICBzdG9yZVB0cih0YWcsIEFkZHJlc3Moc3RhY2tQb2ludGVy
UmVnaXN0ZXIsIGVudHJ5ICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIp
KSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEoKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOworICAgICAgICBzdG9yZVB0cih0YWcsIEFk
ZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVudHJ5Lm9mZnNldCgpICogc3RhdGljX2Nhc3Q8
cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEo
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkp
OwogICAgIH0KICNlbmRpZgogICAgIApAQCAtMTE0OCw5ICsxMTQ4LDEwIEBAIHB1YmxpYzoKICAg
ICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCkpOwogICAgICAgICByZXR1cm4g
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNl
dCgpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAgfQotICAgIHN0YXRpYyBBZGRyZXNzIGFkZHJl
c3NGb3IoaW50IG9wZXJhbmQpCisgICAgc3RhdGljIEFkZHJlc3MgYWRkcmVzc0ZvcihPcGVyYW5k
IG9wZXJhbmQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihzdGF0aWNfY2FzdDxW
aXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKKyAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzVG1w
KCkpOworICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3Rlcigp
KTsKICAgICB9CiAKICAgICBzdGF0aWMgQWRkcmVzcyB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlciwgR1BSUmVnIGJhc2VHUFIpCkBAIC0xMTYzLDkgKzExNjQsMTAgQEAgcHVi
bGljOgogICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSk7CiAgICAgICAg
IHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0
ZXIub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgVGFnT2Zmc2V0KTsKICAgICB9Ci0gICAg
c3RhdGljIEFkZHJlc3MgdGFnRm9yKGludCBvcGVyYW5kKQorICAgIHN0YXRpYyBBZGRyZXNzIHRh
Z0ZvcihPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAgICByZXR1cm4gdGFnRm9yKHN0YXRp
Y19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOworICAgICAgICBBU1NFUlQoIW9wZXJh
bmQuaXNUbXAoKSk7CisgICAgICAgIHJldHVybiB0YWdGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0
ZXIoKSk7CiAgICAgfQogCiAgICAgc3RhdGljIEFkZHJlc3MgcGF5bG9hZEZvcihWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcgYmFzZUdQUikKQEAgLTExNzgsMzAgKzExODAs
MzEgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSk7
CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0
dWFsUmVnaXN0ZXIub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgUGF5bG9hZE9mZnNldCk7
CiAgICAgfQotICAgIHN0YXRpYyBBZGRyZXNzIHBheWxvYWRGb3IoaW50IG9wZXJhbmQpCisgICAg
c3RhdGljIEFkZHJlc3MgcGF5bG9hZEZvcihPcGVyYW5kIG9wZXJhbmQpCiAgICAgewotICAgICAg
ICByZXR1cm4gcGF5bG9hZEZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQp
KTsKKyAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzVG1wKCkpOworICAgICAgICByZXR1cm4gcGF5
bG9hZEZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAKICAgICAvLyBBY2Nl
c3MgdG8gb3VyIGZpeGVkIGNhbGxlZSBDYWxsRnJhbWUuCi0gICAgc3RhdGljIEFkZHJlc3MgY2Fs
bGVlRnJhbWVTbG90KGludCBzbG90KQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lU2xv
dChWaXJ0dWFsUmVnaXN0ZXIgc2xvdCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChzbG90ID49IENh
bGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycyk7Ci0gICAgICAgIHJldHVybiBBZGRyZXNz
KHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogKHNsb3QgLSBDYWxsZXJG
cmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMpKTsKKyAgICAgICAgQVNTRVJUKHNsb3Qub2Zmc2V0
KCkgPj0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzKTsKKyAgICAgICAgcmV0dXJu
IEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiAoc2xvdCAt
IENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycykub2Zmc2V0KCkpOwogICAgIH0KIAog
ICAgIC8vIEFjY2VzcyB0byBvdXIgZml4ZWQgY2FsbGVlIENhbGxGcmFtZS4KICAgICBzdGF0aWMg
QWRkcmVzcyBjYWxsZWVBcmd1bWVudFNsb3QoaW50IGFyZ3VtZW50KQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGNhbGxlZUZyYW1lU2xvdCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVu
dCkub2Zmc2V0KCkpOworICAgICAgICByZXR1cm4gY2FsbGVlRnJhbWVTbG90KHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhhcmd1bWVudCkpOwogICAgIH0KIAotICAgIHN0
YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lVGFnU2xvdChpbnQgc2xvdCkKKyAgICBzdGF0aWMgQWRk
cmVzcyBjYWxsZWVGcmFtZVRhZ1Nsb3QoVmlydHVhbFJlZ2lzdGVyIHNsb3QpCiAgICAgewogICAg
ICAgICByZXR1cm4gY2FsbGVlRnJhbWVTbG90KHNsb3QpLndpdGhPZmZzZXQoVGFnT2Zmc2V0KTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVBheWxvYWRTbG90KGludCBz
bG90KQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoVmlydHVhbFJl
Z2lzdGVyIHNsb3QpCiAgICAgewogICAgICAgICByZXR1cm4gY2FsbGVlRnJhbWVTbG90KHNsb3Qp
LndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCk7CiAgICAgfQpAQCAtMTIxOCw3ICsxMjIxLDcgQEAg
cHVibGljOgogCiAgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVDYWxsZXJGcmFtZSgpCiAg
ICAgewotICAgICAgICByZXR1cm4gY2FsbGVlRnJhbWVTbG90KDApLndpdGhPZmZzZXQoQ2FsbEZy
YW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xv
dChWaXJ0dWFsUmVnaXN0ZXIoMCkpLndpdGhPZmZzZXQoQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9m
ZnNldCgpKTsKICAgICB9CiAKICAgICBzdGF0aWMgR1BSUmVnIHNlbGVjdFNjcmF0Y2hHUFIoUmVn
aXN0ZXJTZXQgcHJlc2VydmVkKQpAQCAtMTUyNyw3ICsxNTMwLDcgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgQVNTRVJUKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc1Zh
cmFyZ3MoKSk7CiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgcmV0
dXJuIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyk7CisgICAgICAgICAgICByZXR1cm4gQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXM7CiAgICAgICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnRSZWdpc3RlcjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlci5jcHAKaW5kZXggNWRmYjJmMTFkMzY1ZDYzYTEzZjY3MTYxNWI2YjY1MDc0
NmQ3NDIwZS4uNGQyZDNkYjY2YzU3NDhjYjU2MDM4MDAzMjEzZTg4ZjFhODVjZGJlMiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKQEAgLTYx
LDExICs2MSwxMSBAQCBDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1lU2h1ZmZsZXIoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IENhbGxGcmFtZVNodWZmbGVEYQogI2VuZGlmCiAKICAgICBBU1NF
UlQoIWRhdGEuY2FsbGVlLmlzSW5KU1N0YWNrKCkgfHwgZGF0YS5jYWxsZWUudmlydHVhbFJlZ2lz
dGVyKCkuaXNMb2NhbCgpKTsKLSAgICBhZGROZXcoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSksIGRhdGEuY2FsbGVlKTsKKyAgICBhZGROZXcoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlLCBkYXRhLmNhbGxlZSk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhdGEuYXJn
cy5zaXplKCk7ICsraSkgewogICAgICAgICBBU1NFUlQoIWRhdGEuYXJnc1tpXS5pc0luSlNTdGFj
aygpIHx8IGRhdGEuYXJnc1tpXS52aXJ0dWFsUmVnaXN0ZXIoKS5pc0xvY2FsKCkpOwotICAgICAg
ICBhZGROZXcodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSksIGRhdGEuYXJnc1tpXSk7Cisg
ICAgICAgIGFkZE5ldyh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSks
IGRhdGEuYXJnc1tpXSk7CiAgICAgfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAppbmRleCA2MjQzOWJkZjM0NDNi
ODdiZTk5OTYwMmZkOWMzZWJjOTZhZjZhOWY1Li5mZWZjYjkwMmNmMTRhOWZiMWZlNWNmZTU1NWRl
MmFhYzY0ZDVmNmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVT
aHVmZmxlci5oCkBAIC0xMDUsNyArMTA1LDcgQEAgcHVibGljOgogICAgICAgICBkYXRhLmNhbGxl
ZSA9IGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyBDYWxsRnJhbWVTbG90OjpjYWxsZWUgfSktPnJl
Y292ZXJ5KCk7CiAgICAgICAgIGRhdGEuYXJncy5yZXNpemUoYXJnQ291bnQoKSk7CiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJnQ291bnQoKTsgKytpKQotICAgICAgICAgICAgZGF0
YS5hcmdzW2ldID0gZ2V0TmV3KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKS0+cmVjb3Zl
cnkoKTsKKyAgICAgICAgICAgIGRhdGEuYXJnc1tpXSA9IGdldE5ldyh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkpLT5yZWNvdmVyeSgpOwogICAgICAgICBmb3IgKFJl
ZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQo
KSkgewogICAgICAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsgbV9uZXdS
ZWdpc3RlcnNbcmVnXSB9OwogICAgICAgICAgICAgaWYgKCFjYWNoZWRSZWNvdmVyeSkKQEAgLTEy
OCw3ICsxMjgsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQoaXNVbmRlY2lkZWQo
KSk7CiAgICAgICAgIEFTU0VSVCghZ2V0TmV3KGpzVmFsdWVSZWdzKSk7Ci0gICAgICAgIENhY2hl
ZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSB7IGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlKSkgfTsKKyAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292
ZXJ5IHsgZ2V0TmV3KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgfTsKICAgICAgICAgQVNTRVJUKGNh
Y2hlZFJlY292ZXJ5KTsKICAgICAgICAgYWRkTmV3KGpzVmFsdWVSZWdzLCBjYWNoZWRSZWNvdmVy
eS0+cmVjb3ZlcnkoKSk7CiAgICAgfQpAQCAtMTQxLDcgKzE0MSw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIGFzc3VtZUNhbGxlZUlzQ2VsbCgpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0g
ICAgICAgIENhY2hlZFJlY292ZXJ5JiBjYWxsZWVDYWNoZWRSZWNvdmVyeSA9ICpnZXROZXcoVmly
dHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOworICAgICAgICBDYWNoZWRSZWNv
dmVyeSYgY2FsbGVlQ2FjaGVkUmVjb3ZlcnkgPSAqZ2V0TmV3KENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSk7CiAgICAgICAgIHN3aXRjaCAoY2FsbGVlQ2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS50ZWNo
bmlxdWUoKSkgewogICAgICAgICBjYXNlIEluUGFpcjoKICAgICAgICAgICAgIHVwZGF0ZVJlY292
ZXJ5KApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXggNTY1NjY3NWMzNjVkOTllNjFkNDBkZDg2
M2U5YWUwNzc2YzJmMzVhZC4uZjZmMDliOTJhMGNjZjI2NzBlYTdmNmMwZWZiMGJkMTcxNTIwNzU1
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC0zMzEsMTYgKzMzMSwxNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBDb21waWxlT3BTdHJpY3RFcVR5cGUpOwogICAgICAgICBlbnVtIGNsYXNzIENvbXBp
bGVPcEVxVHlwZSB7IEVxLCBORXEgfTsKICAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93
KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BFcVR5cGUsIGludCBq
dW1wVGFyZ2V0KTsKLSAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShpbnQgc3Jj
KTsKKyAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIp
OwogICAgICAgICAKLSAgICAgICAgdm9pZCBlbWl0TG9hZERvdWJsZShpbnQgaW5kZXgsIEZQUmVn
aXN0ZXJJRCB2YWx1ZSk7Ci0gICAgICAgIHZvaWQgZW1pdExvYWRJbnQzMlRvRG91YmxlKGludCBp
bmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZERvdWJsZShW
aXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW1pdExv
YWRJbnQzMlRvRG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3RlcklEIHZhbHVlKTsKIAog
ICAgICAgICBlbnVtIFdyaXRlQmFycmllck1vZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVy
LCBTaG91bGRGaWx0ZXJCYXNlLCBTaG91bGRGaWx0ZXJWYWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFu
ZFZhbHVlIH07CiAgICAgICAgIC8vIHZhbHVlIHJlZ2lzdGVyIGluIHdyaXRlIGJhcnJpZXIgaXMg
dXNlZCBiZWZvcmUgYW55IHNjcmF0Y2ggcmVnaXN0ZXJzCiAgICAgICAgIC8vIHNvIG1heSBzYWZl
bHkgYmUgdGhlIHNhbWUgYXMgZWl0aGVyIG9mIHRoZSBzY3JhdGNoIHJlZ2lzdGVycy4KLSAgICAg
ICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwg
V3JpdGVCYXJyaWVyTW9kZSk7Ci0gICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwq
IG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CisgICAgICAgIHZvaWQg
ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihK
U0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwog
ICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcik7CiAKICAgICAgICAg
Ly8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5k
IHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgpAQCAtNDA0LDMyICs0MDQsMzIgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgZW51bSBGaW5hbE9iamVjdE1vZGUgeyBNYXlCZUZpbmFsLCBL
bm93bk5vdEZpbmFsIH07CiAKLSAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGlu
dCBzcmMsIEpTVmFsdWVSZWdzIGRzdCk7Ci0gICAgICAgIHZvaWQgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihpbnQgZHN0LCBKU1ZhbHVlUmVncyBzcmMpOworICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgSlNWYWx1ZVJlZ3MgZHN0KTsKKyAgICAg
ICAgdm9pZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIEpTVmFs
dWVSZWdzIHNyYyk7CiAKLSAgICAgICAgaW50MzJfdCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50
IHNyYyk7Ci0gICAgICAgIGRvdWJsZSBnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUoaW50IHNyYyk7
CisgICAgICAgIGludDMyX3QgZ2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBz
cmMpOworICAgICAgICBkb3VibGUgZ2V0T3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdp
c3RlciBzcmMpOwogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgYm9vbCBnZXRPcGVy
YW5kQ29uc3RhbnRJbnQoaW50IG9wMSwgaW50IG9wMiwgaW50JiBvcCwgaW50MzJfdCYgY29uc3Rh
bnQpOworICAgICAgICBib29sIGdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIg
b3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBpbnQmIG9wLCBpbnQzMl90JiBjb25zdGFudCk7CiAK
LSAgICAgICAgdm9pZCBlbWl0TG9hZFRhZyhpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnKTsKLSAg
ICAgICAgdm9pZCBlbWl0TG9hZFBheWxvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQp
OworICAgICAgICB2b2lkIGVtaXRMb2FkVGFnKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0
YWcpOworICAgICAgICB2b2lkIGVtaXRMb2FkUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lz
dGVySUQgcGF5bG9hZCk7CiAKICAgICAgICAgdm9pZCBlbWl0TG9hZChjb25zdCBKU1ZhbHVlJiB2
LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKLSAgICAgICAgdm9pZCBlbWl0
TG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lz
dGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZDIo
aW50IGluZGV4MSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBpbnQgaW5k
ZXgyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpOworICAgICAgICB2b2lk
IGVtaXRMb2FkKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5
bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICB2b2lk
IGVtaXRMb2FkMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBw
YXlsb2FkMSwgVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5
bG9hZDIpOwogCi0gICAgICAgIHZvaWQgZW1pdFN0b3JlKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0
YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0
ZXIpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZShpbnQgaW5kZXgsIGNvbnN0IEpTVmFsdWUgY29u
c3RhbnQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9p
ZCBlbWl0U3RvcmVJbnQzMihpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRl
eElzSW50MzIgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoaW50IGluZGV4
LCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7Ci0gICAg
ICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9v
bCBpbmRleElzQ2VsbCA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVCb29sKGludCBp
bmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29sID0gZmFsc2UpOwotICAg
ICAgICB2b2lkIGVtaXRTdG9yZURvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7
CisgICAgICAgIHZvaWQgZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcs
IFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIp
OworICAgICAgICB2b2lkIGVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIsIGNvbnN0IEpTVmFsdWUg
Y29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAg
dm9pZCBlbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwg
Ym9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlSW50MzIo
VmlydHVhbFJlZ2lzdGVyLCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIg
PSBmYWxzZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIsIFJl
Z2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCA9IGZhbHNlKTsKKyAgICAgICAgdm9p
ZCBlbWl0U3RvcmVCb29sKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29s
IGluZGV4SXNCb29sID0gZmFsc2UpOworICAgICAgICB2b2lkIGVtaXRTdG9yZURvdWJsZShWaXJ0
dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CiAKLSAgICAgICAgdm9pZCBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoaW50IHZpcnR1YWxSZWdpc3RlckluZGV4KTsKLSAgICAgICAg
dm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaW50IHZpcnR1YWxSZWdpc3RlckluZGV4
LCBSZWdpc3RlcklEIHRhZyk7CisgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcpOwogCiAgICAgICAgIHZvaWQg
Y29tcGlsZUdldEJ5SWRIb3RQYXRoKGNvbnN0IElkZW50aWZpZXIqKTsKIApAQCAtNDM4LDE3ICs0
MzgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEJpbmFyeURvdWJsZU9w
KGNvbnN0IEluc3RydWN0aW9uICosIE9wZXJhbmRUeXBlcywgSnVtcExpc3QmIG5vdEludDMyT3Ax
LCBKdW1wTGlzdCYgbm90SW50MzJPcDIsIGJvb2wgb3AxSXNJblJlZ2lzdGVycyA9IHRydWUsIGJv
b2wgb3AySXNJblJlZ2lzdGVycyA9IHRydWUpOwogCiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0
KQotICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJ
RCBkc3QpOwogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpOwotICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGludCBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIGludCBzcmMyLCBSZWdpc3RlcklEIGRz
dDIpOwogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3Rl
ciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxSZWdpc3RlciBzcmMyLCBSZWdpc3RlcklE
IGRzdDIpOwotICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgUmVn
aXN0ZXJJRCBmcm9tID0gcmVnVDApOwogICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tID0gcmVnVDApOwotICAgICAg
ICB2b2lkIGVtaXRTdG9yZUNlbGwoaW50IGRzdCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIC8q
IG9ubHkgdXNlZCBpbiBKU1ZhbHVlMzJfNjQgKi8gPSBmYWxzZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHBheWxvYWQpOwotICAgICAgICB9Ci0g
ICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklE
IHBheWxvYWQpCisgICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgZHN0
LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgLyogb25seSB1c2VkIGluIEpTVmFsdWUzMl82NCAq
LyA9IGZhbHNlKQogICAgICAgICB7CiAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcGF5bG9hZCk7CiAgICAgICAgIH0KQEAgLTQ1NiwyOSArNDQ5LDI5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBKdW1wIGVtaXRKdW1wSWZCb3RoSlNDZWxscyhSZWdpc3RlcklELCBS
ZWdpc3RlcklELCBSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZK
U0NlbGwoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKFJlZ2lzdGVySUQpOwotICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChSZWdpc3RlcklELCBpbnQgVlJlZyk7CisgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKFJlZ2lzdGVySUQsIFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEp1bXAgZW1p
dEp1bXBJZk5vdEludChSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEIHNjcmF0Y2gp
OwogICAgICAgICBQYXRjaGFibGVKdW1wIGVtaXRQYXRjaGFibGVKdW1wSWZOb3RJbnQoUmVnaXN0
ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KFJlZ2lzdGVySUQp
OwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdE51bWJlcihSZWdpc3RlcklEKTsK
ICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoUmVnaXN0ZXJJRCwgUmVnaXN0
ZXJJRCwgUmVnaXN0ZXJJRCBzY3JhdGNoKTsKIAotICAgICAgICB2b2lkIGNvbXBpbGVHZXRCeUlk
SG90UGF0aChpbnQgYmFzZVZSZWcsIGNvbnN0IElkZW50aWZpZXIqKTsKKyAgICAgICAgdm9pZCBj
b21waWxlR2V0QnlJZEhvdFBhdGgoVmlydHVhbFJlZ2lzdGVyIGJhc2VSZWcsIGNvbnN0IElkZW50
aWZpZXIqKTsKIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJ
bnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29t
cGFyZUFuZEp1bXBJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRp
b25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmly
dHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBS
ZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
ICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlv
bmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoaW50
IGRzdCwgaW50IG9wMSwgaW50IG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZv
aWQgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxS
ZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24pOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVV
bnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsK
LSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKGludCBvcDEsIGlu
dCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZv
aWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBW
aXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24p
OwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90
IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoaW50
IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBE
b3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2Jh
bE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBv
cDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0
aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICAKICAgICAgICAgdm9pZCBhc3NlcnRTdGFj
a1BvaW50ZXJPZmZzZXQoKTsKIApAQCAtNjg2LDggKzY3OSw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4
cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0
aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHZvaWQgZW1p
dFJlc29sdmVDbG9zdXJlKGludCBkc3QsIGludCBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwotICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVj
dHVyZUNoZWNrKGludCBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CisgICAgICAg
IHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdp
c3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgp
OworICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BS
UmVnKTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVl
Kiogb3BlcmFuZCwgR1BSUmVnKTsKQEAgLTY5NSwyMCArNjg4LDIwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBv
cGVyYW5kLCBHUFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9hZCk7CiAgICAgICAgIHZvaWQgZW1pdEdl
dFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyB0YWcsIEdQUlJlZyBwYXls
b2FkKTsKICNlbmRpZgotICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKGludCBzY29wZSwg
dWludHB0cl90IG9wZXJhbmQpOworICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1
YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXRO
b3RpZnlXcml0ZShXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRl
KEdQUlJlZyBwb2ludGVyVG9TZXQpOwotICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJs
ZShKU1ZhbHVlKiBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKLSAgICAgICAg
dm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3Bl
cmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwotICAgICAgICB2b2lkIGVtaXRQdXRD
bG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hw
b2ludFNldCopOworICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBv
cGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKKyAgICAgICAg
dm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3Bl
cmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOworICAgICAgICB2
b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9w
ZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAg
IHZvaWQgZW1pdEluaXRSZWdpc3RlcihpbnQgZHN0KTsKKyAgICAgICAgdm9pZCBlbWl0SW5pdFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7CiAKLSAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxs
RnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkpOworICAgICAgICB2b2lkIGVt
aXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rl
cik7CiAKLSAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoaW50IHNyYyk7Ci0gICAg
ICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYyk7Ci0gICAgICAgIGJvb2wgaXNP
cGVyYW5kQ29uc3RhbnRDaGFyKGludCBzcmMpOworICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50
T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50
SW50KFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFy
KFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBl
bmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblBy
b2ZpbGVkRnVuY3Rpb24+CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRo
SUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRGdW5jdGlvbiwgTm9u
UHJvZmlsZWRGdW5jdGlvbik7CkBAIC03MzUsNyArNzI4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNTZXQoKSk7CiAgICAgICAgICAgICArK2l0
ZXI7CiAgICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgaW50IHZpcnR1YWxSZWdpc3RlckluZGV4KTsK
KyAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgdm9pZCBsaW5rQWxsU2xv
d0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywK
ICAgICAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKIApAQCAtNzU1LDEzICs3NDgsMTMgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tBbmRTbG93UGF0aFJldHVyblR5cGUoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPik7CiAjZW5kaWYKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdp
dGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4pOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+LCBpbnQpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBpbnQpOworICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3Vs
dFdpdGhQcm9maWxlKE1ldGFkYXRhJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVu
YWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3Bl
cmF0aW9uLCBpbnQgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb24o
T3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4g
YXJncykKICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlw
ZT4oYXJncy4uLik7CiAgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwpAQCAtODA1LDcgKzc5OCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRh
LCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6
OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0
YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgaW50IHJlc3VsdCwgQXJn
cy4uLiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1l
dGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwg
QXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVy
YXRpb25UeXBlPihhcmdzLi4uKTsKICAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRp
b24sIHJlc3VsdCk7CkBAIC04NjUsNyArODU4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYK
IAogI2lmbmRlZiBOREVCVUcKLSAgICAgICAgdm9pZCBwcmludEJ5dGVjb2RlT3BlcmFuZFR5cGVz
KGludCBzcmMxLCBpbnQgc3JjMik7CisgICAgICAgIHZvaWQgcHJpbnRCeXRlY29kZU9wZXJhbmRU
eXBlcyhWaXJ0dWFsUmVnaXN0ZXIgc3JjMSwgVmlydHVhbFJlZ2lzdGVyIHNyYzIpOwogI2VuZGlm
CiAKICNpZiBFTkFCTEUoU0FNUExJTkdfRkxBR1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRBcml0aG1ldGljLmNwcAppbmRleCAzNDU4NzQ0ZmJjZGQ1M2FjZjlhNDMzMjhiYzQ5NGIw
ZmVkY2I4OTNmLi4zYTMyYzMyNjE4OWZhYjE5N2Q3Y2Y5ZjkxZDVmNmI0YjMxMDIwMmM0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKQEAgLTE1OCw4ICsx
NTgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qYmVsb3dlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KHJlZ1QwKTsKQEAgLTE3MiwxMyArMTcyLDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5v
ZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBv
cDIgPSBieXRlY29kZS5tX3JoczsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGlu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBjb25kaXRpb24pOwogfQogCi12b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcEltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNpZ25l
ZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewogICAgIC8vIFdlIGdl
bmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBmYXN0IHBh
dGg6CiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGNvbnN0YW50IGludCBpbW1lZGlhdGUKQEAg
LTIzMCwxMyArMjMwLDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJl
bGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgp
OwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5
dGVjb2RlLm1fcmhzOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5k
SnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwgY29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQg
dGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2Nv
bXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24p
CiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKQEAgLTI1NiwxMyArMjU2LDEzIEBAIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhz
Lm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMSA9IGJ5dGVjb2RlLm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29k
ZS5tX3JoczsKICAgICBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoZHN0LCBvcDEsIG9wMiwgY29u
ZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChpbnQgZHN0
LCBpbnQgb3AxLCBpbnQgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQg
SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVh
bFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbiBj
b25kaXRpb24pCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKQEAgLTI4NCwxMyArMjg0LDEz
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBT
bG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRp
dGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7
Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0
ZWNvZGUubV9yaHM7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJ
bXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3Bl
cmF0aW9uLCBpbnZlcnQsIGl0ZXIpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3dJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3Ry
dWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFU
SU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3Rl
ciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3Ry
dWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFU
SU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7CiAKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2lu
ZyBjYXNlcyBpbiB0aGUgc2xvdyBwYXRoOgpAQCAtMzg3LDcgKzM4Nyw3IEBAIHZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFy
Z2V0LCBzaXplX3QKIHZvaWQgSklUOjplbWl0X29wX2luYyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSW5jPigpOwotICAgIGludCBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdC5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwogICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CkBAIC0zOTksNyArMzk5LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKLSAg
ICBpbnQgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDApOwpAQCAtNDE1LDkgKzQxNSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQo
KTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9y
aHM7CiAKICAgICAvLyBNYWtlIHN1cmUgcmVnaXN0ZXJzIGFyZSBjb3JyZWN0IGZvciB4ODYgSURJ
ViBpbnN0cnVjdGlvbnMuCiAgICAgQVNTRVJUKHJlZ1QwID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsK
QEAgLTQ5MSw5ICs0OTEsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU25pcHBl
dEdlbmVyYXRvcj4KIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxpbmdQb2xpY3kgcHJvZmlsaW5nUG9s
aWN5KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigp
OwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3Ax
ID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhz
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJl
Z2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBK
U1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKQEAgLTUzOCw4ICs1Mzgs
OCBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsaQogdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCk7Ci0gICAgaW50IHJlc3VsdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX29wZXJh
bmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDApOwpAQCAtNTk5LDkgKzU5OSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6
OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgSklUUmlnaHRTaGlmdEdlbmVyYXRvcjo6U2hpZnRUeXBlIHNuaXBwZXRTaGlmdFR5cGUp
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0g
ICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBi
eXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAtNjc0LDggKzY3NCw4IEBA
IHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9m
aWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOCiB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5h
cnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIE5vblByb2ZpbGVk
RnVuY3Rpb24gbm9uUHJvZmlsZWRGdW5jdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wZXJhbmQgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1l
IHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgpAQCAtNzI0LDkgKzcyNCw5IEBAIHRlbXBsYXRlIDx0
eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9u
LCB0eXBlbmFtZSBOCiB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDPEdl
bmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
UHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9uIG5v
blByb2ZpbGVkRnVuY3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OwotICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0g
Ynl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwpA
QCAtNzk5LDcgKzc5OSw3IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJ
QzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjCiAgICAgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29k
ZS5tX2RzdDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QxKTsKQEAgLTg0NSw5ICs4NDUsOSBAQCB2b2lkIEpJVDo6ZW1pdE1h
dGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1
Y3Rpb24qCiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgp
OwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0g
ICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBi
eXRlY29kZS5tX2xocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwpAQCAtOTA2LDkgKzkwNiw5IEBA
IHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0
aElDLCBjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0g
ICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0
ZWNvZGUubV9saHM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwog
CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2Fs
bC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCmluZGV4IGMzZjhh
YTBjN2ZhZjRlYWQ0MzQ2N2Q1NDI3MjZhZThhYzkyNTg3ZGYuLmIyYmZjZTYzMzdkOWJlMDJkNjFm
Mzg5NWNlNWVjYTNhMGQ3ODMyMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNw
cApAQCAtNTEsNyArNTEsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0
UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7CiAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAg
LTY2LDcgKzY2LDcgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUs
IENhbGxMaW5rSW5mbyopCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PGlu
dD4oYnl0ZWNvZGUubV9hcmd2KTsKIAogICAgIGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAm
JiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihyZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlz
KDApLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1Ro
aXMoMCkpLCByZWdUMCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CiAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZWdUMCk7CiAgICAgICAgIHN0b3JlMzIocmVnVDAsIG1ldGFkYXRhLm1fY2FsbExp
bmtJbmZvLm1fYXJyYXlQcm9maWxlLmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CkBA
IC04NSw5ICs4NSw5IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAsIHZvaWQ+CiBKSVQ6OmNvbXBpbGVT
ZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvKQogewotICAg
IGludCB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQg
YXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHMub2Zmc2V0KCk7Ci0gICAgaW50IGZpcnN0
RnJlZVJlZ2lzdGVyID0gYnl0ZWNvZGUubV9maXJzdEZyZWUub2Zmc2V0KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOworICAgIFZpcnR1YWxS
ZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKKyAgICBpbnQgZmlyc3RG
cmVlUmVnaXN0ZXIgPSBieXRlY29kZS5tX2ZpcnN0RnJlZS5vZmZzZXQoKTsgLy8gRklYTUU6IFdo
eSBpcyB0aGlzIGEgdmlydHVhbCByZWdpc3RlciBpZiB3ZSBuZXZlciB1c2UgaXQgYXMgb25lLi4u
CiAgICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0ID0gYnl0ZWNvZGUubV9maXJzdFZhckFyZzsKIAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMSk7CkBAIC0xODksNyAr
MTg5LDcgQEAgYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRl
Y29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ24KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgYnl0ZWNvZGUubV9hcmdjOyArK2kpIHsKICAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tp
XSA9CiAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCi0gICAg
ICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkgLSBieXRlY29kZS5tX2Fy
Z3YsCisgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGkpIC0gYnl0ZWNvZGUubV9hcmd2LAogICAgICAgICAgICAgICAgIERhdGFGb3JtYXRKUyk7
CiAgICAgfQogICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9CkBAIC0yMDYsNyArMjA2LDcgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNp
Z25lZCBjYWxsTGlua0luZm9JbmQKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNv
ZGVJRDsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGlu
dCBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7CiAKICAgICAvKiBDYWxsZXIgYWx3YXlzOgog
ICAgICAgICAtIFVwZGF0ZXMgY2FsbEZyYW1lUmVnaXN0ZXIgdG8gY2FsbGVlIGNhbGxGcmFtZS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCmluZGV4IGI3ZDBj
YTIzNThiZTUyNTAxOGEzZjRlOTYxNmQ5Y2I4NDhmZmY1MjEuLmUwN2E4MzNkNGM4NTNiOWM3YTAy
ZGU4Yjc0NjAxZGYzMDY2YmFlMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklURXhjZXB0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRF
eGNlcHRpb25zLmNwcApAQCAtNTAsNyArNTAsNyBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0mIHZt
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBpZiAoT3B0aW9uczo6YnJlYWtPblRocm93KCkp
IHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0b3BKU0NhbGxGcmFtZS0+Y29kZUJs
b2NrKCk7CiAgICAgICAgIGRhdGFMb2coIkluIGNhbGwgZnJhbWUgIiwgUmF3UG9pbnRlcih0b3BK
U0NhbGxGcmFtZSksICIgZm9yIGNvZGUgYmxvY2sgIiwgY29kZUJsb2NrLCAiXG4iKTsKLSAgICAg
ICAgQ1JBU0goKTsKKyAgICAgICAgV1RGQnJlYWtwb2ludFRyYXAoKTsKICAgICB9CiAgICAgCiAg
ICAgaWYgKGF1dG8qIHNoYWRvd0NoaWNrZW4gPSB2bS5zaGFkb3dDaGlja2VuKCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCmluZGV4IGZjZThiYjc0NzY2Mzc4Mzc5OGM5OTc1
NmU4ZGY3Zjg5ZTA5YmI4NWIuLjljMTE3MzQzNDBjMzY0NzIxYjM1OGI5NTE2ZjY4NzA5MzM0YzVh
MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCkBAIC00OCwxOSArNDgs
MjAgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgSklUOjplbWl0TG9h
ZEZvckFycmF5TW9kZShjb25zdCBJbnN0cnVjdGkKICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0
YW50RG91YmxlKGludCBzcmMpCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25z
dGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBtX2NvZGVCbG9j
ay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KS5pc0RvdWJsZSgpOworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50
T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6
OmdldENvbnN0YW50T3BlcmFuZChpbnQgc3JjKQorQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6
Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgQVNTRVJUKG1f
Y29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpKTsKKyAgICBBU1NFUlQoc3Jj
LmlzQ29uc3RhbnQoKSk7CiAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMp
OwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFk
ZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0
ZXIgZW50cnkpCiB7CisgICAgQVNTRVJUKGVudHJ5LmlzSGVhZGVyKCkpOwogI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0
YWdGb3IoZW50cnkpKTsKICAgICBzdG9yZTMyKGZyb20sIHBheWxvYWRGb3IoZW50cnkpKTsKQEAg
LTE0Myw3ICsxNDQsNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6
YXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aQogICAgIHJldHVybiBjYWxs
OwogfQogCi1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgaW50IGRzdCkKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFs
UmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAt
MTU1LDcgKzE1Niw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjph
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlCiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIE1ldGFkYXRhPgotQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6
OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUo
TWV0YWRhdGEmIG1ldGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1
bmN0aW9uLCBpbnQgZHN0KQorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6
OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUo
TWV0YWRhdGEmIG1ldGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1
bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKQEAgLTE2Nyw5ICsxNjgsOSBAQCBBTFdBWVNf
SU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZQogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyLCBpbnQgdlJlZykKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93
Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZp
cnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdElt
bWVkaWF0ZSh2UmVnKSkKKyAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRl
KHJlZykpCiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIH0KIApAQCAtMjg0LDkgKzI4NSw5
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnNhbXBsZUNvZGVCbG9jayhDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKICNlbmRpZgogI2VuZGlmCiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3Bl
cmFuZENvbnN0YW50Q2hhcihpbnQgc3JjKQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVy
YW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIG1fY29k
ZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXND
ZWxsKCkpLT5sZW5ndGgoKSA9PSAxOworICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwogfQogCiBpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUpCkBA
IC0zNjMsMjYgKzM2NCwyNiBAQCBpbmxpbmUgSklUQXJyYXlNb2RlIEpJVDo6Y2hvb3NlQXJyYXlN
b2RlKEFycmF5UHJvZmlsZSogcHJvZmlsZSkKICAgICByZXR1cm4gSklUQ29udGlndW91czsKIH0K
IAotQUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KGludCBz
cmMpCitBTFdBWVNfSU5MSU5FIGludDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmly
dHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyku
YXNJbnQzMigpOwogfQogCi1BTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25z
dGFudERvdWJsZShpbnQgc3JjKQorQUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVyYW5k
Q29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdEluaXRSZWdpc3RlcihpbnQgZHN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIHN0b3JlVHJ1c3RlZFZh
bHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0KSk7CiB9CiAKICNpZiBVU0UoSlNWQUxV
RTMyXzY0KQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkVGFnKGludCBpbmRleCwgUmVnaXN0
ZXJJRCB0YWcpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkVGFnKFZpcnR1YWxSZWdpc3RlciBy
ZWcsIFJlZ2lzdGVySUQgdGFnKQogewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJl
Z2lzdGVySW5kZXgoaW5kZXgpKSB7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKICAgICAg
ICAgbW92ZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQoaW5kZXgpLnRhZygpKSwgdGFnKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM5MCw5ICszOTEsOSBAQCBpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRMb2FkVGFnKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcpCiAgICAgbG9hZDMyKHRhZ0Zv
cihpbmRleCksIHRhZyk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRQYXlsb2FkKGlu
dCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFBh
eWxvYWQoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkKQogewotICAgIGlm
IChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7CisgICAgaWYg
KHJlZy5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgbW92ZShJbW0zMihnZXRDb25zdGFudE9wZXJh
bmQoaW5kZXgpLnBheWxvYWQoKSksIHBheWxvYWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtNDA2LDEzNiArNDA3LDEzMyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKGNvbnN0IEpT
VmFsdWUmIHYsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQpCiAgICAgbW92ZShJ
bW0zMih2LnRhZygpKSwgdGFnKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBKU1ZhbHVlUmVncyBkc3QpCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0R2V0KFZpcnR1YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVSZWdzIGRzdCkK
IHsKICAgICBlbWl0TG9hZChzcmMsIGRzdC50YWdHUFIoKSwgZHN0LnBheWxvYWRHUFIoKSk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRz
dCwgSlNWYWx1ZVJlZ3MgZnJvbSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkKIHsKICAg
ICBlbWl0U3RvcmUoZHN0LCBmcm9tLnRhZ0dQUigpLCBmcm9tLnBheWxvYWRHUFIoKSk7CiB9CiAK
LWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVn
aXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRM
b2FkKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxv
YWQsIFJlZ2lzdGVySUQgYmFzZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh0YWcgIT0gcGF5bG9h
ZCk7CiAKICAgICBpZiAoYmFzZSA9PSBjYWxsRnJhbWVSZWdpc3RlcikgewogICAgICAgICBSRUxF
QVNFX0FTU0VSVChwYXlsb2FkICE9IGJhc2UpOwotICAgICAgICBlbWl0TG9hZFBheWxvYWQoaW5k
ZXgsIHBheWxvYWQpOwotICAgICAgICBlbWl0TG9hZFRhZyhpbmRleCwgdGFnKTsKKyAgICAgICAg
ZW1pdExvYWRQYXlsb2FkKHJlZywgcGF5bG9hZCk7CisgICAgICAgIGVtaXRMb2FkVGFnKHJlZywg
dGFnKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFZpcnR1YWxSZWdpc3RlciB0YXJn
ZXQgeyBpbmRleCB9OwogICAgIGlmIChwYXlsb2FkID09IGJhc2UpIHsgLy8gYXZvaWQgc3RvbXBp
bmcgYmFzZQotICAgICAgICBsb2FkMzIodGFnRm9yKHRhcmdldCwgYmFzZSksIHRhZyk7Ci0gICAg
ICAgIGxvYWQzMihwYXlsb2FkRm9yKHRhcmdldCwgYmFzZSksIHBheWxvYWQpOworICAgICAgICBs
b2FkMzIodGFnRm9yKHJlZywgYmFzZSksIHRhZyk7CisgICAgICAgIGxvYWQzMihwYXlsb2FkRm9y
KHJlZywgYmFzZSksIHBheWxvYWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbG9h
ZDMyKHBheWxvYWRGb3IodGFyZ2V0LCBiYXNlKSwgcGF5bG9hZCk7Ci0gICAgbG9hZDMyKHRhZ0Zv
cih0YXJnZXQsIGJhc2UpLCB0YWcpOworICAgIGxvYWQzMihwYXlsb2FkRm9yKHJlZywgYmFzZSks
IHBheWxvYWQpOworICAgIGxvYWQzMih0YWdGb3IocmVnLCBiYXNlKSwgdGFnKTsKIH0KIAotaW5s
aW5lIHZvaWQgSklUOjplbWl0TG9hZDIoaW50IGluZGV4MSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdp
c3RlcklEIHBheWxvYWQxLCBpbnQgaW5kZXgyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQg
cGF5bG9hZDIpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkMihWaXJ0dWFsUmVnaXN0ZXIgcmVn
MSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBWaXJ0dWFsUmVnaXN0ZXIg
cmVnMiwgUmVnaXN0ZXJJRCB0YWcyLCBSZWdpc3RlcklEIHBheWxvYWQyKQogewotICAgIGVtaXRM
b2FkKGluZGV4MiwgdGFnMiwgcGF5bG9hZDIpOwotICAgIGVtaXRMb2FkKGluZGV4MSwgdGFnMSwg
cGF5bG9hZDEpOworICAgIGVtaXRMb2FkKHJlZzIsIHRhZzIsIHBheWxvYWQyKTsKKyAgICBlbWl0
TG9hZChyZWcxLCB0YWcxLCBwYXlsb2FkMSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExv
YWREb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkK
IHsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkg
ewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2Rl
QmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpOworICAgIGlmIChyZWcuaXNDb25zdGFudCgp
KSB7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2Nv
ZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRydXN0
ZWRJbW1QdHIoJmluQ29uc3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQotICAgICAgICBs
b2FkRG91YmxlKGFkZHJlc3NGb3IoaW5kZXgpLCB2YWx1ZSk7CisgICAgICAgIGxvYWREb3VibGUo
YWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJ
bnQzMlRvRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQg
SklUOjplbWl0TG9hZEludDMyVG9Eb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3Rl
cklEIHZhbHVlKQogewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5k
ZXgoaW5kZXgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBv
b2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCk7CisgICAgaWYgKHJlZy5p
c0NvbnN0YW50KCkpIHsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50
UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGNoYXIq
IGJ5dGVQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmluQ29uc3RhbnRQb29sKTsK
ICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoQWJzb2x1dGVBZGRyZXNzKGJ5dGVQb2ludGVy
ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgdmFsdWUpOwog
ICAgIH0gZWxzZQotICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShwYXlsb2FkRm9yKGluZGV4
KSwgdmFsdWUpOworICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShwYXlsb2FkRm9yKHJlZyks
IHZhbHVlKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoaW50IGluZGV4LCBSZWdp
c3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCitpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZywg
UmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCiB7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHRhcmdldCB7IGluZGV4IH07Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHRh
cmdldCwgYmFzZSkpOwotICAgIHN0b3JlMzIodGFnLCB0YWdGb3IodGFyZ2V0LCBiYXNlKSk7Cisg
ICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZywgYmFzZSkpOworICAgIHN0b3JlMzIo
dGFnLCB0YWdGb3IocmVnLCBiYXNlKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3Jl
SW50MzIoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQor
aW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdp
c3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQogewotICAgIHN0b3JlMzIocGF5bG9h
ZCwgcGF5bG9hZEZvcihpbmRleCkpOworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihy
ZWcpKTsKICAgICBpZiAoIWluZGV4SXNJbnQzMikKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IoaW5kZXgpKTsKKyAgICAgICAgc3RvcmUzMihU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IocmVnKSk7CiB9CiAKLWlubGlu
ZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBUcnVzdGVkSW1tMzIgcGF5bG9h
ZCwgYm9vbCBpbmRleElzSW50MzIpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMyKFZp
cnR1YWxSZWdpc3RlciByZWcsIFRydXN0ZWRJbW0zMiBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQz
MikKIHsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IoaW5kZXgpKTsKKyAgICBzdG9y
ZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVnKSk7CiAgICAgaWYgKCFpbmRleElzSW50MzIpCi0g
ICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKGlu
ZGV4KSk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwg
dGFnRm9yKHJlZykpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUNlbGwoaW50IGlu
ZGV4LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0NlbGwpCitpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRTdG9yZUNlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2Fk
LCBib29sIGluZGV4SXNDZWxsKQogewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihp
bmRleCkpOworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcpKTsKICAgICBpZiAo
IWluZGV4SXNDZWxsKQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSwgdGFnRm9yKGluZGV4KSk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkNlbGxUYWcpLCB0YWdGb3IocmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0
b3JlQm9vbChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQm9vbCkK
K2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlQm9vbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdp
c3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0Jvb2wpCiB7Ci0gICAgc3RvcmUzMihwYXlsb2Fk
LCBwYXlsb2FkRm9yKGluZGV4KSk7CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJl
ZykpOwogICAgIGlmICghaW5kZXhJc0Jvb2wpCi0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkJvb2xlYW5UYWcpLCB0YWdGb3IoaW5kZXgpKTsKKyAgICAgICAgc3RvcmUzMihU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksIHRhZ0ZvcihyZWcpKTsKIH0KIAotaW5s
aW5lIHZvaWQgSklUOjplbWl0U3RvcmVEb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFs
dWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVn
LCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0gICAgc3RvcmVEb3VibGUodmFsdWUsIGFkZHJlc3NG
b3IoaW5kZXgpKTsKKyAgICBzdG9yZURvdWJsZSh2YWx1ZSwgYWRkcmVzc0ZvcihyZWcpKTsKIH0K
IAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoaW50IGluZGV4LCBjb25zdCBKU1ZhbHVlIGNv
bnN0YW50LCBSZWdpc3RlcklEIGJhc2UpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0
dWFsUmVnaXN0ZXIgcmVnLCBjb25zdCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdpc3RlcklEIGJhc2Up
CiB7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRhcmdldCB7IGluZGV4IH07Ci0gICAgc3RvcmUzMihJ
bW0zMihjb25zdGFudC5wYXlsb2FkKCkpLCBwYXlsb2FkRm9yKHRhcmdldCwgYmFzZSkpOwotICAg
IHN0b3JlMzIoSW1tMzIoY29uc3RhbnQudGFnKCkpLCB0YWdGb3IodGFyZ2V0LCBiYXNlKSk7Cisg
ICAgc3RvcmUzMihJbW0zMihjb25zdGFudC5wYXlsb2FkKCkpLCBwYXlsb2FkRm9yKHJlZywgYmFz
ZSkpOworICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQudGFnKCkpLCB0YWdGb3IocmVnLCBiYXNl
KSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGlu
dCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7CiAgICAgaWYgKCFtX2NvZGVCbG9j
ay0+aXNLbm93bk5vdEltbWVkaWF0ZSh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpIHsKLSAgICAgICAg
aWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleCh2aXJ0dWFsUmVnaXN0ZXJJ
bmRleCkpCisgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZW1p
dEp1bXBJZk5vdEpTQ2VsbCh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWcpKTsKICAgICB9CiB9CiAKLWlubGluZSB2
b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGludCB2aXJ0dWFsUmVnaXN0ZXJJ
bmRleCwgUmVnaXN0ZXJJRCB0YWcpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKIHsKICAgICBp
ZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHZpcnR1YWxSZWdpc3RlckluZGV4
KSkgewotICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHZp
cnR1YWxSZWdpc3RlckluZGV4KSkKKyAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAg
ICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwodGFnKSk7CiAgICAgfQogfQogCi1BTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChpbnQgc3JjKQorQUxXQVlTX0lOTElO
RSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsK
LSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykgJiYg
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworICAgIHJldHVybiBzcmMuaXNDb25z
dGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKIH0KIAotQUxXQVlT
X0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KGludCBvcDEsIGludCBvcDIs
IGludCYgb3AsIGludDMyX3QmIGNvbnN0YW50KQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0
T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBv
cDIsIGludCYgb3AsIGludDMyX3QmIGNvbnN0YW50KQogewogICAgIGlmIChpc09wZXJhbmRDb25z
dGFudEludChvcDEpKSB7CiAgICAgICAgIGNvbnN0YW50ID0gZ2V0Q29uc3RhbnRPcGVyYW5kKG9w
MSkuYXNJbnQzMigpOwpAQCAtNTU1LDExICs1NTMsMTEgQEAgQUxXQVlTX0lOTElORSBib29sIEpJ
VDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KGludCBvcDEsIGludCBvcDIsIGludCYgb3AsIGludDMy
X3QKICNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKIC8vIGdldCBhcmcgcHV0cyBhbiBhcmcg
ZnJvbSB0aGUgU0YgcmVnaXN0ZXIgYXJyYXkgaW50byBhIGgvdyByZWdpc3RlcgotQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBSZWdpc3RlcklE
IGRzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmly
dHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNv
ZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90
L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAK
LSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpIHsKKyAg
ICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2Rl
QmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkK
ICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBk
c3QpOwpAQCAtNTcxLDQ3ICs1NjksMzIgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBSZWdpc3RlcklEIGRzdCkKICAgICBsb2FkNjQoYWRk
cmVzc0ZvcihzcmMpLCBkc3QpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGludCBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgSlNW
YWx1ZVJlZ3MgZHN0KQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBkc3QucGF5
bG9hZEdQUigpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCkKLXsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYy5vZmZzZXQoKSwgZHN0KTsKLX0KLQotQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW50IHNyYzEsIFJlZ2lzdGVySUQg
ZHN0MSwgaW50IHNyYzIsIFJlZ2lzdGVySUQgZHN0MikKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklE
IGRzdDEsIFZpcnR1YWxSZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpCiB7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBkc3QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYzIsIGRzdDIpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhWaXJ0dWFsUmVnaXN0ZXIgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBWaXJ0
dWFsUmVnaXN0ZXIgc3JjMiwgUmVnaXN0ZXJJRCBkc3QyKQotewotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKHNyYzEub2Zmc2V0KCksIGRzdDEsIHNyYzIub2Zmc2V0KCksIGRzdDIpOwotfQot
Ci1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChpbnQgc3JjKQor
QUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lz
dGVyIHNyYykKIHsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3Rlcklu
ZGV4KHNyYykgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworICAgIHJldHVy
biBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsK
IH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnQg
ZHN0LCBSZWdpc3RlcklEIGZyb20pCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKIHsKICAg
ICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkK
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkKIHsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgZnJvbS5wYXlsb2FkR1BSKCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQg
ZnJvbSkKLXsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdC5vZmZzZXQoKSwgZnJvbSk7
Ci19Ci0KIEFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZkJvdGhKU0NlbGxz
KFJlZ2lzdGVySUQgcmVnMSwgUmVnaXN0ZXJJRCByZWcyLCBSZWdpc3RlcklEIHNjcmF0Y2gpCiB7
CiAgICAgbW92ZShyZWcxLCBzY3JhdGNoKTsKQEAgLTYyOSwyOCArNjEyLDI4IEBAIEFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJl
ZykKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnKSk7CiB9CiAKLUFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJl
ZywgaW50IHZSZWcpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewogICAgIGlm
ICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUodlJlZykpCiAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRM
b2FkRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklU
OjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUp
CiB7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkp
IHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29k
ZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGluZGV4KTsKKyAgICBpZiAocmVnLmlzQ29uc3RhbnQo
KSkgeworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9j
b2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJsZShUcnVz
dGVkSW1tUHRyKCZpbkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKLSAgICAgICAg
bG9hZERvdWJsZShhZGRyZXNzRm9yKGluZGV4KSwgdmFsdWUpOworICAgICAgICBsb2FkRG91Ymxl
KGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2Fk
SW50MzJUb0RvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKK2lubGluZSB2b2lk
IEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0
ZXJJRCB2YWx1ZSkKIHsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3Rlcklu
ZGV4KGluZGV4KSkgewotICAgICAgICBBU1NFUlQoaXNPcGVyYW5kQ29uc3RhbnRJbnQoaW5kZXgp
KTsKLSAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5k
KGluZGV4KS5hc0ludDMyKCkpLCB2YWx1ZSk7CisgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsK
KyAgICAgICAgQVNTRVJUKGlzT3BlcmFuZENvbnN0YW50SW50KHJlZykpOworICAgICAgICBjb252
ZXJ0SW50MzJUb0RvdWJsZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQocmVnKS5hc0ludDMyKCkp
LCB2YWx1ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGFkZHJl
c3NGb3IoaW5kZXgpLCB2YWx1ZSk7CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGFkZHJl
c3NGb3IocmVnKSwgdmFsdWUpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpJVDo6UGF0Y2hhYmxlSnVt
cCBKSVQ6OmVtaXRQYXRjaGFibGVKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCByZWcpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCA4ODI2OGQ5YjNjMzRiZTgxZDQ3
MzZkN2EyODE4MWZhNTIyODYzMzI3Li43ZjM1OGMxMjAzYmRlYWU5MGQ0NGEyYzdmYjg4OTk3ODA4
OWNhODVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTU2
LDEwICs1NiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIHZvaWQgSklUOjplbWl0X29wX21vdihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpOwotICAgIGludCBkc3QgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV9zcmMub2Zmc2V0KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGlmIChtX2NvZGVCbG9jay0+aXND
b25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkgeworICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7
CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsK
ICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQogICAgICAgICAgICAgc3RvcmU2NChUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC03
Nyw3ICs3Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VuZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRW5kPigpOwogICAgIFJFTEVBU0VfQVNTRVJUKHJldHVyblZhbHVlR1BSICE9IGNh
bGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
dmFsdWUub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7CiAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICByZXQoKTsKQEAg
LTExMCw3ICsxMTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0
KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JS
ZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93
Q2FzZXMpOwogICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBz
dHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2Fz
ZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiAg
ICAgfQogfQogCkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19v
YmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0Pigp
OwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwot
ICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRh
ZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJl
KTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTI5LDkgKzEy
OSw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlk
ZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNI
YXNJbnN0YW5jZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0g
ICAgaW50IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3Rvci5vZmZzZXQoKTsKLSAg
ICBpbnQgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZS5vZmZz
ZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VW
YWx1ZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVn
VDApOwogCkBAIC0xNTUsOSArMTU1LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hh
c19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBK
SVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5z
dGFuY2VvZj4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAg
aW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvdG8gPSBi
eXRlY29kZS5tX3Byb3RvdHlwZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsK
IAogICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJl
c3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCiAgICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNl
VmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhl
biB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFMKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKLSAgICBp
bnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgCiAgICAgSklUSW5zdGFuY2VP
ZkdlbmVyYXRvciYgZ2VuID0gbV9pbnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsrXTsKICAg
ICAKQEAgLTIwNCw4ICsyMDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3Rv
bShjb25zdCBJbnN0cnVjdGlvbiopCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0eT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOwpAQCAt
MjE3LDggKzIxNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkPigpOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5t
X29wZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAg
ICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCBp
c0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOwpAQCAtMjQ2LDggKzI0Niw4IEBAIHZvaWQgSklU
OjplbWl0X29wX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigpOwotICAgIGludCBkc3QgPSBi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKIApAQCAtMjYxLDggKzI2MSw4IEBA
IHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCk7Ci0gICAgaW50IGRzdCA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICB4b3I2NChUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKQEAgLTI3NCw4ICsyNzQsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcElzTnVtYmVyPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1i
ZXJUYWdSZWdpc3RlciwgcmVnVDApOwpAQCAtMjg2LDggKzI4Niw4IEBAIHZvaWQgSklUOjplbWl0
X29wX2lzX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9p
ZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcElzQ2VsbFdpdGhUeXBlPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVjb2Rl
Lm1fdHlwZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKQEAg
LTMwNyw4ICszMDcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
b2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKTsKLSAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNv
ZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7
CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCBp
c05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtMzMyLDcgKzMzMiw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogCiAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gJWVheC4KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJldD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsK
IAogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOwpAQCAtMzQzLDggKzM0Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
cHJpbWl0aXZlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsK
LSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYyA9IGJ5
dGVjb2RlLm1fc3JjLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogICAgIApAQCAtMzc3LDE1ICsz
NzcsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25f
bmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbi5vZmZzZXQoKSwg
cmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLm9mZnNl
dCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0
aW9uLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUs
IHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5vdD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZC5v
ZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9v
cGVyYW5kLCByZWdUMCk7CiAKICAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNlKTsg
aWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdpbGwg
YmUKICAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJlIDAg
b3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KQEAgLTM5NCw3ICsz
OTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwogICAgIHhvcjY0KFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7CiAKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MDcsMTQgKzQwNywx
NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKICAgICBib29sIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLm9mZnNldCgpLCB2YWx1ZSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwogICAgIGFk
ZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwg
c2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcU51
bGw+KCk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKQEAgLTQzOCw3ICs0
MzgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxTnVsbD4oKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUu
bV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOwpAQCAtNDYyLDcgKzQ2Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFf
bnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVt
aXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
dW5kZWZpbmVkT3JOdWxsPigpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zm
c2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7CkBAIC00NzQsNyArNDc0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9v
cl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKbnVuZGVmaW5lZE9yTnVsbD4oKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwpAQCAtNDg3LDggKzQ4Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRy
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxUHRyPigpOwogICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBzcmMgPSBi
eXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwotICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBn
ZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlci5vZmZzZXQoKSk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgSlNWYWx1ZSBz
cGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2lu
dGVyKTsKICAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKICAgICAKQEAgLTUwMiwxOCArNTAyLDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2pu
ZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6
ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRl
Y29kZS5tX3Jocy5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgY29tcGFyZTMy
KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEplcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jocy5v
ZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1f
bGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgYWRkSnVtcChicmFuY2gzMihFcXVh
bCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKIH0KQEAgLTUyNywyNiArNTI3LDI2IEBAIHZvaWQg
SklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVn
VDI7CiAgICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24ub2Zmc2V0KCks
IHZhbHVlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9u
LCB2YWx1ZSk7CiAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2
YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJn
ZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5lcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xo
cy5vZmZzZXQoKSwgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpLCByZWdUMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5t
X3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEs
IHJlZ1QyKTsKICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwog
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
am5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMub2Zm
c2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jocy5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMs
IHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdU
Mik7CiAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0
KTsKIH0KQEAgLTU1Niw3ICs1NTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7CiAgICAgQVNTRVJUKHJlZ1QwID09IHJldHVy
blZhbHVlR1BSKTsKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV92YWx1ZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvblRocm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogfQpA
QCAtNTY1LDkgKzU2NSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmNvbXBp
bGVPcFN0cmljdEVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBp
bGVPcFN0cmljdEVxVHlwZSB0eXBlKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwotICAgIGludCBzcmMy
ID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CiAgICAgCkBAIC02
MDksOCArNjA5LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3AKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBpbnQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAg
IGludCBzcmMxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzIgPSBieXRl
Y29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2Rl
Lm1fbGhzOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOwogCkBA
IC02NjcsOCArNjY3LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKIHZvaWQgSklUOjplbWl0
X29wX3RvX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCk7
Ci0gICAgaW50IGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3Jj
VlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywg
cmVnVDApOwogICAgIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7
CkBAIC02ODEsOCArNjgxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1l
cmljKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCk7Ci0gICAgaW50
IGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5
dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwog
CiAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtNzAxLDIw
ICs3MDEsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKLSAgICBpbnQgc3JjVlJlZyA9
IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjVlJl
ZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZS
ZWcsIHJlZ1QwKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CiAKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
b2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKTsKLSAgICBp
bnQgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmNWUmVnID0g
Ynl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7
CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKQEAgLTc0NSwxMCAr
NzQ1LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fdm0pLCByZWdUMyk7CiAg
ICAgbG9hZDY0KEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSksIHJlZ1QwKTsK
ICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIEFk
ZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSkpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9leGNlcHRpb24ub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9leGNlcHRpb24pOwogCiAgICAgbG9hZDY0KEFkZHJlc3Mo
cmVnVDAsIEV4Y2VwdGlvbjo6dmFsdWVPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhyb3duVmFsdWUub2Zmc2V0KCkpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aHJvd25WYWx1ZSk7CiAKICNpZiBFTkFCTEUo
REZHX0pJVCkKICAgICAvLyBGSVhNRTogY29uc2lkZXIgaW5saW5lIGNhY2hpbmcgdGhlIHByb2Nl
c3Mgb2YgZG9pbmcgT1NSIGVudHJ5LCBpbmNsdWRpbmcKQEAgLTc1Niw3ICs3NTYsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgK
IAogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwot
ICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVm
ZmVyOworICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0g
bWV0YWRhdGEubV9idWZmZXI7CiAgICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKQogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwg
JnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgZWxzZQpAQCAtNzY2LDcgKzc2
Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxl
clB0clRhZyk7CiAgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7CiAgICAgaWYgKGJ1ZmZlciAm
JiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAo
VmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgICAgICBidWZmZXItPmZvckVh
Y2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKICAgICAg
ICAgICAgIEpTVmFsdWVSZWdzIHJlZ3MocmVnVDApOwogICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7CiAgICAgICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpKTsKQEAg
LTc4MywxMCArNzgzLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmls
ZShjb25zdCBJbnN0cnVjdGlvbiopCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsKLSAgICBp
bnQgY3VycmVudFNjb3BlID0gYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgY3VycmVudFNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2Vs
bChieXRlY29kZS5tX2RzdC5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRTdG9yZUNlbGwoYnl0
ZWNvZGUubV9kc3QsIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzk0LDcgKzc5NCw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFN3aXRjaEltbT4oKTsKICAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJ
bmRleDsKICAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgdW5zaWduZWQgc2NydXRp
bmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAg
dGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVu
dC4KICAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOwpAQCAtODExLDcgKzgxMSw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hDaGFyPigp
OwogICAgIHNpemVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OwogICAgIHVu
c2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KTsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29k
ZS5tX3NjcnV0aW5lZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0g
Ynl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dp
dGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFNpbXBs
ZUp1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CkBAIC04MjgsNyArODI4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0
cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoU3RyaW5nPigpOwogICAgIHNp
emVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OwogICAgIHVuc2lnbmVkIGRl
ZmF1bHRPZmZzZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV9k
ZWZhdWx0T2Zmc2V0KTsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0
aW5lZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUu
bV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3Rp
bmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFN0cmluZ0p1bXBUYWJs
ZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7CkBAIC04NTEsOCArODUxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2VxX251
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzEgPSBieXRlY29kZS5tX29w
ZXJhbmQub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7CiAgICAgSnVtcCBpc0ltbWVkaWF0
ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CkBAIC04ODQsOCArODg0LDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
dm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5lcU51bGw+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAg
IGludCBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVn
VDApOwogICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAt
OTIwLDcgKzkyMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9u
KikKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAg
ICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKICAgICBmb3IgKHNpemVf
dCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVn
aXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQotICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKGopLm9mZnNldCgpKTsKKyAgICAgICAgZW1pdEluaXRSZWdpc3Rl
cih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG1f
Y29kZUJsb2NrKTsKIApAQCAtOTMwLDcgKzkzMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVy
KGNvbnN0IEluc3RydWN0aW9uKikKIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9m
ZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdU
MCk7CkBAIC05NDEsNyArOTQxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1
Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3Qub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwogCkBAIC05NTQsNyArOTU0LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cENyZWF0ZVRoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7Ci0gICAgaW50IGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKICAgICBX
cml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2Fj
aGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0
ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwpAQCAtOTgyLDEzICs5ODIsMTMgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBh
Y2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9y
YWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rk
ej4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVh
bFJlZ2lzdGVyLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmRW1wdHkocmVnVDApKTsKIH0KIApAQCAtMTAwMiw3ICsxMDAyLDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEVxPigpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAg
ICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQ
UiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xMDEzLDcgKzEwMTMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgeG9y
MzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVl
R1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTEw
NDEsMTAgKzEwNDEsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9t
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFYKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwotICAg
IGludCBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3Iub2Zmc2V0KCk7Ci0gICAg
aW50IGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWUub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMSk7CkBAIC0xMTIxLDggKzExMjEsOCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwotICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHAu
b2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJl
Z2V4cCkpKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAt
MTEzMiwxMiArMTEzMiwxMiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBKdW1wIGxhenlKdW1wOwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOwogI2Vsc2UKLSAgICBlbWl0
TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRM
b2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CiAjZW5kaWYKICAgICBGdW5jdGlv
bkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29k
ZS5tX2Z1bmN0aW9uRGVjbCk7CiAKQEAgLTExNzgsMTEgKzExNzgsMTEgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZS5v
ZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
Y29wZSwgcmVnVDApOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29w
ZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3Bl
LCByZWdUMCk7CiAjZW5kaWYKIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBt
X2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKQEAgLTEy
MjQsMTAgKzEyMjQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlc0luZGV4ID0gYnl0ZWNvZGUubV9hcmd2Lm9mZnNl
dCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUg
PSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNJbmRleCAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOworICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLAogICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBy
ZWdUMCwgc2l6ZSk7CiB9CkBAIC0xMjM2LDggKzEyMzYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9u
ZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJh
eVdpdGhTaXplPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBp
bnQgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGgub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5k
ZXggPSBieXRlY29kZS5tX2xlbmd0aDsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCkBAIC0xMjUzLDkgKzEyNTMsOSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1l
cmF0b3Iub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1
YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CkBAIC0xMjk5LDkgKzEyOTksOSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5t
X3Byb3BlcnR5OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5
UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZh
bEluZm8oKTsKICAgICAKQEAgLTEzNDcsOSArMTM0Nyw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9m
ZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlW
YWxJbmZvOwogCiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwpAQCAtMTM2NiwxMCArMTM2
NiwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Rp
cmVjdF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+
KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1f
aW5kZXgub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0
b3Iub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxS
ZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisgICAgVmlydHVhbFJlZ2lzdGVyIGVu
dW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CiAKICAgICAvLyBDaGVjayB0aGF0IGJh
c2UgaXMgYSBjZWxsCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBA
IC0xNDA3LDkgKzE0MDcsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9l
bnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKLSAgICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvci5v
ZmZzZXQoKTsKLSAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Lm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihpbmRleCwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwg
cmVnVDEpOwpAQCAtMTQzMSw5ICsxNDMxLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRv
cl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGkKIHZv
aWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKTsKLSAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5t
X2VudW1lcmF0b3Iub2Zmc2V0KCk7Ci0gICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleC5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGVudW1lcmF0b3IsIHJlZ1QxKTsKQEAgLTE0NTcsNyArMTQ1Nyw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+
KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVM
b2NhdGlvbjsKLSAgICBpbnQgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1
YWxSZWdpc3Rlci5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUg
PSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKIApAQCAtMTUyNiw3ICsxNTI2LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3QKICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdH
UFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCiAgICAgR1BSUmVn
IHNjcmF0Y2gyUmVnID0gcmVnVDI7CiAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgp
LCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMyk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7CiAgICAgbG9n
U2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcs
IHJlZ1QzKTsKIH0KIApAQCAtMTU0MCw4ICsxNTQwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9n
X3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUg
YSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCiAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7
CiAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNj
cmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIHJlZ1QyKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKICAgICBsb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMs
IG1fY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwogfQogCkBAIC0x
NTYyLDcgKzE1NjIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bf
YXJndW1lbnRfY291bnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291
bnQ+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBsb2FkMzIocGF5bG9hZEZvcihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKICAgICBz
dWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBK
U1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsKQEAgLTE1NzMs
NyArMTU3Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9s
ZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCk7Ci0g
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICB1bnNpZ25lZCBudW1QYXJhbXNUb1NraXAgPSBi
eXRlY29kZS5tX251bVBhcmFtZXRlcnNUb1NraXA7CiAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7CiAgICAgc3Vi
MzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CkBAIC0xNjAzLDcgKzE2MDMsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QXJndW1lbnQ+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7CkBAIC0xNjEzLDcgKzE2MTMsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIAogICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOwogICAgIEp1bXAgYXJndW1lbnRPdXRPZkJv
dW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRl
eCkpOwotICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVu
dCArIGluZGV4KSwgcmVzdWx0UmVncyk7CisgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVh
bFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIHJlc3VsdFJl
Z3MpOwogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMu
bGluayh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2RlczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0
LmNwcAppbmRleCBjMWJiNjU3YTA3YzNjODdkZTI4ZGQ1OGJjZDIyNjA1NTgwOTczYWU4Li4zMDI4
NmNkMzI5YjMxZjk3NGI4ZWQ4NGY1MWFmNmZiYzc2MzgwYzQzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCkBAIC05NTAsNyArOTUwLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4
CiAKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
LSAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1
ZmZlcjsKKyAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9
IG1ldGFkYXRhLm1fYnVmZmVyOwogICAgIGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxp
bmcoKSkKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gs
ICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGVsc2UKQEAgLTk2MCw3ICs5
NjAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKICAg
ICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKICAgICBpZiAoYnVmZmVyICYmIHNob3VsZEVtaXRQ
cm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kJiBwcm9maWxlKSB7CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICAgICAgSlNWYWx1
ZVJlZ3MgcmVncyhyZWdUMSwgcmVnVDApOwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7CiAgICAgICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IDA4MmE3ODMwODRkMmZj
NWEwNzM2YjFlNmI3MWE4YTA2ZDMwMzZmN2UuLjZmZjg4MDIxMTM4MmU5NjBiZDcyMWFjZDM4NTA5
ZThjMjg1NjA2NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcApAQCAtMTY1NSwxOCArMTY1NSwxOCBAQCBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25PcHRpbWl6ZShWTSogdm1Qb2ludGVyLCB1aW50MzJfdCBieXRlYwogICAg
ICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVyYm9zZU9TUigpKSkKICAgICAgICAgICAgIGRh
dGFMb2coIlRyaWdnZXJpbmcgb3B0aW1pemVkIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ss
ICJcbiIpOwogCi0gICAgICAgIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzOworICAgICAgICB1
bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlcyA9IDA7CiAgICAgICAgIGlmIChieXRlY29kZUluZGV4
KQogICAgICAgICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMgPSBjb2RlQmxvY2stPm51bUNhbGxlZUxv
Y2FscygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IDA7
Ci0gICAgICAgIE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiBtdXN0SGFuZGxlVmFsdWVzKGNv
ZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJzV2l0aFZhbHVlcyk7CisKKyAgICAgICAg
T3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+IG11c3RIYW5kbGVWYWx1ZXMoY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCksIG51bVZhcnNXaXRoVmFsdWVzLCAwKTsKICAgICAgICAgaW50IGxvY2Fs
c1VzZWRGb3JDYWxsZWVTYXZlcyA9IHN0YXRpY19jYXN0PGludD4oQ29kZUJsb2NrOjpsbGludEJh
c2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpOwogICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7
Ci0gICAgICAgICAgICBpZiAob3BlcmFuZElzTG9jYWwob3BlcmFuZCkgJiYgVmlydHVhbFJlZ2lz
dGVyKG9wZXJhbmQpLnRvTG9jYWwoKSA8IGxvY2Fsc1VzZWRGb3JDYWxsZWVTYXZlcykKKyAgICAg
ICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4
KGkpOworCisgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkgJiYgb3BlcmFuZC50b0xv
Y2FsKCkgPCBsb2NhbHNVc2VkRm9yQ2FsbGVlU2F2ZXMpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVzW2ldID0gY2FsbEZyYW1lLT51bmNoZWNr
ZWRSKG9wZXJhbmQpLmpzVmFsdWUoKTsKKyAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXNbaV0g
PSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSkuanNWYWx1
ZSgpOwogICAgICAgICB9CiAKICAgICAgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudENvZGVCbG9j
ayA9IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKTsKQEAgLTE3ODQsNyArMTc4NCw3IEBAIGNo
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9m
aWxlKFZNKiB2bVBvaW50ZXIsIHVpCiAgICAgY29kZUJsb2NrLT5lbnN1cmVDYXRjaExpdmVuZXNz
SXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgYXV0byBieXRl
Y29kZSA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCktPmFzPE9w
Q2F0Y2g+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxv
Y2spOwotICAgIG1ldGFkYXRhLm1fYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5k
T3BlcmFuZCYgcHJvZmlsZSkgeworICAgIG1ldGFkYXRhLm1fYnVmZmVyLT5mb3JFYWNoKFsmXSAo
VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CiAgICAgICAgIHByb2Zp
bGUubV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxGcmFtZS0+dW5jaGVja2VkUihw
cm9maWxlLm1fb3BlcmFuZCkuanNWYWx1ZSgpKTsKICAgICB9KTsKIApAQCAtMTkwOCw4ICsxOTA4
LDggQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBvcFNjb3BlKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGludDMyX3Qgc2NvcGUKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCi0gICAgSlNTY29wZSogc2NvcGUgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZFIoc2NvcGVSZWcpLlJlZ2lzdGVyOjpzY29wZSgpOwotICAgIGNh
bGxGcmFtZS0+dW5jaGVja2VkUihzY29wZVJlZykgPSBzY29wZS0+bmV4dCgpOworICAgIGF1dG8m
IHNjb3BlU2xvdCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIoc2NvcGVS
ZWcpKTsKKyAgICBzY29wZVNsb3QgPSBzY29wZVNsb3QuUmVnaXN0ZXI6OnNjb3BlKCktPm5leHQo
KTsKIH0KIAogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20o
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBKU09iamVjdCogY29uc3RydWN0b3IsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRIYXNJbnN0YW5j
ZSkKQEAgLTI0MTcsNyArMjQxNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uR2V0RnJvbVNjb3BlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIGNvbnN0IElkZW50
aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFyKTsKLSAg
ICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNPYmplY3QqPihjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSkuanNWYWx1ZSgpKTsKKyAgICBKU09iamVjdCog
c2NvcGUgPSBqc0Nhc3Q8SlNPYmplY3QqPihjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUu
bV9zY29wZSkuanNWYWx1ZSgpKTsKICAgICBHZXRQdXRJbmZvJiBnZXRQdXRJbmZvID0gYnl0ZWNv
ZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2dldFB1dEluZm87CiAKICAgICAvLyBNb2R1bGVWYXIg
aXMgYWx3YXlzIGNvbnZlcnRlZCB0byBDbG9zdXJlVmFyIGZvciBnZXRfZnJvbV9zY29wZS4KQEAg
LTI0NjAsOCArMjQ2MCw4IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRUb1Njb3Bl
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEluc3RyCiAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwogCiAgICAgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOwotICAg
IEpTT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KGNhbGxGcmFtZS0+dW5jaGVja2Vk
UihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpKS5qc1ZhbHVlKCkpOwotICAgIEpTVmFsdWUgdmFs
dWUgPSBjYWxsRnJhbWUtPnIoYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKSkuanNWYWx1ZSgpOwor
ICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KGNhbGxGcmFtZS0+dW5jaGVj
a2VkUihieXRlY29kZS5tX3Njb3BlKS5qc1ZhbHVlKCkpOworICAgIEpTVmFsdWUgdmFsdWUgPSBj
YWxsRnJhbWUtPnIoYnl0ZWNvZGUubV92YWx1ZSkuanNWYWx1ZSgpOwogICAgIEdldFB1dEluZm8m
IGdldFB1dEluZm8gPSBtZXRhZGF0YS5tX2dldFB1dEluZm87CiAKICAgICAvLyBNb2R1bGVWYXIg
ZG9lcyBub3Qga2VlcCB0aGUgc2NvcGUgcmVnaXN0ZXIgdmFsdWUgYWxpdmUgaW4gREZHLgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAppbmRleCBj
NjU1ZGI4YmQyZDIxMjQwZTJjYTg2YTkxYTk2MjE2MDQwODRlOTM3Li5hYmY1MmY3MTNlOGFhMGFm
YjVlODA1YzdjZjNmMWQzODgzNzFjMmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApAQCAtNTcsOSArNTcsOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
LSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFMKIHsKICAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7CiAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7
Ci0gICAgICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICAgICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCkBAIC0xMTcsOCArMTE3LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgIGlu
dCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAm
bWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2Nv
ZGVCbG9jay0+YWRkQnlWYWxJbmZvKCk7CiAKQEAgLTE3Nyw3ICsxNzcsNyBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KIEpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRC
eVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGlu
ZGV4aW5nU2hhcGUpCiB7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEFycmF5
UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICAKICAgICBK
dW1wTGlzdCBzbG93Q2FzZXM7CkBAIC0yMDgsNyArMjA4LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6
OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1w
JiBiYWQKICAgICB9CiAgICAgY2FzZSBDb250aWd1b3VzU2hhcGU6CiAgICAgICAgIHN0b3JlNjQo
cmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpKTsKLSAgICAgICAgZW1p
dFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNlLCB2YWx1
ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAg
ICAgICBDUkFTSCgpOwpAQCAtMjM1LDcgKzIzNSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
SklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChPcCBieXRlY29kZSwg
UGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKIHsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwog
ICAgIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKQEAgLTI0OSw3ICsyNDksNyBAQCBKSVQ6Okp1
bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFi
bGVKdW1wJiBiYWRUeXBlKQogICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKICAgICBzdG9yZTY0KHJlZ1QzLCBCYXNl
SW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNl
dCgpKSk7Ci0gICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHZh
bHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5t
X2Jhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgSnVtcCBlbmQgPSBqdW1wKCk7
CiAgICAgCiAgICAgZW1wdHkubGluayh0aGlzKTsKQEAgLTI3NCw4ICsyNzQsOCBAQCBKSVRQdXRC
eUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlW
YWxJbmZvLCBPcCBieXRlYwogICAgIC8vIHByb3BlcnR5OiByZWdUMQogICAgIC8vIHNjcmF0Y2g6
IHJlZ1QyCiAKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBp
bnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWU7CiAKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChy
ZWdUMSkpOwogICAgIGVtaXRCeVZhbElkZW50aWZpZXJDaGVjayhieVZhbEluZm8sIHJlZ1QxLCBy
ZWdUMSwgcHJvcGVydHlOYW1lLCBzbG93Q2FzZXMpOwpAQCAtMzA0LDE0ICszMDQsMTQgQEAgSklU
UHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8q
IGJ5VmFsSW5mbywgT3AgYnl0ZWMKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgYm9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKLSAgICBpbnQgYmFzZTsK
LSAgICBpbnQgcHJvcGVydHk7Ci0gICAgaW50IHZhbHVlOworICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWU7CiAKICAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgewotICAgICAgICBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwotICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7Ci0gICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZS5vZmZzZXQoKTsKKyAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICAgICAgcHJv
cGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OworICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKQEAgLTMzNywzNiArMzM3LDM2IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeUlkPigpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAg
ICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLm9mZnNldCgpLCByZWdUMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0U2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9h
dHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nv
ci5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9hY2Nlc3NvciwgcmVnVDEpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVy
QnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRp
b25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJTZXR0ZXJCeUlkPigp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCBy
ZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1Qw
KTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLm9mZnNldCgpLCByZWdUMSk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlci5vZmZzZXQoKSwg
cmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJl
Z1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdU
Mik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwg
cmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCksIHJlZ1QxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAg
IGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwpAQCAt
Mzc1LDE4ICszNzUsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3B1
dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJC
eVZhbD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZz
ZXQoKSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eS5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9h
dHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nv
ci5vZmZzZXQoKSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9hY2Nlc3NvciwgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVy
QnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKLSAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5t
X2Jhc2Uub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGludCBw
cm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkSlNS
ZXN1bHQsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSk7CkBAIC0zOTUs
OSArMzk1LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zm
c2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbEpTUmVzdWx0LCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsK
QEAgLTQwNiw4ICs0MDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAg
IGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2VW
UmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CkBAIC00MzAsNyArNDMwLDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG8KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAg
IGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJ
bmRleCsrXTsKQEAgLTQ0NSw4ICs0NDUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dl
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0bwogdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQo
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDAp
OwpAQCAtNDY5LDcgKzQ2OSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGly
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlCiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0
b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CkBAIC00ODUsOCArNDg1LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CkBAIC01MTMs
OSArNTEzLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90
aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0g
ICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFz
ZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHRoaXNWUmVnID0gYnl0
ZWNvZGUubV90aGlzVmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRl
Y29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90
aGlzVmFsdWU7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTUzOSw3ICs1MzksNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgaW50IHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwpA
QCAtNTU2LDcgKzU1Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90
aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZFdpdGhUaGlz
R2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRl
eCsrXTsKQEAgLTU3MSw4ICs1NzEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRC
eUlkPigpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAg
ICBpbnQgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9vbCBkaXJlY3QgPSAhIShieXRl
Y29kZS5tX2ZsYWdzICYgUHV0QnlJZElzRGlyZWN0KTsKIAogICAgIC8vIEluIG9yZGVyIHRvIGJl
IGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQs
IHdlIHN0b3JlIG9uZSBwb2ludGVyLApAQCAtNjE1LDggKzYxNSw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgp
OworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7
CkBAIC02MzgsNyArNjM4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG8KICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9
IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwpAQCAtNjU3LDcgKzY1Nyw3IEBAIHZvaWQgSklU
OjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAg
ICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRl
KCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRS
ZXNvbHZlQ2xvc3VyZShpbnQgZHN0LCBpbnQgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MsIHVuc2lnbmVkIGRlcHRoKQordm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0
dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQogewogICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y29wZSwgcmVnVDApOwpAQCAtNjcwLDggKzY3MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29s
dmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsK
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNjb3BlID0gYnl0
ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsK
ICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAg
ICAgdW5zaWduZWQgZGVwdGggPSBtZXRhZGF0YS5tX2xvY2FsU2NvcGVEZXB0aDsKIApAQCAtNzcw
LDcgKzc3MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0TG9h
ZFdpdGhTdHJ1Y3R1cmVDaGVjayhpbnQgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3Qp
Cit2b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNj
b3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQogewogICAgIGxvYWRQdHIoc3RydWN0dXJl
U2xvdCwgcmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsK
QEAgLTc5MCw3ICs3OTAsNyBAQCB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50
ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyByZWcpCiAgICAgbG9hZFB0cihyZWcsIHJlZyk7
CiB9CiAKLXZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBv
cGVyYW5kKQordm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29w
ZSwgdWludHB0cl90IG9wZXJhbmQpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29w
ZSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1l
bnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJl
Z1QwKTsKQEAgLTgwMCw4ICs4MDAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKLSAgICBpbnQgc2NvcGUgPSBieXRlY29kZS5t
X3Njb3BlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBl
KCk7CiAgICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJl
LnNsb3QoKTsKICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKQEAgLTkxOSwxNyArOTE5LDE3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigp
OwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudElu
c3RydWN0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVl
KiBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKK3ZvaWQgSklUOjplbWl0
UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
LCBXYXRjaHBvaW50U2V0KiBzZXQpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwogICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwogICAgIHN0b3JlUHRyKHJlZ1Qw
LCBvcGVyYW5kKTsKIH0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChK
U1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5k
aXJlY3RXYXRjaHBvaW50U2V0KQordm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGly
ZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdh
dGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCiB7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50
U2V0LCByZWdUMSk7CkBAIC05MzgsNyArOTM4LDcgQEAgdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxW
YXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBpbnQgdmFsdWUsIFcK
ICAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEpOwogfQogCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1
cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50
U2V0KiBzZXQpCit2b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNj
b3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50
U2V0KiBzZXQpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKQEAgLTk1MCw4ICs5NTAs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZS5v
ZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAg
IFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBHZXRQdXRJbmZvIGdldFB1dElu
Zm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1
cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwpAQCAtMTA4Niw4ICsxMDg2LDgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3IKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2Fy
Z3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbUFyZ3VtZW50cz4o
KTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGFyZ3Vt
ZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0g
Ynl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsK
ICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwpAQCAt
MTA5OSw5ICsxMDk5LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb0FyZ3Vt
ZW50cz4oKTsKLSAgICBpbnQgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHMub2Zmc2V0
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRz
OwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0gICAgaW50IHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRz
LCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwpAQCAt
MTExMCw3ICsxMTEwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRXcml0ZUJhcnJpZXIo
YXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmll
ck1vZGUgbW9kZSkKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBv
d25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CiAg
ICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUg
fHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKQEAgLTExMzMsNyArMTEzMyw3
IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2
YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlCiAgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRo
aXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCB1bnNp
Z25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQordm9pZCBKSVQ6OmVtaXRXcml0ZUJh
cnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJN
b2RlIG1vZGUpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwog
ICAgIEp1bXAgdmFsdWVOb3RDZWxsOwpAQCAtMTE1MCw4ICsxMTUwLDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRJbnRlcm5hbEZpZWxkPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsK
LSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Owog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CkBAIC0xMTY0LDggKzEx
NjQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5h
bF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0SW50ZXJuYWxGaWVsZD4o
KTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBAIC0xMTc2LDcgKzExNzYsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIAogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkKIAotdm9pZCBK
SVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0
ZUJhcnJpZXJNb2RlIG1vZGUpCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVn
aXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2Rl
KQogewogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRl
clZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7CkBAIC0xMTk5LDcg
KzExOTksNyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25lciwgdW5z
aWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZQogICAgICAgICB2YWx1ZU5vdENlbGwu
bGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25l
ciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKK3ZvaWQgSklUOjplbWl0
V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVC
YXJyaWVyTW9kZSBtb2RlKQogewogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmIChtb2Rl
ID09IFNob3VsZEZpbHRlclZhbHVlKSB7CkBAIC0xNDI1LDcgKzE0MjUsNyBAQCBKSVQ6Okp1bXBM
aXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZQogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2Fy
cmF5UHJvZmlsZTsKICAgICBBU1NFUlQoaXNJbnQodHlwZSkpOwogICAgIAotICAgIGludCB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgUmVnaXN0ZXJJ
RCBiYXNlID0gcmVnVDA7CkBAIC0xNTAxLDcgKzE1MDEsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6
ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBi
YWRUeQogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKICAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7CiAgICAgCi0gICAgaW50IHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3RlcklEIGJhc2Ug
PSByZWdUMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZh
Y2VKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAppbmRl
eCAyY2Y5MTk4ZjQwZWRhYWY1M2E2MWRiZjMzOTBhNmM3ZGIyODZhNWMxLi41ODI3MTNlNjQwODdh
NTFmNTkzOWI5MGI5ODU0NWRmMTMzZDBjNmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KU0ludGVyZmFjZUpJVC5oCkBAIC00NSwxOCArNDUsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIGlubGluZSBKdW1wIGVtaXRMb2FkSlNDZWxs
KHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQpOwotICAg
ICAgICBpbmxpbmUgSnVtcCBlbWl0TG9hZEludDMyKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3Rlcklu
ZGV4LCBSZWdpc3RlcklEIGRzdCk7Ci0gICAgICAgIGlubGluZSBKdW1wIGVtaXRMb2FkRG91Ymxl
KHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3Rl
cklEIHNjcmF0Y2gpOworICAgICAgICBpbmxpbmUgSnVtcCBlbWl0TG9hZEpTQ2VsbChWaXJ0dWFs
UmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCk7CisgICAgICAgIGlubGluZSBKdW1wIGVtaXRM
b2FkSW50MzIoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIGRzdCk7CisgICAgICAgIGlubGlu
ZSBKdW1wIGVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3RlcklEIGRzdCwg
UmVnaXN0ZXJJRCBzY3JhdGNoKTsKIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGlu
bGluZSBKdW1wIGVtaXRKdW1wSWZOb3RKU0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5k
ZXgpOworICAgICAgICBpbmxpbmUgSnVtcCBlbWl0SnVtcElmTm90SlNDZWxsKFZpcnR1YWxSZWdp
c3Rlcik7CiAjZW5kaWYKIAotICAgICAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVy
UHRyKGludCBlbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tID0gY2FsbEZyYW1l
UmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3Rl
cklEIGZyb20sIGludCBlbnRyeSk7Ci0gICAgICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVh
ZGVyKHZvaWQqIHZhbHVlLCBpbnQgZW50cnkpOwotICAgICAgICB2b2lkIGVtaXRQdXRDZWxsVG9D
YWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkpOworICAgICAgICB2b2lk
IGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFZpcnR1YWxSZWdpc3RlciBlbnRyeSwgUmVn
aXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAg
ICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxS
ZWdpc3RlciBlbnRyeSk7CisgICAgICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZv
aWQqIHZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpOworICAgICAgICB2b2lkIGVtaXRQdXRD
ZWxsVG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50
cnkpOwogCiAgICAgICAgIFZNKiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1fdm07IH0KIApAQCAtNjQs
MzYgKzY0LDM2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICNpZiBVU0UoSlNWQUxVRTMy
XzY0KQotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1p
dExvYWRKU0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgcGF5
bG9hZCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVt
aXRMb2FkSlNDZWxsKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQg
cGF5bG9hZCkKICAgICB7Ci0gICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0
ZXJJbmRleCksIHBheWxvYWQpOwotICAgICAgICByZXR1cm4gZW1pdEp1bXBJZk5vdEpTQ2VsbCh2
aXJ0dWFsUmVnaXN0ZXJJbmRleCk7CisgICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFs
UmVnaXN0ZXIpLCBwYXlsb2FkKTsKKyAgICAgICAgcmV0dXJuIGVtaXRKdW1wSWZOb3RKU0NlbGwo
dmlydHVhbFJlZ2lzdGVyKTsKICAgICB9CiAKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1
bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRKdW1wSWZOb3RKU0NlbGwodW5zaWduZWQgdmlydHVhbFJl
Z2lzdGVySW5kZXgpCisgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNl
SklUOjplbWl0SnVtcElmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIp
CiAgICAgewotICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50Pih2aXJ0dWFsUmVnaXN0ZXJJ
bmRleCkgPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7Ci0gICAgICAgIHJldHVybiBicmFu
Y2gzMihOb3RFcXVhbCwgdGFnRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpKTsKKyAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3RlciA8IEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVx
dWFsLCB0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxU
YWcpKTsKICAgICB9CiAgICAgCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50
ZXJmYWNlSklUOjplbWl0TG9hZEludDMyKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBS
ZWdpc3RlcklEIGRzdCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZh
Y2VKSVQ6OmVtaXRMb2FkSW50MzIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVn
aXN0ZXJJRCBkc3QpCiAgICAgewotICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50Pih2aXJ0
dWFsUmVnaXN0ZXJJbmRleCkgPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7Ci0gICAgICAg
IGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7Ci0gICAgICAg
IHJldHVybiBicmFuY2gzMihOb3RFcXVhbCwgdGFnRm9yKHN0YXRpY19jYXN0PGludD4odmlydHVh
bFJlZ2lzdGVySW5kZXgpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7CisgICAg
ICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIgPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7
CisgICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBkc3QpOworICAg
ICAgICByZXR1cm4gYnJhbmNoMzIoTm90RXF1YWwsIHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKICAgICB9CiAKLSAgICBpbmxpbmUgSlNJ
bnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkRG91YmxlKHVuc2lnbmVk
IHZpcnR1YWxSZWdpc3RlckluZGV4LCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0
Y2gpCisgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0
TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQg
ZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiAgICAgewotICAgICAgICBBU1NFUlQoc3RhdGljX2Nh
c3Q8aW50Pih2aXJ0dWFsUmVnaXN0ZXJJbmRleCkgPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRl
eCk7Ci0gICAgICAgIGxvYWRQdHIodGFnRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgc2NyYXRj
aCk7CisgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIgPCBGaXJzdENvbnN0YW50UmVnaXN0
ZXJJbmRleCk7CisgICAgICAgIGxvYWRQdHIodGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIHNjcmF0
Y2gpOwogICAgICAgICBKdW1wIGlzRG91YmxlID0gYnJhbmNoMzIoQmVsb3csIHNjcmF0Y2gsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKTsKICAgICAgICAgSnVtcCBub3RJbnQgPSBi
cmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFn
KSk7Ci0gICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIHNj
cmF0Y2gpOworICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgc2Ny
YXRjaCk7CiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHNjcmF0Y2gsIGRzdCk7CiAgICAg
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICAgICAgaXNEb3VibGUubGluayh0aGlzKTsKLSAg
ICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgZHN0KTsK
KyAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7CiAg
ICAgICAgIGRvbmUubGluayh0aGlzKTsKICAgICAgICAgcmV0dXJuIG5vdEludDsKICAgICB9CkBA
IC0xMDEsMjMgKzEwMSwyMyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6
OmVtaXRMb2FkSlNDZWxsKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklE
IGRzdCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVt
aXRMb2FkSlNDZWxsKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQg
ZHN0KQogICAgIHsKLSAgICAgICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5k
ZXgpLCBkc3QpOworICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBk
c3QpOwogICAgICAgICByZXR1cm4gYnJhbmNoSWZOb3RDZWxsKGRzdCk7CiAgICAgfQogICAgIAot
ICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRJ
bnQzMih1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBkc3QpCisgICAg
aW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEludDMy
KFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsK
LSAgICAgICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOwor
ICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBkc3QpOwogICAgICAg
ICBKdW1wIG5vdEludDMyID0gYnJhbmNoSWZOb3RJbnQzMihkc3QpOwogICAgICAgICB6ZXJvRXh0
ZW5kMzJUb1B0cihkc3QsIGRzdCk7CiAgICAgICAgIHJldHVybiBub3RJbnQzMjsKICAgICB9CiAK
LSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2Fk
RG91YmxlKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBGUFJlZ2lzdGVySUQgZHN0LCBS
ZWdpc3RlcklEIHNjcmF0Y2gpCisgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50
ZXJmYWNlSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
LCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiAgICAgewotICAgICAgICBs
b2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIHNjcmF0Y2gpOworICAgICAg
ICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBzY3JhdGNoKTsKICAgICAgICAg
SnVtcCBub3ROdW1iZXIgPSBicmFuY2hJZk5vdE51bWJlcihzY3JhdGNoKTsKICAgICAgICAgSnVt
cCBub3RJbnQgPSBicmFuY2hJZk5vdEludDMyKHNjcmF0Y2gpOwogICAgICAgICBjb252ZXJ0SW50
MzJUb0RvdWJsZShzY3JhdGNoLCBkc3QpOwpAQCAtMTI5LDEyICsxMjksMTIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgfQogI2VuZGlmCiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZh
Y2VKSVQ6OmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKGludCBlbnRyeSwgUmVnaXN0ZXJJ
RCB0bywgUmVnaXN0ZXJJRCBmcm9tKQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFj
ZUpJVDo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoVmlydHVhbFJlZ2lzdGVyIGVudHJ5
LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20pCiAgICAgewotICAgICAgICBsb2FkUHRy
KEFkZHJlc3MoZnJvbSwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOworICAgICAgICBs
b2FkUHRyKEFkZHJlc3MoZnJvbSwgZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
dG8pOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1p
dFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgaW50IGVudHJ5KQorICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVy
KFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQogICAgIHsKICNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQogICAgICAgICBzdG9yZVB0cihmcm9tLCBwYXlsb2FkRm9yKGVudHJ5KSk7
CkBAIC0xNDMsMTIgKzE0MywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAgIH0KIAot
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1l
SGVhZGVyKHZvaWQqIHZhbHVlLCBpbnQgZW50cnkpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIEpT
SW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIFZpcnR1
YWxSZWdpc3RlciBlbnRyeSkKICAgICB7CiAgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIo
dmFsdWUpLCBhZGRyZXNzRm9yKGVudHJ5KSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2
b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVy
SUQgZnJvbSwgaW50IGVudHJ5KQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJ
VDo6ZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxS
ZWdpc3RlciBlbnRyeSkKICAgICB7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgc3Rv
cmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihlbnRyeSkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAppbmRleCAw
OTUyNTkxZWU5ZjdkNWQ0ZmMyMTcwYzcxNjkzY2ViNjY5Nzc0YjRiLi40OWY1NGM1ZGE1NjcyNTAz
YTFlMDc2ZjIyZDlkMzgwMjliYjA5ZmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcApAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgZW1pdFNl
dHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IG51bVVzZWRTbG90CiAgICAgICAgICAgICBmaXJzdEFyZ3VtZW50UmVnID0gVmlydHVhbFJlZ2lz
dGVyKDApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9IFZh
bHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKLSAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIERhdGFGb3Jt
YXRJbnQzMik7CisgICAgICAgICAgICBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgRGF0YUZvcm1hdEludDMyKTsKICAgICAgICAgZmlyc3RBcmd1bWVudFJlZyA9IFZp
cnR1YWxSZWdpc3RlcihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApKTsKICAgICB9CiAgICAg
ZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2Uodm0sIGppdCwgbnVtVXNlZFNsb3RzR1BSLCBz
Y3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBhcmd1bWVudENvdW50UmVjb3Zl
cnksIGZpcnN0QXJndW1lbnRSZWcsIGZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCmluZGV4IGEx
MTYyMmVlYmRiZTQ3ODVlZjA2YWRjMzkzNDcxZjVjMjFmNzI0MDMuLjRhMzk1NjdhMWVmZWNlZGQ4
OTA4ZDRhNWZhNjk0NjU3YmJlNmNlMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCkBAIC01NSwxMyArNTUsMTMgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIAogICAgICAgICB2b2lkIGxvYWREb3VibGVBcmd1bWVudChpbnQgYXJndW1l
bnQsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKICAgICAgICAgewotICAg
ICAgICAgICAgdW5zaWduZWQgc3JjID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVu
dCk7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gdmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50ICsgMSk7CiAgICAgICAgICAgICBtX2ZhaWx1
cmVzLmFwcGVuZChlbWl0TG9hZERvdWJsZShzcmMsIGRzdCwgc2NyYXRjaCkpOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICB2b2lkIGxvYWRDZWxsQXJndW1lbnQoaW50IGFyZ3VtZW50LCBS
ZWdpc3RlcklEIGRzdCkKICAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc3JjID0gQ2Fs
bEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVudCk7CisgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGFyZ3Vt
ZW50ICsgMSk7CiAgICAgICAgICAgICBtX2ZhaWx1cmVzLmFwcGVuZChlbWl0TG9hZEpTQ2VsbChz
cmMsIGRzdCkpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNzMsNyArNzMsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgbG9hZEludDMyQXJndW1lbnQoaW50IGFy
Z3VtZW50LCBSZWdpc3RlcklEIGRzdCwgSnVtcCYgZmFpbFRhcmdldCkKICAgICAgICAgewotICAg
ICAgICAgICAgdW5zaWduZWQgc3JjID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVu
dCk7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gdmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50ICsgMSk7CiAgICAgICAgICAgICBmYWlsVGFy
Z2V0ID0gZW1pdExvYWRJbnQzMihzcmMsIGRzdCk7CiAgICAgICAgIH0KICAgICAgICAgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKaW5kZXggYjgxNDZk
MjE3NjYxNDgwZWQ0YjJhNzZhMGVhMWRmYTMxZjMxZjFmMi4uYmYxOWQwMmQzNmViZDBmYzhiYzYx
ZGNmODQyNTEyZTVkZjQxZjFjNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3JzLmNwcApAQCAtMTAzNiw4ICsxMDM2LDggQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBhYnNUaHVua0dlbmVyYXRvcihWTSYgdm0pCiAgICAgICAgIHJl
dHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFu
YWdlZENvZGVSZWYodm0uaml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKIAogI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgdW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXggPSBDYWxsRnJhbWU6
OmFyZ3VtZW50T2Zmc2V0KDApOwotICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRy
ZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgR1BSSW5mbzo6cmVnVDApOworICAgIFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBDYWxsRnJhbWVTbG90OjpmaXJzdEFyZ3VtZW50
OworICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdp
c3RlciksIEdQUkluZm86OnJlZ1QwKTsKICAgICBhdXRvIG5vdEludGVnZXIgPSBqaXQuYnJhbmNo
SWZOb3RJbnQzMihHUFJJbmZvOjpyZWdUMCk7CiAKICAgICAvLyBBYnMgSW50MzIuCkBAIC0xMjE3
LDcgKzEyMTcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5k
RnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNJiB2bSkKICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGxv
b3AgPSBqaXQubGFiZWwoKTsKICAgICBqaXQuc3ViMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoMSksIEdQUkluZm86OnJlZ1QzKTsKICAgICBqaXQuc3ViMzIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoMSksIEdQUkluZm86OnJlZ1QxKTsKLSAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVs
cGVyczo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxKSkuaW5kZXhlZEJ5
KEdQUkluZm86OnJlZ1QzLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpLCB2YWx1ZVJlZ3MpOwor
ICAgIGppdC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygxKSkuaW5kZXhlZEJ5KEdQUkluZm86OnJlZ1QzLCBD
Q2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpLCB2YWx1ZVJlZ3MpOwogICAgIGppdC5zdG9yZVZhbHVl
KHZhbHVlUmVncywgQ0NhbGxIZWxwZXJzOjpjYWxsZWVBcmd1bWVudFNsb3QoMSkuaW5kZXhlZEJ5
KEdQUkluZm86OnJlZ1QxLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpKTsKICAgICBqaXQuYnJh
bmNoVGVzdDMyKENDYWxsSGVscGVyczo6Tm9uWmVybywgR1BSSW5mbzo6cmVnVDMpLmxpbmtUbyhs
b29wLCAmaml0KTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCmluZGV4IGFjNzJhYmM1NzM4NzA2MjU3OTQzZTEyZTY0ZjU3ZjdlZjU5MmYw
ZTIuLjJiYjYxNWY1NGE4OGU4ZTQ4NmM5ZGU0OTI3N2EzMmQyZmU1OTljMTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApAQCAtMjksNiArMjks
NyBAQAogI2luY2x1ZGUgIkFycmF5Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJCeXRlY29kZUdl
bmVyYXRvci5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkNoZWNrcG9pbnRP
U1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVk
ZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFcnJvckhhbmRsaW5nU2NvcGUuaCIKQEAgLTk4LDggKzk5
LDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBMTEludCB7CiAgICAgTExJTlRfQkVHSU5f
Tk9fU0VUX1BDKCk7ICAgICAgICAgICAgICAgICAgICBcCiAgICAgTExJTlRfU0VUX1BDX0ZPUl9T
VFVCUygpCiAKLWlubGluZSBKU1ZhbHVlIGdldE5vbkNvbnN0YW50T3BlcmFuZChDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgY29uc3QgVmlydHVhbFJlZ2lzdGVyJiBvcGVyYW5kKSB7IHJldHVybiBjYWxs
RnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZC5vZmZzZXQoKSkuanNWYWx1ZSgpOyB9Ci1pbmxpbmUg
SlNWYWx1ZSBnZXRPcGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBWaXJ0dWFsUmVn
aXN0ZXImIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+cihvcGVyYW5kLm9mZnNldCgpKS5q
c1ZhbHVlKCk7IH0KK2lubGluZSBKU1ZhbHVlIGdldE5vbkNvbnN0YW50T3BlcmFuZChDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFt
ZS0+dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVlKCk7IH0KK2lubGluZSBKU1ZhbHVlIGdldE9w
ZXJhbmQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7IHJl
dHVybiBjYWxsRnJhbWUtPnIob3BlcmFuZCkuanNWYWx1ZSgpOyB9CiAKICNkZWZpbmUgTExJTlRf
UkVUVVJOX1RXTyhmaXJzdCwgc2Vjb25kKSBkbyB7ICAgICAgIFwKICAgICAgICAgcmV0dXJuIGVu
Y29kZVJlc3VsdChmaXJzdCwgc2Vjb25kKTsgICAgICAgIFwKQEAgLTE1NzEsNyArMTU3Miw3IEBA
IGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgZ2VuZXJpY0NhbGwoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIENhbGxGcmFtZSogY2FsbEZyYW1lCiAgICAgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSA9IGNh
bGxGcmFtZSAtIGJ5dGVjb2RlLm1fYXJndjsKICAgICAKICAgICBjYWxsZWVGcmFtZS0+c2V0QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYnl0ZWNvZGUubV9hcmdjKTsKLSAgICBjYWxsZWVGcmFt
ZS0+dW5jaGVja2VkUihDYWxsRnJhbWVTbG90OjpjYWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKKyAg
ICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSkgPSBjYWxsZWVBc1ZhbHVlOwogICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFt
ZShjYWxsRnJhbWUpOwogICAgIAogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEoY29kZUJsb2NrKTsKQEAgLTE2ODksNyArMTY5MCw3IEBAIGlubGluZSBTbG93UGF0aFJldHVy
blR5cGUgdmFyYXJnc1NldHVwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlv
bioKICAgICAgICAgc2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWVBbmRTZXRUaGlzKGdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLCBjYWxsZWVGcmFtZSwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVj
b2RlLm1fdGhpc1ZhbHVlKSwgdm0udmFyYXJnc0xlbmd0aCk7CiAKICAgICBjYWxsZWVGcmFtZS0+
c2V0Q2FsbGVyRnJhbWUoY2FsbEZyYW1lKTsKLSAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihD
YWxsRnJhbWVTbG90OjpjYWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKKyAgICBjYWxsZWVGcmFtZS0+
dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkgPSBjYWxs
ZWVBc1ZhbHVlOwogICAgIGNhbGxGcmFtZS0+c2V0Q3VycmVudFZQQyhwYyk7CiAKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgc2V0VXBDYWxsKGNhbGxlZUZyYW1lLCBraW5kLCBj
YWxsZWVBc1ZhbHVlKSk7CkBAIC0xNzI1LDcgKzE3MjYsNyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1
cm5UeXBlIGNvbW1vbkNhbGxFdmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVj
dGlvbgogICAgIAogICAgIGNhbGxlZUZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyhieXRlY29kZS5tX2FyZ2MpOwogICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFtZShjYWxs
RnJhbWUpOwotICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkgPSBjYWxsZWVBc1ZhbHVlOworICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CiAgICAgY2Fs
bGVlRnJhbWUtPnNldFJldHVyblBDKHJldHVyblBvaW50LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwog
ICAgIGNhbGxlZUZyYW1lLT5zZXRDb2RlQmxvY2sobnVsbHB0cik7CiAgICAgY2FsbEZyYW1lLT5z
ZXRDdXJyZW50VlBDKHBjKTsKQEAgLTE5MjYsNyArMTkyNyw3IEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9wcm9maWxlX2NhdGNoKQogCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5h
czxPcENhdGNoPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29k
ZUJsb2NrKTsKLSAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmls
ZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChb
Jl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewogICAgICAgICBw
cm9maWxlLm1fYnVja2V0c1swXSA9IEpTVmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIocHJvZmlsZS5tX29wZXJhbmQpLmpzVmFsdWUoKSk7CiAgICAgfSk7CiAKQEAgLTE5NTcsMTEg
KzE5NTgsMTI0IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9vdXRfb2ZfbGluZV9q
dW1wX3RhcmdldCkKICAgICBMTElOVF9FTkRfSU1QTCgpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcGNvZGU+CitzdGF0aWMgdm9pZCBoYW5kbGVWYXJhcmdzQ2hlY2twb2ludChWTSYgdm0sIENh
bGxGcmFtZSogY2FsbEZyYW1lLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBP
cGNvZGUmIGJ5dGVjb2RlLCBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZSYgc2lkZVN0YXRlKQor
eworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICB1bnNpZ25l
ZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHNpZGVTdGF0ZS50bXBzW09wY29kZTo6YXJn
Q291bnRJbmNsdWRpbmdUaGlzXS5hc1VJbnQzMigpOworICAgIHVuc2lnbmVkIGZpcnN0VmFyQXJn
ID0gYnl0ZWNvZGUubV9maXJzdFZhckFyZzsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFy
Z3M7CisgICAgYXJncy5maWxsKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSwgWyZdIChK
U1ZhbHVlKiBidWZmZXIpIHsKKyAgICAgICAgbG9hZFZhcmFyZ3MoZ2xvYmFsT2JqZWN0LCBidWZm
ZXIsIGNhbGxGcmFtZS0+cihieXRlY29kZS5tX2FyZ3VtZW50cykuanNWYWx1ZSgpLCBmaXJzdFZh
ckFyZywgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsKKyAgICB9KTsKKyAgICBpZiAo
YXJncy5oYXNPdmVyZmxvd2VkKCkpIHsKKyAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKworICAgIEpTVmFsdWUgcmVzdWx0
OworICAgIGlmIChPcGNvZGU6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzKQorICAg
ICAgICByZXN1bHQgPSBjYWxsKGdsb2JhbE9iamVjdCwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5
dGVjb2RlLm1fY2FsbGVlKSwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fdGhpc1Zh
bHVlKSwgYXJncywgIiIpOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ID0gY29uc3RydWN0KGds
b2JhbE9iamVjdCwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fY2FsbGVlKSwgZ2V0
T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fdGhpc1ZhbHVlKSwgYXJncywgIiIpOworCisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKyAgICBjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIoYnl0ZWNvZGUubV9kc3QpID0gcmVzdWx0OworfQorCitpbmxpbmUgU2xvd1BhdGhS
ZXR1cm5UeXBlIGRpc3BhdGNoVG9OZXh0SW5zdHJ1Y3Rpb24oQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEluc3RydWN0aW9uU3RyZWFtOjpSZWYgcGMpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWNvZGVC
bG9jay0+dm0oKS5leGNlcHRpb25Gb3JJbnNwZWN0aW9uKCkpOworICAgIGlmIChPcHRpb25zOjpm
b3JjZU9TUkV4aXRUb0xMSW50KCkgfHwgY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6
SW50ZXJwcmV0ZXJUaHVuaykgeworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogbmV4dFBDID0g
cGMubmV4dCgpLnB0cigpOworICAgICAgICBhdXRvIG5leHRCeXRlY29kZSA9IExMSW50OjpnZXRD
b2RlUHRyPEpTRW50cnlQdHJUYWc+KCpwYy5uZXh0KCkucHRyKCkpOworICAgICAgICByZXR1cm4g
ZW5jb2RlUmVzdWx0KG5leHRQQywgbmV4dEJ5dGVjb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwor
ICAgIH0KKworI2lmIEVOQUJMRShKSVQpCisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgp
ID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICBCeXRlY29kZUluZGV4IG5leHRCeXRlY29k
ZUluZGV4ID0gcGMubmV4dCgpLmluZGV4KCk7CisgICAgYXV0byBuZXh0Qnl0ZWNvZGUgPSBjb2Rl
QmxvY2stPmppdENvZGVNYXAoKS5maW5kKG5leHRCeXRlY29kZUluZGV4KTsKKyAgICByZXR1cm4g
ZW5jb2RlUmVzdWx0KG51bGxwdHIsIG5leHRCeXRlY29kZS5leGVjdXRhYmxlQWRkcmVzcygpKTsK
KyNlbmRpZgorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2V4dGVybiAi
QyIgU2xvd1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0X2Zyb21f
aW5saW5lZF9jYWxsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBFbmNvZGVkSlNWYWx1ZSByZXN1bHQp
Cit7CisgICAgLy8gU2luY2UgYWxsIG91ciBjYWxsaW5nIGNoZWNrcG9pbnRzIGRvIHJpZ2h0IG5v
dyBpcyBtb3ZlIHJlc3VsdCBpbnRvIG91ciBkZXN0IHdlIGNhbiBqdXN0IGRvIHRoYXQgaGVyZSBh
bmQgcmV0dXJuLgorICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKTsKKyAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CisgICAgU2xvd1BhdGhGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2tw
b2ludE9TUkV4aXRTaWRlU3RhdGU+IHNpZGVTdGF0ZSA9IHZtLmZpbmRDaGVja3BvaW50T1NSU2lk
ZVN0YXRlKGNhbGxGcmFtZSk7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gc2lk
ZVN0YXRlLT5ieXRlY29kZUluZGV4OworICAgIGF1dG8gcGMgPSBjb2RlQmxvY2stPmluc3RydWN0
aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpOworCisgICAgYXV0byBvcGNvZGUgPSBwYy0+b3Bjb2Rl
SUQoKTsKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOiB7
CisgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihwYy0+YXM8T3BDYWxsVmFyYXJncz4oKS5t
X2RzdCkgPSBKU1ZhbHVlOjpkZWNvZGUocmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6IHsKKyAgICAgICAgY2FsbEZyYW1lLT51bmNo
ZWNrZWRSKHBjLT5hczxPcENvbnN0cnVjdFZhcmFyZ3M+KCkubV9kc3QpID0gSlNWYWx1ZTo6ZGVj
b2RlKHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvLyBvcF90YWlsX2NhbGxf
dmFyYXJncyBzaG91bGQgbmV2ZXIgcmV0dXJuIGlmIHRoZSB0aGluZyBpdCB3YXMgY2FsbGluZyB3
YXMgaW5saW5lZC4KKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZGlzcGF0Y2hUb05l
eHRJbnN0cnVjdGlvbihjb2RlQmxvY2ssIHBjKTsKK30KKworZXh0ZXJuICJDIiBTbG93UGF0aFJl
dHVyblR5cGUgc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIEVuY29kZWRKU1ZhbHVlIC8qIG5lZWRlZCBmb3IgY0NhbGwyIGluIENMb29wICovKQorewor
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICBW
TSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CisgICAgU2xvd1BhdGhGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGNhbGxGcmFtZSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3Rh
dGU+IHNpZGVTdGF0ZSA9IHZtLmZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRlKGNhbGxGcmFtZSk7
CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gc2lkZVN0YXRlLT5ieXRlY29kZUlu
ZGV4OworICAgIEFTU0VSVChieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSk7CisKKyAgICBhdXRv
IHBjID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KTsKKworICAg
IGF1dG8gb3Bjb2RlID0gcGMtPm9wY29kZUlEKCk7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAg
ICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICAgICAgaGFuZGxlVmFyYXJnc0NoZWNrcG9pbnQo
dm0sIGNhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBwYy0+YXM8T3BDYWxsVmFyYXJncz4oKSwgKnNp
ZGVTdGF0ZS5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY29uc3RydWN0X3Zh
cmFyZ3M6CisgICAgICAgIGhhbmRsZVZhcmFyZ3NDaGVja3BvaW50KHZtLCBjYWxsRnJhbWUsIGds
b2JhbE9iamVjdCwgcGMtPmFzPE9wQ29uc3RydWN0VmFyYXJncz4oKSwgKnNpZGVTdGF0ZS5nZXQo
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6CisgICAg
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0UocGMubmV4dCgpLT5vcGNvZGVJRCgpID09IG9wX3JldCB8
fCBwYy5uZXh0KCktPm9wY29kZUlEKCkgPT0gb3Bfam1wLCAiV2Ugc3Ryb25nbHkgYXNzdW1lIGFs
bCB0YWlsIGNhbGxzIGFyZSBmb2xsb3dlZCBieSBhbiBvcF9yZXQgKG9yIHNvbWV0aW1lcyBhIGpt
cCB0byBhIHJldCkuIik7CisgICAgICAgIGhhbmRsZVZhcmFyZ3NDaGVja3BvaW50KHZtLCBjYWxs
RnJhbWUsIGdsb2JhbE9iamVjdCwgcGMtPmFzPE9wVGFpbENhbGxWYXJhcmdzPigpLCAqc2lkZVN0
YXRlLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIGVuY29kZVJlc3Vs
dChyZXR1cm5Ub1Rocm93KHZtKSwgMCk7CisKKyAgICByZXR1cm4gZGlzcGF0Y2hUb05leHRJbnN0
cnVjdGlvbihjb2RlQmxvY2ssIHBjKTsKK30KKwogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5
cGUgbGxpbnRfdGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IoVk0qIHZtLCBQcm90b0NhbGxGcmFt
ZSogcHJvdG9GcmFtZSkKIHsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHZtLT50b3BDYWxs
RnJhbWU7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKLQogICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBudWxscHRyOwogICAgIGlmIChjYWxsRnJh
bWUpCiAgICAgICAgIGdsb2JhbE9iamVjdCA9IGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVj
dCgqdm0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xv
d1BhdGhzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaApp
bmRleCAyZmYyOGIwMDZiYzIyMzMzMGNjNjc4NjVhMTY3OTRhOTBlN2U3YWFlLi43Yzc1ZGIzYmY0
OTlhNDRkNTBhZGI5MDE4Y2YxZTZlOWRkYTUwNWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaApAQCAtMTM2LDYgKzEzNiw4IEBAIExMSU5UX1NMT1df
UEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfc3VwZXJfc2FtcGxlcl9iZWdpbik7CiBMTElOVF9T
TE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3N1cGVyX3NhbXBsZXJfZW5kKTsKIExMSU5U
X1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfb3V0X29mX2xpbmVfanVtcF90YXJnZXQp
OwogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdGhyb3dfc3RhY2tfb3ZlcmZs
b3dfZXJyb3IoVk0qLCBQcm90b0NhbGxGcmFtZSopIFdURl9JTlRFUk5BTDsKK2V4dGVybiAiQyIg
U2xvd1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0KENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBFbmNvZGVkSlNWYWx1ZSB1bnVzZWQpIFdURl9JTlRFUk5BTDsKK2V4dGVy
biAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0X2Zy
b21faW5saW5lZF9jYWxsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBFbmNvZGVkSlNWYWx1ZSBjYWxs
UmVzdWx0KSBXVEZfSU5URVJOQUw7CiAjaWYgRU5BQkxFKENfTE9PUCkKIGV4dGVybiAiQyIgU2xv
d1BhdGhSZXR1cm5UeXBlIGxsaW50X3N0YWNrX2NoZWNrX2F0X3ZtX2VudHJ5KFZNKiwgUmVnaXN0
ZXIqKSBXVEZfSU5URVJOQUw7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQppbmRleCBhNzMyNTliOWUwMWU1ZmQ1MmFi
OGU4NzlmNDU2YjQ3MzVjYzNkNDE4Li40ZjdlMzg3ZTU5ZGI2YTdjMmMyYzg1NTY5NDQ1MzE0OTU2
YmE1YWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlci5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtCkBAIC0xMTE4LDcgKzExMTgsNyBAQCBtYWNybyBnZXR0ZXJTZXR0ZXJP
U1JFeGl0UmV0dXJuUG9pbnQob3BOYW1lLCBzaXplKQogICAgIGRlZmluZU9TUkV4aXRSZXR1cm5M
YWJlbChvcE5hbWUsIHNpemUpCiAKICAgICByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkK
LSAgICBsb2FkaSBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIFRhZ09mZnNldFtjZnJdLCBQ
QworICAgIGxvYWRpIExMSW50UmV0dXJuUENbY2ZyXSwgUEMKIGVuZAogCiBtYWNybyBhcnJheVBy
b2ZpbGUob2Zmc2V0LCBjZWxsQW5kSW5kZXhpbmdUeXBlLCBtZXRhZGF0YSwgc2NyYXRjaCkKQEAg
LTE4NjksMTMgKzE4NjksMTcgQEAgZW5kKQogY2FsbE9wKGNvbnN0cnVjdCwgT3BDb25zdHJ1Y3Qs
IHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKSBlbmQpCiAKIAot
bWFjcm8gZG9DYWxsVmFyYXJncyhvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3Bh
dGNoLCBmcmFtZVNsb3dQYXRoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCi0gICAgY2FsbFNsb3dQ
YXRoKGZyYW1lU2xvd1BhdGgpCittYWNybyBicmFuY2hJZkV4Y2VwdGlvbihleGNlcHRpb25UYXJn
ZXQpCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQzCiAgICAgbG9hZHAgQ29kZUJsb2NrOjpt
X3ZtW3QzXSwgdDMKICAgICBidHB6IFZNOjptX2V4Y2VwdGlvblt0M10sIC5ub0V4Y2VwdGlvbgot
ICAgIGptcCBfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZQotLm5vRXhjZXB0
aW9uOgorICAgIGptcCBleGNlcHRpb25UYXJnZXQKKy5ub0V4Y2VwdGlvbjogICAgCitlbmQKKwor
bWFjcm8gZG9DYWxsVmFyYXJncyhvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3Bh
dGNoLCBmcmFtZVNsb3dQYXRoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCisgICAgY2FsbFNsb3dQ
YXRoKGZyYW1lU2xvd1BhdGgpCisgICAgYnJhbmNoSWZFeGNlcHRpb24oX2xsaW50X3Rocm93X2Zy
b21fc2xvd19wYXRoX3RyYW1wb2xpbmUpCiAgICAgIyBjYWxsZWVGcmFtZSBpbiByMQogICAgIGlm
IEpTVkFMVUU2NAogICAgICAgICBtb3ZlIHIxLCBzcApAQCAtMjAzMCw2ICsyMDM0LDQwIEBAIG9w
KGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lLCBtYWNybyAoKQog
ZW5kKQogCiAKK29wKGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBv
bGluZSwgbWFjcm8gKCkKKyAgICBpZiBKU1ZBTFVFNjQgYW5kIG5vdCAoQ19MT09QIG9yIENfTE9P
UF9XSU4pCisgICAgICAgIHJlc3RvcmVTdGFja1BvaW50ZXJBZnRlckNhbGwoKQorCisgICAgICAg
ICMgTWFrZSBzdXJlIHdlIG1vdmUgcjAgdG8gYTEgZmlyc3Qgc2luY2UgcjAgbWlnaHQgYmUgdGhl
IHNhbWUgYXMgYTAsIGZvciBpbnN0YW5jZSwgb24gYXJtLgorICAgICAgICBtb3ZlIHIwLCBhMQor
ICAgICAgICBtb3ZlIGNmciwgYTAKKyAgICAgICAgIyBXZSBkb24ndCBjYWxsIHNhdmVTdGF0ZUZv
ckNDYWxsKCkgYmVjYXVzZSB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBieXRlY29kZUluZGV4IGZy
b20gb3VyIHNpZGUgc3RhdGUuCisgICAgICAgIGNDYWxsMihfc2xvd19wYXRoX2NoZWNrcG9pbnRf
b3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwpCisgICAgICAgIHJlc3RvcmVTdGF0ZUFmdGVyQ0Nh
bGwoKQorICAgICAgICBicmFuY2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3Bh
dGhfdHJhbXBvbGluZSkKKyAgICAgICAgam1wIHIxLCBKU0VudHJ5UHRyVGFnCisgICAgZWxzZQor
ICAgICAgICBub3RTdXBwb3J0ZWQoKQorICAgIGVuZAorZW5kKQorCitvcChjaGVja3BvaW50X29z
cl9leGl0X3RyYW1wb2xpbmUsIG1hY3JvICgpCisgICAgIyBGSVhNRTogV2UgY2FuIHByb2JhYmx5
IGRpc3BhdGNoIHRvIHRoZSBjaGVja3BvaW50IGhhbmRsZXIgZGlyZWN0bHkgYnV0IHRoaXMgd2Fz
IGVhc2llciAKKyAgICAjIGFuZCBwcm9iYWJseSBkb2Vzbid0IG1hdHRlciBmb3IgcGVyZm9ybWFu
Y2UuCisgICAgaWYgSlNWQUxVRTY0IGFuZCBub3QgKENfTE9PUCBvciBDX0xPT1BfV0lOKQorICAg
ICAgICByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKKworICAgICAgICBtb3ZlIGNmciwg
YTAKKyAgICAgICAgIyBXZSBkb24ndCBjYWxsIHNhdmVTdGF0ZUZvckNDYWxsKCkgYmVjYXVzZSB3
ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBieXRlY29kZUluZGV4IGZyb20gb3VyIHNpZGUgc3RhdGUu
CisgICAgICAgIGNDYWxsMihfc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQpCisgICAgICAg
IHJlc3RvcmVTdGF0ZUFmdGVyQ0NhbGwoKQorICAgICAgICBicmFuY2hJZkV4Y2VwdGlvbihfbGxp
bnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSkKKyAgICAgICAgam1wIHIxLCBKU0Vu
dHJ5UHRyVGFnCisgICAgZWxzZQorICAgICAgICBub3RTdXBwb3J0ZWQoKQorICAgIGVuZAorZW5k
KQorCiAjIExhc3RseSwgbWFrZSBzdXJlIHRoYXQgd2UgY2FuIGxpbmsgZXZlbiB0aG91Z2ggd2Ug
ZG9uJ3Qgc3VwcG9ydCBhbGwgb3Bjb2Rlcy4KICMgVGhlc2Ugb3Bjb2RlcyBzaG91bGQgbmV2ZXIg
YXJpc2Ugd2hlbiB1c2luZyBMTEludCBvciBlaXRoZXIgSklULiBXZSBhc3NlcnQKICMgYXMgbXVj
aC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyMzJfNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIzMl82NC5hc20KaW5kZXggOTNjMjkwMjViMGQ5MzA1ZDk5NTcxMDNlMTY1YjdhYTg5
MTRjYmIxZC4uMDdjMmVlOWQyZGYwZGVhYzkzZTNiNjJmNmM2MGUzYTVkYjcyN2QxYyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82
NC5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIzMl82NC5hc20KQEAgLTE0Miw3ICsxNDIsNyBAQCBlbmQKIG1hY3JvIGNhbGxTbG93UGF0aChz
bG93UGF0aCkKICAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCiAgICAgbW92ZSBjZnIsIGEwCi0g
ICAgbW92ZSBQQywgYTEKKyAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCiAgICAgY0NhbGwyKHNs
b3dQYXRoKQogICAgIHJlc3RvcmVTdGF0ZUFmdGVyQ0NhbGwoKQogZW5kCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbSBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCmluZGV4
IDBmN2U2YzNjNTcxMTc3YmFiZjNjOTRlNzE4ZGFmMzk1MjUzYzk5MGUuLmI2ZWU5OWUzNjNhZjFm
ZmQ0MWI5MTI1NDRjNTBkZTkyZjFhNGYyZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCkBAIC0yMyw2ICsyMywxMyBA
QAogCiAKICMgVXRpbGl0aWVzLgorbWFjcm8gc3RvcmVQQygpCisgICAgc3RvcmVpIFBDLCBMTElu
dFJldHVyblBDW2Nmcl0KK2VuZAorCittYWNybyBsb2FkUEMoKQorICAgIGxvYWRpIExMSW50UmV0
dXJuUENbY2ZyXSwgUEMKK2VuZAogCiBtYWNybyBnZXR1T3BlcmFuZE5hcnJvdyhvcGNvZGVTdHJ1
Y3QsIGZpZWxkTmFtZSwgZHN0KQogICAgIGxvYWRiIGNvbnN0ZXhwciAlb3Bjb2RlU3RydWN0JV8l
ZmllbGROYW1lJV9pbmRleCArIE9wY29kZUlETmFycm93U2l6ZVtQQiwgUEMsIDFdLCBkc3QKQEAg
LTc0LDcgKzgxLDcgQEAgZW5kCiAKICMgQWZ0ZXIgY2FsbGluZywgY2FsbGluZyBieXRlY29kZSBp
cyBjbGFpbWluZyBpbnB1dCByZWdpc3RlcnMgYXJlIG5vdCB1c2VkLgogbWFjcm8gZGlzcGF0Y2hB
ZnRlckNhbGwoc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCkKLSAgICBsb2FkaSBBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyArIFRhZ09mZnNldFtjZnJdLCBQQworICAgIGxvYWRQQygpCiAg
ICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2luc3Ry
dWN0aW9uc1Jhd1BvaW50ZXJbUEJdLCBQQgogICAgIGdldChzaXplLCBvcGNvZGVTdHJ1Y3QsIG1f
ZHN0LCB0MSkKQEAgLTM3Miw3ICszNzksNyBAQCBlbmQKIAogIyBDYWxsIGEgc2xvdyBwYXRoIGZv
ciBjYWxsIG9wY29kZXMuCiBtYWNybyBjYWxsQ2FsbFNsb3dQYXRoKHNsb3dQYXRoLCBhY3Rpb24p
Ci0gICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIFRhZ09mZnNldFtj
ZnJdCisgICAgc3RvcmVQQygpCiAgICAgcHJlcGFyZVN0YXRlRm9yQ0NhbGwoKQogICAgIG1vdmUg
Y2ZyLCBhMAogICAgIG1vdmUgUEMsIGExCkBAIC0zODEsMjAgKzM4OCwyMCBAQCBtYWNybyBjYWxs
Q2FsbFNsb3dQYXRoKHNsb3dQYXRoLCBhY3Rpb24pCiBlbmQKIAogbWFjcm8gY2FsbFRyYXBIYW5k
bGVyKHRocm93SGFuZGxlcikKLSAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzICsgVGFnT2Zmc2V0W2Nmcl0KKyAgICBzdG9yZVBDKCkKICAgICBwcmVwYXJlU3RhdGVGb3JD
Q2FsbCgpCiAgICAgbW92ZSBjZnIsIGEwCiAgICAgbW92ZSBQQywgYTEKICAgICBjQ2FsbDIoX2xs
aW50X3Nsb3dfcGF0aF9oYW5kbGVfdHJhcHMpCiAgICAgYnRwbnogcjAsIHRocm93SGFuZGxlcgot
ICAgIGxvYWRpIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgVGFnT2Zmc2V0W2Nmcl0sIFBD
CisgICAgbG9hZGkgTExJbnRSZXR1cm5QQ1tjZnJdLCBQQwogZW5kCiAKIG1hY3JvIGNoZWNrU3dp
dGNoVG9KSVRGb3JMb29wKCkKICAgICBjaGVja1N3aXRjaFRvSklUKAogICAgICAgICAxLAogICAg
ICAgICBtYWNybygpCi0gICAgICAgICAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzICsgVGFnT2Zmc2V0W2Nmcl0KKyAgICAgICAgICAgIHN0b3JlUEMoKQogICAgICAgICAg
ICAgcHJlcGFyZVN0YXRlRm9yQ0NhbGwoKQogICAgICAgICAgICAgbW92ZSBjZnIsIGEwCiAgICAg
ICAgICAgICBtb3ZlIFBDLCBhMQpAQCAtNDAzLDcgKzQxMCw3IEBAIG1hY3JvIGNoZWNrU3dpdGNo
VG9KSVRGb3JMb29wKCkKICAgICAgICAgICAgIG1vdmUgcjEsIHNwCiAgICAgICAgICAgICBqbXAg
cjAsIEpTRW50cnlQdHJUYWcKICAgICAgICAgLnJlY292ZXI6Ci0gICAgICAgICAgICBsb2FkaSBB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIFRhZ09mZnNldFtjZnJdLCBQQworICAgICAgICAg
ICAgbG9hZFBDKCkKICAgICAgICAgZW5kKQogZW5kCiAKQEAgLTIwNDcsNyArMjA1NCw3IEBAIG1h
Y3JvIGNvbW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVw
YXJlQ2FsbCwgcHJvbG9ndWUpCiAgICAgICAgIGFkZHAgY2ZyLCB0MwogICAgICAgICBzdG9yZXEg
dDIsIENhbGxlZVt0M10KICAgICAgICAgZ2V0dShzaXplLCBvcGNvZGVTdHJ1Y3QsIG1fYXJnYywg
dDIpCi0gICAgICAgIHN0b3JlaSBQQywgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBUYWdP
ZmZzZXRbY2ZyXQorICAgICAgICBzdG9yZVBDKCkKICAgICAgICAgc3RvcmVpIHQyLCBBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyArIFBheWxvYWRPZmZzZXRbdDNdCiAgICAgICAgIG1vdmUgdDMs
IHNwCiAgICAgICAgIHByZXBhcmVDYWxsKCVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxs
TGlua0luZm8ubV9tYWNoaW5lQ29kZVRhcmdldFt0NV0sIHQyLCB0MywgdDQsIEpTRW50cnlQdHJU
YWcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgKaW5kZXggZmFkYTNkNjlk
YTU4OWY5N2I3MzYzZTMyYTkxOTQ1ZDdiYWU4MGRkNS4uOTQ5YjliMDkxYTlmNWEzNWNmMDVjZTRj
YWZlMjc0Mjg0MzBmMmE2ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJnTGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3Qu
aApAQCAtMTMzLDYgKzEzMywxNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIG92ZXJmbG93Q2hlY2tO
b3ROZWVkZWQoKSB7IGNsZWFyTmVlZHNPdmVyZmxvd0NoZWNrKCk7IH0KIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmaWxsKHNpemVfdCBjb3VudCwgY29uc3QgRnVu
Y3RvciYgZnVuYykKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9zaXplKTsKKyAgICAgICAgZW5z
dXJlQ2FwYWNpdHkoY291bnQpOworICAgICAgICBpZiAoQmFzZTo6aGFzT3ZlcmZsb3dlZCgpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX3NpemUgPSBjb3VudDsKKyAgICAgICAgZnVu
YyhyZWludGVycHJldF9jYXN0PEpTVmFsdWUqPigmc2xvdEZvcigwKSkpOworICAgIH0KKwogcHJp
dmF0ZToKICAgICB2b2lkIGV4cGFuZENhcGFjaXR5KCk7CiAgICAgdm9pZCBleHBhbmRDYXBhY2l0
eShpbnQgbmV3Q2FwYWNpdHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2FjaGVkVHlwZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVkVHlwZXMuY3BwCmluZGV4IGIzYzczY2ZmMjg0MWRjODkyNTExOTdhZTA3ZTI0MzMxYjZmMGU5
MGMuLmE4MjY2MWEwNmI1OTI0NjFmZjJhNjdmNmNmNDBlMmIxOTZmNTAxOGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKQEAgLTE3OTQsNiArMTc5
NCw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBuZWVkc0NsYXNzRmllbGRJbml0aWFsaXplcigp
IGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXI7IH0KICAgICB1bnNp
Z25lZCBldmFsQ29udGV4dFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2V2YWxDb250ZXh0VHlwZTsg
fQogICAgIHVuc2lnbmVkIGhhc1RhaWxDYWxscygpIGNvbnN0IHsgcmV0dXJuIG1faGFzVGFpbENh
bGxzOyB9CisgICAgdW5zaWduZWQgaGFzQ2hlY2twb2ludHMoKSBjb25zdCB7IHJldHVybiBtX2hh
c0NoZWNrcG9pbnRzOyB9CiAgICAgdW5zaWduZWQgbGluZUNvdW50KCkgY29uc3QgeyByZXR1cm4g
bV9saW5lQ291bnQ7IH0KICAgICB1bnNpZ25lZCBlbmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBt
X2VuZENvbHVtbjsgfQogCkBAIC0xODI3LDYgKzE4MjgsNyBAQCBwcml2YXRlOgogICAgIHVuc2ln
bmVkIG1fZXZhbENvbnRleHRUeXBlIDogMjsKICAgICB1bnNpZ25lZCBtX2hhc1RhaWxDYWxscyA6
IDE7CiAgICAgdW5zaWduZWQgbV9jb2RlVHlwZSA6IDI7CisgICAgdW5zaWduZWQgbV9oYXNDaGVj
a3BvaW50cyA6IDE7CiAKICAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsKICAgICBTb3VyY2VQ
YXJzZU1vZGUgbV9wYXJzZU1vZGU7CkBAIC0yMDI1LDYgKzIwMjcsNyBAQCBBTFdBWVNfSU5MSU5F
IFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhEZWNvZGVyJiBkZWNvZGVyLCBT
dHJ1Y3R1cmUqCiAKICAgICAsIG1fZGlkT3B0aW1pemUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KE1p
eGVkVHJpU3RhdGUpKQogICAgICwgbV9hZ2UoMCkKKyAgICAsIG1faGFzQ2hlY2twb2ludHMoY2Fj
aGVkQ29kZUJsb2NrLmhhc0NoZWNrcG9pbnRzKCkpCiAKICAgICAsIG1fZmVhdHVyZXMoY2FjaGVk
Q29kZUJsb2NrLmZlYXR1cmVzKCkpCiAgICAgLCBtX3BhcnNlTW9kZShjYWNoZWRDb2RlQmxvY2su
cGFyc2VNb2RlKCkpCkBAIC0yMjE1LDYgKzIyMTgsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgQ2Fj
aGVkQ29kZUJsb2NrPENvZGVCbG9ja1R5cGU+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29u
cwogICAgIG1fcGFyc2VNb2RlID0gY29kZUJsb2NrLm1fcGFyc2VNb2RlOwogICAgIG1fY29kZUdl
bmVyYXRpb25Nb2RlID0gY29kZUJsb2NrLm1fY29kZUdlbmVyYXRpb25Nb2RlOwogICAgIG1fY29k
ZVR5cGUgPSBjb2RlQmxvY2subV9jb2RlVHlwZTsKKyAgICBtX2hhc0NoZWNrcG9pbnRzID0gY29k
ZUJsb2NrLm1faGFzQ2hlY2twb2ludHM7CiAKICAgICBtX21ldGFkYXRhLmVuY29kZShlbmNvZGVy
LCBjb2RlQmxvY2subV9tZXRhZGF0YS5nZXQoKSk7CiAgICAgbV9yYXJlRGF0YS5lbmNvZGUoZW5j
b2RlciwgY29kZUJsb2NrLm1fcmFyZURhdGEuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKaW5kZXggODc1YjMwMjdiMmM4Y2U4
NzZjOThhMjM1NmI0NzhjNmZlZTMwM2Y2MC4uMmEzM2JkMzM1NmRmY2E5NDQ0YWEwYmVmMmM3OGVl
NjliMmM3MDdkNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25TbG93UGF0aHMuY3BwCkBAIC05OCw4ICs5OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIEJF
R0lOX05PX1NFVF9QQygpOyAgICAgICAgICAgICAgICAgICAgXAogICAgIFNFVF9QQ19GT1JfU1RV
QlMoKQogCi0jZGVmaW5lIEdFVChvcGVyYW5kKSAoY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJh
bmQub2Zmc2V0KCkpKQotI2RlZmluZSBHRVRfQyhvcGVyYW5kKSAoY2FsbEZyYW1lLT5yKG9wZXJh
bmQub2Zmc2V0KCkpKQorI2RlZmluZSBHRVQob3BlcmFuZCkgKGNhbGxGcmFtZS0+dW5jaGVja2Vk
UihvcGVyYW5kKSkKKyNkZWZpbmUgR0VUX0Mob3BlcmFuZCkgKGNhbGxGcmFtZS0+cihvcGVyYW5k
KSkKIAogI2RlZmluZSBSRVRVUk5fVFdPKGZpcnN0LCBzZWNvbmQpIGRvIHsgICAgICAgXAogICAg
ICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGZpcnN0LCBzZWNvbmQpOyAgICAgICAgXApAQCAtMTE1
OSw4ICsxMTU5LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV9sZXhpY2FsX2Vu
dmlyb25tZW50KQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxP
cENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKTsKLSAgICBpbnQgc2NvcGVSZWcgPSBieXRlY29k
ZS5tX3Njb3BlLm9mZnNldCgpOwotICAgIEpTU2NvcGUqIGN1cnJlbnRTY29wZSA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkUihzY29wZVJlZykuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSog
Y3VycmVudFNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJl
Z2lzdGVyOjpzY29wZSgpOwogICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxT
eW1ib2xUYWJsZSo+KEdFVF9DKGJ5dGVjb2RlLm1fc3ltYm9sVGFibGUpLmpzVmFsdWUoKSk7CiAg
ICAgSlNWYWx1ZSBpbml0aWFsVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2luaXRpYWxWYWx1ZSku
anNWYWx1ZSgpOwogICAgIEFTU0VSVChpbml0aWFsVmFsdWUgPT0ganNVbmRlZmluZWQoKSB8fCBp
bml0aWFsVmFsdWUgPT0ganNURFpWYWx1ZSgpKTsKQEAgLTExNzUsOCArMTE3NCw3IEBAIFNMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9wdXNoX3dpdGhfc2NvcGUpCiAgICAgSlNPYmplY3QqIG5ld1Nj
b3BlID0gR0VUX0MoYnl0ZWNvZGUubV9uZXdTY29wZSkuanNWYWx1ZSgpLnRvT2JqZWN0KGdsb2Jh
bE9iamVjdCk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKLSAgICBpbnQgc2NvcGVSZWcgPSBi
eXRlY29kZS5tX2N1cnJlbnRTY29wZS5vZmZzZXQoKTsKLSAgICBKU1Njb3BlKiBjdXJyZW50U2Nv
cGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc2NvcGVSZWcpLlJlZ2lzdGVyOjpzY29wZSgpOwor
ICAgIEpTU2NvcGUqIGN1cnJlbnRTY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29k
ZS5tX2N1cnJlbnRTY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgUkVUVVJOKEpTV2l0aFNj
b3BlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgY3VycmVudFNjb3BlLCBuZXdTY29wZSkpOwog
fQogCkBAIC0xMTg1LDcgKzExODMsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcmVzb2x2
ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWwpCiAgICAgQkVHSU4oKTsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wUmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVj
bEluRXZhbD4oKTsKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KTsKLSAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxG
cmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpKS5SZWdpc3Rlcjo6c2Nv
cGUoKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29k
ZS5tX3Njb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBKU1ZhbHVlIHJlc29sdmVkU2NvcGUg
PSBKU1Njb3BlOjpyZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsKGdsb2JhbE9i
amVjdCwgc2NvcGUsIGlkZW50KTsKIAogICAgIENIRUNLX0VYQ0VQVElPTigpOwpAQCAtMTE5OSw3
ICsxMTk3LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfc2NvcGUpCiAgICAg
YXV0byBieXRlY29kZSA9IHBjLT5hczxPcFJlc29sdmVTY29wZT4oKTsKICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CiAgICAgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOwotICAgIEpT
U2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUub2Zm
c2V0KCkpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1l
LT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIEpT
T2JqZWN0KiByZXNvbHZlZFNjb3BlID0gSlNTY29wZTo6cmVzb2x2ZShnbG9iYWxPYmplY3QsIHNj
b3BlLCBpZGVudCk7CiAgICAgLy8gUHJveHkgY2FuIHRocm93IGFuIGVycm9yIGhlcmUsIGUuZy4g
UHJveHkgaW4gd2l0aCBzdGF0ZW1lbnQncyBAdW5zY29wYWJsZXMuCiAgICAgQ0hFQ0tfRVhDRVBU
SU9OKCk7CkBAIC0xNDQ0LDcgKzE0NDIsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3
X2FycmF5X2J1ZmZlcikKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+
YXM8T3BOZXdBcnJheUJ1ZmZlcj4oKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5pc0NvbnN0YW50
UmVnaXN0ZXJJbmRleChieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRlcmZseS5vZmZzZXQoKSkpOwor
ICAgIEFTU0VSVChieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRlcmZseS5pc0NvbnN0YW50KCkpOwog
ICAgIEpTSW1tdXRhYmxlQnV0dGVyZmx5KiBpbW11dGFibGVCdXR0ZXJmbHkgPSBiaXR3aXNlX2Nh
c3Q8SlNJbW11dGFibGVCdXR0ZXJmbHkqPihHRVRfQyhieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRl
cmZseSkuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKICAgICBhdXRvJiBwcm9maWxlID0gYnl0ZWNvZGUu
bWV0YWRhdGEoY29kZUJsb2NrKS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGU7CiAKQEAgLTE0NjMs
NyArMTQ2MSw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfYXJyYXlfYnVmZmVyKQog
ICAgICAgICAvLyBXZSBhbHNvIGNhbm5vdCBhbGxvY2F0ZSBhIG5ldyBidXR0ZXJmbHkgZnJvbSBj
b21waWxhdGlvbiB0aHJlYWRzIHNpbmNlIGl0J3MgaW52YWxpZCB0byBhbGxvY2F0ZSBjZWxscyBm
cm9tCiAgICAgICAgIC8vIGEgY29tcGlsYXRpb24gdGhyZWFkLgogICAgICAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOwotICAgICAgICBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoYnl0ZWNv
ZGUubV9pbW11dGFibGVCdXR0ZXJmbHkub2Zmc2V0KCkpLnNldCh2bSwgY29kZUJsb2NrLCBpbW11
dGFibGVCdXR0ZXJmbHkpOworICAgICAgICBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoYnl0
ZWNvZGUubV9pbW11dGFibGVCdXR0ZXJmbHkpLnNldCh2bSwgY29kZUJsb2NrLCBpbW11dGFibGVC
dXR0ZXJmbHkpOwogICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcAppbmRleCA0
YmQxOTJhNmM3N2VmYzAyNmU3YTk1YTViN2JlYzcxMjQzNjc3ZTc4Li40N2IyNDc0MThjYTg4ZWZk
MWI3OGU2MzExYjY3NWQxZWZhNWE1ZmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcApAQCAtMzUsNiArMzUsMTEgQEAKIG5hbWVzcGFjZSBK
U0MgewogCiBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3QsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGNvbnN0IGNo
YXIqIGVycm9yTWVzc2FnZSkKK3sKKyAgICByZXR1cm4gY29uc3RydWN0KGdsb2JhbE9iamVjdCwg
Y29uc3RydWN0b3JPYmplY3QsIGNvbnN0cnVjdG9yT2JqZWN0LCBhcmdzLCBlcnJvck1lc3NhZ2Up
OworfQorCitKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3QsIEpTVmFsdWUgbmV3VGFyZ2V0LCBjb25zdCBBcmdM
aXN0JiBhcmdzLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpCiB7CiAgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKQEAgLTQ2LDEwICs1MSw5IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgY29uCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY29u
c3RydWN0KGdsb2JhbE9iamVjdCwgY29uc3RydWN0b3JPYmplY3QsIGNvbnN0cnVjdFR5cGUsIGNv
bnN0cnVjdERhdGEsIGFyZ3MsIGNvbnN0cnVjdG9yT2JqZWN0KSk7CisgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3Rvck9iamVjdCwg
Y29uc3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgYXJncywgbmV3VGFyZ2V0KSk7ICAKIH0KIAot
CiBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgY29uc3RydWN0b3JPYmplY3QsIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSwgY29uc3Qg
Q29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSwgY29uc3QgQXJnTGlzdCYgYXJncywgSlNWYWx1
ZSBuZXdUYXJnZXQpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5oCmluZGV4IGQwYWUwMGJh
MTFkN2NlZTI0ZGZmYWU5MTkxMTk2N2UwMmFhNmVkZTMuLmZiNjE5NzRhN2RiMzljNDkxZjlmOTNi
YWViNmNhYzEyNjIxZjNiYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbnN0cnVjdERhdGEuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b25zdHJ1Y3REYXRhLmgKQEAgLTYwLDYgKzYwLDggQEAgc3RydWN0IENvbnN0cnVjdERhdGEgewog
CiAvLyBDb252ZW5pZW5jZSB3cmFwcGVyIHNvIHlvdSBkb24ndCBuZWVkIHRvIGRlYWwgd2l0aCBD
YWxsRGF0YSBhbmQgQ2FsbFR5cGUgdW5sZXNzIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZW0uCiBK
U19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiwgSlNW
YWx1ZSBmdW5jdGlvbk9iamVjdCwgY29uc3QgQXJnTGlzdCYsIGNvbnN0IGNoYXIqIGVycm9yTWVz
c2FnZSk7CitKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgSlNWYWx1ZSBuZXdUYXJnZXQsIGNvbnN0IEFy
Z0xpc3QmLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpOworCiBKU19FWFBPUlRfUFJJVkFURSBK
U09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBjb25zdHJ1Y3Rvciwg
Q29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3RydWN0RGF0YSYsIGNvbnN0IEFyZ0xpc3QmLCBKU1Zh
bHVlIG5ld1RhcmdldCk7CiAKIEFMV0FZU19JTkxJTkUgSlNPYmplY3QqIGNvbnN0cnVjdChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0LCBDb25z
dHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUsIGNvbnN0IENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERh
dGEsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAppbmRleCBhNjc5NWRhMWVkY2NmMzEwMjJhYzJkZDlh
ZWZhZmQ0M2EwMWE1Yzg1Li40YjM0NjFkZTIyZTc2ZjdkYmUzMTgzOTQyNDVhOTNjNTc1MDlmMzg3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVu
dHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50
cy5jcHAKQEAgLTEzNywyMCArMTM3LDE5IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRzOjp1bm1hcEFy
Z3VtZW50KFZNJiB2bSwgdW5zaWduZWQgaW5kZXgpCiAgICAgbV9tYXBwZWRBcmd1bWVudHMuYXQo
aW5kZXgsIGludGVybmFsTGVuZ3RoKCkpID0gdHJ1ZTsKIH0KIAotdm9pZCBEaXJlY3RBcmd1bWVu
dHM6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBEaXJlY3RBcmd1bWVudHM6OmNvcHlUb0Fy
Z3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVsZW1l
bnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBpZiAoIW1f
bWFwcGVkQXJndW1lbnRzKSB7CiAgICAgICAgIHVuc2lnbmVkIGxpbWl0ID0gc3RkOjptaW4obGVu
Z3RoICsgb2Zmc2V0LCBtX2xlbmd0aCk7CiAgICAgICAgIHVuc2lnbmVkIGk7Ci0gICAgICAgIFZp
cnR1YWxSZWdpc3RlciBzdGFydCA9IGZpcnN0RWxlbWVudERlc3QgLSBvZmZzZXQ7CiAgICAgICAg
IGZvciAoaSA9IG9mZnNldDsgaSA8IGxpbWl0OyArK2kpCi0gICAgICAgICAgICBjYWxsRnJhbWUt
PnIoc3RhcnQgKyBpKSA9IHN0b3JhZ2UoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgIGZpcnN0RWxl
bWVudERlc3RbaSAtIG9mZnNldF0gPSBzdG9yYWdlKClbaV0uZ2V0KCk7CiAgICAgICAgIGZvciAo
OyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoc3RhcnQgKyBpKSA9
IGdldChnbG9iYWxPYmplY3QsIGkpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0g
b2Zmc2V0XSA9IGdldChnbG9iYWxPYmplY3QsIGkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgR2VuZXJpY0FyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2Fs
bEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgR2VuZXJpY0Fy
Z3VtZW50czo6Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgZmlyc3RFbGVtZW50RGVzdCwg
b2Zmc2V0LCBsZW5ndGgpOwogfQogCiB1bnNpZ25lZCBEaXJlY3RBcmd1bWVudHM6Om1hcHBlZEFy
Z3VtZW50c1NpemUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGlyZWN0QXJndW1lbnRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RB
cmd1bWVudHMuaAppbmRleCAwYTZiMWEwNjYwOTBlMmNhNWY1NmY1MGE5YzUzYTJjZmNlNzcyZTBh
Li44ZDk2NDJhMmM5NDA0MDgwYjkxM2FjMjcwY2QwMTNjMzllY2RhODE3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaApAQCAtMTQ0LDcgKzE0
NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEdlbmVyaWNBcmd1bWVudHM8RGlyZWN0QXJn
dW1lbnRzPjo6aXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcihpbmRleCwgbV9sZW5ndGgpOwog
ICAgIH0KIAotICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZy
YW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAppbmRleCBiMzFiNzBhYmQwMGNlZWFm
NWViYjdlZTFkNDY3ZGE0ODg3MGQ1MWMxLi4wNzRjMjE2MmQ4ZGExNjQ3MDZmNDAwNGJkYWIzZGFl
ZWIyNzJjYmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5l
cmljQXJndW1lbnRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJp
Y0FyZ3VtZW50cy5oCkBAIC01OSw3ICs1OSw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNldE1v
ZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKFZNJiwgdW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGxl
bmd0aCk7CiAgICAgYm9vbCBpc01vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKHVuc2lnbmVkIGlu
ZGV4LCB1bnNpZ25lZCBsZW5ndGgpOwogCi0gICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoSlNHbG9i
YWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgY29weVRvQXJndW1l
bnRzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgdXNpbmcgTW9kaWZpZWRBcmd1bWVudHNQ
dHIgPSBDYWdlZEJhcnJpZXJQdHI8R2lnYWNhZ2U6OlByaW1pdGl2ZSwgYm9vbD47CiAgICAgTW9k
aWZpZWRBcmd1bWVudHNQdHIgbV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3I7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5l
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGlu
ZXMuaAppbmRleCAyMTgyYTYyYjEzMDM0M2FmNTY3MjE3MzYzYTNmNWMxYjg4NjE4MWZmLi5lMGFh
YmY1ZjJlZTE4NWI3ZDEzMzE2MDM3ZDhjMWQ4ODg0MjQ2ODUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKQEAg
LTI5Nyw3ICsyOTcsNyBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmlzTW9kaWZpZWRB
cmd1bWVudERlc2NyaXB0b3IodW5zaWduZWQgaW5kZXgsIHVuc2lnbgogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUeXBlPgotdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVu
dHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZp
cnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCkKK3ZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Y29weVRvQXJndW1lbnRzKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBA
IC0zMDUsOSArMzA1LDkgQEAgdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1
bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEYKICAgICBUeXBlKiB0aGlz
T2JqZWN0ID0gc3RhdGljX2Nhc3Q8VHlwZSo+KHRoaXMpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBpZiAodGhpc09iamVjdC0+aXNNYXBwZWRB
cmd1bWVudChpICsgb2Zmc2V0KSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1l
bnREZXN0ICsgaSkgPSB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaSArIG9mZnNldCk7Cisg
ICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0gdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlj
a2x5KGkgKyBvZmZzZXQpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+
cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBnZXQoZ2xvYmFsT2JqZWN0LCBpICsgb2Zmc2V0KTsK
KyAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSBnZXQoZ2xvYmFsT2JqZWN0LCBpICsg
b2Zmc2V0KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
Y3BwCmluZGV4IDQ0YzdlNTIwZjFjMGEyNDBhOGI2NjY1YTI3NGE1MTQ0NTkzODc2NjAuLjZkMDc1
OTE3MTFlZWRiYzI4ZTBlNGRhNzg0OTgyMmFiOGQ2NmY1ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCkBAIC0xMjMwLDcgKzEyMzAsNyBAQCB2b2lkIEpTQXJy
YXk6OmZpbGxBcmdMaXN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyJiBhcgogICAgICAgICBhcmdzLmFwcGVuZChnZXQoZ2xvYmFsT2JqZWN0LCBpKSk7
CiB9CiAKLXZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVt
ZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIEpTQXJyYXk6
OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBm
aXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwpAQCAtMTI2OSw3ICsxMjY5LDcgQEAgdm9pZCBKU0FycmF5Ojpjb3B5
VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUKICAgICAgICAgICAgIGRvdWJsZSB2ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzRG91Ymxl
KCkuYXQodGhpcywgaSk7CiAgICAgICAgICAgICBpZiAodiAhPSB2KQogICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpIC0g
b2Zmc2V0KSA9IEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHYpOworICAgICAgICAg
ICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2Rl
QXNEb3VibGUsIHYpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEyOTQs
MTEgKzEyOTQsMTEgQEAgdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUKICAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ldOwogICAgICAgICBpZiAoIXYpCiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpIC0gb2Zm
c2V0KSA9IHYuZ2V0KCk7CisgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaSAtIG9mZnNldF0gPSB2
LmdldCgpOwogICAgIH0KICAgICAKICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSAtIG9mZnNldCkgPSBnZXQoZ2xv
YmFsT2JqZWN0LCBpKTsKKyAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IGdl
dChnbG9iYWxPYmplY3QsIGkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2
b2lkKCkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaApp
bmRleCAzMTc5NDljNTcyYTExYjc1YWRjMTgzYWM5ZTQxNDRmNjZjZjZhYjUwLi4zMTE2NWI1ZmY0
OTI1NGNjMWE2YzQ3OTAyYjc5MTBhYzRhN2Q5YmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheS5oCkBAIC0xNjMsNyArMTYzLDcgQEAgcHVibGljOgogICAgIH0KIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEFyZ0xpc3QoSlNHbG9iYWxPYmplY3QqLCBNYXJr
ZWRBcmd1bWVudEJ1ZmZlciYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29weVRvQXJn
dW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0
RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsK
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNJdGVyYXRvclByb3RvY29sRmFzdEFuZE5v
bk9ic2VydmFibGUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwCmluZGV4IGUzMmU5NDk3ZDQ3ODI5NTAzM2RhYTk5
YTU5MzZkZWExOWExYzQ5YzAuLmU0OTA5NzU2MTZkYWQzOTExNDIzODJjOTkzZTc4ZDEyYzE5MTFj
MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxl
QnV0dGVyZmx5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0
YWJsZUJ1dHRlcmZseS5jcHAKQEAgLTQ2LDEzICs0NiwxMyBAQCB2b2lkIEpTSW1tdXRhYmxlQnV0
dGVyZmx5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5jb250aWd1b3VzKCku
ZGF0YSgpLCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKIH0KIAotdm9pZCBKU0ltbXV0YWJs
ZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgSlNJbW11dGFibGVCdXR0ZXJmbHk6OmNvcHlUb0Fy
Z3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBpZiAoKGkgKyBvZmZzZXQpIDwgcHVibGljTGVu
Z3RoKCkpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0g
Z2V0KGkgKyBvZmZzZXQpOworICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IGdldChp
ICsgb2Zmc2V0KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0
RWxlbWVudERlc3QgKyBpKSA9IGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICBmaXJzdEVsZW1l
bnREZXN0W2ldID0ganNVbmRlZmluZWQoKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCmluZGV4IGFjYjY4
NDgxOTFhMTkwMzUyMmI5YjNlNGQwMGY5NjllNDBiNzgxNWEuLjA3ZTFhOGExMGMzY2RjNzExN2Fj
YTNkYzU0M2VkN2RkYjBkNDFmM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaApAQCAtMTQ3LDcgKzE0Nyw3IEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKIAotICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1l
KiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBTdWJzcGFjZUFjY2Vzcz4KICAgICBzdGF0
aWMgQ29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKaW5kZXggYTZlYjBlYTVmNmFhZGViMzdkMjc3OTRmN2M5
MTNmNjgxNjgzNDk3ZS4uMTZhYTM2OWY0ODUwNzA2MWMwNjM2MTUxOGFlMTVkMmJjNjhmYjZkZCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCkBAIC0yMDQsNiArMjA0
LDcgQEAgdm9pZCBKU0xvY2s6OndpbGxSZWxlYXNlTG9jaygpCiB7ICAgCiAgICAgUmVmUHRyPFZN
PiB2bSA9IG1fdm07CiAgICAgaWYgKHZtKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhf
TUVTU0FHRSghdm0tPmhhc0NoZWNrcG9pbnRPU1JTaWRlU3RhdGUoKSwgIlJlbGVhc2luZyBKU0xv
Y2sgYnV0IHBlbmRpbmcgY2hlY2twb2ludCBzaWRlIHN0YXRlIHN0aWxsIGF2YWlsYWJsZSIpOwog
ICAgICAgICB2bS0+ZHJhaW5NaWNyb3Rhc2tzKCk7CiAKICAgICAgICAgaWYgKCF2bS0+dG9wQ2Fs
bEZyYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxl
UHJvZ3JhbUV4ZWN1dGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9k
dWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCmluZGV4IGRiMDUyNTQ4ODI1MzM5YTZiMTMyYmE0ZTQ0
MmIyMTFkNmRlMzdiYTAuLjU5NjgwOGNhZmMwYjBmNGM4NDcwYmQ3NTllZDlmNDkxNmM2NjQ0ODUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1F
eGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQ
cm9ncmFtRXhlY3V0YWJsZS5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgTW9kdWxlUHJvZ3JhbUV4ZWN1
dGFibGUqIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE8KIAogICAgIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
LnNldChnbG9iYWxPYmplY3QtPnZtKCksIGV4ZWN1dGFibGUsIHVubGlua2VkTW9kdWxlUHJvZ3Jh
bUNvZGUpOwogCi0gICAgZXhlY3V0YWJsZS0+bV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxl
LnNldChnbG9iYWxPYmplY3QtPnZtKCksIGV4ZWN1dGFibGUsIGpzQ2FzdDxTeW1ib2xUYWJsZSo+
KHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGUtPmNvbnN0YW50UmVnaXN0ZXIodW5saW5rZWRNb2R1
bGVQcm9ncmFtQ29kZS0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0
ZXJPZmZzZXQoKSkuZ2V0KCkpLT5jbG9uZVNjb3BlUGFydChnbG9iYWxPYmplY3QtPnZtKCkpKTsK
KyAgICBleGVjdXRhYmxlLT5tX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUuc2V0KGdsb2Jh
bE9iamVjdC0+dm0oKSwgZXhlY3V0YWJsZSwganNDYXN0PFN5bWJvbFRhYmxlKj4odW5saW5rZWRN
b2R1bGVQcm9ncmFtQ29kZS0+Y29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIodW5saW5r
ZWRNb2R1bGVQcm9ncmFtQ29kZS0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50
UmVnaXN0ZXJPZmZzZXQoKSkpLmdldCgpKS0+Y2xvbmVTY29wZVBhcnQoZ2xvYmFsT2JqZWN0LT52
bSgpKSk7CiAKICAgICByZXR1cm4gZXhlY3V0YWJsZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXggMTc2Zjk5ZDQ5ZTk4MDFmYjczODFkMmFhZTE3YTFj
YzBkNTZhYmFiYy4uNzRjY2RlYjI3OTRjZTVmNGJhYTc3MTQxMDIzODgxNWY4NzYzMzAwZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKQEAgLTUwOSwxMSArNTA5
LDkgQEAgc3RhdGljIHZvaWQgcmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygpCiAgICAgaWYgKE9w
dGlvbnM6OnNvZnRSZXNlcnZlZFpvbmVTaXplKCkgPCBPcHRpb25zOjpyZXNlcnZlZFpvbmVTaXpl
KCkgKyBtaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZSkKICAgICAgICAgT3B0aW9uczo6c29mdFJlc2Vy
dmVkWm9uZVNpemUoKSA9IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNpemUoKSArIG1pbmltdW1SZXNl
cnZlZFpvbmVTaXplOwogCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAvLyBGSVhNRTogTWFr
ZSBwcm9iZSBPU1IgZXhpdCB3b3JrIG9uIDMyLWJpdDoKICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3OTU2CiAgICAgT3B0aW9uczo6dXNlUHJvYmVPU1JF
eGl0KCkgPSBmYWxzZTsKLSNlbmRpZgogCiAgICAgaWYgKCFPcHRpb25zOjp1c2VDb2RlQ2FjaGUo
KSkKICAgICAgICAgT3B0aW9uczo6ZGlza0NhY2hlUGF0aCgpID0gbnVsbHB0cjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCmluZGV4IDA4
MWQ5NzhhN2IyYTYyNjZhYzU1MmMzNzlkMzg0NTAwNWRjMTFmMTAuLjNjNzQwZDQ4ZjYyNDFiMDI2
MDVmYmY1MjViZGRmMjMxOTJkMDlkYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcApAQCAtMTQ4LDkgKzE0OCw5IEBAIHZvaWQgU2Nv
cGVkQXJndW1lbnRzOjp1bm1hcEFyZ3VtZW50KFZNJiB2bSwgdWludDMyX3QgaSkKICAgICAgICAg
c3RvcmFnZSgpW2kgLSBuYW1lZExlbmd0aF0uY2xlYXIoKTsKIH0KIAotdm9pZCBTY29wZWRBcmd1
bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBTY29wZWRBcmd1bWVudHM6OmNvcHlU
b0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVs
ZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBHZW5l
cmljQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZp
cnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBHZW5lcmljQXJndW1lbnRzOjpj
b3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxl
bmd0aCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAppbmRleCBmODVlNDdkZmJlZThjYTdjMzcwNGYy
OWVkNGNiMWI0ZTk3MjA0NDU3Li5lNThjYjIyZWZkNDhjNjc0YmY1YjFiMTEyODBiNTFhYmMwZGUw
ODRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1
bWVudHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVu
dHMuaApAQCAtMTQyLDcgKzE0Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEdlbmVyaWNB
cmd1bWVudHM8U2NvcGVkQXJndW1lbnRzPjo6aXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcihp
bmRleCwgbV90YWJsZS0+bGVuZ3RoKCkpOwogICAgIH0KIAotICAgIHZvaWQgY29weVRvQXJndW1l
bnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxl
bWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIGNv
cHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3Qs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIERFQ0xBUkVfSU5GTzsK
ICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCBhOWZlNzRhNGI3ZjQ0
Mjk1OWNiMGU4N2E2ZTBmNTg5OTdhNjI2NmY2Li41N2MyYTc4MjkzODk5MjZhZGY5OGZhN2NlYTMy
YjFjNmFlNDJlMmMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0zNCw2
ICszNCw3IEBACiAjaW5jbHVkZSAiQm9vbGVhbk9iamVjdC5oIgogI2luY2x1ZGUgIkJ1aWx0aW5F
eGVjdXRhYmxlcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuaCIKKyNp
bmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNsb25lZEFy
Z3VtZW50cy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvZGVDYWNoZS5o
IgpAQCAtMTA2Miw4ICsxMDYzLDMxIEBAIHZvaWQgVk06OmdhdGhlclNjcmF0Y2hCdWZmZXJSb290
cyhDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCiAgICAgICAgIH0KICAgICB9
CiB9CisKK3ZvaWQgVk06OnNjYW5TaWRlU3RhdGUoQ29uc2VydmF0aXZlUm9vdHMmIHJvb3RzKSBj
b25zdAoreworICAgIEFTU0VSVChoZWFwLndvcmxkSXNTdG9wcGVkKCkpOworICAgIGZvciAoY29u
c3QgYXV0byYgaXRlciA6IG1fY2hlY2twb2ludFNpZGVTdGF0ZSkgeworICAgICAgICBzdGF0aWNf
YXNzZXJ0KHNpemVvZihpdGVyLnZhbHVlLT50bXBzKSAvIHNpemVvZihKU1ZhbHVlKSA9PSBtYXhO
dW1DaGVja3BvaW50VG1wcyk7CisgICAgICAgIHJvb3RzLmFkZChpdGVyLnZhbHVlLT50bXBzLCBp
dGVyLnZhbHVlLT50bXBzICsgbWF4TnVtQ2hlY2twb2ludFRtcHMpOworICAgIH0KK30KICNlbmRp
ZgogCit2b2lkIFZNOjphZGRDaGVja3BvaW50T1NSU2lkZVN0YXRlKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+JiYgcGF5bG9h
ZCkKK3sKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAg
YXV0byBhZGRSZXN1bHQgPSBtX2NoZWNrcG9pbnRTaWRlU3RhdGUuYWRkKGNhbGxGcmFtZSwgV1RG
TW92ZShwYXlsb2FkKSk7CisgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5p
c05ld0VudHJ5KTsKK30KKworc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0
YXRlPiBWTTo6ZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
Cit7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIGF1
dG8gc2lkZVN0YXRlID0gbV9jaGVja3BvaW50U2lkZVN0YXRlLnRha2UoY2FsbEZyYW1lKTsKKyAg
ICByZXR1cm4gc2lkZVN0YXRlOworfQorCiB2b2lkIGxvZ1Nhbml0aXplU3RhY2soVk0mIHZtKQog
ewogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlU2FuaXRpemVTdGFjaygpICYmIHZtLnRvcENhbGxG
cmFtZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggZjc3MWQwOTI1NmFmOTE1
MDMwZGE1OWVlMzE4MjgwZjM0ZGY3MTBhZi4uN2RhMzJhNzI2MjRmMGJmYWFmNGU1OWE1ZjdkYTQ0
YzI3MjNkYzU3OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0xMDMsMTAgKzEw
MywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEJ1aWx0aW5FeGVjdXRhYmxlczsKIGNsYXNz
IEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk7CiBjbGFzcyBDYWxsRnJhbWU7CitzdHJ1Y3QgQ2hl
Y2twb2ludE9TUkV4aXRTaWRlU3RhdGU7CiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBDb2RlQ2Fj
aGU7CiBjbGFzcyBDb21tb25JZGVudGlmaWVyczsKIGNsYXNzIENvbXBhY3RWYXJpYWJsZU1hcDsK
K2NsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOwogY2xhc3MgQ3VzdG9tR2V0dGVyU2V0dGVyOwogY2xh
c3MgRE9NQXR0cmlidXRlR2V0dGVyU2V0dGVyOwogY2xhc3MgRGF0ZUluc3RhbmNlOwpAQCAtOTU4
LDYgKzk2MCwxMSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290
cyhDb25zZXJ2YXRpdmVSb290cyYpOwogCisgICAgdm9pZCBhZGRDaGVja3BvaW50T1NSU2lkZVN0
YXRlKENhbGxGcmFtZSosIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0
ZT4mJik7CisgICAgc3RkOjp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBm
aW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShDYWxsRnJhbWUqKTsKKyAgICBib29sIGhhc0NoZWNr
cG9pbnRPU1JTaWRlU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2NoZWNrcG9pbnRTaWRlU3RhdGUu
c2l6ZSgpOyB9CisgICAgdm9pZCBzY2FuU2lkZVN0YXRlKENvbnNlcnZhdGl2ZVJvb3RzJikgY29u
c3Q7CisKICAgICBWTUVudHJ5U2NvcGUqIGVudHJ5U2NvcGU7CiAKICAgICBKU09iamVjdCogc3Ry
aW5nUmVjdXJzaW9uQ2hlY2tGaXJzdE9iamVjdCB7IG51bGxwdHIgfTsKQEAgLTEyMDgsNiArMTIx
NSw3IEBAIHByaXZhdGU6CiAgICAgTG9jayBtX3NjcmF0Y2hCdWZmZXJMb2NrOwogICAgIFZlY3Rv
cjxTY3JhdGNoQnVmZmVyKj4gbV9zY3JhdGNoQnVmZmVyczsKICAgICBzaXplX3QgbV9zaXplT2ZM
YXN0U2NyYXRjaEJ1ZmZlciB7IDAgfTsKKyAgICBIYXNoTWFwPENhbGxGcmFtZSosIHN0ZDo6dW5p
cXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4+IG1fY2hlY2twb2ludFNpZGVTdGF0
ZTsKICAgICBJbmxpbmVXYXRjaHBvaW50U2V0IG1fcHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkOwog
ICAgIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSBtX2Z1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZTsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29udHJvbEZsb3dQcm9maWxlcj4gbV9jb250cm9sRmxvd1By
b2ZpbGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVj
dG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5jcHAKaW5k
ZXggODFjOWYxZjY3NDcwNzllZDgzMTI2NjJjMDgzMDBjNmNjMzYyOGUzNy4uZTE0ODQwMGQ0ODdk
ZmM2NGU0NDA1NGRkYWRiMDg1ODk3MmUzOWEyNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
dG9vbHMvVk1JbnNwZWN0b3IuY3BwCkBAIC0zOTcsOCArMzk3LDggQEAgdm9pZCBWTUluc3BlY3Rv
cjo6ZHVtcFJlZ2lzdGVycyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBjb25zdCBSZWdpc3Rl
ciogaXQ7CiAgICAgY29uc3QgUmVnaXN0ZXIqIGVuZDsKIAotICAgIGl0ID0gY2FsbEZyYW1lLT5y
ZWdpc3RlcnMoKSArIENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudCgpOwotICAgIGVuZCA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBDYWxsRnJh
bWVTbG90Ojp0aGlzQXJndW1lbnQgLSAxOworICAgIGl0ID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMo
KSArIChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBjYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnQoKSk7CisgICAgZW5kID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIChDYWxsRnJhbWVTbG90
Ojp0aGlzQXJndW1lbnQgLSAxKTsKICAgICB3aGlsZSAoaXQgPiBlbmQpIHsKICAgICAgICAgSlNW
YWx1ZSB2ID0gaXQtPmpzVmFsdWUoKTsKICAgICAgICAgaW50IHJlZ2lzdGVyTnVtYmVyID0gaXQg
LSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaAppbmRleCBmNjg4YTdjOWU5NDI2ZDllMGJlYTNh
ZjBjZmZhZjJjMjdkZDVhNTY3Li4yZjRiMWM3ZGU2YTg3Yzc0MTFlODZlODdlN2YxOTI0NzM1MmMw
ZjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25D
b2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25D
b2RlQmxvY2suaApAQCAtNzIsMTEgKzcyLDExIEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8
dWludDY0X3Q+JiBjb25zdGFudHMoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50czsgfQogICAg
IGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiAq
bV9pbnN0cnVjdGlvbnM7IH0KIAotICAgIEFMV0FZU19JTkxJTkUgdWludDY0X3QgZ2V0Q29uc3Rh
bnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1tpbmRleCAtIEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4XTsgfQotICAgIEFMV0FZU19JTkxJTkUgVHlwZSBnZXRDb25zdGFu
dFR5cGUoaW50IGluZGV4KSBjb25zdAorICAgIEFMV0FZU19JTkxJTkUgdWludDY0X3QgZ2V0Q29u
c3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNbcmVn
LnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIEFMV0FZU19JTkxJTkUgVHlwZSBnZXRDb25zdGFu
dFR5cGUoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChP
cHRpb25zOjpkdW1wR2VuZXJhdGVkV2FzbUJ5dGVjb2RlcygpKTsKLSAgICAgICAgcmV0dXJuIG1f
Y29uc3RhbnRUeXBlc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsKKyAgICAg
ICAgcmV0dXJuIG1fY29uc3RhbnRUeXBlc1tyZWcudG9Db25zdGFudEluZGV4KCldOwogICAgIH0K
IAogICAgIHZvaWQgc2V0SW5zdHJ1Y3Rpb25zKHN0ZDo6dW5pcXVlX3B0cjxJbnN0cnVjdGlvblN0
cmVhbT4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50
R2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVy
YXRvci5jcHAKaW5kZXggZGQxYTBmNzk5NjU2YTZkOTQwZTA2OWIwZTZlZGNiNmZlYmYyZDdhYy4u
ZmMwMzhmNWU2YmM5OTkxMjk5NjczOWE3OTY1YzQ3ODllOWU4NDYxZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCkBAIC0yNDIsNiAr
MjQyLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8TExJ
bnRHZW5lcmF0b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CiAKKyAgICAvLyBX
ZSBuZWVkIHRoaXMgZm9yIGF1dG9nZW5lcmF0ZWQgdGVtcGxhdGVzIHVzZWQgYnkgSlMgYnl0ZWNv
ZGVzLgorICAgIHZvaWQgc2V0VXNlc0NoZWNrcG9pbnRzKCkgY29uc3QgeyBVTlJFQUNIQUJMRV9G
T1JfUExBVEZPUk0oKTsgfQorCiAgICAgdm9pZCBkdW1wKGNvbnN0IENvbnRyb2xTdGFjayYsIGNv
bnN0IFN0YWNrKikgeyB9CiAKIHByaXZhdGU6CkBAIC02MjgsMTQgKzYzMSwxNCBAQCBhdXRvIExM
SW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZWUoY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUpIC0+IFZlYwogICAgICAgICAgICAgaWYgKGdwckluZGV4IDwgbWF4R1BSSW5kZXgp
CiAgICAgICAgICAgICAgICAgbV9yZXN1bHRzLmFwcGVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChudW1iZXJPZkxMSW50Q2FsbGVlU2F2ZVJlZ2lzdGVycyArIGdwckluZGV4KyspKTsKICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX3Jlc3VsdHMuYXBwZW5kKHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KHN0YWNrSW5kZXgrKykpOworICAgICAgICAgICAgICAgIG1fcmVzdWx0
cy5hcHBlbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKHN0YWNrSW5k
ZXgrKykpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHlwZTo6RjMyOgogICAg
ICAgICBjYXNlIFR5cGU6OkY2NDoKICAgICAgICAgICAgIGlmIChmcHJJbmRleCA8IG1heEZQUklu
ZGV4KQogICAgICAgICAgICAgICAgIG1fcmVzdWx0cy5hcHBlbmQodmlydHVhbFJlZ2lzdGVyRm9y
TG9jYWwobnVtYmVyT2ZMTEludENhbGxlZVNhdmVSZWdpc3RlcnMgKyBmcHJJbmRleCsrKSk7CiAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9yZXN1bHRzLmFwcGVuZCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChzdGFja0luZGV4KyspKTsKKyAgICAgICAgICAgICAgICBtX3Jl
c3VsdHMuYXBwZW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhzdGFj
a0luZGV4KyspKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZvaWQ6CiAgICAg
ICAgIGNhc2UgRnVuYzoKQEAgLTY3MCw3ICs2NzMsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjph
ZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IFBhcnRpYWxSZXN1bHQK
ICAgICAgICAgaWYgKGNvdW50IDwgbWF4KQogICAgICAgICAgICAgbV9ub3JtYWxpemVkQXJndW1l
bnRzW2luZGV4XSA9IHJlZ2lzdGVyQXJndW1lbnRzW2NvdW50KytdOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBtX25vcm1hbGl6ZWRBcmd1bWVudHNbaW5kZXhdID0gdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoc3RhY2tJbmRleCsrKTsKKyAgICAgICAgICAgIG1fbm9ybWFsaXplZEFyZ3Vt
ZW50c1tpbmRleF0gPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoc3Rh
Y2tJbmRleCsrKTsKICAgICB9OwogCiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCk7IGkrKykgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU9wZXJhdGlvbnMuY3BwCmluZGV4IGRiZmI1MDBjZTU1OGYyOWViMjZlMWRkZDEwZWI5
NTE2ZTAwMmY1OTkuLjU2Y2E1NDdhNzRhMzdlOWEwMTA2NTFhNmI2MTM0NzJlZjNmYzM2YWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKQEAgLTc0
NCw3ICs3NDQsNyBAQCB2b2lkKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbldhc21Ub0pTRXhjZXB0
aW9uKENhbGxGcmFtZSogY2FsbEZyYW1lLCBXYXNtOjpFeGNlcAogICAgIC8vIGZvciBleGNlcHRp
b25zIGZpcnN0IGxvYWQgY2FsbEZyYW1lRm9yQ2F0Y2ggaW5mbyBjYWxsIGZyYW1lIHJlZ2lzdGVy
IGJlZm9yZSBqdW1waW5nCiAgICAgLy8gdG8gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLiBJZiB3ZSBk
aWQgdGhpcywgd2UgY291bGQgcmVtb3ZlIHRoaXMgdGVycmlibGUgaGFjay4KICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNDQwCi0gICAgYml0d2lzZV9j
YXN0PHVpbnQ2NF90Kj4oY2FsbEZyYW1lKVtDYWxsRnJhbWVTbG90OjpjYWxsZWVdID0gYml0d2lz
ZV9jYXN0PHVpbnQ2NF90PihpbnN0YW5jZS0+bW9kdWxlKCkpOworICAgIGJpdHdpc2VfY2FzdDx1
aW50NjRfdCo+KGNhbGxGcmFtZSlbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxs
ZWUpXSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oaW5zdGFuY2UtPm1vZHVsZSgpKTsKICAgICBy
ZXR1cm4gdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3c7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAKaW5kZXggOTI3YTY5ODRhM2JlMDE0Y2YzZWE3
ZDY3ZjAzNDU4NGVlYmViNjBjZS4uNTRmNjM2YWMxYjUwNzVkMWM2NjdiMzhhOTAzMTMyOTBkNWYz
MzNjZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRo
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAK
QEAgLTc2LDcgKzc2LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBMTEludCB7CiAKICNk
ZWZpbmUgUkVBRCh2aXJ0dWFsUmVnaXN0ZXIpIFwKICAgICAodmlydHVhbFJlZ2lzdGVyLmlzQ29u
c3RhbnQoKSBcCi0gICAgICAgID8gSlNWYWx1ZTo6ZGVjb2RlKENPREVfQkxPQ0soKS0+Z2V0Q29u
c3RhbnQodmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpKSkgXAorICAgICAgICA/IEpTVmFsdWU6OmRl
Y29kZShDT0RFX0JMT0NLKCktPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3RlcikpIFwKICAgICAg
ICAgOiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKSkKIAogaW5saW5lIGJvb2wgaml0Q29t
cGlsZUFuZFNldEhldXJpc3RpY3MoV2FzbTo6TExJbnRDYWxsZWUqIGNhbGxlZSwgV2FzbTo6RnVu
Y3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jaywgV2FzbTo6SW5zdGFuY2UqIGluc3RhbmNlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjlmZjUwODExMmE5YjM1
NWIzYWIxYWJjNzI5NzA2ODVjNmY2ZTZiOC4uZTEyNWFkMzZiNzhlMWU2NWI1ZTA3NzVmNTgwYzYx
OTdkY2MzMDQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0zOTMsNiArMzkzLDcgQEAKIAkJNTMxMUJENTcxRUE3RTFBMTAwNTI1MjgxIC8qIFNpZ25hbHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2lnbmFscy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MzExQkQ1OTFFQTgxQTk2MDA1MjUyODEgLyogVGhyZWFkTWVz
c2FnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRNZXNzYWdlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTFCRDVCMUVBODIyRjkwMDUyNTI4MSAv
KiBUaHJlYWRNZXNzYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFRocmVhZE1lc3NhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzM4RUJB
NDIzQUIwNEQxMDAzODI2NjIgLyogRW51bUNsYXNzT3BlcmF0b3JPdmVybG9hZHMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRW51bUNsYXNzT3BlcmF0b3JPdmVybG9hZHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM1MzRGMjkxRUMwRTEwRTAwMTQxQjJGIC8q
IE1hY2hFeGNlcHRpb25zLmRlZnMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLm1pZzsgcGF0aCA9IE1h
Y2hFeGNlcHRpb25zLmRlZnM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOUVCMDYy
MUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IExFQkRlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNF
QzI1M0MxRTk1QUQzMDAwMDgzMUI5IC8qIFByaW9yaXR5UXVldWUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUHJpb3JpdHlRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtOTg3LDYgKzk4OCw3IEBACiAJCQkJQThBNDcyOTgxNTFBODI1QTAwNDEyM0ZGIC8q
IGR0b2EuaCAqLywKIAkJCQlGRTA1RkFFNjFGREIyMTQzMDAwOTMyMzAgLyogRHVtYlB0clRyYWl0
cy5oICovLAogCQkJCUFENjUzREE4MjAwNkI2QzIwMEQ4MjBENyAvKiBEdW1iVmFsdWVUcmFpdHMu
aCAqLywKKwkJCQk1MzM4RUJBNDIzQUIwNEQxMDAzODI2NjIgLyogRW51bUNsYXNzT3BlcmF0b3JP
dmVybG9hZHMuaCAqLywKIAkJCQkxQUVBODhFMTFENkJCQ0Y0MDBFNUFENjQgLyogRW51bVRyYWl0
cy5oICovLAogCQkJCUFEN0M0MzRBMUREMkE0QTcwMDI2ODg4QiAvKiBFeHBlY3RlZC5oICovLAog
CQkJCUE4QTQ3MjlGMTUxQTgyNUEwMDQxMjNGRiAvKiBFeHBvcnRNYWNyb3MuaCAqLywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL0JpdG1hcC5oIGIvU291cmNlL1dURi93dGYvQml0bWFwLmgK
aW5kZXggNGM2ZjVkNDQyNjMyYzNlZmMwMDBiZDE4ZTllMzY5NDUyZmFmMWMxMC4uYjQ2ZGE5ZTg1
YWI5YjY4NjI0MzhhNjkyZTM2NmE3NTA1NGRjYzZjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvQml0bWFwLmgKKysrIGIvU291cmNlL1dURi93dGYvQml0bWFwLmgKQEAgLTUxLDYgKzUxLDcg
QEAgcHVibGljOgogICAgIHNpemVfdCBuZXh0UG9zc2libHlVbnNldChzaXplX3QpIGNvbnN0Owog
ICAgIHZvaWQgY2xlYXIoc2l6ZV90KTsKICAgICB2b2lkIGNsZWFyQWxsKCk7CisgICAgdm9pZCBp
bnZlcnQoKTsKICAgICBpbnQ2NF90IGZpbmRSdW5PZlplcm9zKHNpemVfdCBydW5MZW5ndGgpIGNv
bnN0OwogICAgIHNpemVfdCBjb3VudChzaXplX3Qgc3RhcnQgPSAwKSBjb25zdDsKICAgICBzaXpl
X3QgaXNFbXB0eSgpIGNvbnN0OwpAQCAtMTAyLDYgKzEwMywxMiBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CiAgICAgICAgIH0KIAorICAgICAgICBpdGVy
YXRvciYgb3BlcmF0b3I9KGJvb2wgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYml0
bWFwLT5zZXQobV9pbmRleCwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAg
ICAgICB9CisKICAgICBwcml2YXRlOgogICAgICAgICBjb25zdCBCaXRtYXAqIG1fYml0bWFwOwog
ICAgICAgICBzaXplX3QgbV9pbmRleDsKQEAgLTExMSw2ICsxMTgsOSBAQCBwdWJsaWM6CiAgICAg
aXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgZmluZEJpdCgw
LCB0cnVlKSk7IH0KICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigq
dGhpcywgYml0bWFwU2l6ZSk7IH0KICAgICAKKyAgICBpdGVyYXRvciBvcGVyYXRvcltdKHNpemVf
dCk7CisgICAgY29uc3QgaXRlcmF0b3Igb3BlcmF0b3JbXShzaXplX3QpIGNvbnN0OworCiAgICAg
dm9pZCBtZXJnZUFuZENsZWFyKEJpdG1hcCYpOwogICAgIHZvaWQgc2V0QW5kQ2xlYXIoQml0bWFw
Jik7CiAgICAgCkBAIC0yMjQsNiArMjM0LDEzIEBAIGlubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBT
aXplLCBXb3JkVHlwZT46OmNsZWFyQWxsKCkKICAgICBtZW1zZXQoYml0cy5kYXRhKCksIDAsIHNp
emVvZihiaXRzKSk7CiB9CiAKK3RlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBX
b3JkVHlwZT4KK2lubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmludmVy
dCgpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JkczsgKytpKQorICAgICAgICBi
aXRzW2ldID0gfmJpdHNbaV07Cit9CisKIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBl
bmFtZSBXb3JkVHlwZT4KIGlubGluZSBzaXplX3QgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBl
Pjo6bmV4dFBvc3NpYmx5VW5zZXQoc2l6ZV90IHN0YXJ0KSBjb25zdAogewpAQCAtNDA5LDYgKzQy
NiwxOSBAQCBpbmxpbmUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpvcGVyYXRv
ciE9KGNvbnN0IEJpdG1hcCYgb3RoZXIpIGNvbnN0CiAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOwogfQogCit0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+
CitpbmxpbmUgYXV0byBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpvcGVyYXRvcltdKHNp
emVfdCBpbmRleCkgLT4gaXRlcmF0b3IKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBzaXplKCkpOwor
ICAgIHJldHVybiBpdGVyYXRvcigqdGhpcywgaW5kZXgpOworfQorCit0ZW1wbGF0ZTxzaXplX3Qg
Yml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CitpbmxpbmUgYXV0byBCaXRtYXA8Yml0bWFw
U2l6ZSwgV29yZFR5cGU+OjpvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgLT4gY29uc3Qg
aXRlcmF0b3IKK3sKKyAgICByZXR1cm4gKCpjb25zdF9jYXN0PEJpdG1hcDxiaXRtYXBTaXplLCBX
b3JkVHlwZT4qPih0aGlzKSlbaW5kZXhdOworfQorCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6
ZSwgdHlwZW5hbWUgV29yZFR5cGU+CiBpbmxpbmUgdW5zaWduZWQgQml0bWFwPGJpdG1hcFNpemUs
IFdvcmRUeXBlPjo6aGFzaCgpIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9D
TWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IDhjN2Iw
NTE3NDAwYjAxN2EwMmNhYjdiNzNlNDg5ODEzZDlkZjU1NDUuLmM4NTA5NDFjY2EyYjdiNTNjNzg5
YWQ1NjYyZjVmNzg4MDIzOWE2MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC01Niw2ICs1Niw3
IEBAIHNldChXVEZfUFVCTElDX0hFQURFUlMKICAgICBEb3VibHlMaW5rZWRMaXN0LmgKICAgICBE
dW1iUHRyVHJhaXRzLmgKICAgICBEdW1iVmFsdWVUcmFpdHMuaAorICAgIEVudW1DbGFzc09wZXJh
dG9yT3ZlcmxvYWRzLmgKICAgICBFbnVtVHJhaXRzLmgKICAgICBFeHBlY3RlZC5oCiAgICAgRXhw
b3J0TWFjcm9zLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0VudW1DbGFzc09wZXJhdG9y
T3ZlcmxvYWRzLmggYi9Tb3VyY2UvV1RGL3d0Zi9FbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjM1N2JhMmZhMmY3OTI5YTZhOTk4YTlhNGVmMTRkMmJlNTc1NDYzNzEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9FbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fk
cy5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKworI2Rl
ZmluZSBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCBvcCwg
ZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFwKKyAgICBjb25z
dGV4cHIgYXV0byBvcGVyYXRvciBvcChlbnVtTmFtZSBlbnVtRW50cnksIFQgdmFsdWUpIC0+IHN0
ZDo6ZW5hYmxlX2lmX3Q8KGVuYWJsZUV4cHJlc3Npb24pLCBUPiBcCisgICAgeyBcCisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUPihlbnVtRW50cnkpIG9wIHZhbHVlOyBcCisgICAgfSBcCisg
ICAgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFwKKyAgICBjb25zdGV4cHIgYXV0byBvcGVy
YXRvciBvcChUIHZhbHVlLCBlbnVtTmFtZSBlbnVtRW50cnkpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8
KGVuYWJsZUV4cHJlc3Npb24pLCBUPiBcCisgICAgeyBcCisgICAgICAgIHJldHVybiB2YWx1ZSBv
cCBzdGF0aWNfY2FzdDxUPihlbnVtRW50cnkpOyBcCisgICAgfSBcCisKKyNkZWZpbmUgT1ZFUkxP
QURfTUFUSF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgZW5hYmxlRXhw
cmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51
bU5hbWUsICssIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1Jf
RU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCAtLCBlbmFibGVFeHByZXNzaW9uKSBcCisgICAgT1ZF
UkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgKiwgZW5hYmxlRXhw
cmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51
bU5hbWUsIC8sIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1Jf
RU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCAlLCBlbmFibGVFeHByZXNzaW9uKSBcCisKKyNkZWZp
bmUgT1ZFUkxPQURfTUFUSF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0lUSF9JTlRFR1JBTFMo
ZW51bU5hbWUpIE9WRVJMT0FEX01BVEhfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51
bU5hbWUsIHN0ZDo6aXNfaW50ZWdyYWxfdjxUPikKKworI2RlZmluZSBPVkVSTE9BRF9SRUxBVElP
TkFMX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCBlbmFibGVFeHByZXNz
aW9uKSBcCisgICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFt
ZSwgPT0sIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5V
TV9DTEFTU19XSEVOKGVudW1OYW1lLCAhPSwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJM
T0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIDwsIGVuYWJsZUV4cHJl
c3Npb24pIFwKKyAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1O
YW1lLCA8PSwgZW5hYmxlRXhwcmVzc2lvbikgXAorICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9F
TlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsID4sIGVuYWJsZUV4cHJlc3Npb24pIFwKKyAgICBPVkVS
TE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCA+PSwgZW5hYmxlRXhw
cmVzc2lvbikgXAorCisjZGVmaW5lIE9WRVJMT0FEX1JFTEFUSU9OQUxfT1BFUkFUT1JTX0ZPUl9F
TlVNX0NMQVNTX1dJVEhfSU5URUdSQUxTKGVudW1OYW1lKSBPVkVSTE9BRF9SRUxBVElPTkFMX09Q
RVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCBzdGQ6OmlzX2ludGVncmFsX3Y8
VD4pCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaCBiL1NvdXJj
ZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAppbmRleCA3MzNjNjVjMDc2NTBiYzhjNGJjMDgxZGMw
NTJjYTRjMzg5ZjhkY2VkLi45NmRjY2UxY2RiYzM4NzRlMzYyYjM3MDBiMjhhNGY5NDQzMzg0YWM0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgKKysrIGIvU291cmNl
L1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCkBAIC00NTIsNyArNDUyLDcgQEAgcHVibGljOgogICAg
IHsKICAgICB9CiAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKKyAgICBvcGVy
YXRvciBib29sKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiAhISgqbV93b3JkICYgbV9t
YXNrKTsKICAgICB9CkBAIC00NjYsNiArNDY2LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
KnRoaXM7CiAgICAgfQogCisgICAgRmFzdEJpdFJlZmVyZW5jZSYgb3BlcmF0b3J8PShib29sIHZh
bHVlKSB7IHJldHVybiB2YWx1ZSA/ICp0aGlzID0gdmFsdWUgOiAqdGhpczsgfQorICAgIEZhc3RC
aXRSZWZlcmVuY2UmIG9wZXJhdG9yJj0oYm9vbCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPyAqdGhp
cyA6ICp0aGlzID0gdmFsdWU7IH0KKwogcHJpdmF0ZToKICAgICB1aW50MzJfdCogbV93b3JkIHsg
bnVsbHB0ciB9OwogICAgIHVpbnQzMl90IG1fbWFzayB7IDAgfTsKQEAgLTUxMSw3ICs1MTQsMTEg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgbV93b3Jkcy5jbGVhckFsbCgpOwogICAgIH0KLSAg
ICAKKworICAgIC8vIEZvciB0ZW1wbGF0aW5nIGFzIFZlY3Rvcjxib29sPgorICAgIHZvaWQgZmls
bChib29sIHZhbHVlKSB7IHZhbHVlID8gc2V0QWxsKCkgOiBjbGVhckFsbCgpOyB9CisgICAgdm9p
ZCBncm93KHNpemVfdCBuZXdTaXplKSB7IHJlc2l6ZShuZXdTaXplKTsgfQorCiAgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgY2xlYXJSYW5nZShzaXplX3QgYmVnaW4sIHNpemVfdCBlbmQpOwog
CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb250ZW50cyBvZiB0aGlzIGJpdHZlY3RvciBj
aGFuZ2VkLgpAQCAtNTkxLDQgKzU5OCw1IEBAIHB1YmxpYzoKIAogfSAvLyBuYW1lc3BhY2UgV1RG
CiAKK3VzaW5nIFdURjo6RmFzdEJpdFJlZmVyZW5jZTsKIHVzaW5nIFdURjo6RmFzdEJpdFZlY3Rv
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1VuYWxpZ25lZEFjY2Vzcy5oIGIvU291cmNl
L1dURi93dGYvVW5hbGlnbmVkQWNjZXNzLmgKaW5kZXggNWE0ZTllZjQ0OTRlZjQ2Y2E5ZTRlZWY3
N2ZkY2MwZDYwZmFhNGExMS4uM2EzNWIzOGY0YzAyMzY3OWFjN2NmYzljNDY1NjA4NGEzOTE0ODNi
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVW5hbGlnbmVkQWNjZXNzLmgKKysrIGIvU291
cmNlL1dURi93dGYvVW5hbGlnbmVkQWNjZXNzLmgKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNl
IFdURiB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgogaW5saW5lIFR5cGUgdW5hbGlnbmVkTG9h
ZChjb25zdCB2b2lkKiBwb2ludGVyKQogewotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2
aWFsPFR5cGU+Ojp2YWx1ZSwgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFs
bHlfY29weWFibGU8VHlwZT46OnZhbHVlLCAiIik7CiAgICAgVHlwZSByZXN1bHQgeyB9OwogICAg
IG1lbWNweSgmcmVzdWx0LCBwb2ludGVyLCBzaXplb2YoVHlwZSkpOwogICAgIHJldHVybiByZXN1
bHQ7CkBAIC00Myw3ICs0Myw3IEBAIGlubGluZSBUeXBlIHVuYWxpZ25lZExvYWQoY29uc3Qgdm9p
ZCogcG9pbnRlcikKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CiBpbmxpbmUgdm9pZCB1bmFsaWdu
ZWRTdG9yZSh2b2lkKiBwb2ludGVyLCBUeXBlIHZhbHVlKQogewotICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc190cml2aWFsPFR5cGU+Ojp2YWx1ZSwgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc190cml2aWFsbHlfY29weWFibGU8VHlwZT46OnZhbHVlLCAiIik7CiAgICAgbWVtY3B5KHBv
aW50ZXIsICZ2YWx1ZSwgc2l6ZW9mKFR5cGUpKTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hh
bmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGI2Y2Q5ODU5ZTY4ZmE2NTk0NDdlZmFiMmI2
MWUwOWI3YWI2MGQ0NTAuLjRmYzFjZWIyMDRkMWI2MGRmMjY5NjQ2NmE1OTVlYjU3NzNiZTNiZTIg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAyMC0wMS0xNiAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBSZWxhbmQgYnl0ZWNvZGUgY2hlY2twb2ludHMgc2luY2UgYnVncyBo
YXZlIGJlZW4gZml4ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwNjM2MQorCisgICAgICAgIFVucmV2aWV3ZWQsIHJlbGFuZC4KKworICAgICAgICBU
aGUgd2F0Y2ggYnVncyBoYXZlIGJlZW4gZml4ZWQgYnkgaHR0cHM6Ly90cmFjLndlYmtpdC5vcmcv
Y2hhbmdlc2V0LzI1NDY3NAorCisgICAgICAgICogU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0
czoKKwogMjAyMC0wMS0xNiAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4K
IAogICAgICAgICBmYXN0L2Zvcm1zL2lvcy96b29tLWFmdGVyLWlucHV0LXRhcC13aWRlLWlucHV0
Lmh0bWwgaXMgdGltaW5nIG91dApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0
cmVzcy10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKaW5kZXggMTI4
OTYwN2I0MWFmOTRlNGE4NmYyOWFkZmMyMTc5YTM2NmZjOGNjMi4uMDllNGYxN2MyOGIwM2Q3MzFi
YzAzMjI4ODIzMDA4YTRmYjI3N2YxMSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tanNj
LXN0cmVzcy10ZXN0cworKysgYi9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCkBA
IC00OTgsNyArNDk4LDYgQEAgTk9fQ0pJVF9PUFRJT05TID0gWyItLXVzZUNvbmN1cnJlbnRKSVQ9
ZmFsc2UiLCAiLS10aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcD0xMDAKIEIzTzFfT1BUSU9OUyA9
IFsiLS1kZWZhdWx0QjNPcHRMZXZlbD0xIl0KIEIzTzBfT1BUSU9OUyA9IFsiLS1tYXhERkdOb2Rl
c0luQmFzaWNCbG9ja0ZvclByZWNpc2VBbmFseXNpcz0xMDAiLCAiLS1kZWZhdWx0QjNPcHRMZXZl
bD0wIl0KIEZUTF9PUFRJT05TID0gWyItLXVzZUZUTEpJVD10cnVlIl0KLVBST0JFX09TUl9FWElU
X09QVElPTiA9IFsiLS11c2VQcm9iZU9TUkV4aXQ9dHJ1ZSJdCiBGT1JDRV9MTElOVF9FWElUX09Q
VElPTlMgPSBbIi0tZm9yY2VPU1JFeGl0VG9MTEludD10cnVlIl0KIAogcmVxdWlyZV9yZWxhdGl2
ZSAid2Via2l0cnVieS9qc2Mtc3RyZXNzLXRlc3Qtd3JpdGVyLSN7JHRlc3RXcml0ZXJ9IgpAQCAt
NzEzLDcgKzcxMiw3IEBAIGRlZiBydW5GVExOb0NKSVRCM08wKCpvcHRpb25hbFRlc3RTcGVjaWZp
Y09wdGlvbnMpCiBlbmQKIAogZGVmIHJ1bkZUTE5vQ0pJVFZhbGlkYXRlKCpvcHRpb25hbFRlc3RT
cGVjaWZpY09wdGlvbnMpCi0gICAgcnVuKCJmdGwtbm8tY2ppdC12YWxpZGF0ZS1zYW1wbGluZy1w
cm9maWxlciIsICItLXZhbGlkYXRlR3JhcGg9dHJ1ZSIsICItLXVzZVNhbXBsaW5nUHJvZmlsZXI9
dHJ1ZSIsICItLWFpckZvcmNlSVJDQWxsb2NhdG9yPXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9f
Q0pJVF9PUFRJT05TICsgUFJPQkVfT1NSX0VYSVRfT1BUSU9OICsgb3B0aW9uYWxUZXN0U3BlY2lm
aWNPcHRpb25zKSkKKyAgICBydW4oImZ0bC1uby1jaml0LXZhbGlkYXRlLXNhbXBsaW5nLXByb2Zp
bGVyIiwgIi0tdmFsaWRhdGVHcmFwaD10cnVlIiwgIi0tdXNlU2FtcGxpbmdQcm9maWxlcj10cnVl
IiwgIi0tYWlyRm9yY2VJUkNBbGxvY2F0b3I9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklU
X09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAKIGRlZiBydW5G
VExOb0NKSVROb1B1dFN0YWNrVmFsaWRhdGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykK
QEAgLTcyOSw3ICs3MjgsNyBAQCBkZWYgcnVuRlRMTm9DSklUT1NSVmFsaWRhdGlvbigqb3B0aW9u
YWxUZXN0U3BlY2lmaWNPcHRpb25zKQogZW5kCiAKIGRlZiBydW5ERkdFYWdlcigqb3B0aW9uYWxU
ZXN0U3BlY2lmaWNPcHRpb25zKQotICAgIHJ1bigiZGZnLWVhZ2VyIiwgKihFQUdFUl9PUFRJT05T
ICsgQ09MTEVDVF9DT05USU5VT1VTTFlfT1BUSU9OUyArIFBST0JFX09TUl9FWElUX09QVElPTiAr
IEZPUkNFX0xMSU5UX0VYSVRfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykp
CisgICAgcnVuKCJkZmctZWFnZXIiLCAqKEVBR0VSX09QVElPTlMgKyBDT0xMRUNUX0NPTlRJTlVP
VVNMWV9PUFRJT05TICsgRk9SQ0VfTExJTlRfRVhJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3Bl
Y2lmaWNPcHRpb25zKSkKIGVuZAogCiBkZWYgcnVuREZHRWFnZXJOb0NKSVRWYWxpZGF0ZSgqb3B0
aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cg
Yi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCAxYTBhNTI5NzNlOTIyY2RiMDM4OTkwY2Q4ZmJlNTZk
YmIyYWE0NmI0Li5kMjBhMThiODhkNjVmOWU3N2VmMjQ0NmVlYmQ3YjE0YWNhYWNhYzcyIDEwMDY0
NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI5IEBACisyMDIwLTAxLTE2ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUu
Y29tPgorCisgICAgICAgIFJlbGFuZCBieXRlY29kZSBjaGVja3BvaW50cyBzaW5jZSBidWdzIGhh
dmUgYmVlbiBmaXhlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjA2MzYxCisKKyAgICAgICAgVW5yZXZpZXdlZCwgcmVsYW5kLgorCisgICAgICAgIFRo
ZSB3YXRjaCBidWdzIGhhdmUgYmVlbiBmaXhlZCBieSBodHRwczovL3RyYWMud2Via2l0Lm9yZy9j
aGFuZ2VzZXQvMjU0Njc0CisKKyAgICAgICAgKiBzdHJlc3MvYXBwbHktb3NyLWV4aXQtc2hvdWxk
LWdldC1sZW5ndGgtb25jZS1leGNlcHRpb25zLW9jY2FzaW9uYWxseS5qczogQWRkZWQuCisgICAg
ICAgIChleHBlY3RlZEFyZ0NvdW50KToKKyAgICAgICAgKGNhbGxlZSk6CisgICAgICAgICh0ZXN0
KToKKyAgICAgICAgKGxldC5hcnJheS5nZXQgbGVuZ3RoKToKKyAgICAgICAgKiBzdHJlc3MvYXBw
bHktb3NyLWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS5qczogQWRkZWQuCisgICAgICAgIChl
eHBlY3RlZEFyZ0NvdW50KToKKyAgICAgICAgKGNhbGxlZSk6CisgICAgICAgICh0ZXN0KToKKyAg
ICAgICAgKGxldC5hcnJheS5nZXQgbGVuZ3RoKToKKyAgICAgICAgKiBzdHJlc3MvbG9hZC12YXJh
cmdzLXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qczoKKyAgICAgICAgKGNoZWNr
RXF1YWwpOgorICAgICAgICAqIHN0cmVzcy9yZWN1cnNpdmUtdGFpbC1jYWxsLXdpdGgtZGlmZmVy
ZW50LWFyZ3VtZW50LWNvdW50LmpzOgorICAgICAgICAqIHN0cmVzcy9yZXN0LXZhcmFyZ3Mtb3Ny
LWV4aXQtdG8tY2hlY2twb2ludC5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAo
YmFyKToKKwogMjAyMC0wMS0xNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAg
ICAgICAgb3BlcmF0aW9uVG9PYmplY3QoKSBzaG91bGQgY2hlY2sgZm9yIGEgbnVsbCBlcnJvck1l
c3NhZ2UuCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQt
Z2V0LWxlbmd0aC1vbmNlLWV4Y2VwdGlvbnMtb2NjYXNpb25hbGx5LmpzIGIvSlNUZXN0cy9zdHJl
c3MvYXBwbHktb3NyLWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS1leGNlcHRpb25zLW9jY2Fz
aW9uYWxseS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mM2YxNWE2ZWI4YzI3Y2MwYWQyZTlmNTk1NDFmZmUyYzUw
YWMwYTIzCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvYXBwbHktb3NyLWV4aXQt
c2hvdWxkLWdldC1sZW5ndGgtb25jZS1leGNlcHRpb25zLW9jY2FzaW9uYWxseS5qcwpAQCAtMCww
ICsxLDM2IEBACisKK2xldCBjdXJyZW50QXJnQ291bnQ7CitmdW5jdGlvbiBleHBlY3RlZEFyZ0Nv
dW50KCkgeworICAgIHJldHVybiBjdXJyZW50QXJnQ291bnQ7Cit9Citub0lubGluZShleHBlY3Rl
ZEFyZ0NvdW50KTsKKworZnVuY3Rpb24gY2FsbGVlKCkgeworICAgIGlmIChhcmd1bWVudHMubGVu
Z3RoICE9IGV4cGVjdGVkQXJnQ291bnQoKSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7Cit9
CisKK2Z1bmN0aW9uIHRlc3QoYXJyYXkpIHsKKyAgICBjYWxsZWUuYXBwbHkodW5kZWZpbmVkLCBh
cnJheSk7Cit9Citub0lubGluZSh0ZXN0KTsKKworbGV0IGxlbmd0aENhbGxzID0gMDsKK2N1cnJl
bnRBcmdDb3VudCA9IDI7CitsZXQgYXJyYXkgPSB7IDA6IDEsIDE6IDIsIGdldCBsZW5ndGgoKSB7
CisgICAgaWYgKGxlbmd0aENhbGxzKysgJSAxMCA9PSAxKQorICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoInRocm93aW5nIGFuIGV4Y2VwdGlvbiBpbiBsZW5ndGgiKTsKKyAgICByZXR1cm4gY3VycmVu
dEFyZ0NvdW50Cit9IH0KK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU2OyBpKyspIHsKKyAgICB0cnkg
eworICAgICAgICB0ZXN0KGFycmF5KTsKKyAgICB9IGNhdGNoIHsgfQorfQorCitjdXJyZW50QXJn
Q291bnQgPSAxMDA7CitsZW5ndGhDYWxscyA9IDA7Cit0ZXN0KGFycmF5KTsKKworaWYgKGxlbmd0
aENhbGxzICE9PSAxKQorICAgIHRocm93IG5ldyBFcnJvcihsZW5ndGhDYWxscyk7CmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNl
LmpzIGIvSlNUZXN0cy9zdHJlc3MvYXBwbHktb3NyLWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25j
ZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44YmVlNDVjZTFjNzI4MzY1MzgyNzA1ZDk5ZDMwMWFlNmJjYjhkODdh
Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvYXBwbHktb3NyLWV4aXQtc2hvdWxk
LWdldC1sZW5ndGgtb25jZS5qcwpAQCAtMCwwICsxLDMxIEBACisKK2xldCBjdXJyZW50QXJnQ291
bnQ7CitmdW5jdGlvbiBleHBlY3RlZEFyZ0NvdW50KCkgeworICAgIHJldHVybiBjdXJyZW50QXJn
Q291bnQ7Cit9Citub0lubGluZShleHBlY3RlZEFyZ0NvdW50KTsKKworZnVuY3Rpb24gY2FsbGVl
KCkgeworICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IGV4cGVjdGVkQXJnQ291bnQoKSkKKyAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QoYXJyYXkpIHsKKyAg
ICBjYWxsZWUuYXBwbHkodW5kZWZpbmVkLCBhcnJheSk7Cit9Citub0lubGluZSh0ZXN0KTsKKwor
bGV0IGxlbmd0aENhbGxzID0gMDsKK2N1cnJlbnRBcmdDb3VudCA9IDI7CitsZXQgYXJyYXkgPSB7
IDA6IDEsIDE6IDIsIGdldCBsZW5ndGgoKSB7IGxlbmd0aENhbGxzKys7IHJldHVybiBjdXJyZW50
QXJnQ291bnQgfSB9Citmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgaSsrKQorICAgIHRlc3QoYXJy
YXkpOworCisKK3Rlc3QoYXJyYXkpOworY3VycmVudEFyZ0NvdW50ID0gMTAwOworbGVuZ3RoQ2Fs
bHMgPSAwOwordGVzdChhcnJheSk7CisKK2lmIChsZW5ndGhDYWxscyAhPT0gMSkKKyAgICB0aHJv
dyBuZXcgRXJyb3IobGVuZ3RoQ2FsbHMpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvbG9h
ZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qcyBiL0pTVGVzdHMv
c3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1hbmQtZXhpdC1zdHJpY3QuanMK
aW5kZXggMzYxOGY4Y2JiM2QzMjExMzQwZTZhMDcyMDcyZjE0M2U1YzQ2YzI0Mi4uYWE3MzIzMTkw
Y2Y0OWQ4OGUzZmZlOTEyYjFlMTZhYTQ3ZDUwZjk0YiAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJl
c3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qcworKysg
Yi9KU1Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtYW5kLWV4aXQt
c3RyaWN0LmpzCkBAIC0xOCw4ICsxOCw4IEBAIGZ1bmN0aW9uIGNoZWNrRXF1YWwoYSwgYikgewog
ICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBhOiAiICsgYS5hICsgIiB2ZXJzdXMg
IiArIGIuYTsKICAgICBpZiAoYS5iICE9IGIuYikKICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQg
dmFsdWUgb2YgYjogIiArIGEuYiArICIgdmVyc3VzICIgKyBiLmI7Ci0gICAgaWYgKGEuYy5sZW5n
dGggIT0gYi5jLmxlbmd0aCkKLSAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYywg
bGVuZ3RoIG1pc21hdGNoOiAiICsgYS5jICsgIiB2ZXJzdXMgIiArIGIuYzsKKyAgICBpZiAoYS5j
Lmxlbmd0aCAhPT0gYi5jLmxlbmd0aCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUg
b2YgYywgbGVuZ3RoIG1pc21hdGNoOiAiICsgYS5jLmxlbmd0aCArICIgdmVyc3VzICIgKyBiLmMu
bGVuZ3RoOwogICAgIGZvciAodmFyIGkgPSBhLmMubGVuZ3RoOyBpLS07KSB7CiAgICAgICAgIGlm
IChhLmNbaV0gIT0gYi5jW2ldKQogICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUg
b2YgYywgbWlzbWF0Y2ggYXQgaSA9ICIgKyBpICsgIjogIiArIGEuYyArICIgdmVyc3VzICIgKyBi
LmM7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9yZWN1cnNpdmUtdGFpbC1jYWxsLXdpdGgt
ZGlmZmVyZW50LWFyZ3VtZW50LWNvdW50LmpzIGIvSlNUZXN0cy9zdHJlc3MvcmVjdXJzaXZlLXRh
aWwtY2FsbC13aXRoLWRpZmZlcmVudC1hcmd1bWVudC1jb3VudC5qcwppbmRleCAwNDdmYjAxZjg4
MzE0NWNjNzU1NGY1Y2Y3MDFhNzA3NGYyNjdkZWVlLi41M2Q3NTJkZWNkN2QwZjMxYmMyZjFkNzg5
OTFjNjkxMDFmMDhiZmYzIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9yZWN1cnNpdmUtdGFp
bC1jYWxsLXdpdGgtZGlmZmVyZW50LWFyZ3VtZW50LWNvdW50LmpzCisrKyBiL0pTVGVzdHMvc3Ry
ZXNzL3JlY3Vyc2l2ZS10YWlsLWNhbGwtd2l0aC1kaWZmZXJlbnQtYXJndW1lbnQtY291bnQuanMK
QEAgLTE4LDggKzE4LDggQEAgbm9JbmxpbmUoYmFyKTsKIGZvciAodmFyIGkgPSAwOyBpIDwgMTAw
MDA7ICsraSkgewogICAgIHZhciByZXN1bHQgPSBmb28oNDAsIDIpOwogICAgIGlmIChyZXN1bHQg
IT09IDQyKQotICAgICAgICB0aHJvdyAiV3JvbmcgcmVzdWx0IGZvciBmb28sIGV4cGVjdGVkIDQy
LCBnb3QgIiArIHJlc3VsdDsKKyAgICAgICAgdGhyb3cgRXJyb3IoIldyb25nIHJlc3VsdCBmb3Ig
Zm9vLCBleHBlY3RlZCA0MiwgZ290ICIgKyByZXN1bHQpOwogICAgIHJlc3VsdCA9IGJhcig0MCwg
Mik7CiAgICAgaWYgKHJlc3VsdCAhPT0gNDIpCi0gICAgICAgIHRocm93ICJXcm9uZyByZXN1bHQg
Zm9yIGJhciwgZXhwZWN0ZWQgNDIsIGdvdCAiICsgcmVzdWx0OworICAgICAgICB0aHJvdyBFcnJv
cigiV3JvbmcgcmVzdWx0IGZvciBiYXIsIGV4cGVjdGVkIDQyLCBnb3QgIiArIHJlc3VsdCk7CiB9
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9yZXN0LXZhcmFyZ3Mtb3NyLWV4aXQtdG8tY2hl
Y2twb2ludC5qcyBiL0pTVGVzdHMvc3RyZXNzL3Jlc3QtdmFyYXJncy1vc3ItZXhpdC10by1jaGVj
a3BvaW50LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg3YmEwNTUxZDNlZTk0OGYwOTRjZjM4MGY4Y2ViZmM2Nzk5
MDQyZGMKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9yZXN0LXZhcmFyZ3Mtb3Ny
LWV4aXQtdG8tY2hlY2twb2ludC5qcwpAQCAtMCwwICsxLDIxIEBACisidXNlIHN0cmljdCI7CisK
K2Z1bmN0aW9uIGZvbyhhLCBiLCAuLi5yZXN0KSB7CisgICAgcmV0dXJuIHJlc3QubGVuZ3RoOwor
fQorCitmdW5jdGlvbiBiYXIoYSwgYiwgLi4ucmVzdCkgeworICAgIHJldHVybiBmb28uY2FsbCgu
Li5yZXN0KTsKK30KK25vSW5saW5lKGJhcik7CisKK2xldCBhcnJheSA9IG5ldyBBcnJheSgxMCk7
Citmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgKytpKSB7CisgICAgbGV0IHJlc3VsdCA9IGJhcigu
Li5hcnJheSk7CisgICAgaWYgKHJlc3VsdCAhPT0gYXJyYXkubGVuZ3RoIC0gYmFyLmxlbmd0aCAt
IGZvby5sZW5ndGggLSAxKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoaSArICIgIiArIHJlc3Vs
dCk7Cit9CisKK2FycmF5Lmxlbmd0aCA9IDEwMDAwOworaWYgKGJhciguLi5hcnJheSkgIT09IGFy
cmF5Lmxlbmd0aCAtIGJhci5sZW5ndGggLSBmb28ubGVuZ3RoIC0gMSkKKyAgICB0aHJvdyBuZXcg
RXJyb3IoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>