<?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>97461</bug_id>
          
          <creation_ts>2012-09-24 09:37:58 -0700</creation_ts>
          <short_desc>Web Inspector: NMI: move visited and countObjectSize methods implementation into separate class</short_desc>
          <delta_ts>2012-09-27 06:45:46 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Ilya Tikhonovsky">loislo</reporter>
          <assigned_to name="Ilya Tikhonovsky">loislo</assigned_to>
          <cc>alph</cc>
    
    <cc>apavlov</cc>
    
    <cc>benjamin</cc>
    
    <cc>bweinstein</cc>
    
    <cc>caseq</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>vsevik</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>726755</commentid>
    <comment_count>0</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2012-09-24 09:37:58 -0700</bug_when>
    <thetext>these methods and the data collected by them need to be used in the instrumentation code for other components.
As example when we are visiting bitmaps we need to visit platform specific objects.
These objects will be instrumented with help of component&apos;s own instrumentation code 
but we have to keep the single set of visited objects and the map of counters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726764</commentid>
    <comment_count>1</comment_count>
      <attachid>165399</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2012-09-24 09:41:48 -0700</bug_when>
    <thetext>Created attachment 165399
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726786</commentid>
    <comment_count>2</comment_count>
      <attachid>165405</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2012-09-24 09:57:03 -0700</bug_when>
    <thetext>Created attachment 165405
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>729317</commentid>
    <comment_count>3</comment_count>
      <attachid>165951</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2012-09-27 01:45:50 -0700</bug_when>
    <thetext>Created attachment 165951
rebaselined</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>729321</commentid>
    <comment_count>4</comment_count>
      <attachid>165952</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2012-09-27 01:50:29 -0700</bug_when>
    <thetext>Created attachment 165952
unnecessary inspectorData argument was removed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>729344</commentid>
    <comment_count>5</comment_count>
      <attachid>165952</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-09-27 02:28:13 -0700</bug_when>
    <thetext>Comment on attachment 165952
unnecessary inspectorData argument was removed

Attachment 165952 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14031820</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>729351</commentid>
    <comment_count>6</comment_count>
      <attachid>165958</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2012-09-27 02:36:15 -0700</bug_when>
    <thetext>Created attachment 165958
mac build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>729449</commentid>
    <comment_count>7</comment_count>
      <attachid>165958</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-09-27 05:53:23 -0700</bug_when>
    <thetext>Comment on attachment 165958
mac build fix

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

&gt; Source/WTF/wtf/MemoryInstrumentation.h:114
&gt; +    MemoryInstrumentationClient* m_client;

Please move the field declaration below the methods.

&gt; Source/WTF/wtf/MemoryInstrumentation.h:121
&gt;      virtual void checkCountedObject(const void*) = 0;

This method should also delegate to the client.

&gt; Source/WebCore/inspector/InspectorMemoryAgent.cpp:106
&gt; +    MemoryInstrumentationClientImpl* m_client;

style: fields should go after the methods below.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>729475</commentid>
    <comment_count>8</comment_count>
      <attachid>165988</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2012-09-27 06:25:51 -0700</bug_when>
    <thetext>Created attachment 165988
comments addressed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>729486</commentid>
    <comment_count>9</comment_count>
      <attachid>165988</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-09-27 06:42:19 -0700</bug_when>
    <thetext>Comment on attachment 165988
comments addressed

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

&gt; Source/WTF/wtf/MemoryInstrumentation.h:96
&gt; +    MemoryInstrumentation(MemoryInstrumentationClient* client) : m_client(client) { }

should be marked explicit

&gt; Source/WebCore/inspector/MemoryInstrumentationImpl.cpp:67
&gt; +void MemoryInstrumentationImpl::processDeferredInstrumentedPointers()

Why did this move?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>729490</commentid>
    <comment_count>10</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2012-09-27 06:45:46 -0700</bug_when>
    <thetext>Committed r129762: &lt;http://trac.webkit.org/changeset/129762&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165399</attachid>
            <date>2012-09-24 09:41:48 -0700</date>
            <delta_ts>2012-09-24 09:56:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97461-20120924204108.patch</filename>
            <type>text/plain</type>
            <size>33887</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5MzUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDdiYjEwYzFmYjY0ZTVlYjFhN2I4YmVl
M2NlMmU3ZTlkYjVkZmVkYjMuLjk2YWZjMmZkM2U3MDJkMjY3NDdmYjRjMDgyYzk5MzY3OWM1NzU4
MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTItMDktMjQgIElseWEgVGlraG9ub3Zza3kgIDxs
b2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IE5NSTogbW92ZSB2
aXNpdGVkIGFuZCBjb3VudE9iamVjdFNpemUgbWV0aG9kcyBpbXBsZW1lbnRhdGlvbiBpbnRvIHNl
cGFyYXRlIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTc0NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGVzZSBtZXRob2RzIGFuZCB0aGUgZGF0YSBjb2xsZWN0ZWQgYnkgdGhlbSBuZWVkIHRv
IGJlIHVzZWQgaW4gdGhlIGluc3RydW1lbnRhdGlvbiBjb2RlIGZvciBvdGhlciBjb21wb25lbnRz
LgorICAgICAgICBBcyBleGFtcGxlIHdoZW4gd2UgYXJlIHZpc2l0aW5nIGJpdG1hcHMgd2UgbmVl
ZCB0byB2aXNpdCBwbGF0Zm9ybSBzcGVjaWZpYyBvYmplY3RzLgorICAgICAgICBUaGVzZSBvYmpl
Y3RzIHdpbGwgYmUgaW5zdHJ1bWVudGVkIHdpdGggaGVscCBvZiBjb21wb25lbnQncyBvd24gaW5z
dHJ1bWVudGF0aW9uIGNvZGUKKyAgICAgICAgYnV0IHdlIGhhdmUgdG8ga2VlcCB0aGUgc2luZ2xl
IHNldCBvZiB2aXNpdGVkIG9iamVjdHMgYW5kIHRoZSBtYXAgb2YgY291bnRlcnMuCisKKyAgICAg
ICAgKiB3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmg6CisgICAgICAgIChNZW1vcnlJbnN0cnVt
ZW50YXRpb25DbGllbnQpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdURjo6TWVtb3J5SW5z
dHJ1bWVudGF0aW9uOjpNZW1vcnlJbnN0cnVtZW50YXRpb24pOgorICAgICAgICAoTWVtb3J5SW5z
dHJ1bWVudGF0aW9uKToKKyAgICAgICAgKFdURjo6TWVtb3J5SW5zdHJ1bWVudGF0aW9uOjpjb3Vu
dE9iamVjdFNpemUpOgorICAgICAgICAoV1RGOjpNZW1vcnlJbnN0cnVtZW50YXRpb246OnZpc2l0
ZWQpOgorCiAyMDEyLTA5LTIzICBCeXVuZ3dvbyBMZWUgIDxidzgwLmxlZUBnbWFpbC5jb20+CiAK
ICAgICAgICAgRml4IGJ1aWxkIHdhcm5pbmdzIDogLVd1bnVzZWQtcGFyYW1ldGVyLCAtV3BhcmVu
dGhlc2VzLCAtV3VuaW5pdGlhbGl6ZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzNkYjVlZjRjYWRmMTY0MWMw
YzUzMTg4MWZmZDI0OGRhNGI1NjgxNy4uNThhMGUwNzBhNWJlZjI5N2Q4MDNlMDQ5NWNiNzQ3MTgy
YTk3YWIwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDEyLTA5LTI0ICBJbHlhIFRp
a2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBOTUk6IG1vdmUgdmlzaXRlZCBhbmQgY291bnRPYmplY3RTaXplIG1ldGhvZHMgaW1wbGVtZW50
YXRpb24gaW50byBzZXBhcmF0ZSBjbGFzcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk3NDYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhlc2UgbWV0aG9kcyBhbmQgdGhlIGRhdGEgY29sbGVjdGVkIGJ5
IHRoZW0gbmVlZCB0byBiZSB1c2VkIGluIHRoZSBpbnN0cnVtZW50YXRpb24gY29kZSBmb3Igb3Ro
ZXIgY29tcG9uZW50cy4KKyAgICAgICAgQXMgZXhhbXBsZSB3aGVuIHdlIGFyZSB2aXNpdGluZyBi
aXRtYXBzIHdlIG5lZWQgdG8gdmlzaXQgcGxhdGZvcm0gc3BlY2lmaWMgb2JqZWN0cy4KKyAgICAg
ICAgVGhlc2Ugb2JqZWN0cyB3aWxsIGJlIGluc3RydW1lbnRlZCB3aXRoIGhlbHAgb2YgY29tcG9u
ZW50J3Mgb3duIGluc3RydW1lbnRhdGlvbiBjb2RlCisgICAgICAgIGJ1dCB3ZSBoYXZlIHRvIGtl
ZXAgdGhlIHNpbmdsZSBzZXQgb2YgdmlzaXRlZCBvYmplY3RzIGFuZCB0aGUgbWFwIG9mIGNvdW50
ZXJzLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdERvbVRyZWVJbmZvKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzRXh0ZXJuYWxSZXNvdXJjZXNJbmZvKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvck1lbW9yeUFnZW50OjpnZXRQcm9jZXNzTWVtb3J5RGlzdHJpYnV0aW9u
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsOjpzZWxmU2l6ZSk6Cisg
ICAgICAgICogaW5zcGVjdG9yL01lbW9yeUluc3RydW1lbnRhdGlvbkltcGwuaDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudEltcGw6OnNlbGZTaXplKToKKyAg
ICAgICAgKE1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudEltcGwpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50SW1wbDo6dmlzaXRlZE9iamVjdHMpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lbW9yeUluc3RydW1lbnRhdGlvbkltcGw6Ok1lbW9yeUluc3RydW1l
bnRhdGlvbkltcGwpOgorCiAyMDEyLTA5LTI0ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6RVhDX0JBRF9BQ0NFU1MgdXBvbiBj
bG9zaW5nIHBhZ2Ugd2l0aCBub2RlIGhpZ2hsaWdodGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CmluZGV4IDM0MGVlZDZhZjc5MDQwZmJjNTllOGQ2ODVkZjhlNTM4OWJkMzM0Y2IuLjczN2ZjNWIx
ZWExYTlmOTEzN2E5YTYzYWYyYWE4Yjk0YzI3ZjRlNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTItMDktMjQgIElseWEgVGlraG9ub3Zza3kgIDxsb2lz
bG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IE5NSTogbW92ZSB2aXNp
dGVkIGFuZCBjb3VudE9iamVjdFNpemUgbWV0aG9kcyBpbXBsZW1lbnRhdGlvbiBpbnRvIHNlcGFy
YXRlIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTc0NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGVzZSBtZXRob2RzIGFuZCB0aGUgZGF0YSBjb2xsZWN0ZWQgYnkgdGhlbSBuZWVkIHRvIGJl
IHVzZWQgaW4gdGhlIGluc3RydW1lbnRhdGlvbiBjb2RlIGZvciBvdGhlciBjb21wb25lbnRzLgor
ICAgICAgICBBcyBleGFtcGxlIHdoZW4gd2UgYXJlIHZpc2l0aW5nIGJpdG1hcHMgd2UgbmVlZCB0
byB2aXNpdCBwbGF0Zm9ybSBzcGVjaWZpYyBvYmplY3RzLgorICAgICAgICBUaGVzZSBvYmplY3Rz
IHdpbGwgYmUgaW5zdHJ1bWVudGVkIHdpdGggaGVscCBvZiBjb21wb25lbnQncyBvd24gaW5zdHJ1
bWVudGF0aW9uIGNvZGUKKyAgICAgICAgYnV0IHdlIGhhdmUgdG8ga2VlcCB0aGUgc2luZ2xlIHNl
dCBvZiB2aXNpdGVkIG9iamVjdHMgYW5kIHRoZSBtYXAgb2YgY291bnRlcnMuCisKKyAgICAgICAg
KiB0ZXN0cy9NZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LmNwcDoKKyAgICAgICAgKEluc3RydW1l
bnRhdGlvblRlc3RIZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zdHJ1bWVudGF0aW9uVGVz
dEhlbHBlcjo6SW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlcik6CisgICAgICAgIChXZWJDb3JlOjpJ
bnN0cnVtZW50YXRpb25UZXN0SGVscGVyOjphZGRSb290T2JqZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3RydW1lbnRhdGlvblRlc3RIZWxwZXI6OnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3RydW1lbnRhdGlvblRlc3RIZWxwZXI6OnZpc2l0ZWRPYmpl
Y3RzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3RydW1lbnRhdGlvblRlc3RIZWxwZXI6OnRvdGFs
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCiAy
MDEyLTA5LTI0ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMjIyNDMuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb24uaCBiL1NvdXJjZS9XVEYvd3RmL01lbW9yeUlu
c3RydW1lbnRhdGlvbi5oCmluZGV4IDEzMWFmODQ5N2FjZWFkM2E5YjljYWMyZGVlMTc0N2M4MmU5
MGI2MTMuLjMwMjAwMmExNzk5ZDJjNDcxY2FkNDIyOGY5YzVlYTJiZjgxZGYyNjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL01lbW9yeUluc3RydW1lbnRhdGlvbi5oCisrKyBiL1NvdXJjZS9X
VEYvd3RmL01lbW9yeUluc3RydW1lbnRhdGlvbi5oCkBAIC04MSw4ICs4MSwxNSBAQCBwcml2YXRl
OgogICAgIHNpemVfdCBtX29iamVjdFNpemU7CiB9OwogCitjbGFzcyBNZW1vcnlJbnN0cnVtZW50
YXRpb25DbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBjb3VudE9iamVjdFNpemUo
TWVtb3J5T2JqZWN0VHlwZSwgc2l6ZV90KSA9IDA7CisgICAgdmlydHVhbCBib29sIHZpc2l0ZWQo
Y29uc3Qgdm9pZCopID0gMDsKK307CisKIGNsYXNzIE1lbW9yeUluc3RydW1lbnRhdGlvbiB7CiBw
dWJsaWM6CisgICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uKE1lbW9yeUluc3RydW1lbnRhdGlvbkNs
aWVudCogY2xpZW50KSA6IG1fY2xpZW50KGNsaWVudCkgeyB9CiAgICAgdmlydHVhbCB+TWVtb3J5
SW5zdHJ1bWVudGF0aW9uKCkgeyB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdm9pZCBh
ZGRSb290T2JqZWN0KGNvbnN0IFQmIHQpCkBAIC0xMDEsOSArMTA4LDEyIEBAIHByb3RlY3RlZDoK
ICAgICB9OwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBjb3VudE9iamVjdFNpemUoTWVt
b3J5T2JqZWN0VHlwZSwgc2l6ZV90KSA9IDA7CisgICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xp
ZW50KiBtX2NsaWVudDsKKworICAgIHZvaWQgY291bnRPYmplY3RTaXplKE1lbW9yeU9iamVjdFR5
cGUgb2JqZWN0VHlwZSwgc2l6ZV90IHNpemUpIHsgbV9jbGllbnQtPmNvdW50T2JqZWN0U2l6ZShv
YmplY3RUeXBlLCBzaXplKTsgfQorICAgIGJvb2wgdmlzaXRlZChjb25zdCB2b2lkKiBwb2ludGVy
KSB7IHJldHVybiBtX2NsaWVudC0+dmlzaXRlZChwb2ludGVyKTsgfQorCiAgICAgdmlydHVhbCB2
b2lkIGRlZmVySW5zdHJ1bWVudGVkUG9pbnRlcihQYXNzT3duUHRyPEluc3RydW1lbnRlZFBvaW50
ZXJCYXNlPikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCB2aXNpdGVkKGNvbnN0IHZvaWQqKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NEZWZlcnJlZEluc3RydW1lbnRlZFBvaW50ZXJzKCkg
PSAwOwogCiAgICAgZnJpZW5kIGNsYXNzIE1lbW9yeUNsYXNzSW5mbzsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwCmluZGV4IDJjZWY5YWQ1
NmQxZWZiOTg0ODJhZjljN2QzYzNiOGYxNmMzYjU3NjEuLjg3YWEzOTUzZDlkYjU3NDNlZTNiNzY2
MDkyMzJmMmYyOGZlZmQ0OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvck1lbW9yeUFnZW50LmNwcApAQCAtOTEsNiArOTEsNjcgQEAgc3RhdGljIGNvbnN0IGNo
YXIgZG9tU3RvcmFnZUNhY2hlW10gPSAiRE9NU3RvcmFnZUNhY2hlIjsKIAogbmFtZXNwYWNlIHsK
IAorY2xhc3MgTWVtb3J5VXNhZ2VTdGF0c0dlbmVyYXRvciB7CitwdWJsaWM6CisgICAgTWVtb3J5
VXNhZ2VTdGF0c0dlbmVyYXRvcihNZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnRJbXBsKiBjbGll
bnQpIDogbV9jbGllbnQoY2xpZW50KSB7IH0KKworICAgIHZvaWQgZHVtcChUeXBlQnVpbGRlcjo6
QXJyYXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+KiBjaGlsZHJlbikKKyAgICB7CisgICAgICAgIGNo
aWxkcmVuLT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yTWVtb3J5Q2FjaGUoKSk7CisgICAgICAgIGNo
aWxkcmVuLT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yUGFnZSgpKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50SW1wbCogbV9jbGllbnQ7CisKKyAgICBQ
YXNzUmVmUHRyPEluc3BlY3Rvck1lbW9yeUJsb2NrPiBidWlsZE9iamVjdEZvck1lbW9yeUNhY2hl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHNpemVfdCB0b3RhbFNpemUgPSAwOworCisgICAgICAg
IFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+ID4gY2hpbGRy
ZW4gPSBUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+OjpjcmVhdGUoKTsK
KyAgICAgICAgdG90YWxTaXplICs9IGFkZE1lbW9yeUJsb2NrRm9yKGNoaWxkcmVuLmdldCgpLCBX
ZWJDb3JlTWVtb3J5VHlwZXM6Ok1lbW9yeUNhY2hlU3RydWN0dXJlcyk7CisgICAgICAgIHRvdGFs
U2l6ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5
cGVzOjpDYWNoZWRSZXNvdXJjZVJhdyk7CisgICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlC
bG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJj
ZUNTUyk7CisgICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5n
ZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZUZvbnQpOworICAgICAgICB0
b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoY2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1v
cnlUeXBlczo6Q2FjaGVkUmVzb3VyY2VJbWFnZSk7CisgICAgICAgIHRvdGFsU2l6ZSArPSBhZGRN
ZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRS
ZXNvdXJjZVNjcmlwdCk7CisgICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0Zvcihj
aGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZVNWRyk7Cisg
ICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2Vi
Q29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZVNoYWRlcik7CisgICAgICAgIHRvdGFsU2l6
ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVz
OjpDYWNoZWRSZXNvdXJjZVhTTFQpOworCisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JNZW1vcnlC
bG9jaz4gYmxvY2sgPSBJbnNwZWN0b3JNZW1vcnlCbG9jazo6Y3JlYXRlKCkuc2V0TmFtZShXZWJD
b3JlTWVtb3J5VHlwZXM6Ok1lbW9yeUNhY2hlKTsKKyAgICAgICAgYmxvY2stPnNldFNpemUodG90
YWxTaXplKTsKKyAgICAgICAgYmxvY2stPnNldENoaWxkcmVuKGNoaWxkcmVuLnJlbGVhc2UoKSk7
CisgICAgICAgIHJldHVybiBibG9jay5yZWxlYXNlKCk7CisgICAgfQorCisgICAgUGFzc1JlZlB0
cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gYnVpbGRPYmplY3RGb3JQYWdlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHNpemVfdCB0b3RhbFNpemUgPSAwOworCisgICAgICAgIFJlZlB0cjxUeXBlQnVp
bGRlcjo6QXJyYXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+ID4gZG9tQ2hpbGRyZW4gPSBUeXBlQnVp
bGRlcjo6QXJyYXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+OjpjcmVhdGUoKTsKKyAgICAgICAgdG90
YWxTaXplICs9IGFkZE1lbW9yeUJsb2NrRm9yKGRvbUNoaWxkcmVuLmdldCgpLCBXZWJDb3JlTWVt
b3J5VHlwZXM6OkRPTSk7CisgICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0Zvcihk
b21DaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpJbWFnZSk7CisgICAgICAgIHRv
dGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0Zvcihkb21DaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1l
bW9yeVR5cGVzOjpDU1MpOworICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3Io
ZG9tQ2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6QmluZGluZyk7CisgICAgICAg
IHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0Zvcihkb21DaGlsZHJlbi5nZXQoKSwgV2ViQ29y
ZU1lbW9yeVR5cGVzOjpMb2FkZXIpOworCisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JNZW1vcnlC
bG9jaz4gZG9tID0gSW5zcGVjdG9yTWVtb3J5QmxvY2s6OmNyZWF0ZSgpLnNldE5hbWUoV2ViQ29y
ZU1lbW9yeVR5cGVzOjpQYWdlKTsKKyAgICAgICAgZG9tLT5zZXRTaXplKHRvdGFsU2l6ZSk7Cisg
ICAgICAgIGRvbS0+c2V0Q2hpbGRyZW4oZG9tQ2hpbGRyZW4ucmVsZWFzZSgpKTsKKyAgICAgICAg
cmV0dXJuIGRvbS5yZWxlYXNlKCk7CisgICAgfQorCisgICAgc2l6ZV90IGFkZE1lbW9yeUJsb2Nr
Rm9yKFR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3JNZW1vcnlCbG9jaz4qIGFycmF5LCBNZW1v
cnlPYmplY3RUeXBlIHR5cGVOYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck1lbW9yeUJsb2NrPiByZXN1bHQgPSBJbnNwZWN0b3JNZW1vcnlCbG9jazo6Y3JlYXRlKCku
c2V0TmFtZSh0eXBlTmFtZSk7CisgICAgICAgIHNpemVfdCBzaXplID0gbV9jbGllbnQtPnRvdGFs
U2l6ZSh0eXBlTmFtZSk7CisgICAgICAgIHJlc3VsdC0+c2V0U2l6ZShzaXplKTsKKyAgICAgICAg
YXJyYXktPmFkZEl0ZW0ocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHNpemU7CisgICAgfQorfTsK
KwogU3RyaW5nIG5vZGVOYW1lKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKG5vZGUtPmRvY3VtZW50
KCktPmlzWEhUTUxEb2N1bWVudCgpKQpAQCAtMzA2LDggKzM2Nyw4IEBAIHByaXZhdGU6CiAKIGNs
YXNzIEV4dGVybmFsUmVzb3VyY2VWaXNpdG9yIDogcHVibGljIEV4dGVybmFsU3RyaW5nVmlzaXRv
ciwgcHVibGljIEV4dGVybmFsQXJyYXlWaXNpdG9yIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBF
eHRlcm5hbFJlc291cmNlVmlzaXRvcihWaXNpdGVkT2JqZWN0cyYgdmlzaXRlZE9iamVjdHMpCi0g
ICAgICAgIDogbV92aXNpdGVkT2JqZWN0cyh2aXNpdGVkT2JqZWN0cykKKyAgICBleHBsaWNpdCBF
eHRlcm5hbFJlc291cmNlVmlzaXRvcihXVEY6Ok1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudCYg
IGNsaWVudCkKKyAgICAgICAgOiBtX2NsaWVudChjbGllbnQpCiAgICAgICAgICwgbV9qc0V4dGVy
bmFsU3RyaW5nU2l6ZSgwKQogICAgICAgICAsIG1fZXh0ZXJuYWxBcnJheVNpemUoMCkKICAgICB7
IH0KQEAgLTMxOSwxNiArMzgwLDE2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0
SlNFeHRlcm5hbEFycmF5KEFycmF5QnVmZmVyVmlldyogYnVmZmVyVmlldykKICAgICB7CiAgICAg
ICAgIEFycmF5QnVmZmVyKiBidWZmZXIgPSBidWZmZXJWaWV3LT5idWZmZXIoKS5nZXQoKTsKLSAg
ICAgICAgaWYgKG1fdmlzaXRlZE9iamVjdHMuYWRkKGJ1ZmZlcikuaXNOZXdFbnRyeSkKKyAgICAg
ICAgaWYgKCFtX2NsaWVudC52aXNpdGVkKGJ1ZmZlcikpCiAgICAgICAgICAgICBtX2V4dGVybmFs
QXJyYXlTaXplICs9IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOwogICAgIH0KICAgICB2aXJ0dWFsIHZv
aWQgdmlzaXRKU0V4dGVybmFsU3RyaW5nKFN0cmluZ0ltcGwqIHN0cmluZykKICAgICB7Ci0gICAg
ICAgIGlmIChtX3Zpc2l0ZWRPYmplY3RzLmFkZChzdHJpbmcpLmlzTmV3RW50cnkpCisgICAgICAg
IGlmICghbV9jbGllbnQudmlzaXRlZChzdHJpbmcpKQogICAgICAgICAgICAgbV9qc0V4dGVybmFs
U3RyaW5nU2l6ZSArPSBzdHJpbmctPnNpemVJbkJ5dGVzKCk7CiAgICAgfQogCi0gICAgVmlzaXRl
ZE9iamVjdHMmIG1fdmlzaXRlZE9iamVjdHM7CisgICAgV1RGOjpNZW1vcnlJbnN0cnVtZW50YXRp
b25DbGllbnQmIG1fY2xpZW50OwogICAgIHNpemVfdCBtX2pzRXh0ZXJuYWxTdHJpbmdTaXplOwog
ICAgIHNpemVfdCBtX2V4dGVybmFsQXJyYXlTaXplOwogfTsKQEAgLTQ1NCw3MiArNTE1LDE1IEBA
IHB1YmxpYzoKICAgICAgICAgbV9tZW1vcnlJbnN0cnVtZW50YXRpb24uYWRkUm9vdE9iamVjdCht
ZW1vcnlDYWNoZSgpKTsKICAgICB9CiAKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck1lbW9yeUJs
b2NrPiBidWlsZE9iamVjdEZvck1lbW9yeUNhY2hlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHNp
emVfdCB0b3RhbFNpemUgPSAwOwotCi0gICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8
SW5zcGVjdG9yTWVtb3J5QmxvY2s+ID4gY2hpbGRyZW4gPSBUeXBlQnVpbGRlcjo6QXJyYXk8SW5z
cGVjdG9yTWVtb3J5QmxvY2s+OjpjcmVhdGUoKTsKLSAgICAgICAgdG90YWxTaXplICs9IGFkZE1l
bW9yeUJsb2NrRm9yKGNoaWxkcmVuLmdldCgpLCBXZWJDb3JlTWVtb3J5VHlwZXM6Ok1lbW9yeUNh
Y2hlU3RydWN0dXJlcyk7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0Zvcihj
aGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZVJhdyk7Ci0g
ICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2Vi
Q29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZUNTUyk7Ci0gICAgICAgIHRvdGFsU2l6ZSAr
PSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpD
YWNoZWRSZXNvdXJjZUZvbnQpOwotICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tG
b3IoY2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6Q2FjaGVkUmVzb3VyY2VJbWFn
ZSk7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQo
KSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZVNjcmlwdCk7Ci0gICAgICAgIHRv
dGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9y
eVR5cGVzOjpDYWNoZWRSZXNvdXJjZVNWRyk7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1v
cnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNv
dXJjZVNoYWRlcik7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGls
ZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZVhTTFQpOwotCi0g
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gYmxvY2sgPSBJbnNwZWN0b3JNZW1v
cnlCbG9jazo6Y3JlYXRlKCkuc2V0TmFtZShXZWJDb3JlTWVtb3J5VHlwZXM6Ok1lbW9yeUNhY2hl
KTsKLSAgICAgICAgYmxvY2stPnNldFNpemUodG90YWxTaXplKTsKLSAgICAgICAgYmxvY2stPnNl
dENoaWxkcmVuKGNoaWxkcmVuLnJlbGVhc2UoKSk7Ci0gICAgICAgIHJldHVybiBibG9jay5yZWxl
YXNlKCk7Ci0gICAgfQotCi0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gYnVp
bGRPYmplY3RGb3JQYWdlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHNpemVfdCB0b3RhbFNpemUg
PSAwOwotCi0gICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yTWVtb3J5
QmxvY2s+ID4gZG9tQ2hpbGRyZW4gPSBUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yTWVtb3J5
QmxvY2s+OjpjcmVhdGUoKTsKLSAgICAgICAgdG90YWxTaXplICs9IGFkZE1lbW9yeUJsb2NrRm9y
KGRvbUNoaWxkcmVuLmdldCgpLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkRPTSk7Ci0gICAgICAgIHRv
dGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0Zvcihkb21DaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1l
bW9yeVR5cGVzOjpJbWFnZSk7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0Zv
cihkb21DaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOwotICAgICAgICB0
b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoZG9tQ2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVN
ZW1vcnlUeXBlczo6QmluZGluZyk7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9j
a0Zvcihkb21DaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpMb2FkZXIpOwotCi0g
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gZG9tID0gSW5zcGVjdG9yTWVtb3J5
QmxvY2s6OmNyZWF0ZSgpLnNldE5hbWUoV2ViQ29yZU1lbW9yeVR5cGVzOjpQYWdlKTsKLSAgICAg
ICAgZG9tLT5zZXRTaXplKHRvdGFsU2l6ZSk7Ci0gICAgICAgIGRvbS0+c2V0Q2hpbGRyZW4oZG9t
Q2hpbGRyZW4ucmVsZWFzZSgpKTsKLSAgICAgICAgcmV0dXJuIGRvbS5yZWxlYXNlKCk7Ci0gICAg
fQotCi0gICAgdm9pZCBkdW1wU3RhdGlzdGljcyhUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9y
TWVtb3J5QmxvY2s+KiBjaGlsZHJlbiwgSW5zcGVjdG9yRGF0YUNvdW50ZXIqIGluc3BlY3RvckRh
dGEpCi0gICAgewotICAgICAgICBjaGlsZHJlbi0+YWRkSXRlbShidWlsZE9iamVjdEZvck1lbW9y
eUNhY2hlKCkpOwotICAgICAgICBjaGlsZHJlbi0+YWRkSXRlbShidWlsZE9iamVjdEZvclBhZ2Uo
KSk7Ci0KLSAgICAgICAgaW5zcGVjdG9yRGF0YS0+YWRkQ29tcG9uZW50KE1lbW9yeUJsb2NrTmFt
ZTo6aW5zcGVjdG9yRE9NRGF0YSwgbV9tZW1vcnlJbnN0cnVtZW50YXRpb24uc2VsZlNpemUoKSk7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHNpemVfdCBhZGRNZW1vcnlCbG9ja0ZvcihUeXBlQnVp
bGRlcjo6QXJyYXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+KiBhcnJheSwgTWVtb3J5T2JqZWN0VHlw
ZSB0eXBlTmFtZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JNZW1vcnlC
bG9jaz4gcmVzdWx0ID0gSW5zcGVjdG9yTWVtb3J5QmxvY2s6OmNyZWF0ZSgpLnNldE5hbWUodHlw
ZU5hbWUpOwotICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fbWVtb3J5SW5zdHJ1bWVudGF0aW9uLnRv
dGFsU2l6ZSh0eXBlTmFtZSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U2l6ZShzaXplKTsKLSAgICAg
ICAgYXJyYXktPmFkZEl0ZW0ocmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQot
CiAgICAgUGFnZSogbV9wYWdlOwogICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwmIG1fbWVt
b3J5SW5zdHJ1bWVudGF0aW9uOwogfTsKIAogfQogCi1zdGF0aWMgdm9pZCBjb2xsZWN0RG9tVHJl
ZUluZm8oUGFnZSogcGFnZSwgVmlzaXRlZE9iamVjdHMmIHZpc2l0ZWRPYmplY3RzLCBUeXBlQnVp
bGRlcjo6QXJyYXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+KiBjaGlsZHJlbiwgSW5zcGVjdG9yRGF0
YUNvdW50ZXIqIGluc3BlY3RvckRhdGEpCitzdGF0aWMgdm9pZCBjb2xsZWN0RG9tVHJlZUluZm8o
UGFnZSogcGFnZSwgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCYgbWVtb3J5SW5zdHJ1bWVudGF0
aW9uSW1wbCkKIHsKLSAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIG1lbW9yeUluc3RydW1l
bnRhdGlvbih2aXNpdGVkT2JqZWN0cyk7Ci0gICAgRE9NVHJlZXNJdGVyYXRvciBkb21UcmVlc0l0
ZXJhdG9yKHBhZ2UsIG1lbW9yeUluc3RydW1lbnRhdGlvbik7CisgICAgRE9NVHJlZXNJdGVyYXRv
ciBkb21UcmVlc0l0ZXJhdG9yKHBhZ2UsIG1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwpOwogCiAg
ICAgU2NyaXB0UHJvZmlsZXI6OnZpc2l0Tm9kZVdyYXBwZXJzKCZkb21UcmVlc0l0ZXJhdG9yKTsK
IApAQCAtNTMzLDggKzUzNyw2IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3REb21UcmVlSW5mbyhQYWdl
KiBwYWdlLCBWaXNpdGVkT2JqZWN0cyYgdmlzaXRlZE9iamVjdHMsIFR5cGVCCiAKICAgICBkb21U
cmVlc0l0ZXJhdG9yLnZpc2l0QmluZGluZ3MoKTsKICAgICBkb21UcmVlc0l0ZXJhdG9yLnZpc2l0
TWVtb3J5Q2FjaGUoKTsKLQotICAgIGRvbVRyZWVzSXRlcmF0b3IuZHVtcFN0YXRpc3RpY3MoY2hp
bGRyZW4sIGluc3BlY3RvckRhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBhZGRQbGF0Zm9ybUNvbXBv
bmVudHNJbmZvKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvck1lbW9yeUJs
b2NrPiA+IGNoaWxkcmVuKQpAQCAtNTQ4LDkgKzU1MCwxMCBAQCBzdGF0aWMgdm9pZCBhZGRQbGF0
Zm9ybUNvbXBvbmVudHNJbmZvKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rv
ck1lbQogICAgIH0KIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yTWVtb3J5QmxvY2s+
IGpzRXh0ZXJuYWxSZXNvdXJjZXNJbmZvKFZpc2l0ZWRPYmplY3RzJiB2aXNpdGVkT2JqZWN0cykK
Ky8vIEZJWE1FOiByZXBsYWNlIGV4cGxpY2l0IHNpemUgY291bnRpbmcgd2l0aCBpbXBsaWNpdCB2
aWEgTWVtb3J5SW5zdHJ1bWVudGF0aW9uLgorc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yTWVt
b3J5QmxvY2s+IGpzRXh0ZXJuYWxSZXNvdXJjZXNJbmZvKE1lbW9yeUluc3RydW1lbnRhdGlvbkNs
aWVudEltcGwmIGNsaWVudCkKIHsKLSAgICBFeHRlcm5hbFJlc291cmNlVmlzaXRvciB2aXNpdG9y
KHZpc2l0ZWRPYmplY3RzKTsKKyAgICBFeHRlcm5hbFJlc291cmNlVmlzaXRvciB2aXNpdG9yKGNs
aWVudCk7CiAgICAgU2NyaXB0UHJvZmlsZXI6OnZpc2l0RXh0ZXJuYWxTdHJpbmdzKCZ2aXNpdG9y
KTsKICAgICBTY3JpcHRQcm9maWxlcjo6dmlzaXRFeHRlcm5hbEFycmF5cygmdmlzaXRvcik7CiAK
QEAgLTU4MywxNSArNTg2LDE5IEBAIHZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OmdldFByb2Nl
c3NNZW1vcnlEaXN0cmlidXRpb24oRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zCiAgICAgSW5zcGVj
dG9yRGF0YUNvdW50ZXIgaW5zcGVjdG9yRGF0YTsKICAgICBpbnNwZWN0b3JEYXRhLmFkZENvbXBv
bmVudChNZW1vcnlCbG9ja05hbWU6Omluc3BlY3RvckpTSGVhcERhdGEsIFNjcmlwdFByb2ZpbGVy
Ojpwcm9maWxlclNuYXBzaG90c1NpemUoKSk7CiAKLSAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVk
T2JqZWN0czsKKyAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnRJbXBsIG1lbW9yeUluc3Ry
dW1lbnRhdGlvbkNsaWVudDsKKyAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIG1lbW9yeUlu
c3RydW1lbnRhdGlvbigmbWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50KTsKICAgICBSZWZQdHI8
VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvck1lbW9yeUJsb2NrPiA+IGNoaWxkcmVuID0gVHlw
ZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvck1lbW9yeUJsb2NrPjo6Y3JlYXRlKCk7CiAgICAgY2hp
bGRyZW4tPmFkZEl0ZW0oanNIZWFwSW5mbygpKTsKICAgICBjaGlsZHJlbi0+YWRkSXRlbShyZW5k
ZXJUcmVlSW5mbyhtX3BhZ2UpKTsgLy8gRklYTUU6IGNvbGxlY3QgZm9yIGFsbCBwYWdlcz8KLSAg
ICBjaGlsZHJlbi0+YWRkSXRlbShqc0V4dGVybmFsUmVzb3VyY2VzSW5mbyh2aXNpdGVkT2JqZWN0
cykpOwotICAgIGNvbGxlY3REb21UcmVlSW5mbyhtX3BhZ2UsIHZpc2l0ZWRPYmplY3RzLCBjaGls
ZHJlbi5nZXQoKSwgJmluc3BlY3RvckRhdGEpOyAvLyBGSVhNRTogY29sbGVjdCBmb3IgYWxsIHBh
Z2VzPwotICAgIGNoaWxkcmVuLT5hZGRJdGVtKGluc3BlY3RvckRhdGEuZHVtcFN0YXRpc3RpY3Mo
KSk7CisgICAgY2hpbGRyZW4tPmFkZEl0ZW0oanNFeHRlcm5hbFJlc291cmNlc0luZm8obWVtb3J5
SW5zdHJ1bWVudGF0aW9uQ2xpZW50KSk7CisgICAgY29sbGVjdERvbVRyZWVJbmZvKG1fcGFnZSwg
bWVtb3J5SW5zdHJ1bWVudGF0aW9uKTsgLy8gRklYTUU6IGNvbGxlY3QgZm9yIGFsbCBwYWdlcz8K
ICAgICBjaGlsZHJlbi0+YWRkSXRlbShkdW1wRE9NU3RvcmFnZUNhY2hlKG1fZG9tU3RvcmFnZUFn
ZW50LT5tZW1vcnlCeXRlc1VzZWRCeVN0b3JhZ2VDYWNoZSgpKSk7CiAgICAgYWRkUGxhdGZvcm1D
b21wb25lbnRzSW5mbyhjaGlsZHJlbik7CisgICAgTWVtb3J5VXNhZ2VTdGF0c0dlbmVyYXRvciBz
dGF0c0dlbmVyYXRvcigmbWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50KTsKKyAgICBzdGF0c0dl
bmVyYXRvci5kdW1wKGNoaWxkcmVuLmdldCgpKTsKKyAgICBpbnNwZWN0b3JEYXRhLmFkZENvbXBv
bmVudChNZW1vcnlCbG9ja05hbWU6Omluc3BlY3RvckRPTURhdGEsIG1lbW9yeUluc3RydW1lbnRh
dGlvbkNsaWVudC5zZWxmU2l6ZSgpICsgbWVtb3J5SW5zdHJ1bWVudGF0aW9uLnNlbGZTaXplKCkp
OworICAgIGNoaWxkcmVuLT5hZGRJdGVtKGluc3BlY3RvckRhdGEuZHVtcFN0YXRpc3RpY3MoKSk7
CiAgICAgcHJvY2Vzc01lbW9yeS0+c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOwogCiAgICAgc2l6ZV90
IHByaXZhdGVCeXRlcyA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
TWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
TWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbC5jcHAKaW5kZXggOTQ2ODg4Y2UyMGZmODg3MjdkNjE4
ZDhjZGZmZDM3NGM0NjIwMDk5Ny4uMTQzZTM3MGU1Mzg5NTNjYzlmMDA1ZDc2Zjc5ZTZkM2QyYmQw
N2E5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL01lbW9yeUluc3RydW1l
bnRhdGlvbkltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9NZW1vcnlJbnN0
cnVtZW50YXRpb25JbXBsLmNwcApAQCAtMzYsMTEgKzM2LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1NZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsOjpNZW1vcnlJbnN0cnVtZW50YXRpb25J
bXBsKFZpc2l0ZWRPYmplY3RzJiB2aXNpdGVkT2JqZWN0cykKLSAgICA6IG1fdmlzaXRlZE9iamVj
dHModmlzaXRlZE9iamVjdHMpCi17Ci19Ci0KIHZvaWQgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1w
bDo6cHJvY2Vzc0RlZmVycmVkSW5zdHJ1bWVudGVkUG9pbnRlcnMoKQogewogICAgIHdoaWxlICgh
bV9kZWZlcnJlZEluc3RydW1lbnRlZFBvaW50ZXJzLmlzRW1wdHkoKSkgewpAQCAtNTAsMjcgKzQ1
LDE0IEBAIHZvaWQgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbDo6cHJvY2Vzc0RlZmVycmVkSW5z
dHJ1bWVudGVkUG9pbnRlcnMoKQogICAgIH0KIH0KIAotdm9pZCBNZW1vcnlJbnN0cnVtZW50YXRp
b25JbXBsOjpjb3VudE9iamVjdFNpemUoTWVtb3J5T2JqZWN0VHlwZSBvYmplY3RUeXBlLCBzaXpl
X3Qgc2l6ZSkKLXsKLSAgICBBU1NFUlQob2JqZWN0VHlwZSk7Ci0gICAgVHlwZVRvU2l6ZU1hcDo6
QWRkUmVzdWx0IHJlc3VsdCA9IG1fdG90YWxTaXplcy5hZGQob2JqZWN0VHlwZSwgc2l6ZSk7Ci0g
ICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQgKz0gc2l6ZTsKLX0KLQogdm9pZCBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsOjpkZWZlcklu
c3RydW1lbnRlZFBvaW50ZXIoUGFzc093blB0cjxJbnN0cnVtZW50ZWRQb2ludGVyQmFzZT4gcG9p
bnRlcikKIHsKICAgICBtX2RlZmVycmVkSW5zdHJ1bWVudGVkUG9pbnRlcnMuYXBwZW5kKHBvaW50
ZXIpOwogfQogCi1ib29sIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGw6OnZpc2l0ZWQoY29uc3Qg
dm9pZCogb2JqZWN0KQotewotICAgIHJldHVybiAhbV92aXNpdGVkT2JqZWN0cy5hZGQob2JqZWN0
KS5pc05ld0VudHJ5OwotfQotCiBzaXplX3QgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbDo6c2Vs
ZlNpemUoKSBjb25zdAogewotICAgIHJldHVybiBjYWxjdWxhdGVDb250YWluZXJTaXplKG1fdmlz
aXRlZE9iamVjdHMpICsgY2FsY3VsYXRlQ29udGFpbmVyU2l6ZShtX2RlZmVycmVkSW5zdHJ1bWVu
dGVkUG9pbnRlcnMpOworICAgIHJldHVybiBjYWxjdWxhdGVDb250YWluZXJTaXplKG1fZGVmZXJy
ZWRJbnN0cnVtZW50ZWRQb2ludGVycyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9NZW1vcnlJbnN0cnVtZW50YXRpb25J
bXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1w
bC5oCmluZGV4IDhhMmFlZTVlMDUxY2U4NjUwYjRkMzExOTFiZDUyOGFkMDc5M2FkOGMuLjRkOGM0
OTEzYWY1NDVjOGI0OTAzYTlmMTBjZTJjMzk4Njg3ZmUwYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9NZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL01lbW9yeUluc3RydW1lbnRhdGlvbkltcGwuaApAQCAtNDIsMTMg
KzQyLDIxIEBAIHVzaW5nIFdURjo6TWVtb3J5T2JqZWN0VHlwZTsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi10eXBlZGVmIEhhc2hTZXQ8Y29uc3Qgdm9pZCo+IFZpc2l0ZWRPYmplY3RzOwotCi1j
bGFzcyBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIDogcHVibGljIFdURjo6TWVtb3J5SW5zdHJ1
bWVudGF0aW9uIHsKK2NsYXNzIE1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudEltcGwgOiBwdWJs
aWMgV1RGOjpNZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnQgewogcHVibGljOgotICAgIGV4cGxp
Y2l0IE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwoVmlzaXRlZE9iamVjdHMmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgY291bnRPYmplY3RTaXplKE1lbW9yeU9iamVjdFR5cGUgb2JqZWN0VHlwZSwgc2l6
ZV90IHNpemUpIE9WRVJSSURFCisgICAgeworICAgICAgICBBU1NFUlQob2JqZWN0VHlwZSk7Cisg
ICAgICAgIFR5cGVUb1NpemVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3RvdGFsU2l6ZXMuYWRk
KG9iamVjdFR5cGUsIHNpemUpOworICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAg
ICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgKz0gc2l6ZTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIGJvb2wgdmlzaXRlZChjb25zdCB2b2lkKiBvYmplY3QpIE9WRVJSSURFCisgICAgewor
ICAgICAgICByZXR1cm4gIW1fdmlzaXRlZE9iamVjdHMuYWRkKG9iamVjdCkuaXNOZXdFbnRyeTsK
KyAgICB9CiAKLSAgICBzaXplX3Qgc2VsZlNpemUoKSBjb25zdDsKICAgICBzaXplX3QgdG90YWxT
aXplKE1lbW9yeU9iamVjdFR5cGUgb2JqZWN0VHlwZSkgY29uc3QKICAgICB7CiAgICAgICAgIFR5
cGVUb1NpemVNYXA6OmNvbnN0X2l0ZXJhdG9yIGkgPSBtX3RvdGFsU2l6ZXMuZmluZChvYmplY3RU
eXBlKTsKQEAgLTYzLDE1ICs3MSwzMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzaXplOwog
ICAgIH0KIAorICAgIHNpemVfdCBzZWxmU2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV92aXNpdGVkT2JqZWN0cy5jYXBhY2l0eSgpICogc2l6ZW9mKFZpc2l0ZWRPYmplY3RzOjpW
YWx1ZVR5cGUpICsKKyAgICAgICAgICAgICAgIG1fdG90YWxTaXplcy5jYXBhY2l0eSgpICogc2l6
ZW9mKFR5cGVUb1NpemVNYXA6OlZhbHVlVHlwZSk7CisgICAgfQorCisgICAgc2l6ZV90IHZpc2l0
ZWRPYmplY3RzKCkgY29uc3QgeyByZXR1cm4gbV92aXNpdGVkT2JqZWN0cy5zaXplKCk7IH0KKwog
cHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgY291bnRPYmplY3RTaXplKE1lbW9yeU9iamVjdFR5
cGUsIHNpemVfdCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRlZmVySW5zdHJ1bWVudGVk
UG9pbnRlcihQYXNzT3duUHRyPEluc3RydW1lbnRlZFBvaW50ZXJCYXNlPikgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCBib29sIHZpc2l0ZWQoY29uc3Qgdm9pZCopIE9WRVJSSURFOwotICAgIHZpcnR1
YWwgdm9pZCBwcm9jZXNzRGVmZXJyZWRJbnN0cnVtZW50ZWRQb2ludGVycygpIE9WRVJSSURFOwor
ICAgIHR5cGVkZWYgSGFzaFNldDxjb25zdCB2b2lkKj4gVmlzaXRlZE9iamVjdHM7CisgICAgVmlz
aXRlZE9iamVjdHMgbV92aXNpdGVkT2JqZWN0czsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxNZW1v
cnlPYmplY3RUeXBlLCBzaXplX3Q+IFR5cGVUb1NpemVNYXA7CiAgICAgVHlwZVRvU2l6ZU1hcCBt
X3RvdGFsU2l6ZXM7Ci0gICAgVmlzaXRlZE9iamVjdHMmIG1fdmlzaXRlZE9iamVjdHM7Cit9Owor
CitjbGFzcyBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIDogcHVibGljIFdURjo6TWVtb3J5SW5z
dHJ1bWVudGF0aW9uIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBNZW1vcnlJbnN0cnVtZW50YXRp
b25JbXBsKFdURjo6TWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50KiBjbGllbnQpIDogTWVtb3J5
SW5zdHJ1bWVudGF0aW9uKGNsaWVudCkgeyB9CisKKyAgICBzaXplX3Qgc2VsZlNpemUoKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgZGVmZXJJbnN0cnVtZW50ZWRQb2ludGVy
KFBhc3NPd25QdHI8SW5zdHJ1bWVudGVkUG9pbnRlckJhc2U+KSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgcHJvY2Vzc0RlZmVycmVkSW5zdHJ1bWVudGVkUG9pbnRlcnMoKSBPVkVSUklERTsK
KwogICAgIFZlY3RvcjxPd25QdHI8SW5zdHJ1bWVudGVkUG9pbnRlckJhc2U+ID4gbV9kZWZlcnJl
ZEluc3RydW1lbnRlZFBvaW50ZXJzOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9NZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdC5jcHAKaW5kZXggNGFj
ZjQ5NmFkODdkMmQ4M2E5ODdkNzk0NmY1Mzc2ZWE3NTZhNDJmMC4uOGY1Njc5YzgxMzMzY2EzMGEx
ODAzNmMwNTlkZTMzNTNjOTE4MTVmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9NZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL01lbW9yeUluc3RydW1lbnRhdGlvblRlc3QuY3BwCkBAIC00OCw2ICs0
OCwyMSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIHsKIAorY2xhc3Mg
SW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciB7CitwdWJsaWM6CisgICAgSW5zdHJ1bWVudGF0aW9u
VGVzdEhlbHBlcigpIDogbV9jbGllbnQoKSwgbV9pbnN0cnVtZW50YXRpb24oJm1fY2xpZW50KSB7
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBhZGRSb290T2JqZWN0KGNv
bnN0IFQmIHQpIHsgbV9pbnN0cnVtZW50YXRpb24uYWRkUm9vdE9iamVjdCh0KTsgfQorICAgIHNp
emVfdCByZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50LnJl
cG9ydGVkU2l6ZUZvckFsbFR5cGVzKCk7IH0KKyAgICBpbnQgdmlzaXRlZE9iamVjdHMoKSBjb25z
dCB7IHJldHVybiBtX2NsaWVudC52aXNpdGVkT2JqZWN0cygpOyB9CisgICAgc2l6ZV90IHRvdGFs
U2l6ZShNZW1vcnlPYmplY3RUeXBlIG9iamVjdFR5cGUpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50
LnRvdGFsU2l6ZShvYmplY3RUeXBlKTsgfQorCitwcml2YXRlOgorICAgIE1lbW9yeUluc3RydW1l
bnRhdGlvbkNsaWVudEltcGwgbV9jbGllbnQ7CisgICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1w
bCBtX2luc3RydW1lbnRhdGlvbjsKK307CisKIGNsYXNzIE5vdEluc3RydW1lbnRlZCB7CiBwdWJs
aWM6CiAgICAgTm90SW5zdHJ1bWVudGVkKGNvbnN0IGNoYXIqID0gMCkgeyB9CkBAIC02OSw1MiAr
ODQsNDcgQEAgcHVibGljOgogCiBURVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIHNpemVP
ZikKIHsKLSAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0czsKLSAgICBNZW1vcnlJbnN0
cnVtZW50YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMpOworICAgIEluc3RydW1lbnRhdGlv
blRlc3RIZWxwZXIgaGVscGVyOwogICAgIEluc3RydW1lbnRlZCBpbnN0cnVtZW50ZWQ7Ci0gICAg
aW1wbC5hZGRSb290T2JqZWN0KGluc3RydW1lbnRlZCk7Ci0gICAgRVhQRUNUX0VRKHNpemVvZihO
b3RJbnN0cnVtZW50ZWQpLCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgIEVY
UEVDVF9FUSgxLCB2aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAgIGhlbHBlci5hZGRSb290T2Jq
ZWN0KGluc3RydW1lbnRlZCk7CisgICAgRVhQRUNUX0VRKHNpemVvZihOb3RJbnN0cnVtZW50ZWQp
LCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIGhl
bHBlci52aXNpdGVkT2JqZWN0cygpKTsKIH0KIAogVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25U
ZXN0LCBudWxsQ2hlY2spCiB7Ci0gICAgVmlzaXRlZE9iamVjdHMgdmlzaXRlZE9iamVjdHM7Ci0g
ICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0ZWRPYmplY3RzKTsKKyAgICBJ
bnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKICAgICBJbnN0cnVtZW50ZWQqIGluc3Ry
dW1lbnRlZCA9IDA7Ci0gICAgaW1wbC5hZGRSb290T2JqZWN0KGluc3RydW1lbnRlZCk7Ci0gICAg
RVhQRUNUX0VRKDB1LCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgIEVYUEVD
VF9FUSgwLCB2aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAgIGhlbHBlci5hZGRSb290T2JqZWN0
KGluc3RydW1lbnRlZCk7CisgICAgRVhQRUNUX0VRKDB1LCBoZWxwZXIucmVwb3J0ZWRTaXplRm9y
QWxsVHlwZXMoKSk7CisgICAgRVhQRUNUX0VRKDAsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsK
IH0KIAogVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCBwdHJWc1JlZikKIHsKICAgICB7
Ci0gICAgICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwotICAgICAgICBNZW1vcnlJ
bnN0cnVtZW50YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMpOworICAgICAgICBJbnN0cnVt
ZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKICAgICAgICAgSW5zdHJ1bWVudGVkIGluc3RydW1l
bnRlZDsKLSAgICAgICAgaW1wbC5hZGRSb290T2JqZWN0KCZpbnN0cnVtZW50ZWQpOwotICAgICAg
ICBFWFBFQ1RfRVEoc2l6ZW9mKEluc3RydW1lbnRlZCkgKyBzaXplb2YoTm90SW5zdHJ1bWVudGVk
KSwgaW1wbC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICAgICAgRVhQRUNUX0VRKDIs
IHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAgICAgIGhlbHBlci5hZGRSb290T2JqZWN0KCZp
bnN0cnVtZW50ZWQpOworICAgICAgICBFWFBFQ1RfRVEoc2l6ZW9mKEluc3RydW1lbnRlZCkgKyBz
aXplb2YoTm90SW5zdHJ1bWVudGVkKSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkp
OworICAgICAgICBFWFBFQ1RfRVEoMiwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwogICAgIH0K
ICAgICB7Ci0gICAgICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwotICAgICAgICBN
ZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMpOworICAgICAgICBJ
bnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKICAgICAgICAgSW5zdHJ1bWVudGVkIGlu
c3RydW1lbnRlZDsKLSAgICAgICAgaW1wbC5hZGRSb290T2JqZWN0KGluc3RydW1lbnRlZCk7Ci0g
ICAgICAgIEVYUEVDVF9FUShzaXplb2YoTm90SW5zdHJ1bWVudGVkKSwgaW1wbC5yZXBvcnRlZFNp
emVGb3JBbGxUeXBlcygpKTsKLSAgICAgICAgRVhQRUNUX0VRKDEsIHZpc2l0ZWRPYmplY3RzLnNp
emUoKSk7CisgICAgICAgIGhlbHBlci5hZGRSb290T2JqZWN0KGluc3RydW1lbnRlZCk7CisgICAg
ICAgIEVYUEVDVF9FUShzaXplb2YoTm90SW5zdHJ1bWVudGVkKSwgaGVscGVyLnJlcG9ydGVkU2l6
ZUZvckFsbFR5cGVzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMSwgaGVscGVyLnZpc2l0ZWRPYmpl
Y3RzKCkpOwogICAgIH0KIH0KIAogVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCBvd25Q
dHIpCiB7Ci0gICAgVmlzaXRlZE9iamVjdHMgdmlzaXRlZE9iamVjdHM7Ci0gICAgTWVtb3J5SW5z
dHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0ZWRPYmplY3RzKTsKKyAgICBJbnN0cnVtZW50YXRp
b25UZXN0SGVscGVyIGhlbHBlcjsKICAgICBPd25QdHI8SW5zdHJ1bWVudGVkPiBpbnN0cnVtZW50
ZWQoYWRvcHRQdHIobmV3IEluc3RydW1lbnRlZCkpOwotICAgIGltcGwuYWRkUm9vdE9iamVjdChp
bnN0cnVtZW50ZWQpOwotICAgIEVYUEVDVF9FUShzaXplb2YoSW5zdHJ1bWVudGVkKSArIHNpemVv
ZihOb3RJbnN0cnVtZW50ZWQpLCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAg
IEVYUEVDVF9FUSgyLCB2aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAgIGhlbHBlci5hZGRSb290
T2JqZWN0KGluc3RydW1lbnRlZCk7CisgICAgRVhQRUNUX0VRKHNpemVvZihJbnN0cnVtZW50ZWQp
ICsgc2l6ZW9mKE5vdEluc3RydW1lbnRlZCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBl
cygpKTsKKyAgICBFWFBFQ1RfRVEoMiwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwogfQogCiBj
bGFzcyBJbnN0cnVtZW50ZWRSZWZQdHIgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnN0cnVtZW50ZWRS
ZWZQdHI+IHsKQEAgLTEzMywyMyArMTQzLDIxIEBAIHB1YmxpYzoKIAogVEVTVChNZW1vcnlJbnN0
cnVtZW50YXRpb25UZXN0LCBkYXRhUmVmKQogewotICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRP
YmplY3RzOwotICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0
cyk7CisgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CiAgICAgRGF0YVJlZjxJ
bnN0cnVtZW50ZWRSZWZQdHI+IGluc3RydW1lbnRlZFJlZlB0cjsKICAgICBpbnN0cnVtZW50ZWRS
ZWZQdHIuaW5pdCgpOwotICAgIGltcGwuYWRkUm9vdE9iamVjdChpbnN0cnVtZW50ZWRSZWZQdHIp
OwotICAgIEVYUEVDVF9FUShzaXplb2YoSW5zdHJ1bWVudGVkUmVmUHRyKSArIHNpemVvZihOb3RJ
bnN0cnVtZW50ZWQpLCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgIEVYUEVD
VF9FUSgyLCB2aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAgIGhlbHBlci5hZGRSb290T2JqZWN0
KGluc3RydW1lbnRlZFJlZlB0cik7CisgICAgRVhQRUNUX0VRKHNpemVvZihJbnN0cnVtZW50ZWRS
ZWZQdHIpICsgc2l6ZW9mKE5vdEluc3RydW1lbnRlZCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JB
bGxUeXBlcygpKTsKKyAgICBFWFBFQ1RfRVEoMiwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwog
fQogCiBURVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIHJlZlB0cikKIHsKLSAgICBWaXNp
dGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0czsKLSAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBs
IGltcGwodmlzaXRlZE9iamVjdHMpOworICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVs
cGVyOwogICAgIFJlZlB0cjxJbnN0cnVtZW50ZWRSZWZQdHI+IGluc3RydW1lbnRlZFJlZlB0cihh
ZG9wdFJlZihuZXcgSW5zdHJ1bWVudGVkUmVmUHRyKSk7Ci0gICAgaW1wbC5hZGRSb290T2JqZWN0
KGluc3RydW1lbnRlZFJlZlB0cik7Ci0gICAgRVhQRUNUX0VRKHNpemVvZihJbnN0cnVtZW50ZWRS
ZWZQdHIpICsgc2l6ZW9mKE5vdEluc3RydW1lbnRlZCksIGltcGwucmVwb3J0ZWRTaXplRm9yQWxs
VHlwZXMoKSk7Ci0gICAgRVhQRUNUX0VRKDIsIHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAg
aGVscGVyLmFkZFJvb3RPYmplY3QoaW5zdHJ1bWVudGVkUmVmUHRyKTsKKyAgICBFWFBFQ1RfRVEo
c2l6ZW9mKEluc3RydW1lbnRlZFJlZlB0cikgKyBzaXplb2YoTm90SW5zdHJ1bWVudGVkKSwgaGVs
cGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBoZWxwZXIu
dmlzaXRlZE9iamVjdHMoKSk7CiB9CiAKIGNsYXNzIEluc3RydW1lbnRlZFdpdGhPd25QdHIgOiBw
dWJsaWMgSW5zdHJ1bWVudGVkIHsKQEAgLTE2NywxMiArMTc1LDExIEBAIHB1YmxpYzoKIAogVEVT
VChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCBvd25QdHJOb3RJbnN0cnVtZW50ZWQpCiB7Ci0g
ICAgVmlzaXRlZE9iamVjdHMgdmlzaXRlZE9iamVjdHM7Ci0gICAgTWVtb3J5SW5zdHJ1bWVudGF0
aW9uSW1wbCBpbXBsKHZpc2l0ZWRPYmplY3RzKTsKKyAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVs
cGVyIGhlbHBlcjsKICAgICBJbnN0cnVtZW50ZWRXaXRoT3duUHRyIGluc3RydW1lbnRlZFdpdGhP
d25QdHI7Ci0gICAgaW1wbC5hZGRSb290T2JqZWN0KGluc3RydW1lbnRlZFdpdGhPd25QdHIpOwot
ICAgIEVYUEVDVF9FUSgyICogc2l6ZW9mKE5vdEluc3RydW1lbnRlZCksIGltcGwucmVwb3J0ZWRT
aXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgRVhQRUNUX0VRKDIsIHZpc2l0ZWRPYmplY3RzLnNpemUo
KSk7CisgICAgaGVscGVyLmFkZFJvb3RPYmplY3QoaW5zdHJ1bWVudGVkV2l0aE93blB0cik7Cisg
ICAgRVhQRUNUX0VRKDIgKiBzaXplb2YoTm90SW5zdHJ1bWVudGVkKSwgaGVscGVyLnJlcG9ydGVk
U2l6ZUZvckFsbFR5cGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBoZWxwZXIudmlzaXRlZE9iamVj
dHMoKSk7CiB9CiAKIGNsYXNzIEluc3RydW1lbnRlZFVuZGVmaW5lZCB7CkBAIC0yMDAsMTMgKzIw
NywxMiBAQCBwdWJsaWM6CiAKIFRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwgb3duZXJU
eXBlUHJvcGFnYXRpb24pCiB7Ci0gICAgVmlzaXRlZE9iamVjdHMgdmlzaXRlZE9iamVjdHM7Ci0g
ICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0ZWRPYmplY3RzKTsKKyAgICBJ
bnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKICAgICBPd25QdHI8SW5zdHJ1bWVudGVk
RE9NPiBpbnN0cnVtZW50ZWRET00oYWRvcHRQdHIobmV3IEluc3RydW1lbnRlZERPTSkpOwotICAg
IGltcGwuYWRkUm9vdE9iamVjdChpbnN0cnVtZW50ZWRET00pOwotICAgIEVYUEVDVF9FUShzaXpl
b2YoSW5zdHJ1bWVudGVkRE9NKSArIHNpemVvZihJbnN0cnVtZW50ZWRVbmRlZmluZWQpLCBpbXBs
LnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgIEVYUEVDVF9FUShzaXplb2YoSW5zdHJ1
bWVudGVkRE9NKSArIHNpemVvZihJbnN0cnVtZW50ZWRVbmRlZmluZWQpLCBpbXBsLnRvdGFsU2l6
ZShXZWJDb3JlTWVtb3J5VHlwZXM6OkRPTSkpOwotICAgIEVYUEVDVF9FUSgyLCB2aXNpdGVkT2Jq
ZWN0cy5zaXplKCkpOworICAgIGhlbHBlci5hZGRSb290T2JqZWN0KGluc3RydW1lbnRlZERPTSk7
CisgICAgRVhQRUNUX0VRKHNpemVvZihJbnN0cnVtZW50ZWRET00pICsgc2l6ZW9mKEluc3RydW1l
bnRlZFVuZGVmaW5lZCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICBF
WFBFQ1RfRVEoc2l6ZW9mKEluc3RydW1lbnRlZERPTSkgKyBzaXplb2YoSW5zdHJ1bWVudGVkVW5k
ZWZpbmVkKSwgaGVscGVyLnRvdGFsU2l6ZShXZWJDb3JlTWVtb3J5VHlwZXM6OkRPTSkpOworICAg
IEVYUEVDVF9FUSgyLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7CiB9CiAKIGNsYXNzIE5vblZp
cnR1YWxJbnN0cnVtZW50ZWQgewpAQCAtMjIyLDEyICsyMjgsMTEgQEAgcHVibGljOgogCiBURVNU
KE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIHZpc2l0Rmlyc3RNZW1iZXJJbk5vblZpcnR1YWxD
bGFzcykKIHsKLSAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0czsKLSAgICBNZW1vcnlJ
bnN0cnVtZW50YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMpOworICAgIEluc3RydW1lbnRh
dGlvblRlc3RIZWxwZXIgaGVscGVyOwogICAgIE5vblZpcnR1YWxJbnN0cnVtZW50ZWQgbm9uVmly
dHVhbEluc3RydW1lbnRlZDsKLSAgICBpbXBsLmFkZFJvb3RPYmplY3QoJm5vblZpcnR1YWxJbnN0
cnVtZW50ZWQpOwotICAgIEVYUEVDVF9FUShzaXplb2YoTm9uVmlydHVhbEluc3RydW1lbnRlZCkg
KyBzaXplb2YoTm90SW5zdHJ1bWVudGVkKSwgaW1wbC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygp
KTsKLSAgICBFWFBFQ1RfRVEoMiwgdmlzaXRlZE9iamVjdHMuc2l6ZSgpKTsKKyAgICBoZWxwZXIu
YWRkUm9vdE9iamVjdCgmbm9uVmlydHVhbEluc3RydW1lbnRlZCk7CisgICAgRVhQRUNUX0VRKHNp
emVvZihOb25WaXJ0dWFsSW5zdHJ1bWVudGVkKSArIHNpemVvZihOb3RJbnN0cnVtZW50ZWQpLCBo
ZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgRVhQRUNUX0VRKDIsIGhlbHBl
ci52aXNpdGVkT2JqZWN0cygpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTI0Nywz
MiArMjUyLDI5IEBAIHB1YmxpYzoKIFRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwgdmlz
aXRTdHJpbmdzKQogewogICAgIHsKLSAgICAgICAgVmlzaXRlZE9iamVjdHMgdmlzaXRlZE9iamVj
dHM7Ci0gICAgICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0
cyk7CisgICAgICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwogICAgICAgICBJ
bnN0cnVtZW50ZWRPd25lcjxTdHJpbmc+IHN0cmluZ0luc3RydW1lbnRlZE93bmVyKCJTdHJpbmci
KTsKICAgICAgICAgc3RyaW5nSW5zdHJ1bWVudGVkT3duZXIubV92YWx1ZS5jaGFyYWN0ZXJzKCk7
IC8vIEZvcmNlIDE2Yml0IHNoYWRvdyBjcmVhdGlvbi4KLSAgICAgICAgaW1wbC5hZGRSb290T2Jq
ZWN0KHN0cmluZ0luc3RydW1lbnRlZE93bmVyKTsKLSAgICAgICAgRVhQRUNUX0VRKHNpemVvZihT
dHJpbmdJbXBsKSArIHN0cmluZ0luc3RydW1lbnRlZE93bmVyLm1fdmFsdWUubGVuZ3RoKCkgKiAy
LCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgICAgICBFWFBFQ1RfRVEoMiwg
dmlzaXRlZE9iamVjdHMuc2l6ZSgpKTsKKyAgICAgICAgaGVscGVyLmFkZFJvb3RPYmplY3Qoc3Ry
aW5nSW5zdHJ1bWVudGVkT3duZXIpOworICAgICAgICBFWFBFQ1RfRVEoc2l6ZW9mKFN0cmluZ0lt
cGwpICsgc3RyaW5nSW5zdHJ1bWVudGVkT3duZXIubV92YWx1ZS5sZW5ndGgoKSAqIDIsIGhlbHBl
ci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDIsIGhlbHBl
ci52aXNpdGVkT2JqZWN0cygpKTsKICAgICB9CiAKICAgICB7Ci0gICAgICAgIFZpc2l0ZWRPYmpl
Y3RzIHZpc2l0ZWRPYmplY3RzOwotICAgICAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIGlt
cGwodmlzaXRlZE9iamVjdHMpOworICAgICAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhl
bHBlcjsKICAgICAgICAgSW5zdHJ1bWVudGVkT3duZXI8QXRvbWljU3RyaW5nPiBhdG9taWNTdHJp
bmdJbnN0cnVtZW50ZWRPd25lcigiQXRvbWljU3RyaW5nIik7CiAgICAgICAgIGF0b21pY1N0cmlu
Z0luc3RydW1lbnRlZE93bmVyLm1fdmFsdWUuc3RyaW5nKCkuY2hhcmFjdGVycygpOyAvLyBGb3Jj
ZSAxNmJpdCBzaGFkb3cgY3JlYXRpb24uCi0gICAgICAgIGltcGwuYWRkUm9vdE9iamVjdChhdG9t
aWNTdHJpbmdJbnN0cnVtZW50ZWRPd25lcik7Ci0gICAgICAgIEVYUEVDVF9FUShzaXplb2YoU3Ry
aW5nSW1wbCkgKyBhdG9taWNTdHJpbmdJbnN0cnVtZW50ZWRPd25lci5tX3ZhbHVlLmxlbmd0aCgp
ICogMiwgaW1wbC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICAgICAgRVhQRUNUX0VR
KDIsIHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAgICAgIGhlbHBlci5hZGRSb290T2JqZWN0
KGF0b21pY1N0cmluZ0luc3RydW1lbnRlZE93bmVyKTsKKyAgICAgICAgRVhQRUNUX0VRKHNpemVv
ZihTdHJpbmdJbXBsKSArIGF0b21pY1N0cmluZ0luc3RydW1lbnRlZE93bmVyLm1fdmFsdWUubGVu
Z3RoKCkgKiAyLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgICAgIEVY
UEVDVF9FUSgyLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7CiAgICAgfQogCiAgICAgewotICAg
ICAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0czsKLSAgICAgICAgTWVtb3J5SW5zdHJ1
bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0ZWRPYmplY3RzKTsKKyAgICAgICAgSW5zdHJ1bWVudGF0
aW9uVGVzdEhlbHBlciBoZWxwZXI7CiAgICAgICAgIEluc3RydW1lbnRlZE93bmVyPENTdHJpbmc+
IGNTdHJpbmdJbnN0cnVtZW50ZWRPd25lcigiQ1N0cmluZyIpOwotICAgICAgICBpbXBsLmFkZFJv
b3RPYmplY3QoY1N0cmluZ0luc3RydW1lbnRlZE93bmVyKTsKLSAgICAgICAgRVhQRUNUX0VRKHNp
emVvZihXVEY6OkNTdHJpbmdCdWZmZXIpICsgY1N0cmluZ0luc3RydW1lbnRlZE93bmVyLm1fdmFs
dWUubGVuZ3RoKCksIGltcGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgICAgIEVY
UEVDVF9FUSgxLCB2aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAgICAgICBoZWxwZXIuYWRkUm9v
dE9iamVjdChjU3RyaW5nSW5zdHJ1bWVudGVkT3duZXIpOworICAgICAgICBFWFBFQ1RfRVEoc2l6
ZW9mKFdURjo6Q1N0cmluZ0J1ZmZlcikgKyBjU3RyaW5nSW5zdHJ1bWVudGVkT3duZXIubV92YWx1
ZS5sZW5ndGgoKSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgICAgICBF
WFBFQ1RfRVEoMSwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwogICAgIH0KIH0KIApAQCAtMjky
LDEzICsyOTQsMTIgQEAgcHVibGljOgogCiBURVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3Qs
IHJlZlB0clB0cikKIHsKKyAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKICAg
ICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVmUHRyOwogICAgIFR3b1BvaW50ZXJzVG9SZWZQdHIgcm9v
dChyZWZQdHIpOwotICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwotICAgIE1lbW9y
eUluc3RydW1lbnRhdGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7Ci0gICAgaW1wbC5hZGRS
b290T2JqZWN0KHJvb3QpOwotICAgIEVYUEVDVF9FUShzaXplb2YoUmVmUHRyPFN0cmluZ0ltcGw+
KSwgaW1wbC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICBFWFBFQ1RfRVEoMSwgdmlz
aXRlZE9iamVjdHMuc2l6ZSgpKTsKKyAgICBoZWxwZXIuYWRkUm9vdE9iamVjdChyb290KTsKKyAg
ICBFWFBFQ1RfRVEoc2l6ZW9mKFJlZlB0cjxTdHJpbmdJbXBsPiksIGhlbHBlci5yZXBvcnRlZFNp
emVGb3JBbGxUeXBlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgaGVscGVyLnZpc2l0ZWRPYmplY3Rz
KCkpOwogfQogCiBjbGFzcyBUd29Qb2ludGVyc1RvT3duUHRyIHsKQEAgLTMxNywxMyArMzE4LDEy
IEBAIHB1YmxpYzoKIAogVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCBvd25QdHJQdHIp
CiB7CisgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CiAgICAgT3duUHRyPE5v
dEluc3RydW1lbnRlZD4gb3duUHRyOwogICAgIFR3b1BvaW50ZXJzVG9Pd25QdHIgcm9vdChvd25Q
dHIpOwotICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwotICAgIE1lbW9yeUluc3Ry
dW1lbnRhdGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7Ci0gICAgaW1wbC5hZGRSb290T2Jq
ZWN0KHJvb3QpOwotICAgIEVYUEVDVF9FUShzaXplb2YoT3duUHRyPE5vdEluc3RydW1lbnRlZD4p
LCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgIEVYUEVDVF9FUSgxLCB2aXNp
dGVkT2JqZWN0cy5zaXplKCkpOworICAgIGhlbHBlci5hZGRSb290T2JqZWN0KHJvb3QpOworICAg
IEVYUEVDVF9FUShzaXplb2YoT3duUHRyPE5vdEluc3RydW1lbnRlZD4pLCBoZWxwZXIucmVwb3J0
ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIGhlbHBlci52aXNpdGVkT2Jq
ZWN0cygpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTM0NSwyNSArMzQ1LDIzIEBA
IHB1YmxpYzoKIFRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwgZGV0ZWN0UmVwb3J0TWVt
b3J5VXNhZ2VNZXRob2QpCiB7CiAgICAgewotICAgICAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVk
T2JqZWN0czsKLSAgICAgICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0ZWRP
YmplY3RzKTsKKyAgICAgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CiAKICAg
ICAgICAgT3duUHRyPEluc3RydW1lbnRlZFRlbXBsYXRlPFN0cmluZz4gPiB2YWx1ZSA9IGFkb3B0
UHRyKG5ldyBJbnN0cnVtZW50ZWRUZW1wbGF0ZTxTdHJpbmc+KCIiKSk7CiAgICAgICAgIEluc3Ry
dW1lbnRlZE93bmVyPEluc3RydW1lbnRlZFRlbXBsYXRlPFN0cmluZz4qID4gcm9vdCh2YWx1ZS5n
ZXQoKSk7Ci0gICAgICAgIGltcGwuYWRkUm9vdE9iamVjdChyb290KTsKLSAgICAgICAgRVhQRUNU
X0VRKHNpemVvZihJbnN0cnVtZW50ZWRUZW1wbGF0ZTxTdHJpbmc+KSArIHNpemVvZihTdHJpbmdJ
bXBsKSwgaW1wbC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICAgICAgaGVscGVyLmFk
ZFJvb3RPYmplY3Qocm9vdCk7CisgICAgICAgIEVYUEVDVF9FUShzaXplb2YoSW5zdHJ1bWVudGVk
VGVtcGxhdGU8U3RyaW5nPikgKyBzaXplb2YoU3RyaW5nSW1wbCksIGhlbHBlci5yZXBvcnRlZFNp
emVGb3JBbGxUeXBlcygpKTsKICAgICAgICAgLy8gRklYTUU6IGl0IGlzIGZhaWxpbmcgb24gQ2hy
b21pdW0gQ2FuYXJ5IGJvdHMgYnV0IHdvcmtzIGZpbmUgbG9jYWxseS4KLSAgICAgICAgLy8gRVhQ
RUNUX0VRKDIsIHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAgICAgIC8vIEVYUEVDVF9FUSgy
LCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7CiAgICAgfQogICAgIHsKLSAgICAgICAgVmlzaXRl
ZE9iamVjdHMgdmlzaXRlZE9iamVjdHM7Ci0gICAgICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbklt
cGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7CisgICAgICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxw
ZXIgaGVscGVyOwogCiAgICAgICAgIE93blB0cjxJbnN0cnVtZW50ZWRUZW1wbGF0ZTxOb3RJbnN0
cnVtZW50ZWQ+ID4gdmFsdWUgPSBhZG9wdFB0cihuZXcgSW5zdHJ1bWVudGVkVGVtcGxhdGU8Tm90
SW5zdHJ1bWVudGVkPigiIikpOwogICAgICAgICBJbnN0cnVtZW50ZWRPd25lcjxJbnN0cnVtZW50
ZWRUZW1wbGF0ZTxOb3RJbnN0cnVtZW50ZWQ+KiA+IHJvb3QodmFsdWUuZ2V0KCkpOwotICAgICAg
ICBpbXBsLmFkZFJvb3RPYmplY3Qocm9vdCk7Ci0gICAgICAgIEVYUEVDVF9FUShzaXplb2YoSW5z
dHJ1bWVudGVkVGVtcGxhdGU8Tm90SW5zdHJ1bWVudGVkPiksIGltcGwucmVwb3J0ZWRTaXplRm9y
QWxsVHlwZXMoKSk7Ci0gICAgICAgIEVYUEVDVF9FUSgxLCB2aXNpdGVkT2JqZWN0cy5zaXplKCkp
OworICAgICAgICBoZWxwZXIuYWRkUm9vdE9iamVjdChyb290KTsKKyAgICAgICAgRVhQRUNUX0VR
KHNpemVvZihJbnN0cnVtZW50ZWRUZW1wbGF0ZTxOb3RJbnN0cnVtZW50ZWQ+KSwgaGVscGVyLnJl
cG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMSwgaGVscGVyLnZp
c2l0ZWRPYmplY3RzKCkpOwogICAgIH0KIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165405</attachid>
            <date>2012-09-24 09:57:03 -0700</date>
            <delta_ts>2012-09-27 01:45:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97461-20120924205623.patch</filename>
            <type>text/plain</type>
            <size>33935</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5MzUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDdiYjEwYzFmYjY0ZTVlYjFhN2I4YmVl
M2NlMmU3ZTlkYjVkZmVkYjMuLjk2YWZjMmZkM2U3MDJkMjY3NDdmYjRjMDgyYzk5MzY3OWM1NzU4
MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTItMDktMjQgIElseWEgVGlraG9ub3Zza3kgIDxs
b2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IE5NSTogbW92ZSB2
aXNpdGVkIGFuZCBjb3VudE9iamVjdFNpemUgbWV0aG9kcyBpbXBsZW1lbnRhdGlvbiBpbnRvIHNl
cGFyYXRlIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTc0NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGVzZSBtZXRob2RzIGFuZCB0aGUgZGF0YSBjb2xsZWN0ZWQgYnkgdGhlbSBuZWVkIHRv
IGJlIHVzZWQgaW4gdGhlIGluc3RydW1lbnRhdGlvbiBjb2RlIGZvciBvdGhlciBjb21wb25lbnRz
LgorICAgICAgICBBcyBleGFtcGxlIHdoZW4gd2UgYXJlIHZpc2l0aW5nIGJpdG1hcHMgd2UgbmVl
ZCB0byB2aXNpdCBwbGF0Zm9ybSBzcGVjaWZpYyBvYmplY3RzLgorICAgICAgICBUaGVzZSBvYmpl
Y3RzIHdpbGwgYmUgaW5zdHJ1bWVudGVkIHdpdGggaGVscCBvZiBjb21wb25lbnQncyBvd24gaW5z
dHJ1bWVudGF0aW9uIGNvZGUKKyAgICAgICAgYnV0IHdlIGhhdmUgdG8ga2VlcCB0aGUgc2luZ2xl
IHNldCBvZiB2aXNpdGVkIG9iamVjdHMgYW5kIHRoZSBtYXAgb2YgY291bnRlcnMuCisKKyAgICAg
ICAgKiB3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmg6CisgICAgICAgIChNZW1vcnlJbnN0cnVt
ZW50YXRpb25DbGllbnQpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdURjo6TWVtb3J5SW5z
dHJ1bWVudGF0aW9uOjpNZW1vcnlJbnN0cnVtZW50YXRpb24pOgorICAgICAgICAoTWVtb3J5SW5z
dHJ1bWVudGF0aW9uKToKKyAgICAgICAgKFdURjo6TWVtb3J5SW5zdHJ1bWVudGF0aW9uOjpjb3Vu
dE9iamVjdFNpemUpOgorICAgICAgICAoV1RGOjpNZW1vcnlJbnN0cnVtZW50YXRpb246OnZpc2l0
ZWQpOgorCiAyMDEyLTA5LTIzICBCeXVuZ3dvbyBMZWUgIDxidzgwLmxlZUBnbWFpbC5jb20+CiAK
ICAgICAgICAgRml4IGJ1aWxkIHdhcm5pbmdzIDogLVd1bnVzZWQtcGFyYW1ldGVyLCAtV3BhcmVu
dGhlc2VzLCAtV3VuaW5pdGlhbGl6ZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzNkYjVlZjRjYWRmMTY0MWMw
YzUzMTg4MWZmZDI0OGRhNGI1NjgxNy4uNThhMGUwNzBhNWJlZjI5N2Q4MDNlMDQ5NWNiNzQ3MTgy
YTk3YWIwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDEyLTA5LTI0ICBJbHlhIFRp
a2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBOTUk6IG1vdmUgdmlzaXRlZCBhbmQgY291bnRPYmplY3RTaXplIG1ldGhvZHMgaW1wbGVtZW50
YXRpb24gaW50byBzZXBhcmF0ZSBjbGFzcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk3NDYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhlc2UgbWV0aG9kcyBhbmQgdGhlIGRhdGEgY29sbGVjdGVkIGJ5
IHRoZW0gbmVlZCB0byBiZSB1c2VkIGluIHRoZSBpbnN0cnVtZW50YXRpb24gY29kZSBmb3Igb3Ro
ZXIgY29tcG9uZW50cy4KKyAgICAgICAgQXMgZXhhbXBsZSB3aGVuIHdlIGFyZSB2aXNpdGluZyBi
aXRtYXBzIHdlIG5lZWQgdG8gdmlzaXQgcGxhdGZvcm0gc3BlY2lmaWMgb2JqZWN0cy4KKyAgICAg
ICAgVGhlc2Ugb2JqZWN0cyB3aWxsIGJlIGluc3RydW1lbnRlZCB3aXRoIGhlbHAgb2YgY29tcG9u
ZW50J3Mgb3duIGluc3RydW1lbnRhdGlvbiBjb2RlCisgICAgICAgIGJ1dCB3ZSBoYXZlIHRvIGtl
ZXAgdGhlIHNpbmdsZSBzZXQgb2YgdmlzaXRlZCBvYmplY3RzIGFuZCB0aGUgbWFwIG9mIGNvdW50
ZXJzLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdERvbVRyZWVJbmZvKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzRXh0ZXJuYWxSZXNvdXJjZXNJbmZvKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvck1lbW9yeUFnZW50OjpnZXRQcm9jZXNzTWVtb3J5RGlzdHJpYnV0aW9u
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsOjpzZWxmU2l6ZSk6Cisg
ICAgICAgICogaW5zcGVjdG9yL01lbW9yeUluc3RydW1lbnRhdGlvbkltcGwuaDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudEltcGw6OnNlbGZTaXplKToKKyAg
ICAgICAgKE1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudEltcGwpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50SW1wbDo6dmlzaXRlZE9iamVjdHMpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lbW9yeUluc3RydW1lbnRhdGlvbkltcGw6Ok1lbW9yeUluc3RydW1l
bnRhdGlvbkltcGwpOgorCiAyMDEyLTA5LTI0ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6RVhDX0JBRF9BQ0NFU1MgdXBvbiBj
bG9zaW5nIHBhZ2Ugd2l0aCBub2RlIGhpZ2hsaWdodGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CmluZGV4IDM0MGVlZDZhZjc5MDQwZmJjNTllOGQ2ODVkZjhlNTM4OWJkMzM0Y2IuLjczN2ZjNWIx
ZWExYTlmOTEzN2E5YTYzYWYyYWE4Yjk0YzI3ZjRlNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTItMDktMjQgIElseWEgVGlraG9ub3Zza3kgIDxsb2lz
bG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IE5NSTogbW92ZSB2aXNp
dGVkIGFuZCBjb3VudE9iamVjdFNpemUgbWV0aG9kcyBpbXBsZW1lbnRhdGlvbiBpbnRvIHNlcGFy
YXRlIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTc0NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGVzZSBtZXRob2RzIGFuZCB0aGUgZGF0YSBjb2xsZWN0ZWQgYnkgdGhlbSBuZWVkIHRvIGJl
IHVzZWQgaW4gdGhlIGluc3RydW1lbnRhdGlvbiBjb2RlIGZvciBvdGhlciBjb21wb25lbnRzLgor
ICAgICAgICBBcyBleGFtcGxlIHdoZW4gd2UgYXJlIHZpc2l0aW5nIGJpdG1hcHMgd2UgbmVlZCB0
byB2aXNpdCBwbGF0Zm9ybSBzcGVjaWZpYyBvYmplY3RzLgorICAgICAgICBUaGVzZSBvYmplY3Rz
IHdpbGwgYmUgaW5zdHJ1bWVudGVkIHdpdGggaGVscCBvZiBjb21wb25lbnQncyBvd24gaW5zdHJ1
bWVudGF0aW9uIGNvZGUKKyAgICAgICAgYnV0IHdlIGhhdmUgdG8ga2VlcCB0aGUgc2luZ2xlIHNl
dCBvZiB2aXNpdGVkIG9iamVjdHMgYW5kIHRoZSBtYXAgb2YgY291bnRlcnMuCisKKyAgICAgICAg
KiB0ZXN0cy9NZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LmNwcDoKKyAgICAgICAgKEluc3RydW1l
bnRhdGlvblRlc3RIZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zdHJ1bWVudGF0aW9uVGVz
dEhlbHBlcjo6SW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlcik6CisgICAgICAgIChXZWJDb3JlOjpJ
bnN0cnVtZW50YXRpb25UZXN0SGVscGVyOjphZGRSb290T2JqZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3RydW1lbnRhdGlvblRlc3RIZWxwZXI6OnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3RydW1lbnRhdGlvblRlc3RIZWxwZXI6OnZpc2l0ZWRPYmpl
Y3RzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3RydW1lbnRhdGlvblRlc3RIZWxwZXI6OnRvdGFs
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCiAy
MDEyLTA5LTI0ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMjIyNDMuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb24uaCBiL1NvdXJjZS9XVEYvd3RmL01lbW9yeUlu
c3RydW1lbnRhdGlvbi5oCmluZGV4IDEzMWFmODQ5N2FjZWFkM2E5YjljYWMyZGVlMTc0N2M4MmU5
MGI2MTMuLjlkZjczYjE0YmIyZTNlMGJhNGYyOWJiODBiZDQyMDhhYzY5Y2Y0OTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL01lbW9yeUluc3RydW1lbnRhdGlvbi5oCisrKyBiL1NvdXJjZS9X
VEYvd3RmL01lbW9yeUluc3RydW1lbnRhdGlvbi5oCkBAIC04MSw4ICs4MSwxNiBAQCBwcml2YXRl
OgogICAgIHNpemVfdCBtX29iamVjdFNpemU7CiB9OwogCitjbGFzcyBNZW1vcnlJbnN0cnVtZW50
YXRpb25DbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfk1lbW9yeUluc3RydW1lbnRhdGlv
bkNsaWVudCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjb3VudE9iamVjdFNpemUoTWVtb3J5T2Jq
ZWN0VHlwZSwgc2l6ZV90KSA9IDA7CisgICAgdmlydHVhbCBib29sIHZpc2l0ZWQoY29uc3Qgdm9p
ZCopID0gMDsKK307CisKIGNsYXNzIE1lbW9yeUluc3RydW1lbnRhdGlvbiB7CiBwdWJsaWM6Cisg
ICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uKE1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudCogY2xp
ZW50KSA6IG1fY2xpZW50KGNsaWVudCkgeyB9CiAgICAgdmlydHVhbCB+TWVtb3J5SW5zdHJ1bWVu
dGF0aW9uKCkgeyB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdm9pZCBhZGRSb290T2Jq
ZWN0KGNvbnN0IFQmIHQpCkBAIC0xMDEsOSArMTA5LDEyIEBAIHByb3RlY3RlZDoKICAgICB9Owog
CiBwcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBjb3VudE9iamVjdFNpemUoTWVtb3J5T2JqZWN0
VHlwZSwgc2l6ZV90KSA9IDA7CisgICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50KiBtX2Ns
aWVudDsKKworICAgIHZvaWQgY291bnRPYmplY3RTaXplKE1lbW9yeU9iamVjdFR5cGUgb2JqZWN0
VHlwZSwgc2l6ZV90IHNpemUpIHsgbV9jbGllbnQtPmNvdW50T2JqZWN0U2l6ZShvYmplY3RUeXBl
LCBzaXplKTsgfQorICAgIGJvb2wgdmlzaXRlZChjb25zdCB2b2lkKiBwb2ludGVyKSB7IHJldHVy
biBtX2NsaWVudC0+dmlzaXRlZChwb2ludGVyKTsgfQorCiAgICAgdmlydHVhbCB2b2lkIGRlZmVy
SW5zdHJ1bWVudGVkUG9pbnRlcihQYXNzT3duUHRyPEluc3RydW1lbnRlZFBvaW50ZXJCYXNlPikg
PSAwOwotICAgIHZpcnR1YWwgYm9vbCB2aXNpdGVkKGNvbnN0IHZvaWQqKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIHByb2Nlc3NEZWZlcnJlZEluc3RydW1lbnRlZFBvaW50ZXJzKCkgPSAwOwogCiAg
ICAgZnJpZW5kIGNsYXNzIE1lbW9yeUNsYXNzSW5mbzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwCmluZGV4IDJjZWY5YWQ1NmQxZWZiOTg0
ODJhZjljN2QzYzNiOGYxNmMzYjU3NjEuLjg3YWEzOTUzZDlkYjU3NDNlZTNiNzY2MDkyMzJmMmYy
OGZlZmQ0OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JN
ZW1vcnlBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1l
bW9yeUFnZW50LmNwcApAQCAtOTEsNiArOTEsNjcgQEAgc3RhdGljIGNvbnN0IGNoYXIgZG9tU3Rv
cmFnZUNhY2hlW10gPSAiRE9NU3RvcmFnZUNhY2hlIjsKIAogbmFtZXNwYWNlIHsKIAorY2xhc3Mg
TWVtb3J5VXNhZ2VTdGF0c0dlbmVyYXRvciB7CitwdWJsaWM6CisgICAgTWVtb3J5VXNhZ2VTdGF0
c0dlbmVyYXRvcihNZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnRJbXBsKiBjbGllbnQpIDogbV9j
bGllbnQoY2xpZW50KSB7IH0KKworICAgIHZvaWQgZHVtcChUeXBlQnVpbGRlcjo6QXJyYXk8SW5z
cGVjdG9yTWVtb3J5QmxvY2s+KiBjaGlsZHJlbikKKyAgICB7CisgICAgICAgIGNoaWxkcmVuLT5h
ZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yTWVtb3J5Q2FjaGUoKSk7CisgICAgICAgIGNoaWxkcmVuLT5h
ZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yUGFnZSgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWVt
b3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50SW1wbCogbV9jbGllbnQ7CisKKyAgICBQYXNzUmVmUHRy
PEluc3BlY3Rvck1lbW9yeUJsb2NrPiBidWlsZE9iamVjdEZvck1lbW9yeUNhY2hlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHNpemVfdCB0b3RhbFNpemUgPSAwOworCisgICAgICAgIFJlZlB0cjxU
eXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+ID4gY2hpbGRyZW4gPSBUeXBl
QnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+OjpjcmVhdGUoKTsKKyAgICAgICAg
dG90YWxTaXplICs9IGFkZE1lbW9yeUJsb2NrRm9yKGNoaWxkcmVuLmdldCgpLCBXZWJDb3JlTWVt
b3J5VHlwZXM6Ok1lbW9yeUNhY2hlU3RydWN0dXJlcyk7CisgICAgICAgIHRvdGFsU2l6ZSArPSBh
ZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNo
ZWRSZXNvdXJjZVJhdyk7CisgICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0Zvcihj
aGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZUNTUyk7Cisg
ICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2Vi
Q29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZUZvbnQpOworICAgICAgICB0b3RhbFNpemUg
Kz0gYWRkTWVtb3J5QmxvY2tGb3IoY2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6
Q2FjaGVkUmVzb3VyY2VJbWFnZSk7CisgICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9j
a0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZVNj
cmlwdCk7CisgICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5n
ZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZVNWRyk7CisgICAgICAgIHRv
dGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9y
eVR5cGVzOjpDYWNoZWRSZXNvdXJjZVNoYWRlcik7CisgICAgICAgIHRvdGFsU2l6ZSArPSBhZGRN
ZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRS
ZXNvdXJjZVhTTFQpOworCisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gYmxv
Y2sgPSBJbnNwZWN0b3JNZW1vcnlCbG9jazo6Y3JlYXRlKCkuc2V0TmFtZShXZWJDb3JlTWVtb3J5
VHlwZXM6Ok1lbW9yeUNhY2hlKTsKKyAgICAgICAgYmxvY2stPnNldFNpemUodG90YWxTaXplKTsK
KyAgICAgICAgYmxvY2stPnNldENoaWxkcmVuKGNoaWxkcmVuLnJlbGVhc2UoKSk7CisgICAgICAg
IHJldHVybiBibG9jay5yZWxlYXNlKCk7CisgICAgfQorCisgICAgUGFzc1JlZlB0cjxJbnNwZWN0
b3JNZW1vcnlCbG9jaz4gYnVpbGRPYmplY3RGb3JQYWdlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHNpemVfdCB0b3RhbFNpemUgPSAwOworCisgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJy
YXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+ID4gZG9tQ2hpbGRyZW4gPSBUeXBlQnVpbGRlcjo6QXJy
YXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+OjpjcmVhdGUoKTsKKyAgICAgICAgdG90YWxTaXplICs9
IGFkZE1lbW9yeUJsb2NrRm9yKGRvbUNoaWxkcmVuLmdldCgpLCBXZWJDb3JlTWVtb3J5VHlwZXM6
OkRPTSk7CisgICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0Zvcihkb21DaGlsZHJl
bi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpJbWFnZSk7CisgICAgICAgIHRvdGFsU2l6ZSAr
PSBhZGRNZW1vcnlCbG9ja0Zvcihkb21DaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVz
OjpDU1MpOworICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoZG9tQ2hpbGRy
ZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6QmluZGluZyk7CisgICAgICAgIHRvdGFsU2l6
ZSArPSBhZGRNZW1vcnlCbG9ja0Zvcihkb21DaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5
cGVzOjpMb2FkZXIpOworCisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gZG9t
ID0gSW5zcGVjdG9yTWVtb3J5QmxvY2s6OmNyZWF0ZSgpLnNldE5hbWUoV2ViQ29yZU1lbW9yeVR5
cGVzOjpQYWdlKTsKKyAgICAgICAgZG9tLT5zZXRTaXplKHRvdGFsU2l6ZSk7CisgICAgICAgIGRv
bS0+c2V0Q2hpbGRyZW4oZG9tQ2hpbGRyZW4ucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuIGRv
bS5yZWxlYXNlKCk7CisgICAgfQorCisgICAgc2l6ZV90IGFkZE1lbW9yeUJsb2NrRm9yKFR5cGVC
dWlsZGVyOjpBcnJheTxJbnNwZWN0b3JNZW1vcnlCbG9jaz4qIGFycmF5LCBNZW1vcnlPYmplY3RU
eXBlIHR5cGVOYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck1lbW9y
eUJsb2NrPiByZXN1bHQgPSBJbnNwZWN0b3JNZW1vcnlCbG9jazo6Y3JlYXRlKCkuc2V0TmFtZSh0
eXBlTmFtZSk7CisgICAgICAgIHNpemVfdCBzaXplID0gbV9jbGllbnQtPnRvdGFsU2l6ZSh0eXBl
TmFtZSk7CisgICAgICAgIHJlc3VsdC0+c2V0U2l6ZShzaXplKTsKKyAgICAgICAgYXJyYXktPmFk
ZEl0ZW0ocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHNpemU7CisgICAgfQorfTsKKwogU3RyaW5n
IG5vZGVOYW1lKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKG5vZGUtPmRvY3VtZW50KCktPmlzWEhU
TUxEb2N1bWVudCgpKQpAQCAtMzA2LDggKzM2Nyw4IEBAIHByaXZhdGU6CiAKIGNsYXNzIEV4dGVy
bmFsUmVzb3VyY2VWaXNpdG9yIDogcHVibGljIEV4dGVybmFsU3RyaW5nVmlzaXRvciwgcHVibGlj
IEV4dGVybmFsQXJyYXlWaXNpdG9yIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBFeHRlcm5hbFJl
c291cmNlVmlzaXRvcihWaXNpdGVkT2JqZWN0cyYgdmlzaXRlZE9iamVjdHMpCi0gICAgICAgIDog
bV92aXNpdGVkT2JqZWN0cyh2aXNpdGVkT2JqZWN0cykKKyAgICBleHBsaWNpdCBFeHRlcm5hbFJl
c291cmNlVmlzaXRvcihXVEY6Ok1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudCYgIGNsaWVudCkK
KyAgICAgICAgOiBtX2NsaWVudChjbGllbnQpCiAgICAgICAgICwgbV9qc0V4dGVybmFsU3RyaW5n
U2l6ZSgwKQogICAgICAgICAsIG1fZXh0ZXJuYWxBcnJheVNpemUoMCkKICAgICB7IH0KQEAgLTMx
OSwxNiArMzgwLDE2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0SlNFeHRlcm5h
bEFycmF5KEFycmF5QnVmZmVyVmlldyogYnVmZmVyVmlldykKICAgICB7CiAgICAgICAgIEFycmF5
QnVmZmVyKiBidWZmZXIgPSBidWZmZXJWaWV3LT5idWZmZXIoKS5nZXQoKTsKLSAgICAgICAgaWYg
KG1fdmlzaXRlZE9iamVjdHMuYWRkKGJ1ZmZlcikuaXNOZXdFbnRyeSkKKyAgICAgICAgaWYgKCFt
X2NsaWVudC52aXNpdGVkKGJ1ZmZlcikpCiAgICAgICAgICAgICBtX2V4dGVybmFsQXJyYXlTaXpl
ICs9IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOwogICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRK
U0V4dGVybmFsU3RyaW5nKFN0cmluZ0ltcGwqIHN0cmluZykKICAgICB7Ci0gICAgICAgIGlmICht
X3Zpc2l0ZWRPYmplY3RzLmFkZChzdHJpbmcpLmlzTmV3RW50cnkpCisgICAgICAgIGlmICghbV9j
bGllbnQudmlzaXRlZChzdHJpbmcpKQogICAgICAgICAgICAgbV9qc0V4dGVybmFsU3RyaW5nU2l6
ZSArPSBzdHJpbmctPnNpemVJbkJ5dGVzKCk7CiAgICAgfQogCi0gICAgVmlzaXRlZE9iamVjdHMm
IG1fdmlzaXRlZE9iamVjdHM7CisgICAgV1RGOjpNZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnQm
IG1fY2xpZW50OwogICAgIHNpemVfdCBtX2pzRXh0ZXJuYWxTdHJpbmdTaXplOwogICAgIHNpemVf
dCBtX2V4dGVybmFsQXJyYXlTaXplOwogfTsKQEAgLTQ1NCw3MiArNTE1LDE1IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9tZW1vcnlJbnN0cnVtZW50YXRpb24uYWRkUm9vdE9iamVjdChtZW1vcnlDYWNo
ZSgpKTsKICAgICB9CiAKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck1lbW9yeUJsb2NrPiBidWls
ZE9iamVjdEZvck1lbW9yeUNhY2hlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHNpemVfdCB0b3Rh
bFNpemUgPSAwOwotCi0gICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9y
TWVtb3J5QmxvY2s+ID4gY2hpbGRyZW4gPSBUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yTWVt
b3J5QmxvY2s+OjpjcmVhdGUoKTsKLSAgICAgICAgdG90YWxTaXplICs9IGFkZE1lbW9yeUJsb2Nr
Rm9yKGNoaWxkcmVuLmdldCgpLCBXZWJDb3JlTWVtb3J5VHlwZXM6Ok1lbW9yeUNhY2hlU3RydWN0
dXJlcyk7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5n
ZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZVJhdyk7Ci0gICAgICAgIHRv
dGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9y
eVR5cGVzOjpDYWNoZWRSZXNvdXJjZUNTUyk7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1v
cnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNv
dXJjZUZvbnQpOwotICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoY2hpbGRy
ZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6Q2FjaGVkUmVzb3VyY2VJbWFnZSk7Ci0gICAg
ICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29y
ZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZVNjcmlwdCk7Ci0gICAgICAgIHRvdGFsU2l6ZSAr
PSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpD
YWNoZWRSZXNvdXJjZVNWRyk7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0Zv
cihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZVNoYWRl
cik7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQo
KSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZVhTTFQpOwotCi0gICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gYmxvY2sgPSBJbnNwZWN0b3JNZW1vcnlCbG9jazo6
Y3JlYXRlKCkuc2V0TmFtZShXZWJDb3JlTWVtb3J5VHlwZXM6Ok1lbW9yeUNhY2hlKTsKLSAgICAg
ICAgYmxvY2stPnNldFNpemUodG90YWxTaXplKTsKLSAgICAgICAgYmxvY2stPnNldENoaWxkcmVu
KGNoaWxkcmVuLnJlbGVhc2UoKSk7Ci0gICAgICAgIHJldHVybiBibG9jay5yZWxlYXNlKCk7Ci0g
ICAgfQotCi0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gYnVpbGRPYmplY3RG
b3JQYWdlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHNpemVfdCB0b3RhbFNpemUgPSAwOwotCi0g
ICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+ID4g
ZG9tQ2hpbGRyZW4gPSBUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+Ojpj
cmVhdGUoKTsKLSAgICAgICAgdG90YWxTaXplICs9IGFkZE1lbW9yeUJsb2NrRm9yKGRvbUNoaWxk
cmVuLmdldCgpLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkRPTSk7Ci0gICAgICAgIHRvdGFsU2l6ZSAr
PSBhZGRNZW1vcnlCbG9ja0Zvcihkb21DaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVz
OjpJbWFnZSk7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0Zvcihkb21DaGls
ZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOwotICAgICAgICB0b3RhbFNpemUg
Kz0gYWRkTWVtb3J5QmxvY2tGb3IoZG9tQ2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBl
czo6QmluZGluZyk7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0Zvcihkb21D
aGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpMb2FkZXIpOwotCi0gICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gZG9tID0gSW5zcGVjdG9yTWVtb3J5QmxvY2s6OmNy
ZWF0ZSgpLnNldE5hbWUoV2ViQ29yZU1lbW9yeVR5cGVzOjpQYWdlKTsKLSAgICAgICAgZG9tLT5z
ZXRTaXplKHRvdGFsU2l6ZSk7Ci0gICAgICAgIGRvbS0+c2V0Q2hpbGRyZW4oZG9tQ2hpbGRyZW4u
cmVsZWFzZSgpKTsKLSAgICAgICAgcmV0dXJuIGRvbS5yZWxlYXNlKCk7Ci0gICAgfQotCi0gICAg
dm9pZCBkdW1wU3RhdGlzdGljcyhUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yTWVtb3J5Qmxv
Y2s+KiBjaGlsZHJlbiwgSW5zcGVjdG9yRGF0YUNvdW50ZXIqIGluc3BlY3RvckRhdGEpCi0gICAg
ewotICAgICAgICBjaGlsZHJlbi0+YWRkSXRlbShidWlsZE9iamVjdEZvck1lbW9yeUNhY2hlKCkp
OwotICAgICAgICBjaGlsZHJlbi0+YWRkSXRlbShidWlsZE9iamVjdEZvclBhZ2UoKSk7Ci0KLSAg
ICAgICAgaW5zcGVjdG9yRGF0YS0+YWRkQ29tcG9uZW50KE1lbW9yeUJsb2NrTmFtZTo6aW5zcGVj
dG9yRE9NRGF0YSwgbV9tZW1vcnlJbnN0cnVtZW50YXRpb24uc2VsZlNpemUoKSk7Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIHNpemVfdCBhZGRNZW1vcnlCbG9ja0ZvcihUeXBlQnVpbGRlcjo6QXJy
YXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+KiBhcnJheSwgTWVtb3J5T2JqZWN0VHlwZSB0eXBlTmFt
ZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gcmVz
dWx0ID0gSW5zcGVjdG9yTWVtb3J5QmxvY2s6OmNyZWF0ZSgpLnNldE5hbWUodHlwZU5hbWUpOwot
ICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fbWVtb3J5SW5zdHJ1bWVudGF0aW9uLnRvdGFsU2l6ZSh0
eXBlTmFtZSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U2l6ZShzaXplKTsKLSAgICAgICAgYXJyYXkt
PmFkZEl0ZW0ocmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQotCiAgICAgUGFn
ZSogbV9wYWdlOwogICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwmIG1fbWVtb3J5SW5zdHJ1
bWVudGF0aW9uOwogfTsKIAogfQogCi1zdGF0aWMgdm9pZCBjb2xsZWN0RG9tVHJlZUluZm8oUGFn
ZSogcGFnZSwgVmlzaXRlZE9iamVjdHMmIHZpc2l0ZWRPYmplY3RzLCBUeXBlQnVpbGRlcjo6QXJy
YXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+KiBjaGlsZHJlbiwgSW5zcGVjdG9yRGF0YUNvdW50ZXIq
IGluc3BlY3RvckRhdGEpCitzdGF0aWMgdm9pZCBjb2xsZWN0RG9tVHJlZUluZm8oUGFnZSogcGFn
ZSwgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCYgbWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCkK
IHsKLSAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIG1lbW9yeUluc3RydW1lbnRhdGlvbih2
aXNpdGVkT2JqZWN0cyk7Ci0gICAgRE9NVHJlZXNJdGVyYXRvciBkb21UcmVlc0l0ZXJhdG9yKHBh
Z2UsIG1lbW9yeUluc3RydW1lbnRhdGlvbik7CisgICAgRE9NVHJlZXNJdGVyYXRvciBkb21UcmVl
c0l0ZXJhdG9yKHBhZ2UsIG1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwpOwogCiAgICAgU2NyaXB0
UHJvZmlsZXI6OnZpc2l0Tm9kZVdyYXBwZXJzKCZkb21UcmVlc0l0ZXJhdG9yKTsKIApAQCAtNTMz
LDggKzUzNyw2IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3REb21UcmVlSW5mbyhQYWdlKiBwYWdlLCBW
aXNpdGVkT2JqZWN0cyYgdmlzaXRlZE9iamVjdHMsIFR5cGVCCiAKICAgICBkb21UcmVlc0l0ZXJh
dG9yLnZpc2l0QmluZGluZ3MoKTsKICAgICBkb21UcmVlc0l0ZXJhdG9yLnZpc2l0TWVtb3J5Q2Fj
aGUoKTsKLQotICAgIGRvbVRyZWVzSXRlcmF0b3IuZHVtcFN0YXRpc3RpY3MoY2hpbGRyZW4sIGlu
c3BlY3RvckRhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBhZGRQbGF0Zm9ybUNvbXBvbmVudHNJbmZv
KFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvck1lbW9yeUJsb2NrPiA+IGNo
aWxkcmVuKQpAQCAtNTQ4LDkgKzU1MCwxMCBAQCBzdGF0aWMgdm9pZCBhZGRQbGF0Zm9ybUNvbXBv
bmVudHNJbmZvKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvck1lbQogICAg
IH0KIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yTWVtb3J5QmxvY2s+IGpzRXh0ZXJu
YWxSZXNvdXJjZXNJbmZvKFZpc2l0ZWRPYmplY3RzJiB2aXNpdGVkT2JqZWN0cykKKy8vIEZJWE1F
OiByZXBsYWNlIGV4cGxpY2l0IHNpemUgY291bnRpbmcgd2l0aCBpbXBsaWNpdCB2aWEgTWVtb3J5
SW5zdHJ1bWVudGF0aW9uLgorc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yTWVtb3J5QmxvY2s+
IGpzRXh0ZXJuYWxSZXNvdXJjZXNJbmZvKE1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudEltcGwm
IGNsaWVudCkKIHsKLSAgICBFeHRlcm5hbFJlc291cmNlVmlzaXRvciB2aXNpdG9yKHZpc2l0ZWRP
YmplY3RzKTsKKyAgICBFeHRlcm5hbFJlc291cmNlVmlzaXRvciB2aXNpdG9yKGNsaWVudCk7CiAg
ICAgU2NyaXB0UHJvZmlsZXI6OnZpc2l0RXh0ZXJuYWxTdHJpbmdzKCZ2aXNpdG9yKTsKICAgICBT
Y3JpcHRQcm9maWxlcjo6dmlzaXRFeHRlcm5hbEFycmF5cygmdmlzaXRvcik7CiAKQEAgLTU4Mywx
NSArNTg2LDE5IEBAIHZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OmdldFByb2Nlc3NNZW1vcnlE
aXN0cmlidXRpb24oRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zCiAgICAgSW5zcGVjdG9yRGF0YUNv
dW50ZXIgaW5zcGVjdG9yRGF0YTsKICAgICBpbnNwZWN0b3JEYXRhLmFkZENvbXBvbmVudChNZW1v
cnlCbG9ja05hbWU6Omluc3BlY3RvckpTSGVhcERhdGEsIFNjcmlwdFByb2ZpbGVyOjpwcm9maWxl
clNuYXBzaG90c1NpemUoKSk7CiAKLSAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0czsK
KyAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnRJbXBsIG1lbW9yeUluc3RydW1lbnRhdGlv
bkNsaWVudDsKKyAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIG1lbW9yeUluc3RydW1lbnRh
dGlvbigmbWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50KTsKICAgICBSZWZQdHI8VHlwZUJ1aWxk
ZXI6OkFycmF5PEluc3BlY3Rvck1lbW9yeUJsb2NrPiA+IGNoaWxkcmVuID0gVHlwZUJ1aWxkZXI6
OkFycmF5PEluc3BlY3Rvck1lbW9yeUJsb2NrPjo6Y3JlYXRlKCk7CiAgICAgY2hpbGRyZW4tPmFk
ZEl0ZW0oanNIZWFwSW5mbygpKTsKICAgICBjaGlsZHJlbi0+YWRkSXRlbShyZW5kZXJUcmVlSW5m
byhtX3BhZ2UpKTsgLy8gRklYTUU6IGNvbGxlY3QgZm9yIGFsbCBwYWdlcz8KLSAgICBjaGlsZHJl
bi0+YWRkSXRlbShqc0V4dGVybmFsUmVzb3VyY2VzSW5mbyh2aXNpdGVkT2JqZWN0cykpOwotICAg
IGNvbGxlY3REb21UcmVlSW5mbyhtX3BhZ2UsIHZpc2l0ZWRPYmplY3RzLCBjaGlsZHJlbi5nZXQo
KSwgJmluc3BlY3RvckRhdGEpOyAvLyBGSVhNRTogY29sbGVjdCBmb3IgYWxsIHBhZ2VzPwotICAg
IGNoaWxkcmVuLT5hZGRJdGVtKGluc3BlY3RvckRhdGEuZHVtcFN0YXRpc3RpY3MoKSk7CisgICAg
Y2hpbGRyZW4tPmFkZEl0ZW0oanNFeHRlcm5hbFJlc291cmNlc0luZm8obWVtb3J5SW5zdHJ1bWVu
dGF0aW9uQ2xpZW50KSk7CisgICAgY29sbGVjdERvbVRyZWVJbmZvKG1fcGFnZSwgbWVtb3J5SW5z
dHJ1bWVudGF0aW9uKTsgLy8gRklYTUU6IGNvbGxlY3QgZm9yIGFsbCBwYWdlcz8KICAgICBjaGls
ZHJlbi0+YWRkSXRlbShkdW1wRE9NU3RvcmFnZUNhY2hlKG1fZG9tU3RvcmFnZUFnZW50LT5tZW1v
cnlCeXRlc1VzZWRCeVN0b3JhZ2VDYWNoZSgpKSk7CiAgICAgYWRkUGxhdGZvcm1Db21wb25lbnRz
SW5mbyhjaGlsZHJlbik7CisgICAgTWVtb3J5VXNhZ2VTdGF0c0dlbmVyYXRvciBzdGF0c0dlbmVy
YXRvcigmbWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50KTsKKyAgICBzdGF0c0dlbmVyYXRvci5k
dW1wKGNoaWxkcmVuLmdldCgpKTsKKyAgICBpbnNwZWN0b3JEYXRhLmFkZENvbXBvbmVudChNZW1v
cnlCbG9ja05hbWU6Omluc3BlY3RvckRPTURhdGEsIG1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVu
dC5zZWxmU2l6ZSgpICsgbWVtb3J5SW5zdHJ1bWVudGF0aW9uLnNlbGZTaXplKCkpOworICAgIGNo
aWxkcmVuLT5hZGRJdGVtKGluc3BlY3RvckRhdGEuZHVtcFN0YXRpc3RpY3MoKSk7CiAgICAgcHJv
Y2Vzc01lbW9yeS0+c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOwogCiAgICAgc2l6ZV90IHByaXZhdGVC
eXRlcyA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTWVtb3J5SW5z
dHJ1bWVudGF0aW9uSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTWVtb3J5SW5z
dHJ1bWVudGF0aW9uSW1wbC5jcHAKaW5kZXggOTQ2ODg4Y2UyMGZmODg3MjdkNjE4ZDhjZGZmZDM3
NGM0NjIwMDk5Ny4uMTQzZTM3MGU1Mzg5NTNjYzlmMDA1ZDc2Zjc5ZTZkM2QyYmQwN2E5MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL01lbW9yeUluc3RydW1lbnRhdGlvbklt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9NZW1vcnlJbnN0cnVtZW50YXRp
b25JbXBsLmNwcApAQCAtMzYsMTEgKzM2LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1N
ZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsOjpNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsKFZpc2l0
ZWRPYmplY3RzJiB2aXNpdGVkT2JqZWN0cykKLSAgICA6IG1fdmlzaXRlZE9iamVjdHModmlzaXRl
ZE9iamVjdHMpCi17Ci19Ci0KIHZvaWQgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbDo6cHJvY2Vz
c0RlZmVycmVkSW5zdHJ1bWVudGVkUG9pbnRlcnMoKQogewogICAgIHdoaWxlICghbV9kZWZlcnJl
ZEluc3RydW1lbnRlZFBvaW50ZXJzLmlzRW1wdHkoKSkgewpAQCAtNTAsMjcgKzQ1LDE0IEBAIHZv
aWQgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbDo6cHJvY2Vzc0RlZmVycmVkSW5zdHJ1bWVudGVk
UG9pbnRlcnMoKQogICAgIH0KIH0KIAotdm9pZCBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsOjpj
b3VudE9iamVjdFNpemUoTWVtb3J5T2JqZWN0VHlwZSBvYmplY3RUeXBlLCBzaXplX3Qgc2l6ZSkK
LXsKLSAgICBBU1NFUlQob2JqZWN0VHlwZSk7Ci0gICAgVHlwZVRvU2l6ZU1hcDo6QWRkUmVzdWx0
IHJlc3VsdCA9IG1fdG90YWxTaXplcy5hZGQob2JqZWN0VHlwZSwgc2l6ZSk7Ci0gICAgaWYgKCFy
ZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgKz0gc2l6
ZTsKLX0KLQogdm9pZCBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsOjpkZWZlckluc3RydW1lbnRl
ZFBvaW50ZXIoUGFzc093blB0cjxJbnN0cnVtZW50ZWRQb2ludGVyQmFzZT4gcG9pbnRlcikKIHsK
ICAgICBtX2RlZmVycmVkSW5zdHJ1bWVudGVkUG9pbnRlcnMuYXBwZW5kKHBvaW50ZXIpOwogfQog
Ci1ib29sIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGw6OnZpc2l0ZWQoY29uc3Qgdm9pZCogb2Jq
ZWN0KQotewotICAgIHJldHVybiAhbV92aXNpdGVkT2JqZWN0cy5hZGQob2JqZWN0KS5pc05ld0Vu
dHJ5OwotfQotCiBzaXplX3QgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbDo6c2VsZlNpemUoKSBj
b25zdAogewotICAgIHJldHVybiBjYWxjdWxhdGVDb250YWluZXJTaXplKG1fdmlzaXRlZE9iamVj
dHMpICsgY2FsY3VsYXRlQ29udGFpbmVyU2l6ZShtX2RlZmVycmVkSW5zdHJ1bWVudGVkUG9pbnRl
cnMpOworICAgIHJldHVybiBjYWxjdWxhdGVDb250YWluZXJTaXplKG1fZGVmZXJyZWRJbnN0cnVt
ZW50ZWRQb2ludGVycyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9NZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbC5oCmluZGV4
IDhhMmFlZTVlMDUxY2U4NjUwYjRkMzExOTFiZDUyOGFkMDc5M2FkOGMuLjRkOGM0OTEzYWY1NDVj
OGI0OTAzYTlmMTBjZTJjMzk4Njg3ZmUwYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9NZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL01lbW9yeUluc3RydW1lbnRhdGlvbkltcGwuaApAQCAtNDIsMTMgKzQyLDIxIEBA
IHVzaW5nIFdURjo6TWVtb3J5T2JqZWN0VHlwZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10
eXBlZGVmIEhhc2hTZXQ8Y29uc3Qgdm9pZCo+IFZpc2l0ZWRPYmplY3RzOwotCi1jbGFzcyBNZW1v
cnlJbnN0cnVtZW50YXRpb25JbXBsIDogcHVibGljIFdURjo6TWVtb3J5SW5zdHJ1bWVudGF0aW9u
IHsKK2NsYXNzIE1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudEltcGwgOiBwdWJsaWMgV1RGOjpN
ZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnQgewogcHVibGljOgotICAgIGV4cGxpY2l0IE1lbW9y
eUluc3RydW1lbnRhdGlvbkltcGwoVmlzaXRlZE9iamVjdHMmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
Y291bnRPYmplY3RTaXplKE1lbW9yeU9iamVjdFR5cGUgb2JqZWN0VHlwZSwgc2l6ZV90IHNpemUp
IE9WRVJSSURFCisgICAgeworICAgICAgICBBU1NFUlQob2JqZWN0VHlwZSk7CisgICAgICAgIFR5
cGVUb1NpemVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3RvdGFsU2l6ZXMuYWRkKG9iamVjdFR5
cGUsIHNpemUpOworICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgKz0gc2l6ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJv
b2wgdmlzaXRlZChjb25zdCB2b2lkKiBvYmplY3QpIE9WRVJSSURFCisgICAgeworICAgICAgICBy
ZXR1cm4gIW1fdmlzaXRlZE9iamVjdHMuYWRkKG9iamVjdCkuaXNOZXdFbnRyeTsKKyAgICB9CiAK
LSAgICBzaXplX3Qgc2VsZlNpemUoKSBjb25zdDsKICAgICBzaXplX3QgdG90YWxTaXplKE1lbW9y
eU9iamVjdFR5cGUgb2JqZWN0VHlwZSkgY29uc3QKICAgICB7CiAgICAgICAgIFR5cGVUb1NpemVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGkgPSBtX3RvdGFsU2l6ZXMuZmluZChvYmplY3RUeXBlKTsKQEAg
LTYzLDE1ICs3MSwzMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzaXplOwogICAgIH0KIAor
ICAgIHNpemVfdCBzZWxmU2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92aXNp
dGVkT2JqZWN0cy5jYXBhY2l0eSgpICogc2l6ZW9mKFZpc2l0ZWRPYmplY3RzOjpWYWx1ZVR5cGUp
ICsKKyAgICAgICAgICAgICAgIG1fdG90YWxTaXplcy5jYXBhY2l0eSgpICogc2l6ZW9mKFR5cGVU
b1NpemVNYXA6OlZhbHVlVHlwZSk7CisgICAgfQorCisgICAgc2l6ZV90IHZpc2l0ZWRPYmplY3Rz
KCkgY29uc3QgeyByZXR1cm4gbV92aXNpdGVkT2JqZWN0cy5zaXplKCk7IH0KKwogcHJpdmF0ZToK
LSAgICB2aXJ0dWFsIHZvaWQgY291bnRPYmplY3RTaXplKE1lbW9yeU9iamVjdFR5cGUsIHNpemVf
dCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRlZmVySW5zdHJ1bWVudGVkUG9pbnRlcihQ
YXNzT3duUHRyPEluc3RydW1lbnRlZFBvaW50ZXJCYXNlPikgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCBib29sIHZpc2l0ZWQoY29uc3Qgdm9pZCopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBw
cm9jZXNzRGVmZXJyZWRJbnN0cnVtZW50ZWRQb2ludGVycygpIE9WRVJSSURFOworICAgIHR5cGVk
ZWYgSGFzaFNldDxjb25zdCB2b2lkKj4gVmlzaXRlZE9iamVjdHM7CisgICAgVmlzaXRlZE9iamVj
dHMgbV92aXNpdGVkT2JqZWN0czsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxNZW1vcnlPYmplY3RU
eXBlLCBzaXplX3Q+IFR5cGVUb1NpemVNYXA7CiAgICAgVHlwZVRvU2l6ZU1hcCBtX3RvdGFsU2l6
ZXM7Ci0gICAgVmlzaXRlZE9iamVjdHMmIG1fdmlzaXRlZE9iamVjdHM7Cit9OworCitjbGFzcyBN
ZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIDogcHVibGljIFdURjo6TWVtb3J5SW5zdHJ1bWVudGF0
aW9uIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsKFdU
Rjo6TWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50KiBjbGllbnQpIDogTWVtb3J5SW5zdHJ1bWVu
dGF0aW9uKGNsaWVudCkgeyB9CisKKyAgICBzaXplX3Qgc2VsZlNpemUoKSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgZGVmZXJJbnN0cnVtZW50ZWRQb2ludGVyKFBhc3NPd25Q
dHI8SW5zdHJ1bWVudGVkUG9pbnRlckJhc2U+KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
cHJvY2Vzc0RlZmVycmVkSW5zdHJ1bWVudGVkUG9pbnRlcnMoKSBPVkVSUklERTsKKwogICAgIFZl
Y3RvcjxPd25QdHI8SW5zdHJ1bWVudGVkUG9pbnRlckJhc2U+ID4gbV9kZWZlcnJlZEluc3RydW1l
bnRlZFBvaW50ZXJzOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9NZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdC5jcHAKaW5kZXggNGFjZjQ5NmFkODdk
MmQ4M2E5ODdkNzk0NmY1Mzc2ZWE3NTZhNDJmMC4uOGY1Njc5YzgxMzMzY2EzMGExODAzNmMwNTlk
ZTMzNTNjOTE4MTVmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9N
ZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL01lbW9yeUluc3RydW1lbnRhdGlvblRlc3QuY3BwCkBAIC00OCw2ICs0OCwyMSBAQCB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIHsKIAorY2xhc3MgSW5zdHJ1bWVu
dGF0aW9uVGVzdEhlbHBlciB7CitwdWJsaWM6CisgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBl
cigpIDogbV9jbGllbnQoKSwgbV9pbnN0cnVtZW50YXRpb24oJm1fY2xpZW50KSB7IH0KKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBhZGRSb290T2JqZWN0KGNvbnN0IFQmIHQp
IHsgbV9pbnN0cnVtZW50YXRpb24uYWRkUm9vdE9iamVjdCh0KTsgfQorICAgIHNpemVfdCByZXBv
cnRlZFNpemVGb3JBbGxUeXBlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50LnJlcG9ydGVkU2l6
ZUZvckFsbFR5cGVzKCk7IH0KKyAgICBpbnQgdmlzaXRlZE9iamVjdHMoKSBjb25zdCB7IHJldHVy
biBtX2NsaWVudC52aXNpdGVkT2JqZWN0cygpOyB9CisgICAgc2l6ZV90IHRvdGFsU2l6ZShNZW1v
cnlPYmplY3RUeXBlIG9iamVjdFR5cGUpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50LnRvdGFsU2l6
ZShvYmplY3RUeXBlKTsgfQorCitwcml2YXRlOgorICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkNs
aWVudEltcGwgbV9jbGllbnQ7CisgICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCBtX2luc3Ry
dW1lbnRhdGlvbjsKK307CisKIGNsYXNzIE5vdEluc3RydW1lbnRlZCB7CiBwdWJsaWM6CiAgICAg
Tm90SW5zdHJ1bWVudGVkKGNvbnN0IGNoYXIqID0gMCkgeyB9CkBAIC02OSw1MiArODQsNDcgQEAg
cHVibGljOgogCiBURVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIHNpemVPZikKIHsKLSAg
ICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0czsKLSAgICBNZW1vcnlJbnN0cnVtZW50YXRp
b25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMpOworICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxw
ZXIgaGVscGVyOwogICAgIEluc3RydW1lbnRlZCBpbnN0cnVtZW50ZWQ7Ci0gICAgaW1wbC5hZGRS
b290T2JqZWN0KGluc3RydW1lbnRlZCk7Ci0gICAgRVhQRUNUX0VRKHNpemVvZihOb3RJbnN0cnVt
ZW50ZWQpLCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgIEVYUEVDVF9FUSgx
LCB2aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAgIGhlbHBlci5hZGRSb290T2JqZWN0KGluc3Ry
dW1lbnRlZCk7CisgICAgRVhQRUNUX0VRKHNpemVvZihOb3RJbnN0cnVtZW50ZWQpLCBoZWxwZXIu
cmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIGhlbHBlci52aXNp
dGVkT2JqZWN0cygpKTsKIH0KIAogVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCBudWxs
Q2hlY2spCiB7Ci0gICAgVmlzaXRlZE9iamVjdHMgdmlzaXRlZE9iamVjdHM7Ci0gICAgTWVtb3J5
SW5zdHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0ZWRPYmplY3RzKTsKKyAgICBJbnN0cnVtZW50
YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKICAgICBJbnN0cnVtZW50ZWQqIGluc3RydW1lbnRlZCA9
IDA7Ci0gICAgaW1wbC5hZGRSb290T2JqZWN0KGluc3RydW1lbnRlZCk7Ci0gICAgRVhQRUNUX0VR
KDB1LCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgIEVYUEVDVF9FUSgwLCB2
aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAgIGhlbHBlci5hZGRSb290T2JqZWN0KGluc3RydW1l
bnRlZCk7CisgICAgRVhQRUNUX0VRKDB1LCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMo
KSk7CisgICAgRVhQRUNUX0VRKDAsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKIH0KIAogVEVT
VChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCBwdHJWc1JlZikKIHsKICAgICB7Ci0gICAgICAg
IFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwotICAgICAgICBNZW1vcnlJbnN0cnVtZW50
YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMpOworICAgICAgICBJbnN0cnVtZW50YXRpb25U
ZXN0SGVscGVyIGhlbHBlcjsKICAgICAgICAgSW5zdHJ1bWVudGVkIGluc3RydW1lbnRlZDsKLSAg
ICAgICAgaW1wbC5hZGRSb290T2JqZWN0KCZpbnN0cnVtZW50ZWQpOwotICAgICAgICBFWFBFQ1Rf
RVEoc2l6ZW9mKEluc3RydW1lbnRlZCkgKyBzaXplb2YoTm90SW5zdHJ1bWVudGVkKSwgaW1wbC5y
ZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICAgICAgRVhQRUNUX0VRKDIsIHZpc2l0ZWRP
YmplY3RzLnNpemUoKSk7CisgICAgICAgIGhlbHBlci5hZGRSb290T2JqZWN0KCZpbnN0cnVtZW50
ZWQpOworICAgICAgICBFWFBFQ1RfRVEoc2l6ZW9mKEluc3RydW1lbnRlZCkgKyBzaXplb2YoTm90
SW5zdHJ1bWVudGVkKSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgICAg
ICBFWFBFQ1RfRVEoMiwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwogICAgIH0KICAgICB7Ci0g
ICAgICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwotICAgICAgICBNZW1vcnlJbnN0
cnVtZW50YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMpOworICAgICAgICBJbnN0cnVtZW50
YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKICAgICAgICAgSW5zdHJ1bWVudGVkIGluc3RydW1lbnRl
ZDsKLSAgICAgICAgaW1wbC5hZGRSb290T2JqZWN0KGluc3RydW1lbnRlZCk7Ci0gICAgICAgIEVY
UEVDVF9FUShzaXplb2YoTm90SW5zdHJ1bWVudGVkKSwgaW1wbC5yZXBvcnRlZFNpemVGb3JBbGxU
eXBlcygpKTsKLSAgICAgICAgRVhQRUNUX0VRKDEsIHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7Cisg
ICAgICAgIGhlbHBlci5hZGRSb290T2JqZWN0KGluc3RydW1lbnRlZCk7CisgICAgICAgIEVYUEVD
VF9FUShzaXplb2YoTm90SW5zdHJ1bWVudGVkKSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5
cGVzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMSwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwog
ICAgIH0KIH0KIAogVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCBvd25QdHIpCiB7Ci0g
ICAgVmlzaXRlZE9iamVjdHMgdmlzaXRlZE9iamVjdHM7Ci0gICAgTWVtb3J5SW5zdHJ1bWVudGF0
aW9uSW1wbCBpbXBsKHZpc2l0ZWRPYmplY3RzKTsKKyAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVs
cGVyIGhlbHBlcjsKICAgICBPd25QdHI8SW5zdHJ1bWVudGVkPiBpbnN0cnVtZW50ZWQoYWRvcHRQ
dHIobmV3IEluc3RydW1lbnRlZCkpOwotICAgIGltcGwuYWRkUm9vdE9iamVjdChpbnN0cnVtZW50
ZWQpOwotICAgIEVYUEVDVF9FUShzaXplb2YoSW5zdHJ1bWVudGVkKSArIHNpemVvZihOb3RJbnN0
cnVtZW50ZWQpLCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgIEVYUEVDVF9F
USgyLCB2aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAgIGhlbHBlci5hZGRSb290T2JqZWN0KGlu
c3RydW1lbnRlZCk7CisgICAgRVhQRUNUX0VRKHNpemVvZihJbnN0cnVtZW50ZWQpICsgc2l6ZW9m
KE5vdEluc3RydW1lbnRlZCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAg
ICBFWFBFQ1RfRVEoMiwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwogfQogCiBjbGFzcyBJbnN0
cnVtZW50ZWRSZWZQdHIgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnN0cnVtZW50ZWRSZWZQdHI+IHsK
QEAgLTEzMywyMyArMTQzLDIxIEBAIHB1YmxpYzoKIAogVEVTVChNZW1vcnlJbnN0cnVtZW50YXRp
b25UZXN0LCBkYXRhUmVmKQogewotICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwot
ICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7CisgICAg
SW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CiAgICAgRGF0YVJlZjxJbnN0cnVtZW50
ZWRSZWZQdHI+IGluc3RydW1lbnRlZFJlZlB0cjsKICAgICBpbnN0cnVtZW50ZWRSZWZQdHIuaW5p
dCgpOwotICAgIGltcGwuYWRkUm9vdE9iamVjdChpbnN0cnVtZW50ZWRSZWZQdHIpOwotICAgIEVY
UEVDVF9FUShzaXplb2YoSW5zdHJ1bWVudGVkUmVmUHRyKSArIHNpemVvZihOb3RJbnN0cnVtZW50
ZWQpLCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgIEVYUEVDVF9FUSgyLCB2
aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAgIGhlbHBlci5hZGRSb290T2JqZWN0KGluc3RydW1l
bnRlZFJlZlB0cik7CisgICAgRVhQRUNUX0VRKHNpemVvZihJbnN0cnVtZW50ZWRSZWZQdHIpICsg
c2l6ZW9mKE5vdEluc3RydW1lbnRlZCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygp
KTsKKyAgICBFWFBFQ1RfRVEoMiwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwogfQogCiBURVNU
KE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIHJlZlB0cikKIHsKLSAgICBWaXNpdGVkT2JqZWN0
cyB2aXNpdGVkT2JqZWN0czsKLSAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIGltcGwodmlz
aXRlZE9iamVjdHMpOworICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwogICAg
IFJlZlB0cjxJbnN0cnVtZW50ZWRSZWZQdHI+IGluc3RydW1lbnRlZFJlZlB0cihhZG9wdFJlZihu
ZXcgSW5zdHJ1bWVudGVkUmVmUHRyKSk7Ci0gICAgaW1wbC5hZGRSb290T2JqZWN0KGluc3RydW1l
bnRlZFJlZlB0cik7Ci0gICAgRVhQRUNUX0VRKHNpemVvZihJbnN0cnVtZW50ZWRSZWZQdHIpICsg
c2l6ZW9mKE5vdEluc3RydW1lbnRlZCksIGltcGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7
Ci0gICAgRVhQRUNUX0VRKDIsIHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAgaGVscGVyLmFk
ZFJvb3RPYmplY3QoaW5zdHJ1bWVudGVkUmVmUHRyKTsKKyAgICBFWFBFQ1RfRVEoc2l6ZW9mKElu
c3RydW1lbnRlZFJlZlB0cikgKyBzaXplb2YoTm90SW5zdHJ1bWVudGVkKSwgaGVscGVyLnJlcG9y
dGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBoZWxwZXIudmlzaXRlZE9i
amVjdHMoKSk7CiB9CiAKIGNsYXNzIEluc3RydW1lbnRlZFdpdGhPd25QdHIgOiBwdWJsaWMgSW5z
dHJ1bWVudGVkIHsKQEAgLTE2NywxMiArMTc1LDExIEBAIHB1YmxpYzoKIAogVEVTVChNZW1vcnlJ
bnN0cnVtZW50YXRpb25UZXN0LCBvd25QdHJOb3RJbnN0cnVtZW50ZWQpCiB7Ci0gICAgVmlzaXRl
ZE9iamVjdHMgdmlzaXRlZE9iamVjdHM7Ci0gICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCBp
bXBsKHZpc2l0ZWRPYmplY3RzKTsKKyAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBl
cjsKICAgICBJbnN0cnVtZW50ZWRXaXRoT3duUHRyIGluc3RydW1lbnRlZFdpdGhPd25QdHI7Ci0g
ICAgaW1wbC5hZGRSb290T2JqZWN0KGluc3RydW1lbnRlZFdpdGhPd25QdHIpOwotICAgIEVYUEVD
VF9FUSgyICogc2l6ZW9mKE5vdEluc3RydW1lbnRlZCksIGltcGwucmVwb3J0ZWRTaXplRm9yQWxs
VHlwZXMoKSk7Ci0gICAgRVhQRUNUX0VRKDIsIHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAg
aGVscGVyLmFkZFJvb3RPYmplY3QoaW5zdHJ1bWVudGVkV2l0aE93blB0cik7CisgICAgRVhQRUNU
X0VRKDIgKiBzaXplb2YoTm90SW5zdHJ1bWVudGVkKSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFs
bFR5cGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7CiB9
CiAKIGNsYXNzIEluc3RydW1lbnRlZFVuZGVmaW5lZCB7CkBAIC0yMDAsMTMgKzIwNywxMiBAQCBw
dWJsaWM6CiAKIFRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwgb3duZXJUeXBlUHJvcGFn
YXRpb24pCiB7Ci0gICAgVmlzaXRlZE9iamVjdHMgdmlzaXRlZE9iamVjdHM7Ci0gICAgTWVtb3J5
SW5zdHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0ZWRPYmplY3RzKTsKKyAgICBJbnN0cnVtZW50
YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKICAgICBPd25QdHI8SW5zdHJ1bWVudGVkRE9NPiBpbnN0
cnVtZW50ZWRET00oYWRvcHRQdHIobmV3IEluc3RydW1lbnRlZERPTSkpOwotICAgIGltcGwuYWRk
Um9vdE9iamVjdChpbnN0cnVtZW50ZWRET00pOwotICAgIEVYUEVDVF9FUShzaXplb2YoSW5zdHJ1
bWVudGVkRE9NKSArIHNpemVvZihJbnN0cnVtZW50ZWRVbmRlZmluZWQpLCBpbXBsLnJlcG9ydGVk
U2l6ZUZvckFsbFR5cGVzKCkpOwotICAgIEVYUEVDVF9FUShzaXplb2YoSW5zdHJ1bWVudGVkRE9N
KSArIHNpemVvZihJbnN0cnVtZW50ZWRVbmRlZmluZWQpLCBpbXBsLnRvdGFsU2l6ZShXZWJDb3Jl
TWVtb3J5VHlwZXM6OkRPTSkpOwotICAgIEVYUEVDVF9FUSgyLCB2aXNpdGVkT2JqZWN0cy5zaXpl
KCkpOworICAgIGhlbHBlci5hZGRSb290T2JqZWN0KGluc3RydW1lbnRlZERPTSk7CisgICAgRVhQ
RUNUX0VRKHNpemVvZihJbnN0cnVtZW50ZWRET00pICsgc2l6ZW9mKEluc3RydW1lbnRlZFVuZGVm
aW5lZCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICBFWFBFQ1RfRVEo
c2l6ZW9mKEluc3RydW1lbnRlZERPTSkgKyBzaXplb2YoSW5zdHJ1bWVudGVkVW5kZWZpbmVkKSwg
aGVscGVyLnRvdGFsU2l6ZShXZWJDb3JlTWVtb3J5VHlwZXM6OkRPTSkpOworICAgIEVYUEVDVF9F
USgyLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7CiB9CiAKIGNsYXNzIE5vblZpcnR1YWxJbnN0
cnVtZW50ZWQgewpAQCAtMjIyLDEyICsyMjgsMTEgQEAgcHVibGljOgogCiBURVNUKE1lbW9yeUlu
c3RydW1lbnRhdGlvblRlc3QsIHZpc2l0Rmlyc3RNZW1iZXJJbk5vblZpcnR1YWxDbGFzcykKIHsK
LSAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0czsKLSAgICBNZW1vcnlJbnN0cnVtZW50
YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMpOworICAgIEluc3RydW1lbnRhdGlvblRlc3RI
ZWxwZXIgaGVscGVyOwogICAgIE5vblZpcnR1YWxJbnN0cnVtZW50ZWQgbm9uVmlydHVhbEluc3Ry
dW1lbnRlZDsKLSAgICBpbXBsLmFkZFJvb3RPYmplY3QoJm5vblZpcnR1YWxJbnN0cnVtZW50ZWQp
OwotICAgIEVYUEVDVF9FUShzaXplb2YoTm9uVmlydHVhbEluc3RydW1lbnRlZCkgKyBzaXplb2Yo
Tm90SW5zdHJ1bWVudGVkKSwgaW1wbC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICBF
WFBFQ1RfRVEoMiwgdmlzaXRlZE9iamVjdHMuc2l6ZSgpKTsKKyAgICBoZWxwZXIuYWRkUm9vdE9i
amVjdCgmbm9uVmlydHVhbEluc3RydW1lbnRlZCk7CisgICAgRVhQRUNUX0VRKHNpemVvZihOb25W
aXJ0dWFsSW5zdHJ1bWVudGVkKSArIHNpemVvZihOb3RJbnN0cnVtZW50ZWQpLCBoZWxwZXIucmVw
b3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgRVhQRUNUX0VRKDIsIGhlbHBlci52aXNpdGVk
T2JqZWN0cygpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTI0NywzMiArMjUyLDI5
IEBAIHB1YmxpYzoKIFRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwgdmlzaXRTdHJpbmdz
KQogewogICAgIHsKLSAgICAgICAgVmlzaXRlZE9iamVjdHMgdmlzaXRlZE9iamVjdHM7Ci0gICAg
ICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7CisgICAg
ICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwogICAgICAgICBJbnN0cnVtZW50
ZWRPd25lcjxTdHJpbmc+IHN0cmluZ0luc3RydW1lbnRlZE93bmVyKCJTdHJpbmciKTsKICAgICAg
ICAgc3RyaW5nSW5zdHJ1bWVudGVkT3duZXIubV92YWx1ZS5jaGFyYWN0ZXJzKCk7IC8vIEZvcmNl
IDE2Yml0IHNoYWRvdyBjcmVhdGlvbi4KLSAgICAgICAgaW1wbC5hZGRSb290T2JqZWN0KHN0cmlu
Z0luc3RydW1lbnRlZE93bmVyKTsKLSAgICAgICAgRVhQRUNUX0VRKHNpemVvZihTdHJpbmdJbXBs
KSArIHN0cmluZ0luc3RydW1lbnRlZE93bmVyLm1fdmFsdWUubGVuZ3RoKCkgKiAyLCBpbXBsLnJl
cG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgICAgICBFWFBFQ1RfRVEoMiwgdmlzaXRlZE9i
amVjdHMuc2l6ZSgpKTsKKyAgICAgICAgaGVscGVyLmFkZFJvb3RPYmplY3Qoc3RyaW5nSW5zdHJ1
bWVudGVkT3duZXIpOworICAgICAgICBFWFBFQ1RfRVEoc2l6ZW9mKFN0cmluZ0ltcGwpICsgc3Ry
aW5nSW5zdHJ1bWVudGVkT3duZXIubV92YWx1ZS5sZW5ndGgoKSAqIDIsIGhlbHBlci5yZXBvcnRl
ZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDIsIGhlbHBlci52aXNpdGVk
T2JqZWN0cygpKTsKICAgICB9CiAKICAgICB7Ci0gICAgICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0
ZWRPYmplY3RzOwotICAgICAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIGltcGwodmlzaXRl
ZE9iamVjdHMpOworICAgICAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKICAg
ICAgICAgSW5zdHJ1bWVudGVkT3duZXI8QXRvbWljU3RyaW5nPiBhdG9taWNTdHJpbmdJbnN0cnVt
ZW50ZWRPd25lcigiQXRvbWljU3RyaW5nIik7CiAgICAgICAgIGF0b21pY1N0cmluZ0luc3RydW1l
bnRlZE93bmVyLm1fdmFsdWUuc3RyaW5nKCkuY2hhcmFjdGVycygpOyAvLyBGb3JjZSAxNmJpdCBz
aGFkb3cgY3JlYXRpb24uCi0gICAgICAgIGltcGwuYWRkUm9vdE9iamVjdChhdG9taWNTdHJpbmdJ
bnN0cnVtZW50ZWRPd25lcik7Ci0gICAgICAgIEVYUEVDVF9FUShzaXplb2YoU3RyaW5nSW1wbCkg
KyBhdG9taWNTdHJpbmdJbnN0cnVtZW50ZWRPd25lci5tX3ZhbHVlLmxlbmd0aCgpICogMiwgaW1w
bC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICAgICAgRVhQRUNUX0VRKDIsIHZpc2l0
ZWRPYmplY3RzLnNpemUoKSk7CisgICAgICAgIGhlbHBlci5hZGRSb290T2JqZWN0KGF0b21pY1N0
cmluZ0luc3RydW1lbnRlZE93bmVyKTsKKyAgICAgICAgRVhQRUNUX0VRKHNpemVvZihTdHJpbmdJ
bXBsKSArIGF0b21pY1N0cmluZ0luc3RydW1lbnRlZE93bmVyLm1fdmFsdWUubGVuZ3RoKCkgKiAy
LCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgy
LCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7CiAgICAgfQogCiAgICAgewotICAgICAgICBWaXNp
dGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0czsKLSAgICAgICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9u
SW1wbCBpbXBsKHZpc2l0ZWRPYmplY3RzKTsKKyAgICAgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhl
bHBlciBoZWxwZXI7CiAgICAgICAgIEluc3RydW1lbnRlZE93bmVyPENTdHJpbmc+IGNTdHJpbmdJ
bnN0cnVtZW50ZWRPd25lcigiQ1N0cmluZyIpOwotICAgICAgICBpbXBsLmFkZFJvb3RPYmplY3Qo
Y1N0cmluZ0luc3RydW1lbnRlZE93bmVyKTsKLSAgICAgICAgRVhQRUNUX0VRKHNpemVvZihXVEY6
OkNTdHJpbmdCdWZmZXIpICsgY1N0cmluZ0luc3RydW1lbnRlZE93bmVyLm1fdmFsdWUubGVuZ3Ro
KCksIGltcGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgICAgIEVYUEVDVF9FUSgx
LCB2aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAgICAgICBoZWxwZXIuYWRkUm9vdE9iamVjdChj
U3RyaW5nSW5zdHJ1bWVudGVkT3duZXIpOworICAgICAgICBFWFBFQ1RfRVEoc2l6ZW9mKFdURjo6
Q1N0cmluZ0J1ZmZlcikgKyBjU3RyaW5nSW5zdHJ1bWVudGVkT3duZXIubV92YWx1ZS5sZW5ndGgo
KSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgICAgICBFWFBFQ1RfRVEo
MSwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwogICAgIH0KIH0KIApAQCAtMjkyLDEzICsyOTQs
MTIgQEAgcHVibGljOgogCiBURVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIHJlZlB0clB0
cikKIHsKKyAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKICAgICBSZWZQdHI8
U3RyaW5nSW1wbD4gcmVmUHRyOwogICAgIFR3b1BvaW50ZXJzVG9SZWZQdHIgcm9vdChyZWZQdHIp
OwotICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwotICAgIE1lbW9yeUluc3RydW1l
bnRhdGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7Ci0gICAgaW1wbC5hZGRSb290T2JqZWN0
KHJvb3QpOwotICAgIEVYUEVDVF9FUShzaXplb2YoUmVmUHRyPFN0cmluZ0ltcGw+KSwgaW1wbC5y
ZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICBFWFBFQ1RfRVEoMSwgdmlzaXRlZE9iamVj
dHMuc2l6ZSgpKTsKKyAgICBoZWxwZXIuYWRkUm9vdE9iamVjdChyb290KTsKKyAgICBFWFBFQ1Rf
RVEoc2l6ZW9mKFJlZlB0cjxTdHJpbmdJbXBsPiksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxU
eXBlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwogfQog
CiBjbGFzcyBUd29Qb2ludGVyc1RvT3duUHRyIHsKQEAgLTMxNywxMyArMzE4LDEyIEBAIHB1Ymxp
YzoKIAogVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCBvd25QdHJQdHIpCiB7CisgICAg
SW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CiAgICAgT3duUHRyPE5vdEluc3RydW1l
bnRlZD4gb3duUHRyOwogICAgIFR3b1BvaW50ZXJzVG9Pd25QdHIgcm9vdChvd25QdHIpOwotICAg
IFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwotICAgIE1lbW9yeUluc3RydW1lbnRhdGlv
bkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7Ci0gICAgaW1wbC5hZGRSb290T2JqZWN0KHJvb3Qp
OwotICAgIEVYUEVDVF9FUShzaXplb2YoT3duUHRyPE5vdEluc3RydW1lbnRlZD4pLCBpbXBsLnJl
cG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgIEVYUEVDVF9FUSgxLCB2aXNpdGVkT2JqZWN0
cy5zaXplKCkpOworICAgIGhlbHBlci5hZGRSb290T2JqZWN0KHJvb3QpOworICAgIEVYUEVDVF9F
UShzaXplb2YoT3duUHRyPE5vdEluc3RydW1lbnRlZD4pLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9y
QWxsVHlwZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTM0NSwyNSArMzQ1LDIzIEBAIHB1YmxpYzoK
IFRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwgZGV0ZWN0UmVwb3J0TWVtb3J5VXNhZ2VN
ZXRob2QpCiB7CiAgICAgewotICAgICAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0czsK
LSAgICAgICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0ZWRPYmplY3RzKTsK
KyAgICAgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CiAKICAgICAgICAgT3du
UHRyPEluc3RydW1lbnRlZFRlbXBsYXRlPFN0cmluZz4gPiB2YWx1ZSA9IGFkb3B0UHRyKG5ldyBJ
bnN0cnVtZW50ZWRUZW1wbGF0ZTxTdHJpbmc+KCIiKSk7CiAgICAgICAgIEluc3RydW1lbnRlZE93
bmVyPEluc3RydW1lbnRlZFRlbXBsYXRlPFN0cmluZz4qID4gcm9vdCh2YWx1ZS5nZXQoKSk7Ci0g
ICAgICAgIGltcGwuYWRkUm9vdE9iamVjdChyb290KTsKLSAgICAgICAgRVhQRUNUX0VRKHNpemVv
ZihJbnN0cnVtZW50ZWRUZW1wbGF0ZTxTdHJpbmc+KSArIHNpemVvZihTdHJpbmdJbXBsKSwgaW1w
bC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICAgICAgaGVscGVyLmFkZFJvb3RPYmpl
Y3Qocm9vdCk7CisgICAgICAgIEVYUEVDVF9FUShzaXplb2YoSW5zdHJ1bWVudGVkVGVtcGxhdGU8
U3RyaW5nPikgKyBzaXplb2YoU3RyaW5nSW1wbCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxU
eXBlcygpKTsKICAgICAgICAgLy8gRklYTUU6IGl0IGlzIGZhaWxpbmcgb24gQ2hyb21pdW0gQ2Fu
YXJ5IGJvdHMgYnV0IHdvcmtzIGZpbmUgbG9jYWxseS4KLSAgICAgICAgLy8gRVhQRUNUX0VRKDIs
IHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAgICAgIC8vIEVYUEVDVF9FUSgyLCBoZWxwZXIu
dmlzaXRlZE9iamVjdHMoKSk7CiAgICAgfQogICAgIHsKLSAgICAgICAgVmlzaXRlZE9iamVjdHMg
dmlzaXRlZE9iamVjdHM7Ci0gICAgICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwgaW1wbCh2
aXNpdGVkT2JqZWN0cyk7CisgICAgICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVy
OwogCiAgICAgICAgIE93blB0cjxJbnN0cnVtZW50ZWRUZW1wbGF0ZTxOb3RJbnN0cnVtZW50ZWQ+
ID4gdmFsdWUgPSBhZG9wdFB0cihuZXcgSW5zdHJ1bWVudGVkVGVtcGxhdGU8Tm90SW5zdHJ1bWVu
dGVkPigiIikpOwogICAgICAgICBJbnN0cnVtZW50ZWRPd25lcjxJbnN0cnVtZW50ZWRUZW1wbGF0
ZTxOb3RJbnN0cnVtZW50ZWQ+KiA+IHJvb3QodmFsdWUuZ2V0KCkpOwotICAgICAgICBpbXBsLmFk
ZFJvb3RPYmplY3Qocm9vdCk7Ci0gICAgICAgIEVYUEVDVF9FUShzaXplb2YoSW5zdHJ1bWVudGVk
VGVtcGxhdGU8Tm90SW5zdHJ1bWVudGVkPiksIGltcGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMo
KSk7Ci0gICAgICAgIEVYUEVDVF9FUSgxLCB2aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAgICAg
ICBoZWxwZXIuYWRkUm9vdE9iamVjdChyb290KTsKKyAgICAgICAgRVhQRUNUX0VRKHNpemVvZihJ
bnN0cnVtZW50ZWRUZW1wbGF0ZTxOb3RJbnN0cnVtZW50ZWQ+KSwgaGVscGVyLnJlcG9ydGVkU2l6
ZUZvckFsbFR5cGVzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMSwgaGVscGVyLnZpc2l0ZWRPYmpl
Y3RzKCkpOwogICAgIH0KIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165951</attachid>
            <date>2012-09-27 01:45:50 -0700</date>
            <delta_ts>2012-09-27 01:50:22 -0700</delta_ts>
            <desc>rebaselined</desc>
            <filename>bug-97461-20120927124507.patch</filename>
            <type>text/plain</type>
            <size>42972</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5NzM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGRjYzAxNGJmYTFhMDI1Y2EwNDU1ZGU5
OTI1YTg1NDE2MGZjMjM1MjAuLjQxM2EwYTMxMzA5YmVmYTBiZDVlODI4YjQ0MWNjMzlkZmU3NTA0
ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTItMDktMjcgIElseWEgVGlraG9ub3Zza3kgIDxs
b2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IE5NSTogbW92ZSB2
aXNpdGVkIGFuZCBjb3VudE9iamVjdFNpemUgbWV0aG9kcyBpbXBsZW1lbnRhdGlvbiBpbnRvIHNl
cGFyYXRlIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTc0NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGVzZSBtZXRob2RzIGFuZCB0aGUgZGF0YSBjb2xsZWN0ZWQgYnkgdGhlbSBuZWVkIHRv
IGJlIHVzZWQgaW4gdGhlIGluc3RydW1lbnRhdGlvbiBjb2RlIGZvciBvdGhlciBjb21wb25lbnRz
LgorICAgICAgICBBcyBleGFtcGxlIHdoZW4gd2UgYXJlIHZpc2l0aW5nIGJpdG1hcHMgd2UgbmVl
ZCB0byB2aXNpdCBwbGF0Zm9ybSBzcGVjaWZpYyBvYmplY3RzLgorICAgICAgICBUaGVzZSBvYmpl
Y3RzIHdpbGwgYmUgaW5zdHJ1bWVudGVkIHdpdGggaGVscCBvZiBjb21wb25lbnQncyBvd24gaW5z
dHJ1bWVudGF0aW9uIGNvZGUKKyAgICAgICAgYnV0IHdlIGhhdmUgdG8ga2VlcCB0aGUgc2luZ2xl
IHNldCBvZiB2aXNpdGVkIG9iamVjdHMgYW5kIHRoZSBtYXAgb2YgY291bnRlcnMuCisKKyAgICAg
ICAgKiB3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmg6CisgICAgICAgIChNZW1vcnlJbnN0cnVt
ZW50YXRpb25DbGllbnQpOgorICAgICAgICAoV1RGOjpNZW1vcnlJbnN0cnVtZW50YXRpb25DbGll
bnQ6On5NZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnQpOgorICAgICAgICAoV1RGKToKKyAgICAg
ICAgKFdURjo6TWVtb3J5SW5zdHJ1bWVudGF0aW9uOjpNZW1vcnlJbnN0cnVtZW50YXRpb24pOgor
ICAgICAgICAoTWVtb3J5SW5zdHJ1bWVudGF0aW9uKToKKyAgICAgICAgKFdURjo6TWVtb3J5SW5z
dHJ1bWVudGF0aW9uOjpjb3VudE9iamVjdFNpemUpOgorICAgICAgICAoV1RGOjpNZW1vcnlJbnN0
cnVtZW50YXRpb246OnZpc2l0ZWQpOgorCiAyMDEyLTA5LTI2ICBDb3NtaW4gVHJ1dGEgIDxjdHJ1
dGFAcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gQWxsb3cgZGVub3JtYWwgZmxvYXRz
IGluIEFSTSBWRlAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyYjA0NGQzN2UzODUyZmZhNGI2MjNhOGMxYjczYWYx
YThiOGQ5NjYzLi45YTkwZDM5MTJiMjk0YWIwNGM4ZmZiMTAyN2JmMDFlOGQyODFlOWQ5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTItMDktMjcgIElseWEgVGlraG9ub3Zza3kgIDxs
b2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IE5NSTogbW92ZSB2
aXNpdGVkIGFuZCBjb3VudE9iamVjdFNpemUgbWV0aG9kcyBpbXBsZW1lbnRhdGlvbiBpbnRvIHNl
cGFyYXRlIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTc0NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGVzZSBtZXRob2RzIGFuZCB0aGUgZGF0YSBjb2xsZWN0ZWQgYnkgdGhlbSBuZWVkIHRv
IGJlIHVzZWQgaW4gdGhlIGluc3RydW1lbnRhdGlvbiBjb2RlIGZvciBvdGhlciBjb21wb25lbnRz
LgorICAgICAgICBBcyBleGFtcGxlIHdoZW4gd2UgYXJlIHZpc2l0aW5nIGJpdG1hcHMgd2UgbmVl
ZCB0byB2aXNpdCBwbGF0Zm9ybSBzcGVjaWZpYyBvYmplY3RzLgorICAgICAgICBUaGVzZSBvYmpl
Y3RzIHdpbGwgYmUgaW5zdHJ1bWVudGVkIHdpdGggaGVscCBvZiBjb21wb25lbnQncyBvd24gaW5z
dHJ1bWVudGF0aW9uIGNvZGUKKyAgICAgICAgYnV0IHdlIGhhdmUgdG8ga2VlcCB0aGUgc2luZ2xl
IHNldCBvZiB2aXNpdGVkIG9iamVjdHMgYW5kIHRoZSBtYXAgb2YgY291bnRlcnMuCisKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0RG9tVHJlZUluZm8pOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yTWVtb3J5QWdlbnQ6OmdldFByb2Nlc3NNZW1vcnlEaXN0cmlidXRpb24p
OgorICAgICAgICAqIGluc3BlY3Rvci9NZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudEltcGw6OmNvdW50T2Jq
ZWN0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUlu
c3RydW1lbnRhdGlvbkNsaWVudEltcGw6OnZpc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVt
b3J5SW5zdHJ1bWVudGF0aW9uSW1wbDo6c2VsZlNpemUpOgorICAgICAgICAqIGluc3BlY3Rvci9N
ZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlJbnN0
cnVtZW50YXRpb25DbGllbnRJbXBsOjpNZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnRJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudEltcGw6OnNlbGZT
aXplKToKKyAgICAgICAgKE1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudEltcGwpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50SW1wbDo6dmlzaXRlZE9iamVj
dHMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChNZW1vcnlJbnN0cnVtZW50YXRpb25J
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUluc3RydW1lbnRhdGlvbkltcGw6Ok1lbW9y
eUluc3RydW1lbnRhdGlvbkltcGwpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5SW5zdHJ1bWVu
dGF0aW9uSW1wbDo6Y2hlY2tJbnN0cnVtZW50ZWRPYmplY3RzKToKKwogMjAxMi0wOS0yNyAgS2Vp
c2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4KIAogICAgICAgICBTdWdnZXN0aW9uUGlj
a2VyIHNob3VsZCBzdXBwb3J0IHJ0bApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAzYmUx
NTQ2ZjE5MzFkMjM3NjlhMzRlY2RlNmRlNmJiNWJmYmYyYjFiLi41MzM3YzQxMzlkZjgwNmEyY2Ix
Y2IwNTE3ZmZkY2M4OWIzY2NmNTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI1IEBACisyMDEyLTA5LTI3ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBOTUk6IG1vdmUgdmlzaXRlZCBhbmQgY291
bnRPYmplY3RTaXplIG1ldGhvZHMgaW1wbGVtZW50YXRpb24gaW50byBzZXBhcmF0ZSBjbGFzcy4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3NDYxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlc2UgbWV0
aG9kcyBhbmQgdGhlIGRhdGEgY29sbGVjdGVkIGJ5IHRoZW0gbmVlZCB0byBiZSB1c2VkIGluIHRo
ZSBpbnN0cnVtZW50YXRpb24gY29kZSBmb3Igb3RoZXIgY29tcG9uZW50cy4KKyAgICAgICAgQXMg
ZXhhbXBsZSB3aGVuIHdlIGFyZSB2aXNpdGluZyBiaXRtYXBzIHdlIG5lZWQgdG8gdmlzaXQgcGxh
dGZvcm0gc3BlY2lmaWMgb2JqZWN0cy4KKyAgICAgICAgVGhlc2Ugb2JqZWN0cyB3aWxsIGJlIGlu
c3RydW1lbnRlZCB3aXRoIGhlbHAgb2YgY29tcG9uZW50J3Mgb3duIGluc3RydW1lbnRhdGlvbiBj
b2RlCisgICAgICAgIGJ1dCB3ZSBoYXZlIHRvIGtlZXAgdGhlIHNpbmdsZSBzZXQgb2YgdmlzaXRl
ZCBvYmplY3RzIGFuZCB0aGUgbWFwIG9mIGNvdW50ZXJzLgorCisgICAgICAgICogdGVzdHMvTWVt
b3J5SW5zdHJ1bWVudGF0aW9uVGVzdC5jcHA6CisgICAgICAgIChJbnN0cnVtZW50YXRpb25UZXN0
SGVscGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3RydW1lbnRhdGlvblRlc3RIZWxwZXI6Oklu
c3RydW1lbnRhdGlvblRlc3RIZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zdHJ1bWVudGF0
aW9uVGVzdEhlbHBlcjo6YWRkUm9vdE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnN0cnVt
ZW50YXRpb25UZXN0SGVscGVyOjpyZXBvcnRlZFNpemVGb3JBbGxUeXBlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyOjp2aXNpdGVkT2JqZWN0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyOjp0b3RhbFNpemUpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMi0wOS0yNyAg
S2Vpc2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4KIAogICAgICAgICBTdWdnZXN0aW9u
UGlja2VyIHNob3VsZCBzdXBwb3J0IHJ0bApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvTWVt
b3J5SW5zdHJ1bWVudGF0aW9uLmggYi9Tb3VyY2UvV1RGL3d0Zi9NZW1vcnlJbnN0cnVtZW50YXRp
b24uaAppbmRleCA1OGFiNTAwNzA3MTA4MmU5Yjc1Mjc3MmJmZGNiMGQxZDZjMjY0MTQxLi5iYzkz
MWRlNjA1NjEwZGRiMzhkZDlhM2VlZmIxYmZiZjJlYjE5YmFhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb24uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9NZW1v
cnlJbnN0cnVtZW50YXRpb24uaApAQCAtODMsOCArODMsMTYgQEAgcHJpdmF0ZToKIAogdGVtcGxh
dGU8dHlwZW5hbWUgVD4gdm9pZCByZXBvcnRNZW1vcnlVc2FnZShjb25zdCBUKiBjb25zdCYsIE1l
bW9yeU9iamVjdEluZm8qKTsKIAorY2xhc3MgTWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50IHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5NZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnQoKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgY291bnRPYmplY3RTaXplKE1lbW9yeU9iamVjdFR5cGUsIHNpemVf
dCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdGVkKGNvbnN0IHZvaWQqKSA9IDA7Cit9Owor
CiBjbGFzcyBNZW1vcnlJbnN0cnVtZW50YXRpb24gewogcHVibGljOgorICAgIE1lbW9yeUluc3Ry
dW1lbnRhdGlvbihNZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnQqIGNsaWVudCkgOiBtX2NsaWVu
dChjbGllbnQpIHsgfQogICAgIHZpcnR1YWwgfk1lbW9yeUluc3RydW1lbnRhdGlvbigpIHsgfQog
CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHZvaWQgYWRkUm9vdE9iamVjdChjb25zdCBUJiB0
KQpAQCAtMTAzLDkgKzExMSwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgfTsKIAogcHJpdmF0ZToKLSAg
ICB2aXJ0dWFsIHZvaWQgY291bnRPYmplY3RTaXplKE1lbW9yeU9iamVjdFR5cGUsIHNpemVfdCkg
PSAwOworICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudCogbV9jbGllbnQ7CisKKyAgICB2
b2lkIGNvdW50T2JqZWN0U2l6ZShNZW1vcnlPYmplY3RUeXBlIG9iamVjdFR5cGUsIHNpemVfdCBz
aXplKSB7IG1fY2xpZW50LT5jb3VudE9iamVjdFNpemUob2JqZWN0VHlwZSwgc2l6ZSk7IH0KKyAg
ICBib29sIHZpc2l0ZWQoY29uc3Qgdm9pZCogcG9pbnRlcikgeyByZXR1cm4gbV9jbGllbnQtPnZp
c2l0ZWQocG9pbnRlcik7IH0KKwogICAgIHZpcnR1YWwgdm9pZCBkZWZlckluc3RydW1lbnRlZFBv
aW50ZXIoUGFzc093blB0cjxJbnN0cnVtZW50ZWRQb2ludGVyQmFzZT4pID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgdmlzaXRlZChjb25zdCB2b2lkKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwcm9j
ZXNzRGVmZXJyZWRJbnN0cnVtZW50ZWRQb2ludGVycygpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
Y2hlY2tDb3VudGVkT2JqZWN0KGNvbnN0IHZvaWQqKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwCmluZGV4IDc5MWJiNWY2ODY2
NTIwZDM0MzAzZGFiNWY4YzQ3MDJjMWNjMmQ3YzEuLmFkNWVmODRlNWE0N2JkY2Y2MWM4M2FiOWY2
ZGVlNGQzYTZkZTcyZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JNZW1vcnlBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvck1lbW9yeUFnZW50LmNwcApAQCAtODksNiArODksOTkgQEAgc3RhdGljIGNvbnN0IGNoYXIg
ZG9tU3RvcmFnZUNhY2hlW10gPSAiRE9NU3RvcmFnZUNhY2hlIjsKIAogbmFtZXNwYWNlIHsKIAor
Y2xhc3MgTWVtb3J5VXNhZ2VTdGF0c0dlbmVyYXRvciB7CitwdWJsaWM6CisgICAgTWVtb3J5VXNh
Z2VTdGF0c0dlbmVyYXRvcihNZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnRJbXBsKiBjbGllbnQs
IE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwqIGluc3RydW1lbnRhdGlvbikgOiBtX2NsaWVudChj
bGllbnQpLCBtX2luc3RydW1lbnRhdGlvbihpbnN0cnVtZW50YXRpb24pIHsgfQorCisgICAgdm9p
ZCBkdW1wKFR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3JNZW1vcnlCbG9jaz4qIGNoaWxkcmVu
KQorICAgIHsKKyAgICAgICAgY2hpbGRyZW4tPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JNZW1vcnlD
YWNoZSgpKTsKKyAgICAgICAgY2hpbGRyZW4tPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JQYWdlKCkp
OworICAgICAgICBjaGlsZHJlbi0+YWRkSXRlbShidWlsZE9iamVjdEZvckV4dGVybmFsUmVzb3Vy
Y2VzKCkpOworCisgICAgICAgIGFkZE1lbW9yeUluc3RydW1lbnRhdGlvbkRlYnVnRGF0YShjaGls
ZHJlbik7CisgICAgfQorCitwcml2YXRlOgorICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVu
dEltcGwqIG1fY2xpZW50OworICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwqIG1faW5zdHJ1
bWVudGF0aW9uOworCisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gYnVpbGRP
YmplY3RGb3JNZW1vcnlDYWNoZSgpIGNvbnN0CisgICAgeworICAgICAgICBzaXplX3QgdG90YWxT
aXplID0gMDsKKworICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvck1l
bW9yeUJsb2NrPiA+IGNoaWxkcmVuID0gVHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvck1lbW9y
eUJsb2NrPjo6Y3JlYXRlKCk7CisgICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0Zv
cihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpNZW1vcnlDYWNoZVN0cnVjdHVy
ZXMpOworICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoY2hpbGRyZW4uZ2V0
KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6Q2FjaGVkUmVzb3VyY2VSYXcpOworICAgICAgICB0b3Rh
bFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoY2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlU
eXBlczo6Q2FjaGVkUmVzb3VyY2VDU1MpOworICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5
QmxvY2tGb3IoY2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6Q2FjaGVkUmVzb3Vy
Y2VGb250KTsKKyAgICAgICAgdG90YWxTaXplICs9IGFkZE1lbW9yeUJsb2NrRm9yKGNoaWxkcmVu
LmdldCgpLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkNhY2hlZFJlc291cmNlSW1hZ2UpOworICAgICAg
ICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoY2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVN
ZW1vcnlUeXBlczo6Q2FjaGVkUmVzb3VyY2VTY3JpcHQpOworICAgICAgICB0b3RhbFNpemUgKz0g
YWRkTWVtb3J5QmxvY2tGb3IoY2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6Q2Fj
aGVkUmVzb3VyY2VTVkcpOworICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3Io
Y2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6Q2FjaGVkUmVzb3VyY2VTaGFkZXIp
OworICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoY2hpbGRyZW4uZ2V0KCks
IFdlYkNvcmVNZW1vcnlUeXBlczo6Q2FjaGVkUmVzb3VyY2VYU0xUKTsKKworICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yTWVtb3J5QmxvY2s+IGJsb2NrID0gSW5zcGVjdG9yTWVtb3J5QmxvY2s6OmNy
ZWF0ZSgpLnNldE5hbWUoV2ViQ29yZU1lbW9yeVR5cGVzOjpNZW1vcnlDYWNoZSk7CisgICAgICAg
IGJsb2NrLT5zZXRTaXplKHRvdGFsU2l6ZSk7CisgICAgICAgIGJsb2NrLT5zZXRDaGlsZHJlbihj
aGlsZHJlbi5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm4gYmxvY2sucmVsZWFzZSgpOworICAg
IH0KKworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yTWVtb3J5QmxvY2s+IGJ1aWxkT2JqZWN0Rm9y
UGFnZSgpIGNvbnN0CisgICAgeworICAgICAgICBzaXplX3QgdG90YWxTaXplID0gMDsKKworICAg
ICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvck1lbW9yeUJsb2NrPiA+IGRv
bUNoaWxkcmVuID0gVHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvck1lbW9yeUJsb2NrPjo6Y3Jl
YXRlKCk7CisgICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0Zvcihkb21DaGlsZHJl
bi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpET00pOworICAgICAgICB0b3RhbFNpemUgKz0g
YWRkTWVtb3J5QmxvY2tGb3IoZG9tQ2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6
SW1hZ2UpOworICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoZG9tQ2hpbGRy
ZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6Q1NTKTsKKyAgICAgICAgdG90YWxTaXplICs9
IGFkZE1lbW9yeUJsb2NrRm9yKGRvbUNoaWxkcmVuLmdldCgpLCBXZWJDb3JlTWVtb3J5VHlwZXM6
OkJpbmRpbmcpOworICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoZG9tQ2hp
bGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6TG9hZGVyKTsKKworICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yTWVtb3J5QmxvY2s+IGRvbSA9IEluc3BlY3Rvck1lbW9yeUJsb2NrOjpjcmVh
dGUoKS5zZXROYW1lKFdlYkNvcmVNZW1vcnlUeXBlczo6UGFnZSk7CisgICAgICAgIGRvbS0+c2V0
U2l6ZSh0b3RhbFNpemUpOworICAgICAgICBkb20tPnNldENoaWxkcmVuKGRvbUNoaWxkcmVuLnJl
bGVhc2UoKSk7CisgICAgICAgIHJldHVybiBkb20ucmVsZWFzZSgpOworICAgIH0KKworICAgIFBh
c3NSZWZQdHI8SW5zcGVjdG9yTWVtb3J5QmxvY2s+IGJ1aWxkT2JqZWN0Rm9yRXh0ZXJuYWxSZXNv
dXJjZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgc2l6ZV90IHRvdGFsU2l6ZSA9IDA7CisKKyAg
ICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gPiBy
ZXNvdXJjZXNDaGlsZHJlbiA9IFR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3JNZW1vcnlCbG9j
az46OmNyZWF0ZSgpOworICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IocmVz
b3VyY2VzQ2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6RXh0ZXJuYWxTdHJpbmdz
KTsKKyAgICAgICAgdG90YWxTaXplICs9IGFkZE1lbW9yeUJsb2NrRm9yKHJlc291cmNlc0NoaWxk
cmVuLmdldCgpLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkV4dGVybmFsQXJyYXlzKTsKKworICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yTWVtb3J5QmxvY2s+IHJlc291cmNlcyA9IEluc3BlY3Rvck1lbW9y
eUJsb2NrOjpjcmVhdGUoKS5zZXROYW1lKFdlYkNvcmVNZW1vcnlUeXBlczo6RXh0ZXJuYWxSZXNv
dXJjZXMpOworICAgICAgICByZXNvdXJjZXMtPnNldFNpemUodG90YWxTaXplKTsKKyAgICAgICAg
cmVzb3VyY2VzLT5zZXRDaGlsZHJlbihyZXNvdXJjZXNDaGlsZHJlbi5yZWxlYXNlKCkpOworICAg
ICAgICByZXR1cm4gcmVzb3VyY2VzLnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBzaXplX3QgYWRk
TWVtb3J5QmxvY2tGb3IoVHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvck1lbW9yeUJsb2NrPiog
YXJyYXksIE1lbW9yeU9iamVjdFR5cGUgdHlwZU5hbWUpIGNvbnN0CisgICAgeworICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yTWVtb3J5QmxvY2s+IHJlc3VsdCA9IEluc3BlY3Rvck1lbW9yeUJsb2Nr
OjpjcmVhdGUoKS5zZXROYW1lKHR5cGVOYW1lKTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBtX2Ns
aWVudC0+dG90YWxTaXplKHR5cGVOYW1lKTsKKyAgICAgICAgcmVzdWx0LT5zZXRTaXplKHNpemUp
OworICAgICAgICBhcnJheS0+YWRkSXRlbShyZXN1bHQpOworICAgICAgICByZXR1cm4gc2l6ZTsK
KyAgICB9CisKKyAgICB2b2lkIGFkZE1lbW9yeUluc3RydW1lbnRhdGlvbkRlYnVnRGF0YShUeXBl
QnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+KiBjaGlsZHJlbikKKyAgICB7Cisg
ICAgICAgIGlmIChtX2luc3RydW1lbnRhdGlvbi0+Y2hlY2tJbnN0cnVtZW50ZWRPYmplY3RzKCkp
IHsKKyAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gdG90YWxJbnN0cnVt
ZW50ZWQgPSBJbnNwZWN0b3JNZW1vcnlCbG9jazo6Y3JlYXRlKCkuc2V0TmFtZSgiSW5zdHJ1bWVu
dGVkT2JqZWN0c0NvdW50Iik7CisgICAgICAgICAgICB0b3RhbEluc3RydW1lbnRlZC0+c2V0U2l6
ZShtX2NsaWVudC0+dG90YWxDb3VudGVkT2JqZWN0cygpKTsKKworICAgICAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck1lbW9yeUJsb2NrPiBpbmNvcnJlY3RseUluc3RydW1lbnRlZCA9IEluc3BlY3Rv
ck1lbW9yeUJsb2NrOjpjcmVhdGUoKS5zZXROYW1lKCJJbnN0cnVtZW50ZWRCdXROb3RBbGxvY2F0
ZWRPYmplY3RzQ291bnQiKTsKKyAgICAgICAgICAgIGluY29ycmVjdGx5SW5zdHJ1bWVudGVkLT5z
ZXRTaXplKG1faW5zdHJ1bWVudGF0aW9uLT50b3RhbE9iamVjdHNOb3RJbkFsbG9jYXRlZFNldCgp
KTsKKworICAgICAgICAgICAgY2hpbGRyZW4tPmFkZEl0ZW0odG90YWxJbnN0cnVtZW50ZWQpOwor
ICAgICAgICAgICAgY2hpbGRyZW4tPmFkZEl0ZW0oaW5jb3JyZWN0bHlJbnN0cnVtZW50ZWQpOwor
ICAgICAgICB9CisgICAgfQorfTsKKwogU3RyaW5nIG5vZGVOYW1lKE5vZGUqIG5vZGUpCiB7CiAg
ICAgaWYgKG5vZGUtPmRvY3VtZW50KCktPmlzWEhUTUxEb2N1bWVudCgpKQpAQCAtNDY1LDEwMyAr
NTU4LDE2IEBAIHB1YmxpYzoKICAgICAgICAgbV9tZW1vcnlJbnN0cnVtZW50YXRpb24uYWRkUm9v
dE9iamVjdChtZW1vcnlDYWNoZSgpKTsKICAgICB9CiAKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rv
ck1lbW9yeUJsb2NrPiBidWlsZE9iamVjdEZvck1lbW9yeUNhY2hlKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHNpemVfdCB0b3RhbFNpemUgPSAwOwotCi0gICAgICAgIFJlZlB0cjxUeXBlQnVpbGRl
cjo6QXJyYXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+ID4gY2hpbGRyZW4gPSBUeXBlQnVpbGRlcjo6
QXJyYXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+OjpjcmVhdGUoKTsKLSAgICAgICAgdG90YWxTaXpl
ICs9IGFkZE1lbW9yeUJsb2NrRm9yKGNoaWxkcmVuLmdldCgpLCBXZWJDb3JlTWVtb3J5VHlwZXM6
Ok1lbW9yeUNhY2hlU3RydWN0dXJlcyk7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlC
bG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJj
ZVJhdyk7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5n
ZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZUNTUyk7Ci0gICAgICAgIHRv
dGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9y
eVR5cGVzOjpDYWNoZWRSZXNvdXJjZUZvbnQpOwotICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVt
b3J5QmxvY2tGb3IoY2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6Q2FjaGVkUmVz
b3VyY2VJbWFnZSk7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGls
ZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZVNjcmlwdCk7Ci0g
ICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2Vi
Q29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZVNWRyk7Ci0gICAgICAgIHRvdGFsU2l6ZSAr
PSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpD
YWNoZWRSZXNvdXJjZVNoYWRlcik7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9j
a0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZVhT
TFQpOwotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gYmxvY2sgPSBJbnNw
ZWN0b3JNZW1vcnlCbG9jazo6Y3JlYXRlKCkuc2V0TmFtZShXZWJDb3JlTWVtb3J5VHlwZXM6Ok1l
bW9yeUNhY2hlKTsKLSAgICAgICAgYmxvY2stPnNldFNpemUodG90YWxTaXplKTsKLSAgICAgICAg
YmxvY2stPnNldENoaWxkcmVuKGNoaWxkcmVuLnJlbGVhc2UoKSk7Ci0gICAgICAgIHJldHVybiBi
bG9jay5yZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JNZW1vcnlC
bG9jaz4gYnVpbGRPYmplY3RGb3JQYWdlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHNpemVfdCB0
b3RhbFNpemUgPSAwOwotCi0gICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVj
dG9yTWVtb3J5QmxvY2s+ID4gZG9tQ2hpbGRyZW4gPSBUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVj
dG9yTWVtb3J5QmxvY2s+OjpjcmVhdGUoKTsKLSAgICAgICAgdG90YWxTaXplICs9IGFkZE1lbW9y
eUJsb2NrRm9yKGRvbUNoaWxkcmVuLmdldCgpLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkRPTSk7Ci0g
ICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0Zvcihkb21DaGlsZHJlbi5nZXQoKSwg
V2ViQ29yZU1lbW9yeVR5cGVzOjpJbWFnZSk7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1v
cnlCbG9ja0Zvcihkb21DaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOwot
ICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoZG9tQ2hpbGRyZW4uZ2V0KCks
IFdlYkNvcmVNZW1vcnlUeXBlczo6QmluZGluZyk7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRN
ZW1vcnlCbG9ja0Zvcihkb21DaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpMb2Fk
ZXIpOwotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gZG9tID0gSW5zcGVj
dG9yTWVtb3J5QmxvY2s6OmNyZWF0ZSgpLnNldE5hbWUoV2ViQ29yZU1lbW9yeVR5cGVzOjpQYWdl
KTsKLSAgICAgICAgZG9tLT5zZXRTaXplKHRvdGFsU2l6ZSk7Ci0gICAgICAgIGRvbS0+c2V0Q2hp
bGRyZW4oZG9tQ2hpbGRyZW4ucmVsZWFzZSgpKTsKLSAgICAgICAgcmV0dXJuIGRvbS5yZWxlYXNl
KCk7Ci0gICAgfQotCi0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gYnVpbGRP
YmplY3RGb3JFeHRlcm5hbFJlc291cmNlcygpIGNvbnN0Ci0gICAgewotICAgICAgICBzaXplX3Qg
dG90YWxTaXplID0gMDsKLQotICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PEluc3Bl
Y3Rvck1lbW9yeUJsb2NrPiA+IHJlc291cmNlc0NoaWxkcmVuID0gVHlwZUJ1aWxkZXI6OkFycmF5
PEluc3BlY3Rvck1lbW9yeUJsb2NrPjo6Y3JlYXRlKCk7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBh
ZGRNZW1vcnlCbG9ja0ZvcihyZXNvdXJjZXNDaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5
cGVzOjpFeHRlcm5hbFN0cmluZ3MpOwotICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5Qmxv
Y2tGb3IocmVzb3VyY2VzQ2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6RXh0ZXJu
YWxBcnJheXMpOwotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gcmVzb3Vy
Y2VzID0gSW5zcGVjdG9yTWVtb3J5QmxvY2s6OmNyZWF0ZSgpLnNldE5hbWUoV2ViQ29yZU1lbW9y
eVR5cGVzOjpFeHRlcm5hbFJlc291cmNlcyk7Ci0gICAgICAgIHJlc291cmNlcy0+c2V0U2l6ZSh0
b3RhbFNpemUpOwotICAgICAgICByZXNvdXJjZXMtPnNldENoaWxkcmVuKHJlc291cmNlc0NoaWxk
cmVuLnJlbGVhc2UoKSk7Ci0gICAgICAgIHJldHVybiByZXNvdXJjZXMucmVsZWFzZSgpOwotICAg
IH0KLQotICAgIHZvaWQgZHVtcFN0YXRpc3RpY3MoVHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rv
ck1lbW9yeUJsb2NrPiogY2hpbGRyZW4sIEluc3BlY3RvckRhdGFDb3VudGVyKiBpbnNwZWN0b3JE
YXRhKQotICAgIHsKLSAgICAgICAgY2hpbGRyZW4tPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JNZW1v
cnlDYWNoZSgpKTsKLSAgICAgICAgY2hpbGRyZW4tPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JQYWdl
KCkpOwotICAgICAgICBjaGlsZHJlbi0+YWRkSXRlbShidWlsZE9iamVjdEZvckV4dGVybmFsUmVz
b3VyY2VzKCkpOwotCi0gICAgICAgIGluc3BlY3RvckRhdGEtPmFkZENvbXBvbmVudChNZW1vcnlC
bG9ja05hbWU6Omluc3BlY3RvckRPTURhdGEsIG1fbWVtb3J5SW5zdHJ1bWVudGF0aW9uLnNlbGZT
aXplKCkpOwotICAgIH0KIAogcHJpdmF0ZToKLSAgICBzaXplX3QgYWRkTWVtb3J5QmxvY2tGb3Io
VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvck1lbW9yeUJsb2NrPiogYXJyYXksIE1lbW9yeU9i
amVjdFR5cGUgdHlwZU5hbWUpIGNvbnN0Ci0gICAgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
TWVtb3J5QmxvY2s+IHJlc3VsdCA9IEluc3BlY3Rvck1lbW9yeUJsb2NrOjpjcmVhdGUoKS5zZXRO
YW1lKHR5cGVOYW1lKTsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBtX21lbW9yeUluc3RydW1lbnRh
dGlvbi50b3RhbFNpemUodHlwZU5hbWUpOwotICAgICAgICByZXN1bHQtPnNldFNpemUoc2l6ZSk7
Ci0gICAgICAgIGFycmF5LT5hZGRJdGVtKHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBzaXplOwot
ICAgIH0KLQogICAgIFBhZ2UqIG1fcGFnZTsKICAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBs
JiBtX21lbW9yeUluc3RydW1lbnRhdGlvbjsKIH07CiAKIH0KIAotc3RhdGljIHZvaWQgYWRkTWVt
b3J5SW5zdHJ1bWVudGF0aW9uRGVidWdEYXRhKFR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3JN
ZW1vcnlCbG9jaz4qIGNoaWxkcmVuLCBjb25zdCBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsJiBt
ZW1vcnlJbnN0cnVtZW50YXRpb24pCitzdGF0aWMgdm9pZCBjb2xsZWN0RG9tVHJlZUluZm8oUGFn
ZSogcGFnZSwgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCYgbWVtb3J5SW5zdHJ1bWVudGF0aW9u
LCBUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+KiBjaGlsZHJlbiwgSW5z
cGVjdG9yRGF0YUNvdW50ZXIqIGluc3BlY3RvckRhdGEpCiB7Ci0gICAgaWYgKG1lbW9yeUluc3Ry
dW1lbnRhdGlvbi5jaGVja0luc3RydW1lbnRlZE9iamVjdHMoKSkgewotICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yTWVtb3J5QmxvY2s+IHRvdGFsSW5zdHJ1bWVudGVkID0gSW5zcGVjdG9yTWVtb3J5
QmxvY2s6OmNyZWF0ZSgpLnNldE5hbWUoIkluc3RydW1lbnRlZE9iamVjdHNDb3VudCIpOwotICAg
ICAgICB0b3RhbEluc3RydW1lbnRlZC0+c2V0U2l6ZShtZW1vcnlJbnN0cnVtZW50YXRpb24udG90
YWxDb3VudGVkT2JqZWN0cygpKTsKLQotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yTWVtb3J5Qmxv
Y2s+IGluY29ycmVjdGx5SW5zdHJ1bWVudGVkID0gSW5zcGVjdG9yTWVtb3J5QmxvY2s6OmNyZWF0
ZSgpLnNldE5hbWUoIkluc3RydW1lbnRlZEJ1dE5vdEFsbG9jYXRlZE9iamVjdHNDb3VudCIpOwot
ICAgICAgICBpbmNvcnJlY3RseUluc3RydW1lbnRlZC0+c2V0U2l6ZShtZW1vcnlJbnN0cnVtZW50
YXRpb24udG90YWxPYmplY3RzTm90SW5BbGxvY2F0ZWRTZXQoKSk7Ci0KLSAgICAgICAgY2hpbGRy
ZW4tPmFkZEl0ZW0odG90YWxJbnN0cnVtZW50ZWQpOwotICAgICAgICBjaGlsZHJlbi0+YWRkSXRl
bShpbmNvcnJlY3RseUluc3RydW1lbnRlZCk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBjb2xs
ZWN0RG9tVHJlZUluZm8oUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDbGll
bnQsIFZpc2l0ZWRPYmplY3RzJiB2aXNpdGVkT2JqZWN0cywgVHlwZUJ1aWxkZXI6OkFycmF5PElu
c3BlY3Rvck1lbW9yeUJsb2NrPiogY2hpbGRyZW4sIEluc3BlY3RvckRhdGFDb3VudGVyKiBpbnNw
ZWN0b3JEYXRhKQotewotICAgIEhhc2hTZXQ8Y29uc3Qgdm9pZCo+IGFsbG9jYXRlZE9iamVjdHM7
Ci0gICAgaW5zcGVjdG9yQ2xpZW50LT5nZXRBbGxvY2F0ZWRPYmplY3RzKGFsbG9jYXRlZE9iamVj
dHMpOwotICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwgbWVtb3J5SW5zdHJ1bWVudGF0aW9u
KHZpc2l0ZWRPYmplY3RzLCBhbGxvY2F0ZWRPYmplY3RzLmlzRW1wdHkoKSA/IDAgOiAmYWxsb2Nh
dGVkT2JqZWN0cyk7Ci0KICAgICBFeHRlcm5hbFN0cmluZ3NSb290IHN0cmluZ3NSb290OwogICAg
IG1lbW9yeUluc3RydW1lbnRhdGlvbi5hZGRSb290T2JqZWN0KHN0cmluZ3NSb290KTsKIApAQCAt
NTgyLDkgKzU4OCw2IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3REb21UcmVlSW5mbyhQYWdlKiBwYWdl
LCBJbnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckNsaWVudCwgVmlzCiAKICAgICBkb21UcmVlc0l0
ZXJhdG9yLnZpc2l0QmluZGluZ3MoKTsKICAgICBkb21UcmVlc0l0ZXJhdG9yLnZpc2l0TWVtb3J5
Q2FjaGUoKTsKLQotICAgIGRvbVRyZWVzSXRlcmF0b3IuZHVtcFN0YXRpc3RpY3MoY2hpbGRyZW4s
IGluc3BlY3RvckRhdGEpOwotICAgIGFkZE1lbW9yeUluc3RydW1lbnRhdGlvbkRlYnVnRGF0YShj
aGlsZHJlbiwgbWVtb3J5SW5zdHJ1bWVudGF0aW9uKTsKIH0KIAogc3RhdGljIHZvaWQgYWRkUGxh
dGZvcm1Db21wb25lbnRzSW5mbyhQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0
b3JNZW1vcnlCbG9jaz4gPiBjaGlsZHJlbikKQEAgLTYxMiwxNCArNjE1LDIyIEBAIHZvaWQgSW5z
cGVjdG9yTWVtb3J5QWdlbnQ6OmdldFByb2Nlc3NNZW1vcnlEaXN0cmlidXRpb24oRXJyb3JTdHJp
bmcqLCBSZWZQdHI8SW5zCiAgICAgSW5zcGVjdG9yRGF0YUNvdW50ZXIgaW5zcGVjdG9yRGF0YTsK
ICAgICBpbnNwZWN0b3JEYXRhLmFkZENvbXBvbmVudChNZW1vcnlCbG9ja05hbWU6Omluc3BlY3Rv
ckpTSGVhcERhdGEsIFNjcmlwdFByb2ZpbGVyOjpwcm9maWxlclNuYXBzaG90c1NpemUoKSk7CiAK
LSAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0czsKKyAgICBIYXNoU2V0PGNvbnN0IHZv
aWQqPiBhbGxvY2F0ZWRPYmplY3RzOworICAgIG1faW5zcGVjdG9yQ2xpZW50LT5nZXRBbGxvY2F0
ZWRPYmplY3RzKGFsbG9jYXRlZE9iamVjdHMpOworICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkNs
aWVudEltcGwgbWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50OworICAgIE1lbW9yeUluc3RydW1l
bnRhdGlvbkltcGwgbWVtb3J5SW5zdHJ1bWVudGF0aW9uKCZtZW1vcnlJbnN0cnVtZW50YXRpb25D
bGllbnQsICZhbGxvY2F0ZWRPYmplY3RzKTsKKwogICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJy
YXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+ID4gY2hpbGRyZW4gPSBUeXBlQnVpbGRlcjo6QXJyYXk8
SW5zcGVjdG9yTWVtb3J5QmxvY2s+OjpjcmVhdGUoKTsKICAgICBjaGlsZHJlbi0+YWRkSXRlbShq
c0hlYXBJbmZvKCkpOwogICAgIGNoaWxkcmVuLT5hZGRJdGVtKHJlbmRlclRyZWVJbmZvKG1fcGFn
ZSkpOyAvLyBGSVhNRTogY29sbGVjdCBmb3IgYWxsIHBhZ2VzPwotICAgIGNvbGxlY3REb21UcmVl
SW5mbyhtX3BhZ2UsIG1faW5zcGVjdG9yQ2xpZW50LCB2aXNpdGVkT2JqZWN0cywgY2hpbGRyZW4u
Z2V0KCksICZpbnNwZWN0b3JEYXRhKTsgLy8gRklYTUU6IGNvbGxlY3QgZm9yIGFsbCBwYWdlcz8K
KyAgICBjb2xsZWN0RG9tVHJlZUluZm8obV9wYWdlLCBtZW1vcnlJbnN0cnVtZW50YXRpb24sIGNo
aWxkcmVuLmdldCgpLCAmaW5zcGVjdG9yRGF0YSk7IC8vIEZJWE1FOiBjb2xsZWN0IGZvciBhbGwg
cGFnZXM/CiAgICAgY2hpbGRyZW4tPmFkZEl0ZW0oaW5zcGVjdG9yRGF0YS5kdW1wU3RhdGlzdGlj
cygpKTsKICAgICBjaGlsZHJlbi0+YWRkSXRlbShkdW1wRE9NU3RvcmFnZUNhY2hlKG1fZG9tU3Rv
cmFnZUFnZW50LT5tZW1vcnlCeXRlc1VzZWRCeVN0b3JhZ2VDYWNoZSgpKSk7CiAgICAgYWRkUGxh
dGZvcm1Db21wb25lbnRzSW5mbyhjaGlsZHJlbik7CisgICAgTWVtb3J5VXNhZ2VTdGF0c0dlbmVy
YXRvciBzdGF0c0dlbmVyYXRvcigmbWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50LCAmbWVtb3J5
SW5zdHJ1bWVudGF0aW9uKTsKKyAgICBzdGF0c0dlbmVyYXRvci5kdW1wKGNoaWxkcmVuLmdldCgp
KTsKKyAgICBpbnNwZWN0b3JEYXRhLmFkZENvbXBvbmVudChNZW1vcnlCbG9ja05hbWU6Omluc3Bl
Y3RvckRPTURhdGEsIG1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudC5zZWxmU2l6ZSgpICsgbWVt
b3J5SW5zdHJ1bWVudGF0aW9uLnNlbGZTaXplKCkpOworICAgIGNoaWxkcmVuLT5hZGRJdGVtKGlu
c3BlY3RvckRhdGEuZHVtcFN0YXRpc3RpY3MoKSk7CiAgICAgcHJvY2Vzc01lbW9yeS0+c2V0Q2hp
bGRyZW4oY2hpbGRyZW4pOwogCiAgICAgc2l6ZV90IHByaXZhdGVCeXRlcyA9IDA7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbC5j
cHAKaW5kZXggODIyZWI5ZjE1NjFjOGZjZDVmY2M0ZWNmZThjOTUxOGFiNGJlZmEwOC4uMDdiNTk4
NjgzMTE5YzIzODQ1MDY5NThlOTRmNzY4OGM5ZjdlYWQ3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL01lbW9yeUluc3RydW1lbnRhdGlvbkltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9NZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmNwcApAQCAtMzcs
MTIgKzM3LDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTWVtb3J5SW5zdHJ1bWVudGF0
aW9uSW1wbDo6TWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbChWaXNpdGVkT2JqZWN0cyYgdmlzaXRl
ZE9iamVjdHMsIGNvbnN0IFZpc2l0ZWRPYmplY3RzKiBhbGxvY2F0ZWRPYmplY3RzKQotICAgIDog
bV92aXNpdGVkT2JqZWN0cyh2aXNpdGVkT2JqZWN0cykKLSAgICAsIG1fYWxsb2NhdGVkT2JqZWN0
cyhhbGxvY2F0ZWRPYmplY3RzKQotICAgICwgbV90b3RhbENvdW50ZWRPYmplY3RzKDApCi0gICAg
LCBtX3RvdGFsT2JqZWN0c05vdEluQWxsb2NhdGVkU2V0KDApCit2b2lkIE1lbW9yeUluc3RydW1l
bnRhdGlvbkNsaWVudEltcGw6OmNvdW50T2JqZWN0U2l6ZShNZW1vcnlPYmplY3RUeXBlIG9iamVj
dFR5cGUsIHNpemVfdCBzaXplKQogeworICAgIEFTU0VSVChvYmplY3RUeXBlKTsKKyAgICBUeXBl
VG9TaXplTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV90b3RhbFNpemVzLmFkZChvYmplY3RUeXBl
LCBzaXplKTsKKyAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICByZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCArPSBzaXplOworICAgICsrbV90b3RhbENvdW50ZWRPYmplY3RzOworfQor
Citib29sIE1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudEltcGw6OnZpc2l0ZWQoY29uc3Qgdm9p
ZCogb2JqZWN0KQoreworICAgIHJldHVybiAhbV92aXNpdGVkT2JqZWN0cy5hZGQob2JqZWN0KS5p
c05ld0VudHJ5OwogfQogCiB2b2lkIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGw6OnByb2Nlc3NE
ZWZlcnJlZEluc3RydW1lbnRlZFBvaW50ZXJzKCkKQEAgLTU0LDI1ICs2MCwxMSBAQCB2b2lkIE1l
bW9yeUluc3RydW1lbnRhdGlvbkltcGw6OnByb2Nlc3NEZWZlcnJlZEluc3RydW1lbnRlZFBvaW50
ZXJzKCkKICAgICB9CiB9CiAKLXZvaWQgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbDo6Y291bnRP
YmplY3RTaXplKE1lbW9yeU9iamVjdFR5cGUgb2JqZWN0VHlwZSwgc2l6ZV90IHNpemUpCi17Ci0g
ICAgQVNTRVJUKG9iamVjdFR5cGUpOwotICAgIFR5cGVUb1NpemVNYXA6OkFkZFJlc3VsdCByZXN1
bHQgPSBtX3RvdGFsU2l6ZXMuYWRkKG9iamVjdFR5cGUsIHNpemUpOwotICAgIGlmICghcmVzdWx0
LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kICs9IHNpemU7Ci0g
ICAgKyttX3RvdGFsQ291bnRlZE9iamVjdHM7Ci19Ci0KIHZvaWQgTWVtb3J5SW5zdHJ1bWVudGF0
aW9uSW1wbDo6ZGVmZXJJbnN0cnVtZW50ZWRQb2ludGVyKFBhc3NPd25QdHI8SW5zdHJ1bWVudGVk
UG9pbnRlckJhc2U+IHBvaW50ZXIpCiB7CiAgICAgbV9kZWZlcnJlZEluc3RydW1lbnRlZFBvaW50
ZXJzLmFwcGVuZChwb2ludGVyKTsKIH0KIAotYm9vbCBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBs
Ojp2aXNpdGVkKGNvbnN0IHZvaWQqIG9iamVjdCkKLXsKLSAgICByZXR1cm4gIW1fdmlzaXRlZE9i
amVjdHMuYWRkKG9iamVjdCkuaXNOZXdFbnRyeTsKLX0KLQogdm9pZCBNZW1vcnlJbnN0cnVtZW50
YXRpb25JbXBsOjpjaGVja0NvdW50ZWRPYmplY3QoY29uc3Qgdm9pZCogb2JqZWN0KQogewogICAg
IGlmICghY2hlY2tJbnN0cnVtZW50ZWRPYmplY3RzKCkpCkBAIC04OCw3ICs4MCw3IEBAIHZvaWQg
TWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbDo6Y2hlY2tDb3VudGVkT2JqZWN0KGNvbnN0IHZvaWQq
IG9iamVjdCkKIAogc2l6ZV90IE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGw6OnNlbGZTaXplKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gY2FsY3VsYXRlQ29udGFpbmVyU2l6ZShtX3Zpc2l0ZWRPYmpl
Y3RzKSArIGNhbGN1bGF0ZUNvbnRhaW5lclNpemUobV9kZWZlcnJlZEluc3RydW1lbnRlZFBvaW50
ZXJzKTsKKyAgICByZXR1cm4gY2FsY3VsYXRlQ29udGFpbmVyU2l6ZShtX2RlZmVycmVkSW5zdHJ1
bWVudGVkUG9pbnRlcnMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL01lbW9yeUluc3RydW1lbnRhdGlvbkltcGwuaAppbmRl
eCBlZjk1NDZkODczNWQxODlhYThkOTE4ZWU3NTU0MmM5ZjhhODYwY2Q5Li40NWRiYjY3ODdiZTM4
Nzk0MjhmYTRiZTRkNzk5NTM4OTMxMGIxMDkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9NZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmgKQEAgLTQ0LDExICs0NCwxMCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHR5cGVkZWYgSGFzaFNldDxjb25zdCB2b2lkKj4gVmlz
aXRlZE9iamVjdHM7CiAKLWNsYXNzIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwgOiBwdWJsaWMg
V1RGOjpNZW1vcnlJbnN0cnVtZW50YXRpb24geworY2xhc3MgTWVtb3J5SW5zdHJ1bWVudGF0aW9u
Q2xpZW50SW1wbCA6IHB1YmxpYyBXVEY6Ok1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudCB7CiBw
dWJsaWM6Ci0gICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbChWaXNpdGVkT2JqZWN0cyYsIGNv
bnN0IFZpc2l0ZWRPYmplY3RzKiBhbGxvY2F0ZWRPYmplY3RzID0gMCk7CisgICAgTWVtb3J5SW5z
dHJ1bWVudGF0aW9uQ2xpZW50SW1wbCgpIDogbV90b3RhbENvdW50ZWRPYmplY3RzKDApIHsgfQog
Ci0gICAgc2l6ZV90IHNlbGZTaXplKCkgY29uc3Q7CiAgICAgc2l6ZV90IHRvdGFsU2l6ZShNZW1v
cnlPYmplY3RUeXBlIG9iamVjdFR5cGUpIGNvbnN0CiAgICAgewogICAgICAgICBUeXBlVG9TaXpl
TWFwOjpjb25zdF9pdGVyYXRvciBpID0gbV90b3RhbFNpemVzLmZpbmQob2JqZWN0VHlwZSk7CkBA
IC02MywyMyArNjIsNDUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc2l6ZTsKICAgICB9CiAK
LSAgICBib29sIGNoZWNrSW5zdHJ1bWVudGVkT2JqZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fYWxs
b2NhdGVkT2JqZWN0czsgfQorICAgIHNpemVfdCBzZWxmU2l6ZSgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV92aXNpdGVkT2JqZWN0cy5jYXBhY2l0eSgpICogc2l6ZW9mKFZpc2l0ZWRP
YmplY3RzOjpWYWx1ZVR5cGUpICsKKyAgICAgICAgICAgIG1fdG90YWxTaXplcy5jYXBhY2l0eSgp
ICogc2l6ZW9mKFR5cGVUb1NpemVNYXA6OlZhbHVlVHlwZSk7CisgICAgfQorCisgICAgc2l6ZV90
IHZpc2l0ZWRPYmplY3RzKCkgY29uc3QgeyByZXR1cm4gbV92aXNpdGVkT2JqZWN0cy5zaXplKCk7
IH0KICAgICBzaXplX3QgdG90YWxDb3VudGVkT2JqZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fdG90
YWxDb3VudGVkT2JqZWN0czsgfQorCisgICAgdmlydHVhbCB2b2lkIGNvdW50T2JqZWN0U2l6ZShN
ZW1vcnlPYmplY3RUeXBlLCBzaXplX3QpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCB2aXNp
dGVkKGNvbnN0IHZvaWQqKSBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIEhhc2hN
YXA8TWVtb3J5T2JqZWN0VHlwZSwgc2l6ZV90PiBUeXBlVG9TaXplTWFwOworICAgIFR5cGVUb1Np
emVNYXAgbV90b3RhbFNpemVzOworICAgIFZpc2l0ZWRPYmplY3RzIG1fdmlzaXRlZE9iamVjdHM7
CisgICAgc2l6ZV90IG1fdG90YWxDb3VudGVkT2JqZWN0czsKK307CisKK2NsYXNzIE1lbW9yeUlu
c3RydW1lbnRhdGlvbkltcGwgOiBwdWJsaWMgV1RGOjpNZW1vcnlJbnN0cnVtZW50YXRpb24gewor
cHVibGljOgorICAgIGV4cGxpY2l0IE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwoV1RGOjpNZW1v
cnlJbnN0cnVtZW50YXRpb25DbGllbnQqIGNsaWVudCwgY29uc3QgVmlzaXRlZE9iamVjdHMqIGFs
bG9jYXRlZE9iamVjdHMgPSAwKQorICAgICAgICA6IE1lbW9yeUluc3RydW1lbnRhdGlvbihjbGll
bnQpCisgICAgICAgICwgbV9hbGxvY2F0ZWRPYmplY3RzKGFsbG9jYXRlZE9iamVjdHMpCisgICAg
ICAgICwgbV90b3RhbE9iamVjdHNOb3RJbkFsbG9jYXRlZFNldCgwKQorICAgIHsKKyAgICB9CisK
KyAgICBzaXplX3Qgc2VsZlNpemUoKSBjb25zdDsKKyAgICBib29sIGNoZWNrSW5zdHJ1bWVudGVk
T2JqZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb2NhdGVkT2JqZWN0czsgfQogICAgIHNpemVf
dCB0b3RhbE9iamVjdHNOb3RJbkFsbG9jYXRlZFNldCgpIGNvbnN0IHsgcmV0dXJuIG1fdG90YWxP
YmplY3RzTm90SW5BbGxvY2F0ZWRTZXQ7IH0KIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQg
Y291bnRPYmplY3RTaXplKE1lbW9yeU9iamVjdFR5cGUsIHNpemVfdCkgT1ZFUlJJREU7CiAgICAg
dmlydHVhbCB2b2lkIGRlZmVySW5zdHJ1bWVudGVkUG9pbnRlcihQYXNzT3duUHRyPEluc3RydW1l
bnRlZFBvaW50ZXJCYXNlPikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIHZpc2l0ZWQoY29u
c3Qgdm9pZCopIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzRGVmZXJyZWRJbnN0
cnVtZW50ZWRQb2ludGVycygpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBjaGVja0NvdW50
ZWRPYmplY3QoY29uc3Qgdm9pZCopIE9WRVJSSURFOwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPE1l
bW9yeU9iamVjdFR5cGUsIHNpemVfdD4gVHlwZVRvU2l6ZU1hcDsKLSAgICBUeXBlVG9TaXplTWFw
IG1fdG90YWxTaXplczsKLSAgICBWaXNpdGVkT2JqZWN0cyYgbV92aXNpdGVkT2JqZWN0czsKICAg
ICBWZWN0b3I8T3duUHRyPEluc3RydW1lbnRlZFBvaW50ZXJCYXNlPiA+IG1fZGVmZXJyZWRJbnN0
cnVtZW50ZWRQb2ludGVyczsKICAgICBjb25zdCBWaXNpdGVkT2JqZWN0cyogbV9hbGxvY2F0ZWRP
YmplY3RzOwotICAgIHNpemVfdCBtX3RvdGFsQ291bnRlZE9iamVjdHM7CiAgICAgc2l6ZV90IG1f
dG90YWxPYmplY3RzTm90SW5BbGxvY2F0ZWRTZXQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL01lbW9yeUluc3RydW1lbnRhdGlvblRlc3QuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9NZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LmNwcApp
bmRleCA0ZThiNDk4NTk1NzUwZGFiMWNiM2RhNDhlNzRhMTcxMWY0YzBiNmNlLi4yZjQwMTdlZTI1
MmExYWUxNDhmN2IwYTBmM2Y0MWM4OTlmNmY5ZGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL01lbW9yeUluc3RydW1lbnRhdGlvblRlc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdC5jcHAKQEAg
LTUzLDYgKzUzLDIxIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2Ugewog
CitjbGFzcyBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIHsKK3B1YmxpYzoKKyAgICBJbnN0cnVt
ZW50YXRpb25UZXN0SGVscGVyKCkgOiBtX2NsaWVudCgpLCBtX2luc3RydW1lbnRhdGlvbigmbV9j
bGllbnQpIHsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIGFkZFJvb3RP
YmplY3QoY29uc3QgVCYgdCkgeyBtX2luc3RydW1lbnRhdGlvbi5hZGRSb290T2JqZWN0KHQpOyB9
CisgICAgc2l6ZV90IHJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkgY29uc3QgeyByZXR1cm4gbV9j
bGllbnQucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKTsgfQorICAgIGludCB2aXNpdGVkT2JqZWN0
cygpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50LnZpc2l0ZWRPYmplY3RzKCk7IH0KKyAgICBzaXpl
X3QgdG90YWxTaXplKE1lbW9yeU9iamVjdFR5cGUgb2JqZWN0VHlwZSkgY29uc3QgeyByZXR1cm4g
bV9jbGllbnQudG90YWxTaXplKG9iamVjdFR5cGUpOyB9CisKK3ByaXZhdGU6CisgICAgTWVtb3J5
SW5zdHJ1bWVudGF0aW9uQ2xpZW50SW1wbCBtX2NsaWVudDsKKyAgICBNZW1vcnlJbnN0cnVtZW50
YXRpb25JbXBsIG1faW5zdHJ1bWVudGF0aW9uOworfTsKKwogY2xhc3MgTm90SW5zdHJ1bWVudGVk
IHsKIHB1YmxpYzoKICAgICBOb3RJbnN0cnVtZW50ZWQoY29uc3QgY2hhciogPSAwKSB7IH0KQEAg
LTc0LDUyICs4OSw0NyBAQCBwdWJsaWM6CiAKIFRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVz
dCwgc2l6ZU9mKQogewotICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwotICAgIE1l
bW9yeUluc3RydW1lbnRhdGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7CisgICAgSW5zdHJ1
bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CiAgICAgSW5zdHJ1bWVudGVkIGluc3RydW1lbnRl
ZDsKLSAgICBpbXBsLmFkZFJvb3RPYmplY3QoaW5zdHJ1bWVudGVkKTsKLSAgICBFWFBFQ1RfRVEo
c2l6ZW9mKE5vdEluc3RydW1lbnRlZCksIGltcGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7
Ci0gICAgRVhQRUNUX0VRKDEsIHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAgaGVscGVyLmFk
ZFJvb3RPYmplY3QoaW5zdHJ1bWVudGVkKTsKKyAgICBFWFBFQ1RfRVEoc2l6ZW9mKE5vdEluc3Ry
dW1lbnRlZCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICBFWFBFQ1Rf
RVEoMSwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwogfQogCiBURVNUKE1lbW9yeUluc3RydW1l
bnRhdGlvblRlc3QsIG51bGxDaGVjaykKIHsKLSAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVkT2Jq
ZWN0czsKLSAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMp
OworICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwogICAgIEluc3RydW1lbnRl
ZCogaW5zdHJ1bWVudGVkID0gMDsKLSAgICBpbXBsLmFkZFJvb3RPYmplY3QoaW5zdHJ1bWVudGVk
KTsKLSAgICBFWFBFQ1RfRVEoMHUsIGltcGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0g
ICAgRVhQRUNUX0VRKDAsIHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAgaGVscGVyLmFkZFJv
b3RPYmplY3QoaW5zdHJ1bWVudGVkKTsKKyAgICBFWFBFQ1RfRVEoMHUsIGhlbHBlci5yZXBvcnRl
ZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICBFWFBFQ1RfRVEoMCwgaGVscGVyLnZpc2l0ZWRPYmpl
Y3RzKCkpOwogfQogCiBURVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIHB0clZzUmVmKQog
ewogICAgIHsKLSAgICAgICAgVmlzaXRlZE9iamVjdHMgdmlzaXRlZE9iamVjdHM7Ci0gICAgICAg
IE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7CisgICAgICAg
IEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwogICAgICAgICBJbnN0cnVtZW50ZWQg
aW5zdHJ1bWVudGVkOwotICAgICAgICBpbXBsLmFkZFJvb3RPYmplY3QoJmluc3RydW1lbnRlZCk7
Ci0gICAgICAgIEVYUEVDVF9FUShzaXplb2YoSW5zdHJ1bWVudGVkKSArIHNpemVvZihOb3RJbnN0
cnVtZW50ZWQpLCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgICAgICBFWFBF
Q1RfRVEoMiwgdmlzaXRlZE9iamVjdHMuc2l6ZSgpKTsKKyAgICAgICAgaGVscGVyLmFkZFJvb3RP
YmplY3QoJmluc3RydW1lbnRlZCk7CisgICAgICAgIEVYUEVDVF9FUShzaXplb2YoSW5zdHJ1bWVu
dGVkKSArIHNpemVvZihOb3RJbnN0cnVtZW50ZWQpLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxs
VHlwZXMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgyLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7
CiAgICAgfQogICAgIHsKLSAgICAgICAgVmlzaXRlZE9iamVjdHMgdmlzaXRlZE9iamVjdHM7Ci0g
ICAgICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7Cisg
ICAgICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwogICAgICAgICBJbnN0cnVt
ZW50ZWQgaW5zdHJ1bWVudGVkOwotICAgICAgICBpbXBsLmFkZFJvb3RPYmplY3QoaW5zdHJ1bWVu
dGVkKTsKLSAgICAgICAgRVhQRUNUX0VRKHNpemVvZihOb3RJbnN0cnVtZW50ZWQpLCBpbXBsLnJl
cG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgICAgICBFWFBFQ1RfRVEoMSwgdmlzaXRlZE9i
amVjdHMuc2l6ZSgpKTsKKyAgICAgICAgaGVscGVyLmFkZFJvb3RPYmplY3QoaW5zdHJ1bWVudGVk
KTsKKyAgICAgICAgRVhQRUNUX0VRKHNpemVvZihOb3RJbnN0cnVtZW50ZWQpLCBoZWxwZXIucmVw
b3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxLCBoZWxwZXIudmlz
aXRlZE9iamVjdHMoKSk7CiAgICAgfQogfQogCiBURVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRl
c3QsIG93blB0cikKIHsKLSAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0czsKLSAgICBN
ZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMpOworICAgIEluc3Ry
dW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwogICAgIE93blB0cjxJbnN0cnVtZW50ZWQ+IGlu
c3RydW1lbnRlZChhZG9wdFB0cihuZXcgSW5zdHJ1bWVudGVkKSk7Ci0gICAgaW1wbC5hZGRSb290
T2JqZWN0KGluc3RydW1lbnRlZCk7Ci0gICAgRVhQRUNUX0VRKHNpemVvZihJbnN0cnVtZW50ZWQp
ICsgc2l6ZW9mKE5vdEluc3RydW1lbnRlZCksIGltcGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMo
KSk7Ci0gICAgRVhQRUNUX0VRKDIsIHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAgaGVscGVy
LmFkZFJvb3RPYmplY3QoaW5zdHJ1bWVudGVkKTsKKyAgICBFWFBFQ1RfRVEoc2l6ZW9mKEluc3Ry
dW1lbnRlZCkgKyBzaXplb2YoTm90SW5zdHJ1bWVudGVkKSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZv
ckFsbFR5cGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7
CiB9CiAKIGNsYXNzIEluc3RydW1lbnRlZFJlZlB0ciA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3Ry
dW1lbnRlZFJlZlB0cj4gewpAQCAtMTM4LDIzICsxNDgsMjEgQEAgcHVibGljOgogCiBURVNUKE1l
bW9yeUluc3RydW1lbnRhdGlvblRlc3QsIGRhdGFSZWYpCiB7Ci0gICAgVmlzaXRlZE9iamVjdHMg
dmlzaXRlZE9iamVjdHM7Ci0gICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0
ZWRPYmplY3RzKTsKKyAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKICAgICBE
YXRhUmVmPEluc3RydW1lbnRlZFJlZlB0cj4gaW5zdHJ1bWVudGVkUmVmUHRyOwogICAgIGluc3Ry
dW1lbnRlZFJlZlB0ci5pbml0KCk7Ci0gICAgaW1wbC5hZGRSb290T2JqZWN0KGluc3RydW1lbnRl
ZFJlZlB0cik7Ci0gICAgRVhQRUNUX0VRKHNpemVvZihJbnN0cnVtZW50ZWRSZWZQdHIpICsgc2l6
ZW9mKE5vdEluc3RydW1lbnRlZCksIGltcGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0g
ICAgRVhQRUNUX0VRKDIsIHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAgaGVscGVyLmFkZFJv
b3RPYmplY3QoaW5zdHJ1bWVudGVkUmVmUHRyKTsKKyAgICBFWFBFQ1RfRVEoc2l6ZW9mKEluc3Ry
dW1lbnRlZFJlZlB0cikgKyBzaXplb2YoTm90SW5zdHJ1bWVudGVkKSwgaGVscGVyLnJlcG9ydGVk
U2l6ZUZvckFsbFR5cGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBoZWxwZXIudmlzaXRlZE9iamVj
dHMoKSk7CiB9CiAKIFRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwgcmVmUHRyKQogewot
ICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwotICAgIE1lbW9yeUluc3RydW1lbnRh
dGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7CisgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhl
bHBlciBoZWxwZXI7CiAgICAgUmVmUHRyPEluc3RydW1lbnRlZFJlZlB0cj4gaW5zdHJ1bWVudGVk
UmVmUHRyKGFkb3B0UmVmKG5ldyBJbnN0cnVtZW50ZWRSZWZQdHIpKTsKLSAgICBpbXBsLmFkZFJv
b3RPYmplY3QoaW5zdHJ1bWVudGVkUmVmUHRyKTsKLSAgICBFWFBFQ1RfRVEoc2l6ZW9mKEluc3Ry
dW1lbnRlZFJlZlB0cikgKyBzaXplb2YoTm90SW5zdHJ1bWVudGVkKSwgaW1wbC5yZXBvcnRlZFNp
emVGb3JBbGxUeXBlcygpKTsKLSAgICBFWFBFQ1RfRVEoMiwgdmlzaXRlZE9iamVjdHMuc2l6ZSgp
KTsKKyAgICBoZWxwZXIuYWRkUm9vdE9iamVjdChpbnN0cnVtZW50ZWRSZWZQdHIpOworICAgIEVY
UEVDVF9FUShzaXplb2YoSW5zdHJ1bWVudGVkUmVmUHRyKSArIHNpemVvZihOb3RJbnN0cnVtZW50
ZWQpLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgRVhQRUNUX0VRKDIs
IGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKIH0KIAogY2xhc3MgSW5zdHJ1bWVudGVkV2l0aE93
blB0ciA6IHB1YmxpYyBJbnN0cnVtZW50ZWQgewpAQCAtMTcyLDEyICsxODAsMTEgQEAgcHVibGlj
OgogCiBURVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIG93blB0ck5vdEluc3RydW1lbnRl
ZCkKIHsKLSAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0czsKLSAgICBNZW1vcnlJbnN0
cnVtZW50YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMpOworICAgIEluc3RydW1lbnRhdGlv
blRlc3RIZWxwZXIgaGVscGVyOwogICAgIEluc3RydW1lbnRlZFdpdGhPd25QdHIgaW5zdHJ1bWVu
dGVkV2l0aE93blB0cjsKLSAgICBpbXBsLmFkZFJvb3RPYmplY3QoaW5zdHJ1bWVudGVkV2l0aE93
blB0cik7Ci0gICAgRVhQRUNUX0VRKDIgKiBzaXplb2YoTm90SW5zdHJ1bWVudGVkKSwgaW1wbC5y
ZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICBFWFBFQ1RfRVEoMiwgdmlzaXRlZE9iamVj
dHMuc2l6ZSgpKTsKKyAgICBoZWxwZXIuYWRkUm9vdE9iamVjdChpbnN0cnVtZW50ZWRXaXRoT3du
UHRyKTsKKyAgICBFWFBFQ1RfRVEoMiAqIHNpemVvZihOb3RJbnN0cnVtZW50ZWQpLCBoZWxwZXIu
cmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgRVhQRUNUX0VRKDIsIGhlbHBlci52aXNp
dGVkT2JqZWN0cygpKTsKIH0KIAogY2xhc3MgSW5zdHJ1bWVudGVkVW5kZWZpbmVkIHsKQEAgLTIw
NSwxMyArMjEyLDEyIEBAIHB1YmxpYzoKIAogVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0
LCBvd25lclR5cGVQcm9wYWdhdGlvbikKIHsKLSAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVkT2Jq
ZWN0czsKLSAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMp
OworICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwogICAgIE93blB0cjxJbnN0
cnVtZW50ZWRET00+IGluc3RydW1lbnRlZERPTShhZG9wdFB0cihuZXcgSW5zdHJ1bWVudGVkRE9N
KSk7Ci0gICAgaW1wbC5hZGRSb290T2JqZWN0KGluc3RydW1lbnRlZERPTSk7Ci0gICAgRVhQRUNU
X0VRKHNpemVvZihJbnN0cnVtZW50ZWRET00pICsgc2l6ZW9mKEluc3RydW1lbnRlZFVuZGVmaW5l
ZCksIGltcGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgRVhQRUNUX0VRKHNpemVv
ZihJbnN0cnVtZW50ZWRET00pICsgc2l6ZW9mKEluc3RydW1lbnRlZFVuZGVmaW5lZCksIGltcGwu
dG90YWxTaXplKFdlYkNvcmVNZW1vcnlUeXBlczo6RE9NKSk7Ci0gICAgRVhQRUNUX0VRKDIsIHZp
c2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAgaGVscGVyLmFkZFJvb3RPYmplY3QoaW5zdHJ1bWVu
dGVkRE9NKTsKKyAgICBFWFBFQ1RfRVEoc2l6ZW9mKEluc3RydW1lbnRlZERPTSkgKyBzaXplb2Yo
SW5zdHJ1bWVudGVkVW5kZWZpbmVkKSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkp
OworICAgIEVYUEVDVF9FUShzaXplb2YoSW5zdHJ1bWVudGVkRE9NKSArIHNpemVvZihJbnN0cnVt
ZW50ZWRVbmRlZmluZWQpLCBoZWxwZXIudG90YWxTaXplKFdlYkNvcmVNZW1vcnlUeXBlczo6RE9N
KSk7CisgICAgRVhQRUNUX0VRKDIsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKIH0KIAogY2xh
c3MgTm9uVmlydHVhbEluc3RydW1lbnRlZCB7CkBAIC0yMjcsMTIgKzIzMywxMSBAQCBwdWJsaWM6
CiAKIFRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwgdmlzaXRGaXJzdE1lbWJlckluTm9u
VmlydHVhbENsYXNzKQogewotICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwotICAg
IE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7CisgICAgSW5z
dHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CiAgICAgTm9uVmlydHVhbEluc3RydW1lbnRl
ZCBub25WaXJ0dWFsSW5zdHJ1bWVudGVkOwotICAgIGltcGwuYWRkUm9vdE9iamVjdCgmbm9uVmly
dHVhbEluc3RydW1lbnRlZCk7Ci0gICAgRVhQRUNUX0VRKHNpemVvZihOb25WaXJ0dWFsSW5zdHJ1
bWVudGVkKSArIHNpemVvZihOb3RJbnN0cnVtZW50ZWQpLCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFs
bFR5cGVzKCkpOwotICAgIEVYUEVDVF9FUSgyLCB2aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAg
IGhlbHBlci5hZGRSb290T2JqZWN0KCZub25WaXJ0dWFsSW5zdHJ1bWVudGVkKTsKKyAgICBFWFBF
Q1RfRVEoc2l6ZW9mKE5vblZpcnR1YWxJbnN0cnVtZW50ZWQpICsgc2l6ZW9mKE5vdEluc3RydW1l
bnRlZCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICBFWFBFQ1RfRVEo
MiwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpA
QCAtMjUzLDMyICsyNTgsMjkgQEAgcHVibGljOgogVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25U
ZXN0LCB2aXNpdFN0cmluZ3MpCiB7CiAgICAgewotICAgICAgICBWaXNpdGVkT2JqZWN0cyB2aXNp
dGVkT2JqZWN0czsKLSAgICAgICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0
ZWRPYmplY3RzKTsKKyAgICAgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CiAg
ICAgICAgIEluc3RydW1lbnRlZE93bmVyPFN0cmluZz4gc3RyaW5nSW5zdHJ1bWVudGVkT3duZXIo
IlN0cmluZyIpOwogICAgICAgICBzdHJpbmdJbnN0cnVtZW50ZWRPd25lci5tX3ZhbHVlLmNoYXJh
Y3RlcnMoKTsgLy8gRm9yY2UgMTZiaXQgc2hhZG93IGNyZWF0aW9uLgotICAgICAgICBpbXBsLmFk
ZFJvb3RPYmplY3Qoc3RyaW5nSW5zdHJ1bWVudGVkT3duZXIpOwotICAgICAgICBFWFBFQ1RfRVEo
c2l6ZW9mKFN0cmluZ0ltcGwpICsgc3RyaW5nSW5zdHJ1bWVudGVkT3duZXIubV92YWx1ZS5sZW5n
dGgoKSAqIDIsIGltcGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgICAgIEVYUEVD
VF9FUSgyLCB2aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAgICAgICBoZWxwZXIuYWRkUm9vdE9i
amVjdChzdHJpbmdJbnN0cnVtZW50ZWRPd25lcik7CisgICAgICAgIEVYUEVDVF9FUShzaXplb2Yo
U3RyaW5nSW1wbCkgKyBzdHJpbmdJbnN0cnVtZW50ZWRPd25lci5tX3ZhbHVlLmxlbmd0aCgpICog
MiwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgICAgICBFWFBFQ1RfRVEo
MiwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwogICAgIH0KIAogICAgIHsKLSAgICAgICAgVmlz
aXRlZE9iamVjdHMgdmlzaXRlZE9iamVjdHM7Ci0gICAgICAgIE1lbW9yeUluc3RydW1lbnRhdGlv
bkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7CisgICAgICAgIEluc3RydW1lbnRhdGlvblRlc3RI
ZWxwZXIgaGVscGVyOwogICAgICAgICBJbnN0cnVtZW50ZWRPd25lcjxBdG9taWNTdHJpbmc+IGF0
b21pY1N0cmluZ0luc3RydW1lbnRlZE93bmVyKCJBdG9taWNTdHJpbmciKTsKICAgICAgICAgYXRv
bWljU3RyaW5nSW5zdHJ1bWVudGVkT3duZXIubV92YWx1ZS5zdHJpbmcoKS5jaGFyYWN0ZXJzKCk7
IC8vIEZvcmNlIDE2Yml0IHNoYWRvdyBjcmVhdGlvbi4KLSAgICAgICAgaW1wbC5hZGRSb290T2Jq
ZWN0KGF0b21pY1N0cmluZ0luc3RydW1lbnRlZE93bmVyKTsKLSAgICAgICAgRVhQRUNUX0VRKHNp
emVvZihTdHJpbmdJbXBsKSArIGF0b21pY1N0cmluZ0luc3RydW1lbnRlZE93bmVyLm1fdmFsdWUu
bGVuZ3RoKCkgKiAyLCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgICAgICBF
WFBFQ1RfRVEoMiwgdmlzaXRlZE9iamVjdHMuc2l6ZSgpKTsKKyAgICAgICAgaGVscGVyLmFkZFJv
b3RPYmplY3QoYXRvbWljU3RyaW5nSW5zdHJ1bWVudGVkT3duZXIpOworICAgICAgICBFWFBFQ1Rf
RVEoc2l6ZW9mKFN0cmluZ0ltcGwpICsgYXRvbWljU3RyaW5nSW5zdHJ1bWVudGVkT3duZXIubV92
YWx1ZS5sZW5ndGgoKSAqIDIsIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAg
ICAgICAgRVhQRUNUX0VRKDIsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKICAgICB9CiAKICAg
ICB7Ci0gICAgICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwotICAgICAgICBNZW1v
cnlJbnN0cnVtZW50YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMpOworICAgICAgICBJbnN0
cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKICAgICAgICAgSW5zdHJ1bWVudGVkT3duZXI8
Q1N0cmluZz4gY1N0cmluZ0luc3RydW1lbnRlZE93bmVyKCJDU3RyaW5nIik7Ci0gICAgICAgIGlt
cGwuYWRkUm9vdE9iamVjdChjU3RyaW5nSW5zdHJ1bWVudGVkT3duZXIpOwotICAgICAgICBFWFBF
Q1RfRVEoc2l6ZW9mKFdURjo6Q1N0cmluZ0J1ZmZlcikgKyBjU3RyaW5nSW5zdHJ1bWVudGVkT3du
ZXIubV92YWx1ZS5sZW5ndGgoKSwgaW1wbC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAg
ICAgICAgRVhQRUNUX0VRKDEsIHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAgICAgIGhlbHBl
ci5hZGRSb290T2JqZWN0KGNTdHJpbmdJbnN0cnVtZW50ZWRPd25lcik7CisgICAgICAgIEVYUEVD
VF9FUShzaXplb2YoV1RGOjpDU3RyaW5nQnVmZmVyKSArIGNTdHJpbmdJbnN0cnVtZW50ZWRPd25l
ci5tX3ZhbHVlLmxlbmd0aCgpLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Cisg
ICAgICAgIEVYUEVDVF9FUSgxLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7CiAgICAgfQogfQog
CkBAIC0yOTgsMTMgKzMwMCwxMiBAQCBwdWJsaWM6CiAKIFRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0
aW9uVGVzdCwgcmVmUHRyUHRyKQogeworICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVs
cGVyOwogICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZWZQdHI7CiAgICAgVHdvUG9pbnRlcnNUb1Jl
ZlB0ciByb290KHJlZlB0cik7Ci0gICAgVmlzaXRlZE9iamVjdHMgdmlzaXRlZE9iamVjdHM7Ci0g
ICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0ZWRPYmplY3RzKTsKLSAgICBp
bXBsLmFkZFJvb3RPYmplY3Qocm9vdCk7Ci0gICAgRVhQRUNUX0VRKHNpemVvZihSZWZQdHI8U3Ry
aW5nSW1wbD4pLCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgIEVYUEVDVF9F
USgxLCB2aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAgIGhlbHBlci5hZGRSb290T2JqZWN0KHJv
b3QpOworICAgIEVYUEVDVF9FUShzaXplb2YoUmVmUHRyPFN0cmluZ0ltcGw+KSwgaGVscGVyLnJl
cG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBoZWxwZXIudmlzaXRl
ZE9iamVjdHMoKSk7CiB9CiAKIGNsYXNzIFR3b1BvaW50ZXJzVG9Pd25QdHIgewpAQCAtMzIzLDEz
ICszMjQsMTIgQEAgcHVibGljOgogCiBURVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIG93
blB0clB0cikKIHsKKyAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKICAgICBP
d25QdHI8Tm90SW5zdHJ1bWVudGVkPiBvd25QdHI7CiAgICAgVHdvUG9pbnRlcnNUb093blB0ciBy
b290KG93blB0cik7Ci0gICAgVmlzaXRlZE9iamVjdHMgdmlzaXRlZE9iamVjdHM7Ci0gICAgTWVt
b3J5SW5zdHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0ZWRPYmplY3RzKTsKLSAgICBpbXBsLmFk
ZFJvb3RPYmplY3Qocm9vdCk7Ci0gICAgRVhQRUNUX0VRKHNpemVvZihPd25QdHI8Tm90SW5zdHJ1
bWVudGVkPiksIGltcGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgRVhQRUNUX0VR
KDEsIHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAgaGVscGVyLmFkZFJvb3RPYmplY3Qocm9v
dCk7CisgICAgRVhQRUNUX0VRKHNpemVvZihPd25QdHI8Tm90SW5zdHJ1bWVudGVkPiksIGhlbHBl
ci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgaGVscGVyLnZp
c2l0ZWRPYmplY3RzKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpAQCAtMzUxLDg2ICsz
NTEsNzggQEAgcHVibGljOgogVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCBkZXRlY3RS
ZXBvcnRNZW1vcnlVc2FnZU1ldGhvZCkKIHsKICAgICB7Ci0gICAgICAgIFZpc2l0ZWRPYmplY3Rz
IHZpc2l0ZWRPYmplY3RzOwotICAgICAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIGltcGwo
dmlzaXRlZE9iamVjdHMpOworICAgICAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBl
cjsKIAogICAgICAgICBPd25QdHI8SW5zdHJ1bWVudGVkVGVtcGxhdGU8U3RyaW5nPiA+IHZhbHVl
ID0gYWRvcHRQdHIobmV3IEluc3RydW1lbnRlZFRlbXBsYXRlPFN0cmluZz4oIiIpKTsKICAgICAg
ICAgSW5zdHJ1bWVudGVkT3duZXI8SW5zdHJ1bWVudGVkVGVtcGxhdGU8U3RyaW5nPiogPiByb290
KHZhbHVlLmdldCgpKTsKLSAgICAgICAgaW1wbC5hZGRSb290T2JqZWN0KHJvb3QpOwotICAgICAg
ICBFWFBFQ1RfRVEoc2l6ZW9mKEluc3RydW1lbnRlZFRlbXBsYXRlPFN0cmluZz4pICsgc2l6ZW9m
KFN0cmluZ0ltcGwpLCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgICAgICBo
ZWxwZXIuYWRkUm9vdE9iamVjdChyb290KTsKKyAgICAgICAgRVhQRUNUX0VRKHNpemVvZihJbnN0
cnVtZW50ZWRUZW1wbGF0ZTxTdHJpbmc+KSArIHNpemVvZihTdHJpbmdJbXBsKSwgaGVscGVyLnJl
cG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwogICAgICAgICAvLyBGSVhNRTogaXQgaXMgZmFpbGlu
ZyBvbiBDaHJvbWl1bSBDYW5hcnkgYm90cyBidXQgd29ya3MgZmluZSBsb2NhbGx5LgotICAgICAg
ICAvLyBFWFBFQ1RfRVEoMiwgdmlzaXRlZE9iamVjdHMuc2l6ZSgpKTsKKyAgICAgICAgLy8gRVhQ
RUNUX0VRKDIsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKICAgICB9CiAgICAgewotICAgICAg
ICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0czsKLSAgICAgICAgTWVtb3J5SW5zdHJ1bWVu
dGF0aW9uSW1wbCBpbXBsKHZpc2l0ZWRPYmplY3RzKTsKKyAgICAgICAgSW5zdHJ1bWVudGF0aW9u
VGVzdEhlbHBlciBoZWxwZXI7CiAKICAgICAgICAgT3duUHRyPEluc3RydW1lbnRlZFRlbXBsYXRl
PE5vdEluc3RydW1lbnRlZD4gPiB2YWx1ZSA9IGFkb3B0UHRyKG5ldyBJbnN0cnVtZW50ZWRUZW1w
bGF0ZTxOb3RJbnN0cnVtZW50ZWQ+KCIiKSk7CiAgICAgICAgIEluc3RydW1lbnRlZE93bmVyPElu
c3RydW1lbnRlZFRlbXBsYXRlPE5vdEluc3RydW1lbnRlZD4qID4gcm9vdCh2YWx1ZS5nZXQoKSk7
Ci0gICAgICAgIGltcGwuYWRkUm9vdE9iamVjdChyb290KTsKLSAgICAgICAgRVhQRUNUX0VRKHNp
emVvZihJbnN0cnVtZW50ZWRUZW1wbGF0ZTxOb3RJbnN0cnVtZW50ZWQ+KSwgaW1wbC5yZXBvcnRl
ZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICAgICAgRVhQRUNUX0VRKDEsIHZpc2l0ZWRPYmplY3Rz
LnNpemUoKSk7CisgICAgICAgIGhlbHBlci5hZGRSb290T2JqZWN0KHJvb3QpOworICAgICAgICBF
WFBFQ1RfRVEoc2l6ZW9mKEluc3RydW1lbnRlZFRlbXBsYXRlPE5vdEluc3RydW1lbnRlZD4pLCBo
ZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxLCBo
ZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7CiAgICAgfQogfQogCiBURVNUKE1lbW9yeUluc3RydW1l
bnRhdGlvblRlc3QsIHZlY3Rvclplcm9JbmxpbmVDYXBhY2l0eSkKIHsKLSAgICBWaXNpdGVkT2Jq
ZWN0cyB2aXNpdGVkT2JqZWN0czsKLSAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIGltcGwo
dmlzaXRlZE9iamVjdHMpOworICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwog
ICAgIEluc3RydW1lbnRlZE93bmVyPFZlY3RvcjxpbnQ+ID4gdmVjdG9yT3duZXIoMTYpOwotICAg
IGltcGwuYWRkUm9vdE9iamVjdCh2ZWN0b3JPd25lcik7Ci0gICAgRVhQRUNUX0VRKDE2ICogc2l6
ZW9mKGludCksIGltcGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgRVhQRUNUX0VR
KDEsIHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAgaGVscGVyLmFkZFJvb3RPYmplY3QodmVj
dG9yT3duZXIpOworICAgIEVYUEVDVF9FUSgxNiAqIHNpemVvZihpbnQpLCBoZWxwZXIucmVwb3J0
ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIGhlbHBlci52aXNpdGVkT2Jq
ZWN0cygpKTsKIH0KIAogVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCB2ZWN0b3JGaWVs
ZFdpdGhJbmxpbmVDYXBhY2l0eSkKIHsKLSAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0
czsKLSAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMpOwor
ICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwogICAgIEluc3RydW1lbnRlZE93
bmVyPFZlY3RvcjxpbnQsIDQ+ID4gdmVjdG9yT3duZXI7Ci0gICAgaW1wbC5hZGRSb290T2JqZWN0
KHZlY3Rvck93bmVyKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgaW1w
bC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICBFWFBFQ1RfRVEoMCwgdmlzaXRlZE9i
amVjdHMuc2l6ZSgpKTsKKyAgICBoZWxwZXIuYWRkUm9vdE9iamVjdCh2ZWN0b3JPd25lcik7Cisg
ICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMCksIGhlbHBlci5yZXBvcnRlZFNpemVG
b3JBbGxUeXBlcygpKTsKKyAgICBFWFBFQ1RfRVEoMCwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkp
OwogfQogCiBURVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIHZlY3RvckZpZWxkV2l0aElu
bGluZUNhcGFjaXR5UmVzaXplZCkKIHsKLSAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0
czsKLSAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMpOwor
ICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwogICAgIEluc3RydW1lbnRlZE93
bmVyPFZlY3RvcjxpbnQsIDQ+ID4gdmVjdG9yT3duZXI7CiAgICAgdmVjdG9yT3duZXIubV92YWx1
ZS5yZXNlcnZlQ2FwYWNpdHkoOCk7Ci0gICAgaW1wbC5hZGRSb290T2JqZWN0KHZlY3Rvck93bmVy
KTsKLSAgICBFWFBFQ1RfRVEoOCAqIHNpemVvZihpbnQpLCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFs
bFR5cGVzKCkpOwotICAgIEVYUEVDVF9FUSgxLCB2aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAg
IGhlbHBlci5hZGRSb290T2JqZWN0KHZlY3Rvck93bmVyKTsKKyAgICBFWFBFQ1RfRVEoOCAqIHNp
emVvZihpbnQpLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgRVhQRUNU
X0VRKDEsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKIH0KIAogVEVTVChNZW1vcnlJbnN0cnVt
ZW50YXRpb25UZXN0LCBoZWFwQWxsb2NhdGVkVmVjdG9yV2l0aElubGluZUNhcGFjaXR5KQogewot
ICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwotICAgIE1lbW9yeUluc3RydW1lbnRh
dGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7CisgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhl
bHBlciBoZWxwZXI7CiAgICAgSW5zdHJ1bWVudGVkT3duZXI8T3duUHRyPFZlY3RvcjxpbnQsIDQ+
ID4gPiB2ZWN0b3JPd25lcjsKICAgICB2ZWN0b3JPd25lci5tX3ZhbHVlID0gYWRvcHRQdHIobmV3
IFZlY3RvcjxpbnQsIDQ+KCkpOwotICAgIGltcGwuYWRkUm9vdE9iamVjdCh2ZWN0b3JPd25lcik7
Ci0gICAgRVhQRUNUX0VRKHNpemVvZihWZWN0b3I8aW50LCA0PiksIGltcGwucmVwb3J0ZWRTaXpl
Rm9yQWxsVHlwZXMoKSk7Ci0gICAgRVhQRUNUX0VRKDEsIHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7
CisgICAgaGVscGVyLmFkZFJvb3RPYmplY3QodmVjdG9yT3duZXIpOworICAgIEVYUEVDVF9FUShz
aXplb2YoVmVjdG9yPGludCwgND4pLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7
CisgICAgRVhQRUNUX0VRKDEsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKIH0KIAogVEVTVChN
ZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCBoZWFwQWxsb2NhdGVkVmVjdG9yV2l0aElubGluZUNh
cGFjaXR5UmVzaXplZCkKIHsKLSAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0czsKLSAg
ICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMpOworICAgIElu
c3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwogICAgIEluc3RydW1lbnRlZE93bmVyPE93
blB0cjxWZWN0b3I8aW50LCA0PiA+ID4gdmVjdG9yT3duZXI7CiAgICAgdmVjdG9yT3duZXIubV92
YWx1ZSA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8aW50LCA0PigpKTsKICAgICB2ZWN0b3JPd25lci5t
X3ZhbHVlLT5yZXNlcnZlQ2FwYWNpdHkoOCk7Ci0gICAgaW1wbC5hZGRSb290T2JqZWN0KHZlY3Rv
ck93bmVyKTsKLSAgICBFWFBFQ1RfRVEoOCAqIHNpemVvZihpbnQpICsgc2l6ZW9mKFZlY3Rvcjxp
bnQsIDQ+KSwgaW1wbC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICBFWFBFQ1RfRVEo
MiwgdmlzaXRlZE9iamVjdHMuc2l6ZSgpKTsKKyAgICBoZWxwZXIuYWRkUm9vdE9iamVjdCh2ZWN0
b3JPd25lcik7CisgICAgRVhQRUNUX0VRKDggKiBzaXplb2YoaW50KSArIHNpemVvZihWZWN0b3I8
aW50LCA0PiksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICBFWFBFQ1Rf
RVEoMiwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwogfQogCiBURVNUKE1lbW9yeUluc3RydW1l
bnRhdGlvblRlc3QsIHZlY3RvcldpdGhJbnN0cnVtZW50ZWRUeXBlKQogewotICAgIFZpc2l0ZWRP
YmplY3RzIHZpc2l0ZWRPYmplY3RzOwotICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwgaW1w
bCh2aXNpdGVkT2JqZWN0cyk7CisgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7
CiAKICAgICB0eXBlZGVmIFZlY3RvcjxTdHJpbmc+IFN0cmluZ1ZlY3RvcjsKICAgICBPd25QdHI8
U3RyaW5nVmVjdG9yPiB2YWx1ZSA9IGFkb3B0UHRyKG5ldyBTdHJpbmdWZWN0b3IoKSk7CkBAIC00
MzgsMTUgKzQzMCwxNCBAQCBURVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIHZlY3Rvcldp
dGhJbnN0cnVtZW50ZWRUeXBlKQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkKICAgICAgICAgdmFsdWUtPmFwcGVuZCgic3RyaW5nIik7CiAgICAgSW5zdHJ1bWVudGVkT3du
ZXI8U3RyaW5nVmVjdG9yKiA+IHJvb3QodmFsdWUuZ2V0KCkpOwotICAgIGltcGwuYWRkUm9vdE9i
amVjdChyb290KTsKLSAgICBFWFBFQ1RfRVEoc2l6ZW9mKFN0cmluZ1ZlY3RvcikgKyBzaXplb2Yo
U3RyaW5nKSAqIHZhbHVlLT5jYXBhY2l0eSgpICsgc2l6ZW9mKFN0cmluZ0ltcGwpICogdmFsdWUt
PnNpemUoKSwgaW1wbC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICBFWFBFQ1RfRVEo
Y291bnQgKyAyLCAoc2l6ZV90KXZpc2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAgaGVscGVyLmFk
ZFJvb3RPYmplY3Qocm9vdCk7CisgICAgRVhQRUNUX0VRKHNpemVvZihTdHJpbmdWZWN0b3IpICsg
c2l6ZW9mKFN0cmluZykgKiB2YWx1ZS0+Y2FwYWNpdHkoKSArIHNpemVvZihTdHJpbmdJbXBsKSAq
IHZhbHVlLT5zaXplKCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICBF
WFBFQ1RfRVEoY291bnQgKyAyLCAoc2l6ZV90KWhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKIH0K
IAogVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCBoYXNoU2V0V2l0aEluc3RydW1lbnRl
ZFR5cGUpCiB7Ci0gICAgVmlzaXRlZE9iamVjdHMgdmlzaXRlZE9iamVjdHM7Ci0gICAgTWVtb3J5
SW5zdHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0ZWRPYmplY3RzKTsKKyAgICBJbnN0cnVtZW50
YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKIAogICAgIHR5cGVkZWYgSGFzaFNldDxTdHJpbmc+IFZh
bHVlVHlwZTsKICAgICBPd25QdHI8VmFsdWVUeXBlPiB2YWx1ZSA9IGFkb3B0UHRyKG5ldyBWYWx1
ZVR5cGUoKSk7CkBAIC00NTQsMjEgKzQ0NSwyMCBAQCBURVNUKE1lbW9yeUluc3RydW1lbnRhdGlv
blRlc3QsIGhhc2hTZXRXaXRoSW5zdHJ1bWVudGVkVHlwZSkKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNvdW50OyArK2kpCiAgICAgICAgIHZhbHVlLT5hZGQoU3RyaW5nOjpudW1iZXIoaSkp
OwogICAgIEluc3RydW1lbnRlZE93bmVyPFZhbHVlVHlwZSogPiByb290KHZhbHVlLmdldCgpKTsK
LSAgICBpbXBsLmFkZFJvb3RPYmplY3Qocm9vdCk7Ci0gICAgRVhQRUNUX0VRKHNpemVvZihWYWx1
ZVR5cGUpICsgc2l6ZW9mKFN0cmluZykgKiB2YWx1ZS0+Y2FwYWNpdHkoKSArIHNpemVvZihTdHJp
bmdJbXBsKSAqIHZhbHVlLT5zaXplKCksIGltcGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7
Ci0gICAgRVhQRUNUX0VRKGNvdW50ICsgMiwgKHNpemVfdCl2aXNpdGVkT2JqZWN0cy5zaXplKCkp
OworICAgIGhlbHBlci5hZGRSb290T2JqZWN0KHJvb3QpOworICAgIEVYUEVDVF9FUShzaXplb2Yo
VmFsdWVUeXBlKSArIHNpemVvZihTdHJpbmcpICogdmFsdWUtPmNhcGFjaXR5KCkgKyBzaXplb2Yo
U3RyaW5nSW1wbCkgKiB2YWx1ZS0+c2l6ZSgpLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlw
ZXMoKSk7CisgICAgRVhQRUNUX0VRKGNvdW50ICsgMiwgKHNpemVfdCloZWxwZXIudmlzaXRlZE9i
amVjdHMoKSk7CiB9CiAKIFRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwgYXJyYXlCdWZm
ZXIpCiB7Ci0gICAgVmlzaXRlZE9iamVjdHMgdmlzaXRlZE9iamVjdHM7Ci0gICAgTWVtb3J5SW5z
dHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0ZWRPYmplY3RzKTsKKyAgICBJbnN0cnVtZW50YXRp
b25UZXN0SGVscGVyIGhlbHBlcjsKIAogICAgIHR5cGVkZWYgSW5zdHJ1bWVudGVkVGVtcGxhdGU8
UmVmUHRyPEFycmF5QnVmZmVyPiA+IFZhbHVlVHlwZTsKICAgICBWYWx1ZVR5cGUgdmFsdWUoQXJy
YXlCdWZmZXI6OmNyZWF0ZSgxMDAwLCBzaXplb2YoaW50KSkpOwotICAgIGltcGwuYWRkUm9vdE9i
amVjdCh2YWx1ZSk7Ci0gICAgRVhQRUNUX0VRKHNpemVvZihpbnQpICogMTAwMCArIHNpemVvZihB
cnJheUJ1ZmZlciksIGltcGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgRVhQRUNU
X0VRKDIsIHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAgaGVscGVyLmFkZFJvb3RPYmplY3Qo
dmFsdWUpOworICAgIEVYUEVDVF9FUShzaXplb2YoaW50KSAqIDEwMDAgKyBzaXplb2YoQXJyYXlC
dWZmZXIpLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgRVhQRUNUX0VR
KDIsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165952</attachid>
            <date>2012-09-27 01:50:29 -0700</date>
            <delta_ts>2012-09-27 02:36:08 -0700</delta_ts>
            <desc>unnecessary inspectorData argument was removed</desc>
            <filename>bug-97461-20120927124946.patch</filename>
            <type>text/plain</type>
            <size>42919</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5NzM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGRjYzAxNGJmYTFhMDI1Y2EwNDU1ZGU5
OTI1YTg1NDE2MGZjMjM1MjAuLjQxM2EwYTMxMzA5YmVmYTBiZDVlODI4YjQ0MWNjMzlkZmU3NTA0
ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTItMDktMjcgIElseWEgVGlraG9ub3Zza3kgIDxs
b2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IE5NSTogbW92ZSB2
aXNpdGVkIGFuZCBjb3VudE9iamVjdFNpemUgbWV0aG9kcyBpbXBsZW1lbnRhdGlvbiBpbnRvIHNl
cGFyYXRlIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTc0NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGVzZSBtZXRob2RzIGFuZCB0aGUgZGF0YSBjb2xsZWN0ZWQgYnkgdGhlbSBuZWVkIHRv
IGJlIHVzZWQgaW4gdGhlIGluc3RydW1lbnRhdGlvbiBjb2RlIGZvciBvdGhlciBjb21wb25lbnRz
LgorICAgICAgICBBcyBleGFtcGxlIHdoZW4gd2UgYXJlIHZpc2l0aW5nIGJpdG1hcHMgd2UgbmVl
ZCB0byB2aXNpdCBwbGF0Zm9ybSBzcGVjaWZpYyBvYmplY3RzLgorICAgICAgICBUaGVzZSBvYmpl
Y3RzIHdpbGwgYmUgaW5zdHJ1bWVudGVkIHdpdGggaGVscCBvZiBjb21wb25lbnQncyBvd24gaW5z
dHJ1bWVudGF0aW9uIGNvZGUKKyAgICAgICAgYnV0IHdlIGhhdmUgdG8ga2VlcCB0aGUgc2luZ2xl
IHNldCBvZiB2aXNpdGVkIG9iamVjdHMgYW5kIHRoZSBtYXAgb2YgY291bnRlcnMuCisKKyAgICAg
ICAgKiB3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmg6CisgICAgICAgIChNZW1vcnlJbnN0cnVt
ZW50YXRpb25DbGllbnQpOgorICAgICAgICAoV1RGOjpNZW1vcnlJbnN0cnVtZW50YXRpb25DbGll
bnQ6On5NZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnQpOgorICAgICAgICAoV1RGKToKKyAgICAg
ICAgKFdURjo6TWVtb3J5SW5zdHJ1bWVudGF0aW9uOjpNZW1vcnlJbnN0cnVtZW50YXRpb24pOgor
ICAgICAgICAoTWVtb3J5SW5zdHJ1bWVudGF0aW9uKToKKyAgICAgICAgKFdURjo6TWVtb3J5SW5z
dHJ1bWVudGF0aW9uOjpjb3VudE9iamVjdFNpemUpOgorICAgICAgICAoV1RGOjpNZW1vcnlJbnN0
cnVtZW50YXRpb246OnZpc2l0ZWQpOgorCiAyMDEyLTA5LTI2ICBDb3NtaW4gVHJ1dGEgIDxjdHJ1
dGFAcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gQWxsb3cgZGVub3JtYWwgZmxvYXRz
IGluIEFSTSBWRlAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyYjA0NGQzN2UzODUyZmZhNGI2MjNhOGMxYjczYWYx
YThiOGQ5NjYzLi45YTkwZDM5MTJiMjk0YWIwNGM4ZmZiMTAyN2JmMDFlOGQyODFlOWQ5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTItMDktMjcgIElseWEgVGlraG9ub3Zza3kgIDxs
b2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IE5NSTogbW92ZSB2
aXNpdGVkIGFuZCBjb3VudE9iamVjdFNpemUgbWV0aG9kcyBpbXBsZW1lbnRhdGlvbiBpbnRvIHNl
cGFyYXRlIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTc0NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGVzZSBtZXRob2RzIGFuZCB0aGUgZGF0YSBjb2xsZWN0ZWQgYnkgdGhlbSBuZWVkIHRv
IGJlIHVzZWQgaW4gdGhlIGluc3RydW1lbnRhdGlvbiBjb2RlIGZvciBvdGhlciBjb21wb25lbnRz
LgorICAgICAgICBBcyBleGFtcGxlIHdoZW4gd2UgYXJlIHZpc2l0aW5nIGJpdG1hcHMgd2UgbmVl
ZCB0byB2aXNpdCBwbGF0Zm9ybSBzcGVjaWZpYyBvYmplY3RzLgorICAgICAgICBUaGVzZSBvYmpl
Y3RzIHdpbGwgYmUgaW5zdHJ1bWVudGVkIHdpdGggaGVscCBvZiBjb21wb25lbnQncyBvd24gaW5z
dHJ1bWVudGF0aW9uIGNvZGUKKyAgICAgICAgYnV0IHdlIGhhdmUgdG8ga2VlcCB0aGUgc2luZ2xl
IHNldCBvZiB2aXNpdGVkIG9iamVjdHMgYW5kIHRoZSBtYXAgb2YgY291bnRlcnMuCisKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0RG9tVHJlZUluZm8pOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yTWVtb3J5QWdlbnQ6OmdldFByb2Nlc3NNZW1vcnlEaXN0cmlidXRpb24p
OgorICAgICAgICAqIGluc3BlY3Rvci9NZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudEltcGw6OmNvdW50T2Jq
ZWN0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUlu
c3RydW1lbnRhdGlvbkNsaWVudEltcGw6OnZpc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVt
b3J5SW5zdHJ1bWVudGF0aW9uSW1wbDo6c2VsZlNpemUpOgorICAgICAgICAqIGluc3BlY3Rvci9N
ZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlJbnN0
cnVtZW50YXRpb25DbGllbnRJbXBsOjpNZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnRJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudEltcGw6OnNlbGZT
aXplKToKKyAgICAgICAgKE1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudEltcGwpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50SW1wbDo6dmlzaXRlZE9iamVj
dHMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChNZW1vcnlJbnN0cnVtZW50YXRpb25J
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUluc3RydW1lbnRhdGlvbkltcGw6Ok1lbW9y
eUluc3RydW1lbnRhdGlvbkltcGwpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5SW5zdHJ1bWVu
dGF0aW9uSW1wbDo6Y2hlY2tJbnN0cnVtZW50ZWRPYmplY3RzKToKKwogMjAxMi0wOS0yNyAgS2Vp
c2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4KIAogICAgICAgICBTdWdnZXN0aW9uUGlj
a2VyIHNob3VsZCBzdXBwb3J0IHJ0bApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAzYmUx
NTQ2ZjE5MzFkMjM3NjlhMzRlY2RlNmRlNmJiNWJmYmYyYjFiLi41MzM3YzQxMzlkZjgwNmEyY2Ix
Y2IwNTE3ZmZkY2M4OWIzY2NmNTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI1IEBACisyMDEyLTA5LTI3ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBOTUk6IG1vdmUgdmlzaXRlZCBhbmQgY291
bnRPYmplY3RTaXplIG1ldGhvZHMgaW1wbGVtZW50YXRpb24gaW50byBzZXBhcmF0ZSBjbGFzcy4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3NDYxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlc2UgbWV0
aG9kcyBhbmQgdGhlIGRhdGEgY29sbGVjdGVkIGJ5IHRoZW0gbmVlZCB0byBiZSB1c2VkIGluIHRo
ZSBpbnN0cnVtZW50YXRpb24gY29kZSBmb3Igb3RoZXIgY29tcG9uZW50cy4KKyAgICAgICAgQXMg
ZXhhbXBsZSB3aGVuIHdlIGFyZSB2aXNpdGluZyBiaXRtYXBzIHdlIG5lZWQgdG8gdmlzaXQgcGxh
dGZvcm0gc3BlY2lmaWMgb2JqZWN0cy4KKyAgICAgICAgVGhlc2Ugb2JqZWN0cyB3aWxsIGJlIGlu
c3RydW1lbnRlZCB3aXRoIGhlbHAgb2YgY29tcG9uZW50J3Mgb3duIGluc3RydW1lbnRhdGlvbiBj
b2RlCisgICAgICAgIGJ1dCB3ZSBoYXZlIHRvIGtlZXAgdGhlIHNpbmdsZSBzZXQgb2YgdmlzaXRl
ZCBvYmplY3RzIGFuZCB0aGUgbWFwIG9mIGNvdW50ZXJzLgorCisgICAgICAgICogdGVzdHMvTWVt
b3J5SW5zdHJ1bWVudGF0aW9uVGVzdC5jcHA6CisgICAgICAgIChJbnN0cnVtZW50YXRpb25UZXN0
SGVscGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3RydW1lbnRhdGlvblRlc3RIZWxwZXI6Oklu
c3RydW1lbnRhdGlvblRlc3RIZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zdHJ1bWVudGF0
aW9uVGVzdEhlbHBlcjo6YWRkUm9vdE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnN0cnVt
ZW50YXRpb25UZXN0SGVscGVyOjpyZXBvcnRlZFNpemVGb3JBbGxUeXBlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyOjp2aXNpdGVkT2JqZWN0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyOjp0b3RhbFNpemUpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMi0wOS0yNyAg
S2Vpc2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4KIAogICAgICAgICBTdWdnZXN0aW9u
UGlja2VyIHNob3VsZCBzdXBwb3J0IHJ0bApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvTWVt
b3J5SW5zdHJ1bWVudGF0aW9uLmggYi9Tb3VyY2UvV1RGL3d0Zi9NZW1vcnlJbnN0cnVtZW50YXRp
b24uaAppbmRleCA1OGFiNTAwNzA3MTA4MmU5Yjc1Mjc3MmJmZGNiMGQxZDZjMjY0MTQxLi5iYzkz
MWRlNjA1NjEwZGRiMzhkZDlhM2VlZmIxYmZiZjJlYjE5YmFhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb24uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9NZW1v
cnlJbnN0cnVtZW50YXRpb24uaApAQCAtODMsOCArODMsMTYgQEAgcHJpdmF0ZToKIAogdGVtcGxh
dGU8dHlwZW5hbWUgVD4gdm9pZCByZXBvcnRNZW1vcnlVc2FnZShjb25zdCBUKiBjb25zdCYsIE1l
bW9yeU9iamVjdEluZm8qKTsKIAorY2xhc3MgTWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50IHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5NZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnQoKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgY291bnRPYmplY3RTaXplKE1lbW9yeU9iamVjdFR5cGUsIHNpemVf
dCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdGVkKGNvbnN0IHZvaWQqKSA9IDA7Cit9Owor
CiBjbGFzcyBNZW1vcnlJbnN0cnVtZW50YXRpb24gewogcHVibGljOgorICAgIE1lbW9yeUluc3Ry
dW1lbnRhdGlvbihNZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnQqIGNsaWVudCkgOiBtX2NsaWVu
dChjbGllbnQpIHsgfQogICAgIHZpcnR1YWwgfk1lbW9yeUluc3RydW1lbnRhdGlvbigpIHsgfQog
CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHZvaWQgYWRkUm9vdE9iamVjdChjb25zdCBUJiB0
KQpAQCAtMTAzLDkgKzExMSwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgfTsKIAogcHJpdmF0ZToKLSAg
ICB2aXJ0dWFsIHZvaWQgY291bnRPYmplY3RTaXplKE1lbW9yeU9iamVjdFR5cGUsIHNpemVfdCkg
PSAwOworICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudCogbV9jbGllbnQ7CisKKyAgICB2
b2lkIGNvdW50T2JqZWN0U2l6ZShNZW1vcnlPYmplY3RUeXBlIG9iamVjdFR5cGUsIHNpemVfdCBz
aXplKSB7IG1fY2xpZW50LT5jb3VudE9iamVjdFNpemUob2JqZWN0VHlwZSwgc2l6ZSk7IH0KKyAg
ICBib29sIHZpc2l0ZWQoY29uc3Qgdm9pZCogcG9pbnRlcikgeyByZXR1cm4gbV9jbGllbnQtPnZp
c2l0ZWQocG9pbnRlcik7IH0KKwogICAgIHZpcnR1YWwgdm9pZCBkZWZlckluc3RydW1lbnRlZFBv
aW50ZXIoUGFzc093blB0cjxJbnN0cnVtZW50ZWRQb2ludGVyQmFzZT4pID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgdmlzaXRlZChjb25zdCB2b2lkKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwcm9j
ZXNzRGVmZXJyZWRJbnN0cnVtZW50ZWRQb2ludGVycygpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
Y2hlY2tDb3VudGVkT2JqZWN0KGNvbnN0IHZvaWQqKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwCmluZGV4IDc5MWJiNWY2ODY2
NTIwZDM0MzAzZGFiNWY4YzQ3MDJjMWNjMmQ3YzEuLjU5MThlYjk1MjkyYzAyNWMzYmRhNWMxYjVm
N2Q3Y2I4NjEzNmZhMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JNZW1vcnlBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvck1lbW9yeUFnZW50LmNwcApAQCAtODksNiArODksOTkgQEAgc3RhdGljIGNvbnN0IGNoYXIg
ZG9tU3RvcmFnZUNhY2hlW10gPSAiRE9NU3RvcmFnZUNhY2hlIjsKIAogbmFtZXNwYWNlIHsKIAor
Y2xhc3MgTWVtb3J5VXNhZ2VTdGF0c0dlbmVyYXRvciB7CitwdWJsaWM6CisgICAgTWVtb3J5VXNh
Z2VTdGF0c0dlbmVyYXRvcihNZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnRJbXBsKiBjbGllbnQs
IE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwqIGluc3RydW1lbnRhdGlvbikgOiBtX2NsaWVudChj
bGllbnQpLCBtX2luc3RydW1lbnRhdGlvbihpbnN0cnVtZW50YXRpb24pIHsgfQorCisgICAgdm9p
ZCBkdW1wKFR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3JNZW1vcnlCbG9jaz4qIGNoaWxkcmVu
KQorICAgIHsKKyAgICAgICAgY2hpbGRyZW4tPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JNZW1vcnlD
YWNoZSgpKTsKKyAgICAgICAgY2hpbGRyZW4tPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JQYWdlKCkp
OworICAgICAgICBjaGlsZHJlbi0+YWRkSXRlbShidWlsZE9iamVjdEZvckV4dGVybmFsUmVzb3Vy
Y2VzKCkpOworCisgICAgICAgIGFkZE1lbW9yeUluc3RydW1lbnRhdGlvbkRlYnVnRGF0YShjaGls
ZHJlbik7CisgICAgfQorCitwcml2YXRlOgorICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVu
dEltcGwqIG1fY2xpZW50OworICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwqIG1faW5zdHJ1
bWVudGF0aW9uOworCisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gYnVpbGRP
YmplY3RGb3JNZW1vcnlDYWNoZSgpIGNvbnN0CisgICAgeworICAgICAgICBzaXplX3QgdG90YWxT
aXplID0gMDsKKworICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvck1l
bW9yeUJsb2NrPiA+IGNoaWxkcmVuID0gVHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvck1lbW9y
eUJsb2NrPjo6Y3JlYXRlKCk7CisgICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0Zv
cihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpNZW1vcnlDYWNoZVN0cnVjdHVy
ZXMpOworICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoY2hpbGRyZW4uZ2V0
KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6Q2FjaGVkUmVzb3VyY2VSYXcpOworICAgICAgICB0b3Rh
bFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoY2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlU
eXBlczo6Q2FjaGVkUmVzb3VyY2VDU1MpOworICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5
QmxvY2tGb3IoY2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6Q2FjaGVkUmVzb3Vy
Y2VGb250KTsKKyAgICAgICAgdG90YWxTaXplICs9IGFkZE1lbW9yeUJsb2NrRm9yKGNoaWxkcmVu
LmdldCgpLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkNhY2hlZFJlc291cmNlSW1hZ2UpOworICAgICAg
ICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoY2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVN
ZW1vcnlUeXBlczo6Q2FjaGVkUmVzb3VyY2VTY3JpcHQpOworICAgICAgICB0b3RhbFNpemUgKz0g
YWRkTWVtb3J5QmxvY2tGb3IoY2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6Q2Fj
aGVkUmVzb3VyY2VTVkcpOworICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3Io
Y2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6Q2FjaGVkUmVzb3VyY2VTaGFkZXIp
OworICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoY2hpbGRyZW4uZ2V0KCks
IFdlYkNvcmVNZW1vcnlUeXBlczo6Q2FjaGVkUmVzb3VyY2VYU0xUKTsKKworICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yTWVtb3J5QmxvY2s+IGJsb2NrID0gSW5zcGVjdG9yTWVtb3J5QmxvY2s6OmNy
ZWF0ZSgpLnNldE5hbWUoV2ViQ29yZU1lbW9yeVR5cGVzOjpNZW1vcnlDYWNoZSk7CisgICAgICAg
IGJsb2NrLT5zZXRTaXplKHRvdGFsU2l6ZSk7CisgICAgICAgIGJsb2NrLT5zZXRDaGlsZHJlbihj
aGlsZHJlbi5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm4gYmxvY2sucmVsZWFzZSgpOworICAg
IH0KKworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yTWVtb3J5QmxvY2s+IGJ1aWxkT2JqZWN0Rm9y
UGFnZSgpIGNvbnN0CisgICAgeworICAgICAgICBzaXplX3QgdG90YWxTaXplID0gMDsKKworICAg
ICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvck1lbW9yeUJsb2NrPiA+IGRv
bUNoaWxkcmVuID0gVHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvck1lbW9yeUJsb2NrPjo6Y3Jl
YXRlKCk7CisgICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0Zvcihkb21DaGlsZHJl
bi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpET00pOworICAgICAgICB0b3RhbFNpemUgKz0g
YWRkTWVtb3J5QmxvY2tGb3IoZG9tQ2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6
SW1hZ2UpOworICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoZG9tQ2hpbGRy
ZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6Q1NTKTsKKyAgICAgICAgdG90YWxTaXplICs9
IGFkZE1lbW9yeUJsb2NrRm9yKGRvbUNoaWxkcmVuLmdldCgpLCBXZWJDb3JlTWVtb3J5VHlwZXM6
OkJpbmRpbmcpOworICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoZG9tQ2hp
bGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6TG9hZGVyKTsKKworICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yTWVtb3J5QmxvY2s+IGRvbSA9IEluc3BlY3Rvck1lbW9yeUJsb2NrOjpjcmVh
dGUoKS5zZXROYW1lKFdlYkNvcmVNZW1vcnlUeXBlczo6UGFnZSk7CisgICAgICAgIGRvbS0+c2V0
U2l6ZSh0b3RhbFNpemUpOworICAgICAgICBkb20tPnNldENoaWxkcmVuKGRvbUNoaWxkcmVuLnJl
bGVhc2UoKSk7CisgICAgICAgIHJldHVybiBkb20ucmVsZWFzZSgpOworICAgIH0KKworICAgIFBh
c3NSZWZQdHI8SW5zcGVjdG9yTWVtb3J5QmxvY2s+IGJ1aWxkT2JqZWN0Rm9yRXh0ZXJuYWxSZXNv
dXJjZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgc2l6ZV90IHRvdGFsU2l6ZSA9IDA7CisKKyAg
ICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gPiBy
ZXNvdXJjZXNDaGlsZHJlbiA9IFR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3JNZW1vcnlCbG9j
az46OmNyZWF0ZSgpOworICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IocmVz
b3VyY2VzQ2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6RXh0ZXJuYWxTdHJpbmdz
KTsKKyAgICAgICAgdG90YWxTaXplICs9IGFkZE1lbW9yeUJsb2NrRm9yKHJlc291cmNlc0NoaWxk
cmVuLmdldCgpLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkV4dGVybmFsQXJyYXlzKTsKKworICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yTWVtb3J5QmxvY2s+IHJlc291cmNlcyA9IEluc3BlY3Rvck1lbW9y
eUJsb2NrOjpjcmVhdGUoKS5zZXROYW1lKFdlYkNvcmVNZW1vcnlUeXBlczo6RXh0ZXJuYWxSZXNv
dXJjZXMpOworICAgICAgICByZXNvdXJjZXMtPnNldFNpemUodG90YWxTaXplKTsKKyAgICAgICAg
cmVzb3VyY2VzLT5zZXRDaGlsZHJlbihyZXNvdXJjZXNDaGlsZHJlbi5yZWxlYXNlKCkpOworICAg
ICAgICByZXR1cm4gcmVzb3VyY2VzLnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBzaXplX3QgYWRk
TWVtb3J5QmxvY2tGb3IoVHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvck1lbW9yeUJsb2NrPiog
YXJyYXksIE1lbW9yeU9iamVjdFR5cGUgdHlwZU5hbWUpIGNvbnN0CisgICAgeworICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yTWVtb3J5QmxvY2s+IHJlc3VsdCA9IEluc3BlY3Rvck1lbW9yeUJsb2Nr
OjpjcmVhdGUoKS5zZXROYW1lKHR5cGVOYW1lKTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBtX2Ns
aWVudC0+dG90YWxTaXplKHR5cGVOYW1lKTsKKyAgICAgICAgcmVzdWx0LT5zZXRTaXplKHNpemUp
OworICAgICAgICBhcnJheS0+YWRkSXRlbShyZXN1bHQpOworICAgICAgICByZXR1cm4gc2l6ZTsK
KyAgICB9CisKKyAgICB2b2lkIGFkZE1lbW9yeUluc3RydW1lbnRhdGlvbkRlYnVnRGF0YShUeXBl
QnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+KiBjaGlsZHJlbikKKyAgICB7Cisg
ICAgICAgIGlmIChtX2luc3RydW1lbnRhdGlvbi0+Y2hlY2tJbnN0cnVtZW50ZWRPYmplY3RzKCkp
IHsKKyAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gdG90YWxJbnN0cnVt
ZW50ZWQgPSBJbnNwZWN0b3JNZW1vcnlCbG9jazo6Y3JlYXRlKCkuc2V0TmFtZSgiSW5zdHJ1bWVu
dGVkT2JqZWN0c0NvdW50Iik7CisgICAgICAgICAgICB0b3RhbEluc3RydW1lbnRlZC0+c2V0U2l6
ZShtX2NsaWVudC0+dG90YWxDb3VudGVkT2JqZWN0cygpKTsKKworICAgICAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck1lbW9yeUJsb2NrPiBpbmNvcnJlY3RseUluc3RydW1lbnRlZCA9IEluc3BlY3Rv
ck1lbW9yeUJsb2NrOjpjcmVhdGUoKS5zZXROYW1lKCJJbnN0cnVtZW50ZWRCdXROb3RBbGxvY2F0
ZWRPYmplY3RzQ291bnQiKTsKKyAgICAgICAgICAgIGluY29ycmVjdGx5SW5zdHJ1bWVudGVkLT5z
ZXRTaXplKG1faW5zdHJ1bWVudGF0aW9uLT50b3RhbE9iamVjdHNOb3RJbkFsbG9jYXRlZFNldCgp
KTsKKworICAgICAgICAgICAgY2hpbGRyZW4tPmFkZEl0ZW0odG90YWxJbnN0cnVtZW50ZWQpOwor
ICAgICAgICAgICAgY2hpbGRyZW4tPmFkZEl0ZW0oaW5jb3JyZWN0bHlJbnN0cnVtZW50ZWQpOwor
ICAgICAgICB9CisgICAgfQorfTsKKwogU3RyaW5nIG5vZGVOYW1lKE5vZGUqIG5vZGUpCiB7CiAg
ICAgaWYgKG5vZGUtPmRvY3VtZW50KCktPmlzWEhUTUxEb2N1bWVudCgpKQpAQCAtNDY1LDEwMyAr
NTU4LDE2IEBAIHB1YmxpYzoKICAgICAgICAgbV9tZW1vcnlJbnN0cnVtZW50YXRpb24uYWRkUm9v
dE9iamVjdChtZW1vcnlDYWNoZSgpKTsKICAgICB9CiAKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rv
ck1lbW9yeUJsb2NrPiBidWlsZE9iamVjdEZvck1lbW9yeUNhY2hlKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHNpemVfdCB0b3RhbFNpemUgPSAwOwotCi0gICAgICAgIFJlZlB0cjxUeXBlQnVpbGRl
cjo6QXJyYXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+ID4gY2hpbGRyZW4gPSBUeXBlQnVpbGRlcjo6
QXJyYXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+OjpjcmVhdGUoKTsKLSAgICAgICAgdG90YWxTaXpl
ICs9IGFkZE1lbW9yeUJsb2NrRm9yKGNoaWxkcmVuLmdldCgpLCBXZWJDb3JlTWVtb3J5VHlwZXM6
Ok1lbW9yeUNhY2hlU3RydWN0dXJlcyk7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlC
bG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJj
ZVJhdyk7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5n
ZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZUNTUyk7Ci0gICAgICAgIHRv
dGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9y
eVR5cGVzOjpDYWNoZWRSZXNvdXJjZUZvbnQpOwotICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVt
b3J5QmxvY2tGb3IoY2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6Q2FjaGVkUmVz
b3VyY2VJbWFnZSk7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGls
ZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZVNjcmlwdCk7Ci0g
ICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2Vi
Q29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZVNWRyk7Ci0gICAgICAgIHRvdGFsU2l6ZSAr
PSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpD
YWNoZWRSZXNvdXJjZVNoYWRlcik7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9j
a0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZVhT
TFQpOwotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gYmxvY2sgPSBJbnNw
ZWN0b3JNZW1vcnlCbG9jazo6Y3JlYXRlKCkuc2V0TmFtZShXZWJDb3JlTWVtb3J5VHlwZXM6Ok1l
bW9yeUNhY2hlKTsKLSAgICAgICAgYmxvY2stPnNldFNpemUodG90YWxTaXplKTsKLSAgICAgICAg
YmxvY2stPnNldENoaWxkcmVuKGNoaWxkcmVuLnJlbGVhc2UoKSk7Ci0gICAgICAgIHJldHVybiBi
bG9jay5yZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JNZW1vcnlC
bG9jaz4gYnVpbGRPYmplY3RGb3JQYWdlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHNpemVfdCB0
b3RhbFNpemUgPSAwOwotCi0gICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVj
dG9yTWVtb3J5QmxvY2s+ID4gZG9tQ2hpbGRyZW4gPSBUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVj
dG9yTWVtb3J5QmxvY2s+OjpjcmVhdGUoKTsKLSAgICAgICAgdG90YWxTaXplICs9IGFkZE1lbW9y
eUJsb2NrRm9yKGRvbUNoaWxkcmVuLmdldCgpLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkRPTSk7Ci0g
ICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0Zvcihkb21DaGlsZHJlbi5nZXQoKSwg
V2ViQ29yZU1lbW9yeVR5cGVzOjpJbWFnZSk7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1v
cnlCbG9ja0Zvcihkb21DaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOwot
ICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoZG9tQ2hpbGRyZW4uZ2V0KCks
IFdlYkNvcmVNZW1vcnlUeXBlczo6QmluZGluZyk7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRN
ZW1vcnlCbG9ja0Zvcihkb21DaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpMb2Fk
ZXIpOwotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gZG9tID0gSW5zcGVj
dG9yTWVtb3J5QmxvY2s6OmNyZWF0ZSgpLnNldE5hbWUoV2ViQ29yZU1lbW9yeVR5cGVzOjpQYWdl
KTsKLSAgICAgICAgZG9tLT5zZXRTaXplKHRvdGFsU2l6ZSk7Ci0gICAgICAgIGRvbS0+c2V0Q2hp
bGRyZW4oZG9tQ2hpbGRyZW4ucmVsZWFzZSgpKTsKLSAgICAgICAgcmV0dXJuIGRvbS5yZWxlYXNl
KCk7Ci0gICAgfQotCi0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gYnVpbGRP
YmplY3RGb3JFeHRlcm5hbFJlc291cmNlcygpIGNvbnN0Ci0gICAgewotICAgICAgICBzaXplX3Qg
dG90YWxTaXplID0gMDsKLQotICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PEluc3Bl
Y3Rvck1lbW9yeUJsb2NrPiA+IHJlc291cmNlc0NoaWxkcmVuID0gVHlwZUJ1aWxkZXI6OkFycmF5
PEluc3BlY3Rvck1lbW9yeUJsb2NrPjo6Y3JlYXRlKCk7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBh
ZGRNZW1vcnlCbG9ja0ZvcihyZXNvdXJjZXNDaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5
cGVzOjpFeHRlcm5hbFN0cmluZ3MpOwotICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5Qmxv
Y2tGb3IocmVzb3VyY2VzQ2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6RXh0ZXJu
YWxBcnJheXMpOwotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gcmVzb3Vy
Y2VzID0gSW5zcGVjdG9yTWVtb3J5QmxvY2s6OmNyZWF0ZSgpLnNldE5hbWUoV2ViQ29yZU1lbW9y
eVR5cGVzOjpFeHRlcm5hbFJlc291cmNlcyk7Ci0gICAgICAgIHJlc291cmNlcy0+c2V0U2l6ZSh0
b3RhbFNpemUpOwotICAgICAgICByZXNvdXJjZXMtPnNldENoaWxkcmVuKHJlc291cmNlc0NoaWxk
cmVuLnJlbGVhc2UoKSk7Ci0gICAgICAgIHJldHVybiByZXNvdXJjZXMucmVsZWFzZSgpOwotICAg
IH0KLQotICAgIHZvaWQgZHVtcFN0YXRpc3RpY3MoVHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rv
ck1lbW9yeUJsb2NrPiogY2hpbGRyZW4sIEluc3BlY3RvckRhdGFDb3VudGVyKiBpbnNwZWN0b3JE
YXRhKQotICAgIHsKLSAgICAgICAgY2hpbGRyZW4tPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JNZW1v
cnlDYWNoZSgpKTsKLSAgICAgICAgY2hpbGRyZW4tPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JQYWdl
KCkpOwotICAgICAgICBjaGlsZHJlbi0+YWRkSXRlbShidWlsZE9iamVjdEZvckV4dGVybmFsUmVz
b3VyY2VzKCkpOwotCi0gICAgICAgIGluc3BlY3RvckRhdGEtPmFkZENvbXBvbmVudChNZW1vcnlC
bG9ja05hbWU6Omluc3BlY3RvckRPTURhdGEsIG1fbWVtb3J5SW5zdHJ1bWVudGF0aW9uLnNlbGZT
aXplKCkpOwotICAgIH0KIAogcHJpdmF0ZToKLSAgICBzaXplX3QgYWRkTWVtb3J5QmxvY2tGb3Io
VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvck1lbW9yeUJsb2NrPiogYXJyYXksIE1lbW9yeU9i
amVjdFR5cGUgdHlwZU5hbWUpIGNvbnN0Ci0gICAgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
TWVtb3J5QmxvY2s+IHJlc3VsdCA9IEluc3BlY3Rvck1lbW9yeUJsb2NrOjpjcmVhdGUoKS5zZXRO
YW1lKHR5cGVOYW1lKTsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBtX21lbW9yeUluc3RydW1lbnRh
dGlvbi50b3RhbFNpemUodHlwZU5hbWUpOwotICAgICAgICByZXN1bHQtPnNldFNpemUoc2l6ZSk7
Ci0gICAgICAgIGFycmF5LT5hZGRJdGVtKHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBzaXplOwot
ICAgIH0KLQogICAgIFBhZ2UqIG1fcGFnZTsKICAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBs
JiBtX21lbW9yeUluc3RydW1lbnRhdGlvbjsKIH07CiAKIH0KIAotc3RhdGljIHZvaWQgYWRkTWVt
b3J5SW5zdHJ1bWVudGF0aW9uRGVidWdEYXRhKFR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3JN
ZW1vcnlCbG9jaz4qIGNoaWxkcmVuLCBjb25zdCBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsJiBt
ZW1vcnlJbnN0cnVtZW50YXRpb24pCitzdGF0aWMgdm9pZCBjb2xsZWN0RG9tVHJlZUluZm8oUGFn
ZSogcGFnZSwgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCYgbWVtb3J5SW5zdHJ1bWVudGF0aW9u
LCBUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+KiBjaGlsZHJlbikKIHsK
LSAgICBpZiAobWVtb3J5SW5zdHJ1bWVudGF0aW9uLmNoZWNrSW5zdHJ1bWVudGVkT2JqZWN0cygp
KSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gdG90YWxJbnN0cnVtZW50
ZWQgPSBJbnNwZWN0b3JNZW1vcnlCbG9jazo6Y3JlYXRlKCkuc2V0TmFtZSgiSW5zdHJ1bWVudGVk
T2JqZWN0c0NvdW50Iik7Ci0gICAgICAgIHRvdGFsSW5zdHJ1bWVudGVkLT5zZXRTaXplKG1lbW9y
eUluc3RydW1lbnRhdGlvbi50b3RhbENvdW50ZWRPYmplY3RzKCkpOwotCi0gICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gaW5jb3JyZWN0bHlJbnN0cnVtZW50ZWQgPSBJbnNwZWN0
b3JNZW1vcnlCbG9jazo6Y3JlYXRlKCkuc2V0TmFtZSgiSW5zdHJ1bWVudGVkQnV0Tm90QWxsb2Nh
dGVkT2JqZWN0c0NvdW50Iik7Ci0gICAgICAgIGluY29ycmVjdGx5SW5zdHJ1bWVudGVkLT5zZXRT
aXplKG1lbW9yeUluc3RydW1lbnRhdGlvbi50b3RhbE9iamVjdHNOb3RJbkFsbG9jYXRlZFNldCgp
KTsKLQotICAgICAgICBjaGlsZHJlbi0+YWRkSXRlbSh0b3RhbEluc3RydW1lbnRlZCk7Ci0gICAg
ICAgIGNoaWxkcmVuLT5hZGRJdGVtKGluY29ycmVjdGx5SW5zdHJ1bWVudGVkKTsKLSAgICB9Ci19
Ci0KLXN0YXRpYyB2b2lkIGNvbGxlY3REb21UcmVlSW5mbyhQYWdlKiBwYWdlLCBJbnNwZWN0b3JD
bGllbnQqIGluc3BlY3RvckNsaWVudCwgVmlzaXRlZE9iamVjdHMmIHZpc2l0ZWRPYmplY3RzLCBU
eXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+KiBjaGlsZHJlbiwgSW5zcGVj
dG9yRGF0YUNvdW50ZXIqIGluc3BlY3RvckRhdGEpCi17Ci0gICAgSGFzaFNldDxjb25zdCB2b2lk
Kj4gYWxsb2NhdGVkT2JqZWN0czsKLSAgICBpbnNwZWN0b3JDbGllbnQtPmdldEFsbG9jYXRlZE9i
amVjdHMoYWxsb2NhdGVkT2JqZWN0cyk7Ci0gICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCBt
ZW1vcnlJbnN0cnVtZW50YXRpb24odmlzaXRlZE9iamVjdHMsIGFsbG9jYXRlZE9iamVjdHMuaXNF
bXB0eSgpID8gMCA6ICZhbGxvY2F0ZWRPYmplY3RzKTsKLQogICAgIEV4dGVybmFsU3RyaW5nc1Jv
b3Qgc3RyaW5nc1Jvb3Q7CiAgICAgbWVtb3J5SW5zdHJ1bWVudGF0aW9uLmFkZFJvb3RPYmplY3Qo
c3RyaW5nc1Jvb3QpOwogCkBAIC01ODIsOSArNTg4LDYgQEAgc3RhdGljIHZvaWQgY29sbGVjdERv
bVRyZWVJbmZvKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQ2xpZW50LCBW
aXMKIAogICAgIGRvbVRyZWVzSXRlcmF0b3IudmlzaXRCaW5kaW5ncygpOwogICAgIGRvbVRyZWVz
SXRlcmF0b3IudmlzaXRNZW1vcnlDYWNoZSgpOwotCi0gICAgZG9tVHJlZXNJdGVyYXRvci5kdW1w
U3RhdGlzdGljcyhjaGlsZHJlbiwgaW5zcGVjdG9yRGF0YSk7Ci0gICAgYWRkTWVtb3J5SW5zdHJ1
bWVudGF0aW9uRGVidWdEYXRhKGNoaWxkcmVuLCBtZW1vcnlJbnN0cnVtZW50YXRpb24pOwogfQog
CiBzdGF0aWMgdm9pZCBhZGRQbGF0Zm9ybUNvbXBvbmVudHNJbmZvKFBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6OkFycmF5PEluc3BlY3Rvck1lbW9yeUJsb2NrPiA+IGNoaWxkcmVuKQpAQCAtNjEyLDE0
ICs2MTUsMjIgQEAgdm9pZCBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6Z2V0UHJvY2Vzc01lbW9yeURp
c3RyaWJ1dGlvbihFcnJvclN0cmluZyosIFJlZlB0cjxJbnMKICAgICBJbnNwZWN0b3JEYXRhQ291
bnRlciBpbnNwZWN0b3JEYXRhOwogICAgIGluc3BlY3RvckRhdGEuYWRkQ29tcG9uZW50KE1lbW9y
eUJsb2NrTmFtZTo6aW5zcGVjdG9ySlNIZWFwRGF0YSwgU2NyaXB0UHJvZmlsZXI6OnByb2ZpbGVy
U25hcHNob3RzU2l6ZSgpKTsKIAotICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwor
ICAgIEhhc2hTZXQ8Y29uc3Qgdm9pZCo+IGFsbG9jYXRlZE9iamVjdHM7CisgICAgbV9pbnNwZWN0
b3JDbGllbnQtPmdldEFsbG9jYXRlZE9iamVjdHMoYWxsb2NhdGVkT2JqZWN0cyk7CisgICAgTWVt
b3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50SW1wbCBtZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnQ7
CisgICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCBtZW1vcnlJbnN0cnVtZW50YXRpb24oJm1l
bW9yeUluc3RydW1lbnRhdGlvbkNsaWVudCwgJmFsbG9jYXRlZE9iamVjdHMpOworCiAgICAgUmVm
UHRyPFR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gPiBjaGlsZHJlbiA9
IFR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3JNZW1vcnlCbG9jaz46OmNyZWF0ZSgpOwogICAg
IGNoaWxkcmVuLT5hZGRJdGVtKGpzSGVhcEluZm8oKSk7CiAgICAgY2hpbGRyZW4tPmFkZEl0ZW0o
cmVuZGVyVHJlZUluZm8obV9wYWdlKSk7IC8vIEZJWE1FOiBjb2xsZWN0IGZvciBhbGwgcGFnZXM/
Ci0gICAgY29sbGVjdERvbVRyZWVJbmZvKG1fcGFnZSwgbV9pbnNwZWN0b3JDbGllbnQsIHZpc2l0
ZWRPYmplY3RzLCBjaGlsZHJlbi5nZXQoKSwgJmluc3BlY3RvckRhdGEpOyAvLyBGSVhNRTogY29s
bGVjdCBmb3IgYWxsIHBhZ2VzPworICAgIGNvbGxlY3REb21UcmVlSW5mbyhtX3BhZ2UsIG1lbW9y
eUluc3RydW1lbnRhdGlvbiwgY2hpbGRyZW4uZ2V0KCkpOyAvLyBGSVhNRTogY29sbGVjdCBmb3Ig
YWxsIHBhZ2VzPwogICAgIGNoaWxkcmVuLT5hZGRJdGVtKGluc3BlY3RvckRhdGEuZHVtcFN0YXRp
c3RpY3MoKSk7CiAgICAgY2hpbGRyZW4tPmFkZEl0ZW0oZHVtcERPTVN0b3JhZ2VDYWNoZShtX2Rv
bVN0b3JhZ2VBZ2VudC0+bWVtb3J5Qnl0ZXNVc2VkQnlTdG9yYWdlQ2FjaGUoKSkpOwogICAgIGFk
ZFBsYXRmb3JtQ29tcG9uZW50c0luZm8oY2hpbGRyZW4pOworICAgIE1lbW9yeVVzYWdlU3RhdHNH
ZW5lcmF0b3Igc3RhdHNHZW5lcmF0b3IoJm1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudCwgJm1l
bW9yeUluc3RydW1lbnRhdGlvbik7CisgICAgc3RhdHNHZW5lcmF0b3IuZHVtcChjaGlsZHJlbi5n
ZXQoKSk7CisgICAgaW5zcGVjdG9yRGF0YS5hZGRDb21wb25lbnQoTWVtb3J5QmxvY2tOYW1lOjpp
bnNwZWN0b3JET01EYXRhLCBtZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnQuc2VsZlNpemUoKSAr
IG1lbW9yeUluc3RydW1lbnRhdGlvbi5zZWxmU2l6ZSgpKTsKKyAgICBjaGlsZHJlbi0+YWRkSXRl
bShpbnNwZWN0b3JEYXRhLmR1bXBTdGF0aXN0aWNzKCkpOwogICAgIHByb2Nlc3NNZW1vcnktPnNl
dENoaWxkcmVuKGNoaWxkcmVuKTsKIAogICAgIHNpemVfdCBwcml2YXRlQnl0ZXMgPSAwOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL01lbW9yeUluc3RydW1lbnRhdGlvbklt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL01lbW9yeUluc3RydW1lbnRhdGlvbklt
cGwuY3BwCmluZGV4IDgyMmViOWYxNTYxYzhmY2Q1ZmNjNGVjZmU4Yzk1MThhYjRiZWZhMDguLjA3
YjU5ODY4MzExOWMyMzg0NTA2OTU4ZTk0Zjc2ODhjOWY3ZWFkNzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9NZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbC5jcHAKQEAg
LTM3LDEyICszNywxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLU1lbW9yeUluc3RydW1l
bnRhdGlvbkltcGw6Ok1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwoVmlzaXRlZE9iamVjdHMmIHZp
c2l0ZWRPYmplY3RzLCBjb25zdCBWaXNpdGVkT2JqZWN0cyogYWxsb2NhdGVkT2JqZWN0cykKLSAg
ICA6IG1fdmlzaXRlZE9iamVjdHModmlzaXRlZE9iamVjdHMpCi0gICAgLCBtX2FsbG9jYXRlZE9i
amVjdHMoYWxsb2NhdGVkT2JqZWN0cykKLSAgICAsIG1fdG90YWxDb3VudGVkT2JqZWN0cygwKQot
ICAgICwgbV90b3RhbE9iamVjdHNOb3RJbkFsbG9jYXRlZFNldCgwKQordm9pZCBNZW1vcnlJbnN0
cnVtZW50YXRpb25DbGllbnRJbXBsOjpjb3VudE9iamVjdFNpemUoTWVtb3J5T2JqZWN0VHlwZSBv
YmplY3RUeXBlLCBzaXplX3Qgc2l6ZSkKIHsKKyAgICBBU1NFUlQob2JqZWN0VHlwZSk7CisgICAg
VHlwZVRvU2l6ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fdG90YWxTaXplcy5hZGQob2JqZWN0
VHlwZSwgc2l6ZSk7CisgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQgKz0gc2l6ZTsKKyAgICArK21fdG90YWxDb3VudGVkT2JqZWN0czsK
K30KKworYm9vbCBNZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnRJbXBsOjp2aXNpdGVkKGNvbnN0
IHZvaWQqIG9iamVjdCkKK3sKKyAgICByZXR1cm4gIW1fdmlzaXRlZE9iamVjdHMuYWRkKG9iamVj
dCkuaXNOZXdFbnRyeTsKIH0KIAogdm9pZCBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsOjpwcm9j
ZXNzRGVmZXJyZWRJbnN0cnVtZW50ZWRQb2ludGVycygpCkBAIC01NCwyNSArNjAsMTEgQEAgdm9p
ZCBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsOjpwcm9jZXNzRGVmZXJyZWRJbnN0cnVtZW50ZWRQ
b2ludGVycygpCiAgICAgfQogfQogCi12b2lkIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGw6OmNv
dW50T2JqZWN0U2l6ZShNZW1vcnlPYmplY3RUeXBlIG9iamVjdFR5cGUsIHNpemVfdCBzaXplKQot
ewotICAgIEFTU0VSVChvYmplY3RUeXBlKTsKLSAgICBUeXBlVG9TaXplTWFwOjpBZGRSZXN1bHQg
cmVzdWx0ID0gbV90b3RhbFNpemVzLmFkZChvYmplY3RUeXBlLCBzaXplKTsKLSAgICBpZiAoIXJl
c3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCArPSBzaXpl
OwotICAgICsrbV90b3RhbENvdW50ZWRPYmplY3RzOwotfQotCiB2b2lkIE1lbW9yeUluc3RydW1l
bnRhdGlvbkltcGw6OmRlZmVySW5zdHJ1bWVudGVkUG9pbnRlcihQYXNzT3duUHRyPEluc3RydW1l
bnRlZFBvaW50ZXJCYXNlPiBwb2ludGVyKQogewogICAgIG1fZGVmZXJyZWRJbnN0cnVtZW50ZWRQ
b2ludGVycy5hcHBlbmQocG9pbnRlcik7CiB9CiAKLWJvb2wgTWVtb3J5SW5zdHJ1bWVudGF0aW9u
SW1wbDo6dmlzaXRlZChjb25zdCB2b2lkKiBvYmplY3QpCi17Ci0gICAgcmV0dXJuICFtX3Zpc2l0
ZWRPYmplY3RzLmFkZChvYmplY3QpLmlzTmV3RW50cnk7Ci19Ci0KIHZvaWQgTWVtb3J5SW5zdHJ1
bWVudGF0aW9uSW1wbDo6Y2hlY2tDb3VudGVkT2JqZWN0KGNvbnN0IHZvaWQqIG9iamVjdCkKIHsK
ICAgICBpZiAoIWNoZWNrSW5zdHJ1bWVudGVkT2JqZWN0cygpKQpAQCAtODgsNyArODAsNyBAQCB2
b2lkIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGw6OmNoZWNrQ291bnRlZE9iamVjdChjb25zdCB2
b2lkKiBvYmplY3QpCiAKIHNpemVfdCBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsOjpzZWxmU2l6
ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNhbGN1bGF0ZUNvbnRhaW5lclNpemUobV92aXNpdGVk
T2JqZWN0cykgKyBjYWxjdWxhdGVDb250YWluZXJTaXplKG1fZGVmZXJyZWRJbnN0cnVtZW50ZWRQ
b2ludGVycyk7CisgICAgcmV0dXJuIGNhbGN1bGF0ZUNvbnRhaW5lclNpemUobV9kZWZlcnJlZElu
c3RydW1lbnRlZFBvaW50ZXJzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL01lbW9yeUluc3RydW1lbnRhdGlvbkltcGwu
aCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9NZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmgK
aW5kZXggZWY5NTQ2ZDg3MzVkMTg5YWE4ZDkxOGVlNzU1NDJjOWY4YTg2MGNkOS4uNDVkYmI2Nzg3
YmUzODc5NDI4ZmE0YmU0ZDc5OTUzODkzMTBiMTA5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL01lbW9yeUluc3RydW1lbnRhdGlvbkltcGwuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbC5oCkBAIC00NCwxMSArNDQs
MTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0eXBlZGVmIEhhc2hTZXQ8Y29uc3Qgdm9pZCo+
IFZpc2l0ZWRPYmplY3RzOwogCi1jbGFzcyBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIDogcHVi
bGljIFdURjo6TWVtb3J5SW5zdHJ1bWVudGF0aW9uIHsKK2NsYXNzIE1lbW9yeUluc3RydW1lbnRh
dGlvbkNsaWVudEltcGwgOiBwdWJsaWMgV1RGOjpNZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnQg
ewogcHVibGljOgotICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwoVmlzaXRlZE9iamVjdHMm
LCBjb25zdCBWaXNpdGVkT2JqZWN0cyogYWxsb2NhdGVkT2JqZWN0cyA9IDApOworICAgIE1lbW9y
eUluc3RydW1lbnRhdGlvbkNsaWVudEltcGwoKSA6IG1fdG90YWxDb3VudGVkT2JqZWN0cygwKSB7
IH0KIAotICAgIHNpemVfdCBzZWxmU2l6ZSgpIGNvbnN0OwogICAgIHNpemVfdCB0b3RhbFNpemUo
TWVtb3J5T2JqZWN0VHlwZSBvYmplY3RUeXBlKSBjb25zdAogICAgIHsKICAgICAgICAgVHlwZVRv
U2l6ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaSA9IG1fdG90YWxTaXplcy5maW5kKG9iamVjdFR5cGUp
OwpAQCAtNjMsMjMgKzYyLDQ1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHNpemU7CiAgICAg
fQogCi0gICAgYm9vbCBjaGVja0luc3RydW1lbnRlZE9iamVjdHMoKSBjb25zdCB7IHJldHVybiBt
X2FsbG9jYXRlZE9iamVjdHM7IH0KKyAgICBzaXplX3Qgc2VsZlNpemUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fdmlzaXRlZE9iamVjdHMuY2FwYWNpdHkoKSAqIHNpemVvZihWaXNp
dGVkT2JqZWN0czo6VmFsdWVUeXBlKSArCisgICAgICAgICAgICBtX3RvdGFsU2l6ZXMuY2FwYWNp
dHkoKSAqIHNpemVvZihUeXBlVG9TaXplTWFwOjpWYWx1ZVR5cGUpOworICAgIH0KKworICAgIHNp
emVfdCB2aXNpdGVkT2JqZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaXRlZE9iamVjdHMuc2l6
ZSgpOyB9CiAgICAgc2l6ZV90IHRvdGFsQ291bnRlZE9iamVjdHMoKSBjb25zdCB7IHJldHVybiBt
X3RvdGFsQ291bnRlZE9iamVjdHM7IH0KKworICAgIHZpcnR1YWwgdm9pZCBjb3VudE9iamVjdFNp
emUoTWVtb3J5T2JqZWN0VHlwZSwgc2l6ZV90KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wg
dmlzaXRlZChjb25zdCB2b2lkKikgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBI
YXNoTWFwPE1lbW9yeU9iamVjdFR5cGUsIHNpemVfdD4gVHlwZVRvU2l6ZU1hcDsKKyAgICBUeXBl
VG9TaXplTWFwIG1fdG90YWxTaXplczsKKyAgICBWaXNpdGVkT2JqZWN0cyBtX3Zpc2l0ZWRPYmpl
Y3RzOworICAgIHNpemVfdCBtX3RvdGFsQ291bnRlZE9iamVjdHM7Cit9OworCitjbGFzcyBNZW1v
cnlJbnN0cnVtZW50YXRpb25JbXBsIDogcHVibGljIFdURjo6TWVtb3J5SW5zdHJ1bWVudGF0aW9u
IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsKFdURjo6
TWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50KiBjbGllbnQsIGNvbnN0IFZpc2l0ZWRPYmplY3Rz
KiBhbGxvY2F0ZWRPYmplY3RzID0gMCkKKyAgICAgICAgOiBNZW1vcnlJbnN0cnVtZW50YXRpb24o
Y2xpZW50KQorICAgICAgICAsIG1fYWxsb2NhdGVkT2JqZWN0cyhhbGxvY2F0ZWRPYmplY3RzKQor
ICAgICAgICAsIG1fdG90YWxPYmplY3RzTm90SW5BbGxvY2F0ZWRTZXQoMCkKKyAgICB7CisgICAg
fQorCisgICAgc2l6ZV90IHNlbGZTaXplKCkgY29uc3Q7CisgICAgYm9vbCBjaGVja0luc3RydW1l
bnRlZE9iamVjdHMoKSBjb25zdCB7IHJldHVybiBtX2FsbG9jYXRlZE9iamVjdHM7IH0KICAgICBz
aXplX3QgdG90YWxPYmplY3RzTm90SW5BbGxvY2F0ZWRTZXQoKSBjb25zdCB7IHJldHVybiBtX3Rv
dGFsT2JqZWN0c05vdEluQWxsb2NhdGVkU2V0OyB9CiAKIHByaXZhdGU6Ci0gICAgdmlydHVhbCB2
b2lkIGNvdW50T2JqZWN0U2l6ZShNZW1vcnlPYmplY3RUeXBlLCBzaXplX3QpIE9WRVJSSURFOwog
ICAgIHZpcnR1YWwgdm9pZCBkZWZlckluc3RydW1lbnRlZFBvaW50ZXIoUGFzc093blB0cjxJbnN0
cnVtZW50ZWRQb2ludGVyQmFzZT4pIE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCB2aXNpdGVk
KGNvbnN0IHZvaWQqKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc0RlZmVycmVk
SW5zdHJ1bWVudGVkUG9pbnRlcnMoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tD
b3VudGVkT2JqZWN0KGNvbnN0IHZvaWQqKSBPVkVSUklERTsKIAotICAgIHR5cGVkZWYgSGFzaE1h
cDxNZW1vcnlPYmplY3RUeXBlLCBzaXplX3Q+IFR5cGVUb1NpemVNYXA7Ci0gICAgVHlwZVRvU2l6
ZU1hcCBtX3RvdGFsU2l6ZXM7Ci0gICAgVmlzaXRlZE9iamVjdHMmIG1fdmlzaXRlZE9iamVjdHM7
CiAgICAgVmVjdG9yPE93blB0cjxJbnN0cnVtZW50ZWRQb2ludGVyQmFzZT4gPiBtX2RlZmVycmVk
SW5zdHJ1bWVudGVkUG9pbnRlcnM7CiAgICAgY29uc3QgVmlzaXRlZE9iamVjdHMqIG1fYWxsb2Nh
dGVkT2JqZWN0czsKLSAgICBzaXplX3QgbV90b3RhbENvdW50ZWRPYmplY3RzOwogICAgIHNpemVf
dCBtX3RvdGFsT2JqZWN0c05vdEluQWxsb2NhdGVkU2V0OwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9NZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdC5j
cHAKaW5kZXggNGU4YjQ5ODU5NTc1MGRhYjFjYjNkYTQ4ZTc0YTE3MTFmNGMwYjZjZS4uMmY0MDE3
ZWUyNTJhMWFlMTQ4ZjdiMGEwZjNmNDFjODk5ZjZmOWRlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9NZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01lbW9yeUluc3RydW1lbnRhdGlvblRlc3QuY3Bw
CkBAIC01Myw2ICs1MywyMSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNl
IHsKIAorY2xhc3MgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciB7CitwdWJsaWM6CisgICAgSW5z
dHJ1bWVudGF0aW9uVGVzdEhlbHBlcigpIDogbV9jbGllbnQoKSwgbV9pbnN0cnVtZW50YXRpb24o
Jm1fY2xpZW50KSB7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBhZGRS
b290T2JqZWN0KGNvbnN0IFQmIHQpIHsgbV9pbnN0cnVtZW50YXRpb24uYWRkUm9vdE9iamVjdCh0
KTsgfQorICAgIHNpemVfdCByZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpIGNvbnN0IHsgcmV0dXJu
IG1fY2xpZW50LnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCk7IH0KKyAgICBpbnQgdmlzaXRlZE9i
amVjdHMoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudC52aXNpdGVkT2JqZWN0cygpOyB9CisgICAg
c2l6ZV90IHRvdGFsU2l6ZShNZW1vcnlPYmplY3RUeXBlIG9iamVjdFR5cGUpIGNvbnN0IHsgcmV0
dXJuIG1fY2xpZW50LnRvdGFsU2l6ZShvYmplY3RUeXBlKTsgfQorCitwcml2YXRlOgorICAgIE1l
bW9yeUluc3RydW1lbnRhdGlvbkNsaWVudEltcGwgbV9jbGllbnQ7CisgICAgTWVtb3J5SW5zdHJ1
bWVudGF0aW9uSW1wbCBtX2luc3RydW1lbnRhdGlvbjsKK307CisKIGNsYXNzIE5vdEluc3RydW1l
bnRlZCB7CiBwdWJsaWM6CiAgICAgTm90SW5zdHJ1bWVudGVkKGNvbnN0IGNoYXIqID0gMCkgeyB9
CkBAIC03NCw1MiArODksNDcgQEAgcHVibGljOgogCiBURVNUKE1lbW9yeUluc3RydW1lbnRhdGlv
blRlc3QsIHNpemVPZikKIHsKLSAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0czsKLSAg
ICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMpOworICAgIElu
c3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwogICAgIEluc3RydW1lbnRlZCBpbnN0cnVt
ZW50ZWQ7Ci0gICAgaW1wbC5hZGRSb290T2JqZWN0KGluc3RydW1lbnRlZCk7Ci0gICAgRVhQRUNU
X0VRKHNpemVvZihOb3RJbnN0cnVtZW50ZWQpLCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVz
KCkpOwotICAgIEVYUEVDVF9FUSgxLCB2aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAgIGhlbHBl
ci5hZGRSb290T2JqZWN0KGluc3RydW1lbnRlZCk7CisgICAgRVhQRUNUX0VRKHNpemVvZihOb3RJ
bnN0cnVtZW50ZWQpLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgRVhQ
RUNUX0VRKDEsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKIH0KIAogVEVTVChNZW1vcnlJbnN0
cnVtZW50YXRpb25UZXN0LCBudWxsQ2hlY2spCiB7Ci0gICAgVmlzaXRlZE9iamVjdHMgdmlzaXRl
ZE9iamVjdHM7Ci0gICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0ZWRPYmpl
Y3RzKTsKKyAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKICAgICBJbnN0cnVt
ZW50ZWQqIGluc3RydW1lbnRlZCA9IDA7Ci0gICAgaW1wbC5hZGRSb290T2JqZWN0KGluc3RydW1l
bnRlZCk7Ci0gICAgRVhQRUNUX0VRKDB1LCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkp
OwotICAgIEVYUEVDVF9FUSgwLCB2aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAgIGhlbHBlci5h
ZGRSb290T2JqZWN0KGluc3RydW1lbnRlZCk7CisgICAgRVhQRUNUX0VRKDB1LCBoZWxwZXIucmVw
b3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgRVhQRUNUX0VRKDAsIGhlbHBlci52aXNpdGVk
T2JqZWN0cygpKTsKIH0KIAogVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCBwdHJWc1Jl
ZikKIHsKICAgICB7Ci0gICAgICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwotICAg
ICAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMpOworICAg
ICAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKICAgICAgICAgSW5zdHJ1bWVu
dGVkIGluc3RydW1lbnRlZDsKLSAgICAgICAgaW1wbC5hZGRSb290T2JqZWN0KCZpbnN0cnVtZW50
ZWQpOwotICAgICAgICBFWFBFQ1RfRVEoc2l6ZW9mKEluc3RydW1lbnRlZCkgKyBzaXplb2YoTm90
SW5zdHJ1bWVudGVkKSwgaW1wbC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICAgICAg
RVhQRUNUX0VRKDIsIHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAgICAgIGhlbHBlci5hZGRS
b290T2JqZWN0KCZpbnN0cnVtZW50ZWQpOworICAgICAgICBFWFBFQ1RfRVEoc2l6ZW9mKEluc3Ry
dW1lbnRlZCkgKyBzaXplb2YoTm90SW5zdHJ1bWVudGVkKSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZv
ckFsbFR5cGVzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMiwgaGVscGVyLnZpc2l0ZWRPYmplY3Rz
KCkpOwogICAgIH0KICAgICB7Ci0gICAgICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3Rz
OwotICAgICAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMp
OworICAgICAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKICAgICAgICAgSW5z
dHJ1bWVudGVkIGluc3RydW1lbnRlZDsKLSAgICAgICAgaW1wbC5hZGRSb290T2JqZWN0KGluc3Ry
dW1lbnRlZCk7Ci0gICAgICAgIEVYUEVDVF9FUShzaXplb2YoTm90SW5zdHJ1bWVudGVkKSwgaW1w
bC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICAgICAgRVhQRUNUX0VRKDEsIHZpc2l0
ZWRPYmplY3RzLnNpemUoKSk7CisgICAgICAgIGhlbHBlci5hZGRSb290T2JqZWN0KGluc3RydW1l
bnRlZCk7CisgICAgICAgIEVYUEVDVF9FUShzaXplb2YoTm90SW5zdHJ1bWVudGVkKSwgaGVscGVy
LnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMSwgaGVscGVy
LnZpc2l0ZWRPYmplY3RzKCkpOwogICAgIH0KIH0KIAogVEVTVChNZW1vcnlJbnN0cnVtZW50YXRp
b25UZXN0LCBvd25QdHIpCiB7Ci0gICAgVmlzaXRlZE9iamVjdHMgdmlzaXRlZE9iamVjdHM7Ci0g
ICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0ZWRPYmplY3RzKTsKKyAgICBJ
bnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKICAgICBPd25QdHI8SW5zdHJ1bWVudGVk
PiBpbnN0cnVtZW50ZWQoYWRvcHRQdHIobmV3IEluc3RydW1lbnRlZCkpOwotICAgIGltcGwuYWRk
Um9vdE9iamVjdChpbnN0cnVtZW50ZWQpOwotICAgIEVYUEVDVF9FUShzaXplb2YoSW5zdHJ1bWVu
dGVkKSArIHNpemVvZihOb3RJbnN0cnVtZW50ZWQpLCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5
cGVzKCkpOwotICAgIEVYUEVDVF9FUSgyLCB2aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAgIGhl
bHBlci5hZGRSb290T2JqZWN0KGluc3RydW1lbnRlZCk7CisgICAgRVhQRUNUX0VRKHNpemVvZihJ
bnN0cnVtZW50ZWQpICsgc2l6ZW9mKE5vdEluc3RydW1lbnRlZCksIGhlbHBlci5yZXBvcnRlZFNp
emVGb3JBbGxUeXBlcygpKTsKKyAgICBFWFBFQ1RfRVEoMiwgaGVscGVyLnZpc2l0ZWRPYmplY3Rz
KCkpOwogfQogCiBjbGFzcyBJbnN0cnVtZW50ZWRSZWZQdHIgOiBwdWJsaWMgUmVmQ291bnRlZDxJ
bnN0cnVtZW50ZWRSZWZQdHI+IHsKQEAgLTEzOCwyMyArMTQ4LDIxIEBAIHB1YmxpYzoKIAogVEVT
VChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCBkYXRhUmVmKQogewotICAgIFZpc2l0ZWRPYmpl
Y3RzIHZpc2l0ZWRPYmplY3RzOwotICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwgaW1wbCh2
aXNpdGVkT2JqZWN0cyk7CisgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CiAg
ICAgRGF0YVJlZjxJbnN0cnVtZW50ZWRSZWZQdHI+IGluc3RydW1lbnRlZFJlZlB0cjsKICAgICBp
bnN0cnVtZW50ZWRSZWZQdHIuaW5pdCgpOwotICAgIGltcGwuYWRkUm9vdE9iamVjdChpbnN0cnVt
ZW50ZWRSZWZQdHIpOwotICAgIEVYUEVDVF9FUShzaXplb2YoSW5zdHJ1bWVudGVkUmVmUHRyKSAr
IHNpemVvZihOb3RJbnN0cnVtZW50ZWQpLCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkp
OwotICAgIEVYUEVDVF9FUSgyLCB2aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAgIGhlbHBlci5h
ZGRSb290T2JqZWN0KGluc3RydW1lbnRlZFJlZlB0cik7CisgICAgRVhQRUNUX0VRKHNpemVvZihJ
bnN0cnVtZW50ZWRSZWZQdHIpICsgc2l6ZW9mKE5vdEluc3RydW1lbnRlZCksIGhlbHBlci5yZXBv
cnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICBFWFBFQ1RfRVEoMiwgaGVscGVyLnZpc2l0ZWRP
YmplY3RzKCkpOwogfQogCiBURVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIHJlZlB0cikK
IHsKLSAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0czsKLSAgICBNZW1vcnlJbnN0cnVt
ZW50YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMpOworICAgIEluc3RydW1lbnRhdGlvblRl
c3RIZWxwZXIgaGVscGVyOwogICAgIFJlZlB0cjxJbnN0cnVtZW50ZWRSZWZQdHI+IGluc3RydW1l
bnRlZFJlZlB0cihhZG9wdFJlZihuZXcgSW5zdHJ1bWVudGVkUmVmUHRyKSk7Ci0gICAgaW1wbC5h
ZGRSb290T2JqZWN0KGluc3RydW1lbnRlZFJlZlB0cik7Ci0gICAgRVhQRUNUX0VRKHNpemVvZihJ
bnN0cnVtZW50ZWRSZWZQdHIpICsgc2l6ZW9mKE5vdEluc3RydW1lbnRlZCksIGltcGwucmVwb3J0
ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgRVhQRUNUX0VRKDIsIHZpc2l0ZWRPYmplY3RzLnNp
emUoKSk7CisgICAgaGVscGVyLmFkZFJvb3RPYmplY3QoaW5zdHJ1bWVudGVkUmVmUHRyKTsKKyAg
ICBFWFBFQ1RfRVEoc2l6ZW9mKEluc3RydW1lbnRlZFJlZlB0cikgKyBzaXplb2YoTm90SW5zdHJ1
bWVudGVkKSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgIEVYUEVDVF9F
USgyLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7CiB9CiAKIGNsYXNzIEluc3RydW1lbnRlZFdp
dGhPd25QdHIgOiBwdWJsaWMgSW5zdHJ1bWVudGVkIHsKQEAgLTE3MiwxMiArMTgwLDExIEBAIHB1
YmxpYzoKIAogVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCBvd25QdHJOb3RJbnN0cnVt
ZW50ZWQpCiB7Ci0gICAgVmlzaXRlZE9iamVjdHMgdmlzaXRlZE9iamVjdHM7Ci0gICAgTWVtb3J5
SW5zdHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0ZWRPYmplY3RzKTsKKyAgICBJbnN0cnVtZW50
YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKICAgICBJbnN0cnVtZW50ZWRXaXRoT3duUHRyIGluc3Ry
dW1lbnRlZFdpdGhPd25QdHI7Ci0gICAgaW1wbC5hZGRSb290T2JqZWN0KGluc3RydW1lbnRlZFdp
dGhPd25QdHIpOwotICAgIEVYUEVDVF9FUSgyICogc2l6ZW9mKE5vdEluc3RydW1lbnRlZCksIGlt
cGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgRVhQRUNUX0VRKDIsIHZpc2l0ZWRP
YmplY3RzLnNpemUoKSk7CisgICAgaGVscGVyLmFkZFJvb3RPYmplY3QoaW5zdHJ1bWVudGVkV2l0
aE93blB0cik7CisgICAgRVhQRUNUX0VRKDIgKiBzaXplb2YoTm90SW5zdHJ1bWVudGVkKSwgaGVs
cGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBoZWxwZXIu
dmlzaXRlZE9iamVjdHMoKSk7CiB9CiAKIGNsYXNzIEluc3RydW1lbnRlZFVuZGVmaW5lZCB7CkBA
IC0yMDUsMTMgKzIxMiwxMiBAQCBwdWJsaWM6CiAKIFRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9u
VGVzdCwgb3duZXJUeXBlUHJvcGFnYXRpb24pCiB7Ci0gICAgVmlzaXRlZE9iamVjdHMgdmlzaXRl
ZE9iamVjdHM7Ci0gICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0ZWRPYmpl
Y3RzKTsKKyAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKICAgICBPd25QdHI8
SW5zdHJ1bWVudGVkRE9NPiBpbnN0cnVtZW50ZWRET00oYWRvcHRQdHIobmV3IEluc3RydW1lbnRl
ZERPTSkpOwotICAgIGltcGwuYWRkUm9vdE9iamVjdChpbnN0cnVtZW50ZWRET00pOwotICAgIEVY
UEVDVF9FUShzaXplb2YoSW5zdHJ1bWVudGVkRE9NKSArIHNpemVvZihJbnN0cnVtZW50ZWRVbmRl
ZmluZWQpLCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgIEVYUEVDVF9FUShz
aXplb2YoSW5zdHJ1bWVudGVkRE9NKSArIHNpemVvZihJbnN0cnVtZW50ZWRVbmRlZmluZWQpLCBp
bXBsLnRvdGFsU2l6ZShXZWJDb3JlTWVtb3J5VHlwZXM6OkRPTSkpOwotICAgIEVYUEVDVF9FUSgy
LCB2aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAgIGhlbHBlci5hZGRSb290T2JqZWN0KGluc3Ry
dW1lbnRlZERPTSk7CisgICAgRVhQRUNUX0VRKHNpemVvZihJbnN0cnVtZW50ZWRET00pICsgc2l6
ZW9mKEluc3RydW1lbnRlZFVuZGVmaW5lZCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBl
cygpKTsKKyAgICBFWFBFQ1RfRVEoc2l6ZW9mKEluc3RydW1lbnRlZERPTSkgKyBzaXplb2YoSW5z
dHJ1bWVudGVkVW5kZWZpbmVkKSwgaGVscGVyLnRvdGFsU2l6ZShXZWJDb3JlTWVtb3J5VHlwZXM6
OkRPTSkpOworICAgIEVYUEVDVF9FUSgyLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7CiB9CiAK
IGNsYXNzIE5vblZpcnR1YWxJbnN0cnVtZW50ZWQgewpAQCAtMjI3LDEyICsyMzMsMTEgQEAgcHVi
bGljOgogCiBURVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIHZpc2l0Rmlyc3RNZW1iZXJJ
bk5vblZpcnR1YWxDbGFzcykKIHsKLSAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0czsK
LSAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMpOworICAg
IEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwogICAgIE5vblZpcnR1YWxJbnN0cnVt
ZW50ZWQgbm9uVmlydHVhbEluc3RydW1lbnRlZDsKLSAgICBpbXBsLmFkZFJvb3RPYmplY3QoJm5v
blZpcnR1YWxJbnN0cnVtZW50ZWQpOwotICAgIEVYUEVDVF9FUShzaXplb2YoTm9uVmlydHVhbElu
c3RydW1lbnRlZCkgKyBzaXplb2YoTm90SW5zdHJ1bWVudGVkKSwgaW1wbC5yZXBvcnRlZFNpemVG
b3JBbGxUeXBlcygpKTsKLSAgICBFWFBFQ1RfRVEoMiwgdmlzaXRlZE9iamVjdHMuc2l6ZSgpKTsK
KyAgICBoZWxwZXIuYWRkUm9vdE9iamVjdCgmbm9uVmlydHVhbEluc3RydW1lbnRlZCk7CisgICAg
RVhQRUNUX0VRKHNpemVvZihOb25WaXJ0dWFsSW5zdHJ1bWVudGVkKSArIHNpemVvZihOb3RJbnN0
cnVtZW50ZWQpLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgRVhQRUNU
X0VRKDIsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
VD4KQEAgLTI1MywzMiArMjU4LDI5IEBAIHB1YmxpYzoKIFRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0
aW9uVGVzdCwgdmlzaXRTdHJpbmdzKQogewogICAgIHsKLSAgICAgICAgVmlzaXRlZE9iamVjdHMg
dmlzaXRlZE9iamVjdHM7Ci0gICAgICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwgaW1wbCh2
aXNpdGVkT2JqZWN0cyk7CisgICAgICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVy
OwogICAgICAgICBJbnN0cnVtZW50ZWRPd25lcjxTdHJpbmc+IHN0cmluZ0luc3RydW1lbnRlZE93
bmVyKCJTdHJpbmciKTsKICAgICAgICAgc3RyaW5nSW5zdHJ1bWVudGVkT3duZXIubV92YWx1ZS5j
aGFyYWN0ZXJzKCk7IC8vIEZvcmNlIDE2Yml0IHNoYWRvdyBjcmVhdGlvbi4KLSAgICAgICAgaW1w
bC5hZGRSb290T2JqZWN0KHN0cmluZ0luc3RydW1lbnRlZE93bmVyKTsKLSAgICAgICAgRVhQRUNU
X0VRKHNpemVvZihTdHJpbmdJbXBsKSArIHN0cmluZ0luc3RydW1lbnRlZE93bmVyLm1fdmFsdWUu
bGVuZ3RoKCkgKiAyLCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgICAgICBF
WFBFQ1RfRVEoMiwgdmlzaXRlZE9iamVjdHMuc2l6ZSgpKTsKKyAgICAgICAgaGVscGVyLmFkZFJv
b3RPYmplY3Qoc3RyaW5nSW5zdHJ1bWVudGVkT3duZXIpOworICAgICAgICBFWFBFQ1RfRVEoc2l6
ZW9mKFN0cmluZ0ltcGwpICsgc3RyaW5nSW5zdHJ1bWVudGVkT3duZXIubV92YWx1ZS5sZW5ndGgo
KSAqIDIsIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICAgICAgRVhQRUNU
X0VRKDIsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKICAgICB9CiAKICAgICB7Ci0gICAgICAg
IFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwotICAgICAgICBNZW1vcnlJbnN0cnVtZW50
YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMpOworICAgICAgICBJbnN0cnVtZW50YXRpb25U
ZXN0SGVscGVyIGhlbHBlcjsKICAgICAgICAgSW5zdHJ1bWVudGVkT3duZXI8QXRvbWljU3RyaW5n
PiBhdG9taWNTdHJpbmdJbnN0cnVtZW50ZWRPd25lcigiQXRvbWljU3RyaW5nIik7CiAgICAgICAg
IGF0b21pY1N0cmluZ0luc3RydW1lbnRlZE93bmVyLm1fdmFsdWUuc3RyaW5nKCkuY2hhcmFjdGVy
cygpOyAvLyBGb3JjZSAxNmJpdCBzaGFkb3cgY3JlYXRpb24uCi0gICAgICAgIGltcGwuYWRkUm9v
dE9iamVjdChhdG9taWNTdHJpbmdJbnN0cnVtZW50ZWRPd25lcik7Ci0gICAgICAgIEVYUEVDVF9F
UShzaXplb2YoU3RyaW5nSW1wbCkgKyBhdG9taWNTdHJpbmdJbnN0cnVtZW50ZWRPd25lci5tX3Zh
bHVlLmxlbmd0aCgpICogMiwgaW1wbC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICAg
ICAgRVhQRUNUX0VRKDIsIHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAgICAgIGhlbHBlci5h
ZGRSb290T2JqZWN0KGF0b21pY1N0cmluZ0luc3RydW1lbnRlZE93bmVyKTsKKyAgICAgICAgRVhQ
RUNUX0VRKHNpemVvZihTdHJpbmdJbXBsKSArIGF0b21pY1N0cmluZ0luc3RydW1lbnRlZE93bmVy
Lm1fdmFsdWUubGVuZ3RoKCkgKiAyLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7
CisgICAgICAgIEVYUEVDVF9FUSgyLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7CiAgICAgfQog
CiAgICAgewotICAgICAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0czsKLSAgICAgICAg
TWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0ZWRPYmplY3RzKTsKKyAgICAgICAg
SW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CiAgICAgICAgIEluc3RydW1lbnRlZE93
bmVyPENTdHJpbmc+IGNTdHJpbmdJbnN0cnVtZW50ZWRPd25lcigiQ1N0cmluZyIpOwotICAgICAg
ICBpbXBsLmFkZFJvb3RPYmplY3QoY1N0cmluZ0luc3RydW1lbnRlZE93bmVyKTsKLSAgICAgICAg
RVhQRUNUX0VRKHNpemVvZihXVEY6OkNTdHJpbmdCdWZmZXIpICsgY1N0cmluZ0luc3RydW1lbnRl
ZE93bmVyLm1fdmFsdWUubGVuZ3RoKCksIGltcGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7
Ci0gICAgICAgIEVYUEVDVF9FUSgxLCB2aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAgICAgICBo
ZWxwZXIuYWRkUm9vdE9iamVjdChjU3RyaW5nSW5zdHJ1bWVudGVkT3duZXIpOworICAgICAgICBF
WFBFQ1RfRVEoc2l6ZW9mKFdURjo6Q1N0cmluZ0J1ZmZlcikgKyBjU3RyaW5nSW5zdHJ1bWVudGVk
T3duZXIubV92YWx1ZS5sZW5ndGgoKSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkp
OworICAgICAgICBFWFBFQ1RfRVEoMSwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwogICAgIH0K
IH0KIApAQCAtMjk4LDEzICszMDAsMTIgQEAgcHVibGljOgogCiBURVNUKE1lbW9yeUluc3RydW1l
bnRhdGlvblRlc3QsIHJlZlB0clB0cikKIHsKKyAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVy
IGhlbHBlcjsKICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVmUHRyOwogICAgIFR3b1BvaW50ZXJz
VG9SZWZQdHIgcm9vdChyZWZQdHIpOwotICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3Rz
OwotICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7Ci0g
ICAgaW1wbC5hZGRSb290T2JqZWN0KHJvb3QpOwotICAgIEVYUEVDVF9FUShzaXplb2YoUmVmUHRy
PFN0cmluZ0ltcGw+KSwgaW1wbC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICBFWFBF
Q1RfRVEoMSwgdmlzaXRlZE9iamVjdHMuc2l6ZSgpKTsKKyAgICBoZWxwZXIuYWRkUm9vdE9iamVj
dChyb290KTsKKyAgICBFWFBFQ1RfRVEoc2l6ZW9mKFJlZlB0cjxTdHJpbmdJbXBsPiksIGhlbHBl
ci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgaGVscGVyLnZp
c2l0ZWRPYmplY3RzKCkpOwogfQogCiBjbGFzcyBUd29Qb2ludGVyc1RvT3duUHRyIHsKQEAgLTMy
MywxMyArMzI0LDEyIEBAIHB1YmxpYzoKIAogVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0
LCBvd25QdHJQdHIpCiB7CisgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CiAg
ICAgT3duUHRyPE5vdEluc3RydW1lbnRlZD4gb3duUHRyOwogICAgIFR3b1BvaW50ZXJzVG9Pd25Q
dHIgcm9vdChvd25QdHIpOwotICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwotICAg
IE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7Ci0gICAgaW1w
bC5hZGRSb290T2JqZWN0KHJvb3QpOwotICAgIEVYUEVDVF9FUShzaXplb2YoT3duUHRyPE5vdElu
c3RydW1lbnRlZD4pLCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgIEVYUEVD
VF9FUSgxLCB2aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAgIGhlbHBlci5hZGRSb290T2JqZWN0
KHJvb3QpOworICAgIEVYUEVDVF9FUShzaXplb2YoT3duUHRyPE5vdEluc3RydW1lbnRlZD4pLCBo
ZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIGhlbHBl
ci52aXNpdGVkT2JqZWN0cygpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTM1MSw4
NiArMzUxLDc4IEBAIHB1YmxpYzoKIFRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwgZGV0
ZWN0UmVwb3J0TWVtb3J5VXNhZ2VNZXRob2QpCiB7CiAgICAgewotICAgICAgICBWaXNpdGVkT2Jq
ZWN0cyB2aXNpdGVkT2JqZWN0czsKLSAgICAgICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCBp
bXBsKHZpc2l0ZWRPYmplY3RzKTsKKyAgICAgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBo
ZWxwZXI7CiAKICAgICAgICAgT3duUHRyPEluc3RydW1lbnRlZFRlbXBsYXRlPFN0cmluZz4gPiB2
YWx1ZSA9IGFkb3B0UHRyKG5ldyBJbnN0cnVtZW50ZWRUZW1wbGF0ZTxTdHJpbmc+KCIiKSk7CiAg
ICAgICAgIEluc3RydW1lbnRlZE93bmVyPEluc3RydW1lbnRlZFRlbXBsYXRlPFN0cmluZz4qID4g
cm9vdCh2YWx1ZS5nZXQoKSk7Ci0gICAgICAgIGltcGwuYWRkUm9vdE9iamVjdChyb290KTsKLSAg
ICAgICAgRVhQRUNUX0VRKHNpemVvZihJbnN0cnVtZW50ZWRUZW1wbGF0ZTxTdHJpbmc+KSArIHNp
emVvZihTdHJpbmdJbXBsKSwgaW1wbC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICAg
ICAgaGVscGVyLmFkZFJvb3RPYmplY3Qocm9vdCk7CisgICAgICAgIEVYUEVDVF9FUShzaXplb2Yo
SW5zdHJ1bWVudGVkVGVtcGxhdGU8U3RyaW5nPikgKyBzaXplb2YoU3RyaW5nSW1wbCksIGhlbHBl
ci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKICAgICAgICAgLy8gRklYTUU6IGl0IGlzIGZh
aWxpbmcgb24gQ2hyb21pdW0gQ2FuYXJ5IGJvdHMgYnV0IHdvcmtzIGZpbmUgbG9jYWxseS4KLSAg
ICAgICAgLy8gRVhQRUNUX0VRKDIsIHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAgICAgIC8v
IEVYUEVDVF9FUSgyLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7CiAgICAgfQogICAgIHsKLSAg
ICAgICAgVmlzaXRlZE9iamVjdHMgdmlzaXRlZE9iamVjdHM7Ci0gICAgICAgIE1lbW9yeUluc3Ry
dW1lbnRhdGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7CisgICAgICAgIEluc3RydW1lbnRh
dGlvblRlc3RIZWxwZXIgaGVscGVyOwogCiAgICAgICAgIE93blB0cjxJbnN0cnVtZW50ZWRUZW1w
bGF0ZTxOb3RJbnN0cnVtZW50ZWQ+ID4gdmFsdWUgPSBhZG9wdFB0cihuZXcgSW5zdHJ1bWVudGVk
VGVtcGxhdGU8Tm90SW5zdHJ1bWVudGVkPigiIikpOwogICAgICAgICBJbnN0cnVtZW50ZWRPd25l
cjxJbnN0cnVtZW50ZWRUZW1wbGF0ZTxOb3RJbnN0cnVtZW50ZWQ+KiA+IHJvb3QodmFsdWUuZ2V0
KCkpOwotICAgICAgICBpbXBsLmFkZFJvb3RPYmplY3Qocm9vdCk7Ci0gICAgICAgIEVYUEVDVF9F
UShzaXplb2YoSW5zdHJ1bWVudGVkVGVtcGxhdGU8Tm90SW5zdHJ1bWVudGVkPiksIGltcGwucmVw
b3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgICAgIEVYUEVDVF9FUSgxLCB2aXNpdGVkT2Jq
ZWN0cy5zaXplKCkpOworICAgICAgICBoZWxwZXIuYWRkUm9vdE9iamVjdChyb290KTsKKyAgICAg
ICAgRVhQRUNUX0VRKHNpemVvZihJbnN0cnVtZW50ZWRUZW1wbGF0ZTxOb3RJbnN0cnVtZW50ZWQ+
KSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgICAgICBFWFBFQ1RfRVEo
MSwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwogICAgIH0KIH0KIAogVEVTVChNZW1vcnlJbnN0
cnVtZW50YXRpb25UZXN0LCB2ZWN0b3JaZXJvSW5saW5lQ2FwYWNpdHkpCiB7Ci0gICAgVmlzaXRl
ZE9iamVjdHMgdmlzaXRlZE9iamVjdHM7Ci0gICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCBp
bXBsKHZpc2l0ZWRPYmplY3RzKTsKKyAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBl
cjsKICAgICBJbnN0cnVtZW50ZWRPd25lcjxWZWN0b3I8aW50PiA+IHZlY3Rvck93bmVyKDE2KTsK
LSAgICBpbXBsLmFkZFJvb3RPYmplY3QodmVjdG9yT3duZXIpOwotICAgIEVYUEVDVF9FUSgxNiAq
IHNpemVvZihpbnQpLCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgIEVYUEVD
VF9FUSgxLCB2aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAgIGhlbHBlci5hZGRSb290T2JqZWN0
KHZlY3Rvck93bmVyKTsKKyAgICBFWFBFQ1RfRVEoMTYgKiBzaXplb2YoaW50KSwgaGVscGVyLnJl
cG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBoZWxwZXIudmlzaXRl
ZE9iamVjdHMoKSk7CiB9CiAKIFRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwgdmVjdG9y
RmllbGRXaXRoSW5saW5lQ2FwYWNpdHkpCiB7Ci0gICAgVmlzaXRlZE9iamVjdHMgdmlzaXRlZE9i
amVjdHM7Ci0gICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0ZWRPYmplY3Rz
KTsKKyAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKICAgICBJbnN0cnVtZW50
ZWRPd25lcjxWZWN0b3I8aW50LCA0PiA+IHZlY3Rvck93bmVyOwotICAgIGltcGwuYWRkUm9vdE9i
amVjdCh2ZWN0b3JPd25lcik7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMCks
IGltcGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgRVhQRUNUX0VRKDAsIHZpc2l0
ZWRPYmplY3RzLnNpemUoKSk7CisgICAgaGVscGVyLmFkZFJvb3RPYmplY3QodmVjdG9yT3duZXIp
OworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCBoZWxwZXIucmVwb3J0ZWRT
aXplRm9yQWxsVHlwZXMoKSk7CisgICAgRVhQRUNUX0VRKDAsIGhlbHBlci52aXNpdGVkT2JqZWN0
cygpKTsKIH0KIAogVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCB2ZWN0b3JGaWVsZFdp
dGhJbmxpbmVDYXBhY2l0eVJlc2l6ZWQpCiB7Ci0gICAgVmlzaXRlZE9iamVjdHMgdmlzaXRlZE9i
amVjdHM7Ci0gICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0ZWRPYmplY3Rz
KTsKKyAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKICAgICBJbnN0cnVtZW50
ZWRPd25lcjxWZWN0b3I8aW50LCA0PiA+IHZlY3Rvck93bmVyOwogICAgIHZlY3Rvck93bmVyLm1f
dmFsdWUucmVzZXJ2ZUNhcGFjaXR5KDgpOwotICAgIGltcGwuYWRkUm9vdE9iamVjdCh2ZWN0b3JP
d25lcik7Ci0gICAgRVhQRUNUX0VRKDggKiBzaXplb2YoaW50KSwgaW1wbC5yZXBvcnRlZFNpemVG
b3JBbGxUeXBlcygpKTsKLSAgICBFWFBFQ1RfRVEoMSwgdmlzaXRlZE9iamVjdHMuc2l6ZSgpKTsK
KyAgICBoZWxwZXIuYWRkUm9vdE9iamVjdCh2ZWN0b3JPd25lcik7CisgICAgRVhQRUNUX0VRKDgg
KiBzaXplb2YoaW50KSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgIEVY
UEVDVF9FUSgxLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7CiB9CiAKIFRFU1QoTWVtb3J5SW5z
dHJ1bWVudGF0aW9uVGVzdCwgaGVhcEFsbG9jYXRlZFZlY3RvcldpdGhJbmxpbmVDYXBhY2l0eSkK
IHsKLSAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0czsKLSAgICBNZW1vcnlJbnN0cnVt
ZW50YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMpOworICAgIEluc3RydW1lbnRhdGlvblRl
c3RIZWxwZXIgaGVscGVyOwogICAgIEluc3RydW1lbnRlZE93bmVyPE93blB0cjxWZWN0b3I8aW50
LCA0PiA+ID4gdmVjdG9yT3duZXI7CiAgICAgdmVjdG9yT3duZXIubV92YWx1ZSA9IGFkb3B0UHRy
KG5ldyBWZWN0b3I8aW50LCA0PigpKTsKLSAgICBpbXBsLmFkZFJvb3RPYmplY3QodmVjdG9yT3du
ZXIpOwotICAgIEVYUEVDVF9FUShzaXplb2YoVmVjdG9yPGludCwgND4pLCBpbXBsLnJlcG9ydGVk
U2l6ZUZvckFsbFR5cGVzKCkpOwotICAgIEVYUEVDVF9FUSgxLCB2aXNpdGVkT2JqZWN0cy5zaXpl
KCkpOworICAgIGhlbHBlci5hZGRSb290T2JqZWN0KHZlY3Rvck93bmVyKTsKKyAgICBFWFBFQ1Rf
RVEoc2l6ZW9mKFZlY3RvcjxpbnQsIDQ+KSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVz
KCkpOworICAgIEVYUEVDVF9FUSgxLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7CiB9CiAKIFRF
U1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwgaGVhcEFsbG9jYXRlZFZlY3RvcldpdGhJbmxp
bmVDYXBhY2l0eVJlc2l6ZWQpCiB7Ci0gICAgVmlzaXRlZE9iamVjdHMgdmlzaXRlZE9iamVjdHM7
Ci0gICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0ZWRPYmplY3RzKTsKKyAg
ICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKICAgICBJbnN0cnVtZW50ZWRPd25l
cjxPd25QdHI8VmVjdG9yPGludCwgND4gPiA+IHZlY3Rvck93bmVyOwogICAgIHZlY3Rvck93bmVy
Lm1fdmFsdWUgPSBhZG9wdFB0cihuZXcgVmVjdG9yPGludCwgND4oKSk7CiAgICAgdmVjdG9yT3du
ZXIubV92YWx1ZS0+cmVzZXJ2ZUNhcGFjaXR5KDgpOwotICAgIGltcGwuYWRkUm9vdE9iamVjdCh2
ZWN0b3JPd25lcik7Ci0gICAgRVhQRUNUX0VRKDggKiBzaXplb2YoaW50KSArIHNpemVvZihWZWN0
b3I8aW50LCA0PiksIGltcGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgRVhQRUNU
X0VRKDIsIHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAgaGVscGVyLmFkZFJvb3RPYmplY3Qo
dmVjdG9yT3duZXIpOworICAgIEVYUEVDVF9FUSg4ICogc2l6ZW9mKGludCkgKyBzaXplb2YoVmVj
dG9yPGludCwgND4pLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgRVhQ
RUNUX0VRKDIsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKIH0KIAogVEVTVChNZW1vcnlJbnN0
cnVtZW50YXRpb25UZXN0LCB2ZWN0b3JXaXRoSW5zdHJ1bWVudGVkVHlwZSkKIHsKLSAgICBWaXNp
dGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0czsKLSAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBs
IGltcGwodmlzaXRlZE9iamVjdHMpOworICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVs
cGVyOwogCiAgICAgdHlwZWRlZiBWZWN0b3I8U3RyaW5nPiBTdHJpbmdWZWN0b3I7CiAgICAgT3du
UHRyPFN0cmluZ1ZlY3Rvcj4gdmFsdWUgPSBhZG9wdFB0cihuZXcgU3RyaW5nVmVjdG9yKCkpOwpA
QCAtNDM4LDE1ICs0MzAsMTQgQEAgVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCB2ZWN0
b3JXaXRoSW5zdHJ1bWVudGVkVHlwZSkKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50
OyArK2kpCiAgICAgICAgIHZhbHVlLT5hcHBlbmQoInN0cmluZyIpOwogICAgIEluc3RydW1lbnRl
ZE93bmVyPFN0cmluZ1ZlY3RvciogPiByb290KHZhbHVlLmdldCgpKTsKLSAgICBpbXBsLmFkZFJv
b3RPYmplY3Qocm9vdCk7Ci0gICAgRVhQRUNUX0VRKHNpemVvZihTdHJpbmdWZWN0b3IpICsgc2l6
ZW9mKFN0cmluZykgKiB2YWx1ZS0+Y2FwYWNpdHkoKSArIHNpemVvZihTdHJpbmdJbXBsKSAqIHZh
bHVlLT5zaXplKCksIGltcGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgRVhQRUNU
X0VRKGNvdW50ICsgMiwgKHNpemVfdCl2aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAgIGhlbHBl
ci5hZGRSb290T2JqZWN0KHJvb3QpOworICAgIEVYUEVDVF9FUShzaXplb2YoU3RyaW5nVmVjdG9y
KSArIHNpemVvZihTdHJpbmcpICogdmFsdWUtPmNhcGFjaXR5KCkgKyBzaXplb2YoU3RyaW5nSW1w
bCkgKiB2YWx1ZS0+c2l6ZSgpLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Cisg
ICAgRVhQRUNUX0VRKGNvdW50ICsgMiwgKHNpemVfdCloZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7
CiB9CiAKIFRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwgaGFzaFNldFdpdGhJbnN0cnVt
ZW50ZWRUeXBlKQogewotICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwotICAgIE1l
bW9yeUluc3RydW1lbnRhdGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7CisgICAgSW5zdHJ1
bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CiAKICAgICB0eXBlZGVmIEhhc2hTZXQ8U3RyaW5n
PiBWYWx1ZVR5cGU7CiAgICAgT3duUHRyPFZhbHVlVHlwZT4gdmFsdWUgPSBhZG9wdFB0cihuZXcg
VmFsdWVUeXBlKCkpOwpAQCAtNDU0LDIxICs0NDUsMjAgQEAgVEVTVChNZW1vcnlJbnN0cnVtZW50
YXRpb25UZXN0LCBoYXNoU2V0V2l0aEluc3RydW1lbnRlZFR5cGUpCiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjb3VudDsgKytpKQogICAgICAgICB2YWx1ZS0+YWRkKFN0cmluZzo6bnVtYmVy
KGkpKTsKICAgICBJbnN0cnVtZW50ZWRPd25lcjxWYWx1ZVR5cGUqID4gcm9vdCh2YWx1ZS5nZXQo
KSk7Ci0gICAgaW1wbC5hZGRSb290T2JqZWN0KHJvb3QpOwotICAgIEVYUEVDVF9FUShzaXplb2Yo
VmFsdWVUeXBlKSArIHNpemVvZihTdHJpbmcpICogdmFsdWUtPmNhcGFjaXR5KCkgKyBzaXplb2Yo
U3RyaW5nSW1wbCkgKiB2YWx1ZS0+c2l6ZSgpLCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVz
KCkpOwotICAgIEVYUEVDVF9FUShjb3VudCArIDIsIChzaXplX3QpdmlzaXRlZE9iamVjdHMuc2l6
ZSgpKTsKKyAgICBoZWxwZXIuYWRkUm9vdE9iamVjdChyb290KTsKKyAgICBFWFBFQ1RfRVEoc2l6
ZW9mKFZhbHVlVHlwZSkgKyBzaXplb2YoU3RyaW5nKSAqIHZhbHVlLT5jYXBhY2l0eSgpICsgc2l6
ZW9mKFN0cmluZ0ltcGwpICogdmFsdWUtPnNpemUoKSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFs
bFR5cGVzKCkpOworICAgIEVYUEVDVF9FUShjb3VudCArIDIsIChzaXplX3QpaGVscGVyLnZpc2l0
ZWRPYmplY3RzKCkpOwogfQogCiBURVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIGFycmF5
QnVmZmVyKQogewotICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwotICAgIE1lbW9y
eUluc3RydW1lbnRhdGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7CisgICAgSW5zdHJ1bWVu
dGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CiAKICAgICB0eXBlZGVmIEluc3RydW1lbnRlZFRlbXBs
YXRlPFJlZlB0cjxBcnJheUJ1ZmZlcj4gPiBWYWx1ZVR5cGU7CiAgICAgVmFsdWVUeXBlIHZhbHVl
KEFycmF5QnVmZmVyOjpjcmVhdGUoMTAwMCwgc2l6ZW9mKGludCkpKTsKLSAgICBpbXBsLmFkZFJv
b3RPYmplY3QodmFsdWUpOwotICAgIEVYUEVDVF9FUShzaXplb2YoaW50KSAqIDEwMDAgKyBzaXpl
b2YoQXJyYXlCdWZmZXIpLCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgIEVY
UEVDVF9FUSgyLCB2aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAgIGhlbHBlci5hZGRSb290T2Jq
ZWN0KHZhbHVlKTsKKyAgICBFWFBFQ1RfRVEoc2l6ZW9mKGludCkgKiAxMDAwICsgc2l6ZW9mKEFy
cmF5QnVmZmVyKSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgIEVYUEVD
VF9FUSgyLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165958</attachid>
            <date>2012-09-27 02:36:15 -0700</date>
            <delta_ts>2012-09-27 06:25:43 -0700</delta_ts>
            <desc>mac build fix</desc>
            <filename>bug-97461-20120927133532.patch</filename>
            <type>text/plain</type>
            <size>42851</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5NzM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGRjYzAxNGJmYTFhMDI1Y2EwNDU1ZGU5
OTI1YTg1NDE2MGZjMjM1MjAuLjQxM2EwYTMxMzA5YmVmYTBiZDVlODI4YjQ0MWNjMzlkZmU3NTA0
ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTItMDktMjcgIElseWEgVGlraG9ub3Zza3kgIDxs
b2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IE5NSTogbW92ZSB2
aXNpdGVkIGFuZCBjb3VudE9iamVjdFNpemUgbWV0aG9kcyBpbXBsZW1lbnRhdGlvbiBpbnRvIHNl
cGFyYXRlIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTc0NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGVzZSBtZXRob2RzIGFuZCB0aGUgZGF0YSBjb2xsZWN0ZWQgYnkgdGhlbSBuZWVkIHRv
IGJlIHVzZWQgaW4gdGhlIGluc3RydW1lbnRhdGlvbiBjb2RlIGZvciBvdGhlciBjb21wb25lbnRz
LgorICAgICAgICBBcyBleGFtcGxlIHdoZW4gd2UgYXJlIHZpc2l0aW5nIGJpdG1hcHMgd2UgbmVl
ZCB0byB2aXNpdCBwbGF0Zm9ybSBzcGVjaWZpYyBvYmplY3RzLgorICAgICAgICBUaGVzZSBvYmpl
Y3RzIHdpbGwgYmUgaW5zdHJ1bWVudGVkIHdpdGggaGVscCBvZiBjb21wb25lbnQncyBvd24gaW5z
dHJ1bWVudGF0aW9uIGNvZGUKKyAgICAgICAgYnV0IHdlIGhhdmUgdG8ga2VlcCB0aGUgc2luZ2xl
IHNldCBvZiB2aXNpdGVkIG9iamVjdHMgYW5kIHRoZSBtYXAgb2YgY291bnRlcnMuCisKKyAgICAg
ICAgKiB3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmg6CisgICAgICAgIChNZW1vcnlJbnN0cnVt
ZW50YXRpb25DbGllbnQpOgorICAgICAgICAoV1RGOjpNZW1vcnlJbnN0cnVtZW50YXRpb25DbGll
bnQ6On5NZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnQpOgorICAgICAgICAoV1RGKToKKyAgICAg
ICAgKFdURjo6TWVtb3J5SW5zdHJ1bWVudGF0aW9uOjpNZW1vcnlJbnN0cnVtZW50YXRpb24pOgor
ICAgICAgICAoTWVtb3J5SW5zdHJ1bWVudGF0aW9uKToKKyAgICAgICAgKFdURjo6TWVtb3J5SW5z
dHJ1bWVudGF0aW9uOjpjb3VudE9iamVjdFNpemUpOgorICAgICAgICAoV1RGOjpNZW1vcnlJbnN0
cnVtZW50YXRpb246OnZpc2l0ZWQpOgorCiAyMDEyLTA5LTI2ICBDb3NtaW4gVHJ1dGEgIDxjdHJ1
dGFAcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gQWxsb3cgZGVub3JtYWwgZmxvYXRz
IGluIEFSTSBWRlAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyYjA0NGQzN2UzODUyZmZhNGI2MjNhOGMxYjczYWYx
YThiOGQ5NjYzLi45YTkwZDM5MTJiMjk0YWIwNGM4ZmZiMTAyN2JmMDFlOGQyODFlOWQ5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTItMDktMjcgIElseWEgVGlraG9ub3Zza3kgIDxs
b2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IE5NSTogbW92ZSB2
aXNpdGVkIGFuZCBjb3VudE9iamVjdFNpemUgbWV0aG9kcyBpbXBsZW1lbnRhdGlvbiBpbnRvIHNl
cGFyYXRlIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTc0NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGVzZSBtZXRob2RzIGFuZCB0aGUgZGF0YSBjb2xsZWN0ZWQgYnkgdGhlbSBuZWVkIHRv
IGJlIHVzZWQgaW4gdGhlIGluc3RydW1lbnRhdGlvbiBjb2RlIGZvciBvdGhlciBjb21wb25lbnRz
LgorICAgICAgICBBcyBleGFtcGxlIHdoZW4gd2UgYXJlIHZpc2l0aW5nIGJpdG1hcHMgd2UgbmVl
ZCB0byB2aXNpdCBwbGF0Zm9ybSBzcGVjaWZpYyBvYmplY3RzLgorICAgICAgICBUaGVzZSBvYmpl
Y3RzIHdpbGwgYmUgaW5zdHJ1bWVudGVkIHdpdGggaGVscCBvZiBjb21wb25lbnQncyBvd24gaW5z
dHJ1bWVudGF0aW9uIGNvZGUKKyAgICAgICAgYnV0IHdlIGhhdmUgdG8ga2VlcCB0aGUgc2luZ2xl
IHNldCBvZiB2aXNpdGVkIG9iamVjdHMgYW5kIHRoZSBtYXAgb2YgY291bnRlcnMuCisKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0RG9tVHJlZUluZm8pOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yTWVtb3J5QWdlbnQ6OmdldFByb2Nlc3NNZW1vcnlEaXN0cmlidXRpb24p
OgorICAgICAgICAqIGluc3BlY3Rvci9NZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudEltcGw6OmNvdW50T2Jq
ZWN0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUlu
c3RydW1lbnRhdGlvbkNsaWVudEltcGw6OnZpc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVt
b3J5SW5zdHJ1bWVudGF0aW9uSW1wbDo6c2VsZlNpemUpOgorICAgICAgICAqIGluc3BlY3Rvci9N
ZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlJbnN0
cnVtZW50YXRpb25DbGllbnRJbXBsOjpNZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnRJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudEltcGw6OnNlbGZT
aXplKToKKyAgICAgICAgKE1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudEltcGwpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50SW1wbDo6dmlzaXRlZE9iamVj
dHMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChNZW1vcnlJbnN0cnVtZW50YXRpb25J
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUluc3RydW1lbnRhdGlvbkltcGw6Ok1lbW9y
eUluc3RydW1lbnRhdGlvbkltcGwpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5SW5zdHJ1bWVu
dGF0aW9uSW1wbDo6Y2hlY2tJbnN0cnVtZW50ZWRPYmplY3RzKToKKwogMjAxMi0wOS0yNyAgS2Vp
c2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4KIAogICAgICAgICBTdWdnZXN0aW9uUGlj
a2VyIHNob3VsZCBzdXBwb3J0IHJ0bApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAzYmUx
NTQ2ZjE5MzFkMjM3NjlhMzRlY2RlNmRlNmJiNWJmYmYyYjFiLi41MzM3YzQxMzlkZjgwNmEyY2Ix
Y2IwNTE3ZmZkY2M4OWIzY2NmNTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI1IEBACisyMDEyLTA5LTI3ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBOTUk6IG1vdmUgdmlzaXRlZCBhbmQgY291
bnRPYmplY3RTaXplIG1ldGhvZHMgaW1wbGVtZW50YXRpb24gaW50byBzZXBhcmF0ZSBjbGFzcy4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3NDYxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlc2UgbWV0
aG9kcyBhbmQgdGhlIGRhdGEgY29sbGVjdGVkIGJ5IHRoZW0gbmVlZCB0byBiZSB1c2VkIGluIHRo
ZSBpbnN0cnVtZW50YXRpb24gY29kZSBmb3Igb3RoZXIgY29tcG9uZW50cy4KKyAgICAgICAgQXMg
ZXhhbXBsZSB3aGVuIHdlIGFyZSB2aXNpdGluZyBiaXRtYXBzIHdlIG5lZWQgdG8gdmlzaXQgcGxh
dGZvcm0gc3BlY2lmaWMgb2JqZWN0cy4KKyAgICAgICAgVGhlc2Ugb2JqZWN0cyB3aWxsIGJlIGlu
c3RydW1lbnRlZCB3aXRoIGhlbHAgb2YgY29tcG9uZW50J3Mgb3duIGluc3RydW1lbnRhdGlvbiBj
b2RlCisgICAgICAgIGJ1dCB3ZSBoYXZlIHRvIGtlZXAgdGhlIHNpbmdsZSBzZXQgb2YgdmlzaXRl
ZCBvYmplY3RzIGFuZCB0aGUgbWFwIG9mIGNvdW50ZXJzLgorCisgICAgICAgICogdGVzdHMvTWVt
b3J5SW5zdHJ1bWVudGF0aW9uVGVzdC5jcHA6CisgICAgICAgIChJbnN0cnVtZW50YXRpb25UZXN0
SGVscGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3RydW1lbnRhdGlvblRlc3RIZWxwZXI6Oklu
c3RydW1lbnRhdGlvblRlc3RIZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zdHJ1bWVudGF0
aW9uVGVzdEhlbHBlcjo6YWRkUm9vdE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnN0cnVt
ZW50YXRpb25UZXN0SGVscGVyOjpyZXBvcnRlZFNpemVGb3JBbGxUeXBlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyOjp2aXNpdGVkT2JqZWN0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyOjp0b3RhbFNpemUpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMi0wOS0yNyAg
S2Vpc2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4KIAogICAgICAgICBTdWdnZXN0aW9u
UGlja2VyIHNob3VsZCBzdXBwb3J0IHJ0bApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvTWVt
b3J5SW5zdHJ1bWVudGF0aW9uLmggYi9Tb3VyY2UvV1RGL3d0Zi9NZW1vcnlJbnN0cnVtZW50YXRp
b24uaAppbmRleCA1OGFiNTAwNzA3MTA4MmU5Yjc1Mjc3MmJmZGNiMGQxZDZjMjY0MTQxLi5iYzkz
MWRlNjA1NjEwZGRiMzhkZDlhM2VlZmIxYmZiZjJlYjE5YmFhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb24uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9NZW1v
cnlJbnN0cnVtZW50YXRpb24uaApAQCAtODMsOCArODMsMTYgQEAgcHJpdmF0ZToKIAogdGVtcGxh
dGU8dHlwZW5hbWUgVD4gdm9pZCByZXBvcnRNZW1vcnlVc2FnZShjb25zdCBUKiBjb25zdCYsIE1l
bW9yeU9iamVjdEluZm8qKTsKIAorY2xhc3MgTWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50IHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5NZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnQoKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgY291bnRPYmplY3RTaXplKE1lbW9yeU9iamVjdFR5cGUsIHNpemVf
dCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdGVkKGNvbnN0IHZvaWQqKSA9IDA7Cit9Owor
CiBjbGFzcyBNZW1vcnlJbnN0cnVtZW50YXRpb24gewogcHVibGljOgorICAgIE1lbW9yeUluc3Ry
dW1lbnRhdGlvbihNZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnQqIGNsaWVudCkgOiBtX2NsaWVu
dChjbGllbnQpIHsgfQogICAgIHZpcnR1YWwgfk1lbW9yeUluc3RydW1lbnRhdGlvbigpIHsgfQog
CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHZvaWQgYWRkUm9vdE9iamVjdChjb25zdCBUJiB0
KQpAQCAtMTAzLDkgKzExMSwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgfTsKIAogcHJpdmF0ZToKLSAg
ICB2aXJ0dWFsIHZvaWQgY291bnRPYmplY3RTaXplKE1lbW9yeU9iamVjdFR5cGUsIHNpemVfdCkg
PSAwOworICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudCogbV9jbGllbnQ7CisKKyAgICB2
b2lkIGNvdW50T2JqZWN0U2l6ZShNZW1vcnlPYmplY3RUeXBlIG9iamVjdFR5cGUsIHNpemVfdCBz
aXplKSB7IG1fY2xpZW50LT5jb3VudE9iamVjdFNpemUob2JqZWN0VHlwZSwgc2l6ZSk7IH0KKyAg
ICBib29sIHZpc2l0ZWQoY29uc3Qgdm9pZCogcG9pbnRlcikgeyByZXR1cm4gbV9jbGllbnQtPnZp
c2l0ZWQocG9pbnRlcik7IH0KKwogICAgIHZpcnR1YWwgdm9pZCBkZWZlckluc3RydW1lbnRlZFBv
aW50ZXIoUGFzc093blB0cjxJbnN0cnVtZW50ZWRQb2ludGVyQmFzZT4pID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgdmlzaXRlZChjb25zdCB2b2lkKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwcm9j
ZXNzRGVmZXJyZWRJbnN0cnVtZW50ZWRQb2ludGVycygpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
Y2hlY2tDb3VudGVkT2JqZWN0KGNvbnN0IHZvaWQqKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwCmluZGV4IDc5MWJiNWY2ODY2
NTIwZDM0MzAzZGFiNWY4YzQ3MDJjMWNjMmQ3YzEuLjc1ZjVhZTI0NDI4MzI4NDVmZWJhNmYyNTM5
ZTE1YzNjNDM3YThlYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JNZW1vcnlBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvck1lbW9yeUFnZW50LmNwcApAQCAtODksNiArODksOTkgQEAgc3RhdGljIGNvbnN0IGNoYXIg
ZG9tU3RvcmFnZUNhY2hlW10gPSAiRE9NU3RvcmFnZUNhY2hlIjsKIAogbmFtZXNwYWNlIHsKIAor
Y2xhc3MgTWVtb3J5VXNhZ2VTdGF0c0dlbmVyYXRvciB7CitwdWJsaWM6CisgICAgTWVtb3J5VXNh
Z2VTdGF0c0dlbmVyYXRvcihNZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnRJbXBsKiBjbGllbnQs
IE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwqIGluc3RydW1lbnRhdGlvbikgOiBtX2NsaWVudChj
bGllbnQpLCBtX2luc3RydW1lbnRhdGlvbihpbnN0cnVtZW50YXRpb24pIHsgfQorCisgICAgdm9p
ZCBkdW1wKFR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3JNZW1vcnlCbG9jaz4qIGNoaWxkcmVu
KQorICAgIHsKKyAgICAgICAgY2hpbGRyZW4tPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JNZW1vcnlD
YWNoZSgpKTsKKyAgICAgICAgY2hpbGRyZW4tPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JQYWdlKCkp
OworICAgICAgICBjaGlsZHJlbi0+YWRkSXRlbShidWlsZE9iamVjdEZvckV4dGVybmFsUmVzb3Vy
Y2VzKCkpOworCisgICAgICAgIGFkZE1lbW9yeUluc3RydW1lbnRhdGlvbkRlYnVnRGF0YShjaGls
ZHJlbik7CisgICAgfQorCitwcml2YXRlOgorICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVu
dEltcGwqIG1fY2xpZW50OworICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwqIG1faW5zdHJ1
bWVudGF0aW9uOworCisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gYnVpbGRP
YmplY3RGb3JNZW1vcnlDYWNoZSgpIGNvbnN0CisgICAgeworICAgICAgICBzaXplX3QgdG90YWxT
aXplID0gMDsKKworICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvck1l
bW9yeUJsb2NrPiA+IGNoaWxkcmVuID0gVHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvck1lbW9y
eUJsb2NrPjo6Y3JlYXRlKCk7CisgICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0Zv
cihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpNZW1vcnlDYWNoZVN0cnVjdHVy
ZXMpOworICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoY2hpbGRyZW4uZ2V0
KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6Q2FjaGVkUmVzb3VyY2VSYXcpOworICAgICAgICB0b3Rh
bFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoY2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlU
eXBlczo6Q2FjaGVkUmVzb3VyY2VDU1MpOworICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5
QmxvY2tGb3IoY2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6Q2FjaGVkUmVzb3Vy
Y2VGb250KTsKKyAgICAgICAgdG90YWxTaXplICs9IGFkZE1lbW9yeUJsb2NrRm9yKGNoaWxkcmVu
LmdldCgpLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkNhY2hlZFJlc291cmNlSW1hZ2UpOworICAgICAg
ICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoY2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVN
ZW1vcnlUeXBlczo6Q2FjaGVkUmVzb3VyY2VTY3JpcHQpOworICAgICAgICB0b3RhbFNpemUgKz0g
YWRkTWVtb3J5QmxvY2tGb3IoY2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6Q2Fj
aGVkUmVzb3VyY2VTVkcpOworICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3Io
Y2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6Q2FjaGVkUmVzb3VyY2VTaGFkZXIp
OworICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoY2hpbGRyZW4uZ2V0KCks
IFdlYkNvcmVNZW1vcnlUeXBlczo6Q2FjaGVkUmVzb3VyY2VYU0xUKTsKKworICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yTWVtb3J5QmxvY2s+IGJsb2NrID0gSW5zcGVjdG9yTWVtb3J5QmxvY2s6OmNy
ZWF0ZSgpLnNldE5hbWUoV2ViQ29yZU1lbW9yeVR5cGVzOjpNZW1vcnlDYWNoZSk7CisgICAgICAg
IGJsb2NrLT5zZXRTaXplKHRvdGFsU2l6ZSk7CisgICAgICAgIGJsb2NrLT5zZXRDaGlsZHJlbihj
aGlsZHJlbi5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm4gYmxvY2sucmVsZWFzZSgpOworICAg
IH0KKworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yTWVtb3J5QmxvY2s+IGJ1aWxkT2JqZWN0Rm9y
UGFnZSgpIGNvbnN0CisgICAgeworICAgICAgICBzaXplX3QgdG90YWxTaXplID0gMDsKKworICAg
ICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvck1lbW9yeUJsb2NrPiA+IGRv
bUNoaWxkcmVuID0gVHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvck1lbW9yeUJsb2NrPjo6Y3Jl
YXRlKCk7CisgICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0Zvcihkb21DaGlsZHJl
bi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpET00pOworICAgICAgICB0b3RhbFNpemUgKz0g
YWRkTWVtb3J5QmxvY2tGb3IoZG9tQ2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6
SW1hZ2UpOworICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoZG9tQ2hpbGRy
ZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6Q1NTKTsKKyAgICAgICAgdG90YWxTaXplICs9
IGFkZE1lbW9yeUJsb2NrRm9yKGRvbUNoaWxkcmVuLmdldCgpLCBXZWJDb3JlTWVtb3J5VHlwZXM6
OkJpbmRpbmcpOworICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoZG9tQ2hp
bGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6TG9hZGVyKTsKKworICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yTWVtb3J5QmxvY2s+IGRvbSA9IEluc3BlY3Rvck1lbW9yeUJsb2NrOjpjcmVh
dGUoKS5zZXROYW1lKFdlYkNvcmVNZW1vcnlUeXBlczo6UGFnZSk7CisgICAgICAgIGRvbS0+c2V0
U2l6ZSh0b3RhbFNpemUpOworICAgICAgICBkb20tPnNldENoaWxkcmVuKGRvbUNoaWxkcmVuLnJl
bGVhc2UoKSk7CisgICAgICAgIHJldHVybiBkb20ucmVsZWFzZSgpOworICAgIH0KKworICAgIFBh
c3NSZWZQdHI8SW5zcGVjdG9yTWVtb3J5QmxvY2s+IGJ1aWxkT2JqZWN0Rm9yRXh0ZXJuYWxSZXNv
dXJjZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgc2l6ZV90IHRvdGFsU2l6ZSA9IDA7CisKKyAg
ICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gPiBy
ZXNvdXJjZXNDaGlsZHJlbiA9IFR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3JNZW1vcnlCbG9j
az46OmNyZWF0ZSgpOworICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IocmVz
b3VyY2VzQ2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6RXh0ZXJuYWxTdHJpbmdz
KTsKKyAgICAgICAgdG90YWxTaXplICs9IGFkZE1lbW9yeUJsb2NrRm9yKHJlc291cmNlc0NoaWxk
cmVuLmdldCgpLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkV4dGVybmFsQXJyYXlzKTsKKworICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yTWVtb3J5QmxvY2s+IHJlc291cmNlcyA9IEluc3BlY3Rvck1lbW9y
eUJsb2NrOjpjcmVhdGUoKS5zZXROYW1lKFdlYkNvcmVNZW1vcnlUeXBlczo6RXh0ZXJuYWxSZXNv
dXJjZXMpOworICAgICAgICByZXNvdXJjZXMtPnNldFNpemUodG90YWxTaXplKTsKKyAgICAgICAg
cmVzb3VyY2VzLT5zZXRDaGlsZHJlbihyZXNvdXJjZXNDaGlsZHJlbi5yZWxlYXNlKCkpOworICAg
ICAgICByZXR1cm4gcmVzb3VyY2VzLnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBzaXplX3QgYWRk
TWVtb3J5QmxvY2tGb3IoVHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvck1lbW9yeUJsb2NrPiog
YXJyYXksIE1lbW9yeU9iamVjdFR5cGUgdHlwZU5hbWUpIGNvbnN0CisgICAgeworICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yTWVtb3J5QmxvY2s+IHJlc3VsdCA9IEluc3BlY3Rvck1lbW9yeUJsb2Nr
OjpjcmVhdGUoKS5zZXROYW1lKHR5cGVOYW1lKTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBtX2Ns
aWVudC0+dG90YWxTaXplKHR5cGVOYW1lKTsKKyAgICAgICAgcmVzdWx0LT5zZXRTaXplKHNpemUp
OworICAgICAgICBhcnJheS0+YWRkSXRlbShyZXN1bHQpOworICAgICAgICByZXR1cm4gc2l6ZTsK
KyAgICB9CisKKyAgICB2b2lkIGFkZE1lbW9yeUluc3RydW1lbnRhdGlvbkRlYnVnRGF0YShUeXBl
QnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+KiBjaGlsZHJlbikKKyAgICB7Cisg
ICAgICAgIGlmIChtX2luc3RydW1lbnRhdGlvbi0+Y2hlY2tJbnN0cnVtZW50ZWRPYmplY3RzKCkp
IHsKKyAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gdG90YWxJbnN0cnVt
ZW50ZWQgPSBJbnNwZWN0b3JNZW1vcnlCbG9jazo6Y3JlYXRlKCkuc2V0TmFtZSgiSW5zdHJ1bWVu
dGVkT2JqZWN0c0NvdW50Iik7CisgICAgICAgICAgICB0b3RhbEluc3RydW1lbnRlZC0+c2V0U2l6
ZShtX2NsaWVudC0+dG90YWxDb3VudGVkT2JqZWN0cygpKTsKKworICAgICAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck1lbW9yeUJsb2NrPiBpbmNvcnJlY3RseUluc3RydW1lbnRlZCA9IEluc3BlY3Rv
ck1lbW9yeUJsb2NrOjpjcmVhdGUoKS5zZXROYW1lKCJJbnN0cnVtZW50ZWRCdXROb3RBbGxvY2F0
ZWRPYmplY3RzQ291bnQiKTsKKyAgICAgICAgICAgIGluY29ycmVjdGx5SW5zdHJ1bWVudGVkLT5z
ZXRTaXplKG1faW5zdHJ1bWVudGF0aW9uLT50b3RhbE9iamVjdHNOb3RJbkFsbG9jYXRlZFNldCgp
KTsKKworICAgICAgICAgICAgY2hpbGRyZW4tPmFkZEl0ZW0odG90YWxJbnN0cnVtZW50ZWQpOwor
ICAgICAgICAgICAgY2hpbGRyZW4tPmFkZEl0ZW0oaW5jb3JyZWN0bHlJbnN0cnVtZW50ZWQpOwor
ICAgICAgICB9CisgICAgfQorfTsKKwogU3RyaW5nIG5vZGVOYW1lKE5vZGUqIG5vZGUpCiB7CiAg
ICAgaWYgKG5vZGUtPmRvY3VtZW50KCktPmlzWEhUTUxEb2N1bWVudCgpKQpAQCAtNDY1LDEwMyAr
NTU4LDE2IEBAIHB1YmxpYzoKICAgICAgICAgbV9tZW1vcnlJbnN0cnVtZW50YXRpb24uYWRkUm9v
dE9iamVjdChtZW1vcnlDYWNoZSgpKTsKICAgICB9CiAKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rv
ck1lbW9yeUJsb2NrPiBidWlsZE9iamVjdEZvck1lbW9yeUNhY2hlKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHNpemVfdCB0b3RhbFNpemUgPSAwOwotCi0gICAgICAgIFJlZlB0cjxUeXBlQnVpbGRl
cjo6QXJyYXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+ID4gY2hpbGRyZW4gPSBUeXBlQnVpbGRlcjo6
QXJyYXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+OjpjcmVhdGUoKTsKLSAgICAgICAgdG90YWxTaXpl
ICs9IGFkZE1lbW9yeUJsb2NrRm9yKGNoaWxkcmVuLmdldCgpLCBXZWJDb3JlTWVtb3J5VHlwZXM6
Ok1lbW9yeUNhY2hlU3RydWN0dXJlcyk7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlC
bG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJj
ZVJhdyk7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5n
ZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZUNTUyk7Ci0gICAgICAgIHRv
dGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9y
eVR5cGVzOjpDYWNoZWRSZXNvdXJjZUZvbnQpOwotICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVt
b3J5QmxvY2tGb3IoY2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6Q2FjaGVkUmVz
b3VyY2VJbWFnZSk7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGls
ZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZVNjcmlwdCk7Ci0g
ICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2Vi
Q29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZVNWRyk7Ci0gICAgICAgIHRvdGFsU2l6ZSAr
PSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpD
YWNoZWRSZXNvdXJjZVNoYWRlcik7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9j
a0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZVhT
TFQpOwotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gYmxvY2sgPSBJbnNw
ZWN0b3JNZW1vcnlCbG9jazo6Y3JlYXRlKCkuc2V0TmFtZShXZWJDb3JlTWVtb3J5VHlwZXM6Ok1l
bW9yeUNhY2hlKTsKLSAgICAgICAgYmxvY2stPnNldFNpemUodG90YWxTaXplKTsKLSAgICAgICAg
YmxvY2stPnNldENoaWxkcmVuKGNoaWxkcmVuLnJlbGVhc2UoKSk7Ci0gICAgICAgIHJldHVybiBi
bG9jay5yZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JNZW1vcnlC
bG9jaz4gYnVpbGRPYmplY3RGb3JQYWdlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHNpemVfdCB0
b3RhbFNpemUgPSAwOwotCi0gICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVj
dG9yTWVtb3J5QmxvY2s+ID4gZG9tQ2hpbGRyZW4gPSBUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVj
dG9yTWVtb3J5QmxvY2s+OjpjcmVhdGUoKTsKLSAgICAgICAgdG90YWxTaXplICs9IGFkZE1lbW9y
eUJsb2NrRm9yKGRvbUNoaWxkcmVuLmdldCgpLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkRPTSk7Ci0g
ICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0Zvcihkb21DaGlsZHJlbi5nZXQoKSwg
V2ViQ29yZU1lbW9yeVR5cGVzOjpJbWFnZSk7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1v
cnlCbG9ja0Zvcihkb21DaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOwot
ICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoZG9tQ2hpbGRyZW4uZ2V0KCks
IFdlYkNvcmVNZW1vcnlUeXBlczo6QmluZGluZyk7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRN
ZW1vcnlCbG9ja0Zvcihkb21DaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpMb2Fk
ZXIpOwotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gZG9tID0gSW5zcGVj
dG9yTWVtb3J5QmxvY2s6OmNyZWF0ZSgpLnNldE5hbWUoV2ViQ29yZU1lbW9yeVR5cGVzOjpQYWdl
KTsKLSAgICAgICAgZG9tLT5zZXRTaXplKHRvdGFsU2l6ZSk7Ci0gICAgICAgIGRvbS0+c2V0Q2hp
bGRyZW4oZG9tQ2hpbGRyZW4ucmVsZWFzZSgpKTsKLSAgICAgICAgcmV0dXJuIGRvbS5yZWxlYXNl
KCk7Ci0gICAgfQotCi0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gYnVpbGRP
YmplY3RGb3JFeHRlcm5hbFJlc291cmNlcygpIGNvbnN0Ci0gICAgewotICAgICAgICBzaXplX3Qg
dG90YWxTaXplID0gMDsKLQotICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PEluc3Bl
Y3Rvck1lbW9yeUJsb2NrPiA+IHJlc291cmNlc0NoaWxkcmVuID0gVHlwZUJ1aWxkZXI6OkFycmF5
PEluc3BlY3Rvck1lbW9yeUJsb2NrPjo6Y3JlYXRlKCk7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBh
ZGRNZW1vcnlCbG9ja0ZvcihyZXNvdXJjZXNDaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5
cGVzOjpFeHRlcm5hbFN0cmluZ3MpOwotICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5Qmxv
Y2tGb3IocmVzb3VyY2VzQ2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6RXh0ZXJu
YWxBcnJheXMpOwotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gcmVzb3Vy
Y2VzID0gSW5zcGVjdG9yTWVtb3J5QmxvY2s6OmNyZWF0ZSgpLnNldE5hbWUoV2ViQ29yZU1lbW9y
eVR5cGVzOjpFeHRlcm5hbFJlc291cmNlcyk7Ci0gICAgICAgIHJlc291cmNlcy0+c2V0U2l6ZSh0
b3RhbFNpemUpOwotICAgICAgICByZXNvdXJjZXMtPnNldENoaWxkcmVuKHJlc291cmNlc0NoaWxk
cmVuLnJlbGVhc2UoKSk7Ci0gICAgICAgIHJldHVybiByZXNvdXJjZXMucmVsZWFzZSgpOwotICAg
IH0KLQotICAgIHZvaWQgZHVtcFN0YXRpc3RpY3MoVHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rv
ck1lbW9yeUJsb2NrPiogY2hpbGRyZW4sIEluc3BlY3RvckRhdGFDb3VudGVyKiBpbnNwZWN0b3JE
YXRhKQotICAgIHsKLSAgICAgICAgY2hpbGRyZW4tPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JNZW1v
cnlDYWNoZSgpKTsKLSAgICAgICAgY2hpbGRyZW4tPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JQYWdl
KCkpOwotICAgICAgICBjaGlsZHJlbi0+YWRkSXRlbShidWlsZE9iamVjdEZvckV4dGVybmFsUmVz
b3VyY2VzKCkpOwotCi0gICAgICAgIGluc3BlY3RvckRhdGEtPmFkZENvbXBvbmVudChNZW1vcnlC
bG9ja05hbWU6Omluc3BlY3RvckRPTURhdGEsIG1fbWVtb3J5SW5zdHJ1bWVudGF0aW9uLnNlbGZT
aXplKCkpOwotICAgIH0KIAogcHJpdmF0ZToKLSAgICBzaXplX3QgYWRkTWVtb3J5QmxvY2tGb3Io
VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvck1lbW9yeUJsb2NrPiogYXJyYXksIE1lbW9yeU9i
amVjdFR5cGUgdHlwZU5hbWUpIGNvbnN0Ci0gICAgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
TWVtb3J5QmxvY2s+IHJlc3VsdCA9IEluc3BlY3Rvck1lbW9yeUJsb2NrOjpjcmVhdGUoKS5zZXRO
YW1lKHR5cGVOYW1lKTsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBtX21lbW9yeUluc3RydW1lbnRh
dGlvbi50b3RhbFNpemUodHlwZU5hbWUpOwotICAgICAgICByZXN1bHQtPnNldFNpemUoc2l6ZSk7
Ci0gICAgICAgIGFycmF5LT5hZGRJdGVtKHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBzaXplOwot
ICAgIH0KLQogICAgIFBhZ2UqIG1fcGFnZTsKICAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBs
JiBtX21lbW9yeUluc3RydW1lbnRhdGlvbjsKIH07CiAKIH0KIAotc3RhdGljIHZvaWQgYWRkTWVt
b3J5SW5zdHJ1bWVudGF0aW9uRGVidWdEYXRhKFR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3JN
ZW1vcnlCbG9jaz4qIGNoaWxkcmVuLCBjb25zdCBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsJiBt
ZW1vcnlJbnN0cnVtZW50YXRpb24pCitzdGF0aWMgdm9pZCBjb2xsZWN0RG9tVHJlZUluZm8oUGFn
ZSogcGFnZSwgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCYgbWVtb3J5SW5zdHJ1bWVudGF0aW9u
KQogewotICAgIGlmIChtZW1vcnlJbnN0cnVtZW50YXRpb24uY2hlY2tJbnN0cnVtZW50ZWRPYmpl
Y3RzKCkpIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck1lbW9yeUJsb2NrPiB0b3RhbEluc3Ry
dW1lbnRlZCA9IEluc3BlY3Rvck1lbW9yeUJsb2NrOjpjcmVhdGUoKS5zZXROYW1lKCJJbnN0cnVt
ZW50ZWRPYmplY3RzQ291bnQiKTsKLSAgICAgICAgdG90YWxJbnN0cnVtZW50ZWQtPnNldFNpemUo
bWVtb3J5SW5zdHJ1bWVudGF0aW9uLnRvdGFsQ291bnRlZE9iamVjdHMoKSk7Ci0KLSAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck1lbW9yeUJsb2NrPiBpbmNvcnJlY3RseUluc3RydW1lbnRlZCA9IElu
c3BlY3Rvck1lbW9yeUJsb2NrOjpjcmVhdGUoKS5zZXROYW1lKCJJbnN0cnVtZW50ZWRCdXROb3RB
bGxvY2F0ZWRPYmplY3RzQ291bnQiKTsKLSAgICAgICAgaW5jb3JyZWN0bHlJbnN0cnVtZW50ZWQt
PnNldFNpemUobWVtb3J5SW5zdHJ1bWVudGF0aW9uLnRvdGFsT2JqZWN0c05vdEluQWxsb2NhdGVk
U2V0KCkpOwotCi0gICAgICAgIGNoaWxkcmVuLT5hZGRJdGVtKHRvdGFsSW5zdHJ1bWVudGVkKTsK
LSAgICAgICAgY2hpbGRyZW4tPmFkZEl0ZW0oaW5jb3JyZWN0bHlJbnN0cnVtZW50ZWQpOwotICAg
IH0KLX0KLQotc3RhdGljIHZvaWQgY29sbGVjdERvbVRyZWVJbmZvKFBhZ2UqIHBhZ2UsIEluc3Bl
Y3RvckNsaWVudCogaW5zcGVjdG9yQ2xpZW50LCBWaXNpdGVkT2JqZWN0cyYgdmlzaXRlZE9iamVj
dHMsIFR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3JNZW1vcnlCbG9jaz4qIGNoaWxkcmVuLCBJ
bnNwZWN0b3JEYXRhQ291bnRlciogaW5zcGVjdG9yRGF0YSkKLXsKLSAgICBIYXNoU2V0PGNvbnN0
IHZvaWQqPiBhbGxvY2F0ZWRPYmplY3RzOwotICAgIGluc3BlY3RvckNsaWVudC0+Z2V0QWxsb2Nh
dGVkT2JqZWN0cyhhbGxvY2F0ZWRPYmplY3RzKTsKLSAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25J
bXBsIG1lbW9yeUluc3RydW1lbnRhdGlvbih2aXNpdGVkT2JqZWN0cywgYWxsb2NhdGVkT2JqZWN0
cy5pc0VtcHR5KCkgPyAwIDogJmFsbG9jYXRlZE9iamVjdHMpOwotCiAgICAgRXh0ZXJuYWxTdHJp
bmdzUm9vdCBzdHJpbmdzUm9vdDsKICAgICBtZW1vcnlJbnN0cnVtZW50YXRpb24uYWRkUm9vdE9i
amVjdChzdHJpbmdzUm9vdCk7CiAKQEAgLTU4Miw5ICs1ODgsNiBAQCBzdGF0aWMgdm9pZCBjb2xs
ZWN0RG9tVHJlZUluZm8oUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDbGll
bnQsIFZpcwogCiAgICAgZG9tVHJlZXNJdGVyYXRvci52aXNpdEJpbmRpbmdzKCk7CiAgICAgZG9t
VHJlZXNJdGVyYXRvci52aXNpdE1lbW9yeUNhY2hlKCk7Ci0KLSAgICBkb21UcmVlc0l0ZXJhdG9y
LmR1bXBTdGF0aXN0aWNzKGNoaWxkcmVuLCBpbnNwZWN0b3JEYXRhKTsKLSAgICBhZGRNZW1vcnlJ
bnN0cnVtZW50YXRpb25EZWJ1Z0RhdGEoY2hpbGRyZW4sIG1lbW9yeUluc3RydW1lbnRhdGlvbik7
CiB9CiAKIHN0YXRpYyB2b2lkIGFkZFBsYXRmb3JtQ29tcG9uZW50c0luZm8oUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+ID4gY2hpbGRyZW4pCkBAIC02
MTIsMTQgKzYxNSwyMSBAQCB2b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50OjpnZXRQcm9jZXNzTWVt
b3J5RGlzdHJpYnV0aW9uKEVycm9yU3RyaW5nKiwgUmVmUHRyPElucwogICAgIEluc3BlY3RvckRh
dGFDb3VudGVyIGluc3BlY3RvckRhdGE7CiAgICAgaW5zcGVjdG9yRGF0YS5hZGRDb21wb25lbnQo
TWVtb3J5QmxvY2tOYW1lOjppbnNwZWN0b3JKU0hlYXBEYXRhLCBTY3JpcHRQcm9maWxlcjo6cHJv
ZmlsZXJTbmFwc2hvdHNTaXplKCkpOwogCi0gICAgVmlzaXRlZE9iamVjdHMgdmlzaXRlZE9iamVj
dHM7CisgICAgSGFzaFNldDxjb25zdCB2b2lkKj4gYWxsb2NhdGVkT2JqZWN0czsKKyAgICBtX2lu
c3BlY3RvckNsaWVudC0+Z2V0QWxsb2NhdGVkT2JqZWN0cyhhbGxvY2F0ZWRPYmplY3RzKTsKKyAg
ICBNZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnRJbXBsIG1lbW9yeUluc3RydW1lbnRhdGlvbkNs
aWVudDsKKyAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIG1lbW9yeUluc3RydW1lbnRhdGlv
bigmbWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50LCAmYWxsb2NhdGVkT2JqZWN0cyk7CisKICAg
ICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvck1lbW9yeUJsb2NrPiA+IGNoaWxk
cmVuID0gVHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvck1lbW9yeUJsb2NrPjo6Y3JlYXRlKCk7
CiAgICAgY2hpbGRyZW4tPmFkZEl0ZW0oanNIZWFwSW5mbygpKTsKICAgICBjaGlsZHJlbi0+YWRk
SXRlbShyZW5kZXJUcmVlSW5mbyhtX3BhZ2UpKTsgLy8gRklYTUU6IGNvbGxlY3QgZm9yIGFsbCBw
YWdlcz8KLSAgICBjb2xsZWN0RG9tVHJlZUluZm8obV9wYWdlLCBtX2luc3BlY3RvckNsaWVudCwg
dmlzaXRlZE9iamVjdHMsIGNoaWxkcmVuLmdldCgpLCAmaW5zcGVjdG9yRGF0YSk7IC8vIEZJWE1F
OiBjb2xsZWN0IGZvciBhbGwgcGFnZXM/Ci0gICAgY2hpbGRyZW4tPmFkZEl0ZW0oaW5zcGVjdG9y
RGF0YS5kdW1wU3RhdGlzdGljcygpKTsKKyAgICBjb2xsZWN0RG9tVHJlZUluZm8obV9wYWdlLCBt
ZW1vcnlJbnN0cnVtZW50YXRpb24pOyAvLyBGSVhNRTogY29sbGVjdCBmb3IgYWxsIHBhZ2VzPwog
ICAgIGNoaWxkcmVuLT5hZGRJdGVtKGR1bXBET01TdG9yYWdlQ2FjaGUobV9kb21TdG9yYWdlQWdl
bnQtPm1lbW9yeUJ5dGVzVXNlZEJ5U3RvcmFnZUNhY2hlKCkpKTsKICAgICBhZGRQbGF0Zm9ybUNv
bXBvbmVudHNJbmZvKGNoaWxkcmVuKTsKKyAgICBNZW1vcnlVc2FnZVN0YXRzR2VuZXJhdG9yIHN0
YXRzR2VuZXJhdG9yKCZtZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnQsICZtZW1vcnlJbnN0cnVt
ZW50YXRpb24pOworICAgIHN0YXRzR2VuZXJhdG9yLmR1bXAoY2hpbGRyZW4uZ2V0KCkpOworICAg
IGluc3BlY3RvckRhdGEuYWRkQ29tcG9uZW50KE1lbW9yeUJsb2NrTmFtZTo6aW5zcGVjdG9yRE9N
RGF0YSwgbWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50LnNlbGZTaXplKCkgKyBtZW1vcnlJbnN0
cnVtZW50YXRpb24uc2VsZlNpemUoKSk7CisgICAgY2hpbGRyZW4tPmFkZEl0ZW0oaW5zcGVjdG9y
RGF0YS5kdW1wU3RhdGlzdGljcygpKTsKICAgICBwcm9jZXNzTWVtb3J5LT5zZXRDaGlsZHJlbihj
aGlsZHJlbik7CiAKICAgICBzaXplX3QgcHJpdmF0ZUJ5dGVzID0gMDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9NZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9NZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmNwcAppbmRl
eCA4MjJlYjlmMTU2MWM4ZmNkNWZjYzRlY2ZlOGM5NTE4YWI0YmVmYTA4Li4wN2I1OTg2ODMxMTlj
MjM4NDUwNjk1OGU5NGY3Njg4YzlmN2VhZDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL01lbW9yeUluc3RydW1lbnRhdGlvbkltcGwuY3BwCkBAIC0zNywxMiArMzcs
MTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1NZW1vcnlJbnN0cnVtZW50YXRpb25JbXBs
OjpNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsKFZpc2l0ZWRPYmplY3RzJiB2aXNpdGVkT2JqZWN0
cywgY29uc3QgVmlzaXRlZE9iamVjdHMqIGFsbG9jYXRlZE9iamVjdHMpCi0gICAgOiBtX3Zpc2l0
ZWRPYmplY3RzKHZpc2l0ZWRPYmplY3RzKQotICAgICwgbV9hbGxvY2F0ZWRPYmplY3RzKGFsbG9j
YXRlZE9iamVjdHMpCi0gICAgLCBtX3RvdGFsQ291bnRlZE9iamVjdHMoMCkKLSAgICAsIG1fdG90
YWxPYmplY3RzTm90SW5BbGxvY2F0ZWRTZXQoMCkKK3ZvaWQgTWVtb3J5SW5zdHJ1bWVudGF0aW9u
Q2xpZW50SW1wbDo6Y291bnRPYmplY3RTaXplKE1lbW9yeU9iamVjdFR5cGUgb2JqZWN0VHlwZSwg
c2l6ZV90IHNpemUpCiB7CisgICAgQVNTRVJUKG9iamVjdFR5cGUpOworICAgIFR5cGVUb1NpemVN
YXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3RvdGFsU2l6ZXMuYWRkKG9iamVjdFR5cGUsIHNpemUp
OworICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kICs9IHNpemU7CisgICAgKyttX3RvdGFsQ291bnRlZE9iamVjdHM7Cit9CisKK2Jvb2wg
TWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50SW1wbDo6dmlzaXRlZChjb25zdCB2b2lkKiBvYmpl
Y3QpCit7CisgICAgcmV0dXJuICFtX3Zpc2l0ZWRPYmplY3RzLmFkZChvYmplY3QpLmlzTmV3RW50
cnk7CiB9CiAKIHZvaWQgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbDo6cHJvY2Vzc0RlZmVycmVk
SW5zdHJ1bWVudGVkUG9pbnRlcnMoKQpAQCAtNTQsMjUgKzYwLDExIEBAIHZvaWQgTWVtb3J5SW5z
dHJ1bWVudGF0aW9uSW1wbDo6cHJvY2Vzc0RlZmVycmVkSW5zdHJ1bWVudGVkUG9pbnRlcnMoKQog
ICAgIH0KIH0KIAotdm9pZCBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsOjpjb3VudE9iamVjdFNp
emUoTWVtb3J5T2JqZWN0VHlwZSBvYmplY3RUeXBlLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBBU1NF
UlQob2JqZWN0VHlwZSk7Ci0gICAgVHlwZVRvU2l6ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1f
dG90YWxTaXplcy5hZGQob2JqZWN0VHlwZSwgc2l6ZSk7Ci0gICAgaWYgKCFyZXN1bHQuaXNOZXdF
bnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgKz0gc2l6ZTsKLSAgICArK21f
dG90YWxDb3VudGVkT2JqZWN0czsKLX0KLQogdm9pZCBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBs
OjpkZWZlckluc3RydW1lbnRlZFBvaW50ZXIoUGFzc093blB0cjxJbnN0cnVtZW50ZWRQb2ludGVy
QmFzZT4gcG9pbnRlcikKIHsKICAgICBtX2RlZmVycmVkSW5zdHJ1bWVudGVkUG9pbnRlcnMuYXBw
ZW5kKHBvaW50ZXIpOwogfQogCi1ib29sIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGw6OnZpc2l0
ZWQoY29uc3Qgdm9pZCogb2JqZWN0KQotewotICAgIHJldHVybiAhbV92aXNpdGVkT2JqZWN0cy5h
ZGQob2JqZWN0KS5pc05ld0VudHJ5OwotfQotCiB2b2lkIE1lbW9yeUluc3RydW1lbnRhdGlvbklt
cGw6OmNoZWNrQ291bnRlZE9iamVjdChjb25zdCB2b2lkKiBvYmplY3QpCiB7CiAgICAgaWYgKCFj
aGVja0luc3RydW1lbnRlZE9iamVjdHMoKSkKQEAgLTg4LDcgKzgwLDcgQEAgdm9pZCBNZW1vcnlJ
bnN0cnVtZW50YXRpb25JbXBsOjpjaGVja0NvdW50ZWRPYmplY3QoY29uc3Qgdm9pZCogb2JqZWN0
KQogCiBzaXplX3QgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbDo6c2VsZlNpemUoKSBjb25zdAog
ewotICAgIHJldHVybiBjYWxjdWxhdGVDb250YWluZXJTaXplKG1fdmlzaXRlZE9iamVjdHMpICsg
Y2FsY3VsYXRlQ29udGFpbmVyU2l6ZShtX2RlZmVycmVkSW5zdHJ1bWVudGVkUG9pbnRlcnMpOwor
ICAgIHJldHVybiBjYWxjdWxhdGVDb250YWluZXJTaXplKG1fZGVmZXJyZWRJbnN0cnVtZW50ZWRQ
b2ludGVycyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9NZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbC5oCmluZGV4IGVmOTU0
NmQ4NzM1ZDE4OWFhOGQ5MThlZTc1NTQyYzlmOGE4NjBjZDkuLjQ1ZGJiNjc4N2JlMzg3OTQyOGZh
NGJlNGQ3OTk1Mzg5MzEwYjEwOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9NZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL01lbW9yeUluc3RydW1lbnRhdGlvbkltcGwuaApAQCAtNDQsMTEgKzQ0LDEwIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogdHlwZWRlZiBIYXNoU2V0PGNvbnN0IHZvaWQqPiBWaXNpdGVkT2Jq
ZWN0czsKIAotY2xhc3MgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCA6IHB1YmxpYyBXVEY6Ok1l
bW9yeUluc3RydW1lbnRhdGlvbiB7CitjbGFzcyBNZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnRJ
bXBsIDogcHVibGljIFdURjo6TWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50IHsKIHB1YmxpYzoK
LSAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsKFZpc2l0ZWRPYmplY3RzJiwgY29uc3QgVmlz
aXRlZE9iamVjdHMqIGFsbG9jYXRlZE9iamVjdHMgPSAwKTsKKyAgICBNZW1vcnlJbnN0cnVtZW50
YXRpb25DbGllbnRJbXBsKCkgOiBtX3RvdGFsQ291bnRlZE9iamVjdHMoMCkgeyB9CiAKLSAgICBz
aXplX3Qgc2VsZlNpemUoKSBjb25zdDsKICAgICBzaXplX3QgdG90YWxTaXplKE1lbW9yeU9iamVj
dFR5cGUgb2JqZWN0VHlwZSkgY29uc3QKICAgICB7CiAgICAgICAgIFR5cGVUb1NpemVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGkgPSBtX3RvdGFsU2l6ZXMuZmluZChvYmplY3RUeXBlKTsKQEAgLTYzLDIz
ICs2Miw0NSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzaXplOwogICAgIH0KIAotICAgIGJv
b2wgY2hlY2tJbnN0cnVtZW50ZWRPYmplY3RzKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvY2F0ZWRP
YmplY3RzOyB9CisgICAgc2l6ZV90IHNlbGZTaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3Zpc2l0ZWRPYmplY3RzLmNhcGFjaXR5KCkgKiBzaXplb2YoVmlzaXRlZE9iamVjdHM6
OlZhbHVlVHlwZSkgKworICAgICAgICAgICAgbV90b3RhbFNpemVzLmNhcGFjaXR5KCkgKiBzaXpl
b2YoVHlwZVRvU2l6ZU1hcDo6VmFsdWVUeXBlKTsKKyAgICB9CisKKyAgICBzaXplX3QgdmlzaXRl
ZE9iamVjdHMoKSBjb25zdCB7IHJldHVybiBtX3Zpc2l0ZWRPYmplY3RzLnNpemUoKTsgfQogICAg
IHNpemVfdCB0b3RhbENvdW50ZWRPYmplY3RzKCkgY29uc3QgeyByZXR1cm4gbV90b3RhbENvdW50
ZWRPYmplY3RzOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY291bnRPYmplY3RTaXplKE1lbW9yeU9i
amVjdFR5cGUsIHNpemVfdCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHZpc2l0ZWQoY29u
c3Qgdm9pZCopIE9WRVJSSURFOworCitwcml2YXRlOgorICAgIHR5cGVkZWYgSGFzaE1hcDxNZW1v
cnlPYmplY3RUeXBlLCBzaXplX3Q+IFR5cGVUb1NpemVNYXA7CisgICAgVHlwZVRvU2l6ZU1hcCBt
X3RvdGFsU2l6ZXM7CisgICAgVmlzaXRlZE9iamVjdHMgbV92aXNpdGVkT2JqZWN0czsKKyAgICBz
aXplX3QgbV90b3RhbENvdW50ZWRPYmplY3RzOworfTsKKworY2xhc3MgTWVtb3J5SW5zdHJ1bWVu
dGF0aW9uSW1wbCA6IHB1YmxpYyBXVEY6Ok1lbW9yeUluc3RydW1lbnRhdGlvbiB7CitwdWJsaWM6
CisgICAgZXhwbGljaXQgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbChXVEY6Ok1lbW9yeUluc3Ry
dW1lbnRhdGlvbkNsaWVudCogY2xpZW50LCBjb25zdCBWaXNpdGVkT2JqZWN0cyogYWxsb2NhdGVk
T2JqZWN0cyA9IDApCisgICAgICAgIDogTWVtb3J5SW5zdHJ1bWVudGF0aW9uKGNsaWVudCkKKyAg
ICAgICAgLCBtX2FsbG9jYXRlZE9iamVjdHMoYWxsb2NhdGVkT2JqZWN0cykKKyAgICAgICAgLCBt
X3RvdGFsT2JqZWN0c05vdEluQWxsb2NhdGVkU2V0KDApCisgICAgeworICAgIH0KKworICAgIHNp
emVfdCBzZWxmU2l6ZSgpIGNvbnN0OworICAgIGJvb2wgY2hlY2tJbnN0cnVtZW50ZWRPYmplY3Rz
KCkgY29uc3QgeyByZXR1cm4gbV9hbGxvY2F0ZWRPYmplY3RzOyB9CiAgICAgc2l6ZV90IHRvdGFs
T2JqZWN0c05vdEluQWxsb2NhdGVkU2V0KCkgY29uc3QgeyByZXR1cm4gbV90b3RhbE9iamVjdHNO
b3RJbkFsbG9jYXRlZFNldDsgfQogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBjb3VudE9i
amVjdFNpemUoTWVtb3J5T2JqZWN0VHlwZSwgc2l6ZV90KSBPVkVSUklERTsKICAgICB2aXJ0dWFs
IHZvaWQgZGVmZXJJbnN0cnVtZW50ZWRQb2ludGVyKFBhc3NPd25QdHI8SW5zdHJ1bWVudGVkUG9p
bnRlckJhc2U+KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRlZChjb25zdCB2b2lk
KikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NEZWZlcnJlZEluc3RydW1lbnRl
ZFBvaW50ZXJzKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGNoZWNrQ291bnRlZE9iamVj
dChjb25zdCB2b2lkKikgT1ZFUlJJREU7CiAKLSAgICB0eXBlZGVmIEhhc2hNYXA8TWVtb3J5T2Jq
ZWN0VHlwZSwgc2l6ZV90PiBUeXBlVG9TaXplTWFwOwotICAgIFR5cGVUb1NpemVNYXAgbV90b3Rh
bFNpemVzOwotICAgIFZpc2l0ZWRPYmplY3RzJiBtX3Zpc2l0ZWRPYmplY3RzOwogICAgIFZlY3Rv
cjxPd25QdHI8SW5zdHJ1bWVudGVkUG9pbnRlckJhc2U+ID4gbV9kZWZlcnJlZEluc3RydW1lbnRl
ZFBvaW50ZXJzOwogICAgIGNvbnN0IFZpc2l0ZWRPYmplY3RzKiBtX2FsbG9jYXRlZE9iamVjdHM7
Ci0gICAgc2l6ZV90IG1fdG90YWxDb3VudGVkT2JqZWN0czsKICAgICBzaXplX3QgbV90b3RhbE9i
amVjdHNOb3RJbkFsbG9jYXRlZFNldDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL01lbW9yeUluc3RydW1lbnRhdGlvblRlc3QuY3BwCmluZGV4IDRl
OGI0OTg1OTU3NTBkYWIxY2IzZGE0OGU3NGExNzExZjRjMGI2Y2UuLjJmNDAxN2VlMjUyYTFhZTE0
OGY3YjBhMGYzZjQxYzg5OWY2ZjlkZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9NZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LmNwcApAQCAtNTMsNiAr
NTMsMjEgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSB7CiAKK2NsYXNz
IEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgeworcHVibGljOgorICAgIEluc3RydW1lbnRhdGlv
blRlc3RIZWxwZXIoKSA6IG1fY2xpZW50KCksIG1faW5zdHJ1bWVudGF0aW9uKCZtX2NsaWVudCkg
eyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgYWRkUm9vdE9iamVjdChj
b25zdCBUJiB0KSB7IG1faW5zdHJ1bWVudGF0aW9uLmFkZFJvb3RPYmplY3QodCk7IH0KKyAgICBz
aXplX3QgcmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudC5y
ZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpOyB9CisgICAgaW50IHZpc2l0ZWRPYmplY3RzKCkgY29u
c3QgeyByZXR1cm4gbV9jbGllbnQudmlzaXRlZE9iamVjdHMoKTsgfQorICAgIHNpemVfdCB0b3Rh
bFNpemUoTWVtb3J5T2JqZWN0VHlwZSBvYmplY3RUeXBlKSBjb25zdCB7IHJldHVybiBtX2NsaWVu
dC50b3RhbFNpemUob2JqZWN0VHlwZSk7IH0KKworcHJpdmF0ZToKKyAgICBNZW1vcnlJbnN0cnVt
ZW50YXRpb25DbGllbnRJbXBsIG1fY2xpZW50OworICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbklt
cGwgbV9pbnN0cnVtZW50YXRpb247Cit9OworCiBjbGFzcyBOb3RJbnN0cnVtZW50ZWQgewogcHVi
bGljOgogICAgIE5vdEluc3RydW1lbnRlZChjb25zdCBjaGFyKiA9IDApIHsgfQpAQCAtNzQsNTIg
Kzg5LDQ3IEBAIHB1YmxpYzoKIAogVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCBzaXpl
T2YpCiB7Ci0gICAgVmlzaXRlZE9iamVjdHMgdmlzaXRlZE9iamVjdHM7Ci0gICAgTWVtb3J5SW5z
dHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0ZWRPYmplY3RzKTsKKyAgICBJbnN0cnVtZW50YXRp
b25UZXN0SGVscGVyIGhlbHBlcjsKICAgICBJbnN0cnVtZW50ZWQgaW5zdHJ1bWVudGVkOwotICAg
IGltcGwuYWRkUm9vdE9iamVjdChpbnN0cnVtZW50ZWQpOwotICAgIEVYUEVDVF9FUShzaXplb2Yo
Tm90SW5zdHJ1bWVudGVkKSwgaW1wbC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICBF
WFBFQ1RfRVEoMSwgdmlzaXRlZE9iamVjdHMuc2l6ZSgpKTsKKyAgICBoZWxwZXIuYWRkUm9vdE9i
amVjdChpbnN0cnVtZW50ZWQpOworICAgIEVYUEVDVF9FUShzaXplb2YoTm90SW5zdHJ1bWVudGVk
KSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBo
ZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7CiB9CiAKIFRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9u
VGVzdCwgbnVsbENoZWNrKQogewotICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwot
ICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7CisgICAg
SW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CiAgICAgSW5zdHJ1bWVudGVkKiBpbnN0
cnVtZW50ZWQgPSAwOwotICAgIGltcGwuYWRkUm9vdE9iamVjdChpbnN0cnVtZW50ZWQpOwotICAg
IEVYUEVDVF9FUSgwdSwgaW1wbC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICBFWFBF
Q1RfRVEoMCwgdmlzaXRlZE9iamVjdHMuc2l6ZSgpKTsKKyAgICBoZWxwZXIuYWRkUm9vdE9iamVj
dChpbnN0cnVtZW50ZWQpOworICAgIEVYUEVDVF9FUSgwdSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZv
ckFsbFR5cGVzKCkpOworICAgIEVYUEVDVF9FUSgwLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7
CiB9CiAKIFRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwgcHRyVnNSZWYpCiB7CiAgICAg
ewotICAgICAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0czsKLSAgICAgICAgTWVtb3J5
SW5zdHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0ZWRPYmplY3RzKTsKKyAgICAgICAgSW5zdHJ1
bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CiAgICAgICAgIEluc3RydW1lbnRlZCBpbnN0cnVt
ZW50ZWQ7Ci0gICAgICAgIGltcGwuYWRkUm9vdE9iamVjdCgmaW5zdHJ1bWVudGVkKTsKLSAgICAg
ICAgRVhQRUNUX0VRKHNpemVvZihJbnN0cnVtZW50ZWQpICsgc2l6ZW9mKE5vdEluc3RydW1lbnRl
ZCksIGltcGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgICAgIEVYUEVDVF9FUSgy
LCB2aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAgICAgICBoZWxwZXIuYWRkUm9vdE9iamVjdCgm
aW5zdHJ1bWVudGVkKTsKKyAgICAgICAgRVhQRUNUX0VRKHNpemVvZihJbnN0cnVtZW50ZWQpICsg
c2l6ZW9mKE5vdEluc3RydW1lbnRlZCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygp
KTsKKyAgICAgICAgRVhQRUNUX0VRKDIsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKICAgICB9
CiAgICAgewotICAgICAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0czsKLSAgICAgICAg
TWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0ZWRPYmplY3RzKTsKKyAgICAgICAg
SW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CiAgICAgICAgIEluc3RydW1lbnRlZCBp
bnN0cnVtZW50ZWQ7Ci0gICAgICAgIGltcGwuYWRkUm9vdE9iamVjdChpbnN0cnVtZW50ZWQpOwot
ICAgICAgICBFWFBFQ1RfRVEoc2l6ZW9mKE5vdEluc3RydW1lbnRlZCksIGltcGwucmVwb3J0ZWRT
aXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgICAgIEVYUEVDVF9FUSgxLCB2aXNpdGVkT2JqZWN0cy5z
aXplKCkpOworICAgICAgICBoZWxwZXIuYWRkUm9vdE9iamVjdChpbnN0cnVtZW50ZWQpOworICAg
ICAgICBFWFBFQ1RfRVEoc2l6ZW9mKE5vdEluc3RydW1lbnRlZCksIGhlbHBlci5yZXBvcnRlZFNp
emVGb3JBbGxUeXBlcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDEsIGhlbHBlci52aXNpdGVkT2Jq
ZWN0cygpKTsKICAgICB9CiB9CiAKIFRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwgb3du
UHRyKQogewotICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwotICAgIE1lbW9yeUlu
c3RydW1lbnRhdGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7CisgICAgSW5zdHJ1bWVudGF0
aW9uVGVzdEhlbHBlciBoZWxwZXI7CiAgICAgT3duUHRyPEluc3RydW1lbnRlZD4gaW5zdHJ1bWVu
dGVkKGFkb3B0UHRyKG5ldyBJbnN0cnVtZW50ZWQpKTsKLSAgICBpbXBsLmFkZFJvb3RPYmplY3Qo
aW5zdHJ1bWVudGVkKTsKLSAgICBFWFBFQ1RfRVEoc2l6ZW9mKEluc3RydW1lbnRlZCkgKyBzaXpl
b2YoTm90SW5zdHJ1bWVudGVkKSwgaW1wbC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAg
ICBFWFBFQ1RfRVEoMiwgdmlzaXRlZE9iamVjdHMuc2l6ZSgpKTsKKyAgICBoZWxwZXIuYWRkUm9v
dE9iamVjdChpbnN0cnVtZW50ZWQpOworICAgIEVYUEVDVF9FUShzaXplb2YoSW5zdHJ1bWVudGVk
KSArIHNpemVvZihOb3RJbnN0cnVtZW50ZWQpLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlw
ZXMoKSk7CisgICAgRVhQRUNUX0VRKDIsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKIH0KIAog
Y2xhc3MgSW5zdHJ1bWVudGVkUmVmUHRyIDogcHVibGljIFJlZkNvdW50ZWQ8SW5zdHJ1bWVudGVk
UmVmUHRyPiB7CkBAIC0xMzgsMjMgKzE0OCwyMSBAQCBwdWJsaWM6CiAKIFRFU1QoTWVtb3J5SW5z
dHJ1bWVudGF0aW9uVGVzdCwgZGF0YVJlZikKIHsKLSAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVk
T2JqZWN0czsKLSAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVj
dHMpOworICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwogICAgIERhdGFSZWY8
SW5zdHJ1bWVudGVkUmVmUHRyPiBpbnN0cnVtZW50ZWRSZWZQdHI7CiAgICAgaW5zdHJ1bWVudGVk
UmVmUHRyLmluaXQoKTsKLSAgICBpbXBsLmFkZFJvb3RPYmplY3QoaW5zdHJ1bWVudGVkUmVmUHRy
KTsKLSAgICBFWFBFQ1RfRVEoc2l6ZW9mKEluc3RydW1lbnRlZFJlZlB0cikgKyBzaXplb2YoTm90
SW5zdHJ1bWVudGVkKSwgaW1wbC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICBFWFBF
Q1RfRVEoMiwgdmlzaXRlZE9iamVjdHMuc2l6ZSgpKTsKKyAgICBoZWxwZXIuYWRkUm9vdE9iamVj
dChpbnN0cnVtZW50ZWRSZWZQdHIpOworICAgIEVYUEVDVF9FUShzaXplb2YoSW5zdHJ1bWVudGVk
UmVmUHRyKSArIHNpemVvZihOb3RJbnN0cnVtZW50ZWQpLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9y
QWxsVHlwZXMoKSk7CisgICAgRVhQRUNUX0VRKDIsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsK
IH0KIAogVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCByZWZQdHIpCiB7Ci0gICAgVmlz
aXRlZE9iamVjdHMgdmlzaXRlZE9iamVjdHM7Ci0gICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1w
bCBpbXBsKHZpc2l0ZWRPYmplY3RzKTsKKyAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhl
bHBlcjsKICAgICBSZWZQdHI8SW5zdHJ1bWVudGVkUmVmUHRyPiBpbnN0cnVtZW50ZWRSZWZQdHIo
YWRvcHRSZWYobmV3IEluc3RydW1lbnRlZFJlZlB0cikpOwotICAgIGltcGwuYWRkUm9vdE9iamVj
dChpbnN0cnVtZW50ZWRSZWZQdHIpOwotICAgIEVYUEVDVF9FUShzaXplb2YoSW5zdHJ1bWVudGVk
UmVmUHRyKSArIHNpemVvZihOb3RJbnN0cnVtZW50ZWQpLCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFs
bFR5cGVzKCkpOwotICAgIEVYUEVDVF9FUSgyLCB2aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAg
IGhlbHBlci5hZGRSb290T2JqZWN0KGluc3RydW1lbnRlZFJlZlB0cik7CisgICAgRVhQRUNUX0VR
KHNpemVvZihJbnN0cnVtZW50ZWRSZWZQdHIpICsgc2l6ZW9mKE5vdEluc3RydW1lbnRlZCksIGhl
bHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICBFWFBFQ1RfRVEoMiwgaGVscGVy
LnZpc2l0ZWRPYmplY3RzKCkpOwogfQogCiBjbGFzcyBJbnN0cnVtZW50ZWRXaXRoT3duUHRyIDog
cHVibGljIEluc3RydW1lbnRlZCB7CkBAIC0xNzIsMTIgKzE4MCwxMSBAQCBwdWJsaWM6CiAKIFRF
U1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwgb3duUHRyTm90SW5zdHJ1bWVudGVkKQogewot
ICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwotICAgIE1lbW9yeUluc3RydW1lbnRh
dGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7CisgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhl
bHBlciBoZWxwZXI7CiAgICAgSW5zdHJ1bWVudGVkV2l0aE93blB0ciBpbnN0cnVtZW50ZWRXaXRo
T3duUHRyOwotICAgIGltcGwuYWRkUm9vdE9iamVjdChpbnN0cnVtZW50ZWRXaXRoT3duUHRyKTsK
LSAgICBFWFBFQ1RfRVEoMiAqIHNpemVvZihOb3RJbnN0cnVtZW50ZWQpLCBpbXBsLnJlcG9ydGVk
U2l6ZUZvckFsbFR5cGVzKCkpOwotICAgIEVYUEVDVF9FUSgyLCB2aXNpdGVkT2JqZWN0cy5zaXpl
KCkpOworICAgIGhlbHBlci5hZGRSb290T2JqZWN0KGluc3RydW1lbnRlZFdpdGhPd25QdHIpOwor
ICAgIEVYUEVDVF9FUSgyICogc2l6ZW9mKE5vdEluc3RydW1lbnRlZCksIGhlbHBlci5yZXBvcnRl
ZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICBFWFBFQ1RfRVEoMiwgaGVscGVyLnZpc2l0ZWRPYmpl
Y3RzKCkpOwogfQogCiBjbGFzcyBJbnN0cnVtZW50ZWRVbmRlZmluZWQgewpAQCAtMjA1LDEzICsy
MTIsMTIgQEAgcHVibGljOgogCiBURVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIG93bmVy
VHlwZVByb3BhZ2F0aW9uKQogewotICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwot
ICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7CisgICAg
SW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CiAgICAgT3duUHRyPEluc3RydW1lbnRl
ZERPTT4gaW5zdHJ1bWVudGVkRE9NKGFkb3B0UHRyKG5ldyBJbnN0cnVtZW50ZWRET00pKTsKLSAg
ICBpbXBsLmFkZFJvb3RPYmplY3QoaW5zdHJ1bWVudGVkRE9NKTsKLSAgICBFWFBFQ1RfRVEoc2l6
ZW9mKEluc3RydW1lbnRlZERPTSkgKyBzaXplb2YoSW5zdHJ1bWVudGVkVW5kZWZpbmVkKSwgaW1w
bC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICBFWFBFQ1RfRVEoc2l6ZW9mKEluc3Ry
dW1lbnRlZERPTSkgKyBzaXplb2YoSW5zdHJ1bWVudGVkVW5kZWZpbmVkKSwgaW1wbC50b3RhbFNp
emUoV2ViQ29yZU1lbW9yeVR5cGVzOjpET00pKTsKLSAgICBFWFBFQ1RfRVEoMiwgdmlzaXRlZE9i
amVjdHMuc2l6ZSgpKTsKKyAgICBoZWxwZXIuYWRkUm9vdE9iamVjdChpbnN0cnVtZW50ZWRET00p
OworICAgIEVYUEVDVF9FUShzaXplb2YoSW5zdHJ1bWVudGVkRE9NKSArIHNpemVvZihJbnN0cnVt
ZW50ZWRVbmRlZmluZWQpLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAg
RVhQRUNUX0VRKHNpemVvZihJbnN0cnVtZW50ZWRET00pICsgc2l6ZW9mKEluc3RydW1lbnRlZFVu
ZGVmaW5lZCksIGhlbHBlci50b3RhbFNpemUoV2ViQ29yZU1lbW9yeVR5cGVzOjpET00pKTsKKyAg
ICBFWFBFQ1RfRVEoMiwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwogfQogCiBjbGFzcyBOb25W
aXJ0dWFsSW5zdHJ1bWVudGVkIHsKQEAgLTIyNywxMiArMjMzLDExIEBAIHB1YmxpYzoKIAogVEVT
VChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCB2aXNpdEZpcnN0TWVtYmVySW5Ob25WaXJ0dWFs
Q2xhc3MpCiB7Ci0gICAgVmlzaXRlZE9iamVjdHMgdmlzaXRlZE9iamVjdHM7Ci0gICAgTWVtb3J5
SW5zdHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0ZWRPYmplY3RzKTsKKyAgICBJbnN0cnVtZW50
YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKICAgICBOb25WaXJ0dWFsSW5zdHJ1bWVudGVkIG5vblZp
cnR1YWxJbnN0cnVtZW50ZWQ7Ci0gICAgaW1wbC5hZGRSb290T2JqZWN0KCZub25WaXJ0dWFsSW5z
dHJ1bWVudGVkKTsKLSAgICBFWFBFQ1RfRVEoc2l6ZW9mKE5vblZpcnR1YWxJbnN0cnVtZW50ZWQp
ICsgc2l6ZW9mKE5vdEluc3RydW1lbnRlZCksIGltcGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMo
KSk7Ci0gICAgRVhQRUNUX0VRKDIsIHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAgaGVscGVy
LmFkZFJvb3RPYmplY3QoJm5vblZpcnR1YWxJbnN0cnVtZW50ZWQpOworICAgIEVYUEVDVF9FUShz
aXplb2YoTm9uVmlydHVhbEluc3RydW1lbnRlZCkgKyBzaXplb2YoTm90SW5zdHJ1bWVudGVkKSwg
aGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBoZWxw
ZXIudmlzaXRlZE9iamVjdHMoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC0yNTMs
MzIgKzI1OCwyOSBAQCBwdWJsaWM6CiBURVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIHZp
c2l0U3RyaW5ncykKIHsKICAgICB7Ci0gICAgICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmpl
Y3RzOwotICAgICAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVj
dHMpOworICAgICAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKICAgICAgICAg
SW5zdHJ1bWVudGVkT3duZXI8U3RyaW5nPiBzdHJpbmdJbnN0cnVtZW50ZWRPd25lcigiU3RyaW5n
Iik7CiAgICAgICAgIHN0cmluZ0luc3RydW1lbnRlZE93bmVyLm1fdmFsdWUuY2hhcmFjdGVycygp
OyAvLyBGb3JjZSAxNmJpdCBzaGFkb3cgY3JlYXRpb24uCi0gICAgICAgIGltcGwuYWRkUm9vdE9i
amVjdChzdHJpbmdJbnN0cnVtZW50ZWRPd25lcik7Ci0gICAgICAgIEVYUEVDVF9FUShzaXplb2Yo
U3RyaW5nSW1wbCkgKyBzdHJpbmdJbnN0cnVtZW50ZWRPd25lci5tX3ZhbHVlLmxlbmd0aCgpICog
MiwgaW1wbC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICAgICAgRVhQRUNUX0VRKDIs
IHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAgICAgIGhlbHBlci5hZGRSb290T2JqZWN0KHN0
cmluZ0luc3RydW1lbnRlZE93bmVyKTsKKyAgICAgICAgRVhQRUNUX0VRKHNpemVvZihTdHJpbmdJ
bXBsKSArIHN0cmluZ0luc3RydW1lbnRlZE93bmVyLm1fdmFsdWUubGVuZ3RoKCkgKiAyLCBoZWxw
ZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgyLCBoZWxw
ZXIudmlzaXRlZE9iamVjdHMoKSk7CiAgICAgfQogCiAgICAgewotICAgICAgICBWaXNpdGVkT2Jq
ZWN0cyB2aXNpdGVkT2JqZWN0czsKLSAgICAgICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCBp
bXBsKHZpc2l0ZWRPYmplY3RzKTsKKyAgICAgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBo
ZWxwZXI7CiAgICAgICAgIEluc3RydW1lbnRlZE93bmVyPEF0b21pY1N0cmluZz4gYXRvbWljU3Ry
aW5nSW5zdHJ1bWVudGVkT3duZXIoIkF0b21pY1N0cmluZyIpOwogICAgICAgICBhdG9taWNTdHJp
bmdJbnN0cnVtZW50ZWRPd25lci5tX3ZhbHVlLnN0cmluZygpLmNoYXJhY3RlcnMoKTsgLy8gRm9y
Y2UgMTZiaXQgc2hhZG93IGNyZWF0aW9uLgotICAgICAgICBpbXBsLmFkZFJvb3RPYmplY3QoYXRv
bWljU3RyaW5nSW5zdHJ1bWVudGVkT3duZXIpOwotICAgICAgICBFWFBFQ1RfRVEoc2l6ZW9mKFN0
cmluZ0ltcGwpICsgYXRvbWljU3RyaW5nSW5zdHJ1bWVudGVkT3duZXIubV92YWx1ZS5sZW5ndGgo
KSAqIDIsIGltcGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgICAgIEVYUEVDVF9F
USgyLCB2aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAgICAgICBoZWxwZXIuYWRkUm9vdE9iamVj
dChhdG9taWNTdHJpbmdJbnN0cnVtZW50ZWRPd25lcik7CisgICAgICAgIEVYUEVDVF9FUShzaXpl
b2YoU3RyaW5nSW1wbCkgKyBhdG9taWNTdHJpbmdJbnN0cnVtZW50ZWRPd25lci5tX3ZhbHVlLmxl
bmd0aCgpICogMiwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgICAgICBF
WFBFQ1RfRVEoMiwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwogICAgIH0KIAogICAgIHsKLSAg
ICAgICAgVmlzaXRlZE9iamVjdHMgdmlzaXRlZE9iamVjdHM7Ci0gICAgICAgIE1lbW9yeUluc3Ry
dW1lbnRhdGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7CisgICAgICAgIEluc3RydW1lbnRh
dGlvblRlc3RIZWxwZXIgaGVscGVyOwogICAgICAgICBJbnN0cnVtZW50ZWRPd25lcjxDU3RyaW5n
PiBjU3RyaW5nSW5zdHJ1bWVudGVkT3duZXIoIkNTdHJpbmciKTsKLSAgICAgICAgaW1wbC5hZGRS
b290T2JqZWN0KGNTdHJpbmdJbnN0cnVtZW50ZWRPd25lcik7Ci0gICAgICAgIEVYUEVDVF9FUShz
aXplb2YoV1RGOjpDU3RyaW5nQnVmZmVyKSArIGNTdHJpbmdJbnN0cnVtZW50ZWRPd25lci5tX3Zh
bHVlLmxlbmd0aCgpLCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgICAgICBF
WFBFQ1RfRVEoMSwgdmlzaXRlZE9iamVjdHMuc2l6ZSgpKTsKKyAgICAgICAgaGVscGVyLmFkZFJv
b3RPYmplY3QoY1N0cmluZ0luc3RydW1lbnRlZE93bmVyKTsKKyAgICAgICAgRVhQRUNUX0VRKHNp
emVvZihXVEY6OkNTdHJpbmdCdWZmZXIpICsgY1N0cmluZ0luc3RydW1lbnRlZE93bmVyLm1fdmFs
dWUubGVuZ3RoKCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICAgICAg
RVhQRUNUX0VRKDEsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKICAgICB9CiB9CiAKQEAgLTI5
OCwxMyArMzAwLDEyIEBAIHB1YmxpYzoKIAogVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0
LCByZWZQdHJQdHIpCiB7CisgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CiAg
ICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlZlB0cjsKICAgICBUd29Qb2ludGVyc1RvUmVmUHRyIHJv
b3QocmVmUHRyKTsKLSAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0czsKLSAgICBNZW1v
cnlJbnN0cnVtZW50YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMpOwotICAgIGltcGwuYWRk
Um9vdE9iamVjdChyb290KTsKLSAgICBFWFBFQ1RfRVEoc2l6ZW9mKFJlZlB0cjxTdHJpbmdJbXBs
PiksIGltcGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgRVhQRUNUX0VRKDEsIHZp
c2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAgaGVscGVyLmFkZFJvb3RPYmplY3Qocm9vdCk7Cisg
ICAgRVhQRUNUX0VRKHNpemVvZihSZWZQdHI8U3RyaW5nSW1wbD4pLCBoZWxwZXIucmVwb3J0ZWRT
aXplRm9yQWxsVHlwZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIGhlbHBlci52aXNpdGVkT2JqZWN0
cygpKTsKIH0KIAogY2xhc3MgVHdvUG9pbnRlcnNUb093blB0ciB7CkBAIC0zMjMsMTMgKzMyNCwx
MiBAQCBwdWJsaWM6CiAKIFRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwgb3duUHRyUHRy
KQogeworICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwogICAgIE93blB0cjxO
b3RJbnN0cnVtZW50ZWQ+IG93blB0cjsKICAgICBUd29Qb2ludGVyc1RvT3duUHRyIHJvb3Qob3du
UHRyKTsKLSAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0czsKLSAgICBNZW1vcnlJbnN0
cnVtZW50YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMpOwotICAgIGltcGwuYWRkUm9vdE9i
amVjdChyb290KTsKLSAgICBFWFBFQ1RfRVEoc2l6ZW9mKE93blB0cjxOb3RJbnN0cnVtZW50ZWQ+
KSwgaW1wbC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICBFWFBFQ1RfRVEoMSwgdmlz
aXRlZE9iamVjdHMuc2l6ZSgpKTsKKyAgICBoZWxwZXIuYWRkUm9vdE9iamVjdChyb290KTsKKyAg
ICBFWFBFQ1RfRVEoc2l6ZW9mKE93blB0cjxOb3RJbnN0cnVtZW50ZWQ+KSwgaGVscGVyLnJlcG9y
dGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBoZWxwZXIudmlzaXRlZE9i
amVjdHMoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC0zNTEsODYgKzM1MSw3OCBA
QCBwdWJsaWM6CiBURVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIGRldGVjdFJlcG9ydE1l
bW9yeVVzYWdlTWV0aG9kKQogewogICAgIHsKLSAgICAgICAgVmlzaXRlZE9iamVjdHMgdmlzaXRl
ZE9iamVjdHM7Ci0gICAgICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwgaW1wbCh2aXNpdGVk
T2JqZWN0cyk7CisgICAgICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwogCiAg
ICAgICAgIE93blB0cjxJbnN0cnVtZW50ZWRUZW1wbGF0ZTxTdHJpbmc+ID4gdmFsdWUgPSBhZG9w
dFB0cihuZXcgSW5zdHJ1bWVudGVkVGVtcGxhdGU8U3RyaW5nPigiIikpOwogICAgICAgICBJbnN0
cnVtZW50ZWRPd25lcjxJbnN0cnVtZW50ZWRUZW1wbGF0ZTxTdHJpbmc+KiA+IHJvb3QodmFsdWUu
Z2V0KCkpOwotICAgICAgICBpbXBsLmFkZFJvb3RPYmplY3Qocm9vdCk7Ci0gICAgICAgIEVYUEVD
VF9FUShzaXplb2YoSW5zdHJ1bWVudGVkVGVtcGxhdGU8U3RyaW5nPikgKyBzaXplb2YoU3RyaW5n
SW1wbCksIGltcGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgICAgIGhlbHBlci5h
ZGRSb290T2JqZWN0KHJvb3QpOworICAgICAgICBFWFBFQ1RfRVEoc2l6ZW9mKEluc3RydW1lbnRl
ZFRlbXBsYXRlPFN0cmluZz4pICsgc2l6ZW9mKFN0cmluZ0ltcGwpLCBoZWxwZXIucmVwb3J0ZWRT
aXplRm9yQWxsVHlwZXMoKSk7CiAgICAgICAgIC8vIEZJWE1FOiBpdCBpcyBmYWlsaW5nIG9uIENo
cm9taXVtIENhbmFyeSBib3RzIGJ1dCB3b3JrcyBmaW5lIGxvY2FsbHkuCi0gICAgICAgIC8vIEVY
UEVDVF9FUSgyLCB2aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAgICAgICAvLyBFWFBFQ1RfRVEo
MiwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwogICAgIH0KICAgICB7Ci0gICAgICAgIFZpc2l0
ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwotICAgICAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25J
bXBsIGltcGwodmlzaXRlZE9iamVjdHMpOworICAgICAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVs
cGVyIGhlbHBlcjsKIAogICAgICAgICBPd25QdHI8SW5zdHJ1bWVudGVkVGVtcGxhdGU8Tm90SW5z
dHJ1bWVudGVkPiA+IHZhbHVlID0gYWRvcHRQdHIobmV3IEluc3RydW1lbnRlZFRlbXBsYXRlPE5v
dEluc3RydW1lbnRlZD4oIiIpKTsKICAgICAgICAgSW5zdHJ1bWVudGVkT3duZXI8SW5zdHJ1bWVu
dGVkVGVtcGxhdGU8Tm90SW5zdHJ1bWVudGVkPiogPiByb290KHZhbHVlLmdldCgpKTsKLSAgICAg
ICAgaW1wbC5hZGRSb290T2JqZWN0KHJvb3QpOwotICAgICAgICBFWFBFQ1RfRVEoc2l6ZW9mKElu
c3RydW1lbnRlZFRlbXBsYXRlPE5vdEluc3RydW1lbnRlZD4pLCBpbXBsLnJlcG9ydGVkU2l6ZUZv
ckFsbFR5cGVzKCkpOwotICAgICAgICBFWFBFQ1RfRVEoMSwgdmlzaXRlZE9iamVjdHMuc2l6ZSgp
KTsKKyAgICAgICAgaGVscGVyLmFkZFJvb3RPYmplY3Qocm9vdCk7CisgICAgICAgIEVYUEVDVF9F
UShzaXplb2YoSW5zdHJ1bWVudGVkVGVtcGxhdGU8Tm90SW5zdHJ1bWVudGVkPiksIGhlbHBlci5y
ZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDEsIGhlbHBlci52
aXNpdGVkT2JqZWN0cygpKTsKICAgICB9CiB9CiAKIFRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9u
VGVzdCwgdmVjdG9yWmVyb0lubGluZUNhcGFjaXR5KQogewotICAgIFZpc2l0ZWRPYmplY3RzIHZp
c2l0ZWRPYmplY3RzOwotICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwgaW1wbCh2aXNpdGVk
T2JqZWN0cyk7CisgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CiAgICAgSW5z
dHJ1bWVudGVkT3duZXI8VmVjdG9yPGludD4gPiB2ZWN0b3JPd25lcigxNik7Ci0gICAgaW1wbC5h
ZGRSb290T2JqZWN0KHZlY3Rvck93bmVyKTsKLSAgICBFWFBFQ1RfRVEoMTYgKiBzaXplb2YoaW50
KSwgaW1wbC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICBFWFBFQ1RfRVEoMSwgdmlz
aXRlZE9iamVjdHMuc2l6ZSgpKTsKKyAgICBoZWxwZXIuYWRkUm9vdE9iamVjdCh2ZWN0b3JPd25l
cik7CisgICAgRVhQRUNUX0VRKDE2ICogc2l6ZW9mKGludCksIGhlbHBlci5yZXBvcnRlZFNpemVG
b3JBbGxUeXBlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkp
OwogfQogCiBURVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIHZlY3RvckZpZWxkV2l0aElu
bGluZUNhcGFjaXR5KQogewotICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwotICAg
IE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7CisgICAgSW5z
dHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CiAgICAgSW5zdHJ1bWVudGVkT3duZXI8VmVj
dG9yPGludCwgND4gPiB2ZWN0b3JPd25lcjsKLSAgICBpbXBsLmFkZFJvb3RPYmplY3QodmVjdG9y
T3duZXIpOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCBpbXBsLnJlcG9y
dGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgIEVYUEVDVF9FUSgwLCB2aXNpdGVkT2JqZWN0cy5z
aXplKCkpOworICAgIGhlbHBlci5hZGRSb290T2JqZWN0KHZlY3Rvck93bmVyKTsKKyAgICBFWFBF
Q1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5
cGVzKCkpOworICAgIEVYUEVDVF9FUSgwLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7CiB9CiAK
IFRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwgdmVjdG9yRmllbGRXaXRoSW5saW5lQ2Fw
YWNpdHlSZXNpemVkKQogewotICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwotICAg
IE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7CisgICAgSW5z
dHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CiAgICAgSW5zdHJ1bWVudGVkT3duZXI8VmVj
dG9yPGludCwgND4gPiB2ZWN0b3JPd25lcjsKICAgICB2ZWN0b3JPd25lci5tX3ZhbHVlLnJlc2Vy
dmVDYXBhY2l0eSg4KTsKLSAgICBpbXBsLmFkZFJvb3RPYmplY3QodmVjdG9yT3duZXIpOwotICAg
IEVYUEVDVF9FUSg4ICogc2l6ZW9mKGludCksIGltcGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMo
KSk7Ci0gICAgRVhQRUNUX0VRKDEsIHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAgaGVscGVy
LmFkZFJvb3RPYmplY3QodmVjdG9yT3duZXIpOworICAgIEVYUEVDVF9FUSg4ICogc2l6ZW9mKGlu
dCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwg
aGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwogfQogCiBURVNUKE1lbW9yeUluc3RydW1lbnRhdGlv
blRlc3QsIGhlYXBBbGxvY2F0ZWRWZWN0b3JXaXRoSW5saW5lQ2FwYWNpdHkpCiB7Ci0gICAgVmlz
aXRlZE9iamVjdHMgdmlzaXRlZE9iamVjdHM7Ci0gICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1w
bCBpbXBsKHZpc2l0ZWRPYmplY3RzKTsKKyAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhl
bHBlcjsKICAgICBJbnN0cnVtZW50ZWRPd25lcjxPd25QdHI8VmVjdG9yPGludCwgND4gPiA+IHZl
Y3Rvck93bmVyOwogICAgIHZlY3Rvck93bmVyLm1fdmFsdWUgPSBhZG9wdFB0cihuZXcgVmVjdG9y
PGludCwgND4oKSk7Ci0gICAgaW1wbC5hZGRSb290T2JqZWN0KHZlY3Rvck93bmVyKTsKLSAgICBF
WFBFQ1RfRVEoc2l6ZW9mKFZlY3RvcjxpbnQsIDQ+KSwgaW1wbC5yZXBvcnRlZFNpemVGb3JBbGxU
eXBlcygpKTsKLSAgICBFWFBFQ1RfRVEoMSwgdmlzaXRlZE9iamVjdHMuc2l6ZSgpKTsKKyAgICBo
ZWxwZXIuYWRkUm9vdE9iamVjdCh2ZWN0b3JPd25lcik7CisgICAgRVhQRUNUX0VRKHNpemVvZihW
ZWN0b3I8aW50LCA0PiksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICBF
WFBFQ1RfRVEoMSwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwogfQogCiBURVNUKE1lbW9yeUlu
c3RydW1lbnRhdGlvblRlc3QsIGhlYXBBbGxvY2F0ZWRWZWN0b3JXaXRoSW5saW5lQ2FwYWNpdHlS
ZXNpemVkKQogewotICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwotICAgIE1lbW9y
eUluc3RydW1lbnRhdGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7CisgICAgSW5zdHJ1bWVu
dGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CiAgICAgSW5zdHJ1bWVudGVkT3duZXI8T3duUHRyPFZl
Y3RvcjxpbnQsIDQ+ID4gPiB2ZWN0b3JPd25lcjsKICAgICB2ZWN0b3JPd25lci5tX3ZhbHVlID0g
YWRvcHRQdHIobmV3IFZlY3RvcjxpbnQsIDQ+KCkpOwogICAgIHZlY3Rvck93bmVyLm1fdmFsdWUt
PnJlc2VydmVDYXBhY2l0eSg4KTsKLSAgICBpbXBsLmFkZFJvb3RPYmplY3QodmVjdG9yT3duZXIp
OwotICAgIEVYUEVDVF9FUSg4ICogc2l6ZW9mKGludCkgKyBzaXplb2YoVmVjdG9yPGludCwgND4p
LCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgIEVYUEVDVF9FUSgyLCB2aXNp
dGVkT2JqZWN0cy5zaXplKCkpOworICAgIGhlbHBlci5hZGRSb290T2JqZWN0KHZlY3Rvck93bmVy
KTsKKyAgICBFWFBFQ1RfRVEoOCAqIHNpemVvZihpbnQpICsgc2l6ZW9mKFZlY3RvcjxpbnQsIDQ+
KSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBo
ZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7CiB9CiAKIFRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9u
VGVzdCwgdmVjdG9yV2l0aEluc3RydW1lbnRlZFR5cGUpCiB7Ci0gICAgVmlzaXRlZE9iamVjdHMg
dmlzaXRlZE9iamVjdHM7Ci0gICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0
ZWRPYmplY3RzKTsKKyAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKIAogICAg
IHR5cGVkZWYgVmVjdG9yPFN0cmluZz4gU3RyaW5nVmVjdG9yOwogICAgIE93blB0cjxTdHJpbmdW
ZWN0b3I+IHZhbHVlID0gYWRvcHRQdHIobmV3IFN0cmluZ1ZlY3RvcigpKTsKQEAgLTQzOCwxNSAr
NDMwLDE0IEBAIFRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwgdmVjdG9yV2l0aEluc3Ry
dW1lbnRlZFR5cGUpCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQogICAg
ICAgICB2YWx1ZS0+YXBwZW5kKCJzdHJpbmciKTsKICAgICBJbnN0cnVtZW50ZWRPd25lcjxTdHJp
bmdWZWN0b3IqID4gcm9vdCh2YWx1ZS5nZXQoKSk7Ci0gICAgaW1wbC5hZGRSb290T2JqZWN0KHJv
b3QpOwotICAgIEVYUEVDVF9FUShzaXplb2YoU3RyaW5nVmVjdG9yKSArIHNpemVvZihTdHJpbmcp
ICogdmFsdWUtPmNhcGFjaXR5KCkgKyBzaXplb2YoU3RyaW5nSW1wbCkgKiB2YWx1ZS0+c2l6ZSgp
LCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgIEVYUEVDVF9FUShjb3VudCAr
IDIsIChzaXplX3QpdmlzaXRlZE9iamVjdHMuc2l6ZSgpKTsKKyAgICBoZWxwZXIuYWRkUm9vdE9i
amVjdChyb290KTsKKyAgICBFWFBFQ1RfRVEoc2l6ZW9mKFN0cmluZ1ZlY3RvcikgKyBzaXplb2Yo
U3RyaW5nKSAqIHZhbHVlLT5jYXBhY2l0eSgpICsgc2l6ZW9mKFN0cmluZ0ltcGwpICogdmFsdWUt
PnNpemUoKSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgIEVYUEVDVF9F
UShjb3VudCArIDIsIChzaXplX3QpaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwogfQogCiBURVNU
KE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIGhhc2hTZXRXaXRoSW5zdHJ1bWVudGVkVHlwZSkK
IHsKLSAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0czsKLSAgICBNZW1vcnlJbnN0cnVt
ZW50YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMpOworICAgIEluc3RydW1lbnRhdGlvblRl
c3RIZWxwZXIgaGVscGVyOwogCiAgICAgdHlwZWRlZiBIYXNoU2V0PFN0cmluZz4gVmFsdWVUeXBl
OwogICAgIE93blB0cjxWYWx1ZVR5cGU+IHZhbHVlID0gYWRvcHRQdHIobmV3IFZhbHVlVHlwZSgp
KTsKQEAgLTQ1NCwyMSArNDQ1LDIwIEBAIFRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwg
aGFzaFNldFdpdGhJbnN0cnVtZW50ZWRUeXBlKQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkKICAgICAgICAgdmFsdWUtPmFkZChTdHJpbmc6Om51bWJlcihpKSk7CiAgICAg
SW5zdHJ1bWVudGVkT3duZXI8VmFsdWVUeXBlKiA+IHJvb3QodmFsdWUuZ2V0KCkpOwotICAgIGlt
cGwuYWRkUm9vdE9iamVjdChyb290KTsKLSAgICBFWFBFQ1RfRVEoc2l6ZW9mKFZhbHVlVHlwZSkg
KyBzaXplb2YoU3RyaW5nKSAqIHZhbHVlLT5jYXBhY2l0eSgpICsgc2l6ZW9mKFN0cmluZ0ltcGwp
ICogdmFsdWUtPnNpemUoKSwgaW1wbC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICBF
WFBFQ1RfRVEoY291bnQgKyAyLCAoc2l6ZV90KXZpc2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAg
aGVscGVyLmFkZFJvb3RPYmplY3Qocm9vdCk7CisgICAgRVhQRUNUX0VRKHNpemVvZihWYWx1ZVR5
cGUpICsgc2l6ZW9mKFN0cmluZykgKiB2YWx1ZS0+Y2FwYWNpdHkoKSArIHNpemVvZihTdHJpbmdJ
bXBsKSAqIHZhbHVlLT5zaXplKCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsK
KyAgICBFWFBFQ1RfRVEoY291bnQgKyAyLCAoc2l6ZV90KWhlbHBlci52aXNpdGVkT2JqZWN0cygp
KTsKIH0KIAogVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCBhcnJheUJ1ZmZlcikKIHsK
LSAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0czsKLSAgICBNZW1vcnlJbnN0cnVtZW50
YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMpOworICAgIEluc3RydW1lbnRhdGlvblRlc3RI
ZWxwZXIgaGVscGVyOwogCiAgICAgdHlwZWRlZiBJbnN0cnVtZW50ZWRUZW1wbGF0ZTxSZWZQdHI8
QXJyYXlCdWZmZXI+ID4gVmFsdWVUeXBlOwogICAgIFZhbHVlVHlwZSB2YWx1ZShBcnJheUJ1ZmZl
cjo6Y3JlYXRlKDEwMDAsIHNpemVvZihpbnQpKSk7Ci0gICAgaW1wbC5hZGRSb290T2JqZWN0KHZh
bHVlKTsKLSAgICBFWFBFQ1RfRVEoc2l6ZW9mKGludCkgKiAxMDAwICsgc2l6ZW9mKEFycmF5QnVm
ZmVyKSwgaW1wbC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICBFWFBFQ1RfRVEoMiwg
dmlzaXRlZE9iamVjdHMuc2l6ZSgpKTsKKyAgICBoZWxwZXIuYWRkUm9vdE9iamVjdCh2YWx1ZSk7
CisgICAgRVhQRUNUX0VRKHNpemVvZihpbnQpICogMTAwMCArIHNpemVvZihBcnJheUJ1ZmZlciks
IGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICBFWFBFQ1RfRVEoMiwgaGVs
cGVyLnZpc2l0ZWRPYmplY3RzKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165988</attachid>
            <date>2012-09-27 06:25:51 -0700</date>
            <delta_ts>2012-09-27 06:42:19 -0700</delta_ts>
            <desc>comments addressed</desc>
            <filename>bug-97461-20120927172508.patch</filename>
            <type>text/plain</type>
            <size>43899</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5NzM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGRjYzAxNGJmYTFhMDI1Y2EwNDU1ZGU5
OTI1YTg1NDE2MGZjMjM1MjAuLjQxM2EwYTMxMzA5YmVmYTBiZDVlODI4YjQ0MWNjMzlkZmU3NTA0
ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTItMDktMjcgIElseWEgVGlraG9ub3Zza3kgIDxs
b2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IE5NSTogbW92ZSB2
aXNpdGVkIGFuZCBjb3VudE9iamVjdFNpemUgbWV0aG9kcyBpbXBsZW1lbnRhdGlvbiBpbnRvIHNl
cGFyYXRlIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTc0NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGVzZSBtZXRob2RzIGFuZCB0aGUgZGF0YSBjb2xsZWN0ZWQgYnkgdGhlbSBuZWVkIHRv
IGJlIHVzZWQgaW4gdGhlIGluc3RydW1lbnRhdGlvbiBjb2RlIGZvciBvdGhlciBjb21wb25lbnRz
LgorICAgICAgICBBcyBleGFtcGxlIHdoZW4gd2UgYXJlIHZpc2l0aW5nIGJpdG1hcHMgd2UgbmVl
ZCB0byB2aXNpdCBwbGF0Zm9ybSBzcGVjaWZpYyBvYmplY3RzLgorICAgICAgICBUaGVzZSBvYmpl
Y3RzIHdpbGwgYmUgaW5zdHJ1bWVudGVkIHdpdGggaGVscCBvZiBjb21wb25lbnQncyBvd24gaW5z
dHJ1bWVudGF0aW9uIGNvZGUKKyAgICAgICAgYnV0IHdlIGhhdmUgdG8ga2VlcCB0aGUgc2luZ2xl
IHNldCBvZiB2aXNpdGVkIG9iamVjdHMgYW5kIHRoZSBtYXAgb2YgY291bnRlcnMuCisKKyAgICAg
ICAgKiB3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmg6CisgICAgICAgIChNZW1vcnlJbnN0cnVt
ZW50YXRpb25DbGllbnQpOgorICAgICAgICAoV1RGOjpNZW1vcnlJbnN0cnVtZW50YXRpb25DbGll
bnQ6On5NZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnQpOgorICAgICAgICAoV1RGKToKKyAgICAg
ICAgKFdURjo6TWVtb3J5SW5zdHJ1bWVudGF0aW9uOjpNZW1vcnlJbnN0cnVtZW50YXRpb24pOgor
ICAgICAgICAoTWVtb3J5SW5zdHJ1bWVudGF0aW9uKToKKyAgICAgICAgKFdURjo6TWVtb3J5SW5z
dHJ1bWVudGF0aW9uOjpjb3VudE9iamVjdFNpemUpOgorICAgICAgICAoV1RGOjpNZW1vcnlJbnN0
cnVtZW50YXRpb246OnZpc2l0ZWQpOgorCiAyMDEyLTA5LTI2ICBDb3NtaW4gVHJ1dGEgIDxjdHJ1
dGFAcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gQWxsb3cgZGVub3JtYWwgZmxvYXRz
IGluIEFSTSBWRlAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyYjA0NGQzN2UzODUyZmZhNGI2MjNhOGMxYjczYWYx
YThiOGQ5NjYzLi45YTkwZDM5MTJiMjk0YWIwNGM4ZmZiMTAyN2JmMDFlOGQyODFlOWQ5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTItMDktMjcgIElseWEgVGlraG9ub3Zza3kgIDxs
b2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IE5NSTogbW92ZSB2
aXNpdGVkIGFuZCBjb3VudE9iamVjdFNpemUgbWV0aG9kcyBpbXBsZW1lbnRhdGlvbiBpbnRvIHNl
cGFyYXRlIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTc0NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGVzZSBtZXRob2RzIGFuZCB0aGUgZGF0YSBjb2xsZWN0ZWQgYnkgdGhlbSBuZWVkIHRv
IGJlIHVzZWQgaW4gdGhlIGluc3RydW1lbnRhdGlvbiBjb2RlIGZvciBvdGhlciBjb21wb25lbnRz
LgorICAgICAgICBBcyBleGFtcGxlIHdoZW4gd2UgYXJlIHZpc2l0aW5nIGJpdG1hcHMgd2UgbmVl
ZCB0byB2aXNpdCBwbGF0Zm9ybSBzcGVjaWZpYyBvYmplY3RzLgorICAgICAgICBUaGVzZSBvYmpl
Y3RzIHdpbGwgYmUgaW5zdHJ1bWVudGVkIHdpdGggaGVscCBvZiBjb21wb25lbnQncyBvd24gaW5z
dHJ1bWVudGF0aW9uIGNvZGUKKyAgICAgICAgYnV0IHdlIGhhdmUgdG8ga2VlcCB0aGUgc2luZ2xl
IHNldCBvZiB2aXNpdGVkIG9iamVjdHMgYW5kIHRoZSBtYXAgb2YgY291bnRlcnMuCisKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0RG9tVHJlZUluZm8pOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yTWVtb3J5QWdlbnQ6OmdldFByb2Nlc3NNZW1vcnlEaXN0cmlidXRpb24p
OgorICAgICAgICAqIGluc3BlY3Rvci9NZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudEltcGw6OmNvdW50T2Jq
ZWN0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUlu
c3RydW1lbnRhdGlvbkNsaWVudEltcGw6OnZpc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVt
b3J5SW5zdHJ1bWVudGF0aW9uSW1wbDo6c2VsZlNpemUpOgorICAgICAgICAqIGluc3BlY3Rvci9N
ZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlJbnN0
cnVtZW50YXRpb25DbGllbnRJbXBsOjpNZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnRJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudEltcGw6OnNlbGZT
aXplKToKKyAgICAgICAgKE1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudEltcGwpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50SW1wbDo6dmlzaXRlZE9iamVj
dHMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChNZW1vcnlJbnN0cnVtZW50YXRpb25J
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUluc3RydW1lbnRhdGlvbkltcGw6Ok1lbW9y
eUluc3RydW1lbnRhdGlvbkltcGwpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5SW5zdHJ1bWVu
dGF0aW9uSW1wbDo6Y2hlY2tJbnN0cnVtZW50ZWRPYmplY3RzKToKKwogMjAxMi0wOS0yNyAgS2Vp
c2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4KIAogICAgICAgICBTdWdnZXN0aW9uUGlj
a2VyIHNob3VsZCBzdXBwb3J0IHJ0bApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAzYmUx
NTQ2ZjE5MzFkMjM3NjlhMzRlY2RlNmRlNmJiNWJmYmYyYjFiLi41MzM3YzQxMzlkZjgwNmEyY2Ix
Y2IwNTE3ZmZkY2M4OWIzY2NmNTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI1IEBACisyMDEyLTA5LTI3ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBOTUk6IG1vdmUgdmlzaXRlZCBhbmQgY291
bnRPYmplY3RTaXplIG1ldGhvZHMgaW1wbGVtZW50YXRpb24gaW50byBzZXBhcmF0ZSBjbGFzcy4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3NDYxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlc2UgbWV0
aG9kcyBhbmQgdGhlIGRhdGEgY29sbGVjdGVkIGJ5IHRoZW0gbmVlZCB0byBiZSB1c2VkIGluIHRo
ZSBpbnN0cnVtZW50YXRpb24gY29kZSBmb3Igb3RoZXIgY29tcG9uZW50cy4KKyAgICAgICAgQXMg
ZXhhbXBsZSB3aGVuIHdlIGFyZSB2aXNpdGluZyBiaXRtYXBzIHdlIG5lZWQgdG8gdmlzaXQgcGxh
dGZvcm0gc3BlY2lmaWMgb2JqZWN0cy4KKyAgICAgICAgVGhlc2Ugb2JqZWN0cyB3aWxsIGJlIGlu
c3RydW1lbnRlZCB3aXRoIGhlbHAgb2YgY29tcG9uZW50J3Mgb3duIGluc3RydW1lbnRhdGlvbiBj
b2RlCisgICAgICAgIGJ1dCB3ZSBoYXZlIHRvIGtlZXAgdGhlIHNpbmdsZSBzZXQgb2YgdmlzaXRl
ZCBvYmplY3RzIGFuZCB0aGUgbWFwIG9mIGNvdW50ZXJzLgorCisgICAgICAgICogdGVzdHMvTWVt
b3J5SW5zdHJ1bWVudGF0aW9uVGVzdC5jcHA6CisgICAgICAgIChJbnN0cnVtZW50YXRpb25UZXN0
SGVscGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3RydW1lbnRhdGlvblRlc3RIZWxwZXI6Oklu
c3RydW1lbnRhdGlvblRlc3RIZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zdHJ1bWVudGF0
aW9uVGVzdEhlbHBlcjo6YWRkUm9vdE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnN0cnVt
ZW50YXRpb25UZXN0SGVscGVyOjpyZXBvcnRlZFNpemVGb3JBbGxUeXBlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyOjp2aXNpdGVkT2JqZWN0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyOjp0b3RhbFNpemUpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMi0wOS0yNyAg
S2Vpc2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4KIAogICAgICAgICBTdWdnZXN0aW9u
UGlja2VyIHNob3VsZCBzdXBwb3J0IHJ0bApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvTWVt
b3J5SW5zdHJ1bWVudGF0aW9uLmggYi9Tb3VyY2UvV1RGL3d0Zi9NZW1vcnlJbnN0cnVtZW50YXRp
b24uaAppbmRleCA1OGFiNTAwNzA3MTA4MmU5Yjc1Mjc3MmJmZGNiMGQxZDZjMjY0MTQxLi5mZjBh
NmQ0NDRmMDg1NjhlM2I5N2IyYjMxNDliOGIxMTQzMTFmM2I4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb24uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9NZW1v
cnlJbnN0cnVtZW50YXRpb24uaApAQCAtODMsOCArODMsMTcgQEAgcHJpdmF0ZToKIAogdGVtcGxh
dGU8dHlwZW5hbWUgVD4gdm9pZCByZXBvcnRNZW1vcnlVc2FnZShjb25zdCBUKiBjb25zdCYsIE1l
bW9yeU9iamVjdEluZm8qKTsKIAorY2xhc3MgTWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50IHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5NZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnQoKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgY291bnRPYmplY3RTaXplKE1lbW9yeU9iamVjdFR5cGUsIHNpemVf
dCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdGVkKGNvbnN0IHZvaWQqKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGNoZWNrQ291bnRlZE9iamVjdChjb25zdCB2b2lkKikgPSAwOworfTsKKwog
Y2xhc3MgTWVtb3J5SW5zdHJ1bWVudGF0aW9uIHsKIHB1YmxpYzoKKyAgICBNZW1vcnlJbnN0cnVt
ZW50YXRpb24oTWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50KiBjbGllbnQpIDogbV9jbGllbnQo
Y2xpZW50KSB7IH0KICAgICB2aXJ0dWFsIH5NZW1vcnlJbnN0cnVtZW50YXRpb24oKSB7IH0KIAog
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIGFkZFJvb3RPYmplY3QoY29uc3QgVCYgdCkK
QEAgLTEwMywxMSArMTEyLDEyIEBAIHByb3RlY3RlZDoKICAgICB9OwogCiBwcml2YXRlOgotICAg
IHZpcnR1YWwgdm9pZCBjb3VudE9iamVjdFNpemUoTWVtb3J5T2JqZWN0VHlwZSwgc2l6ZV90KSA9
IDA7CisgICAgdm9pZCBjb3VudE9iamVjdFNpemUoTWVtb3J5T2JqZWN0VHlwZSBvYmplY3RUeXBl
LCBzaXplX3Qgc2l6ZSkgeyBtX2NsaWVudC0+Y291bnRPYmplY3RTaXplKG9iamVjdFR5cGUsIHNp
emUpOyB9CisgICAgYm9vbCB2aXNpdGVkKGNvbnN0IHZvaWQqIHBvaW50ZXIpIHsgcmV0dXJuIG1f
Y2xpZW50LT52aXNpdGVkKHBvaW50ZXIpOyB9CisgICAgdm9pZCBjaGVja0NvdW50ZWRPYmplY3Qo
Y29uc3Qgdm9pZCogcG9pbnRlcikgeyByZXR1cm4gbV9jbGllbnQtPmNoZWNrQ291bnRlZE9iamVj
dChwb2ludGVyKTsgfQorCiAgICAgdmlydHVhbCB2b2lkIGRlZmVySW5zdHJ1bWVudGVkUG9pbnRl
cihQYXNzT3duUHRyPEluc3RydW1lbnRlZFBvaW50ZXJCYXNlPikgPSAwOwotICAgIHZpcnR1YWwg
Ym9vbCB2aXNpdGVkKGNvbnN0IHZvaWQqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NE
ZWZlcnJlZEluc3RydW1lbnRlZFBvaW50ZXJzKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjaGVj
a0NvdW50ZWRPYmplY3QoY29uc3Qgdm9pZCopID0gMDsKIAogICAgIGZyaWVuZCBjbGFzcyBNZW1v
cnlDbGFzc0luZm87CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJpZW5kIHZvaWQgcmVwb3J0
TWVtb3J5VXNhZ2UoY29uc3QgVCogY29uc3QmLCBNZW1vcnlPYmplY3RJbmZvKik7CkBAIC0xNzcs
NiArMTg3LDggQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZE9i
amVjdEltcGwoY29uc3QgVCogY29uc3QmLCBNZW1vcnlPYmplY3RUeXBlLCBNZW1vcnlPd25pbmdU
eXBlKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZE9iamVjdEltcGwoY29uc3Qg
T3duUHRyPFQ+KiBjb25zdCYsIE1lbW9yeU9iamVjdFR5cGUsIE1lbW9yeU93bmluZ1R5cGUpOwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYWRkT2JqZWN0SW1wbChjb25zdCBSZWZQdHI8
VD4qIGNvbnN0JiwgTWVtb3J5T2JqZWN0VHlwZSwgTWVtb3J5T3duaW5nVHlwZSk7CisKKyAgICBN
ZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnQqIG1fY2xpZW50OwogfTsKIAogY2xhc3MgTWVtb3J5
Q2xhc3NJbmZvIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JNZW1vcnlBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVt
b3J5QWdlbnQuY3BwCmluZGV4IDc5MWJiNWY2ODY2NTIwZDM0MzAzZGFiNWY4YzQ3MDJjMWNjMmQ3
YzEuLmZiMGU2ZjMyZTE5YWMzZjkwYTczODE2MThhNmUwOWNjMDQxZTQxOTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcApAQCAtODks
NiArODksOTggQEAgc3RhdGljIGNvbnN0IGNoYXIgZG9tU3RvcmFnZUNhY2hlW10gPSAiRE9NU3Rv
cmFnZUNhY2hlIjsKIAogbmFtZXNwYWNlIHsKIAorY2xhc3MgTWVtb3J5VXNhZ2VTdGF0c0dlbmVy
YXRvciB7CitwdWJsaWM6CisgICAgTWVtb3J5VXNhZ2VTdGF0c0dlbmVyYXRvcihNZW1vcnlJbnN0
cnVtZW50YXRpb25DbGllbnRJbXBsKiBjbGllbnQpIDogbV9jbGllbnQoY2xpZW50KSB7IH0KKwor
ICAgIHZvaWQgZHVtcChUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+KiBj
aGlsZHJlbikKKyAgICB7CisgICAgICAgIGNoaWxkcmVuLT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9y
TWVtb3J5Q2FjaGUoKSk7CisgICAgICAgIGNoaWxkcmVuLT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9y
UGFnZSgpKTsKKyAgICAgICAgY2hpbGRyZW4tPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JFeHRlcm5h
bFJlc291cmNlcygpKTsKKworICAgICAgICBhZGRNZW1vcnlJbnN0cnVtZW50YXRpb25EZWJ1Z0Rh
dGEoY2hpbGRyZW4pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rv
ck1lbW9yeUJsb2NrPiBidWlsZE9iamVjdEZvck1lbW9yeUNhY2hlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHNpemVfdCB0b3RhbFNpemUgPSAwOworCisgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRl
cjo6QXJyYXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+ID4gY2hpbGRyZW4gPSBUeXBlQnVpbGRlcjo6
QXJyYXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+OjpjcmVhdGUoKTsKKyAgICAgICAgdG90YWxTaXpl
ICs9IGFkZE1lbW9yeUJsb2NrRm9yKGNoaWxkcmVuLmdldCgpLCBXZWJDb3JlTWVtb3J5VHlwZXM6
Ok1lbW9yeUNhY2hlU3RydWN0dXJlcyk7CisgICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlC
bG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJj
ZVJhdyk7CisgICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5n
ZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZUNTUyk7CisgICAgICAgIHRv
dGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9y
eVR5cGVzOjpDYWNoZWRSZXNvdXJjZUZvbnQpOworICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVt
b3J5QmxvY2tGb3IoY2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6Q2FjaGVkUmVz
b3VyY2VJbWFnZSk7CisgICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGls
ZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZVNjcmlwdCk7Cisg
ICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2Vi
Q29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZVNWRyk7CisgICAgICAgIHRvdGFsU2l6ZSAr
PSBhZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpD
YWNoZWRSZXNvdXJjZVNoYWRlcik7CisgICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9j
a0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNoZWRSZXNvdXJjZVhT
TFQpOworCisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gYmxvY2sgPSBJbnNw
ZWN0b3JNZW1vcnlCbG9jazo6Y3JlYXRlKCkuc2V0TmFtZShXZWJDb3JlTWVtb3J5VHlwZXM6Ok1l
bW9yeUNhY2hlKTsKKyAgICAgICAgYmxvY2stPnNldFNpemUodG90YWxTaXplKTsKKyAgICAgICAg
YmxvY2stPnNldENoaWxkcmVuKGNoaWxkcmVuLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybiBi
bG9jay5yZWxlYXNlKCk7CisgICAgfQorCisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JNZW1vcnlC
bG9jaz4gYnVpbGRPYmplY3RGb3JQYWdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHNpemVfdCB0
b3RhbFNpemUgPSAwOworCisgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVj
dG9yTWVtb3J5QmxvY2s+ID4gZG9tQ2hpbGRyZW4gPSBUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVj
dG9yTWVtb3J5QmxvY2s+OjpjcmVhdGUoKTsKKyAgICAgICAgdG90YWxTaXplICs9IGFkZE1lbW9y
eUJsb2NrRm9yKGRvbUNoaWxkcmVuLmdldCgpLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkRPTSk7Cisg
ICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9ja0Zvcihkb21DaGlsZHJlbi5nZXQoKSwg
V2ViQ29yZU1lbW9yeVR5cGVzOjpJbWFnZSk7CisgICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1v
cnlCbG9ja0Zvcihkb21DaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOwor
ICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoZG9tQ2hpbGRyZW4uZ2V0KCks
IFdlYkNvcmVNZW1vcnlUeXBlczo6QmluZGluZyk7CisgICAgICAgIHRvdGFsU2l6ZSArPSBhZGRN
ZW1vcnlCbG9ja0Zvcihkb21DaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpMb2Fk
ZXIpOworCisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gZG9tID0gSW5zcGVj
dG9yTWVtb3J5QmxvY2s6OmNyZWF0ZSgpLnNldE5hbWUoV2ViQ29yZU1lbW9yeVR5cGVzOjpQYWdl
KTsKKyAgICAgICAgZG9tLT5zZXRTaXplKHRvdGFsU2l6ZSk7CisgICAgICAgIGRvbS0+c2V0Q2hp
bGRyZW4oZG9tQ2hpbGRyZW4ucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuIGRvbS5yZWxlYXNl
KCk7CisgICAgfQorCisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gYnVpbGRP
YmplY3RGb3JFeHRlcm5hbFJlc291cmNlcygpIGNvbnN0CisgICAgeworICAgICAgICBzaXplX3Qg
dG90YWxTaXplID0gMDsKKworICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PEluc3Bl
Y3Rvck1lbW9yeUJsb2NrPiA+IHJlc291cmNlc0NoaWxkcmVuID0gVHlwZUJ1aWxkZXI6OkFycmF5
PEluc3BlY3Rvck1lbW9yeUJsb2NrPjo6Y3JlYXRlKCk7CisgICAgICAgIHRvdGFsU2l6ZSArPSBh
ZGRNZW1vcnlCbG9ja0ZvcihyZXNvdXJjZXNDaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5
cGVzOjpFeHRlcm5hbFN0cmluZ3MpOworICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5Qmxv
Y2tGb3IocmVzb3VyY2VzQ2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6RXh0ZXJu
YWxBcnJheXMpOworCisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gcmVzb3Vy
Y2VzID0gSW5zcGVjdG9yTWVtb3J5QmxvY2s6OmNyZWF0ZSgpLnNldE5hbWUoV2ViQ29yZU1lbW9y
eVR5cGVzOjpFeHRlcm5hbFJlc291cmNlcyk7CisgICAgICAgIHJlc291cmNlcy0+c2V0U2l6ZSh0
b3RhbFNpemUpOworICAgICAgICByZXNvdXJjZXMtPnNldENoaWxkcmVuKHJlc291cmNlc0NoaWxk
cmVuLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybiByZXNvdXJjZXMucmVsZWFzZSgpOworICAg
IH0KKworICAgIHNpemVfdCBhZGRNZW1vcnlCbG9ja0ZvcihUeXBlQnVpbGRlcjo6QXJyYXk8SW5z
cGVjdG9yTWVtb3J5QmxvY2s+KiBhcnJheSwgTWVtb3J5T2JqZWN0VHlwZSB0eXBlTmFtZSkgY29u
c3QKKyAgICB7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gcmVzdWx0ID0g
SW5zcGVjdG9yTWVtb3J5QmxvY2s6OmNyZWF0ZSgpLnNldE5hbWUodHlwZU5hbWUpOworICAgICAg
ICBzaXplX3Qgc2l6ZSA9IG1fY2xpZW50LT50b3RhbFNpemUodHlwZU5hbWUpOworICAgICAgICBy
ZXN1bHQtPnNldFNpemUoc2l6ZSk7CisgICAgICAgIGFycmF5LT5hZGRJdGVtKHJlc3VsdCk7Cisg
ICAgICAgIHJldHVybiBzaXplOworICAgIH0KKworICAgIHZvaWQgYWRkTWVtb3J5SW5zdHJ1bWVu
dGF0aW9uRGVidWdEYXRhKFR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3JNZW1vcnlCbG9jaz4q
IGNoaWxkcmVuKQorICAgIHsKKyAgICAgICAgaWYgKG1fY2xpZW50LT5jaGVja0luc3RydW1lbnRl
ZE9iamVjdHMoKSkgeworICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck1lbW9yeUJsb2NrPiB0
b3RhbEluc3RydW1lbnRlZCA9IEluc3BlY3Rvck1lbW9yeUJsb2NrOjpjcmVhdGUoKS5zZXROYW1l
KCJJbnN0cnVtZW50ZWRPYmplY3RzQ291bnQiKTsKKyAgICAgICAgICAgIHRvdGFsSW5zdHJ1bWVu
dGVkLT5zZXRTaXplKG1fY2xpZW50LT50b3RhbENvdW50ZWRPYmplY3RzKCkpOworCisgICAgICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yTWVtb3J5QmxvY2s+IGluY29ycmVjdGx5SW5zdHJ1bWVudGVk
ID0gSW5zcGVjdG9yTWVtb3J5QmxvY2s6OmNyZWF0ZSgpLnNldE5hbWUoIkluc3RydW1lbnRlZEJ1
dE5vdEFsbG9jYXRlZE9iamVjdHNDb3VudCIpOworICAgICAgICAgICAgaW5jb3JyZWN0bHlJbnN0
cnVtZW50ZWQtPnNldFNpemUobV9jbGllbnQtPnRvdGFsT2JqZWN0c05vdEluQWxsb2NhdGVkU2V0
KCkpOworCisgICAgICAgICAgICBjaGlsZHJlbi0+YWRkSXRlbSh0b3RhbEluc3RydW1lbnRlZCk7
CisgICAgICAgICAgICBjaGlsZHJlbi0+YWRkSXRlbShpbmNvcnJlY3RseUluc3RydW1lbnRlZCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnRJbXBs
KiBtX2NsaWVudDsKK307CisKIFN0cmluZyBub2RlTmFtZShOb2RlKiBub2RlKQogewogICAgIGlm
IChub2RlLT5kb2N1bWVudCgpLT5pc1hIVE1MRG9jdW1lbnQoKSkKQEAgLTQ2NSwxMDMgKzU1Nywx
NiBAQCBwdWJsaWM6CiAgICAgICAgIG1fbWVtb3J5SW5zdHJ1bWVudGF0aW9uLmFkZFJvb3RPYmpl
Y3QobWVtb3J5Q2FjaGUoKSk7CiAgICAgfQogCi0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JNZW1v
cnlCbG9jaz4gYnVpbGRPYmplY3RGb3JNZW1vcnlDYWNoZSgpIGNvbnN0Ci0gICAgewotICAgICAg
ICBzaXplX3QgdG90YWxTaXplID0gMDsKLQotICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFy
cmF5PEluc3BlY3Rvck1lbW9yeUJsb2NrPiA+IGNoaWxkcmVuID0gVHlwZUJ1aWxkZXI6OkFycmF5
PEluc3BlY3Rvck1lbW9yeUJsb2NrPjo6Y3JlYXRlKCk7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBh
ZGRNZW1vcnlCbG9ja0ZvcihjaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpNZW1v
cnlDYWNoZVN0cnVjdHVyZXMpOwotICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tG
b3IoY2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6Q2FjaGVkUmVzb3VyY2VSYXcp
OwotICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoY2hpbGRyZW4uZ2V0KCks
IFdlYkNvcmVNZW1vcnlUeXBlczo6Q2FjaGVkUmVzb3VyY2VDU1MpOwotICAgICAgICB0b3RhbFNp
emUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoY2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBl
czo6Q2FjaGVkUmVzb3VyY2VGb250KTsKLSAgICAgICAgdG90YWxTaXplICs9IGFkZE1lbW9yeUJs
b2NrRm9yKGNoaWxkcmVuLmdldCgpLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkNhY2hlZFJlc291cmNl
SW1hZ2UpOwotICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoY2hpbGRyZW4u
Z2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6Q2FjaGVkUmVzb3VyY2VTY3JpcHQpOwotICAgICAg
ICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoY2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVN
ZW1vcnlUeXBlczo6Q2FjaGVkUmVzb3VyY2VTVkcpOwotICAgICAgICB0b3RhbFNpemUgKz0gYWRk
TWVtb3J5QmxvY2tGb3IoY2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6Q2FjaGVk
UmVzb3VyY2VTaGFkZXIpOwotICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3Io
Y2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6Q2FjaGVkUmVzb3VyY2VYU0xUKTsK
LQotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yTWVtb3J5QmxvY2s+IGJsb2NrID0gSW5zcGVjdG9y
TWVtb3J5QmxvY2s6OmNyZWF0ZSgpLnNldE5hbWUoV2ViQ29yZU1lbW9yeVR5cGVzOjpNZW1vcnlD
YWNoZSk7Ci0gICAgICAgIGJsb2NrLT5zZXRTaXplKHRvdGFsU2l6ZSk7Ci0gICAgICAgIGJsb2Nr
LT5zZXRDaGlsZHJlbihjaGlsZHJlbi5yZWxlYXNlKCkpOwotICAgICAgICByZXR1cm4gYmxvY2su
cmVsZWFzZSgpOwotICAgIH0KLQotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yTWVtb3J5QmxvY2s+
IGJ1aWxkT2JqZWN0Rm9yUGFnZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBzaXplX3QgdG90YWxT
aXplID0gMDsKLQotICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvck1l
bW9yeUJsb2NrPiA+IGRvbUNoaWxkcmVuID0gVHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvck1l
bW9yeUJsb2NrPjo6Y3JlYXRlKCk7Ci0gICAgICAgIHRvdGFsU2l6ZSArPSBhZGRNZW1vcnlCbG9j
a0Zvcihkb21DaGlsZHJlbi5nZXQoKSwgV2ViQ29yZU1lbW9yeVR5cGVzOjpET00pOwotICAgICAg
ICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5QmxvY2tGb3IoZG9tQ2hpbGRyZW4uZ2V0KCksIFdlYkNv
cmVNZW1vcnlUeXBlczo6SW1hZ2UpOwotICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5Qmxv
Y2tGb3IoZG9tQ2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6Q1NTKTsKLSAgICAg
ICAgdG90YWxTaXplICs9IGFkZE1lbW9yeUJsb2NrRm9yKGRvbUNoaWxkcmVuLmdldCgpLCBXZWJD
b3JlTWVtb3J5VHlwZXM6OkJpbmRpbmcpOwotICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVtb3J5
QmxvY2tGb3IoZG9tQ2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6TG9hZGVyKTsK
LQotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yTWVtb3J5QmxvY2s+IGRvbSA9IEluc3BlY3Rvck1l
bW9yeUJsb2NrOjpjcmVhdGUoKS5zZXROYW1lKFdlYkNvcmVNZW1vcnlUeXBlczo6UGFnZSk7Ci0g
ICAgICAgIGRvbS0+c2V0U2l6ZSh0b3RhbFNpemUpOwotICAgICAgICBkb20tPnNldENoaWxkcmVu
KGRvbUNoaWxkcmVuLnJlbGVhc2UoKSk7Ci0gICAgICAgIHJldHVybiBkb20ucmVsZWFzZSgpOwot
ICAgIH0KLQotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yTWVtb3J5QmxvY2s+IGJ1aWxkT2JqZWN0
Rm9yRXh0ZXJuYWxSZXNvdXJjZXMoKSBjb25zdAotICAgIHsKLSAgICAgICAgc2l6ZV90IHRvdGFs
U2l6ZSA9IDA7Ci0KLSAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3JN
ZW1vcnlCbG9jaz4gPiByZXNvdXJjZXNDaGlsZHJlbiA9IFR5cGVCdWlsZGVyOjpBcnJheTxJbnNw
ZWN0b3JNZW1vcnlCbG9jaz46OmNyZWF0ZSgpOwotICAgICAgICB0b3RhbFNpemUgKz0gYWRkTWVt
b3J5QmxvY2tGb3IocmVzb3VyY2VzQ2hpbGRyZW4uZ2V0KCksIFdlYkNvcmVNZW1vcnlUeXBlczo6
RXh0ZXJuYWxTdHJpbmdzKTsKLSAgICAgICAgdG90YWxTaXplICs9IGFkZE1lbW9yeUJsb2NrRm9y
KHJlc291cmNlc0NoaWxkcmVuLmdldCgpLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkV4dGVybmFsQXJy
YXlzKTsKLQotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yTWVtb3J5QmxvY2s+IHJlc291cmNlcyA9
IEluc3BlY3Rvck1lbW9yeUJsb2NrOjpjcmVhdGUoKS5zZXROYW1lKFdlYkNvcmVNZW1vcnlUeXBl
czo6RXh0ZXJuYWxSZXNvdXJjZXMpOwotICAgICAgICByZXNvdXJjZXMtPnNldFNpemUodG90YWxT
aXplKTsKLSAgICAgICAgcmVzb3VyY2VzLT5zZXRDaGlsZHJlbihyZXNvdXJjZXNDaGlsZHJlbi5y
ZWxlYXNlKCkpOwotICAgICAgICByZXR1cm4gcmVzb3VyY2VzLnJlbGVhc2UoKTsKLSAgICB9Ci0K
LSAgICB2b2lkIGR1bXBTdGF0aXN0aWNzKFR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3JNZW1v
cnlCbG9jaz4qIGNoaWxkcmVuLCBJbnNwZWN0b3JEYXRhQ291bnRlciogaW5zcGVjdG9yRGF0YSkK
LSAgICB7Ci0gICAgICAgIGNoaWxkcmVuLT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yTWVtb3J5Q2Fj
aGUoKSk7Ci0gICAgICAgIGNoaWxkcmVuLT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yUGFnZSgpKTsK
LSAgICAgICAgY2hpbGRyZW4tPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JFeHRlcm5hbFJlc291cmNl
cygpKTsKLQotICAgICAgICBpbnNwZWN0b3JEYXRhLT5hZGRDb21wb25lbnQoTWVtb3J5QmxvY2tO
YW1lOjppbnNwZWN0b3JET01EYXRhLCBtX21lbW9yeUluc3RydW1lbnRhdGlvbi5zZWxmU2l6ZSgp
KTsKLSAgICB9CiAKIHByaXZhdGU6Ci0gICAgc2l6ZV90IGFkZE1lbW9yeUJsb2NrRm9yKFR5cGVC
dWlsZGVyOjpBcnJheTxJbnNwZWN0b3JNZW1vcnlCbG9jaz4qIGFycmF5LCBNZW1vcnlPYmplY3RU
eXBlIHR5cGVOYW1lKSBjb25zdAotICAgIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck1lbW9y
eUJsb2NrPiByZXN1bHQgPSBJbnNwZWN0b3JNZW1vcnlCbG9jazo6Y3JlYXRlKCkuc2V0TmFtZSh0
eXBlTmFtZSk7Ci0gICAgICAgIHNpemVfdCBzaXplID0gbV9tZW1vcnlJbnN0cnVtZW50YXRpb24u
dG90YWxTaXplKHR5cGVOYW1lKTsKLSAgICAgICAgcmVzdWx0LT5zZXRTaXplKHNpemUpOwotICAg
ICAgICBhcnJheS0+YWRkSXRlbShyZXN1bHQpOwotICAgICAgICByZXR1cm4gc2l6ZTsKLSAgICB9
Ci0KICAgICBQYWdlKiBtX3BhZ2U7CiAgICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCYgbV9t
ZW1vcnlJbnN0cnVtZW50YXRpb247CiB9OwogCiB9CiAKLXN0YXRpYyB2b2lkIGFkZE1lbW9yeUlu
c3RydW1lbnRhdGlvbkRlYnVnRGF0YShUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yTWVtb3J5
QmxvY2s+KiBjaGlsZHJlbiwgY29uc3QgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCYgbWVtb3J5
SW5zdHJ1bWVudGF0aW9uKQorc3RhdGljIHZvaWQgY29sbGVjdERvbVRyZWVJbmZvKFBhZ2UqIHBh
Z2UsIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwmIG1lbW9yeUluc3RydW1lbnRhdGlvbikKIHsK
LSAgICBpZiAobWVtb3J5SW5zdHJ1bWVudGF0aW9uLmNoZWNrSW5zdHJ1bWVudGVkT2JqZWN0cygp
KSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gdG90YWxJbnN0cnVtZW50
ZWQgPSBJbnNwZWN0b3JNZW1vcnlCbG9jazo6Y3JlYXRlKCkuc2V0TmFtZSgiSW5zdHJ1bWVudGVk
T2JqZWN0c0NvdW50Iik7Ci0gICAgICAgIHRvdGFsSW5zdHJ1bWVudGVkLT5zZXRTaXplKG1lbW9y
eUluc3RydW1lbnRhdGlvbi50b3RhbENvdW50ZWRPYmplY3RzKCkpOwotCi0gICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4gaW5jb3JyZWN0bHlJbnN0cnVtZW50ZWQgPSBJbnNwZWN0
b3JNZW1vcnlCbG9jazo6Y3JlYXRlKCkuc2V0TmFtZSgiSW5zdHJ1bWVudGVkQnV0Tm90QWxsb2Nh
dGVkT2JqZWN0c0NvdW50Iik7Ci0gICAgICAgIGluY29ycmVjdGx5SW5zdHJ1bWVudGVkLT5zZXRT
aXplKG1lbW9yeUluc3RydW1lbnRhdGlvbi50b3RhbE9iamVjdHNOb3RJbkFsbG9jYXRlZFNldCgp
KTsKLQotICAgICAgICBjaGlsZHJlbi0+YWRkSXRlbSh0b3RhbEluc3RydW1lbnRlZCk7Ci0gICAg
ICAgIGNoaWxkcmVuLT5hZGRJdGVtKGluY29ycmVjdGx5SW5zdHJ1bWVudGVkKTsKLSAgICB9Ci19
Ci0KLXN0YXRpYyB2b2lkIGNvbGxlY3REb21UcmVlSW5mbyhQYWdlKiBwYWdlLCBJbnNwZWN0b3JD
bGllbnQqIGluc3BlY3RvckNsaWVudCwgVmlzaXRlZE9iamVjdHMmIHZpc2l0ZWRPYmplY3RzLCBU
eXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yTWVtb3J5QmxvY2s+KiBjaGlsZHJlbiwgSW5zcGVj
dG9yRGF0YUNvdW50ZXIqIGluc3BlY3RvckRhdGEpCi17Ci0gICAgSGFzaFNldDxjb25zdCB2b2lk
Kj4gYWxsb2NhdGVkT2JqZWN0czsKLSAgICBpbnNwZWN0b3JDbGllbnQtPmdldEFsbG9jYXRlZE9i
amVjdHMoYWxsb2NhdGVkT2JqZWN0cyk7Ci0gICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCBt
ZW1vcnlJbnN0cnVtZW50YXRpb24odmlzaXRlZE9iamVjdHMsIGFsbG9jYXRlZE9iamVjdHMuaXNF
bXB0eSgpID8gMCA6ICZhbGxvY2F0ZWRPYmplY3RzKTsKLQogICAgIEV4dGVybmFsU3RyaW5nc1Jv
b3Qgc3RyaW5nc1Jvb3Q7CiAgICAgbWVtb3J5SW5zdHJ1bWVudGF0aW9uLmFkZFJvb3RPYmplY3Qo
c3RyaW5nc1Jvb3QpOwogCkBAIC01ODIsOSArNTg3LDYgQEAgc3RhdGljIHZvaWQgY29sbGVjdERv
bVRyZWVJbmZvKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQ2xpZW50LCBW
aXMKIAogICAgIGRvbVRyZWVzSXRlcmF0b3IudmlzaXRCaW5kaW5ncygpOwogICAgIGRvbVRyZWVz
SXRlcmF0b3IudmlzaXRNZW1vcnlDYWNoZSgpOwotCi0gICAgZG9tVHJlZXNJdGVyYXRvci5kdW1w
U3RhdGlzdGljcyhjaGlsZHJlbiwgaW5zcGVjdG9yRGF0YSk7Ci0gICAgYWRkTWVtb3J5SW5zdHJ1
bWVudGF0aW9uRGVidWdEYXRhKGNoaWxkcmVuLCBtZW1vcnlJbnN0cnVtZW50YXRpb24pOwogfQog
CiBzdGF0aWMgdm9pZCBhZGRQbGF0Zm9ybUNvbXBvbmVudHNJbmZvKFBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6OkFycmF5PEluc3BlY3Rvck1lbW9yeUJsb2NrPiA+IGNoaWxkcmVuKQpAQCAtNjEyLDE0
ICs2MTQsMjEgQEAgdm9pZCBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6Z2V0UHJvY2Vzc01lbW9yeURp
c3RyaWJ1dGlvbihFcnJvclN0cmluZyosIFJlZlB0cjxJbnMKICAgICBJbnNwZWN0b3JEYXRhQ291
bnRlciBpbnNwZWN0b3JEYXRhOwogICAgIGluc3BlY3RvckRhdGEuYWRkQ29tcG9uZW50KE1lbW9y
eUJsb2NrTmFtZTo6aW5zcGVjdG9ySlNIZWFwRGF0YSwgU2NyaXB0UHJvZmlsZXI6OnByb2ZpbGVy
U25hcHNob3RzU2l6ZSgpKTsKIAotICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwor
ICAgIEhhc2hTZXQ8Y29uc3Qgdm9pZCo+IGFsbG9jYXRlZE9iamVjdHM7CisgICAgbV9pbnNwZWN0
b3JDbGllbnQtPmdldEFsbG9jYXRlZE9iamVjdHMoYWxsb2NhdGVkT2JqZWN0cyk7CisgICAgTWVt
b3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50SW1wbCBtZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnQo
YWxsb2NhdGVkT2JqZWN0cy5pc0VtcHR5KCkgPyAwIDogJmFsbG9jYXRlZE9iamVjdHMpOworICAg
IE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwgbWVtb3J5SW5zdHJ1bWVudGF0aW9uKCZtZW1vcnlJ
bnN0cnVtZW50YXRpb25DbGllbnQpOworCiAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxJ
bnNwZWN0b3JNZW1vcnlCbG9jaz4gPiBjaGlsZHJlbiA9IFR5cGVCdWlsZGVyOjpBcnJheTxJbnNw
ZWN0b3JNZW1vcnlCbG9jaz46OmNyZWF0ZSgpOwogICAgIGNoaWxkcmVuLT5hZGRJdGVtKGpzSGVh
cEluZm8oKSk7CiAgICAgY2hpbGRyZW4tPmFkZEl0ZW0ocmVuZGVyVHJlZUluZm8obV9wYWdlKSk7
IC8vIEZJWE1FOiBjb2xsZWN0IGZvciBhbGwgcGFnZXM/Ci0gICAgY29sbGVjdERvbVRyZWVJbmZv
KG1fcGFnZSwgbV9pbnNwZWN0b3JDbGllbnQsIHZpc2l0ZWRPYmplY3RzLCBjaGlsZHJlbi5nZXQo
KSwgJmluc3BlY3RvckRhdGEpOyAvLyBGSVhNRTogY29sbGVjdCBmb3IgYWxsIHBhZ2VzPwotICAg
IGNoaWxkcmVuLT5hZGRJdGVtKGluc3BlY3RvckRhdGEuZHVtcFN0YXRpc3RpY3MoKSk7CisgICAg
Y29sbGVjdERvbVRyZWVJbmZvKG1fcGFnZSwgbWVtb3J5SW5zdHJ1bWVudGF0aW9uKTsgLy8gRklY
TUU6IGNvbGxlY3QgZm9yIGFsbCBwYWdlcz8KICAgICBjaGlsZHJlbi0+YWRkSXRlbShkdW1wRE9N
U3RvcmFnZUNhY2hlKG1fZG9tU3RvcmFnZUFnZW50LT5tZW1vcnlCeXRlc1VzZWRCeVN0b3JhZ2VD
YWNoZSgpKSk7CiAgICAgYWRkUGxhdGZvcm1Db21wb25lbnRzSW5mbyhjaGlsZHJlbik7CisgICAg
TWVtb3J5VXNhZ2VTdGF0c0dlbmVyYXRvciBzdGF0c0dlbmVyYXRvcigmbWVtb3J5SW5zdHJ1bWVu
dGF0aW9uQ2xpZW50KTsKKyAgICBzdGF0c0dlbmVyYXRvci5kdW1wKGNoaWxkcmVuLmdldCgpKTsK
KyAgICBpbnNwZWN0b3JEYXRhLmFkZENvbXBvbmVudChNZW1vcnlCbG9ja05hbWU6Omluc3BlY3Rv
ckRPTURhdGEsIG1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudC5zZWxmU2l6ZSgpICsgbWVtb3J5
SW5zdHJ1bWVudGF0aW9uLnNlbGZTaXplKCkpOworICAgIGNoaWxkcmVuLT5hZGRJdGVtKGluc3Bl
Y3RvckRhdGEuZHVtcFN0YXRpc3RpY3MoKSk7CiAgICAgcHJvY2Vzc01lbW9yeS0+c2V0Q2hpbGRy
ZW4oY2hpbGRyZW4pOwogCiAgICAgc2l6ZV90IHByaXZhdGVCeXRlcyA9IDA7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbC5jcHAK
aW5kZXggODIyZWI5ZjE1NjFjOGZjZDVmY2M0ZWNmZThjOTUxOGFiNGJlZmEwOC4uODU1YWE0NzVl
NGY1MWExOWM3MTI4MGY3ZDZhOWUzMGVlM2I1NGU2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL01lbW9yeUluc3RydW1lbnRhdGlvbkltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9NZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmNwcApAQCAtMzcsMjQg
KzM3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1NZW1vcnlJbnN0cnVtZW50YXRpb25J
bXBsOjpNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsKFZpc2l0ZWRPYmplY3RzJiB2aXNpdGVkT2Jq
ZWN0cywgY29uc3QgVmlzaXRlZE9iamVjdHMqIGFsbG9jYXRlZE9iamVjdHMpCi0gICAgOiBtX3Zp
c2l0ZWRPYmplY3RzKHZpc2l0ZWRPYmplY3RzKQotICAgICwgbV9hbGxvY2F0ZWRPYmplY3RzKGFs
bG9jYXRlZE9iamVjdHMpCi0gICAgLCBtX3RvdGFsQ291bnRlZE9iamVjdHMoMCkKLSAgICAsIG1f
dG90YWxPYmplY3RzTm90SW5BbGxvY2F0ZWRTZXQoMCkKLXsKLX0KLQotdm9pZCBNZW1vcnlJbnN0
cnVtZW50YXRpb25JbXBsOjpwcm9jZXNzRGVmZXJyZWRJbnN0cnVtZW50ZWRQb2ludGVycygpCi17
Ci0gICAgd2hpbGUgKCFtX2RlZmVycmVkSW5zdHJ1bWVudGVkUG9pbnRlcnMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIE93blB0cjxJbnN0cnVtZW50ZWRQb2ludGVyQmFzZT4gcG9pbnRlciA9IG1fZGVm
ZXJyZWRJbnN0cnVtZW50ZWRQb2ludGVycy5sYXN0KCkucmVsZWFzZSgpOwotICAgICAgICBtX2Rl
ZmVycmVkSW5zdHJ1bWVudGVkUG9pbnRlcnMucmVtb3ZlTGFzdCgpOwotICAgICAgICBwb2ludGVy
LT5wcm9jZXNzKHRoaXMpOwotICAgIH0KLX0KLQotdm9pZCBNZW1vcnlJbnN0cnVtZW50YXRpb25J
bXBsOjpjb3VudE9iamVjdFNpemUoTWVtb3J5T2JqZWN0VHlwZSBvYmplY3RUeXBlLCBzaXplX3Qg
c2l6ZSkKK3ZvaWQgTWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50SW1wbDo6Y291bnRPYmplY3RT
aXplKE1lbW9yeU9iamVjdFR5cGUgb2JqZWN0VHlwZSwgc2l6ZV90IHNpemUpCiB7CiAgICAgQVNT
RVJUKG9iamVjdFR5cGUpOwogICAgIFR5cGVUb1NpemVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBt
X3RvdGFsU2l6ZXMuYWRkKG9iamVjdFR5cGUsIHNpemUpOwpAQCAtNjMsMTcgKzQ2LDEyIEBAIHZv
aWQgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbDo6Y291bnRPYmplY3RTaXplKE1lbW9yeU9iamVj
dFR5cGUgb2JqZWN0VHlwZSwgc2l6CiAgICAgKyttX3RvdGFsQ291bnRlZE9iamVjdHM7CiB9CiAK
LXZvaWQgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbDo6ZGVmZXJJbnN0cnVtZW50ZWRQb2ludGVy
KFBhc3NPd25QdHI8SW5zdHJ1bWVudGVkUG9pbnRlckJhc2U+IHBvaW50ZXIpCi17Ci0gICAgbV9k
ZWZlcnJlZEluc3RydW1lbnRlZFBvaW50ZXJzLmFwcGVuZChwb2ludGVyKTsKLX0KLQotYm9vbCBN
ZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsOjp2aXNpdGVkKGNvbnN0IHZvaWQqIG9iamVjdCkKK2Jv
b2wgTWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50SW1wbDo6dmlzaXRlZChjb25zdCB2b2lkKiBv
YmplY3QpCiB7CiAgICAgcmV0dXJuICFtX3Zpc2l0ZWRPYmplY3RzLmFkZChvYmplY3QpLmlzTmV3
RW50cnk7CiB9CiAKLXZvaWQgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbDo6Y2hlY2tDb3VudGVk
T2JqZWN0KGNvbnN0IHZvaWQqIG9iamVjdCkKK3ZvaWQgTWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xp
ZW50SW1wbDo6Y2hlY2tDb3VudGVkT2JqZWN0KGNvbnN0IHZvaWQqIG9iamVjdCkKIHsKICAgICBp
ZiAoIWNoZWNrSW5zdHJ1bWVudGVkT2JqZWN0cygpKQogICAgICAgICByZXR1cm47CkBAIC04Niw5
ICs2NCwyMyBAQCB2b2lkIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGw6OmNoZWNrQ291bnRlZE9i
amVjdChjb25zdCB2b2lkKiBvYmplY3QpCiAgICAgfQogfQogCit2b2lkIE1lbW9yeUluc3RydW1l
bnRhdGlvbkltcGw6OnByb2Nlc3NEZWZlcnJlZEluc3RydW1lbnRlZFBvaW50ZXJzKCkKK3sKKyAg
ICB3aGlsZSAoIW1fZGVmZXJyZWRJbnN0cnVtZW50ZWRQb2ludGVycy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgT3duUHRyPEluc3RydW1lbnRlZFBvaW50ZXJCYXNlPiBwb2ludGVyID0gbV9kZWZlcnJl
ZEluc3RydW1lbnRlZFBvaW50ZXJzLmxhc3QoKS5yZWxlYXNlKCk7CisgICAgICAgIG1fZGVmZXJy
ZWRJbnN0cnVtZW50ZWRQb2ludGVycy5yZW1vdmVMYXN0KCk7CisgICAgICAgIHBvaW50ZXItPnBy
b2Nlc3ModGhpcyk7CisgICAgfQorfQorCit2b2lkIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGw6
OmRlZmVySW5zdHJ1bWVudGVkUG9pbnRlcihQYXNzT3duUHRyPEluc3RydW1lbnRlZFBvaW50ZXJC
YXNlPiBwb2ludGVyKQoreworICAgIG1fZGVmZXJyZWRJbnN0cnVtZW50ZWRQb2ludGVycy5hcHBl
bmQocG9pbnRlcik7Cit9CisKIHNpemVfdCBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsOjpzZWxm
U2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNhbGN1bGF0ZUNvbnRhaW5lclNpemUobV92aXNp
dGVkT2JqZWN0cykgKyBjYWxjdWxhdGVDb250YWluZXJTaXplKG1fZGVmZXJyZWRJbnN0cnVtZW50
ZWRQb2ludGVycyk7CisgICAgcmV0dXJuIGNhbGN1bGF0ZUNvbnRhaW5lclNpemUobV9kZWZlcnJl
ZEluc3RydW1lbnRlZFBvaW50ZXJzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL01lbW9yeUluc3RydW1lbnRhdGlvbklt
cGwuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9NZW1vcnlJbnN0cnVtZW50YXRpb25JbXBs
LmgKaW5kZXggZWY5NTQ2ZDg3MzVkMTg5YWE4ZDkxOGVlNzU1NDJjOWY4YTg2MGNkOS4uNjQ2NjE3
MWU0Y2NjYTcwNjNkNTMyZjc0NThkYTA3N2VhNTk3YzVhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL01lbW9yeUluc3RydW1lbnRhdGlvbkltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbC5oCkBAIC00NCwxMSAr
NDQsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0eXBlZGVmIEhhc2hTZXQ8Y29uc3Qgdm9p
ZCo+IFZpc2l0ZWRPYmplY3RzOwogCi1jbGFzcyBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIDog
cHVibGljIFdURjo6TWVtb3J5SW5zdHJ1bWVudGF0aW9uIHsKK2NsYXNzIE1lbW9yeUluc3RydW1l
bnRhdGlvbkNsaWVudEltcGwgOiBwdWJsaWMgV1RGOjpNZW1vcnlJbnN0cnVtZW50YXRpb25DbGll
bnQgewogcHVibGljOgotICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwoVmlzaXRlZE9iamVj
dHMmLCBjb25zdCBWaXNpdGVkT2JqZWN0cyogYWxsb2NhdGVkT2JqZWN0cyA9IDApOworICAgIGV4
cGxpY2l0IE1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudEltcGwoVmlzaXRlZE9iamVjdHMqIGFs
bG9jYXRlZE9iamVjdHMpCisgICAgICAgIDogbV9hbGxvY2F0ZWRPYmplY3RzKGFsbG9jYXRlZE9i
amVjdHMpCisgICAgICAgICwgbV90b3RhbENvdW50ZWRPYmplY3RzKDApCisgICAgICAgICwgbV90
b3RhbE9iamVjdHNOb3RJbkFsbG9jYXRlZFNldCgwKQorICAgIHsgfQogCi0gICAgc2l6ZV90IHNl
bGZTaXplKCkgY29uc3Q7CiAgICAgc2l6ZV90IHRvdGFsU2l6ZShNZW1vcnlPYmplY3RUeXBlIG9i
amVjdFR5cGUpIGNvbnN0CiAgICAgewogICAgICAgICBUeXBlVG9TaXplTWFwOjpjb25zdF9pdGVy
YXRvciBpID0gbV90b3RhbFNpemVzLmZpbmQob2JqZWN0VHlwZSk7CkBAIC02MywyNiArNjYsNDYg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gc2l6ZTsKICAgICB9CiAKKyAgICBzaXplX3Qgc2Vs
ZlNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmlzaXRlZE9iamVjdHMuY2Fw
YWNpdHkoKSAqIHNpemVvZihWaXNpdGVkT2JqZWN0czo6VmFsdWVUeXBlKSArCisgICAgICAgICAg
ICBtX3RvdGFsU2l6ZXMuY2FwYWNpdHkoKSAqIHNpemVvZihUeXBlVG9TaXplTWFwOjpWYWx1ZVR5
cGUpOworICAgIH0KKwogICAgIGJvb2wgY2hlY2tJbnN0cnVtZW50ZWRPYmplY3RzKCkgY29uc3Qg
eyByZXR1cm4gbV9hbGxvY2F0ZWRPYmplY3RzOyB9CisgICAgc2l6ZV90IHZpc2l0ZWRPYmplY3Rz
KCkgY29uc3QgeyByZXR1cm4gbV92aXNpdGVkT2JqZWN0cy5zaXplKCk7IH0KICAgICBzaXplX3Qg
dG90YWxDb3VudGVkT2JqZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fdG90YWxDb3VudGVkT2JqZWN0
czsgfQogICAgIHNpemVfdCB0b3RhbE9iamVjdHNOb3RJbkFsbG9jYXRlZFNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fdG90YWxPYmplY3RzTm90SW5BbGxvY2F0ZWRTZXQ7IH0KIAotcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIHZvaWQgY291bnRPYmplY3RTaXplKE1lbW9yeU9iamVjdFR5cGUsIHNpemVfdCkg
T1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRlZmVySW5zdHJ1bWVudGVkUG9pbnRlcihQYXNz
T3duUHRyPEluc3RydW1lbnRlZFBvaW50ZXJCYXNlPikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBi
b29sIHZpc2l0ZWQoY29uc3Qgdm9pZCopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBwcm9j
ZXNzRGVmZXJyZWRJbnN0cnVtZW50ZWRQb2ludGVycygpIE9WRVJSSURFOwogICAgIHZpcnR1YWwg
dm9pZCBjaGVja0NvdW50ZWRPYmplY3QoY29uc3Qgdm9pZCopIE9WRVJSSURFOwogCitwcml2YXRl
OgogICAgIHR5cGVkZWYgSGFzaE1hcDxNZW1vcnlPYmplY3RUeXBlLCBzaXplX3Q+IFR5cGVUb1Np
emVNYXA7CiAgICAgVHlwZVRvU2l6ZU1hcCBtX3RvdGFsU2l6ZXM7Ci0gICAgVmlzaXRlZE9iamVj
dHMmIG1fdmlzaXRlZE9iamVjdHM7Ci0gICAgVmVjdG9yPE93blB0cjxJbnN0cnVtZW50ZWRQb2lu
dGVyQmFzZT4gPiBtX2RlZmVycmVkSW5zdHJ1bWVudGVkUG9pbnRlcnM7CisgICAgVmlzaXRlZE9i
amVjdHMgbV92aXNpdGVkT2JqZWN0czsKICAgICBjb25zdCBWaXNpdGVkT2JqZWN0cyogbV9hbGxv
Y2F0ZWRPYmplY3RzOwogICAgIHNpemVfdCBtX3RvdGFsQ291bnRlZE9iamVjdHM7CiAgICAgc2l6
ZV90IG1fdG90YWxPYmplY3RzTm90SW5BbGxvY2F0ZWRTZXQ7CiB9OwogCitjbGFzcyBNZW1vcnlJ
bnN0cnVtZW50YXRpb25JbXBsIDogcHVibGljIFdURjo6TWVtb3J5SW5zdHJ1bWVudGF0aW9uIHsK
K3B1YmxpYzoKKyAgICBleHBsaWNpdCBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsKFdURjo6TWVt
b3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50KiBjbGllbnQpCisgICAgICAgIDogTWVtb3J5SW5zdHJ1
bWVudGF0aW9uKGNsaWVudCkKKyAgICB7CisgICAgfQorCisgICAgc2l6ZV90IHNlbGZTaXplKCkg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGRlZmVySW5zdHJ1bWVudGVkUG9p
bnRlcihQYXNzT3duUHRyPEluc3RydW1lbnRlZFBvaW50ZXJCYXNlPikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIHByb2Nlc3NEZWZlcnJlZEluc3RydW1lbnRlZFBvaW50ZXJzKCkgT1ZFUlJJ
REU7CisKKyAgICBWZWN0b3I8T3duUHRyPEluc3RydW1lbnRlZFBvaW50ZXJCYXNlPiA+IG1fZGVm
ZXJyZWRJbnN0cnVtZW50ZWRQb2ludGVyczsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vICFkZWZpbmVkKE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGxfaCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTWVtb3J5SW5zdHJ1bWVudGF0aW9u
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01lbW9yeUluc3RydW1lbnRh
dGlvblRlc3QuY3BwCmluZGV4IDRlOGI0OTg1OTU3NTBkYWIxY2IzZGE0OGU3NGExNzExZjRjMGI2
Y2UuLjExMjA0NDVkYzA1ZWY1N2FmMTNlYTUzODgzOTdlYzE5MWIzZTJkODYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9NZW1vcnlJbnN0cnVtZW50YXRp
b25UZXN0LmNwcApAQCAtNTMsNiArNTMsMjEgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
IG5hbWVzcGFjZSB7CiAKK2NsYXNzIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgeworcHVibGlj
OgorICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIoKSA6IG1fY2xpZW50KDApLCBtX2luc3Ry
dW1lbnRhdGlvbigmbV9jbGllbnQpIHsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAg
ICB2b2lkIGFkZFJvb3RPYmplY3QoY29uc3QgVCYgdCkgeyBtX2luc3RydW1lbnRhdGlvbi5hZGRS
b290T2JqZWN0KHQpOyB9CisgICAgc2l6ZV90IHJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkgY29u
c3QgeyByZXR1cm4gbV9jbGllbnQucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKTsgfQorICAgIGlu
dCB2aXNpdGVkT2JqZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50LnZpc2l0ZWRPYmplY3Rz
KCk7IH0KKyAgICBzaXplX3QgdG90YWxTaXplKE1lbW9yeU9iamVjdFR5cGUgb2JqZWN0VHlwZSkg
Y29uc3QgeyByZXR1cm4gbV9jbGllbnQudG90YWxTaXplKG9iamVjdFR5cGUpOyB9CisKK3ByaXZh
dGU6CisgICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50SW1wbCBtX2NsaWVudDsKKyAgICBN
ZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIG1faW5zdHJ1bWVudGF0aW9uOworfTsKKwogY2xhc3Mg
Tm90SW5zdHJ1bWVudGVkIHsKIHB1YmxpYzoKICAgICBOb3RJbnN0cnVtZW50ZWQoY29uc3QgY2hh
ciogPSAwKSB7IH0KQEAgLTc0LDUyICs4OSw0NyBAQCBwdWJsaWM6CiAKIFRFU1QoTWVtb3J5SW5z
dHJ1bWVudGF0aW9uVGVzdCwgc2l6ZU9mKQogewotICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRP
YmplY3RzOwotICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0
cyk7CisgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CiAgICAgSW5zdHJ1bWVu
dGVkIGluc3RydW1lbnRlZDsKLSAgICBpbXBsLmFkZFJvb3RPYmplY3QoaW5zdHJ1bWVudGVkKTsK
LSAgICBFWFBFQ1RfRVEoc2l6ZW9mKE5vdEluc3RydW1lbnRlZCksIGltcGwucmVwb3J0ZWRTaXpl
Rm9yQWxsVHlwZXMoKSk7Ci0gICAgRVhQRUNUX0VRKDEsIHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7
CisgICAgaGVscGVyLmFkZFJvb3RPYmplY3QoaW5zdHJ1bWVudGVkKTsKKyAgICBFWFBFQ1RfRVEo
c2l6ZW9mKE5vdEluc3RydW1lbnRlZCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygp
KTsKKyAgICBFWFBFQ1RfRVEoMSwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwogfQogCiBURVNU
KE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIG51bGxDaGVjaykKIHsKLSAgICBWaXNpdGVkT2Jq
ZWN0cyB2aXNpdGVkT2JqZWN0czsKLSAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIGltcGwo
dmlzaXRlZE9iamVjdHMpOworICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwog
ICAgIEluc3RydW1lbnRlZCogaW5zdHJ1bWVudGVkID0gMDsKLSAgICBpbXBsLmFkZFJvb3RPYmpl
Y3QoaW5zdHJ1bWVudGVkKTsKLSAgICBFWFBFQ1RfRVEoMHUsIGltcGwucmVwb3J0ZWRTaXplRm9y
QWxsVHlwZXMoKSk7Ci0gICAgRVhQRUNUX0VRKDAsIHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7Cisg
ICAgaGVscGVyLmFkZFJvb3RPYmplY3QoaW5zdHJ1bWVudGVkKTsKKyAgICBFWFBFQ1RfRVEoMHUs
IGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICBFWFBFQ1RfRVEoMCwgaGVs
cGVyLnZpc2l0ZWRPYmplY3RzKCkpOwogfQogCiBURVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRl
c3QsIHB0clZzUmVmKQogewogICAgIHsKLSAgICAgICAgVmlzaXRlZE9iamVjdHMgdmlzaXRlZE9i
amVjdHM7Ci0gICAgICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwgaW1wbCh2aXNpdGVkT2Jq
ZWN0cyk7CisgICAgICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwogICAgICAg
ICBJbnN0cnVtZW50ZWQgaW5zdHJ1bWVudGVkOwotICAgICAgICBpbXBsLmFkZFJvb3RPYmplY3Qo
Jmluc3RydW1lbnRlZCk7Ci0gICAgICAgIEVYUEVDVF9FUShzaXplb2YoSW5zdHJ1bWVudGVkKSAr
IHNpemVvZihOb3RJbnN0cnVtZW50ZWQpLCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkp
OwotICAgICAgICBFWFBFQ1RfRVEoMiwgdmlzaXRlZE9iamVjdHMuc2l6ZSgpKTsKKyAgICAgICAg
aGVscGVyLmFkZFJvb3RPYmplY3QoJmluc3RydW1lbnRlZCk7CisgICAgICAgIEVYUEVDVF9FUShz
aXplb2YoSW5zdHJ1bWVudGVkKSArIHNpemVvZihOb3RJbnN0cnVtZW50ZWQpLCBoZWxwZXIucmVw
b3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgyLCBoZWxwZXIudmlz
aXRlZE9iamVjdHMoKSk7CiAgICAgfQogICAgIHsKLSAgICAgICAgVmlzaXRlZE9iamVjdHMgdmlz
aXRlZE9iamVjdHM7Ci0gICAgICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwgaW1wbCh2aXNp
dGVkT2JqZWN0cyk7CisgICAgICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwog
ICAgICAgICBJbnN0cnVtZW50ZWQgaW5zdHJ1bWVudGVkOwotICAgICAgICBpbXBsLmFkZFJvb3RP
YmplY3QoaW5zdHJ1bWVudGVkKTsKLSAgICAgICAgRVhQRUNUX0VRKHNpemVvZihOb3RJbnN0cnVt
ZW50ZWQpLCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgICAgICBFWFBFQ1Rf
RVEoMSwgdmlzaXRlZE9iamVjdHMuc2l6ZSgpKTsKKyAgICAgICAgaGVscGVyLmFkZFJvb3RPYmpl
Y3QoaW5zdHJ1bWVudGVkKTsKKyAgICAgICAgRVhQRUNUX0VRKHNpemVvZihOb3RJbnN0cnVtZW50
ZWQpLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgICAgIEVYUEVDVF9F
USgxLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7CiAgICAgfQogfQogCiBURVNUKE1lbW9yeUlu
c3RydW1lbnRhdGlvblRlc3QsIG93blB0cikKIHsKLSAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVk
T2JqZWN0czsKLSAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVj
dHMpOworICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwogICAgIE93blB0cjxJ
bnN0cnVtZW50ZWQ+IGluc3RydW1lbnRlZChhZG9wdFB0cihuZXcgSW5zdHJ1bWVudGVkKSk7Ci0g
ICAgaW1wbC5hZGRSb290T2JqZWN0KGluc3RydW1lbnRlZCk7Ci0gICAgRVhQRUNUX0VRKHNpemVv
ZihJbnN0cnVtZW50ZWQpICsgc2l6ZW9mKE5vdEluc3RydW1lbnRlZCksIGltcGwucmVwb3J0ZWRT
aXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgRVhQRUNUX0VRKDIsIHZpc2l0ZWRPYmplY3RzLnNpemUo
KSk7CisgICAgaGVscGVyLmFkZFJvb3RPYmplY3QoaW5zdHJ1bWVudGVkKTsKKyAgICBFWFBFQ1Rf
RVEoc2l6ZW9mKEluc3RydW1lbnRlZCkgKyBzaXplb2YoTm90SW5zdHJ1bWVudGVkKSwgaGVscGVy
LnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBoZWxwZXIudmlz
aXRlZE9iamVjdHMoKSk7CiB9CiAKIGNsYXNzIEluc3RydW1lbnRlZFJlZlB0ciA6IHB1YmxpYyBS
ZWZDb3VudGVkPEluc3RydW1lbnRlZFJlZlB0cj4gewpAQCAtMTM4LDIzICsxNDgsMjEgQEAgcHVi
bGljOgogCiBURVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIGRhdGFSZWYpCiB7Ci0gICAg
VmlzaXRlZE9iamVjdHMgdmlzaXRlZE9iamVjdHM7Ci0gICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9u
SW1wbCBpbXBsKHZpc2l0ZWRPYmplY3RzKTsKKyAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVy
IGhlbHBlcjsKICAgICBEYXRhUmVmPEluc3RydW1lbnRlZFJlZlB0cj4gaW5zdHJ1bWVudGVkUmVm
UHRyOwogICAgIGluc3RydW1lbnRlZFJlZlB0ci5pbml0KCk7Ci0gICAgaW1wbC5hZGRSb290T2Jq
ZWN0KGluc3RydW1lbnRlZFJlZlB0cik7Ci0gICAgRVhQRUNUX0VRKHNpemVvZihJbnN0cnVtZW50
ZWRSZWZQdHIpICsgc2l6ZW9mKE5vdEluc3RydW1lbnRlZCksIGltcGwucmVwb3J0ZWRTaXplRm9y
QWxsVHlwZXMoKSk7Ci0gICAgRVhQRUNUX0VRKDIsIHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7Cisg
ICAgaGVscGVyLmFkZFJvb3RPYmplY3QoaW5zdHJ1bWVudGVkUmVmUHRyKTsKKyAgICBFWFBFQ1Rf
RVEoc2l6ZW9mKEluc3RydW1lbnRlZFJlZlB0cikgKyBzaXplb2YoTm90SW5zdHJ1bWVudGVkKSwg
aGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBoZWxw
ZXIudmlzaXRlZE9iamVjdHMoKSk7CiB9CiAKIFRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVz
dCwgcmVmUHRyKQogewotICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwotICAgIE1l
bW9yeUluc3RydW1lbnRhdGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7CisgICAgSW5zdHJ1
bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CiAgICAgUmVmUHRyPEluc3RydW1lbnRlZFJlZlB0
cj4gaW5zdHJ1bWVudGVkUmVmUHRyKGFkb3B0UmVmKG5ldyBJbnN0cnVtZW50ZWRSZWZQdHIpKTsK
LSAgICBpbXBsLmFkZFJvb3RPYmplY3QoaW5zdHJ1bWVudGVkUmVmUHRyKTsKLSAgICBFWFBFQ1Rf
RVEoc2l6ZW9mKEluc3RydW1lbnRlZFJlZlB0cikgKyBzaXplb2YoTm90SW5zdHJ1bWVudGVkKSwg
aW1wbC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICBFWFBFQ1RfRVEoMiwgdmlzaXRl
ZE9iamVjdHMuc2l6ZSgpKTsKKyAgICBoZWxwZXIuYWRkUm9vdE9iamVjdChpbnN0cnVtZW50ZWRS
ZWZQdHIpOworICAgIEVYUEVDVF9FUShzaXplb2YoSW5zdHJ1bWVudGVkUmVmUHRyKSArIHNpemVv
ZihOb3RJbnN0cnVtZW50ZWQpLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Cisg
ICAgRVhQRUNUX0VRKDIsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKIH0KIAogY2xhc3MgSW5z
dHJ1bWVudGVkV2l0aE93blB0ciA6IHB1YmxpYyBJbnN0cnVtZW50ZWQgewpAQCAtMTcyLDEyICsx
ODAsMTEgQEAgcHVibGljOgogCiBURVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIG93blB0
ck5vdEluc3RydW1lbnRlZCkKIHsKLSAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0czsK
LSAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMpOworICAg
IEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwogICAgIEluc3RydW1lbnRlZFdpdGhP
d25QdHIgaW5zdHJ1bWVudGVkV2l0aE93blB0cjsKLSAgICBpbXBsLmFkZFJvb3RPYmplY3QoaW5z
dHJ1bWVudGVkV2l0aE93blB0cik7Ci0gICAgRVhQRUNUX0VRKDIgKiBzaXplb2YoTm90SW5zdHJ1
bWVudGVkKSwgaW1wbC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICBFWFBFQ1RfRVEo
MiwgdmlzaXRlZE9iamVjdHMuc2l6ZSgpKTsKKyAgICBoZWxwZXIuYWRkUm9vdE9iamVjdChpbnN0
cnVtZW50ZWRXaXRoT3duUHRyKTsKKyAgICBFWFBFQ1RfRVEoMiAqIHNpemVvZihOb3RJbnN0cnVt
ZW50ZWQpLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgRVhQRUNUX0VR
KDIsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKIH0KIAogY2xhc3MgSW5zdHJ1bWVudGVkVW5k
ZWZpbmVkIHsKQEAgLTIwNSwxMyArMjEyLDEyIEBAIHB1YmxpYzoKIAogVEVTVChNZW1vcnlJbnN0
cnVtZW50YXRpb25UZXN0LCBvd25lclR5cGVQcm9wYWdhdGlvbikKIHsKLSAgICBWaXNpdGVkT2Jq
ZWN0cyB2aXNpdGVkT2JqZWN0czsKLSAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIGltcGwo
dmlzaXRlZE9iamVjdHMpOworICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwog
ICAgIE93blB0cjxJbnN0cnVtZW50ZWRET00+IGluc3RydW1lbnRlZERPTShhZG9wdFB0cihuZXcg
SW5zdHJ1bWVudGVkRE9NKSk7Ci0gICAgaW1wbC5hZGRSb290T2JqZWN0KGluc3RydW1lbnRlZERP
TSk7Ci0gICAgRVhQRUNUX0VRKHNpemVvZihJbnN0cnVtZW50ZWRET00pICsgc2l6ZW9mKEluc3Ry
dW1lbnRlZFVuZGVmaW5lZCksIGltcGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAg
RVhQRUNUX0VRKHNpemVvZihJbnN0cnVtZW50ZWRET00pICsgc2l6ZW9mKEluc3RydW1lbnRlZFVu
ZGVmaW5lZCksIGltcGwudG90YWxTaXplKFdlYkNvcmVNZW1vcnlUeXBlczo6RE9NKSk7Ci0gICAg
RVhQRUNUX0VRKDIsIHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAgaGVscGVyLmFkZFJvb3RP
YmplY3QoaW5zdHJ1bWVudGVkRE9NKTsKKyAgICBFWFBFQ1RfRVEoc2l6ZW9mKEluc3RydW1lbnRl
ZERPTSkgKyBzaXplb2YoSW5zdHJ1bWVudGVkVW5kZWZpbmVkKSwgaGVscGVyLnJlcG9ydGVkU2l6
ZUZvckFsbFR5cGVzKCkpOworICAgIEVYUEVDVF9FUShzaXplb2YoSW5zdHJ1bWVudGVkRE9NKSAr
IHNpemVvZihJbnN0cnVtZW50ZWRVbmRlZmluZWQpLCBoZWxwZXIudG90YWxTaXplKFdlYkNvcmVN
ZW1vcnlUeXBlczo6RE9NKSk7CisgICAgRVhQRUNUX0VRKDIsIGhlbHBlci52aXNpdGVkT2JqZWN0
cygpKTsKIH0KIAogY2xhc3MgTm9uVmlydHVhbEluc3RydW1lbnRlZCB7CkBAIC0yMjcsMTIgKzIz
MywxMSBAQCBwdWJsaWM6CiAKIFRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwgdmlzaXRG
aXJzdE1lbWJlckluTm9uVmlydHVhbENsYXNzKQogewotICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0
ZWRPYmplY3RzOwotICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwgaW1wbCh2aXNpdGVkT2Jq
ZWN0cyk7CisgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CiAgICAgTm9uVmly
dHVhbEluc3RydW1lbnRlZCBub25WaXJ0dWFsSW5zdHJ1bWVudGVkOwotICAgIGltcGwuYWRkUm9v
dE9iamVjdCgmbm9uVmlydHVhbEluc3RydW1lbnRlZCk7Ci0gICAgRVhQRUNUX0VRKHNpemVvZihO
b25WaXJ0dWFsSW5zdHJ1bWVudGVkKSArIHNpemVvZihOb3RJbnN0cnVtZW50ZWQpLCBpbXBsLnJl
cG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgIEVYUEVDVF9FUSgyLCB2aXNpdGVkT2JqZWN0
cy5zaXplKCkpOworICAgIGhlbHBlci5hZGRSb290T2JqZWN0KCZub25WaXJ0dWFsSW5zdHJ1bWVu
dGVkKTsKKyAgICBFWFBFQ1RfRVEoc2l6ZW9mKE5vblZpcnR1YWxJbnN0cnVtZW50ZWQpICsgc2l6
ZW9mKE5vdEluc3RydW1lbnRlZCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsK
KyAgICBFWFBFQ1RfRVEoMiwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgpAQCAtMjUzLDMyICsyNTgsMjkgQEAgcHVibGljOgogVEVTVChNZW1vcnlJ
bnN0cnVtZW50YXRpb25UZXN0LCB2aXNpdFN0cmluZ3MpCiB7CiAgICAgewotICAgICAgICBWaXNp
dGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0czsKLSAgICAgICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9u
SW1wbCBpbXBsKHZpc2l0ZWRPYmplY3RzKTsKKyAgICAgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhl
bHBlciBoZWxwZXI7CiAgICAgICAgIEluc3RydW1lbnRlZE93bmVyPFN0cmluZz4gc3RyaW5nSW5z
dHJ1bWVudGVkT3duZXIoIlN0cmluZyIpOwogICAgICAgICBzdHJpbmdJbnN0cnVtZW50ZWRPd25l
ci5tX3ZhbHVlLmNoYXJhY3RlcnMoKTsgLy8gRm9yY2UgMTZiaXQgc2hhZG93IGNyZWF0aW9uLgot
ICAgICAgICBpbXBsLmFkZFJvb3RPYmplY3Qoc3RyaW5nSW5zdHJ1bWVudGVkT3duZXIpOwotICAg
ICAgICBFWFBFQ1RfRVEoc2l6ZW9mKFN0cmluZ0ltcGwpICsgc3RyaW5nSW5zdHJ1bWVudGVkT3du
ZXIubV92YWx1ZS5sZW5ndGgoKSAqIDIsIGltcGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7
Ci0gICAgICAgIEVYUEVDVF9FUSgyLCB2aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAgICAgICBo
ZWxwZXIuYWRkUm9vdE9iamVjdChzdHJpbmdJbnN0cnVtZW50ZWRPd25lcik7CisgICAgICAgIEVY
UEVDVF9FUShzaXplb2YoU3RyaW5nSW1wbCkgKyBzdHJpbmdJbnN0cnVtZW50ZWRPd25lci5tX3Zh
bHVlLmxlbmd0aCgpICogMiwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAg
ICAgICBFWFBFQ1RfRVEoMiwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwogICAgIH0KIAogICAg
IHsKLSAgICAgICAgVmlzaXRlZE9iamVjdHMgdmlzaXRlZE9iamVjdHM7Ci0gICAgICAgIE1lbW9y
eUluc3RydW1lbnRhdGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7CisgICAgICAgIEluc3Ry
dW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwogICAgICAgICBJbnN0cnVtZW50ZWRPd25lcjxB
dG9taWNTdHJpbmc+IGF0b21pY1N0cmluZ0luc3RydW1lbnRlZE93bmVyKCJBdG9taWNTdHJpbmci
KTsKICAgICAgICAgYXRvbWljU3RyaW5nSW5zdHJ1bWVudGVkT3duZXIubV92YWx1ZS5zdHJpbmco
KS5jaGFyYWN0ZXJzKCk7IC8vIEZvcmNlIDE2Yml0IHNoYWRvdyBjcmVhdGlvbi4KLSAgICAgICAg
aW1wbC5hZGRSb290T2JqZWN0KGF0b21pY1N0cmluZ0luc3RydW1lbnRlZE93bmVyKTsKLSAgICAg
ICAgRVhQRUNUX0VRKHNpemVvZihTdHJpbmdJbXBsKSArIGF0b21pY1N0cmluZ0luc3RydW1lbnRl
ZE93bmVyLm1fdmFsdWUubGVuZ3RoKCkgKiAyLCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVz
KCkpOwotICAgICAgICBFWFBFQ1RfRVEoMiwgdmlzaXRlZE9iamVjdHMuc2l6ZSgpKTsKKyAgICAg
ICAgaGVscGVyLmFkZFJvb3RPYmplY3QoYXRvbWljU3RyaW5nSW5zdHJ1bWVudGVkT3duZXIpOwor
ICAgICAgICBFWFBFQ1RfRVEoc2l6ZW9mKFN0cmluZ0ltcGwpICsgYXRvbWljU3RyaW5nSW5zdHJ1
bWVudGVkT3duZXIubV92YWx1ZS5sZW5ndGgoKSAqIDIsIGhlbHBlci5yZXBvcnRlZFNpemVGb3JB
bGxUeXBlcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDIsIGhlbHBlci52aXNpdGVkT2JqZWN0cygp
KTsKICAgICB9CiAKICAgICB7Ci0gICAgICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3Rz
OwotICAgICAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMp
OworICAgICAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKICAgICAgICAgSW5z
dHJ1bWVudGVkT3duZXI8Q1N0cmluZz4gY1N0cmluZ0luc3RydW1lbnRlZE93bmVyKCJDU3RyaW5n
Iik7Ci0gICAgICAgIGltcGwuYWRkUm9vdE9iamVjdChjU3RyaW5nSW5zdHJ1bWVudGVkT3duZXIp
OwotICAgICAgICBFWFBFQ1RfRVEoc2l6ZW9mKFdURjo6Q1N0cmluZ0J1ZmZlcikgKyBjU3RyaW5n
SW5zdHJ1bWVudGVkT3duZXIubV92YWx1ZS5sZW5ndGgoKSwgaW1wbC5yZXBvcnRlZFNpemVGb3JB
bGxUeXBlcygpKTsKLSAgICAgICAgRVhQRUNUX0VRKDEsIHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7
CisgICAgICAgIGhlbHBlci5hZGRSb290T2JqZWN0KGNTdHJpbmdJbnN0cnVtZW50ZWRPd25lcik7
CisgICAgICAgIEVYUEVDVF9FUShzaXplb2YoV1RGOjpDU3RyaW5nQnVmZmVyKSArIGNTdHJpbmdJ
bnN0cnVtZW50ZWRPd25lci5tX3ZhbHVlLmxlbmd0aCgpLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9y
QWxsVHlwZXMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxLCBoZWxwZXIudmlzaXRlZE9iamVjdHMo
KSk7CiAgICAgfQogfQogCkBAIC0yOTgsMTMgKzMwMCwxMiBAQCBwdWJsaWM6CiAKIFRFU1QoTWVt
b3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwgcmVmUHRyUHRyKQogeworICAgIEluc3RydW1lbnRhdGlv
blRlc3RIZWxwZXIgaGVscGVyOwogICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZWZQdHI7CiAgICAg
VHdvUG9pbnRlcnNUb1JlZlB0ciByb290KHJlZlB0cik7Ci0gICAgVmlzaXRlZE9iamVjdHMgdmlz
aXRlZE9iamVjdHM7Ci0gICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0ZWRP
YmplY3RzKTsKLSAgICBpbXBsLmFkZFJvb3RPYmplY3Qocm9vdCk7Ci0gICAgRVhQRUNUX0VRKHNp
emVvZihSZWZQdHI8U3RyaW5nSW1wbD4pLCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkp
OwotICAgIEVYUEVDVF9FUSgxLCB2aXNpdGVkT2JqZWN0cy5zaXplKCkpOworICAgIGhlbHBlci5h
ZGRSb290T2JqZWN0KHJvb3QpOworICAgIEVYUEVDVF9FUShzaXplb2YoUmVmUHRyPFN0cmluZ0lt
cGw+KSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgIEVYUEVDVF9FUSgx
LCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7CiB9CiAKIGNsYXNzIFR3b1BvaW50ZXJzVG9Pd25Q
dHIgewpAQCAtMzIzLDEzICszMjQsMTIgQEAgcHVibGljOgogCiBURVNUKE1lbW9yeUluc3RydW1l
bnRhdGlvblRlc3QsIG93blB0clB0cikKIHsKKyAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVy
IGhlbHBlcjsKICAgICBPd25QdHI8Tm90SW5zdHJ1bWVudGVkPiBvd25QdHI7CiAgICAgVHdvUG9p
bnRlcnNUb093blB0ciByb290KG93blB0cik7Ci0gICAgVmlzaXRlZE9iamVjdHMgdmlzaXRlZE9i
amVjdHM7Ci0gICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0ZWRPYmplY3Rz
KTsKLSAgICBpbXBsLmFkZFJvb3RPYmplY3Qocm9vdCk7Ci0gICAgRVhQRUNUX0VRKHNpemVvZihP
d25QdHI8Tm90SW5zdHJ1bWVudGVkPiksIGltcGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7
Ci0gICAgRVhQRUNUX0VRKDEsIHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAgaGVscGVyLmFk
ZFJvb3RPYmplY3Qocm9vdCk7CisgICAgRVhQRUNUX0VRKHNpemVvZihPd25QdHI8Tm90SW5zdHJ1
bWVudGVkPiksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICBFWFBFQ1Rf
RVEoMSwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgpAQCAtMzUxLDg2ICszNTEsNzggQEAgcHVibGljOgogVEVTVChNZW1vcnlJbnN0cnVtZW50YXRp
b25UZXN0LCBkZXRlY3RSZXBvcnRNZW1vcnlVc2FnZU1ldGhvZCkKIHsKICAgICB7Ci0gICAgICAg
IFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwotICAgICAgICBNZW1vcnlJbnN0cnVtZW50
YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMpOworICAgICAgICBJbnN0cnVtZW50YXRpb25U
ZXN0SGVscGVyIGhlbHBlcjsKIAogICAgICAgICBPd25QdHI8SW5zdHJ1bWVudGVkVGVtcGxhdGU8
U3RyaW5nPiA+IHZhbHVlID0gYWRvcHRQdHIobmV3IEluc3RydW1lbnRlZFRlbXBsYXRlPFN0cmlu
Zz4oIiIpKTsKICAgICAgICAgSW5zdHJ1bWVudGVkT3duZXI8SW5zdHJ1bWVudGVkVGVtcGxhdGU8
U3RyaW5nPiogPiByb290KHZhbHVlLmdldCgpKTsKLSAgICAgICAgaW1wbC5hZGRSb290T2JqZWN0
KHJvb3QpOwotICAgICAgICBFWFBFQ1RfRVEoc2l6ZW9mKEluc3RydW1lbnRlZFRlbXBsYXRlPFN0
cmluZz4pICsgc2l6ZW9mKFN0cmluZ0ltcGwpLCBpbXBsLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVz
KCkpOworICAgICAgICBoZWxwZXIuYWRkUm9vdE9iamVjdChyb290KTsKKyAgICAgICAgRVhQRUNU
X0VRKHNpemVvZihJbnN0cnVtZW50ZWRUZW1wbGF0ZTxTdHJpbmc+KSArIHNpemVvZihTdHJpbmdJ
bXBsKSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwogICAgICAgICAvLyBGSVhN
RTogaXQgaXMgZmFpbGluZyBvbiBDaHJvbWl1bSBDYW5hcnkgYm90cyBidXQgd29ya3MgZmluZSBs
b2NhbGx5LgotICAgICAgICAvLyBFWFBFQ1RfRVEoMiwgdmlzaXRlZE9iamVjdHMuc2l6ZSgpKTsK
KyAgICAgICAgLy8gRVhQRUNUX0VRKDIsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKICAgICB9
CiAgICAgewotICAgICAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0czsKLSAgICAgICAg
TWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0ZWRPYmplY3RzKTsKKyAgICAgICAg
SW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CiAKICAgICAgICAgT3duUHRyPEluc3Ry
dW1lbnRlZFRlbXBsYXRlPE5vdEluc3RydW1lbnRlZD4gPiB2YWx1ZSA9IGFkb3B0UHRyKG5ldyBJ
bnN0cnVtZW50ZWRUZW1wbGF0ZTxOb3RJbnN0cnVtZW50ZWQ+KCIiKSk7CiAgICAgICAgIEluc3Ry
dW1lbnRlZE93bmVyPEluc3RydW1lbnRlZFRlbXBsYXRlPE5vdEluc3RydW1lbnRlZD4qID4gcm9v
dCh2YWx1ZS5nZXQoKSk7Ci0gICAgICAgIGltcGwuYWRkUm9vdE9iamVjdChyb290KTsKLSAgICAg
ICAgRVhQRUNUX0VRKHNpemVvZihJbnN0cnVtZW50ZWRUZW1wbGF0ZTxOb3RJbnN0cnVtZW50ZWQ+
KSwgaW1wbC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICAgICAgRVhQRUNUX0VRKDEs
IHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAgICAgIGhlbHBlci5hZGRSb290T2JqZWN0KHJv
b3QpOworICAgICAgICBFWFBFQ1RfRVEoc2l6ZW9mKEluc3RydW1lbnRlZFRlbXBsYXRlPE5vdElu
c3RydW1lbnRlZD4pLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgICAg
IEVYUEVDVF9FUSgxLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7CiAgICAgfQogfQogCiBURVNU
KE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIHZlY3Rvclplcm9JbmxpbmVDYXBhY2l0eSkKIHsK
LSAgICBWaXNpdGVkT2JqZWN0cyB2aXNpdGVkT2JqZWN0czsKLSAgICBNZW1vcnlJbnN0cnVtZW50
YXRpb25JbXBsIGltcGwodmlzaXRlZE9iamVjdHMpOworICAgIEluc3RydW1lbnRhdGlvblRlc3RI
ZWxwZXIgaGVscGVyOwogICAgIEluc3RydW1lbnRlZE93bmVyPFZlY3RvcjxpbnQ+ID4gdmVjdG9y
T3duZXIoMTYpOwotICAgIGltcGwuYWRkUm9vdE9iamVjdCh2ZWN0b3JPd25lcik7Ci0gICAgRVhQ
RUNUX0VRKDE2ICogc2l6ZW9mKGludCksIGltcGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7
Ci0gICAgRVhQRUNUX0VRKDEsIHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAgaGVscGVyLmFk
ZFJvb3RPYmplY3QodmVjdG9yT3duZXIpOworICAgIEVYUEVDVF9FUSgxNiAqIHNpemVvZihpbnQp
LCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIGhl
bHBlci52aXNpdGVkT2JqZWN0cygpKTsKIH0KIAogVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25U
ZXN0LCB2ZWN0b3JGaWVsZFdpdGhJbmxpbmVDYXBhY2l0eSkKIHsKLSAgICBWaXNpdGVkT2JqZWN0
cyB2aXNpdGVkT2JqZWN0czsKLSAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIGltcGwodmlz
aXRlZE9iamVjdHMpOworICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwogICAg
IEluc3RydW1lbnRlZE93bmVyPFZlY3RvcjxpbnQsIDQ+ID4gdmVjdG9yT3duZXI7Ci0gICAgaW1w
bC5hZGRSb290T2JqZWN0KHZlY3Rvck93bmVyKTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8
c2l6ZV90PigwKSwgaW1wbC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICBFWFBFQ1Rf
RVEoMCwgdmlzaXRlZE9iamVjdHMuc2l6ZSgpKTsKKyAgICBoZWxwZXIuYWRkUm9vdE9iamVjdCh2
ZWN0b3JPd25lcik7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMCksIGhlbHBl
ci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICBFWFBFQ1RfRVEoMCwgaGVscGVyLnZp
c2l0ZWRPYmplY3RzKCkpOwogfQogCiBURVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIHZl
Y3RvckZpZWxkV2l0aElubGluZUNhcGFjaXR5UmVzaXplZCkKIHsKLSAgICBWaXNpdGVkT2JqZWN0
cyB2aXNpdGVkT2JqZWN0czsKLSAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIGltcGwodmlz
aXRlZE9iamVjdHMpOworICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwogICAg
IEluc3RydW1lbnRlZE93bmVyPFZlY3RvcjxpbnQsIDQ+ID4gdmVjdG9yT3duZXI7CiAgICAgdmVj
dG9yT3duZXIubV92YWx1ZS5yZXNlcnZlQ2FwYWNpdHkoOCk7Ci0gICAgaW1wbC5hZGRSb290T2Jq
ZWN0KHZlY3Rvck93bmVyKTsKLSAgICBFWFBFQ1RfRVEoOCAqIHNpemVvZihpbnQpLCBpbXBsLnJl
cG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgIEVYUEVDVF9FUSgxLCB2aXNpdGVkT2JqZWN0
cy5zaXplKCkpOworICAgIGhlbHBlci5hZGRSb290T2JqZWN0KHZlY3Rvck93bmVyKTsKKyAgICBF
WFBFQ1RfRVEoOCAqIHNpemVvZihpbnQpLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMo
KSk7CisgICAgRVhQRUNUX0VRKDEsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKIH0KIAogVEVT
VChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCBoZWFwQWxsb2NhdGVkVmVjdG9yV2l0aElubGlu
ZUNhcGFjaXR5KQogewotICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwotICAgIE1l
bW9yeUluc3RydW1lbnRhdGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7CisgICAgSW5zdHJ1
bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CiAgICAgSW5zdHJ1bWVudGVkT3duZXI8T3duUHRy
PFZlY3RvcjxpbnQsIDQ+ID4gPiB2ZWN0b3JPd25lcjsKICAgICB2ZWN0b3JPd25lci5tX3ZhbHVl
ID0gYWRvcHRQdHIobmV3IFZlY3RvcjxpbnQsIDQ+KCkpOwotICAgIGltcGwuYWRkUm9vdE9iamVj
dCh2ZWN0b3JPd25lcik7Ci0gICAgRVhQRUNUX0VRKHNpemVvZihWZWN0b3I8aW50LCA0PiksIGlt
cGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgRVhQRUNUX0VRKDEsIHZpc2l0ZWRP
YmplY3RzLnNpemUoKSk7CisgICAgaGVscGVyLmFkZFJvb3RPYmplY3QodmVjdG9yT3duZXIpOwor
ICAgIEVYUEVDVF9FUShzaXplb2YoVmVjdG9yPGludCwgND4pLCBoZWxwZXIucmVwb3J0ZWRTaXpl
Rm9yQWxsVHlwZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIGhlbHBlci52aXNpdGVkT2JqZWN0cygp
KTsKIH0KIAogVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCBoZWFwQWxsb2NhdGVkVmVj
dG9yV2l0aElubGluZUNhcGFjaXR5UmVzaXplZCkKIHsKLSAgICBWaXNpdGVkT2JqZWN0cyB2aXNp
dGVkT2JqZWN0czsKLSAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIGltcGwodmlzaXRlZE9i
amVjdHMpOworICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwogICAgIEluc3Ry
dW1lbnRlZE93bmVyPE93blB0cjxWZWN0b3I8aW50LCA0PiA+ID4gdmVjdG9yT3duZXI7CiAgICAg
dmVjdG9yT3duZXIubV92YWx1ZSA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8aW50LCA0PigpKTsKICAg
ICB2ZWN0b3JPd25lci5tX3ZhbHVlLT5yZXNlcnZlQ2FwYWNpdHkoOCk7Ci0gICAgaW1wbC5hZGRS
b290T2JqZWN0KHZlY3Rvck93bmVyKTsKLSAgICBFWFBFQ1RfRVEoOCAqIHNpemVvZihpbnQpICsg
c2l6ZW9mKFZlY3RvcjxpbnQsIDQ+KSwgaW1wbC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsK
LSAgICBFWFBFQ1RfRVEoMiwgdmlzaXRlZE9iamVjdHMuc2l6ZSgpKTsKKyAgICBoZWxwZXIuYWRk
Um9vdE9iamVjdCh2ZWN0b3JPd25lcik7CisgICAgRVhQRUNUX0VRKDggKiBzaXplb2YoaW50KSAr
IHNpemVvZihWZWN0b3I8aW50LCA0PiksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygp
KTsKKyAgICBFWFBFQ1RfRVEoMiwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwogfQogCiBURVNU
KE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIHZlY3RvcldpdGhJbnN0cnVtZW50ZWRUeXBlKQog
ewotICAgIFZpc2l0ZWRPYmplY3RzIHZpc2l0ZWRPYmplY3RzOwotICAgIE1lbW9yeUluc3RydW1l
bnRhdGlvbkltcGwgaW1wbCh2aXNpdGVkT2JqZWN0cyk7CisgICAgSW5zdHJ1bWVudGF0aW9uVGVz
dEhlbHBlciBoZWxwZXI7CiAKICAgICB0eXBlZGVmIFZlY3RvcjxTdHJpbmc+IFN0cmluZ1ZlY3Rv
cjsKICAgICBPd25QdHI8U3RyaW5nVmVjdG9yPiB2YWx1ZSA9IGFkb3B0UHRyKG5ldyBTdHJpbmdW
ZWN0b3IoKSk7CkBAIC00MzgsMTUgKzQzMCwxNCBAQCBURVNUKE1lbW9yeUluc3RydW1lbnRhdGlv
blRlc3QsIHZlY3RvcldpdGhJbnN0cnVtZW50ZWRUeXBlKQogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY291bnQ7ICsraSkKICAgICAgICAgdmFsdWUtPmFwcGVuZCgic3RyaW5nIik7CiAgICAg
SW5zdHJ1bWVudGVkT3duZXI8U3RyaW5nVmVjdG9yKiA+IHJvb3QodmFsdWUuZ2V0KCkpOwotICAg
IGltcGwuYWRkUm9vdE9iamVjdChyb290KTsKLSAgICBFWFBFQ1RfRVEoc2l6ZW9mKFN0cmluZ1Zl
Y3RvcikgKyBzaXplb2YoU3RyaW5nKSAqIHZhbHVlLT5jYXBhY2l0eSgpICsgc2l6ZW9mKFN0cmlu
Z0ltcGwpICogdmFsdWUtPnNpemUoKSwgaW1wbC5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsK
LSAgICBFWFBFQ1RfRVEoY291bnQgKyAyLCAoc2l6ZV90KXZpc2l0ZWRPYmplY3RzLnNpemUoKSk7
CisgICAgaGVscGVyLmFkZFJvb3RPYmplY3Qocm9vdCk7CisgICAgRVhQRUNUX0VRKHNpemVvZihT
dHJpbmdWZWN0b3IpICsgc2l6ZW9mKFN0cmluZykgKiB2YWx1ZS0+Y2FwYWNpdHkoKSArIHNpemVv
ZihTdHJpbmdJbXBsKSAqIHZhbHVlLT5zaXplKCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxU
eXBlcygpKTsKKyAgICBFWFBFQ1RfRVEoY291bnQgKyAyLCAoc2l6ZV90KWhlbHBlci52aXNpdGVk
T2JqZWN0cygpKTsKIH0KIAogVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCBoYXNoU2V0
V2l0aEluc3RydW1lbnRlZFR5cGUpCiB7Ci0gICAgVmlzaXRlZE9iamVjdHMgdmlzaXRlZE9iamVj
dHM7Ci0gICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0ZWRPYmplY3RzKTsK
KyAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKIAogICAgIHR5cGVkZWYgSGFz
aFNldDxTdHJpbmc+IFZhbHVlVHlwZTsKICAgICBPd25QdHI8VmFsdWVUeXBlPiB2YWx1ZSA9IGFk
b3B0UHRyKG5ldyBWYWx1ZVR5cGUoKSk7CkBAIC00NTQsMjEgKzQ0NSwyMCBAQCBURVNUKE1lbW9y
eUluc3RydW1lbnRhdGlvblRlc3QsIGhhc2hTZXRXaXRoSW5zdHJ1bWVudGVkVHlwZSkKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCiAgICAgICAgIHZhbHVlLT5hZGQoU3Ry
aW5nOjpudW1iZXIoaSkpOwogICAgIEluc3RydW1lbnRlZE93bmVyPFZhbHVlVHlwZSogPiByb290
KHZhbHVlLmdldCgpKTsKLSAgICBpbXBsLmFkZFJvb3RPYmplY3Qocm9vdCk7Ci0gICAgRVhQRUNU
X0VRKHNpemVvZihWYWx1ZVR5cGUpICsgc2l6ZW9mKFN0cmluZykgKiB2YWx1ZS0+Y2FwYWNpdHko
KSArIHNpemVvZihTdHJpbmdJbXBsKSAqIHZhbHVlLT5zaXplKCksIGltcGwucmVwb3J0ZWRTaXpl
Rm9yQWxsVHlwZXMoKSk7Ci0gICAgRVhQRUNUX0VRKGNvdW50ICsgMiwgKHNpemVfdCl2aXNpdGVk
T2JqZWN0cy5zaXplKCkpOworICAgIGhlbHBlci5hZGRSb290T2JqZWN0KHJvb3QpOworICAgIEVY
UEVDVF9FUShzaXplb2YoVmFsdWVUeXBlKSArIHNpemVvZihTdHJpbmcpICogdmFsdWUtPmNhcGFj
aXR5KCkgKyBzaXplb2YoU3RyaW5nSW1wbCkgKiB2YWx1ZS0+c2l6ZSgpLCBoZWxwZXIucmVwb3J0
ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgRVhQRUNUX0VRKGNvdW50ICsgMiwgKHNpemVfdClo
ZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7CiB9CiAKIFRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9u
VGVzdCwgYXJyYXlCdWZmZXIpCiB7Ci0gICAgVmlzaXRlZE9iamVjdHMgdmlzaXRlZE9iamVjdHM7
Ci0gICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbCBpbXBsKHZpc2l0ZWRPYmplY3RzKTsKKyAg
ICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKIAogICAgIHR5cGVkZWYgSW5zdHJ1
bWVudGVkVGVtcGxhdGU8UmVmUHRyPEFycmF5QnVmZmVyPiA+IFZhbHVlVHlwZTsKICAgICBWYWx1
ZVR5cGUgdmFsdWUoQXJyYXlCdWZmZXI6OmNyZWF0ZSgxMDAwLCBzaXplb2YoaW50KSkpOwotICAg
IGltcGwuYWRkUm9vdE9iamVjdCh2YWx1ZSk7Ci0gICAgRVhQRUNUX0VRKHNpemVvZihpbnQpICog
MTAwMCArIHNpemVvZihBcnJheUJ1ZmZlciksIGltcGwucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMo
KSk7Ci0gICAgRVhQRUNUX0VRKDIsIHZpc2l0ZWRPYmplY3RzLnNpemUoKSk7CisgICAgaGVscGVy
LmFkZFJvb3RPYmplY3QodmFsdWUpOworICAgIEVYUEVDVF9FUShzaXplb2YoaW50KSAqIDEwMDAg
KyBzaXplb2YoQXJyYXlCdWZmZXIpLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7
CisgICAgRVhQRUNUX0VRKDIsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UK
</data>
<flag name="review"
          id="178179"
          type_id="1"
          status="+"
          setter="yurys"
    />
          </attachment>
      

    </bug>

</bugzilla>