<?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>206384</bug_id>
          
          <creation_ts>2020-01-16 16:22:20 -0800</creation_ts>
          <short_desc>Use the same AccessibilityObjectWrapper for associated AXObject and AXIsolatedObject.</short_desc>
          <delta_ts>2020-01-23 17:49:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andres Gonzalez">andresg_22</reporter>
          <assigned_to name="Andres Gonzalez">andresg_22</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andresg_22</cc>
    
    <cc>annulen</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1607745</commentid>
    <comment_count>0</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2020-01-16 16:22:20 -0800</bug_when>
    <thetext>Use the same AccessibilityObjectWrapper for associated AXObject and AXIsolatedObject.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607790</commentid>
    <comment_count>1</comment_count>
      <attachid>387992</attachid>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2020-01-16 17:01:46 -0800</bug_when>
    <thetext>Created attachment 387992
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607819</commentid>
    <comment_count>2</comment_count>
      <attachid>387997</attachid>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2020-01-16 17:48:04 -0800</bug_when>
    <thetext>Created attachment 387997
Uploading diff manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1610139</commentid>
    <comment_count>3</comment_count>
      <attachid>388555</attachid>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2020-01-23 09:41:22 -0800</bug_when>
    <thetext>Created attachment 388555
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1610146</commentid>
    <comment_count>4</comment_count>
      <attachid>388555</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2020-01-23 09:50:32 -0800</bug_when>
    <thetext>Comment on attachment 388555
Patch

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

&gt; Source/WebCore/accessibility/AXObjectCache.h:176
&gt; +    void cacheAndInitializeWrapper(AccessibilityObject*, RenderObject* = nullptr, Node* = nullptr, Widget* = nullptr);

don&apos;t know if this feasible, but would it be possible to templatize the &quot;other&quot; object (RenderObject/Node/Widget) so that there was only one parameter?

&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.mm:354
&gt; +    if (!isMainThread())

should we add something like

if (!clientSupportsIsolatedTree())
   ASSERT_NOT_REACHED()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1610239</commentid>
    <comment_count>5</comment_count>
      <attachid>388571</attachid>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2020-01-23 11:55:56 -0800</bug_when>
    <thetext>Created attachment 388571
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1610417</commentid>
    <comment_count>6</comment_count>
      <attachid>388620</attachid>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2020-01-23 16:58:35 -0800</bug_when>
    <thetext>Created attachment 388620
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1610445</commentid>
    <comment_count>7</comment_count>
      <attachid>388620</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-23 17:48:36 -0800</bug_when>
    <thetext>Comment on attachment 388620
Patch

Clearing flags on attachment: 388620

Committed r255044: &lt;https://trac.webkit.org/changeset/255044&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1610446</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-23 17:48:38 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1610447</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-01-23 17:49:14 -0800</bug_when>
    <thetext>&lt;rdar://problem/58855851&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387992</attachid>
            <date>2020-01-16 17:01:46 -0800</date>
            <delta_ts>2020-01-16 17:48:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206384-20200116200144.patch</filename>
            <type>text/plain</type>
            <size>259467</size>
            <attacher name="Andres Gonzalez">andresg_22</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0NTY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjJjNTc2NjA2OTJjNjZl
YThhYTE2MDg5N2JmYjk4ZmE2Y2RmNGQyNy4uMGIyYWUzOTE0ZGM2MzMwMTk0NmY2ZTBjNzNhNjY4
MmJiOGE2YTcwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk1IEBACisyMDIwLTAxLTE2ICBBbmRy
ZXMgR29uemFsZXogIDxhbmRyZXNnXzIyQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgdGhlIHNh
bWUgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgZm9yIGFzc29jaWF0ZWQgQVhPYmplY3QgYW5k
IEFYSXNvbGF0ZWRPYmplY3QuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDYzODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBc3NvY2lhdGVkIEFYT2JqZWN0IGFuZCBBWElzb2xhdGVkT2JqZWN0IG5lZWQg
dG8gc2hhcmUgdGhlIHNhbWUKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgaW4g
b3JkZXIgZm9yIGFjY2Vzc2liaWxpdHkgY2xpZW50cyB0byB3b3JrCisgICAgICAgIHByb3Blcmx5
LiBUaGlzIGNoYW5nZSBpbXBsZW1lbnRzIEFYQ29yZU9iamVjdDo6dGFrZVdyYXBwZXIgd2hpY2gg
aXMKKyAgICAgICAgdXNlZCB0byB0cmFuc2ZlciB0aGUgb3duZXJzaGlwIG9mIHRoZSB3cmFwcGVy
IGZyb20gdGhlIEFYT2JqZWN0IHRvIHRoZQorICAgICAgICBhc3NvY2lhdGVkIEFYSXNvbGF0ZWRP
YmplY3QuIFNldmVyYWwgY2hhbmdlcyB0byB0aGUgZGV0YWNoIGFuZCBhdHRhY2gKKyAgICAgICAg
d3JhcHBlciBtZXRob2RzIHdlcmUgbmVjZXNzYXJ5LgorICAgICAgICAtIEluc3RlYWQgb2YgY3Jl
YXRpbmcgYSBuZXcgd3JhcHBlciBmb3IgYW4gQVhJc29sYXRlZE9iamVjdCwgaXQgdGFrZXMKKyAg
ICAgICAgdGhlIG9uZSBmcm9tIGl0cyBhc3NvY2lhdGVkIEFYT2JqZWN0LgorICAgICAgICAtIFRo
ZSBwcmV2aW91cyBBWENvcmVPYmplY3Q6OmRldGFjaCBtZXRob2QgYmVjYW1lIGRldGFjaFJlbW90
ZVBhcnRzLAorICAgICAgICBzaW5jZSB0aGlzIG1ldGhvZCBkZXRhY2hlcyBhbGwgcmVmZXJlbmNl
cyB0byBhbmQgZnJvbSBvdGhlciBvYmplY3RzLgorICAgICAgICAtIFRoZSBuZXcgQVhDb3JlT2Jq
ZWN0OjpkZXRhY2ggbWV0aG9kIHBlcmZvcm1zIHRocmVlIGRpc3RpbmN0aXZlCisgICAgICAgIG9w
ZXJhdGlvbnM6CisgICAgICAgIDEuIERldGFjaGVzIHRoZSBwbGF0Zm9ybSB3cmFwcGVyLgorICAg
ICAgICAyLiBEZXRhY2hlcyBhbGwgcmVtb3RlIHJlZmVyZW5jZXMgdG8gYW5kIGZyb20gb3RoZXIg
b2JqZWN0cy4KKyAgICAgICAgMy4gU2V0cyB0aGUgb2JqZWN0IElEIHRvIEludmFsaWRBWElELgor
ICAgICAgICAtIFRoZSBhdHRhY2hQbGF0Zm9ybVdyYXBwZXIgYW5kIGRldGFjaFBsYXRmb3JtV3Jh
cHBlciBtZXRob2RzIGFsbG93IGZvcgorICAgICAgICBwbGF0Zm9ybS1zcGVjaWZpYyBjdXN0b21p
emF0aW9ucy4KKyAgICAgICAgLSBGb3IgY29uc2lzdGVuY3kgaW4gbmFtaW5nLCByZW5hbWVkIEFY
SXNvbGF0ZWRUcmVlTm9kZS5oL2NwcCB0bworICAgICAgICBBWElzb2xhdGVkT2JqZWN0LmgvY3Bw
LgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybU1hYy5jbWFr
ZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0Ogor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmpl
Y3RDYWNoZTo6fkFYT2JqZWN0Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNo
ZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmNyZWF0ZUlzb2xh
dGVkVHJlZUhpZXJhcmNoeSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpkZWZlclRleHRSZXBsYWNlbWVu
dE5vdGlmaWNhdGlvbkZvclRleHRDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6OmRldGFjaFdyYXBwZXIpOiBEZWxldGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OmRldGFjaFJlbW90ZVBhcnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpkZXRhY2gpOiBEZWxldGVkLgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU9iamVjdDo6ZGV0YWNoUmVtb3RlUGFydHMpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eU9iamVjdDo6ZGV0YWNoKTogRGVsZXRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlPYmplY3RJbnRlcmZhY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFYQ29yZU9iamVjdDo6
ZGV0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6OkFYQ29yZU9iamVjdDo6ZGV0YWNoV3JhcHBlcik6
CisgICAgICAgIChXZWJDb3JlOjpBWENvcmVPYmplY3Q6OnRha2VXcmFwcGVyKToKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZGV0YWNoUmVtb3RlUGFydHMpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZGV0YWNoKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qu
aDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3OjpkZXRhY2hSZW1vdGVQ
YXJ0cyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldzo6ZGV0YWNo
KTogRGVsZXRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxW
aWV3Lmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvQVhPYmplY3RDYWNoZUF0ay5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpkZXRhY2hXcmFwcGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmRldGFjaFBsYXRmb3Jt
V3JhcHBlcik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3MvQVhPYmplY3RDYWNoZUlPUy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmRldGFjaFdyYXBwZXIpOiBEZWxl
dGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxpdHlPYmplY3RJT1Mu
bW06CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjphdHRhY2hQbGF0Zm9y
bVdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6ZGV0YWNo
UGxhdGZvcm1XcmFwcGVyKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9B
WElzb2xhdGVkT2JqZWN0LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlTm9kZS5jcHAuCisgICAgICAgIChXZWJD
b3JlOjpBWElzb2xhdGVkT2JqZWN0OjpkZXRhY2hSZW1vdGVQYXJ0cyk6CisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWVO
b2RlLmguCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRy
ZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZFRyZWU6OnJlbW92ZVRyZWVGb3JQ
YWdlSUQpOgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZFRyZWU6OmFwcGx5UGVuZGluZ0No
YW5nZXMpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRU
cmVlLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvbWFjL0FYSXNvbGF0
ZWRPYmplY3RNYWMubW06IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
d2luL0FjY2Vzc2liaWxpdHlPYmplY3RXaW4uY3BwLgorICAgICAgICAoV2ViQ29yZTo6QVhJc29s
YXRlZE9iamVjdDo6YXR0YWNoUGxhdGZvcm1XcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFY
SXNvbGF0ZWRPYmplY3Q6OmRldGFjaFBsYXRmb3JtV3JhcHBlcik6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2Jq
ZWN0Q2FjaGU6OmRldGFjaFdyYXBwZXIpOiBEZWxldGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0OjphdHRhY2hQbGF0Zm9ybVdyYXBwZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6ZGV0YWNoUGxhdGZvcm1XcmFwcGVyKToKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaDoK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ckJhc2UubW06CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZSBp
bml0V2l0aEFjY2Vzc2liaWxpdHlPYmplY3Q6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyQmFzZSBhdHRhY2g6XSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS93
aW4vQVhPYmplY3RDYWNoZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hl
OjpkZXRhY2hXcmFwcGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L3dpbi9B
Y2Nlc3NpYmlsaXR5T2JqZWN0V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlPYmplY3Q6OmRldGFjaFBsYXRmb3JtV3JhcHBlcik6CisKIDIwMjAtMDEtMTUgIENhcmxvcyBB
bGJlcnRvIExvcGV6IFBlcmV6ICA8Y2xvcGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10g
VHVybiBvZmYgYW50aWFsaWFzaW5nIHdoZW4gcmVuZGVyaW5nIHdpdGggQWhlbQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMu
Y21ha2UKaW5kZXggMjk2ZGVhNzgzMWJlZTQ5Y2YwMDRhNjgyZGQyNWU4OTNiOTk2NGU3Ny4uN2Rj
ODY0YWYyMDE1MzU4ODY0MjM3Y2QzZWEwY2ExZWFlMmQxNjQ3ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
CkBAIC0xNzEsOCArMTcxLDggQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVS
UwogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCiAgICAgYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5oCiAKKyAgICBhY2Nlc3NpYmlsaXR5
L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmgKICAgICBhY2Nlc3NpYmlsaXR5L2lzb2xh
dGVkdHJlZS9BWElzb2xhdGVkVHJlZS5oCi0gICAgYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUv
QVhJc29sYXRlZFRyZWVOb2RlLmgKIAogICAgIGFuaW1hdGlvbi9DU1NQcm9wZXJ0eUJsZW5kaW5n
Q2xpZW50LmgKICAgICBhbmltYXRpb24vQ29tcG9zaXRlT3BlcmF0aW9uLmgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1NYWMuY21ha2UKaW5kZXggYzAzY2U2YjUxMzE4MjFhMDFjYzdkNjY1M2QxNjkxOTFkYmI3OWE4
MS4uZDY0ZWU3Y2E5ZjcxODY1MmI4NTFhZjRlZmQyNTE2YjZhY2VjMDkzOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1NYWMuY21ha2UKQEAgLTc4LDYgKzc4LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklW
QVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy93ZWJh
dXRobi9hcGR1IgogICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRh
bCIKICAgICAiJHtXRUJDT1JFX0RJUn0vYWNjZXNzaWJpbGl0eS9tYWMiCisgICAgIiR7V0VCQ09S
RV9ESVJ9L2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL21hYyIKICAgICAiJHtXRUJDT1JFX0RJ
Un0vYnJpZGdlL29iamMiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2NyeXB0by9tYWMiCiAgICAgIiR7
V0VCQ09SRV9ESVJ9L2VkaXRpbmcvY29jb2EiCkBAIC0xNDksNiArMTUwLDcgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBNb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVk
aW9Tb3VyY2VDb2NvYS5jcHAKIAorICAgIGFjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL21hYy9B
WElzb2xhdGVkT2JqZWN0TWFjLm1tCiAgICAgYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNo
ZU1hYy5tbQogICAgIGFjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RNYWMubW0K
ICAgICBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5t
bQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dAppbmRleCBkODViMTc5YWRjNzEyNDdiYmJlODYzOTNhMmMwMzVlYWUwYWIz
YjQwLi4xZDgzZmNhYTllZThiZjJjYjgzM2E3MGUyOWI0OWUyYjg4ZjhkMmNiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dApAQCAtNDUxLDggKzQ1MSw4IEBAIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxl
SGVhZGVyQ29udGFpbmVyLmNwcAogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cu
Y3BwCiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUcmVlLmNwcAogYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5VHJlZUl0ZW0uY3BwCithY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElz
b2xhdGVkT2JqZWN0LmNwcAogYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRy
ZWUuY3BwCi1hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZU5vZGUuY3Bw
CiAKIGFuaW1hdGlvbi9BbmltYXRpb25FZmZlY3QuY3BwCiBhbmltYXRpb24vS2V5ZnJhbWVFZmZl
Y3RTdGFjay5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDg5MDZmNTdkYzlkMzI0Yzlm
MGJkMWVmYjg1MGIyMGE5NTIwZTE5MGIuLmE5NzI2NjkxZmZkZDY0OTdhM2YyM2NhMTExMWNhNzJk
NDBhMTVmN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtMzYsNiArMzYsNyBAQCBhY2Nl
c3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0QmFzZS5tbQogYWNjZXNzaWJpbGl0eS9t
YWMvQWNjZXNzaWJpbGl0eU9iamVjdE1hYy5tbQogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0gQG5vLXVuaWZ5CiBhY2Nlc3NpYmlsaXR5L21hYy9X
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW0gQG5vLXVuaWZ5CithY2Nlc3NpYmls
aXR5L2lzb2xhdGVkdHJlZS9tYWMvQVhJc29sYXRlZE9iamVjdE1hYy5tbQogCiBiaW5kaW5ncy9q
cy9TY3JpcHRDb250cm9sbGVyTWFjLm1tCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjYzM1YTU4OTExMzQxMWIxNTg2MjBiZjQw
MTkxNmVmZDc0M2VlOTRkLi5jZWJkYjNkYWVhZTEwZGQwZGViMjZiMDljNTQ1OTIwMDY2ZWQ2ZTNk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC03MTAsNyArNzEwLDcgQEAKIAkJMjlBODEyNDkwRkJCOUNBOTAwNTEwMjkzIC8qIFdl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlBODEyNDUwRkJCOUNBOTAwNTEwMjkzIC8qIFdlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI5QUNCMjEyMTQzRTcxMjgwMDZCQ0E1RiAvKiBBY2Nl
c3NpYmlsaXR5TW9ja09iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMjlBQ0IyMTExNDNFNzEyODAwNkJDQTVGIC8qIEFjY2Vzc2liaWxpdHlNb2Nr
T2JqZWN0LmggKi87IH07CiAJCTI5QUUyMTJEMjFBQjlFRUIwMDg2OTI4MyAvKiBBWElzb2xhdGVk
VHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlB
RTIxMkIyMUFCOUVFQjAwODY5MjgzIC8qIEFYSXNvbGF0ZWRUcmVlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMjlBRTIxMzUyMUFCQTQ4QTAwODY5
MjgzIC8qIEFYSXNvbGF0ZWRUcmVlTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjlBRTIxMzMyMUFCQTQ4QTAwODY5MjgzIC8qIEFYSXNvbGF0ZWRU
cmVlTm9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTI5QUUyMTM1MjFBQkE0OEEwMDg2OTI4MyAvKiBBWElzb2xhdGVkT2JqZWN0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOUFFMjEzMzIxQUJBNDhB
MDA4NjkyODMgLyogQVhJc29sYXRlZE9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI5RDdCQ0ZBMTQ0NEFGN0QwMDcwNjE5QyAvKiBBY2Nl
c3NpYmlsaXR5U3BpbkJ1dHRvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMjlEN0JDRjkxNDQ0QUY3RDAwNzA2MTlDIC8qIEFjY2Vzc2liaWxpdHlTcGlu
QnV0dG9uLmggKi87IH07CiAJCTI5RkFGNEI2MTk1QUIwODkwMEE1MjJEQyAvKiBUZXh0VW5kb0lu
c2VydGlvbk1hcmt1cE1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMjlGQUY0QjUxOTVBQjA4OTAwQTUyMkRDIC8qIFRleHRVbmRvSW5zZXJ0aW9uTWFy
a3VwTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMkIzNjVDODQxNTI1MTE5RTAwOTFEMjdCIC8qIFJlbmRlclNWR0VsbGlwc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJCNDIzNUEwMTUyNTBGNjAw
MERCQkNEOCAvKiBSZW5kZXJTVkdFbGxpcHNlLmggKi87IH07CkBAIC02NjgwLDggKzY2ODAsOCBA
QAogCQkyOUFDQjIxMzE0M0U3NDk4MDA2QkNBNUYgLyogQWNjZXNzaWJpbGl0eU1vY2tPYmplY3Qu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzaWJpbGl0eU1v
Y2tPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOUFFMjEyQjIxQUI5
RUVCMDA4NjkyODMgLyogQVhJc29sYXRlZFRyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVhJc29sYXRl
ZFRyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjlBRTIxMkMyMUFCOUVFQjAw
ODY5MjgzIC8qIEFYSXNvbGF0ZWRUcmVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFYSXNvbGF0
ZWRUcmVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjlBRTIxMzMyMUFCQTQ4
QTAwODY5MjgzIC8qIEFYSXNvbGF0ZWRUcmVlTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBWElzb2xh
dGVkVHJlZU5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjlBRTIxMzQyMUFC
QTQ4QTAwODY5MjgzIC8qIEFYSXNvbGF0ZWRUcmVlTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBBWElzb2xhdGVkVHJlZU5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQky
OUFFMjEzMzIxQUJBNDhBMDA4NjkyODMgLyogQVhJc29sYXRlZE9iamVjdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBBWElzb2xhdGVkT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI5
QUUyMTM0MjFBQkE0OEEwMDg2OTI4MyAvKiBBWElzb2xhdGVkT2JqZWN0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEFYSXNvbGF0ZWRPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyOUQ3QkNGNTE0NDRBRjU4MDA3MDYxOUMgLyogQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzaWJpbGl0eVNw
aW5CdXR0b24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOUQ3QkNGOTE0NDRB
RjdEMDA3MDYxOUMgLyogQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMjlFMDRBMjdCRUQyRjgxRjk4RTkwMjJCIC8qIEpTQmVmb3JlVW5s
b2FkRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNCZWZvcmVVbmxv
YWRFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM0ODksNiArMTM0ODks
NyBAQAogCQlCRUYyOUVFOTE3MTVERDA5MDBDNEI0QzkgLyogQXVkaW9UcmFja1ByaXZhdGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXVkaW9UcmFja1ByaXZhdGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkVGMjlFRUExNzE1REQwOTAwQzRCNEM5IC8qIFZp
ZGVvVHJhY2tQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVv
VHJhY2tQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMwNDZFMUFCMTIw
OEE5RkUwMEJBMkNGNyAvKiBMb2NhbGl6ZWRTdHJpbmdzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IExvY2FsaXplZFN0cmluZ3MuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDMDgzNDQzRDIzRDA3RkI3MDBCMzZFM0QgLyogQVhJc29sYXRlZE9iamVj
dE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEFYSXNvbGF0ZWRPYmplY3RNYWMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMwRjJBNDNGMTM4NjlBMjgwMDY2QzUzNCAvKiBw
cmVwcm9jZXNzb3IucG0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0LnNjcmlwdC5wZXJsOyBuYW1lID0gcHJlcHJvY2Vzc29yLnBtOyBwYXRoID0g
c2NyaXB0cy9wcmVwcm9jZXNzb3IucG07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMx
MDVEQTYxMEYzQUE2OEYwMDFERDQ0RiAvKiBUZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0RW5jb2RpbmdEZXRlY3RvcklD
VS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMxMDVEQTYzMEYzQUE2QjgwMDFE
RDQ0RiAvKiBUZXh0RW5jb2RpbmdEZXRlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUZXh0RW5jb2RpbmdEZXRlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTc3OTcsMTAgKzE3Nzk4LDExIEBACiAJCTI5QUUyMTI5MjFBQjlFQ0IwMDg2OTI4MyAv
KiBpc29sYXRlZHRyZWUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAorCQkJCUMwODM0NDNGMjNEMDgwM0QwMEIzNkUzRCAvKiBtYWMgKi8sCisJCQkJMjlBRTIxMzQy
MUFCQTQ4QTAwODY5MjgzIC8qIEFYSXNvbGF0ZWRPYmplY3QuY3BwICovLAorCQkJCTI5QUUyMTMz
MjFBQkE0OEEwMDg2OTI4MyAvKiBBWElzb2xhdGVkT2JqZWN0LmggKi8sCiAJCQkJMjlBRTIxMkMy
MUFCOUVFQjAwODY5MjgzIC8qIEFYSXNvbGF0ZWRUcmVlLmNwcCAqLywKIAkJCQkyOUFFMjEyQjIx
QUI5RUVCMDA4NjkyODMgLyogQVhJc29sYXRlZFRyZWUuaCAqLywKLQkJCQkyOUFFMjEzNDIxQUJB
NDhBMDA4NjkyODMgLyogQVhJc29sYXRlZFRyZWVOb2RlLmNwcCAqLywKLQkJCQkyOUFFMjEzMzIx
QUJBNDhBMDA4NjkyODMgLyogQVhJc29sYXRlZFRyZWVOb2RlLmggKi8sCiAJCQkpOwogCQkJcGF0
aCA9IGlzb2xhdGVkdHJlZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yNjA3MCw2
ICsyNjA3MiwxNCBAQAogCQkJdGFiV2lkdGggPSA0OwogCQkJdXNlc1RhYnMgPSAwOwogCQl9Owor
CQlDMDgzNDQzRjIzRDA4MDNEMDBCMzZFM0QgLyogbWFjICovID0geworCQkJaXNhID0gUEJYR3Jv
dXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlDMDgzNDQzRDIzRDA3RkI3MDBCMzZFM0QgLyogQVhJ
c29sYXRlZE9iamVjdE1hYy5tbSAqLywKKwkJCSk7CisJCQlwYXRoID0gbWFjOworCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJQzIxMEU5MEQyMUI0QkNBNDAwQjdGODNEIC8qIFdI
TFNMICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTI5MTU3
LDggKzI5MTY3LDggQEAKIAkJCQkwNzAzNjNFMjE4MUExQ0RDMDBDMDc0QTUgLyogQVZDYXB0dXJl
RGV2aWNlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0QzMzZGNjIxN0Y5RjY0NzAwRERE
Q0QwIC8qIEFWVHJhY2tQcml2YXRlQVZGT2JqQ0ltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3
MDM2M0U2MTgxQTFDREMwMEMwNzRBNSAvKiBBVlZpZGVvQ2FwdHVyZVNvdXJjZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMjlBRTIxMzUyMUFCQTQ4QTAwODY5MjgzIC8qIEFYSXNvbGF0ZWRPYmplY3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTI5QUUyMTJEMjFBQjlFRUIwMDg2OTI4MyAvKiBBWElzb2xh
dGVkVHJlZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMjlBRTIxMzUyMUFCQTQ4QTAwODY5MjgzIC8q
IEFYSXNvbGF0ZWRUcmVlTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjQ1QzIzMUUxOTk1Qjcz
QjAwQTZFMkUzIC8qIEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MjlBODEyMzgwRkJCOUMxRDAwNTEwMjkzIC8qIEFYT2JqZWN0Q2FjaGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkxQzlGMkY5MUFFM0JFQjAwMDk1QjYxQyAvKiBBWFRleHRTdGF0ZUNoYW5nZUludGVu
dC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmNwcAppbmRleCBlMzZhMjBkNjk4YTcwNWYxMGRiMWVkMmY2ZTFkOGI4ZDk5ZGQ1
MjkyLi4wMWE5YWYzMDFiZmU5MjAyOGZlZjkxNTEzMzNhYTlmNWUyMWQ5ZGQyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTMyLDggKzMy
LDggQEAKIAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKIAorI2luY2x1ZGUgIkFYSXNvbGF0
ZWRPYmplY3QuaCIKICNpbmNsdWRlICJBWElzb2xhdGVkVHJlZS5oIgotI2luY2x1ZGUgIkFYSXNv
bGF0ZWRUcmVlTm9kZS5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlBUklBR3JpZC5oIgogI2lu
Y2x1ZGUgIkFjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmls
aXR5QVJJQUdyaWRSb3cuaCIKQEAgLTIzOSwxMSArMjM5LDggQEAgQVhPYmplY3RDYWNoZTo6fkFY
T2JqZWN0Q2FjaGUoKQogICAgICAgICBBWElzb2xhdGVkVHJlZTo6cmVtb3ZlVHJlZUZvclBhZ2VJ
RCgqbV9wYWdlSUQpOwogI2VuZGlmCiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIG9iamVjdCA6IG1f
b2JqZWN0cy52YWx1ZXMoKSkgewotICAgICAgICBkZXRhY2hXcmFwcGVyKG9iamVjdC5nZXQoKSwg
QWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBlOjpDYWNoZURlc3Ryb3llZCk7CisgICAgZm9yIChj
b25zdCBhdXRvJiBvYmplY3QgOiBtX29iamVjdHMudmFsdWVzKCkpCiAgICAgICAgIG9iamVjdC0+
ZGV0YWNoKEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlwZTo6Q2FjaGVEZXN0cm95ZWQpOwotICAg
ICAgICBvYmplY3QtPnNldE9iamVjdElEKDApOwotICAgIH0KIH0KIAogdm9pZCBBWE9iamVjdENh
Y2hlOjpmaW5kTW9kYWxOb2RlcygpCkBAIC04NTcsOSArODU0LDcgQEAgdm9pZCBBWE9iamVjdENh
Y2hlOjpyZW1vdmUoQVhJRCBheElEKQogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm47
CiAKLSAgICBkZXRhY2hXcmFwcGVyKG9iamVjdC5nZXQoKSwgQWNjZXNzaWJpbGl0eURldGFjaG1l
bnRUeXBlOjpFbGVtZW50RGVzdHJveWVkKTsKLSAgICBvYmplY3QtPmRldGFjaChBY2Nlc3NpYmls
aXR5RGV0YWNobWVudFR5cGU6OkVsZW1lbnREZXN0cm95ZWQsIHRoaXMpOwotICAgIG9iamVjdC0+
c2V0T2JqZWN0SUQoMCk7CisgICAgb2JqZWN0LT5kZXRhY2goQWNjZXNzaWJpbGl0eURldGFjaG1l
bnRUeXBlOjpFbGVtZW50RGVzdHJveWVkKTsKIAogICAgIG1faWRzSW5Vc2UucmVtb3ZlKGF4SUQp
OwogICAgIEFTU0VSVChtX29iamVjdHMuc2l6ZSgpID49IG1faWRzSW5Vc2Uuc2l6ZSgpKTsKQEAg
LTMwODAsOCArMzA3NSw3IEBAIFJlZjxBWElzb2xhdGVkT2JqZWN0PiBBWE9iamVjdENhY2hlOjpj
cmVhdGVJc29sYXRlZFRyZWVIaWVyYXJjaHkoQVhDb3JlT2JqZWN0JiBvCiAKICAgICBpc29sYXRl
ZFRyZWVOb2RlLT5zZXRUcmVlSWRlbnRpZmllcih0cmVlLnRyZWVJZGVudGlmaWVyKCkpOwogICAg
IGlzb2xhdGVkVHJlZU5vZGUtPnNldFBhcmVudChwYXJlbnRJRCk7Ci0gICAgYXhPYmplY3RDYWNo
ZS0+ZGV0YWNoV3JhcHBlcigmb2JqZWN0LCBBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGU6OkVs
ZW1lbnRDaGFuZ2UpOwotICAgIGF4T2JqZWN0Q2FjaGUtPmF0dGFjaFdyYXBwZXIoJmlzb2xhdGVk
VHJlZU5vZGUuZ2V0KCkpOworICAgIGlzb2xhdGVkVHJlZU5vZGUtPnRha2VXcmFwcGVyKG9iamVj
dCk7CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIGNoaWxkIDogb2JqZWN0LmNoaWxkcmVuKCkpIHsK
ICAgICAgICAgYXV0byBzdGF0aWNDaGlsZCA9IGNyZWF0ZUlzb2xhdGVkVHJlZUhpZXJhcmNoeSgq
Y2hpbGQsIGlzb2xhdGVkVHJlZU5vZGUtPm9iamVjdElEKCksIGF4T2JqZWN0Q2FjaGUsIHRyZWUs
IG5vZGVDaGFuZ2VzLCBmYWxzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FYT2JqZWN0Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5oCmluZGV4IGQzZDQ1ZjMzYzgwOThkOTczZTk1OTIzNzkyZDEyYTZhNzg5ODBk
YWYuLjRlYTlmNzlhZTI1ZjA3NGZlZDkyMDEwY2U0ZDIwYTBjYzM2ODM4YmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCkBAIC0xNzEsNyArMTcxLDYg
QEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlKFdpZGdldCopOwogICAgIHZvaWQgcmVtb3ZlKEFY
SUQpOwogCi0gICAgdm9pZCBkZXRhY2hXcmFwcGVyKEFYQ29yZU9iamVjdCosIEFjY2Vzc2liaWxp
dHlEZXRhY2htZW50VHlwZSk7CiAgICAgdm9pZCBhdHRhY2hXcmFwcGVyKEFYQ29yZU9iamVjdCop
OwogICAgIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKE5vZGUqLCBOb2RlKiBuZXdDaGlsZCA9IG51bGxw
dHIpOwogICAgIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKFJlbmRlck9iamVjdCosIFJlbmRlck9iamVj
dCogbmV3Q2hpbGQgPSBudWxscHRyKTsKQEAgLTM1Nyw3ICszNTYsNiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkZWZlclRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbkZvclRleHRDb250cm9sKEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50JiwgY29uc3QgU3RyaW5nJiBwcmV2aW91c1ZhbHVlKTsKIAog
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VNYXRjaGVzVGV4dE5lYXJSYW5nZShSZWZQdHI8UmFuZ2U+
LCBjb25zdCBTdHJpbmcmKTsKLSAgICAKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgcG9zdFBsYXRm
b3JtTm90aWZpY2F0aW9uKEFYQ29yZU9iamVjdCosIEFYTm90aWZpY2F0aW9uKTsKQEAgLTU0Nyw3
ICs1NDUsNiBAQCBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpkZWZlclJlY29tcHV0ZUlzSWdu
b3JlZChFbGVtZW50KikgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpkZWZlclRleHRD
aGFuZ2VkSWZOZWVkZWQoTm9kZSopIHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6ZGVm
ZXJTZWxlY3RlZENoaWxkcmVuQ2hhbmdlZElmTmVlZGVkKEVsZW1lbnQmKSB7IH0KIGlubGluZSB2
b2lkIEFYT2JqZWN0Q2FjaGU6OmRlZmVyVGV4dFJlcGxhY2VtZW50Tm90aWZpY2F0aW9uRm9yVGV4
dENvbnRyb2woSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmLCBjb25zdCBTdHJpbmcmKSB7IH0K
LWlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OmRldGFjaFdyYXBwZXIoQVhDb3JlT2JqZWN0Kiwg
QWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBlKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2Fj
aGU6OmZvY3VzTW9kYWxOb2RlVGltZXJGaXJlZCgpIHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RD
YWNoZTo6cGVyZm9ybUNhY2hlVXBkYXRlVGltZXJGaXJlZCgpIHsgfQogaW5saW5lIHZvaWQgQVhP
YmplY3RDYWNoZTo6ZnJhbWVMb2FkaW5nRXZlbnROb3RpZmljYXRpb24oRnJhbWUqLCBBWExvYWRp
bmdFdmVudCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCmluZGV4IDRkYzczZWM2MmFjMmJmYTExOTBjZWE1
YzEyMGIwNTk3N2UxNDUxMDkuLjIwOWViOGU2NThlMGI3MzQxOGVjMmNkMDBjZDgwYTQxNmZhMjkz
M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3QuY3BwCkBAIC0xMDYsMTAgKzEwNiwxMCBAQCBSZWY8QWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q+IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjcmVhdGUoTm9kZSogbm9k
ZSkKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdChub2Rl
KSk7CiB9CiAKLXZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmRldGFjaChBY2Nlc3NpYmls
aXR5RGV0YWNobWVudFR5cGUgZGV0YWNobWVudFR5cGUsIEFYT2JqZWN0Q2FjaGUqIGNhY2hlKQor
dm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6ZGV0YWNoUmVtb3RlUGFydHMoQWNjZXNzaWJp
bGl0eURldGFjaG1lbnRUeXBlIGRldGFjaG1lbnRUeXBlKQogewogICAgIC8vIEFjY2Vzc2liaWxp
dHlPYmplY3QgY2FsbHMgY2xlYXJDaGlsZHJlbi4KLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpk
ZXRhY2goZGV0YWNobWVudFR5cGUsIGNhY2hlKTsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpk
ZXRhY2hSZW1vdGVQYXJ0cyhkZXRhY2htZW50VHlwZSk7CiAgICAgbV9ub2RlID0gbnVsbHB0cjsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdC5oCmluZGV4IDM4MGQ5OTdhNTQxNDdlYzI5ODYyZWNjMTRmZjMwNGJiZTlh
ZTFiNjMuLjc4NWY2Nzg5NDk1ZDdkOWEzOTQ5OTkyMDViNzhmYmY5N2U3OTM5NWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0LmgKQEAgLTEzMiw3ICsxMzIsNyBAQCBwdWJsaWM6CiAgICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogcGFyZW50T2JqZWN0KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogcGFyZW50T2JqZWN0SWZFeGlzdHMoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgZGV0
YWNoKEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlwZSwgQVhPYmplY3RDYWNoZSopIG92ZXJyaWRl
OworICAgIHZvaWQgZGV0YWNoUmVtb3RlUGFydHMoQWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBl
KSBvdmVycmlkZTsKICAgICB2b2lkIGNoaWxkcmVuQ2hhbmdlZCgpIG92ZXJyaWRlOwogICAgIHZv
aWQgdXBkYXRlQWNjZXNzaWJpbGl0eVJvbGUoKSBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKaW5kZXggNmI5
ZTBlZjc2MmVlMzJlNjVkZTg4NzY5Y2ZjYjU3ZDk3NzcyZDMyZC4uZTU2MGQwMWU0ZDJmNTU4OTFm
ZjAzNDBkY2MyZTdkMDIwZGYzN2M4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC05NiwxOSArOTYsMTcgQEAgQWNj
ZXNzaWJpbGl0eU9iamVjdDo6fkFjY2Vzc2liaWxpdHlPYmplY3QoKQogICAgIEFTU0VSVChpc0Rl
dGFjaGVkKCkpOwogfQogCi12b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmRldGFjaChBY2Nlc3Np
YmlsaXR5RGV0YWNobWVudFR5cGUgZGV0YWNobWVudFR5cGUsIEFYT2JqZWN0Q2FjaGUqIGNhY2hl
KQordm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpkZXRhY2hSZW1vdGVQYXJ0cyhBY2Nlc3NpYmls
aXR5RGV0YWNobWVudFR5cGUgZGV0YWNobWVudFR5cGUpCiB7CiAgICAgLy8gTWVudSBjbG9zZSBl
dmVudHMgbmVlZCB0byBub3RpZnkgdGhlIHBsYXRmb3JtLiBObyBlbGVtZW50IGlzIHVzZWQgaW4g
dGhlIG5vdGlmaWNhdGlvbiBiZWNhdXNlIGl0J3MgYSBkZXN0cnVjdGlvbiBldmVudC4KLSAgICBp
ZiAoZGV0YWNobWVudFR5cGUgPT0gQWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBlOjpFbGVtZW50
RGVzdHJveWVkICYmIHJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpNZW51ICYmIGNh
Y2hlKQotICAgICAgICBjYWNoZS0+cG9zdE5vdGlmaWNhdGlvbihudWxscHRyLCAmY2FjaGUtPmRv
Y3VtZW50KCksIEFYT2JqZWN0Q2FjaGU6OkFYTWVudUNsb3NlZCk7Ci0gICAgCisgICAgaWYgKGRl
dGFjaG1lbnRUeXBlID09IEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlwZTo6RWxlbWVudERlc3Ry
b3llZCAmJiByb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6TWVudSkgeworICAgICAg
ICBpZiAoYXV0byogY2FjaGUgPSBheE9iamVjdENhY2hlKCkpCisgICAgICAgICAgICBjYWNoZS0+
cG9zdE5vdGlmaWNhdGlvbihudWxscHRyLCAmY2FjaGUtPmRvY3VtZW50KCksIEFYT2JqZWN0Q2Fj
aGU6OkFYTWVudUNsb3NlZCk7CisgICAgfQorCiAgICAgLy8gQ2xlYXIgYW55IGNoaWxkcmVuIGFu
ZCBjYWxsIGRldGFjaEZyb21QYXJlbnQgb24gdGhlbSBzbyB0aGF0CiAgICAgLy8gbm8gY2hpbGRy
ZW4gYXJlIGxlZnQgd2l0aCBkYW5nbGluZyBwb2ludGVycyB0byB0aGVpciBwYXJlbnQuCiAgICAg
Y2xlYXJDaGlsZHJlbigpOwotCi0jaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFkpCi0gICAgc2V0V3Jh
cHBlcihudWxscHRyKTsKLSNlbmRpZgogfQogCiBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6Omlz
RGV0YWNoZWQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlPYmplY3QuaAppbmRleCA5YmYwNDk3OGI3MTI4OTZmNjFkY2U0OGMzYmJhYTJm
YWZhNzM2NTZiLi5iMzY3NzM4YzFiMTljYTYwYWFiMTc3MTk1OTM2OWQ4YTkzNWYzMjA3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
aApAQCAtMTA4LDExICsxMDgsMTcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0T2JqZWN0SUQoQVhJ
RCBpZCkgb3ZlcnJpZGUgeyBtX2lkID0gaWQ7IH0KICAgICB2b2lkIGluaXQoKSBvdmVycmlkZSB7
IH0KIAotICAgIC8vIFdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgV2ViQ29yZSBvYmplY3QgdGhhdCB0
aGlzIEFjY2Vzc2liaWxpdHlPYmplY3QKLSAgICAvLyB3cmFwcyBpcyBkZWxldGVkLCBpdCBtdXN0
IGJlIGRldGFjaGVkLgotICAgIHZvaWQgZGV0YWNoKEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlw
ZSwgQVhPYmplY3RDYWNoZSogPSBudWxscHRyKSBvdmVycmlkZTsKICAgICBib29sIGlzRGV0YWNo
ZWQoKSBjb25zdCBvdmVycmlkZTsKK3Byb3RlY3RlZDoKKyAgICAvLyBXaGVuIHRoZSBjb3JyZXNw
b25kaW5nIFdlYkNvcmUgb2JqZWN0IHRoYXQgdGhpcyBBY2Nlc3NpYmlsaXR5T2JqZWN0CisgICAg
Ly8gd3JhcHMgaXMgZGVsZXRlZCwgaXQgbXVzdCBiZSBkZXRhY2hlZCBmcm9tIGFsbCByZWZlcmVu
Y2VzLgorICAgIHZvaWQgZGV0YWNoUmVtb3RlUGFydHMoQWNjZXNzaWJpbGl0eURldGFjaG1lbnRU
eXBlKSBvdmVycmlkZTsKIAorcHJpdmF0ZToKKyAgICB2b2lkIGF0dGFjaFBsYXRmb3JtV3JhcHBl
cigpIG92ZXJyaWRlOworICAgIHZvaWQgZGV0YWNoUGxhdGZvcm1XcmFwcGVyKEFjY2Vzc2liaWxp
dHlEZXRhY2htZW50VHlwZSkgb3ZlcnJpZGU7CisKK3B1YmxpYzoKICAgICBib29sIGlzQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAg
IGJvb2wgaXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KICAgICBib29sIGlzQWNjZXNzaWJpbGl0eVNjcm9sbGJhcigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oCmluZGV4IDFkZmQz
NDI1ZjFiM2JkOGE2MmYxNDFkZDgwZmJjYWVmNzU1NDhlYmEuLjgwYjUwOWIxZWMxZTIxOGNhMjhk
YWViM2Q2ZTM4MjhmNzgzMDNiYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oCkBAIC00NzcsNyAr
NDc3LDcgQEAgcHVibGljOgogCiAgICAgLy8gV2hlbiB0aGUgY29ycmVzcG9uZGluZyBXZWJDb3Jl
IG9iamVjdCB0aGF0IHRoaXMgYWNjZXNzaWJsZSBvYmplY3QKICAgICAvLyByZXByZXNlbnRzIGlz
IGRlbGV0ZWQsIGl0IG11c3QgYmUgZGV0YWNoZWQuCi0gICAgdmlydHVhbCB2b2lkIGRldGFjaChB
Y2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGUsIEFYT2JqZWN0Q2FjaGUqID0gbnVsbHB0cikgPSAw
OworICAgIHZvaWQgZGV0YWNoKEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlwZSk7CiAgICAgdmly
dHVhbCBib29sIGlzRGV0YWNoZWQoKSBjb25zdCA9IDA7CiAKICAgICB0eXBlZGVmIFZlY3RvcjxS
ZWZQdHI8QVhDb3JlT2JqZWN0Pj4gQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yOwpAQCAtMTA3
OCw2ICsxMDc4LDggQEAgcHVibGljOgogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZKQogICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiB3cmFwcGVyKCkgY29uc3QgeyByZXR1cm4gbV93cmFw
cGVyLmdldCgpOyB9CiAgICAgdm9pZCBzZXRXcmFwcGVyKEFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyKiB3cmFwcGVyKSB7IG1fd3JhcHBlciA9IHdyYXBwZXI7IH0KKyAgICB2b2lkIGRldGFjaFdy
YXBwZXIoQWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBlKTsKKyAgICB2b2lkIHRha2VXcmFwcGVy
KEFYQ29yZU9iamVjdCYpOwogI2Vsc2UKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciog
d3JhcHBlcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICB2b2lkIHNl
dFdyYXBwZXIoQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqKSBvdmVycmlkZSB7IH0KQEAgLTEx
MjksNyArMTEzMSwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB1aW50NjRfdCBzZXNzaW9uSUQo
KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgZG9jdW1lbnRVUkkoKSBjb25zdCA9IDA7
CiAgICAgdmlydHVhbCBTdHJpbmcgZG9jdW1lbnRFbmNvZGluZygpIGNvbnN0ID0gMDsKLXByb3Rl
Y3RlZDoKK3ByaXZhdGU6CisgICAgLy8gRGV0YWNoZXMgdGhpcyBvYmplY3QgZnJvbSB0aGUgb2Jq
ZWN0cyBpdCByZWZlcmVuY2VzIGFuZCBpdCBpcyByZWZlcmVuY2VkIGJ5LgorICAgIHZpcnR1YWwg
dm9pZCBkZXRhY2hSZW1vdGVQYXJ0cyhBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGUpID0gMDsK
KwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFJldGFpblB0cjxXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlcj4gbV93cmFwcGVyOwogI2VsaWYgUExBVEZPUk0oV0lOKQpAQCAtMTEzNyw4ICsx
MTQyLDMwIEBAIHByb3RlY3RlZDoKICNlbGlmIFVTRShBVEspCiAgICAgR1JlZlB0cjxXZWJLaXRB
Y2Nlc3NpYmxlPiBtX3dyYXBwZXI7CiAjZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoUGxh
dGZvcm1XcmFwcGVyKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hQbGF0Zm9ybVdyYXBw
ZXIoQWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBlKSA9IDA7CiB9OwogCitpbmxpbmUgdm9pZCBB
WENvcmVPYmplY3Q6OmRldGFjaChBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGUgZGV0YWNobWVu
dFR5cGUpCit7CisgICAgZGV0YWNoV3JhcHBlcihkZXRhY2htZW50VHlwZSk7CisgICAgZGV0YWNo
UmVtb3RlUGFydHMoZGV0YWNobWVudFR5cGUpOworICAgIHNldE9iamVjdElEKEludmFsaWRBWElE
KTsKK30KKworaW5saW5lIHZvaWQgQVhDb3JlT2JqZWN0OjpkZXRhY2hXcmFwcGVyKEFjY2Vzc2li
aWxpdHlEZXRhY2htZW50VHlwZSBkZXRhY2htZW50VHlwZSkKK3sKKyAgICBkZXRhY2hQbGF0Zm9y
bVdyYXBwZXIoZGV0YWNobWVudFR5cGUpOworICAgIG1fd3JhcHBlciA9IG51bGxwdHI7Cit9CisK
K2lubGluZSB2b2lkIEFYQ29yZU9iamVjdDo6dGFrZVdyYXBwZXIoQVhDb3JlT2JqZWN0JiBvdGhl
cikKK3sKKyAgICBtX3dyYXBwZXIgPSBvdGhlci5tX3dyYXBwZXI7CisgICAgb3RoZXIuZGV0YWNo
V3JhcHBlcihBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGU6OkVsZW1lbnRDaGFuZ2UpOworICAg
IGF0dGFjaFBsYXRmb3JtV3JhcHBlcigpOworfQorCiBuYW1lc3BhY2UgQWNjZXNzaWJpbGl0eSB7
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEY+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApp
bmRleCA1MTQ3ODhhM2EyOGM0YWVjYzQ2N2YyMDI5NDc2MTc1ODhhODllMWU4Li45NDI2YWQ5ZWNh
ZmExOWIwZDhhNmJiNWM5NDZiZGMwNWE0MmZiYzczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAg
LTEzMywxMiArMTMzLDEyIEBAIFJlZjxBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0PiBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0OjpjcmVhdGUoUmVuZGVyT2JqZWN0KiByCiAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdChyZW5kZXJlcikpOwogfQogCi12
b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRldGFjaChBY2Nlc3NpYmlsaXR5RGV0YWNo
bWVudFR5cGUgZGV0YWNobWVudFR5cGUsIEFYT2JqZWN0Q2FjaGUqIGNhY2hlKQordm9pZCBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpkZXRhY2hSZW1vdGVQYXJ0cyhBY2Nlc3NpYmlsaXR5RGV0
YWNobWVudFR5cGUgZGV0YWNobWVudFR5cGUpCiB7Ci0gICAgQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q6OmRldGFjaChkZXRhY2htZW50VHlwZSwgY2FjaGUpOwotICAgIAorICAgIEFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0OjpkZXRhY2hSZW1vdGVQYXJ0cyhkZXRhY2htZW50VHlwZSk7CisKICAgICBk
ZXRhY2hSZW1vdGVTVkdSb290KCk7Ci0gICAgCisKICNpZm5kZWYgTkRFQlVHCiAgICAgaWYgKG1f
cmVuZGVyZXIpCiAgICAgICAgIG1fcmVuZGVyZXItPnNldEhhc0FYT2JqZWN0KGZhbHNlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmgKaW5kZXggM2YzNDY3ODNlNDhhOTVkODNiOWQzM2UxMGRjZjNiOWQ1MGI4OWNi
MC4uM2U4MDEyNmY0MTZlZmMxODg4OWFkOWEzYWNiNDg2ZjQzMzJmMTNmNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmgKQEAgLTE0OSw4ICsxNDksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRWYWx1ZShjb25z
dCBTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFNlbGVjdGVkUm93cyhBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3ImKSBvdmVycmlkZTsKICAgICBBY2Nlc3NpYmlsaXR5T3JpZW50YXRp
b24gb3JpZW50YXRpb24oKSBjb25zdCBvdmVycmlkZTsKLSAgICAKLSAgICB2b2lkIGRldGFjaChB
Y2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGUsIEFYT2JqZWN0Q2FjaGUqKSBvdmVycmlkZTsKKwog
ICAgIHZvaWQgdGV4dENoYW5nZWQoKSBvdmVycmlkZTsKICAgICB2b2lkIGFkZENoaWxkcmVuKCkg
b3ZlcnJpZGU7CiAgICAgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdCBvdmVycmlkZTsKQEAg
LTIxOCw2ICsyMTcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgV2Vha1B0cjxSZW5kZXJPYmplY3Q+IG1f
cmVuZGVyZXI7CiAKIHByaXZhdGU6CisgICAgdm9pZCBkZXRhY2hSZW1vdGVQYXJ0cyhBY2Nlc3Np
YmlsaXR5RGV0YWNobWVudFR5cGUpIG92ZXJyaWRlOwogICAgIGJvb2wgaXNBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZvaWQgYXJp
YUxpc3Rib3hTZWxlY3RlZENoaWxkcmVuKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpOwog
ICAgIHZvaWQgYXJpYUxpc3Rib3hWaXNpYmxlQ2hpbGRyZW4oQWNjZXNzaWJpbGl0eUNoaWxkcmVu
VmVjdG9yJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlTY3JvbGxWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVNjcm9sbFZpZXcuY3BwCmluZGV4IGQxMTZlZGRmZDdlNjkxMGJhOTYzOWNmNmNm
NWIxYmEyMmJlNGQ4ZmMuLmFjZTAxMTNiNmY5ZGQyYzliMzczZWVjY2QxZjQ5ZGEzZmYwYmZmZmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNj
cm9sbFZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVNjcm9sbFZpZXcuY3BwCkBAIC00OCw5ICs0OCw5IEBAIEFjY2Vzc2liaWxpdHlTY3JvbGxW
aWV3Ojp+QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoKQogICAgIEFTU0VSVChpc0RldGFjaGVkKCkp
OwogfQogCi12b2lkIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3OjpkZXRhY2goQWNjZXNzaWJpbGl0
eURldGFjaG1lbnRUeXBlIGRldGFjaG1lbnRUeXBlLCBBWE9iamVjdENhY2hlKiBjYWNoZSkKK3Zv
aWQgQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc6OmRldGFjaFJlbW90ZVBhcnRzKEFjY2Vzc2liaWxp
dHlEZXRhY2htZW50VHlwZSBkZXRhY2htZW50VHlwZSkKIHsKLSAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpkZXRhY2goZGV0YWNobWVudFR5cGUsIGNhY2hlKTsKKyAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpkZXRhY2hSZW1vdGVQYXJ0cyhkZXRhY2htZW50VHlwZSk7CiAgICAgbV9zY3JvbGxWaWV3
ID0gbnVsbHB0cjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5oCmluZGV4IDliZmFmMTU1YWRiMjMyYTU2NjNmNThj
YjA4YzEyYzEzM2UyYzM1MWMuLjM5YjNmYWFiNTExYWMxYTNiZWU2MzZlMmEyNWE0OWMxMjlhNTAz
NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVNjcm9sbFZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlTY3JvbGxWaWV3LmgKQEAgLTQwLDEzICs0MCwxMyBAQCBwdWJsaWM6CiAgICAgU2Nyb2xs
Vmlldyogc2Nyb2xsVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsVmlldzsgfQogCiAgICAg
dmlydHVhbCB+QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoKTsKLSAgICB2b2lkIGRldGFjaChBY2Nl
c3NpYmlsaXR5RGV0YWNobWVudFR5cGUsIEFYT2JqZWN0Q2FjaGUqKSBvdmVycmlkZTsKIAogICAg
IEFjY2Vzc2liaWxpdHlPYmplY3QqIHdlYkFyZWFPYmplY3QoKSBjb25zdDsKIAogcHJpdmF0ZToK
ICAgICBleHBsaWNpdCBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyhTY3JvbGxWaWV3Kik7Ci0gICAg
CisgICAgdm9pZCBkZXRhY2hSZW1vdGVQYXJ0cyhBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGUp
IG92ZXJyaWRlOworCiAgICAgU2Nyb2xsYWJsZUFyZWEqIGdldFNjcm9sbGFibGVBcmVhSWZTY3Jv
bGxhYmxlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBzY3JvbGxUbyhjb25zdCBJbnRQb2lu
dCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgY29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9y
ZWQoKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvYXRrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9hdGsvQVhPYmplY3RDYWNoZUF0ay5jcHAKaW5kZXggZmUxMjYwZDdmZGNmNjg4OThhZDg1
NTc4NGIwNTFkM2Q3MjFkMTA2Zi4uNjRkMjU2YWMxZThlN2JjODE4NjAxZjY5OWE3YmRhMGU5ZmI2
OTgzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvQVhPYmpl
Y3RDYWNoZUF0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvQVhP
YmplY3RDYWNoZUF0ay5jcHAKQEAgLTQ4LDE5ICs0OCw2IEBAIHN0YXRpYyBBdGtPYmplY3QqIHdy
YXBwZXJQYXJlbnQoV2ViS2l0QWNjZXNzaWJsZSogd3JhcHBlcikKICAgICByZXR1cm4gV0VCS0lU
X0lTX0FDQ0VTU0lCTEUoYXRrUGFyZW50KSA/IGF0a1BhcmVudCA6IG51bGxwdHI7CiB9CiAKLXZv
aWQgQVhPYmplY3RDYWNoZTo6ZGV0YWNoV3JhcHBlcihBWENvcmVPYmplY3QqIG9iaiwgQWNjZXNz
aWJpbGl0eURldGFjaG1lbnRUeXBlIGRldGFjaG1lbnRUeXBlKQotewotICAgIGF1dG8qIHdyYXBw
ZXIgPSBvYmotPndyYXBwZXIoKTsKLSAgICBBU1NFUlQod3JhcHBlcik7Ci0KLSAgICAvLyBJZiBh
biBvYmplY3QgaXMgYmVpbmcgZGV0YWNoZWQgTk9UIGJlY2F1c2Ugb2YgdGhlIEFYT2JqZWN0Q2Fj
aGUgYmVpbmcgZGVzdHJveWVkLAotICAgIC8vIHRoZW4gaXQncyBiZWluZyByZW1vdmVkIGZyb20g
dGhlIGFjY2Vzc2liaWxpdHkgdHJlZSBhbmQgd2Ugc2hvdWxkIGVtaXQgYSBzaWduYWwuCi0gICAg
aWYgKGRldGFjaG1lbnRUeXBlICE9IEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlwZTo6Q2FjaGVE
ZXN0cm95ZWQgJiYgb2JqLT5kb2N1bWVudCgpICYmIHdyYXBwZXJQYXJlbnQod3JhcHBlcikpCi0g
ICAgICAgIG1fZGVmZXJyZWREZXRhY2hlZFdyYXBwZXJMaXN0LmFkZCh3cmFwcGVyKTsKLQotICAg
IHdlYmtpdEFjY2Vzc2libGVEZXRhY2goV0VCS0lUX0FDQ0VTU0lCTEUod3JhcHBlcikpOwotfQot
CiB2b2lkIEFYT2JqZWN0Q2FjaGU6OmF0dGFjaFdyYXBwZXIoQVhDb3JlT2JqZWN0KiBvYmopCiB7
CiAgICAgLy8gRklYTUU6IGF0IHRoZSBtb21lbnQsIG9ubHkgYWxsb3cgdG8gYXR0YWNoIEFjY2Vz
c2liaWxpdHlPYmplY3RzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9hdGsvQWNjZXNzaWJpbGl0eU9iamVjdEF0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcAppbmRleCAyNjQwYzY5MzU2NWM3
ZTdmNGZmNzgzOTJhNjI3MGJkNjk5N2RlYzk1Li4zOGE1OTU0OTYwNWNlYWVkNjlhMDM1ODBjZDM4
MGJkMDVmNDUxNmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0
ay9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcApAQCAtMzQsNiArMzQsMTkgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmRldGFj
aFBsYXRmb3JtV3JhcHBlcihBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGUgZGV0YWNobWVudFR5
cGUpCit7CisgICAgYXV0byogd3JhcHBlciA9IHRoaXMtPndyYXBwZXIoKTsKKyAgICBBU1NFUlQo
d3JhcHBlcik7CisKKyAgICAvLyBJZiBhbiBvYmplY3QgaXMgYmVpbmcgZGV0YWNoZWQgTk9UIGJl
Y2F1c2Ugb2YgdGhlIEFYT2JqZWN0Q2FjaGUgYmVpbmcgZGVzdHJveWVkLAorICAgIC8vIHRoZW4g
aXQncyBiZWluZyByZW1vdmVkIGZyb20gdGhlIGFjY2Vzc2liaWxpdHkgdHJlZSBhbmQgd2Ugc2hv
dWxkIGVtaXQgYSBzaWduYWwuCisgICAgaWYgKGRldGFjaG1lbnRUeXBlICE9IEFjY2Vzc2liaWxp
dHlEZXRhY2htZW50VHlwZTo6Q2FjaGVEZXN0cm95ZWQgJiYgZG9jdW1lbnQoKSAmJiB3cmFwcGVy
UGFyZW50KHdyYXBwZXIpKQorICAgICAgICBtX2RlZmVycmVkRGV0YWNoZWRXcmFwcGVyTGlzdC5h
ZGQod3JhcHBlcik7CisKKyAgICB3ZWJraXRBY2Nlc3NpYmxlRGV0YWNoKFdFQktJVF9BQ0NFU1NJ
QkxFKHdyYXBwZXIpKTsKK30KKwogYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphY2Nlc3NpYmls
aXR5SWdub3JlQXR0YWNobWVudCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvQVhPYmplY3RDYWNoZUlPUy5t
bSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FYT2JqZWN0Q2FjaGVJT1MubW0K
aW5kZXggZjExYmZhOGUwZmFmOTk4NTdmYzFhZTgxNmI2NjdhYWVlMTU0NWJlNS4uY2MzM2EyYmNl
MmVkNDQ3NDY2MjM1YjI5OTE0YzQ4Zjc5OWMyMjg4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9pb3MvQVhPYmplY3RDYWNoZUlPUy5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BWE9iamVjdENhY2hlSU9TLm1tCkBAIC0zNiwxMiArMzYs
NiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi12b2lkIEFYT2JqZWN0Q2FjaGU6OmRl
dGFjaFdyYXBwZXIoQVhDb3JlT2JqZWN0KiBvYmosIEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlw
ZSkKLXsKLSAgICBbb2JqLT53cmFwcGVyKCkgZGV0YWNoXTsKLSAgICBvYmotPnNldFdyYXBwZXIo
bnVsbHB0cik7Ci19Ci0KIHZvaWQgQVhPYmplY3RDYWNoZTo6YXR0YWNoV3JhcHBlcihBWENvcmVP
YmplY3QqIG9iaikKIHsKICAgICBSZXRhaW5QdHI8QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+
IHdyYXBwZXIgPSBhZG9wdE5TKFtbV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWxsb2Nd
IGluaXRXaXRoQWNjZXNzaWJpbGl0eU9iamVjdDpvYmpdKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxpdHlPYmplY3RJT1MubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1tCmlu
ZGV4IDdlMDVhY2ZmZmM5YWVhN2ZkMjRhZjY0OWQ5N2E3ZDQ4YTY5MmRhN2QuLjE5NWZmODg3ODUy
NThmMTFiZjEwZTg3ZTEzNWI1NjY1MTk5Yzc2YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxpdHlPYmplY3RJT1MubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvQWNjZXNzaWJpbGl0eU9iamVjdElPUy5tbQpAQCAt
MzYsNyArMzYsMTcgQEAKICNpbXBvcnQgIldlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9T
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKKwordm9pZCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjphdHRhY2hQbGF0Zm9ybVdyYXBwZXIoKQoreworICAgIFt3cmFwcGVyKCkgYXR0YWNoOnRo
aXNdOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmRldGFjaFBsYXRmb3JtV3JhcHBl
cihBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGUpCit7CisgICAgW3dyYXBwZXIoKSBkZXRhY2hd
OworfQorCiB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmRldGFjaEZyb21QYXJlbnQoKQogewog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUv
QVhJc29sYXRlZE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xh
dGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZDgxYjc0OTUyNGYwMzJh
OTZkNjg3ZGQzNjQxZGI1Yjc4NjY5MDUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKQEAgLTAs
MCArMSwxODY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5B
QkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKKyNpbmNsdWRlICJBWElzb2xhdGVkT2Jq
ZWN0LmgiCisKKyNpbmNsdWRlICJBWElzb2xhdGVkVHJlZS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0FYSXNvbGF0ZWRPYmplY3Q6OkFYSXNvbGF0ZWRPYmplY3QoQVhDb3JlT2JqZWN0JiBv
YmplY3QsIGJvb2wgaXNSb290KQorICAgIDogbV9pZChvYmplY3Qub2JqZWN0SUQoKSkKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGluaXRpYWxpemVBdHRyaWJ1dGVEYXRhKG9i
amVjdCwgaXNSb290KTsKKyAgICBtX2luaXRpYWxpemVkID0gdHJ1ZTsKK30KKworUmVmPEFYSXNv
bGF0ZWRPYmplY3Q+IEFYSXNvbGF0ZWRPYmplY3Q6OmNyZWF0ZShBWENvcmVPYmplY3QmIG9iamVj
dCwgYm9vbCBpc1Jvb3QpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQVhJc29sYXRlZE9i
amVjdChvYmplY3QsIGlzUm9vdCkpOworfQorCitBWElzb2xhdGVkT2JqZWN0Ojp+QVhJc29sYXRl
ZE9iamVjdCgpID0gZGVmYXVsdDsKKwordm9pZCBBWElzb2xhdGVkT2JqZWN0Ojppbml0aWFsaXpl
QXR0cmlidXRlRGF0YShBWENvcmVPYmplY3QmIG9iamVjdCwgYm9vbCBpc1Jvb3QpCit7CisgICAg
c2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkJvdW5kaW5nQm94UmVjdCwgb2JqZWN0LmJvdW5k
aW5nQm94UmVjdCgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6RWxlbWVudFJl
Y3QsIG9iamVjdC5lbGVtZW50UmVjdCgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFt
ZTo6Um9sZVZhbHVlLCBzdGF0aWNfY2FzdDxpbnQ+KG9iamVjdC5yb2xlVmFsdWUoKSkpOworICAg
IHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpSb2xlUGxhdGZvcm1TdHJpbmcsIG9iamVjdC5y
b2xlUGxhdGZvcm1TdHJpbmcoKS5pc29sYXRlZENvcHkoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQ
cm9wZXJ0eU5hbWU6OkFSSUFMYW5kbWFya1JvbGVEZXNjcmlwdGlvbiwgb2JqZWN0LmFyaWFMYW5k
bWFya1JvbGVEZXNjcmlwdGlvbigpLmlzb2xhdGVkQ29weSgpKTsKKyAgICBzZXRQcm9wZXJ0eShB
WFByb3BlcnR5TmFtZTo6Um9sZURlc2NyaXB0aW9uLCBvYmplY3Qucm9sZURlc2NyaXB0aW9uKCku
aXNvbGF0ZWRDb3B5KCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0F0dGFj
aG1lbnQsIG9iamVjdC5pc0F0dGFjaG1lbnQoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0
eU5hbWU6OklzTGluaywgb2JqZWN0LmlzTGluaygpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3Bl
cnR5TmFtZTo6SXNJbWFnZU1hcExpbmssIG9iamVjdC5pc0ltYWdlTWFwTGluaygpKTsKKyAgICBz
ZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNJbWFnZSwgb2JqZWN0LmlzSW1hZ2UoKSk7Cisg
ICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzRmlsZVVwbG9hZEJ1dHRvbiwgb2JqZWN0
LmlzRmlsZVVwbG9hZEJ1dHRvbigpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6
SXNBY2Nlc3NpYmlsaXR5SWdub3JlZCwgb2JqZWN0LmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSk7
CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzVHJlZSwgb2JqZWN0LmlzVHJlZSgp
KTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNTY3JvbGxiYXIsIG9iamVjdC5p
c1Njcm9sbGJhcigpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6UmVsYXRpdmVG
cmFtZSwgb2JqZWN0LnJlbGF0aXZlRnJhbWUoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0
eU5hbWU6OlNwZWVjaEhpbnQsIG9iamVjdC5zcGVlY2hIaW50QXR0cmlidXRlVmFsdWUoKS5pc29s
YXRlZENvcHkoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlRpdGxlLCBvYmpl
Y3QudGl0bGVBdHRyaWJ1dGVWYWx1ZSgpLmlzb2xhdGVkQ29weSgpKTsKKyAgICBzZXRQcm9wZXJ0
eShBWFByb3BlcnR5TmFtZTo6RGVzY3JpcHRpb24sIG9iamVjdC5kZXNjcmlwdGlvbkF0dHJpYnV0
ZVZhbHVlKCkuaXNvbGF0ZWRDb3B5KCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1l
OjpIZWxwVGV4dCwgb2JqZWN0LmhlbHBUZXh0QXR0cmlidXRlVmFsdWUoKS5pc29sYXRlZENvcHko
KSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzU2VhcmNoRmllbGQsIG9iamVj
dC5pc1NlYXJjaEZpZWxkKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc01l
ZGlhVGltZWxpbmUsIG9iamVjdC5pc01lZGlhVGltZWxpbmUoKSk7CisgICAgc2V0UHJvcGVydHko
QVhQcm9wZXJ0eU5hbWU6OklzTWVudVJlbGF0ZWQsIG9iamVjdC5pc01lbnVSZWxhdGVkKCkpOwor
ICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc01lbnUsIG9iamVjdC5pc01lbnUoKSk7
CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTWVudUJhciwgb2JqZWN0LmlzTWVu
dUJhcigpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNNZW51QnV0dG9uLCBv
YmplY3QuaXNNZW51QnV0dG9uKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJ
c01lbnVJdGVtLCBvYmplY3QuaXNNZW51SXRlbSgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3Bl
cnR5TmFtZTo6SXNJbnB1dEltYWdlLCBvYmplY3QuaXNJbnB1dEltYWdlKCkpOworICAgIHNldFBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc1Byb2dyZXNzSW5kaWNhdG9yLCBvYmplY3QuaXNQcm9n
cmVzc0luZGljYXRvcigpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNTbGlk
ZXIsIG9iamVjdC5pc1NsaWRlcigpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6
SXNDb250cm9sLCBvYmplY3QuaXNDb250cm9sKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVy
dHlOYW1lOjpJc0xpc3QsIG9iamVjdC5pc0xpc3QoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9w
ZXJ0eU5hbWU6OklzVW5vcmRlcmVkTGlzdCwgb2JqZWN0LmlzVW5vcmRlcmVkTGlzdCgpKTsKKyAg
ICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNPcmRlcmVkTGlzdCwgb2JqZWN0LmlzT3Jk
ZXJlZExpc3QoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzRGVzY3JpcHRp
b25MaXN0LCBvYmplY3QuaXNEZXNjcmlwdGlvbkxpc3QoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQ
cm9wZXJ0eU5hbWU6OklzVGFibGVSb3csIG9iamVjdC5pc1RhYmxlUm93KCkpOworICAgIHNldFBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc1RhYmxlQ29sdW1uLCBvYmplY3QuaXNUYWJsZUNvbHVt
bigpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNUYWJsZUNlbGwsIG9iamVj
dC5pc1RhYmxlQ2VsbCgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNGaWVs
ZHNldCwgb2JqZWN0LmlzRmllbGRzZXQoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5h
bWU6OklzR3JvdXAsIG9iamVjdC5pc0dyb3VwKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVy
dHlOYW1lOjpJc0FSSUFUcmVlR3JpZFJvdywgb2JqZWN0LmlzQVJJQVRyZWVHcmlkUm93KCkpOwor
ICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc01lbnVMaXN0LCBvYmplY3QuaXNNZW51
TGlzdCgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNNZW51TGlzdFBvcHVw
LCBvYmplY3QuaXNNZW51TGlzdFBvcHVwKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlO
YW1lOjpJc01lbnVMaXN0T3B0aW9uLCBvYmplY3QuaXNNZW51TGlzdE9wdGlvbigpKTsKKyAgICBz
ZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNUZXh0Q29udHJvbCwgb2JqZWN0LmlzVGV4dENv
bnRyb2woKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzQnV0dG9uLCBvYmpl
Y3QuaXNCdXR0b24oKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzUmFuZ2VD
b250cm9sLCBvYmplY3QuaXNSYW5nZUNvbnRyb2woKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9w
ZXJ0eU5hbWU6OklzU3R5bGVGb3JtYXRHcm91cCwgb2JqZWN0LmlzU3R5bGVGb3JtYXRHcm91cCgp
KTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNPdXRwdXQsIG9iamVjdC5pc091
dHB1dCgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNEYXRldGlt
ZUF0dHJpYnV0ZSwgb2JqZWN0LnN1cHBvcnRzRGF0ZXRpbWVBdHRyaWJ1dGUoKSk7CisgICAgc2V0
UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkRhdGV0aW1lQXR0cmlidXRlVmFsdWUsIG9iamVjdC5k
YXRldGltZUF0dHJpYnV0ZVZhbHVlKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1l
OjpDYW5TZXRGb2N1c0F0dHJpYnV0ZSwgb2JqZWN0LmNhblNldEZvY3VzQXR0cmlidXRlKCkpOwor
ICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDYW5TZXRUZXh0UmFuZ2VBdHRyaWJ1dGVz
LCBvYmplY3QuY2FuU2V0VGV4dFJhbmdlQXR0cmlidXRlcygpKTsKKyAgICBzZXRQcm9wZXJ0eShB
WFByb3BlcnR5TmFtZTo6Q2FuU2V0VmFsdWVBdHRyaWJ1dGUsIG9iamVjdC5jYW5TZXRWYWx1ZUF0
dHJpYnV0ZSgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6Q2FuU2V0TnVtZXJp
Y1ZhbHVlLCBvYmplY3QuY2FuU2V0TnVtZXJpY1ZhbHVlKCkpOworICAgIHNldFByb3BlcnR5KEFY
UHJvcGVydHlOYW1lOjpJc1Bhc3N3b3JkRmllbGQsIG9iamVjdC5pc1Bhc3N3b3JkRmllbGQoKSk7
CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzSGVhZGluZywgb2JqZWN0LmlzSGVh
ZGluZygpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNDaGVja2VkLCBvYmpl
Y3QuaXNDaGVja2VkKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0VuYWJs
ZWQsIG9iamVjdC5pc0VuYWJsZWQoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6
OklzU2VsZWN0ZWQsIG9iamVjdC5pc1NlbGVjdGVkKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJv
cGVydHlOYW1lOjpJc0ZvY3VzZWQsIG9iamVjdC5pc0ZvY3VzZWQoKSk7CisgICAgc2V0UHJvcGVy
dHkoQVhQcm9wZXJ0eU5hbWU6OklzSG92ZXJlZCwgb2JqZWN0LmlzSG92ZXJlZCgpKTsKKyAgICBz
ZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNJbmRldGVybWluYXRlLCBvYmplY3QuaXNJbmRl
dGVybWluYXRlKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0xvYWRlZCwg
b2JqZWN0LmlzTG9hZGVkKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc011
bHRpU2VsZWN0YWJsZSwgb2JqZWN0LmlzTXVsdGlTZWxlY3RhYmxlKCkpOworICAgIHNldFByb3Bl
cnR5KEFYUHJvcGVydHlOYW1lOjpJc09uU2NyZWVuLCBvYmplY3QuaXNPblNjcmVlbigpKTsKKyAg
ICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNPZmZTY3JlZW4sIG9iamVjdC5pc09mZlNj
cmVlbigpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNQcmVzc2VkLCBvYmpl
Y3QuaXNQcmVzc2VkKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc1Vudmlz
aXRlZCwgb2JqZWN0LmlzVW52aXNpdGVkKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlO
YW1lOjpJc1Zpc2l0ZWQsIG9iamVjdC5pc1Zpc2l0ZWQoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQ
cm9wZXJ0eU5hbWU6OklzUmVxdWlyZWQsIG9iamVjdC5pc1JlcXVpcmVkKCkpOworICAgIHNldFBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c1JlcXVpcmVkQXR0cmlidXRlLCBvYmplY3Qu
c3VwcG9ydHNSZXF1aXJlZEF0dHJpYnV0ZSgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5
TmFtZTo6SXNMaW5rZWQsIG9iamVjdC5pc0xpbmtlZCgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFBy
b3BlcnR5TmFtZTo6SXNFeHBhbmRlZCwgb2JqZWN0LmlzRXhwYW5kZWQoKSk7CisgICAgc2V0UHJv
cGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzVmlzaWJsZSwgb2JqZWN0LmlzVmlzaWJsZSgpKTsKKyAg
ICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNDb2xsYXBzZWQsIG9iamVjdC5pc0NvbGxh
cHNlZCgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNTZWxlY3RlZE9wdGlv
bkFjdGl2ZSwgb2JqZWN0LmlzU2VsZWN0ZWRPcHRpb25BY3RpdmUoKSk7CisgICAgc2V0UHJvcGVy
dHkoQVhQcm9wZXJ0eU5hbWU6OkNhblNldFNlbGVjdGVkQXR0cmlidXRlLCBvYmplY3QuY2FuU2V0
U2VsZWN0ZWRBdHRyaWJ1dGUoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkNh
blNldFNlbGVjdGVkQ2hpbGRyZW5BdHRyaWJ1dGUsIG9iamVjdC5jYW5TZXRTZWxlY3RlZENoaWxk
cmVuQXR0cmlidXRlKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDYW5TZXRF
eHBhbmRlZEF0dHJpYnV0ZSwgb2JqZWN0LmNhblNldEV4cGFuZGVkQXR0cmlidXRlKCkpOworICAg
IHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc1Nob3dpbmdWYWxpZGF0aW9uTWVzc2FnZSwg
b2JqZWN0LmlzU2hvd2luZ1ZhbGlkYXRpb25NZXNzYWdlKCkpOworICAgIHNldFByb3BlcnR5KEFY
UHJvcGVydHlOYW1lOjpWYWxpZGF0aW9uTWVzc2FnZSwgb2JqZWN0LnZhbGlkYXRpb25NZXNzYWdl
KCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpCbG9ja3F1b3RlTGV2ZWwsIG9i
amVjdC5ibG9ja3F1b3RlTGV2ZWwoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6
OkhlYWRpbmdMZXZlbCwgb2JqZWN0LmhlYWRpbmdMZXZlbCgpKTsKKyAgICBzZXRQcm9wZXJ0eShB
WFByb3BlcnR5TmFtZTo6VGFibGVMZXZlbCwgb2JqZWN0LnRhYmxlTGV2ZWwoKSk7CisgICAgc2V0
UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkFjY2Vzc2liaWxpdHlCdXR0b25TdGF0ZSwgc3RhdGlj
X2Nhc3Q8aW50PihvYmplY3QuY2hlY2tib3hPclJhZGlvVmFsdWUoKSkpOworICAgIHNldFByb3Bl
cnR5KEFYUHJvcGVydHlOYW1lOjpWYWx1ZURlc2NyaXB0aW9uLCBvYmplY3QudmFsdWVEZXNjcmlw
dGlvbigpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6VmFsdWVGb3JSYW5nZSwg
b2JqZWN0LnZhbHVlRm9yUmFuZ2UoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6
Ok1heFZhbHVlRm9yUmFuZ2UsIG9iamVjdC5tYXhWYWx1ZUZvclJhbmdlKCkpOworICAgIHNldFBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpNaW5WYWx1ZUZvclJhbmdlLCBvYmplY3QubWluVmFsdWVG
b3JSYW5nZSgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6U2VsZWN0ZWRSYWRp
b0J1dHRvbiwgb2JqZWN0LnNlbGVjdGVkUmFkaW9CdXR0b24oKSk7CisgICAgc2V0UHJvcGVydHko
QVhQcm9wZXJ0eU5hbWU6OlNlbGVjdGVkVGFiSXRlbSwgb2JqZWN0LnNlbGVjdGVkVGFiSXRlbSgp
KTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6TGF5b3V0Q291bnQsIG9iamVjdC5s
YXlvdXRDb3VudCgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6RXN0aW1hdGVk
TG9hZGluZ1Byb2dyZXNzLCBvYmplY3QuZXN0aW1hdGVkTG9hZGluZ1Byb2dyZXNzKCkpOworICAg
IHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c0FSSUFPd25zLCBvYmplY3Quc3Vw
cG9ydHNBUklBT3ducygpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNBY3Rp
dmVEZXNjZW5kYW50T2ZGb2N1c2VkQ29udGFpbmVyLCBvYmplY3QuaXNBY3RpdmVEZXNjZW5kYW50
T2ZGb2N1c2VkQ29udGFpbmVyKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpI
YXNQb3B1cCwgb2JqZWN0Lmhhc1BvcHVwKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlO
YW1lOjpQb3B1cFZhbHVlLCBvYmplY3QucG9wdXBWYWx1ZSgpKTsKKyAgICBzZXRQcm9wZXJ0eShB
WFByb3BlcnR5TmFtZTo6UHJlc3NlZElzUHJlc2VudCwgb2JqZWN0LnByZXNzZWRJc1ByZXNlbnQo
KSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkFSSUFJc011bHRpbGluZSwgb2Jq
ZWN0LmFyaWFJc011bHRpbGluZSgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6
SW52YWxpZFN0YXR1cywgb2JqZWN0LmludmFsaWRTdGF0dXMoKSk7CisgICAgc2V0UHJvcGVydHko
QVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzRXhwYW5kZWQsIG9iamVjdC5zdXBwb3J0c0V4cGFuZGVk
KCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpTb3J0RGlyZWN0aW9uLCBzdGF0
aWNfY2FzdDxpbnQ+KG9iamVjdC5zb3J0RGlyZWN0aW9uKCkpKTsKKyAgICBzZXRQcm9wZXJ0eShB
WFByb3BlcnR5TmFtZTo6Q2FudmFzSGFzRmFsbGJhY2tDb250ZW50LCBvYmplY3QuY2FudmFzSGFz
RmFsbGJhY2tDb250ZW50KCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpTdXBw
b3J0c1JhbmdlVmFsdWUsIG9iamVjdC5zdXBwb3J0c1JhbmdlVmFsdWUoKSk7CisgICAgc2V0UHJv
cGVydHkoQVhQcm9wZXJ0eU5hbWU6OklkZW50aWZpZXJBdHRyaWJ1dGUsIG9iamVjdC5pZGVudGlm
aWVyQXR0cmlidXRlKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpMaW5rUmVs
VmFsdWUsIG9iamVjdC5saW5rUmVsVmFsdWUoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0
eU5hbWU6OkN1cnJlbnRTdGF0ZSwgc3RhdGljX2Nhc3Q8aW50PihvYmplY3QuY3VycmVudFN0YXRl
KCkpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6Q3VycmVudFZhbHVlLCBvYmpl
Y3QuY3VycmVudFZhbHVlKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpTdXBw
b3J0c0N1cnJlbnQsIG9iamVjdC5zdXBwb3J0c0N1cnJlbnQoKSk7CisgICAgc2V0UHJvcGVydHko
QVhQcm9wZXJ0eU5hbWU6OktleVNob3J0Y3V0c1ZhbHVlLCBvYmplY3Qua2V5U2hvcnRjdXRzVmFs
dWUoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzU2V0U2l6ZSwg
b2JqZWN0LnN1cHBvcnRzU2V0U2l6ZSgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFt
ZTo6U3VwcG9ydHNQYXRoLCBvYmplY3Quc3VwcG9ydHNQYXRoKCkpOworICAgIHNldFByb3BlcnR5
KEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c1Bvc0luU2V0LCBvYmplY3Quc3VwcG9ydHNQb3NJblNl
dCgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6U2V0U2l6ZSwgb2JqZWN0LnNl
dFNpemUoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlBvc0luU2V0LCBvYmpl
Y3QucG9zSW5TZXQoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRz
QVJJQURyb3BwaW5nLCBvYmplY3Quc3VwcG9ydHNBUklBRHJvcHBpbmcoKSk7CisgICAgc2V0UHJv
cGVydHkoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzQVJJQURyYWdnaW5nLCBvYmplY3Quc3VwcG9y
dHNBUklBRHJhZ2dpbmcoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzQVJJ
QUdyYWJiZWQsIG9iamVjdC5pc0FSSUFHcmFiYmVkKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJv
cGVydHlOYW1lOjpBUklBRHJvcEVmZmVjdHMsIG9iamVjdC5kZXRlcm1pbmVBUklBRHJvcEVmZmVj
dHMoKSk7CisgICAgc2V0T2JqZWN0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlRpdGxlVUlFbGVt
ZW50LCBvYmplY3QudGl0bGVVSUVsZW1lbnQoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0
eU5hbWU6OkV4cG9zZXNUaXRsZVVJRWxlbWVudCwgb2JqZWN0LmV4cG9zZXNUaXRsZVVJRWxlbWVu
dCgpKTsKKyAgICBzZXRPYmplY3RQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6VmVydGljYWxTY3Jv
bGxCYXIsIG9iamVjdC5zY3JvbGxCYXIoQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uOjpWZXJ0aWNh
bCkpOworICAgIHNldE9iamVjdFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpIb3Jpem9udGFsU2Ny
b2xsQmFyLCBvYmplY3Quc2Nyb2xsQmFyKEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbjo6SG9yaXpv
bnRhbCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpBUklBUm9sZUF0dHJpYnV0
ZSwgc3RhdGljX2Nhc3Q8aW50PihvYmplY3QuYXJpYVJvbGVBdHRyaWJ1dGUoKSkpOworICAgIHNl
dFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDb21wdXRlZExhYmVsLCBvYmplY3QuY29tcHV0ZWRM
YWJlbCgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6UGxhY2Vob2xkZXJWYWx1
ZSwgb2JqZWN0LnBsYWNlaG9sZGVyVmFsdWUoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0
eU5hbWU6OkV4cGFuZGVkVGV4dFZhbHVlLCBvYmplY3QuZXhwYW5kZWRUZXh0VmFsdWUoKSk7Cisg
ICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzRXhwYW5kZWRUZXh0VmFsdWUs
IG9iamVjdC5zdXBwb3J0c0V4cGFuZGVkVGV4dFZhbHVlKCkpOworICAgIHNldFByb3BlcnR5KEFY
UHJvcGVydHlOYW1lOjpTdXBwb3J0c1ByZXNzQWN0aW9uLCBvYmplY3Quc3VwcG9ydHNQcmVzc0Fj
dGlvbigpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6Q2xpY2tQb2ludCwgb2Jq
ZWN0LmNsaWNrUG9pbnQoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkNvbXB1
dGVkUm9sZVN0cmluZywgb2JqZWN0LmNvbXB1dGVkUm9sZVN0cmluZygpKTsKKyAgICBzZXRQcm9w
ZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNWYWx1ZUF1dG9maWxsZWQsIG9iamVjdC5pc1ZhbHVlQXV0
b2ZpbGxlZCgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNWYWx1ZUF1dG9m
aWxsQXZhaWxhYmxlLCBvYmplY3QuaXNWYWx1ZUF1dG9maWxsQXZhaWxhYmxlKCkpOworICAgIHNl
dFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpWYWx1ZUF1dG9maWxsQnV0dG9uVHlwZSwgc3RhdGlj
X2Nhc3Q8aW50PihvYmplY3QudmFsdWVBdXRvZmlsbEJ1dHRvblR5cGUoKSkpOworICAgIHNldFBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpVUkwsIG9iamVjdC51cmwoKSk7CisgICAgc2V0UHJvcGVy
dHkoQVhQcm9wZXJ0eU5hbWU6OkFjY2Vzc0tleSwgb2JqZWN0LmFjY2Vzc0tleSgpKTsKKyAgICBz
ZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6QWN0aW9uVmVyYiwgb2JqZWN0LmFjdGlvblZlcmIo
KSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlJlYWRPbmx5VmFsdWUsIG9iamVj
dC5yZWFkT25seVZhbHVlKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpBdXRv
Q29tcGxldGVWYWx1ZSwgb2JqZWN0LmF1dG9Db21wbGV0ZVZhbHVlKCkpOworICAgIHNldFByb3Bl
cnR5KEFYUHJvcGVydHlOYW1lOjpTcGVha0FzLCBvYmplY3Quc3BlYWtBc1Byb3BlcnR5KCkpOwor
ICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpTdHJpbmdWYWx1ZSwgb2JqZWN0LnN0cmlu
Z1ZhbHVlKCkuaXNvbGF0ZWRDb3B5KCkpOworI2lmIFBMQVRGT1JNKENPQ09BKSAmJiAhUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6Q2FyZXRCcm93
c2luZ0VuYWJsZWQsIG9iamVjdC5jYXJldEJyb3dzaW5nRW5hYmxlZCgpKTsKKyNlbmRpZgorICAg
IHNldE9iamVjdFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpGb2N1c2FibGVBbmNlc3Rvciwgb2Jq
ZWN0LmZvY3VzYWJsZUFuY2VzdG9yKCkpOworICAgIHNldE9iamVjdFByb3BlcnR5KEFYUHJvcGVy
dHlOYW1lOjpFZGl0YWJsZUFuY2VzdG9yLCBvYmplY3QuZWRpdGFibGVBbmNlc3RvcigpKTsKKyAg
ICBzZXRPYmplY3RQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SGlnaGVzdEVkaXRhYmxlQW5jZXN0
b3IsIG9iamVjdC5oaWdoZXN0RWRpdGFibGVBbmNlc3RvcigpKTsKKyAgICBzZXRQcm9wZXJ0eShB
WFByb3BlcnR5TmFtZTo6T3JpZW50YXRpb24sIHN0YXRpY19jYXN0PGludD4ob2JqZWN0Lm9yaWVu
dGF0aW9uKCkpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SGllcmFyY2hpY2Fs
TGV2ZWwsIG9iamVjdC5oaWVyYXJjaGljYWxMZXZlbCgpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFBy
b3BlcnR5TmFtZTo6TGFuZ3VhZ2UsIG9iamVjdC5sYW5ndWFnZSgpKTsKKyAgICBzZXRQcm9wZXJ0
eShBWFByb3BlcnR5TmFtZTo6Q2FuSGF2ZVNlbGVjdGVkQ2hpbGRyZW4sIG9iamVjdC5jYW5IYXZl
U2VsZWN0ZWRDaGlsZHJlbigpKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SGFz
QVJJQVZhbHVlTm93LCBvYmplY3QuaGFzQVJJQVZhbHVlTm93KCkpOworICAgIHNldFByb3BlcnR5
KEFYUHJvcGVydHlOYW1lOjpUYWdOYW1lLCBvYmplY3QudGFnTmFtZSgpKTsKKyAgICBzZXRQcm9w
ZXJ0eShBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNMaXZlUmVnaW9uLCBvYmplY3Quc3VwcG9ydHNM
aXZlUmVnaW9uKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0luc2lkZUxp
dmVSZWdpb24sIG9iamVjdC5pc0luc2lkZUxpdmVSZWdpb24oKSk7CisgICAgc2V0UHJvcGVydHko
QVhQcm9wZXJ0eU5hbWU6OkxpdmVSZWdpb25TdGF0dXMsIG9iamVjdC5saXZlUmVnaW9uU3RhdHVz
KCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpMaXZlUmVnaW9uUmVsZXZhbnQs
IG9iamVjdC5saXZlUmVnaW9uUmVsZXZhbnQoKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0
eU5hbWU6OkxpdmVSZWdpb25BdG9taWMsIG9iamVjdC5saXZlUmVnaW9uQXRvbWljKCkpOworICAg
IHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0J1c3ksIG9iamVjdC5pc0J1c3koKSk7Cisg
ICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzSW5saW5lVGV4dCwgb2JqZWN0LmlzSW5s
aW5lVGV4dCgpKTsKKyAgICBpZiAob2JqZWN0LmlzVGV4dENvbnRyb2woKSkKKyAgICAgICAgc2V0
UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlRleHRMZW5ndGgsIG9iamVjdC50ZXh0TGVuZ3RoKCkp
OworCisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHNlbGVjdGVkQ2hpbGRyZW47Cisg
ICAgb2JqZWN0LnNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRDaGlsZHJlbik7CisgICAgc2V0T2Jq
ZWN0VmVjdG9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlNlbGVjdGVkQ2hpbGRyZW4sIHNlbGVj
dGVkQ2hpbGRyZW4pOworCisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHZpc2libGVD
aGlsZHJlbjsKKyAgICBvYmplY3QudmlzaWJsZUNoaWxkcmVuKHZpc2libGVDaGlsZHJlbik7Cisg
ICAgc2V0T2JqZWN0VmVjdG9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlZpc2libGVDaGlsZHJl
biwgdmlzaWJsZUNoaWxkcmVuKTsKKworICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciB0
YWJDaGlsZHJlbjsKKyAgICBvYmplY3QudGFiQ2hpbGRyZW4odGFiQ2hpbGRyZW4pOworICAgIHNl
dE9iamVjdFZlY3RvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpUYWJDaGlsZHJlbiwgdGFiQ2hp
bGRyZW4pOworCisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGFyaWFUcmVlUm93czsK
KyAgICBvYmplY3QuYXJpYVRyZWVSb3dzKGFyaWFUcmVlUm93cyk7CisgICAgc2V0T2JqZWN0VmVj
dG9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkFSSUFUcmVlUm93cywgYXJpYVRyZWVSb3dzKTsK
KworICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBhcmlhVHJlZUl0ZW1EaXNjbG9zZWRS
b3dzOworICAgIG9iamVjdC5hcmlhVHJlZUl0ZW1EaXNjbG9zZWRSb3dzKGFyaWFUcmVlSXRlbURp
c2Nsb3NlZFJvd3MpOworICAgIHNldE9iamVjdFZlY3RvclByb3BlcnR5KEFYUHJvcGVydHlOYW1l
OjpBUklBVHJlZUl0ZW1EaXNjbG9zZWRSb3dzLCBhcmlhVHJlZUl0ZW1EaXNjbG9zZWRSb3dzKTsK
KworICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBhcmlhVHJlZUl0ZW1Db250ZW50Owor
ICAgIG9iamVjdC5hcmlhVHJlZUl0ZW1Db250ZW50KGFyaWFUcmVlSXRlbUNvbnRlbnQpOworICAg
IHNldE9iamVjdFZlY3RvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpBUklBVHJlZUl0ZW1Db250
ZW50LCBhcmlhVHJlZUl0ZW1Db250ZW50KTsKKworICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciBsaW5rZWRVSUVsZW1lbnRzOworICAgIG9iamVjdC5saW5rZWRVSUVsZW1lbnRzKGxpbmtl
ZFVJRWxlbWVudHMpOworICAgIHNldE9iamVjdFZlY3RvclByb3BlcnR5KEFYUHJvcGVydHlOYW1l
OjpMaW5rZWRVSUVsZW1lbnRzLCBsaW5rZWRVSUVsZW1lbnRzKTsKKworICAgIEFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciBhcmlhQ29udHJvbHNFbGVtZW50czsKKyAgICBvYmplY3QuYXJpYUNv
bnRyb2xzRWxlbWVudHMoYXJpYUNvbnRyb2xzRWxlbWVudHMpOworICAgIHNldE9iamVjdFZlY3Rv
clByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpBUklBQ29udHJvbHNFbGVtZW50cywgYXJpYUNvbnRy
b2xzRWxlbWVudHMpOworCisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGFyaWFEZXRh
aWxzRWxlbWVudHM7CisgICAgb2JqZWN0LmFyaWFEZXRhaWxzRWxlbWVudHMoYXJpYURldGFpbHNF
bGVtZW50cyk7CisgICAgc2V0T2JqZWN0VmVjdG9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkFS
SUFEZXRhaWxzRWxlbWVudHMsIGFyaWFEZXRhaWxzRWxlbWVudHMpOworCisgICAgQWNjZXNzaWJp
bGl0eUNoaWxkcmVuVmVjdG9yIGFyaWFFcnJvck1lc3NhZ2VFbGVtZW50czsKKyAgICBvYmplY3Qu
YXJpYUVycm9yTWVzc2FnZUVsZW1lbnRzKGFyaWFFcnJvck1lc3NhZ2VFbGVtZW50cyk7CisgICAg
c2V0T2JqZWN0VmVjdG9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkFSSUFFcnJvck1lc3NhZ2VF
bGVtZW50cywgYXJpYUVycm9yTWVzc2FnZUVsZW1lbnRzKTsKKworICAgIEFjY2Vzc2liaWxpdHlD
aGlsZHJlblZlY3RvciBhcmlhRmxvd1RvRWxlbWVudHM7CisgICAgb2JqZWN0LmFyaWFGbG93VG9F
bGVtZW50cyhhcmlhRmxvd1RvRWxlbWVudHMpOworICAgIHNldE9iamVjdFZlY3RvclByb3BlcnR5
KEFYUHJvcGVydHlOYW1lOjpBUklBRmxvd1RvRWxlbWVudHMsIGFyaWFGbG93VG9FbGVtZW50cyk7
CisKKyAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgYXJpYU93bnNFbGVtZW50czsKKyAg
ICBvYmplY3QuYXJpYU93bnNFbGVtZW50cyhhcmlhT3duc0VsZW1lbnRzKTsKKyAgICBzZXRPYmpl
Y3RWZWN0b3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6QVJJQU93bnNFbGVtZW50cywgYXJpYU93
bnNFbGVtZW50cyk7CisKKyAgICBWZWN0b3I8QWNjZXNzaWJpbGl0eVRleHQ+IHRleHRzOworICAg
IG9iamVjdC5hY2Nlc3NpYmlsaXR5VGV4dCh0ZXh0cyk7CisgICAgVmVjdG9yPEFjY2Vzc2liaWxp
dHlJc29sYXRlZFRyZWVUZXh0PiBpc29sYXRlZFRleHRzOworICAgIGlzb2xhdGVkVGV4dHMucmVz
ZXJ2ZUNhcGFjaXR5KHRleHRzLnNpemUoKSk7CisgICAgZm9yIChhdXRvIHRleHQgOiB0ZXh0cykg
eworICAgICAgICBBY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlVGV4dCBpc29sYXRlZFRleHQ7Cisg
ICAgICAgIGlzb2xhdGVkVGV4dC50ZXh0ID0gdGV4dC50ZXh0OworICAgICAgICBpc29sYXRlZFRl
eHQudGV4dFNvdXJjZSA9IHRleHQudGV4dFNvdXJjZTsKKyAgICAgICAgZm9yIChhdXRvIG9iamVj
dCA6IHRleHQudGV4dEVsZW1lbnRzKQorICAgICAgICAgICAgaXNvbGF0ZWRUZXh0LnRleHRFbGVt
ZW50cy5hcHBlbmQob2JqZWN0LT5vYmplY3RJRCgpKTsKKyAgICAgICAgaXNvbGF0ZWRUZXh0cy51
bmNoZWNrZWRBcHBlbmQoaXNvbGF0ZWRUZXh0KTsKKyAgICB9CisgICAgc2V0UHJvcGVydHkoQVhQ
cm9wZXJ0eU5hbWU6OkFjY2Vzc2liaWxpdHlUZXh0LCBpc29sYXRlZFRleHRzKTsKKworICAgIC8v
IFNwaW4gYnV0dG9uIHN1cHBvcnQuCisgICAgc2V0T2JqZWN0UHJvcGVydHkoQVhQcm9wZXJ0eU5h
bWU6OkRlY3JlbWVudEJ1dHRvbiwgb2JqZWN0LmRlY3JlbWVudEJ1dHRvbigpKTsKKyAgICBzZXRP
YmplY3RQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SW5jcmVtZW50QnV0dG9uLCBvYmplY3QuaW5j
cmVtZW50QnV0dG9uKCkpOworICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0luY3Jl
bWVudG9yLCBvYmplY3QuaXNJbmNyZW1lbnRvcigpKTsKKworICAgIFZlY3RvcjxTdHJpbmc+IGNs
YXNzTGlzdDsKKyAgICBvYmplY3QuY2xhc3NMaXN0KGNsYXNzTGlzdCk7CisgICAgU3RyaW5nIGNv
bWJpbmVkQ2xhc3NMaXN0OworICAgIGZvciAoYXV0byBpdCA9IGNsYXNzTGlzdC5iZWdpbigpLCBl
bmQgPSBjbGFzc0xpc3QuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBjb21iaW5l
ZENsYXNzTGlzdC5hcHBlbmQoKml0KTsKKyAgICAgICAgY29tYmluZWRDbGFzc0xpc3QuYXBwZW5k
KCIgIik7CisgICAgfQorICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDbGFzc0xpc3Qs
IGNvbWJpbmVkQ2xhc3NMaXN0KTsKKyAgICAKKyAgICBpbnQgciwgZywgYjsKKyAgICBvYmplY3Qu
Y29sb3JWYWx1ZShyLCBnLCBiKTsKKyAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6Q29s
b3JWYWx1ZSwgQ29sb3IociwgZywgYikpOworICAgIAorICAgIGlmIChib29sIGlzTWF0aEVsZW1l
bnQgPSBvYmplY3QuaXNNYXRoRWxlbWVudCgpKSB7CisgICAgICAgIHNldFByb3BlcnR5KEFYUHJv
cGVydHlOYW1lOjpJc01hdGhFbGVtZW50LCBpc01hdGhFbGVtZW50KTsKKyAgICAgICAgc2V0UHJv
cGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzQW5vbnltb3VzTWF0aE9wZXJhdG9yLCBvYmplY3QuaXNB
bm9ueW1vdXNNYXRoT3BlcmF0b3IoKSk7CisgICAgICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlO
YW1lOjpJc01hdGhGcmFjdGlvbiwgb2JqZWN0LmlzTWF0aEZyYWN0aW9uKCkpOworICAgICAgICBz
ZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNNYXRoRmVuY2VkLCBvYmplY3QuaXNNYXRoRmVu
Y2VkKCkpOworICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNNYXRoU3Vic2Ny
aXB0U3VwZXJzY3JpcHQsIG9iamVjdC5pc01hdGhTdWJzY3JpcHRTdXBlcnNjcmlwdCgpKTsKKyAg
ICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aFJvdywgb2JqZWN0LmlzTWF0
aFJvdygpKTsKKyAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aFVuZGVy
T3Zlciwgb2JqZWN0LmlzTWF0aFVuZGVyT3ZlcigpKTsKKyAgICAgICAgc2V0UHJvcGVydHkoQVhQ
cm9wZXJ0eU5hbWU6OklzTWF0aFJvb3QsIG9iamVjdC5pc01hdGhSb290KCkpOworICAgICAgICBz
ZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNNYXRoU3F1YXJlUm9vdCwgb2JqZWN0LmlzTWF0
aFNxdWFyZVJvb3QoKSk7CisgICAgICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc01h
dGhUZXh0LCBvYmplY3QuaXNNYXRoVGV4dCgpKTsKKyAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9w
ZXJ0eU5hbWU6OklzTWF0aE51bWJlciwgb2JqZWN0LmlzTWF0aE51bWJlcigpKTsKKyAgICAgICAg
c2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aE9wZXJhdG9yLCBvYmplY3QuaXNNYXRo
T3BlcmF0b3IoKSk7CisgICAgICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc01hdGhG
ZW5jZU9wZXJhdG9yLCBvYmplY3QuaXNNYXRoRmVuY2VPcGVyYXRvcigpKTsKKyAgICAgICAgc2V0
UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aFNlcGFyYXRvck9wZXJhdG9yLCBvYmplY3Qu
aXNNYXRoU2VwYXJhdG9yT3BlcmF0b3IoKSk7CisgICAgICAgIHNldFByb3BlcnR5KEFYUHJvcGVy
dHlOYW1lOjpJc01hdGhJZGVudGlmaWVyLCBvYmplY3QuaXNNYXRoSWRlbnRpZmllcigpKTsKKyAg
ICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aFRhYmxlLCBvYmplY3QuaXNN
YXRoVGFibGUoKSk7CisgICAgICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc01hdGhU
YWJsZVJvdywgb2JqZWN0LmlzTWF0aFRhYmxlUm93KCkpOworICAgICAgICBzZXRQcm9wZXJ0eShB
WFByb3BlcnR5TmFtZTo6SXNNYXRoVGFibGVDZWxsLCBvYmplY3QuaXNNYXRoVGFibGVDZWxsKCkp
OworICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNNYXRoTXVsdGlzY3JpcHQs
IG9iamVjdC5pc01hdGhNdWx0aXNjcmlwdCgpKTsKKyAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9w
ZXJ0eU5hbWU6OklzTWF0aFRva2VuLCBvYmplY3QuaXNNYXRoVG9rZW4oKSk7CisgICAgICAgIHNl
dFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpNYXRoRmVuY2VkT3BlblN0cmluZywgb2JqZWN0Lm1h
dGhGZW5jZWRPcGVuU3RyaW5nKCkpOworICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFt
ZTo6TWF0aEZlbmNlZENsb3NlU3RyaW5nLCBvYmplY3QubWF0aEZlbmNlZENsb3NlU3RyaW5nKCkp
OworICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6TWF0aExpbmVUaGlja25lc3Ms
IG9iamVjdC5tYXRoTGluZVRoaWNrbmVzcygpKTsKKyAgICAgICAgc2V0T2JqZWN0UHJvcGVydHko
QVhQcm9wZXJ0eU5hbWU6Ok1hdGhSYWRpY2FuZE9iamVjdCwgb2JqZWN0Lm1hdGhSYWRpY2FuZE9i
amVjdCgpKTsKKyAgICAgICAgc2V0T2JqZWN0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6Ok1hdGhS
b290SW5kZXhPYmplY3QsIG9iamVjdC5tYXRoUm9vdEluZGV4T2JqZWN0KCkpOworICAgICAgICBz
ZXRPYmplY3RQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6TWF0aFVuZGVyT2JqZWN0LCBvYmplY3Qu
bWF0aFVuZGVyT2JqZWN0KCkpOworICAgICAgICBzZXRPYmplY3RQcm9wZXJ0eShBWFByb3BlcnR5
TmFtZTo6TWF0aE92ZXJPYmplY3QsIG9iamVjdC5tYXRoT3Zlck9iamVjdCgpKTsKKyAgICAgICAg
c2V0T2JqZWN0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6Ok1hdGhOdW1lcmF0b3JPYmplY3QsIG9i
amVjdC5tYXRoTnVtZXJhdG9yT2JqZWN0KCkpOworICAgICAgICBzZXRPYmplY3RQcm9wZXJ0eShB
WFByb3BlcnR5TmFtZTo6TWF0aERlbm9taW5hdG9yT2JqZWN0LCBvYmplY3QubWF0aERlbm9taW5h
dG9yT2JqZWN0KCkpOworICAgICAgICBzZXRPYmplY3RQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6
TWF0aEJhc2VPYmplY3QsIG9iamVjdC5tYXRoQmFzZU9iamVjdCgpKTsKKyAgICAgICAgc2V0T2Jq
ZWN0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6Ok1hdGhTdWJzY3JpcHRPYmplY3QsIG9iamVjdC5t
YXRoU3Vic2NyaXB0T2JqZWN0KCkpOworICAgICAgICBzZXRPYmplY3RQcm9wZXJ0eShBWFByb3Bl
cnR5TmFtZTo6TWF0aFN1cGVyc2NyaXB0T2JqZWN0LCBvYmplY3QubWF0aFN1cGVyc2NyaXB0T2Jq
ZWN0KCkpOworICAgICAgICBzZXRNYXRoc2NyaXB0cyhBWFByb3BlcnR5TmFtZTo6TWF0aFByZXNj
cmlwdHMsIG9iamVjdCk7CisgICAgICAgIHNldE1hdGhzY3JpcHRzKEFYUHJvcGVydHlOYW1lOjpN
YXRoUG9zdHNjcmlwdHMsIG9iamVjdCk7CisgICAgfQorICAgIAorICAgIGlmIChpc1Jvb3QpIHsK
KyAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlByZXZlbnRLZXlib2FyZERPTUV2
ZW50RGlzcGF0Y2gsIG9iamVjdC5wcmV2ZW50S2V5Ym9hcmRET01FdmVudERpc3BhdGNoKCkpOwor
ICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6U2Vzc2lvbklELCBvYmplY3Quc2Vz
c2lvbklEKCkpOworICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6RG9jdW1lbnRV
UkksIG9iamVjdC5kb2N1bWVudFVSSSgpKTsKKyAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0
eU5hbWU6OkRvY3VtZW50RW5jb2RpbmcsIG9iamVjdC5kb2N1bWVudEVuY29kaW5nKCkpOworICAg
IH0KK30KKwordm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRNYXRoc2NyaXB0cyhBWFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIEFYQ29yZU9iamVjdCYgb2JqZWN0KQoreworICAgIEFjY2Vzc2li
aWxpdHlNYXRoTXVsdGlzY3JpcHRQYWlycyBwYWlyczsKKyAgICBpZiAocHJvcGVydHlOYW1lID09
IEFYUHJvcGVydHlOYW1lOjpNYXRoUHJlc2NyaXB0cykKKyAgICAgICAgb2JqZWN0Lm1hdGhQcmVz
Y3JpcHRzKHBhaXJzKTsKKyAgICBlbHNlIGlmIChwcm9wZXJ0eU5hbWUgPT0gQVhQcm9wZXJ0eU5h
bWU6Ok1hdGhQb3N0c2NyaXB0cykKKyAgICAgICAgb2JqZWN0Lm1hdGhQb3N0c2NyaXB0cyhwYWly
cyk7CisgICAgCisgICAgc2l6ZV90IG1hdGhTaXplID0gcGFpcnMuc2l6ZSgpOworICAgIGlmICgh
bWF0aFNpemUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBWZWN0b3I8QWNjZXNzaWJpbGl0
eUlzb2xhdGVkVHJlZU1hdGhNdWx0aXNjcmlwdFBhaXI+IGlkUGFpcnM7CisgICAgaWRQYWlycy5y
ZXNlcnZlQ2FwYWNpdHkobWF0aFNpemUpOworICAgIGZvciAoYXV0byBtYXRoUGFpciA6IHBhaXJz
KSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVNYXRoTXVsdGlzY3JpcHRQYWly
IGlkUGFpcjsKKyAgICAgICAgaWYgKG1hdGhQYWlyLmZpcnN0KQorICAgICAgICAgICAgaWRQYWly
LmZpcnN0ID0gbWF0aFBhaXIuZmlyc3QtPm9iamVjdElEKCk7CisgICAgICAgIGlmIChtYXRoUGFp
ci5zZWNvbmQpCisgICAgICAgICAgICBpZFBhaXIuc2Vjb25kID0gbWF0aFBhaXIuc2Vjb25kLT5v
YmplY3RJRCgpOworICAgICAgICBpZFBhaXJzLnVuY2hlY2tlZEFwcGVuZChpZFBhaXIpOworICAg
IH0KKyAgICBzZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIGlkUGFpcnMpOworfQorCit2b2lkIEFY
SXNvbGF0ZWRPYmplY3Q6OnNldE9iamVjdFByb3BlcnR5KEFYUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgQVhDb3JlT2JqZWN0KiBvYmplY3QpCit7CisgICAgaWYgKG9iamVjdCkKKyAgICAgICAg
c2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCBvYmplY3QtPm9iamVjdElEKCkpOworICAgIGVsc2UK
KyAgICAgICAgc2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCBudWxscHRyLCB0cnVlKTsKK30KKwor
dm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRPYmplY3RWZWN0b3JQcm9wZXJ0eShBWFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4p
Cit7CisgICAgc2l6ZV90IGNoaWxkcmVuU2l6ZSA9IGNoaWxkcmVuLnNpemUoKTsKKyAgICBpZiAo
IWNoaWxkcmVuU2l6ZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFZlY3RvcjxBWElEPiBj
aGlsZHJlblZlY3RvcjsKKyAgICBjaGlsZHJlblZlY3Rvci5yZXNlcnZlQ2FwYWNpdHkoY2hpbGRy
ZW5TaXplKTsKKyAgICBmb3IgKGF1dG8gY2hpbGRPYmplY3QgOiBjaGlsZHJlbikKKyAgICAgICAg
Y2hpbGRyZW5WZWN0b3IudW5jaGVja2VkQXBwZW5kKGNoaWxkT2JqZWN0LT5vYmplY3RJRCgpKTsK
KyAgICBzZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIGNoaWxkcmVuVmVjdG9yKTsKK30KKwordm9p
ZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEF0dHJpYnV0ZVZhbHVlVmFyaWFudCYmIHZhbHVlLCBib29sIHNob3VsZFJlbW92ZSkKK3sK
KyAgICBBU1NFUlQoIW1faW5pdGlhbGl6ZWQpOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisKKyAgICBpZiAoc2hvdWxkUmVtb3ZlKQorICAgICAgICBtX2F0dHJpYnV0ZU1hcC5yZW1vdmUo
cHJvcGVydHlOYW1lKTsKKyAgICBlbHNlCisgICAgICAgIG1fYXR0cmlidXRlTWFwLnNldChwcm9w
ZXJ0eU5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBBWElzb2xhdGVkT2JqZWN0OjphcHBlbmRDaGls
ZChBWElEIGF4SUQpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX2NoaWxk
cmVuSURzLmFwcGVuZChheElEKTsKK30KKwordm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRQYXJl
bnQoQVhJRCBwYXJlbnQpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX3Bh
cmVudCA9IHBhcmVudDsKK30KKwordm9pZCBBWElzb2xhdGVkT2JqZWN0OjpkZXRhY2hSZW1vdGVQ
YXJ0cyhBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGUpCit7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNoaWxkSUQgOiBtX2NoaWxkcmVuSURzKQor
ICAgICAgICB0cmVlKCktPm5vZGVGb3JJRChjaGlsZElEKS0+ZGV0YWNoRnJvbVBhcmVudCgpOwor
CisgICAgbV9jaGlsZHJlbklEcy5jbGVhcigpOworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6
OmlzRGV0YWNoZWQoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBBWElzb2xhdGVkT2JqZWN0OjpkZXRhY2hGcm9tUGFyZW50
KCkKK3sKKyAgICBtX3BhcmVudCA9IEludmFsaWRBWElEOworfQorCit2b2lkIEFYSXNvbGF0ZWRP
YmplY3Q6OnNldFRyZWVJZGVudGlmaWVyKEFYSXNvbGF0ZWRUcmVlSUQgdHJlZUlkZW50aWZpZXIp
Cit7CisgICAgbV90cmVlSWRlbnRpZmllciA9IHRyZWVJZGVudGlmaWVyOworICAgIGlmIChhdXRv
IHRyZWUgPSBBWElzb2xhdGVkVHJlZTo6dHJlZUZvcklEKG1fdHJlZUlkZW50aWZpZXIpKQorICAg
ICAgICBtX2NhY2hlZFRyZWUgPSB0cmVlOworfQorCitjb25zdCBBWENvcmVPYmplY3Q6OkFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciYgQVhJc29sYXRlZE9iamVjdDo6Y2hpbGRyZW4oYm9vbCkK
K3sKKyAgICBpZiAoIWlzTWFpblRocmVhZCgpKSB7CisgICAgICAgIG1fY2hpbGRyZW4uY2xlYXIo
KTsKKyAgICAgICAgbV9jaGlsZHJlbi5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fY2hpbGRyZW5J
RHMuc2l6ZSgpKTsKKyAgICAgICAgYXV0byB0cmVlID0gdGhpcy0+dHJlZSgpOworICAgICAgICBm
b3IgKGF1dG8gY2hpbGRJRCA6IG1fY2hpbGRyZW5JRHMpCisgICAgICAgICAgICBtX2NoaWxkcmVu
LnVuY2hlY2tlZEFwcGVuZCh0cmVlLT5ub2RlRm9ySUQoY2hpbGRJRCkpOworICAgIH0KKyAgICBy
ZXR1cm4gbV9jaGlsZHJlbjsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0RldGFjaGVk
RnJvbVBhcmVudCgpCit7CisgICAgaWYgKHBhcmVudCgpICE9IEludmFsaWRBWElEKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDaGVjayB3aGV0aGVyIHRoaXMgaXMgdGhlIHJvb3Qg
bm9kZSwgaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGQgcmV0dXJuIGZhbHNlLgorICAgIGlmIChhdXRv
IHJvb3QgPSB0cmVlKCktPnJvb3ROb2RlKCkpCisgICAgICAgIHJldHVybiByb290LT5vYmplY3RJ
RCgpICE9IG1faWQ7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEFYSXNvbGF0ZWRPYmpl
Y3Q6OmFjY2Vzc2liaWxpdHlUZXh0KFZlY3RvcjxBY2Nlc3NpYmlsaXR5VGV4dD4mIHRleHRzKSBj
b25zdAoreworICAgIGF1dG8gaXNvbGF0ZWRUZXh0cyA9IHZlY3RvckF0dHJpYnV0ZVZhbHVlPEFj
Y2Vzc2liaWxpdHlJc29sYXRlZFRyZWVUZXh0PihBWFByb3BlcnR5TmFtZTo6QWNjZXNzaWJpbGl0
eVRleHQpOworICAgIGZvciAoYXV0byBpc29sYXRlZFRleHQgOiBpc29sYXRlZFRleHRzKSB7Cisg
ICAgICAgIEFjY2Vzc2liaWxpdHlUZXh0IHRleHQoaXNvbGF0ZWRUZXh0LnRleHQsIGlzb2xhdGVk
VGV4dC50ZXh0U291cmNlKTsKKyAgICAgICAgZm9yIChhdXRvIGF4SUQgOiBpc29sYXRlZFRleHQu
dGV4dEVsZW1lbnRzKSB7CisgICAgICAgICAgICBpZiAoYXV0byBvYmplY3QgPSB0cmVlKCktPm5v
ZGVGb3JJRChheElEKSkKKyAgICAgICAgICAgICAgICB0ZXh0LnRleHRFbGVtZW50cy5hcHBlbmQo
b2JqZWN0KTsKKyAgICAgICAgfQorICAgICAgICB0ZXh0cy5hcHBlbmQodGV4dCk7CisgICAgfQor
fQorCit2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmNsYXNzTGlzdChWZWN0b3I8U3RyaW5nPiYgbGlz
dCkgY29uc3QKK3sKKyAgICBTdHJpbmcgY2xhc3NMaXN0ID0gc3RyaW5nQXR0cmlidXRlVmFsdWUo
QVhQcm9wZXJ0eU5hbWU6OkNsYXNzTGlzdCk7CisgICAgbGlzdC5hcHBlbmRWZWN0b3IoY2xhc3NM
aXN0LnNwbGl0KCIgIikpOworfQorCit1aW50NjRfdCBBWElzb2xhdGVkT2JqZWN0OjpzZXNzaW9u
SUQoKSBjb25zdAoreworICAgIGlmIChhdXRvIHJvb3QgPSB0cmVlKCktPnJvb3ROb2RlKCkpCisg
ICAgICAgIHJldHVybiByb290LT51aW50NjRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6
U2Vzc2lvbklEKTsKKyAgICByZXR1cm4gMDsKK30KKworU3RyaW5nIEFYSXNvbGF0ZWRPYmplY3Q6
OmRvY3VtZW50VVJJKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byByb290ID0gdHJlZSgpLT5yb290
Tm9kZSgpKQorICAgICAgICByZXR1cm4gcm9vdC0+c3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9w
ZXJ0eU5hbWU6OkRvY3VtZW50VVJJKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK2Jvb2wg
QVhJc29sYXRlZE9iamVjdDo6cHJldmVudEtleWJvYXJkRE9NRXZlbnREaXNwYXRjaCgpIGNvbnN0
Cit7CisgICAgaWYgKGF1dG8gcm9vdCA9IHRyZWUoKS0+cm9vdE5vZGUoKSkKKyAgICAgICAgcmV0
dXJuIHJvb3QtPmJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6UHJldmVudEtleWJv
YXJkRE9NRXZlbnREaXNwYXRjaCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcgQVhJ
c29sYXRlZE9iamVjdDo6ZG9jdW1lbnRFbmNvZGluZygpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8g
cm9vdCA9IHRyZWUoKS0+cm9vdE5vZGUoKSkKKyAgICAgICAgcmV0dXJuIHJvb3QtPnN0cmluZ0F0
dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpEb2N1bWVudEVuY29kaW5nKTsKKyAgICByZXR1
cm4gU3RyaW5nKCk7Cit9CisKK3ZvaWQgQVhJc29sYXRlZE9iamVjdDo6aW5zZXJ0TWF0aFBhaXJz
KFZlY3RvcjxBY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlTWF0aE11bHRpc2NyaXB0UGFpcj4mIGlz
b2xhdGVkUGFpcnMsIEFjY2Vzc2liaWxpdHlNYXRoTXVsdGlzY3JpcHRQYWlycyYgcGFpcnMpCit7
CisgICAgZm9yIChhdXRvIHBhaXIgOiBpc29sYXRlZFBhaXJzKSB7CisgICAgICAgIEFjY2Vzc2li
aWxpdHlNYXRoTXVsdGlzY3JpcHRQYWlyIHByZXNjcmlwdFBhaXI7CisgICAgICAgIGlmIChhdXRv
KiBjb3JlT2JqZWN0ID0gdHJlZSgpLT5ub2RlRm9ySUQocGFpci5maXJzdCkuZ2V0KCkpCisgICAg
ICAgICAgICBwcmVzY3JpcHRQYWlyLmZpcnN0ID0gY29yZU9iamVjdDsKKyAgICAgICAgaWYgKGF1
dG8qIGNvcmVPYmplY3QgPSB0cmVlKCktPm5vZGVGb3JJRChwYWlyLnNlY29uZCkuZ2V0KCkpCisg
ICAgICAgICAgICBwcmVzY3JpcHRQYWlyLnNlY29uZCA9IGNvcmVPYmplY3Q7CisgICAgICAgIHBh
aXJzLmFwcGVuZChwcmVzY3JpcHRQYWlyKTsKKyAgICB9Cit9CisKK3ZvaWQgQVhJc29sYXRlZE9i
amVjdDo6bWF0aFByZXNjcmlwdHMoQWNjZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlwdFBhaXJzJiBw
YWlycykKK3sKKyAgICBhdXRvIGlzb2xhdGVkUGFpcnMgPSB2ZWN0b3JBdHRyaWJ1dGVWYWx1ZTxB
Y2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlTWF0aE11bHRpc2NyaXB0UGFpcj4oQVhQcm9wZXJ0eU5h
bWU6Ok1hdGhQcmVzY3JpcHRzKTsKKyAgICBpbnNlcnRNYXRoUGFpcnMoaXNvbGF0ZWRQYWlycywg
cGFpcnMpOworfQorCit2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6Om1hdGhQb3N0c2NyaXB0cyhBY2Nl
c3NpYmlsaXR5TWF0aE11bHRpc2NyaXB0UGFpcnMmIHBhaXJzKQoreworICAgIGF1dG8gaXNvbGF0
ZWRQYWlycyA9IHZlY3RvckF0dHJpYnV0ZVZhbHVlPEFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVN
YXRoTXVsdGlzY3JpcHRQYWlyPihBWFByb3BlcnR5TmFtZTo6TWF0aFBvc3RzY3JpcHRzKTsKKyAg
ICBpbnNlcnRNYXRoUGFpcnMoaXNvbGF0ZWRQYWlycywgcGFpcnMpOworfQorCitBWENvcmVPYmpl
Y3QqIEFYSXNvbGF0ZWRPYmplY3Q6OmZvY3VzZWRVSUVsZW1lbnQoKSBjb25zdAoreworICAgIGlm
IChhdXRvIGZvY3VzZWRFbGVtZW50ID0gdHJlZSgpLT5mb2N1c2VkVUlFbGVtZW50KCkpCisgICAg
ICAgIHJldHVybiBmb2N1c2VkRWxlbWVudC5nZXQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
KyAgICAKK0FYQ29yZU9iamVjdCogQVhJc29sYXRlZE9iamVjdDo6cGFyZW50T2JqZWN0VW5pZ25v
cmVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJlZSgpLT5ub2RlRm9ySUQocGFyZW50KCkpLmdl
dCgpOworfQorCitBWENvcmVPYmplY3QqIEFYSXNvbGF0ZWRPYmplY3Q6OnNjcm9sbEJhcihBY2Nl
c3NpYmlsaXR5T3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgcmV0dXJuIG9iamVjdEF0
dHJpYnV0ZVZhbHVlKG9yaWVudGF0aW9uID09IEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbjo6VmVy
dGljYWwgPyBBWFByb3BlcnR5TmFtZTo6VmVydGljYWxTY3JvbGxCYXIgOiBBWFByb3BlcnR5TmFt
ZTo6SG9yaXpvbnRhbFNjcm9sbEJhcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFU+Cit2b2lk
IEFYSXNvbGF0ZWRPYmplY3Q6OnBlcmZvcm1GdW5jdGlvbk9uTWFpblRocmVhZChVJiYgbGFtYmRh
KQoreworICAgIEFjY2Vzc2liaWxpdHk6OnBlcmZvcm1GdW5jdGlvbk9uTWFpblRocmVhZChbJmxh
bWJkYSwgdGhpc10gKCkgeworICAgICAgICBpZiAoYXV0byogb2JqZWN0ID0gYXNzb2NpYXRlZEFY
T2JqZWN0KCkpCisgICAgICAgICAgICBsYW1iZGEob2JqZWN0KTsKKyAgICB9KTsKK30KKwordm9p
ZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRBUklBR3JhYmJlZChib29sIHZhbHVlKQoreworICAgIHBl
cmZvcm1GdW5jdGlvbk9uTWFpblRocmVhZChbJnZhbHVlXShBWENvcmVPYmplY3QqIG9iamVjdCkg
eworICAgICAgICBvYmplY3QtPnNldEFSSUFHcmFiYmVkKHZhbHVlKTsKKyAgICB9KTsKK30KKwor
dm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRJc0V4cGFuZGVkKGJvb2wgdmFsdWUpCit7CisgICAg
cGVyZm9ybUZ1bmN0aW9uT25NYWluVGhyZWFkKFsmdmFsdWVdKEFYQ29yZU9iamVjdCogb2JqZWN0
KSB7CisgICAgICAgIG9iamVjdC0+c2V0SXNFeHBhbmRlZCh2YWx1ZSk7CisgICAgfSk7Cit9Cit2
b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNldFZhbHVlKGZsb2F0IHZhbHVlKQoreworICAgIHBlcmZv
cm1GdW5jdGlvbk9uTWFpblRocmVhZChbJnZhbHVlXShBWENvcmVPYmplY3QqIG9iamVjdCkgewor
ICAgICAgICBvYmplY3QtPnNldFZhbHVlKHZhbHVlKTsKKyAgICB9KTsKK30KKwordm9pZCBBWElz
b2xhdGVkT2JqZWN0OjpzZXRTZWxlY3RlZChib29sIHZhbHVlKQoreworICAgIHBlcmZvcm1GdW5j
dGlvbk9uTWFpblRocmVhZChbJnZhbHVlXShBWENvcmVPYmplY3QqIG9iamVjdCkgeworICAgICAg
ICBvYmplY3QtPnNldFNlbGVjdGVkKHZhbHVlKTsKKyAgICB9KTsKK30KK3ZvaWQgQVhJc29sYXRl
ZE9iamVjdDo6c2V0U2VsZWN0ZWRSb3dzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgdmFs
dWUpCit7CisgICAgcGVyZm9ybUZ1bmN0aW9uT25NYWluVGhyZWFkKFsmdmFsdWVdKEFYQ29yZU9i
amVjdCogb2JqZWN0KSB7CisgICAgICAgIG9iamVjdC0+c2V0U2VsZWN0ZWRSb3dzKHZhbHVlKTsK
KyAgICB9KTsKK30KKwordm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRGb2N1c2VkKGJvb2wgdmFs
dWUpCit7CisgICAgcGVyZm9ybUZ1bmN0aW9uT25NYWluVGhyZWFkKFsmdmFsdWVdKEFYQ29yZU9i
amVjdCogb2JqZWN0KSB7CisgICAgICAgIG9iamVjdC0+c2V0Rm9jdXNlZCh2YWx1ZSk7CisgICAg
fSk7Cit9CisKK3ZvaWQgQVhJc29sYXRlZE9iamVjdDo6c2V0U2VsZWN0ZWRUZXh0KGNvbnN0IFN0
cmluZyYgdmFsdWUpCit7CisgICAgcGVyZm9ybUZ1bmN0aW9uT25NYWluVGhyZWFkKFsmdmFsdWVd
KEFYQ29yZU9iamVjdCogb2JqZWN0KSB7CisgICAgICAgIG9iamVjdC0+c2V0U2VsZWN0ZWRUZXh0
KHZhbHVlKTsKKyAgICB9KTsKK30KKwordm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRTZWxlY3Rl
ZFRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYgdmFsdWUpCit7CisgICAgcGVyZm9ybUZ1
bmN0aW9uT25NYWluVGhyZWFkKFsmdmFsdWVdKEFYQ29yZU9iamVjdCogb2JqZWN0KSB7CisgICAg
ICAgIG9iamVjdC0+c2V0U2VsZWN0ZWRUZXh0UmFuZ2UodmFsdWUpOworICAgIH0pOworfQorCit2
b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7Cisg
ICAgcGVyZm9ybUZ1bmN0aW9uT25NYWluVGhyZWFkKFsmdmFsdWVdKEFYQ29yZU9iamVjdCogb2Jq
ZWN0KSB7CisgICAgICAgIG9iamVjdC0+c2V0VmFsdWUodmFsdWUpOworICAgIH0pOworfQorCisj
aWYgUExBVEZPUk0oQ09DT0EpICYmICFQTEFURk9STShJT1NfRkFNSUxZKQordm9pZCBBWElzb2xh
dGVkT2JqZWN0OjpzZXRDYXJldEJyb3dzaW5nRW5hYmxlZChib29sIHZhbHVlKQoreworICAgIHBl
cmZvcm1GdW5jdGlvbk9uTWFpblRocmVhZChbJnZhbHVlXShBWENvcmVPYmplY3QqIG9iamVjdCkg
eworICAgICAgICBvYmplY3QtPnNldENhcmV0QnJvd3NpbmdFbmFibGVkKHZhbHVlKTsKKyAgICB9
KTsKK30KKyNlbmRpZgorCit2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNldFByZXZlbnRLZXlib2Fy
ZERPTUV2ZW50RGlzcGF0Y2goYm9vbCB2YWx1ZSkKK3sKKyAgICBwZXJmb3JtRnVuY3Rpb25Pbk1h
aW5UaHJlYWQoWyZ2YWx1ZV0oQVhDb3JlT2JqZWN0KiBvYmplY3QpIHsKKyAgICAgICAgb2JqZWN0
LT5zZXRQcmV2ZW50S2V5Ym9hcmRET01FdmVudERpc3BhdGNoKHZhbHVlKTsKKyAgICB9KTsKK30K
Kwordm9pZCBBWElzb2xhdGVkT2JqZWN0Ojpjb2xvclZhbHVlKGludCYgciwgaW50JiBnLCBpbnQm
IGIpIGNvbnN0Cit7CisgICAgYXV0byBjb2xvciA9IGNvbG9yQXR0cmlidXRlVmFsdWUoQVhQcm9w
ZXJ0eU5hbWU6OkNvbG9yVmFsdWUpOworICAgIHIgPSBjb2xvci5yZWQoKTsKKyAgICBnID0gY29s
b3IuZ3JlZW4oKTsKKyAgICBiID0gY29sb3IuYmx1ZSgpOworfQorCitBWENvcmVPYmplY3QqIEFY
SXNvbGF0ZWRPYmplY3Q6OmFjY2Vzc2liaWxpdHlIaXRUZXN0KGNvbnN0IEludFBvaW50JiBwb2lu
dCkgY29uc3QKK3sKKyAgICBpZiAoIXJlbGF0aXZlRnJhbWUoKS5jb250YWlucyhwb2ludCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIGZvciAoY29uc3QgYXV0byYgY2hpbGRJRCA6IG1f
Y2hpbGRyZW5JRHMpIHsKKyAgICAgICAgYXV0byBjaGlsZCA9IHRyZWUoKS0+bm9kZUZvcklEKGNo
aWxkSUQpOworICAgICAgICBBU1NFUlQoY2hpbGQpOworICAgICAgICBpZiAoY2hpbGQgJiYgY2hp
bGQtPnJlbGF0aXZlRnJhbWUoKS5jb250YWlucyhwb2ludCkpCisgICAgICAgICAgICByZXR1cm4g
Y2hpbGQtPmFjY2Vzc2liaWxpdHlIaXRUZXN0KHBvaW50KTsKKyAgICB9CisgICAgcmV0dXJuIGNv
bnN0X2Nhc3Q8QVhJc29sYXRlZE9iamVjdCo+KHRoaXMpOworfQorCitBWElzb2xhdGVkVHJlZSog
QVhJc29sYXRlZE9iamVjdDo6dHJlZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2FjaGVkVHJl
ZS5nZXQoKTsKK30KKworSW50UG9pbnQgQVhJc29sYXRlZE9iamVjdDo6aW50UG9pbnRBdHRyaWJ1
dGVWYWx1ZShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0Cit7CisgICAgYXV0byB2
YWx1ZSA9IG1fYXR0cmlidXRlTWFwLmdldChwcm9wZXJ0eU5hbWUpOworICAgIHJldHVybiBXVEY6
OnN3aXRjaE9uKHZhbHVlLAorICAgICAgICBbXSAoSW50UG9pbnQmIHR5cGVkVmFsdWUpIHsgcmV0
dXJuIHR5cGVkVmFsdWU7IH0sCisgICAgICAgIFtdIChhdXRvJikgeyByZXR1cm4gSW50UG9pbnQo
KTsgfQorICAgICk7Cit9CisKK0FYQ29yZU9iamVjdCogQVhJc29sYXRlZE9iamVjdDo6b2JqZWN0
QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAoreworICAg
IGF1dG8gdmFsdWUgPSBtX2F0dHJpYnV0ZU1hcC5nZXQocHJvcGVydHlOYW1lKTsKKyAgICBBWElE
IG5vZGVJRCA9IFdURjo6c3dpdGNoT24odmFsdWUsCisgICAgICAgIFtdIChBWElEJiB0eXBlZFZh
bHVlKSB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAorICAgICAgICBbXSAoYXV0byYpIHsgcmV0dXJu
IEludmFsaWRBWElEOyB9CisgICAgKTsKKyAgICAKKyAgICByZXR1cm4gdHJlZSgpLT5ub2RlRm9y
SUQobm9kZUlEKS5nZXQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1QgQVhJc29sYXRl
ZE9iamVjdDo6cmVjdEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkg
Y29uc3QKK3sKKyAgICBhdXRvIHZhbHVlID0gbV9hdHRyaWJ1dGVNYXAuZ2V0KHByb3BlcnR5TmFt
ZSk7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24odmFsdWUsCisgICAgICAgIFtdIChUJiB0eXBl
ZFZhbHVlKSB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAorICAgICAgICBbXSAoYXV0byYpIHsgcmV0
dXJuIFQgeyB9OyB9CisgICAgKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1ZlY3RvcjxU
PiBBWElzb2xhdGVkT2JqZWN0Ojp2ZWN0b3JBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUpIGNvbnN0Cit7CisgICAgYXV0byB2YWx1ZSA9IG1fYXR0cmlidXRlTWFwLmdl
dChwcm9wZXJ0eU5hbWUpOworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKHZhbHVlLAorICAgICAg
ICBbXSAoVmVjdG9yPFQ+JiB0eXBlZFZhbHVlKSB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAorICAg
ICAgICBbXSAoYXV0byYpIHsgcmV0dXJuIFZlY3RvcjxUPigpOyB9CisgICAgKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK09wdGlvblNldDxUPiBBWElzb2xhdGVkT2JqZWN0OjpvcHRpb25T
ZXRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0Cit7Cisg
ICAgYXV0byB2YWx1ZSA9IG1fYXR0cmlidXRlTWFwLmdldChwcm9wZXJ0eU5hbWUpOworICAgIHJl
dHVybiBXVEY6OnN3aXRjaE9uKHZhbHVlLAorICAgICAgICBbXSAoVCYgdHlwZWRWYWx1ZSkgeyBy
ZXR1cm4gdHlwZWRWYWx1ZTsgfSwKKyAgICAgICAgW10gKGF1dG8mKSB7IHJldHVybiBPcHRpb25T
ZXQ8VD4oKTsgfQorICAgICk7Cit9CisKK3VpbnQ2NF90IEFYSXNvbGF0ZWRPYmplY3Q6OnVpbnQ2
NEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QKK3sKKyAg
ICBhdXRvIHZhbHVlID0gbV9hdHRyaWJ1dGVNYXAuZ2V0KHByb3BlcnR5TmFtZSk7CisgICAgcmV0
dXJuIFdURjo6c3dpdGNoT24odmFsdWUsCisgICAgICAgIFtdICh1aW50NjRfdCYgdHlwZWRWYWx1
ZSkgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKKyAgICAgICAgW10gKGF1dG8mKSB7IHJldHVybiAw
OyB9CisgICAgKTsKK30KKworVVJMIEFYSXNvbGF0ZWRPYmplY3Q6OnVybEF0dHJpYnV0ZVZhbHVl
KEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QKK3sKKyAgICBhdXRvIHZhbHVlID0g
bV9hdHRyaWJ1dGVNYXAuZ2V0KHByb3BlcnR5TmFtZSk7CisgICAgcmV0dXJuIFdURjo6c3dpdGNo
T24odmFsdWUsCisgICAgICAgIFtdIChVUkwmIHR5cGVkVmFsdWUpIHsgcmV0dXJuIHR5cGVkVmFs
dWU7IH0sCisgICAgICAgIFtdIChhdXRvJikgeyByZXR1cm4gVVJMKCk7IH0KKyAgICApOworfQor
CitDb2xvciBBWElzb2xhdGVkT2JqZWN0Ojpjb2xvckF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSkgY29uc3QKK3sKKyAgICBhdXRvIHZhbHVlID0gbV9hdHRyaWJ1dGVN
YXAuZ2V0KHByb3BlcnR5TmFtZSk7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24odmFsdWUsCisg
ICAgICAgIFtdIChDb2xvciYgdHlwZWRWYWx1ZSkgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKKyAg
ICAgICAgW10gKGF1dG8mKSB7IHJldHVybiBDb2xvcigpOyB9CisgICAgKTsKK30KKworZmxvYXQg
QVhJc29sYXRlZE9iamVjdDo6ZmxvYXRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpIGNvbnN0Cit7CisgICAgYXV0byB2YWx1ZSA9IG1fYXR0cmlidXRlTWFwLmdldChw
cm9wZXJ0eU5hbWUpOworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKHZhbHVlLAorICAgICAgICBb
XSAoZmxvYXQmIHR5cGVkVmFsdWUpIHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCisgICAgICAgIFtd
IChhdXRvJikgeyByZXR1cm4gMDsgfQorICAgICk7Cit9CisKK2RvdWJsZSBBWElzb2xhdGVkT2Jq
ZWN0Ojpkb3VibGVBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNv
bnN0Cit7CisgICAgYXV0byB2YWx1ZSA9IG1fYXR0cmlidXRlTWFwLmdldChwcm9wZXJ0eU5hbWUp
OworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKHZhbHVlLAorICAgICAgICBbXSAoZG91YmxlJiB0
eXBlZFZhbHVlKSB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAorICAgICAgICBbXSAoYXV0byYpIHsg
cmV0dXJuIDA7IH0KKyAgICApOworfQorCit1bnNpZ25lZCBBWElzb2xhdGVkT2JqZWN0Ojp1bnNp
Z25lZEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QKK3sK
KyAgICBhdXRvIHZhbHVlID0gbV9hdHRyaWJ1dGVNYXAuZ2V0KHByb3BlcnR5TmFtZSk7CisgICAg
cmV0dXJuIFdURjo6c3dpdGNoT24odmFsdWUsCisgICAgICAgIFtdICh1bnNpZ25lZCYgdHlwZWRW
YWx1ZSkgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKKyAgICAgICAgW10gKGF1dG8mKSB7IHJldHVy
biAwOyB9CisgICAgKTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojpib29sQXR0cmlidXRl
VmFsdWUoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAoreworICAgIGF1dG8gdmFs
dWUgPSBtX2F0dHJpYnV0ZU1hcC5nZXQocHJvcGVydHlOYW1lKTsKKyAgICByZXR1cm4gV1RGOjpz
d2l0Y2hPbih2YWx1ZSwKKyAgICAgICAgW10gKGJvb2wmIHR5cGVkVmFsdWUpIHsgcmV0dXJuIHR5
cGVkVmFsdWU7IH0sCisgICAgICAgIFtdIChhdXRvJikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAp
OworfQorCitjb25zdCBTdHJpbmcgQVhJc29sYXRlZE9iamVjdDo6c3RyaW5nQXR0cmlidXRlVmFs
dWUoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAoreworICAgIGF1dG8gdmFsdWUg
PSBtX2F0dHJpYnV0ZU1hcC5nZXQocHJvcGVydHlOYW1lKTsKKyAgICByZXR1cm4gV1RGOjpzd2l0
Y2hPbih2YWx1ZSwKKyAgICAgICAgW10gKFN0cmluZyYgdHlwZWRWYWx1ZSkgeyByZXR1cm4gdHlw
ZWRWYWx1ZTsgfSwKKyAgICAgICAgW10gKGF1dG8mKSB7IHJldHVybiBlbXB0eVN0cmluZygpOyB9
CisgICAgKTsKK30KKworaW50IEFYSXNvbGF0ZWRPYmplY3Q6OmludEF0dHJpYnV0ZVZhbHVlKEFY
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QKK3sKKyAgICBhdXRvIHZhbHVlID0gbV9h
dHRyaWJ1dGVNYXAuZ2V0KHByb3BlcnR5TmFtZSk7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24o
dmFsdWUsCisgICAgICAgIFtdIChpbnQmIHR5cGVkVmFsdWUpIHsgcmV0dXJuIHR5cGVkVmFsdWU7
IH0sCisgICAgICAgIFtdIChhdXRvJikgeyByZXR1cm4gMDsgfQorICAgICk7Cit9CisKK3ZvaWQg
QVhJc29sYXRlZE9iamVjdDo6ZmlsbENoaWxkcmVuVmVjdG9yRm9yUHJvcGVydHkoQVhQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVu
KSBjb25zdAoreworICAgIFZlY3RvcjxBWElEPiBjaGlsZElEcyA9IHZlY3RvckF0dHJpYnV0ZVZh
bHVlPEFYSUQ+KHByb3BlcnR5TmFtZSk7CisgICAgY2hpbGRyZW4ucmVzZXJ2ZUNhcGFjaXR5KGNo
aWxkSURzLnNpemUoKSk7CisgICAgZm9yIChhdXRvIGNoaWxkSUQgOiBjaGlsZElEcykgeworICAg
ICAgICBpZiAoYXV0byBvYmplY3QgPSB0cmVlKCktPm5vZGVGb3JJRChjaGlsZElEKSkKKyAgICAg
ICAgICAgIGNoaWxkcmVuLnVuY2hlY2tlZEFwcGVuZChvYmplY3QpOworICAgIH0KK30KKwordm9p
ZCBBWElzb2xhdGVkT2JqZWN0Ojp1cGRhdGVCYWNraW5nU3RvcmUoKQoreworICAgIC8vIFRoaXMg
bWV0aG9kIGNhbiBiZSBjYWxsZWQgb24gZWl0aGVyIHRoZSBtYWluIG9yIHRoZSBBWCB0aHJlYWRz
LgorICAgIC8vIEl0IGNhbiBiZSBjYWxsZWQgaW4gdGhlIG1haW4gdGhyZWFkIGZyb20gW1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlGb2N1c2VkVUlFbGVtZW50XS4K
KyAgICAvLyBVcGRhdGUgdGhlIElzb2xhdGVkVHJlZSBvbmx5IGlmIGl0IGlzIGNhbGxlZCBvbiB0
aGUgQVggdGhyZWFkLgorICAgIGlmICghaXNNYWluVGhyZWFkKCkpIHsKKyAgICAgICAgaWYgKGF1
dG8gdHJlZSA9IHRoaXMtPnRyZWUoKSkKKyAgICAgICAgICAgIHRyZWUtPmFwcGx5UGVuZGluZ0No
YW5nZXMoKTsKKyAgICB9Cit9CisKK1ZlY3RvcjxSZWZQdHI8UmFuZ2U+PiBBWElzb2xhdGVkT2Jq
ZWN0OjpmaW5kVGV4dFJhbmdlcyhBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dENyaXRlcmlhIGNvbnN0
JiBjcml0ZXJpYSkgY29uc3QKK3sKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVW
YWx1ZUZyb21NYWluVGhyZWFkPFZlY3RvcjxSZWZQdHI8UmFuZ2U+Pj4oWyZjcml0ZXJpYSwgdGhp
c10gKCkgLT4gVmVjdG9yPFJlZlB0cjxSYW5nZT4+IHsKKyAgICAgICAgaWYgKGF1dG8qIG9iamVj
dCA9IGFzc29jaWF0ZWRBWE9iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIG9iamVjdC0+Zmlu
ZFRleHRSYW5nZXMoY3JpdGVyaWEpOworICAgICAgICByZXR1cm4gVmVjdG9yPFJlZlB0cjxSYW5n
ZT4+KCk7CisgICAgfSk7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IEFYSXNvbGF0ZWRPYmplY3Q6OnBl
cmZvcm1UZXh0T3BlcmF0aW9uKEFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uIGNvbnN0JiB0ZXh0
T3BlcmF0aW9uKQoreworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJv
bU1haW5UaHJlYWQ8VmVjdG9yPFN0cmluZz4+KFsmdGV4dE9wZXJhdGlvbiwgdGhpc10gKCkgLT4g
VmVjdG9yPFN0cmluZz4geworICAgICAgICBpZiAoYXV0byogb2JqZWN0ID0gYXNzb2NpYXRlZEFY
T2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gb2JqZWN0LT5wZXJmb3JtVGV4dE9wZXJhdGlv
bih0ZXh0T3BlcmF0aW9uKTsKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CisgICAg
fSk7Cit9CisKK3ZvaWQgQVhJc29sYXRlZE9iamVjdDo6ZmluZE1hdGNoaW5nT2JqZWN0cyhBY2Nl
c3NpYmlsaXR5U2VhcmNoQ3JpdGVyaWEqIGNyaXRlcmlhLCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5W
ZWN0b3ImIHJlc3VsdHMpCit7CisgICAgQVNTRVJUKGNyaXRlcmlhKTsKKyAgICBpZiAoIWNyaXRl
cmlhKQorICAgICAgICByZXR1cm47CisKKyAgICBjcml0ZXJpYS0+YW5jaG9yT2JqZWN0ID0gdGhp
czsKKyAgICBBY2Nlc3NpYmlsaXR5OjpmaW5kTWF0Y2hpbmdPYmplY3RzKCpjcml0ZXJpYSwgcmVz
dWx0cyk7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6cmVwbGFjZVRleHRJblJhbmdlKGNv
bnN0IFN0cmluZyYsIGNvbnN0IFBsYWluVGV4dFJhbmdlJikKK3sKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6
aW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0OjpwcmVzcygpCit7
CisgICAgaWYgKGF1dG8qIG9iamVjdCA9IGFzc29jaWF0ZWRBWE9iamVjdCgpKQorICAgICAgICBy
ZXR1cm4gb2JqZWN0LT5wcmVzcygpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBWElz
b2xhdGVkT2JqZWN0OjpwZXJmb3JtRGVmYXVsdEFjdGlvbigpCit7CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6
OmlzQWNjZXNzaWJpbGl0eU9iamVjdCgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3QoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0FjY2Vz
c2liaWxpdHlTY3JvbGxiYXIoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0FjY2Vzc2li
aWxpdHlTY3JvbGxWaWV3KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUg
QVNTRVJUX05PVF9SRUFDSEVELCBidXQgaXQgaXMgY2FsbGVkIGJ5CisgICAgLy8gQVhPYmplY3RD
YWNoZTo6cm9vdFdlYkFyZWEsIHRoYXQgaW4gdHVybiBpcyBjYWxsZWQgYnkKKyAgICAvLyBBWE9i
amVjdENhY2hlOjpwb3N0VGV4dFN0YXRlQ2hhbmdlUGxhdGZvcm1Ob3RpZmljYXRpb24uCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzQWNjZXNzaWJpbGl0
eVNWR1Jvb3QoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0FjY2Vzc2liaWxpdHlTVkdF
bGVtZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNBdHRhY2htZW50RWxlbWVudCgp
IGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzTmF0aXZlSW1hZ2UoKSBjb25zdAoreworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBWElz
b2xhdGVkT2JqZWN0Ojppc0ltYWdlQnV0dG9uKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6
aXNDb250YWluZWRCeVBhc3N3b3JkRmllbGQoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworQVhDb3JlT2JqZWN0KiBBWElzb2xhdGVk
T2JqZWN0OjpwYXNzd29yZEZpZWxkT3JDb250YWluaW5nUGFzc3dvcmRGaWVsZCgpCit7CisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2Jvb2wgQVhJ
c29sYXRlZE9iamVjdDo6aXNOYXRpdmVUZXh0Q29udHJvbCgpIGNvbnN0Cit7CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFYSXNvbGF0ZWRP
YmplY3Q6OmlzTmF0aXZlTGlzdEJveCgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzTGlz
dEJveE9wdGlvbigpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzU2xpZGVyVGh1bWIoKSBj
b25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0lucHV0U2xpZGVyKCkgY29uc3QKK3sKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29s
YXRlZE9iamVjdDo6aXNMYWJlbCgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzRGF0YVRh
YmxlKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNJbWFnZU1hcExpbmsoKSBjb25zdAor
eworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBBWElzb2xhdGVkT2JqZWN0Ojppc05hdGl2ZVNwaW5CdXR0b24oKSBjb25zdAoreworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBWElzb2xh
dGVkT2JqZWN0Ojppc1NwaW5CdXR0b25QYXJ0KCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6
aXNNb2NrT2JqZWN0KCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNNZWRpYU9iamVjdCgp
IGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzQVJJQVRleHRDb250cm9sKCkgY29uc3QKK3sK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
QVhJc29sYXRlZE9iamVjdDo6aXNOb25OYXRpdmVUZXh0Q29udHJvbCgpIGNvbnN0Cit7CisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFYSXNv
bGF0ZWRPYmplY3Q6OmlzQmxvY2txdW90ZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6Omlz
TGFuZG1hcmsoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0ZpZ3VyZUVsZW1lbnQoKSBj
b25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0tleWJvYXJkRm9jdXNhYmxlKCkgY29uc3QKK3sK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
QVhJc29sYXRlZE9iamVjdDo6aXNIb3ZlcmVkKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6
aXNJbmRldGVybWluYXRlKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNPblNjcmVlbigp
IGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzT2ZmU2NyZWVuKCkgY29uc3QKK3sKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29s
YXRlZE9iamVjdDo6aXNQcmVzc2VkKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNVbnZp
c2l0ZWQoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0xpbmtlZCgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFY
SXNvbGF0ZWRPYmplY3Q6OmlzVmlzaWJsZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6Omlz
Q29sbGFwc2VkKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNTZWxlY3RlZE9wdGlvbkFj
dGl2ZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6Omhhc0JvbGRGb250KCkgY29uc3QKK3sK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
QVhJc29sYXRlZE9iamVjdDo6aGFzSXRhbGljRm9udCgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFYSXNvbGF0ZWRPYmpl
Y3Q6Omhhc01pc3NwZWxsaW5nKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aGFzUGxhaW5U
ZXh0KCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aGFzU2FtZUZvbnQoUmVuZGVyT2JqZWN0
KikgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aGFzU2FtZUZvbnRDb2xvcihSZW5kZXJPYmpl
Y3QqKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0OjpoYXNTYW1lU3R5bGUoUmVuZGVyT2JqZWN0
KikgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNTdGF0aWNUZXh0KCkgY29uc3QKK3sKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJ
c29sYXRlZE9iamVjdDo6aGFzVW5kZXJsaW5lKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6
aGFzSGlnaGxpZ2h0aW5nKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK0VsZW1lbnQqIEFYSXNvbGF0ZWRPYmplY3Q6OmVsZW1lbnQo
KSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRy
OworfQorCitOb2RlKiBBWElzb2xhdGVkT2JqZWN0Ojpub2RlKCkgY29uc3QKK3sKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUmVuZGVyT2JqZWN0
KiBBWElzb2xhdGVkT2JqZWN0OjpyZW5kZXJlcigpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0FjY2Vzc2liaWxpdHlPYmplY3RJ
bmNsdXNpb24gQVhJc29sYXRlZE9iamVjdDo6ZGVmYXVsdE9iamVjdEluY2x1c2lvbigpIGNvbnN0
Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlP
YmplY3RJbmNsdXNpb246OkRlZmF1bHRCZWhhdmlvcjsKK30KKworYm9vbCBBWElzb2xhdGVkT2Jq
ZWN0OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkQnlEZWZhdWx0KCkgY29uc3QKK3sKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Zsb2F0IEFYSXNvbGF0
ZWRPYmplY3Q6OnN0ZXBWYWx1ZUZvclJhbmdlKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworQVhDb3JlT2JqZWN0KiBBWElzb2xhdGVkT2Jq
ZWN0OjpzZWxlY3RlZExpc3RJdGVtKCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBBWElzb2xhdGVkT2JqZWN0OjphcmlhQWN0aXZl
RGVzY2VuZGFudFJlZmVyZW5jaW5nRWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9y
JikgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBBWElzb2xh
dGVkT2JqZWN0OjphcmlhQ29udHJvbHNSZWZlcmVuY2luZ0VsZW1lbnRzKEFjY2Vzc2liaWxpdHlD
aGlsZHJlblZlY3RvciYpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K3ZvaWQgQVhJc29sYXRlZE9iamVjdDo6YXJpYURlc2NyaWJlZEJ5RWxlbWVudHMoQWNjZXNzaWJp
bGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKwordm9pZCBBWElzb2xhdGVkT2JqZWN0OjphcmlhRGVzY3JpYmVkQnlSZWZlcmVuY2luZ0Vs
ZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0Cit7CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQVhJc29sYXRlZE9iamVjdDo6YXJpYURldGFpbHNS
ZWZlcmVuY2luZ0VsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0Cit7
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQVhJc29sYXRlZE9iamVjdDo6
YXJpYUVycm9yTWVzc2FnZVJlZmVyZW5jaW5nRWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVu
VmVjdG9yJikgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBB
WElzb2xhdGVkT2JqZWN0OjphcmlhRmxvd1RvUmVmZXJlbmNpbmdFbGVtZW50cyhBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCit2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmFyaWFMYWJlbGxlZEJ5RWxlbWVudHMoQWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKwordm9pZCBBWElzb2xhdGVkT2JqZWN0OjphcmlhTGFiZWxsZWRCeVJlZmVyZW5jaW5n
RWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3QKK3sKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBBWElzb2xhdGVkT2JqZWN0OjphcmlhT3duc1Jl
ZmVyZW5jaW5nRWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3QKK3sK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojpo
YXNEYXRhbGlzdCgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6OnN1cHBvcnRzSGFzUG9wdXAo
KSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0OjpzdXBwb3J0c1ByZXNzZWQoKSBjb25zdAorewor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBB
WElzb2xhdGVkT2JqZWN0OjpzdXBwb3J0c0NoZWNrZWQoKSBjb25zdAoreworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBWElzb2xhdGVkT2Jq
ZWN0OjppZ25vcmVkRnJvbU1vZGFsUHJlc2VuY2UoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0
Ojppc01vZGFsRGVzY2VuZGFudChOb2RlKikgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNN
b2RhbE5vZGUoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKworQVhDb3JlT2JqZWN0KiBBWElzb2xhdGVkT2JqZWN0OjplbGVtZW50QWNj
ZXNzaWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG9pbnQmKSBjb25zdAoreworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitBWENvcmVPYmplY3QqIEFY
SXNvbGF0ZWRPYmplY3Q6OmZpcnN0Q2hpbGQoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitBWENvcmVPYmplY3QqIEFYSXNvbGF0
ZWRPYmplY3Q6Omxhc3RDaGlsZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0FYQ29yZU9iamVjdCogQVhJc29sYXRlZE9iamVj
dDo6cHJldmlvdXNTaWJsaW5nKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQVhDb3JlT2JqZWN0KiBBWElzb2xhdGVkT2JqZWN0
OjpuZXh0U2libGluZygpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK0FYQ29yZU9iamVjdCogQVhJc29sYXRlZE9iamVjdDo6bmV4
dFNpYmxpbmdVbmlnbm9yZWQoaW50KSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBudWxscHRyOworfQorCitBWENvcmVPYmplY3QqIEFYSXNvbGF0ZWRPYmpl
Y3Q6OnByZXZpb3VzU2libGluZ1VuaWdub3JlZChpbnQpIGNvbnN0Cit7CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0FYQ29yZU9iamVjdCogQVhJ
c29sYXRlZE9iamVjdDo6cGFyZW50T2JqZWN0SWZFeGlzdHMoKSBjb25zdAoreworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitib29sIEFYSXNvbGF0
ZWRPYmplY3Q6OmlzRGVzY2VuZGFudE9mQmFycmVuUGFyZW50KCkgY29uc3QKK3sKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRl
ZE9iamVjdDo6aXNEZXNjZW5kYW50T2ZSb2xlKEFjY2Vzc2liaWxpdHlSb2xlKSBjb25zdAorewor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworQVhDb3Jl
T2JqZWN0KiBBWElzb2xhdGVkT2JqZWN0OjpvYnNlcnZhYmxlT2JqZWN0KCkgY29uc3QKK3sKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQVhDb3Jl
T2JqZWN0KiBBWElzb2xhdGVkT2JqZWN0Ojpjb3JyZXNwb25kaW5nTGFiZWxGb3JDb250cm9sRWxl
bWVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK0FYQ29yZU9iamVjdCogQVhJc29sYXRlZE9iamVjdDo6Y29ycmVzcG9uZGlu
Z0NvbnRyb2xGb3JMYWJlbEVsZW1lbnQoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6Omlz
UHJlc2VudGF0aW9uYWxDaGlsZE9mQXJpYVJvbGUoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0
OjphcmlhUm9sZUhhc1ByZXNlbnRhdGlvbmFsQ2hpbGRyZW4oKSBjb25zdAoreworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBWElzb2xhdGVk
T2JqZWN0Ojppbmhlcml0c1ByZXNlbnRhdGlvbmFsUm9sZSgpIGNvbnN0Cit7CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEFYSXNvbGF0ZWRP
YmplY3Q6OnNldEFjY2Vzc2libGVOYW1lKGNvbnN0IEF0b21TdHJpbmcmKQoreworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6Omhhc0F0dHJpYnV0
ZXNSZXF1aXJlZEZvckluY2x1c2lvbigpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcgQVhJc29sYXRlZE9iamVjdDo6YWNj
ZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBBWElzb2xhdGVkT2JqZWN0Ojp0
aXRsZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFN0
cmluZygpOworfQorCitTdHJpbmcgQVhJc29sYXRlZE9iamVjdDo6aGVscFRleHQoKSBjb25zdAor
eworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwor
Ym9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0FSSUFTdGF0aWNUZXh0KCkgY29uc3QKK3sKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1N0cmluZyBBWElz
b2xhdGVkT2JqZWN0Ojp0ZXh0KCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBBWElzb2xhdGVkT2JqZWN0Ojphcmlh
TGFiZWxlZEJ5QXR0cmlidXRlKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBBWElzb2xhdGVkT2JqZWN0Ojphcmlh
RGVzY3JpYmVkQnlBdHRyaWJ1dGUoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0OjphY2Nl
c3NpYmxlTmFtZURlcml2ZXNGcm9tQ29udGVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6
OmVsZW1lbnRzRnJvbUF0dHJpYnV0ZShWZWN0b3I8RWxlbWVudCo+JiwgY29uc3QgUXVhbGlmaWVk
TmFtZSYpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK0FYT2JqZWN0
Q2FjaGUqIEFYSXNvbGF0ZWRPYmplY3Q6OmF4T2JqZWN0Q2FjaGUoKSBjb25zdAoreworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgcmV0dXJuIHRyZWUoKS0+YXhPYmplY3RDYWNoZSgp
OworfQorCitFbGVtZW50KiBBWElzb2xhdGVkT2JqZWN0OjphbmNob3JFbGVtZW50KCkgY29uc3QK
K3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
RWxlbWVudCogQVhJc29sYXRlZE9iamVjdDo6YWN0aW9uRWxlbWVudCgpIGNvbnN0Cit7CisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1BhdGggQVhJ
c29sYXRlZE9iamVjdDo6ZWxlbWVudFBhdGgoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBQYXRoKCk7Cit9CisKK1RleHRJdGVyYXRvckJlaGF2aW9yIEFY
SXNvbGF0ZWRPYmplY3Q6OnRleHRJdGVyYXRvckJlaGF2aW9yRm9yVGV4dFJhbmdlKCkgY29uc3QK
K3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1dp
ZGdldCogQVhJc29sYXRlZE9iamVjdDo6d2lkZ2V0KCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byog
b2JqZWN0ID0gYXNzb2NpYXRlZEFYT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBvYmplY3QtPndp
ZGdldCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitXaWRnZXQqIEFYSXNvbGF0ZWRPYmpl
Y3Q6OndpZGdldEZvckF0dGFjaG1lbnRWaWV3KCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUGFnZSogQVhJc29sYXRlZE9iamVj
dDo6cGFnZSgpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8qIG9iamVjdCA9IGFzc29jaWF0ZWRBWE9i
amVjdCgpKQorICAgICAgICByZXR1cm4gb2JqZWN0LT5wYWdlKCk7CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0RvY3VtZW50KiBBWElzb2xhdGVk
T2JqZWN0Ojpkb2N1bWVudCgpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8qIG9iamVjdCA9IGFzc29j
aWF0ZWRBWE9iamVjdCgpKQorICAgICAgICByZXR1cm4gb2JqZWN0LT5kb2N1bWVudCgpOworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitGcmFtZVZp
ZXcqIEFYSXNvbGF0ZWRPYmplY3Q6OmRvY3VtZW50RnJhbWVWaWV3KCkgY29uc3QKK3sKKyAgICBp
ZiAoYXV0byogb2JqZWN0ID0gYXNzb2NpYXRlZEFYT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBv
YmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0Zy
YW1lKiBBWElzb2xhdGVkT2JqZWN0OjpmcmFtZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0ZyYW1lKiBBWElzb2xhdGVkT2Jq
ZWN0OjptYWluRnJhbWUoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBudWxscHRyOworfQorCitEb2N1bWVudCogQVhJc29sYXRlZE9iamVjdDo6dG9wRG9j
dW1lbnQoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBu
dWxscHRyOworfQorCitTY3JvbGxWaWV3KiBBWElzb2xhdGVkT2JqZWN0OjpzY3JvbGxWaWV3QW5j
ZXN0b3IoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBu
dWxscHRyOworfQorCit2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmNoaWxkcmVuQ2hhbmdlZCgpCit7
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQVhJc29sYXRlZE9iamVjdDo6
dGV4dENoYW5nZWQoKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEFY
SXNvbGF0ZWRPYmplY3Q6OnVwZGF0ZUFjY2Vzc2liaWxpdHlSb2xlKCkKK3sKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBBWElzb2xhdGVkT2JqZWN0OjphZGRDaGlsZHJlbigp
Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQVhJc29sYXRlZE9iamVj
dDo6YWRkQ2hpbGQoQVhDb3JlT2JqZWN0KikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKwordm9pZCBBWElzb2xhdGVkT2JqZWN0OjppbnNlcnRDaGlsZChBWENvcmVPYmplY3QqLCB1
bnNpZ25lZCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworYm9vbCBBWElzb2xh
dGVkT2JqZWN0OjpzaG91bGRJZ25vcmVBdHRyaWJ1dGVSb2xlKCkgY29uc3QKK3sKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRl
ZE9iamVjdDo6Y2FuSGF2ZUNoaWxkcmVuKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aGFz
Q2hpbGRyZW4oKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXROZWVkc1RvVXBkYXRlQ2hp
bGRyZW4oKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEFYSXNvbGF0
ZWRPYmplY3Q6OnNldE5lZWRzVG9VcGRhdGVTdWJ0cmVlKCkKK3sKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKwordm9pZCBBWElzb2xhdGVkT2JqZWN0OjpjbGVhckNoaWxkcmVuKCkKK3sK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojpu
ZWVkc1RvVXBkYXRlQ2hpbGRyZW4oKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0OjpzaG91bGRG
b2N1c0FjdGl2ZURlc2NlbmRhbnQoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBmYWxzZTsKK30KKworQVhDb3JlT2JqZWN0KiBBWElzb2xhdGVkT2JqZWN0
OjphY3RpdmVEZXNjZW5kYW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBBWElzb2xhdGVkT2JqZWN0OjpoYW5kbGVB
Y3RpdmVEZXNjZW5kYW50Q2hhbmdlZCgpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKK3ZvaWQgQVhJc29sYXRlZE9iamVjdDo6aGFuZGxlQXJpYUV4cGFuZGVkQ2hhbmdlZCgpCit7
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6
aXNEZXNjZW5kYW50T2ZPYmplY3QoY29uc3QgQVhDb3JlT2JqZWN0KikgY29uc3QKK3sKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29s
YXRlZE9iamVjdDo6aXNBbmNlc3Rvck9mT2JqZWN0KGNvbnN0IEFYQ29yZU9iamVjdCopIGNvbnN0
Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitB
WENvcmVPYmplY3QqIEFYSXNvbGF0ZWRPYmplY3Q6OmZpcnN0QW5vbnltb3VzQmxvY2tDaGlsZCgp
IGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aGFzQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBm
YWxzZTsKK30KKworY29uc3QgQXRvbVN0cmluZyYgQVhJc29sYXRlZE9iamVjdDo6Z2V0QXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBudWxsQXRvbSgpOworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6
Omhhc1RhZ05hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0Cit7CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcgQVhJc29sYXRlZE9i
amVjdDo6c3RyaW5nVmFsdWVGb3JNU0FBKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBBWElzb2xhdGVkT2JqZWN0
OjpzdHJpbmdSb2xlRm9yTVNBQSgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgQVhJc29sYXRlZE9iamVjdDo6bmFt
ZUZvck1TQUEoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBTdHJpbmcoKTsKK30KKworU3RyaW5nIEFYSXNvbGF0ZWRPYmplY3Q6OmRlc2NyaXB0aW9uRm9y
TVNBQSgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFN0
cmluZygpOworfQorCitBY2Nlc3NpYmlsaXR5Um9sZSBBWElzb2xhdGVkT2JqZWN0Ojpyb2xlVmFs
dWVGb3JNU0FBKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gQWNjZXNzaWJpbGl0eVJvbGU6OlVua25vd247Cit9CisKK1N0cmluZyBBWElzb2xhdGVkT2Jq
ZWN0OjpwYXNzd29yZEZpZWxkVmFsdWUoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworQVhDb3JlT2JqZWN0KiBBWElzb2xhdGVk
T2JqZWN0OjpsaXZlUmVnaW9uQW5jZXN0b3IoYm9vbCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworYm9vbCBBWElzb2xhdGVkT2Jq
ZWN0OjpoYXNDb250ZW50RWRpdGFibGVBdHRyaWJ1dGVTZXQoKSBjb25zdAoreworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBWElzb2xhdGVk
T2JqZWN0OjpzdXBwb3J0c1JlYWRPbmx5KCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6c3Vw
cG9ydHNBdXRvQ29tcGxldGUoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0OjpzdXBwb3J0c0FS
SUFBdHRyaWJ1dGVzKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6c2Nyb2xsQnlQYWdlKFNj
cm9sbEJ5UGFnZURpcmVjdGlvbikgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0ludFBvaW50IEFYSXNvbGF0ZWRPYmplY3Q6OnNjcm9s
bFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gSW50UG9pbnQoKTsKK30KKworSW50U2l6ZSBBWElzb2xhdGVkT2JqZWN0OjpzY3JvbGxDb250
ZW50c1NpemUoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBJbnRTaXplKCk7Cit9CisKK0ludFJlY3QgQVhJc29sYXRlZE9iamVjdDo6c2Nyb2xsVmlzaWJs
ZUNvbnRlbnRSZWN0KCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gSW50UmVjdCgpOworfQorCit2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNjcm9sbFRvTWFr
ZVZpc2libGUoY29uc3QgU2Nyb2xsUmVjdFRvVmlzaWJsZU9wdGlvbnMmKSBjb25zdAoreworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6Omxhc3RL
bm93bklzSWdub3JlZFZhbHVlKCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQVhJc29sYXRlZE9iamVjdDo6c2V0TGFzdEtub3duSXNJ
Z25vcmVkVmFsdWUoYm9vbCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9p
ZCBBWElzb2xhdGVkT2JqZWN0Ojpub3RpZnlJZklnbm9yZWRWYWx1ZUNoYW5nZWQoKQoreworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzTWF0
aFNjcmlwdE9iamVjdChBY2Nlc3NpYmlsaXR5TWF0aFNjcmlwdE9iamVjdFR5cGUpIGNvbnN0Cit7
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IEFYSXNvbGF0ZWRPYmplY3Q6OmlzTWF0aE11bHRpc2NyaXB0T2JqZWN0KEFjY2Vzc2liaWxpdHlN
YXRoTXVsdGlzY3JpcHRPYmplY3RUeXBlKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0FY
SGlkZGVuKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNET01IaWRkZW4oKSBjb25zdAor
eworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBBWElzb2xhdGVkT2JqZWN0Ojppc0hpZGRlbigpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6
Om92ZXJyaWRlQXR0YWNobWVudFBhcmVudChBWENvcmVPYmplY3QqKQoreworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCitib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmFjY2Vzc2liaWxpdHlJ
Z25vcmVBdHRhY2htZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK0FjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb24gQVhJc29s
YXRlZE9iamVjdDo6YWNjZXNzaWJpbGl0eVBsYXRmb3JtSW5jbHVkZXNPYmplY3QoKSBjb25zdAor
eworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0SW5jbHVzaW9uOjpEZWZhdWx0QmVoYXZpb3I7Cit9CisKK2Jvb2wgQVhJc29sYXRlZE9iamVj
dDo6aGFzQXBwbGVQREZBbm5vdGF0aW9uQXR0cmlidXRlKCkgY29uc3QKK3sKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2NvbnN0IEFjY2Vzc2liaWxp
dHlTY3JvbGxWaWV3KiBBWElzb2xhdGVkT2JqZWN0OjphbmNlc3RvckFjY2Vzc2liaWxpdHlTY3Jv
bGxWaWV3KGJvb2wpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgQVhJc29sYXRlZE9iamVjdDo6c2V0SXNJZ25vcmVkRnJv
bVBhcmVudERhdGEoQWNjZXNzaWJpbGl0eUlzSWdub3JlZEZyb21QYXJlbnREYXRhJikKK3sKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBBWElzb2xhdGVkT2JqZWN0OjpjbGVh
cklzSWdub3JlZEZyb21QYXJlbnREYXRhKCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKwordm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRJc0lnbm9yZWRGcm9tUGFyZW50RGF0YUZv
ckNoaWxkKEFYQ29yZU9iamVjdCopCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRSgoQUNDRVNTSUJJTElU
WV9JU09MQVRFRF9UUkVFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzYzI0
OGNmOWZmOTM3N2M0YzE0YjBhOGY3OTAwNGE3MGMzMTBlNzgKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0
LmgKQEAgLTAsMCArMSw4MzggQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJl
IG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09M
QVRFRF9UUkVFKQorCisjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgIkFjY2Vz
c2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1
ZGUgIkxheW91dFJlY3QuaCIKKyNpbmNsdWRlICJQYXRoLmgiCisjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBBWElzb2xhdGVkVHJlZTsKKworY2xhc3MgQVhJc29sYXRlZE9iamVjdCBmaW5hbCA6IHB1
YmxpYyBBWENvcmVPYmplY3QgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8QVhJc29sYXRlZE9i
amVjdD4gY3JlYXRlKEFYQ29yZU9iamVjdCYsIGJvb2wgaXNSb290KTsKKyAgICB+QVhJc29sYXRl
ZE9iamVjdCgpOworCisgICAgdm9pZCBzZXRPYmplY3RJRChBWElEIGlkKSBvdmVycmlkZSB7IG1f
aWQgPSBpZDsgfQorICAgIEFYSUQgb2JqZWN0SUQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X2lkOyB9CisgICAgdm9pZCBpbml0KCkgb3ZlcnJpZGUgeyB9CisKKyAgICBib29sIGlzRGV0YWNo
ZWQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0VHJlZUlkZW50aWZpZXIoQVhJc29s
YXRlZFRyZWVJRCk7CisgICAgdm9pZCBzZXRQYXJlbnQoQVhJRCk7CisgICAgdm9pZCBhcHBlbmRD
aGlsZChBWElEKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGRldGFjaFJlbW90ZVBhcnRzKEFjY2Vz
c2liaWxpdHlEZXRhY2htZW50VHlwZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBhdHRhY2hQbGF0Zm9y
bVdyYXBwZXIoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRldGFjaFBsYXRmb3JtV3JhcHBlcihBY2Nl
c3NpYmlsaXR5RGV0YWNobWVudFR5cGUpIG92ZXJyaWRlOworICAgIEFYSUQgcGFyZW50KCkgY29u
c3QgeyByZXR1cm4gbV9wYXJlbnQ7IH0KKyAgICAKKyAgICBBWElzb2xhdGVkVHJlZUlEIHRyZWVJ
ZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV90cmVlSWRlbnRpZmllcjsgfQorICAgIEFYSXNv
bGF0ZWRUcmVlKiB0cmVlKCkgY29uc3Q7CisgICAgCisgICAgQVhJc29sYXRlZE9iamVjdCgpID0g
ZGVmYXVsdDsKKyAgICBBWElzb2xhdGVkT2JqZWN0KEFYQ29yZU9iamVjdCYsIGJvb2wgaXNSb290
KTsKKyAgICB2b2lkIGluaXRpYWxpemVBdHRyaWJ1dGVEYXRhKEFYQ29yZU9iamVjdCYsIGJvb2wg
aXNSb290KTsKKyAgICBBWENvcmVPYmplY3QqIGFzc29jaWF0ZWRBWE9iamVjdCgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICByZXR1cm4gYXhP
YmplY3RDYWNoZSgpLT5vYmplY3RGcm9tQVhJRChvYmplY3RJRCgpKTsKKyAgICB9CisKKyAgICBl
bnVtIGNsYXNzIEFYUHJvcGVydHlOYW1lIDogdWludDhfdCB7CisgICAgICAgIE5vbmUgPSAwLAor
ICAgICAgICBBY2Nlc3NLZXksCisgICAgICAgIEFjdGlvblZlcmIsCisgICAgICAgIEFjY2Vzc2li
aWxpdHlCdXR0b25TdGF0ZSwKKyAgICAgICAgQWNjZXNzaWJpbGl0eVRleHQsCisgICAgICAgIEF1
dG9Db21wbGV0ZVZhbHVlLAorICAgICAgICBBUklBQ29udHJvbHNFbGVtZW50cywKKyAgICAgICAg
QVJJQURldGFpbHNFbGVtZW50cywKKyAgICAgICAgQVJJQURyb3BFZmZlY3RzLAorICAgICAgICBB
UklBRXJyb3JNZXNzYWdlRWxlbWVudHMsCisgICAgICAgIEFSSUFJc011bHRpbGluZSwKKyAgICAg
ICAgQVJJQUZsb3dUb0VsZW1lbnRzLAorICAgICAgICBBUklBTGFuZG1hcmtSb2xlRGVzY3JpcHRp
b24sCisgICAgICAgIEFSSUFUcmVlSXRlbUNvbnRlbnQsCisgICAgICAgIEFSSUFUcmVlSXRlbURp
c2Nsb3NlZFJvd3MsCisgICAgICAgIEFSSUFUcmVlUm93cywKKyAgICAgICAgQVJJQVJvbGVBdHRy
aWJ1dGUsCisgICAgICAgIEFSSUFPd25zRWxlbWVudHMsCisgICAgICAgIEJsb2NrcXVvdGVMZXZl
bCwKKyAgICAgICAgQm91bmRpbmdCb3hSZWN0LAorICAgICAgICBDYW5IYXZlU2VsZWN0ZWRDaGls
ZHJlbiwKKyAgICAgICAgQ2FuU2V0RXhwYW5kZWRBdHRyaWJ1dGUsCisgICAgICAgIENhblNldEZv
Y3VzQXR0cmlidXRlLAorICAgICAgICBDYW5TZXROdW1lcmljVmFsdWUsCisgICAgICAgIENhblNl
dFNlbGVjdGVkQXR0cmlidXRlLAorICAgICAgICBDYW5TZXRTZWxlY3RlZENoaWxkcmVuQXR0cmli
dXRlLAorICAgICAgICBDYW5TZXRUZXh0UmFuZ2VBdHRyaWJ1dGVzLAorICAgICAgICBDYW5TZXRW
YWx1ZUF0dHJpYnV0ZSwKKyAgICAgICAgQ2FudmFzSGFzRmFsbGJhY2tDb250ZW50LAorI2lmIFBM
QVRGT1JNKENPQ09BKSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgQ2FyZXRCcm93
c2luZ0VuYWJsZWQsCisjZW5kaWYKKyAgICAgICAgQ2xhc3NMaXN0LAorICAgICAgICBDbGlja1Bv
aW50LAorICAgICAgICBDb2xvclZhbHVlLAorICAgICAgICBDb21wdXRlZExhYmVsLAorICAgICAg
ICBDb21wdXRlZFJvbGVTdHJpbmcsCisgICAgICAgIEN1cnJlbnRTdGF0ZSwKKyAgICAgICAgQ3Vy
cmVudFZhbHVlLAorICAgICAgICBEYXRldGltZUF0dHJpYnV0ZVZhbHVlLAorICAgICAgICBEZWNy
ZW1lbnRCdXR0b24sCisgICAgICAgIERlc2NyaXB0aW9uLAorICAgICAgICBEb2N1bWVudEVuY29k
aW5nLAorICAgICAgICBEb2N1bWVudFVSSSwKKyAgICAgICAgRWRpdGFibGVBbmNlc3RvciwKKyAg
ICAgICAgRWxlbWVudFJlY3QsCisgICAgICAgIEVzdGltYXRlZExvYWRpbmdQcm9ncmVzcywKKyAg
ICAgICAgRXhwYW5kZWRUZXh0VmFsdWUsCisgICAgICAgIEV4cG9zZXNUaXRsZVVJRWxlbWVudCwK
KyAgICAgICAgRmlsZVVwbG9hZEJ1dHRvblJldHVybnNWYWx1ZUluVGl0bGUsCisgICAgICAgIEZv
Y3VzYWJsZUFuY2VzdG9yLAorICAgICAgICBIYXNBUklBVmFsdWVOb3csCisgICAgICAgIEhhc1Bv
cHVwLAorICAgICAgICBIZWFkaW5nTGV2ZWwsCisgICAgICAgIEhlbHBUZXh0LAorICAgICAgICBI
aWVyYXJjaGljYWxMZXZlbCwKKyAgICAgICAgSGlnaGVzdEVkaXRhYmxlQW5jZXN0b3IsCisgICAg
ICAgIEhvcml6b250YWxTY3JvbGxCYXIsCisgICAgICAgIElkZW50aWZpZXJBdHRyaWJ1dGUsCisg
ICAgICAgIEludmFsaWRTdGF0dXMsCisgICAgICAgIEluY3JlbWVudEJ1dHRvbiwKKyAgICAgICAg
SXNBY2Nlc3NpYmlsaXR5SWdub3JlZCwKKyAgICAgICAgSXNBY3RpdmVEZXNjZW5kYW50T2ZGb2N1
c2VkQ29udGFpbmVyLAorICAgICAgICBJc0Fub255bW91c01hdGhPcGVyYXRvciwKKyAgICAgICAg
SXNBUklBR3JhYmJlZCwKKyAgICAgICAgSXNBUklBVHJlZUdyaWRSb3csCisgICAgICAgIElzQXR0
YWNobWVudCwKKyAgICAgICAgSXNCdXR0b24sCisgICAgICAgIElzQnVzeSwKKyAgICAgICAgSXND
aGVja2VkLAorICAgICAgICBJc0NvbGxhcHNlZCwKKyAgICAgICAgSXNDb250cm9sLAorICAgICAg
ICBJc0Rlc2NyaXB0aW9uTGlzdCwKKyAgICAgICAgSXNFbmFibGVkLAorICAgICAgICBJc0V4cGFu
ZGVkLAorICAgICAgICBJc0ZpZWxkc2V0LAorICAgICAgICBJc0ZpbGVVcGxvYWRCdXR0b24sCisg
ICAgICAgIElzRm9jdXNlZCwKKyAgICAgICAgSXNHcm91cCwKKyAgICAgICAgSXNJbWFnZSwKKyAg
ICAgICAgSXNJbWFnZU1hcExpbmssCisgICAgICAgIElzSW5jcmVtZW50b3IsCisgICAgICAgIElz
SW5kZXRlcm1pbmF0ZSwKKyAgICAgICAgSXNJbmxpbmVUZXh0LAorICAgICAgICBJc0lucHV0SW1h
Z2UsCisgICAgICAgIElzSW5zaWRlTGl2ZVJlZ2lvbiwKKyAgICAgICAgSXNMaW5rLAorICAgICAg
ICBJc0xpbmtlZCwKKyAgICAgICAgSXNMaXN0LAorICAgICAgICBJc0xpc3RCb3gsCisgICAgICAg
IElzTG9hZGVkLAorICAgICAgICBJc0hlYWRpbmcsCisgICAgICAgIElzSG92ZXJlZCwKKyAgICAg
ICAgSXNNYXRoRWxlbWVudCwKKyAgICAgICAgSXNNYXRoRnJhY3Rpb24sCisgICAgICAgIElzTWF0
aEZlbmNlZCwKKyAgICAgICAgSXNNYXRoU3Vic2NyaXB0U3VwZXJzY3JpcHQsCisgICAgICAgIElz
TWF0aFJvdywKKyAgICAgICAgSXNNYXRoVW5kZXJPdmVyLAorICAgICAgICBJc01hdGhSb290LAor
ICAgICAgICBJc01hdGhTcXVhcmVSb290LAorICAgICAgICBJc01hdGhUZXh0LAorICAgICAgICBJ
c01hdGhOdW1iZXIsCisgICAgICAgIElzTWF0aE9wZXJhdG9yLAorICAgICAgICBJc01hdGhGZW5j
ZU9wZXJhdG9yLAorICAgICAgICBJc01hdGhTZXBhcmF0b3JPcGVyYXRvciwKKyAgICAgICAgSXNN
YXRoSWRlbnRpZmllciwKKyAgICAgICAgSXNNYXRoVGFibGUsCisgICAgICAgIElzTWF0aFRhYmxl
Um93LAorICAgICAgICBJc01hdGhUYWJsZUNlbGwsCisgICAgICAgIElzTWF0aE11bHRpc2NyaXB0
LAorICAgICAgICBJc01hdGhUb2tlbiwKKyAgICAgICAgSXNNYXRoU2NyaXB0T2JqZWN0LAorICAg
ICAgICBJc01lZGlhVGltZWxpbmUsCisgICAgICAgIElzTWVudSwKKyAgICAgICAgSXNNZW51QmFy
LAorICAgICAgICBJc01lbnVCdXR0b24sCisgICAgICAgIElzTWVudUl0ZW0sCisgICAgICAgIElz
TWVudUxpc3QsCisgICAgICAgIElzTWVudUxpc3RPcHRpb24sCisgICAgICAgIElzTWVudUxpc3RQ
b3B1cCwKKyAgICAgICAgSXNNZW51UmVsYXRlZCwKKyAgICAgICAgSXNNZXRlciwKKyAgICAgICAg
SXNNdWx0aVNlbGVjdGFibGUsCisgICAgICAgIElzT2ZmU2NyZWVuLAorICAgICAgICBJc09uU2Ny
ZWVuLAorICAgICAgICBJc09yZGVyZWRMaXN0LAorICAgICAgICBJc091dHB1dCwKKyAgICAgICAg
SXNQYXNzd29yZEZpZWxkLAorICAgICAgICBJc1ByZXNzZWQsCisgICAgICAgIElzUHJvZ3Jlc3NJ
bmRpY2F0b3IsCisgICAgICAgIElzUmFuZ2VDb250cm9sLAorICAgICAgICBJc1JlcXVpcmVkLAor
ICAgICAgICBJc1Njcm9sbGJhciwKKyAgICAgICAgSXNTZWFyY2hGaWVsZCwKKyAgICAgICAgSXNT
ZWxlY3RlZCwKKyAgICAgICAgSXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSwKKyAgICAgICAgSXNTaG93
aW5nVmFsaWRhdGlvbk1lc3NhZ2UsCisgICAgICAgIElzU2xpZGVyLAorICAgICAgICBJc1N0eWxl
Rm9ybWF0R3JvdXAsCisgICAgICAgIElzVGFibGVDZWxsLAorICAgICAgICBJc1RhYmxlQ29sdW1u
LAorICAgICAgICBJc1RhYmxlUm93LAorICAgICAgICBJc1RleHRDb250cm9sLAorICAgICAgICBJ
c1RyZWUsCisgICAgICAgIElzVHJlZUl0ZW0sCisgICAgICAgIElzVW5vcmRlcmVkTGlzdCwKKyAg
ICAgICAgSXNVbnZpc2l0ZWQsCisgICAgICAgIElzVmFsdWVBdXRvZmlsbGVkLAorICAgICAgICBJ
c1ZhbHVlQXV0b2ZpbGxBdmFpbGFibGUsCisgICAgICAgIElzVmlzaWJsZSwKKyAgICAgICAgSXNW
aXNpdGVkLAorICAgICAgICBLZXlTaG9ydGN1dHNWYWx1ZSwKKyAgICAgICAgTGFuZ3VhZ2UsCisg
ICAgICAgIExheW91dENvdW50LAorICAgICAgICBMaW5rUmVsVmFsdWUsCisgICAgICAgIExpbmtl
ZFVJRWxlbWVudHMsCisgICAgICAgIExpdmVSZWdpb25BdG9taWMsCisgICAgICAgIExpdmVSZWdp
b25SZWxldmFudCwKKyAgICAgICAgTGl2ZVJlZ2lvblN0YXR1cywKKyAgICAgICAgTWF0aEZlbmNl
ZE9wZW5TdHJpbmcsCisgICAgICAgIE1hdGhGZW5jZWRDbG9zZVN0cmluZywKKyAgICAgICAgTWF0
aExpbmVUaGlja25lc3MsCisgICAgICAgIE1hdGhQcmVzY3JpcHRzLAorICAgICAgICBNYXRoUG9z
dHNjcmlwdHMsCisgICAgICAgIE1hdGhSYWRpY2FuZE9iamVjdCwKKyAgICAgICAgTWF0aFJvb3RJ
bmRleE9iamVjdCwKKyAgICAgICAgTWF0aFVuZGVyT2JqZWN0LAorICAgICAgICBNYXRoT3Zlck9i
amVjdCwKKyAgICAgICAgTWF0aE51bWVyYXRvck9iamVjdCwKKyAgICAgICAgTWF0aERlbm9taW5h
dG9yT2JqZWN0LAorICAgICAgICBNYXRoQmFzZU9iamVjdCwKKyAgICAgICAgTWF0aFN1YnNjcmlw
dE9iamVjdCwKKyAgICAgICAgTWF0aFN1cGVyc2NyaXB0T2JqZWN0LAorICAgICAgICBNYXhWYWx1
ZUZvclJhbmdlLAorICAgICAgICBNaW5WYWx1ZUZvclJhbmdlLAorICAgICAgICBPcmllbnRhdGlv
biwKKyAgICAgICAgUGxhY2Vob2xkZXJWYWx1ZSwKKyAgICAgICAgUHJlc3NlZElzUHJlc2VudCwK
KyAgICAgICAgUG9wdXBWYWx1ZSwKKyAgICAgICAgUG9zSW5TZXQsCisgICAgICAgIFByZXZlbnRL
ZXlib2FyZERPTUV2ZW50RGlzcGF0Y2gsCisgICAgICAgIFJlYWRPbmx5VmFsdWUsCisgICAgICAg
IFJlbGF0aXZlRnJhbWUsCisgICAgICAgIFJvbGVWYWx1ZSwKKyAgICAgICAgUm9sZVBsYXRmb3Jt
U3RyaW5nLAorICAgICAgICBSb2xlRGVzY3JpcHRpb24sCisgICAgICAgIFNlbGVjdGVkQ2hpbGRy
ZW4sCisgICAgICAgIFNlbGVjdGVkUmFkaW9CdXR0b24sCisgICAgICAgIFNlbGVjdGVkVGFiSXRl
bSwKKyAgICAgICAgU2Vzc2lvbklELAorICAgICAgICBTZXRTaXplLAorICAgICAgICBTb3J0RGly
ZWN0aW9uLAorICAgICAgICBTcGVha0FzLAorICAgICAgICBTcGVlY2hIaW50LAorICAgICAgICBT
dHJpbmdWYWx1ZSwKKyAgICAgICAgU3VwcG9ydHNBUklBRHJhZ2dpbmcsCisgICAgICAgIFN1cHBv
cnRzQVJJQURyb3BwaW5nLAorICAgICAgICBTdXBwb3J0c0FSSUFPd25zLAorICAgICAgICBTdXBw
b3J0c0N1cnJlbnQsCisgICAgICAgIFN1cHBvcnRzRGF0ZXRpbWVBdHRyaWJ1dGUsCisgICAgICAg
IFN1cHBvcnRzRXhwYW5kZWQsCisgICAgICAgIFN1cHBvcnRzRXhwYW5kZWRUZXh0VmFsdWUsCisg
ICAgICAgIFN1cHBvcnRzTGl2ZVJlZ2lvbiwKKyAgICAgICAgU3VwcG9ydHNQYXRoLAorICAgICAg
ICBTdXBwb3J0c1Bvc0luU2V0LAorICAgICAgICBTdXBwb3J0c1ByZXNzQWN0aW9uLAorICAgICAg
ICBTdXBwb3J0c1JhbmdlVmFsdWUsCisgICAgICAgIFN1cHBvcnRzUmVxdWlyZWRBdHRyaWJ1dGUs
CisgICAgICAgIFN1cHBvcnRzU2V0U2l6ZSwKKyAgICAgICAgVGFiQ2hpbGRyZW4sCisgICAgICAg
IFRhYmxlTGV2ZWwsCisgICAgICAgIFRhZ05hbWUsCisgICAgICAgIFRleHRMZW5ndGgsCisgICAg
ICAgIFRpdGxlLAorICAgICAgICBUaXRsZVVJRWxlbWVudCwKKyAgICAgICAgVVJMLAorICAgICAg
ICBWYWx1ZUF1dG9maWxsQnV0dG9uVHlwZSwKKyAgICAgICAgVmFsdWVEZXNjcmlwdGlvbiwKKyAg
ICAgICAgVmFsdWVGb3JSYW5nZSwKKyAgICAgICAgVmFsaWRhdGlvbk1lc3NhZ2UsCisgICAgICAg
IFZlcnRpY2FsU2Nyb2xsQmFyLAorICAgICAgICBWaXNpYmxlQ2hpbGRyZW4sCisgICAgfTsKKyAg
ICAKKyAgICB0eXBlZGVmIHN0ZDo6cGFpcjxBWElELCBBWElEPiBBY2Nlc3NpYmlsaXR5SXNvbGF0
ZWRUcmVlTWF0aE11bHRpc2NyaXB0UGFpcjsKKyAgICBzdHJ1Y3QgQWNjZXNzaWJpbGl0eUlzb2xh
dGVkVHJlZVRleHQgeworICAgICAgICBTdHJpbmcgdGV4dDsKKyAgICAgICAgQWNjZXNzaWJpbGl0
eVRleHRTb3VyY2UgdGV4dFNvdXJjZTsKKyAgICAgICAgVmVjdG9yPEFYSUQ+IHRleHRFbGVtZW50
czsKKyAgICB9OworICAgIAorICAgIHVzaW5nIEF0dHJpYnV0ZVZhbHVlVmFyaWFudCA9IFZhcmlh
bnQ8c3RkOjpudWxscHRyX3QsIFN0cmluZywgYm9vbCwgaW50LCB1bnNpZ25lZCwgZG91YmxlLCBm
bG9hdCwgdWludDY0X3QsIENvbG9yLCBVUkwsIExheW91dFJlY3QsIEFYSUQsIEludFBvaW50LCBP
cHRpb25TZXQ8U3BlYWtBcz4sIFZlY3RvcjxBY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlVGV4dD4s
IFZlY3RvcjxBWElEPiwgVmVjdG9yPEFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVNYXRoTXVsdGlz
Y3JpcHRQYWlyPiwgVmVjdG9yPFN0cmluZz4+OworICAgIHZvaWQgc2V0UHJvcGVydHkoQVhQcm9w
ZXJ0eU5hbWUsIEF0dHJpYnV0ZVZhbHVlVmFyaWFudCYmLCBib29sIHNob3VsZFJlbW92ZSA9IGZh
bHNlKTsKKyAgICB2b2lkIHNldE9iamVjdFByb3BlcnR5KEFYUHJvcGVydHlOYW1lLCBBWENvcmVP
YmplY3QqKTsKKyAgICB2b2lkIHNldE9iamVjdFZlY3RvclByb3BlcnR5KEFYUHJvcGVydHlOYW1l
LCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKTsKKworICAgIGJvb2wgYm9vbEF0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICBjb25zdCBTdHJpbmcgc3RyaW5nQXR0
cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIGludCBpbnRBdHRyaWJ1dGVW
YWx1ZShBWFByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgdW5zaWduZWQgdW5zaWduZWRBdHRyaWJ1
dGVWYWx1ZShBWFByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgZG91YmxlIGRvdWJsZUF0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICBmbG9hdCBmbG9hdEF0dHJpYnV0ZVZh
bHVlKEFYUHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICBBWENvcmVPYmplY3QqIG9iamVjdEF0dHJp
YnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICBJbnRQb2ludCBpbnRQb2ludEF0
dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICBDb2xvciBjb2xvckF0dHJp
YnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICBVUkwgdXJsQXR0cmlidXRlVmFs
dWUoQVhQcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIHVpbnQ2NF90IHVpbnQ2NEF0dHJpYnV0ZVZh
bHVlKEFYUHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIHJl
Y3RBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gVmVjdG9yPFQ+IHZlY3RvckF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lKSBj
b25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBPcHRpb25TZXQ8VD4gb3B0aW9uU2V0QXR0
cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUpIGNvbnN0OworCisgICAgdm9pZCBmaWxsQ2hpbGRy
ZW5WZWN0b3JGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSwgQWNjZXNzaWJpbGl0eUNoaWxkcmVu
VmVjdG9yJikgY29uc3Q7CisgICAgdm9pZCBzZXRNYXRoc2NyaXB0cyhBWFByb3BlcnR5TmFtZSwg
QVhDb3JlT2JqZWN0Jik7CisgICAgdm9pZCBpbnNlcnRNYXRoUGFpcnMoVmVjdG9yPEFjY2Vzc2li
aWxpdHlJc29sYXRlZFRyZWVNYXRoTXVsdGlzY3JpcHRQYWlyPiYsIEFjY2Vzc2liaWxpdHlNYXRo
TXVsdGlzY3JpcHRQYWlycyYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgcGVyZm9y
bUZ1bmN0aW9uT25NYWluVGhyZWFkKFUmJik7CisKKyAgICAvLyBBdHRyaWJ1dGUgcmV0cmlldmFs
IG92ZXJyaWRlcy4KKyAgICBib29sIGlzSGVhZGluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNIZWFkaW5nKTsgfQorICAgIGJv
b2wgaXNMaW5rKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFY
UHJvcGVydHlOYW1lOjpJc0xpbmspOyB9CisgICAgYm9vbCBpc0ltYWdlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0ltYWdlKTsg
fQorICAgIGJvb2wgaXNQYXNzd29yZEZpZWxkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9v
bEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc1Bhc3N3b3JkRmllbGQpOyB9CisgICAg
Ym9vbCBpc1NlYXJjaEZpZWxkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc1NlYXJjaEZpZWxkKTsgfQorICAgIGJvb2wgaXNBdHRh
Y2htZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpJc0F0dGFjaG1lbnQpOyB9CisgICAgYm9vbCBpc01lZGlhVGltZWxpbmUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6
OklzTWVkaWFUaW1lbGluZSk7IH0KKyAgICBib29sIGlzTWVudVJlbGF0ZWQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTWVudVJl
bGF0ZWQpOyB9CisgICAgYm9vbCBpc01lbnUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29s
QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTWVudSk7IH0KKyAgICBib29sIGlzTWVu
dUJhcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6SXNNZW51QmFyKTsgfQorICAgIGJvb2wgaXNNZW51QnV0dG9uKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc01lbnVC
dXR0b24pOyB9CisgICAgYm9vbCBpc01lbnVJdGVtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
Ym9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc01lbnVJdGVtKTsgfQorICAgIGJv
b2wgaXNGaWxlVXBsb2FkQnV0dG9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJp
YnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0ZpbGVVcGxvYWRCdXR0b24pOyB9CisgICAgYm9v
bCBpc0lucHV0SW1hZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFs
dWUoQVhQcm9wZXJ0eU5hbWU6OklzSW5wdXRJbWFnZSk7IH0KKyAgICBib29sIGlzUHJvZ3Jlc3NJ
bmRpY2F0b3IoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQ
cm9wZXJ0eU5hbWU6OklzUHJvZ3Jlc3NJbmRpY2F0b3IpOyB9CisgICAgYm9vbCBpc1NsaWRlcigp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFt
ZTo6SXNTbGlkZXIpOyB9CisgICAgYm9vbCBpc0NvbnRyb2woKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzQ29udHJvbCk7IH0KKwor
ICAgIGJvb2wgaXNMaXN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZh
bHVlKEFYUHJvcGVydHlOYW1lOjpJc0xpc3QpOyB9CisgICAgYm9vbCBpc1Vub3JkZXJlZExpc3Qo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5h
bWU6OklzVW5vcmRlcmVkTGlzdCk7IH0KKyAgICBib29sIGlzT3JkZXJlZExpc3QoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzT3Jk
ZXJlZExpc3QpOyB9CisgICAgYm9vbCBpc0Rlc2NyaXB0aW9uTGlzdCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNEZXNjcmlwdGlv
bkxpc3QpOyB9CisKKyAgICBib29sIGlzVGFibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQorICAgIGJvb2wgaXNUYWJsZVJvdygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJv
b2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNUYWJsZVJvdyk7IH0KKyAgICBib29s
IGlzVGFibGVDb2x1bW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFs
dWUoQVhQcm9wZXJ0eU5hbWU6OklzVGFibGVDb2x1bW4pOyB9CisgICAgYm9vbCBpc1RhYmxlQ2Vs
bCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5
TmFtZTo6SXNUYWJsZUNlbGwpOyB9CisgICAgYm9vbCBpc0ZpZWxkc2V0KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0ZpZWxkc2V0
KTsgfQorICAgIGJvb2wgaXNHcm91cCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRy
aWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNHcm91cCk7IH0KKyAgICBib29sIGlzQVJJQVRy
ZWVHcmlkUm93KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFY
UHJvcGVydHlOYW1lOjpJc0FSSUFUcmVlR3JpZFJvdyk7IH0KKyAgICBib29sIGlzTWVudUxpc3Qo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5h
bWU6OklzTWVudUxpc3QpOyB9CisgICAgYm9vbCBpc01lbnVMaXN0UG9wdXAoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTWVudUxp
c3RQb3B1cCk7IH0KKyAgICBib29sIGlzTWVudUxpc3RPcHRpb24oKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTWVudUxpc3RPcHRp
b24pOyB9CisgICAgYm9vbCBpc1RleHRDb250cm9sKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
Ym9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc1RleHRDb250cm9sKTsgfQorICAg
IGJvb2wgaXNCdXR0b24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFs
dWUoQVhQcm9wZXJ0eU5hbWU6OklzQnV0dG9uKTsgfQorICAgIGJvb2wgaXNSYW5nZUNvbnRyb2wo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5h
bWU6OklzUmFuZ2VDb250cm9sKTsgfQorICAgIGJvb2wgaXNNZXRlcigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNNZXRlcik7IH0K
KyAgICBib29sIGlzU3R5bGVGb3JtYXRHcm91cCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJv
b2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNTdHlsZUZvcm1hdEdyb3VwKTsgfQor
ICAgIGJvb2wgaXNPdXRwdXQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRl
VmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzT3V0cHV0KTsgfQorICAgIGJvb2wgaXNDaGVja2VkKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1l
OjpJc0NoZWNrZWQpOyB9CisgICAgYm9vbCBpc0VuYWJsZWQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzRW5hYmxlZCk7IH0KKyAg
ICBib29sIGlzU2VsZWN0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRl
VmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzU2VsZWN0ZWQpOyB9CisgICAgYm9vbCBpc0ZvY3VzZWQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5h
bWU6OklzRm9jdXNlZCk7IH0KKyAgICBib29sIGlzTXVsdGlTZWxlY3RhYmxlKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc011bHRp
U2VsZWN0YWJsZSk7IH0KKyAgICBib29sIGlzVmlzaXRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNWaXNpdGVkKTsgfQorICAg
IGJvb2wgaXNSZXF1aXJlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVW
YWx1ZShBWFByb3BlcnR5TmFtZTo6SXNSZXF1aXJlZCk7IH0KKyAgICBib29sIHN1cHBvcnRzUmVx
dWlyZWRBdHRyaWJ1dGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFs
dWUoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzUmVxdWlyZWRBdHRyaWJ1dGUpOyB9CisgICAgYm9v
bCBpc0V4cGFuZGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVl
KEFYUHJvcGVydHlOYW1lOjpJc0V4cGFuZGVkKTsgfQorICAgIEZsb2F0UmVjdCByZWxhdGl2ZUZy
YW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gcmVjdEF0dHJpYnV0ZVZhbHVlPEZsb2F0UmVj
dD4oQVhQcm9wZXJ0eU5hbWU6OlJlbGF0aXZlRnJhbWUpOyB9CisgICAgYm9vbCBzdXBwb3J0c0Rh
dGV0aW1lQXR0cmlidXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZh
bHVlKEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c0RhdGV0aW1lQXR0cmlidXRlKTsgfQorICAgIFN0
cmluZyBkYXRldGltZUF0dHJpYnV0ZVZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3Ry
aW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkRhdGV0aW1lQXR0cmlidXRlVmFsdWUp
OyB9CisgICAgYm9vbCBjYW5TZXRGb2N1c0F0dHJpYnV0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q2FuU2V0Rm9jdXNBdHRyaWJ1
dGUpOyB9CisgICAgYm9vbCBjYW5TZXRUZXh0UmFuZ2VBdHRyaWJ1dGVzKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpDYW5TZXRUZXh0
UmFuZ2VBdHRyaWJ1dGVzKTsgfQorICAgIGJvb2wgY2FuU2V0VmFsdWVBdHRyaWJ1dGUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNh
blNldFZhbHVlQXR0cmlidXRlKTsgfQorICAgIGJvb2wgY2FuU2V0TnVtZXJpY1ZhbHVlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpD
YW5TZXROdW1lcmljVmFsdWUpOyB9CisgICAgYm9vbCBjYW5TZXRTZWxlY3RlZEF0dHJpYnV0ZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFt
ZTo6Q2FuU2V0U2VsZWN0ZWRBdHRyaWJ1dGUpOyB9CisgICAgYm9vbCBjYW5TZXRTZWxlY3RlZENo
aWxkcmVuQXR0cmlidXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZh
bHVlKEFYUHJvcGVydHlOYW1lOjpDYW5TZXRTZWxlY3RlZENoaWxkcmVuQXR0cmlidXRlKTsgfQor
ICAgIGJvb2wgY2FuU2V0RXhwYW5kZWRBdHRyaWJ1dGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNhblNldEV4cGFuZGVkQXR0cmli
dXRlKTsgfQorICAgIGJvb2wgYWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNBY2Nlc3NpYmls
aXR5SWdub3JlZCk7IH0KKyAgICBib29sIGlzU2hvd2luZ1ZhbGlkYXRpb25NZXNzYWdlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJ
c1Nob3dpbmdWYWxpZGF0aW9uTWVzc2FnZSk7IH0KKyAgICBTdHJpbmcgdmFsaWRhdGlvbk1lc3Nh
Z2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6VmFsaWRhdGlvbk1lc3NhZ2UpOyB9CisgICAgdW5zaWduZWQgYmxvY2txdW90ZUxl
dmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdW5zaWduZWRBdHRyaWJ1dGVWYWx1ZShBWFBy
b3BlcnR5TmFtZTo6QmxvY2txdW90ZUxldmVsKTsgfQorICAgIGludCBoZWFkaW5nTGV2ZWwoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBpbnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6
SGVhZGluZ0xldmVsKTsgfQorICAgIGludCB0YWJsZUxldmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gaW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlRhYmxlTGV2ZWwpOyB9Cisg
ICAgQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlIGNoZWNrYm94T3JSYWRpb1ZhbHVlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlPihp
bnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6QWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRl
KSk7IH0KKyAgICBTdHJpbmcgdmFsdWVEZXNjcmlwdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpWYWx1ZURlc2NyaXB0aW9u
KTsgfQorICAgIGZsb2F0IHZhbHVlRm9yUmFuZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
bG9hdEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpWYWx1ZUZvclJhbmdlKTsgfQorICAg
IGZsb2F0IG1heFZhbHVlRm9yUmFuZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmbG9hdEF0
dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpNYXhWYWx1ZUZvclJhbmdlKTsgfQorICAgIGZs
b2F0IG1pblZhbHVlRm9yUmFuZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmbG9hdEF0dHJp
YnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpNaW5WYWx1ZUZvclJhbmdlKTsgfQorICAgIEFYQ29y
ZU9iamVjdCogc2VsZWN0ZWRSYWRpb0J1dHRvbigpIG92ZXJyaWRlIHsgcmV0dXJuIG9iamVjdEF0
dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTZWxlY3RlZFJhZGlvQnV0dG9uKTsgfQorICAg
IEFYQ29yZU9iamVjdCogc2VsZWN0ZWRUYWJJdGVtKCkgb3ZlcnJpZGUgeyByZXR1cm4gb2JqZWN0
QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlNlbGVjdGVkVGFiSXRlbSk7IH0KKyAgICBp
bnQgbGF5b3V0Q291bnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBpbnRBdHRyaWJ1dGVWYWx1
ZShBWFByb3BlcnR5TmFtZTo6TGF5b3V0Q291bnQpOyB9CisgICAgZG91YmxlIGVzdGltYXRlZExv
YWRpbmdQcm9ncmVzcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGRvdWJsZUF0dHJpYnV0ZVZh
bHVlKEFYUHJvcGVydHlOYW1lOjpFc3RpbWF0ZWRMb2FkaW5nUHJvZ3Jlc3MpOyB9CisgICAgYm9v
bCBzdXBwb3J0c0FSSUFPd25zKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c0FSSUFPd25zKTsgfQorICAgIGJvb2wgaXNB
Y3RpdmVEZXNjZW5kYW50T2ZGb2N1c2VkQ29udGFpbmVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0FjdGl2ZURlc2NlbmRhbnRP
ZkZvY3VzZWRDb250YWluZXIpOyB9CisgICAgdm9pZCBhcmlhQ29udHJvbHNFbGVtZW50cyhBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuKSBjb25zdCBvdmVycmlkZSB7IGZpbGxD
aGlsZHJlblZlY3RvckZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpBUklBQ29udHJvbHNFbGVt
ZW50cywgY2hpbGRyZW4pOyB9CisgICAgdm9pZCBhcmlhRGV0YWlsc0VsZW1lbnRzKEFjY2Vzc2li
aWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4pIGNvbnN0IG92ZXJyaWRlIHsgZmlsbENoaWxk
cmVuVmVjdG9yRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkFSSUFEZXRhaWxzRWxlbWVudHMs
IGNoaWxkcmVuKTsgfQorICAgIHZvaWQgYXJpYUVycm9yTWVzc2FnZUVsZW1lbnRzKEFjY2Vzc2li
aWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4pIGNvbnN0IG92ZXJyaWRlIHsgZmlsbENoaWxk
cmVuVmVjdG9yRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkFSSUFFcnJvck1lc3NhZ2VFbGVt
ZW50cywgY2hpbGRyZW4pOyB9CisgICAgdm9pZCBhcmlhRmxvd1RvRWxlbWVudHMoQWNjZXNzaWJp
bGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbikgY29uc3Qgb3ZlcnJpZGUgeyBmaWxsQ2hpbGRy
ZW5WZWN0b3JGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6QVJJQUZsb3dUb0VsZW1lbnRzLCBj
aGlsZHJlbik7IH0KKyAgICB2b2lkIGFyaWFPd25zRWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yJiBjaGlsZHJlbikgY29uc3Qgb3ZlcnJpZGUgeyBmaWxsQ2hpbGRyZW5WZWN0b3JG
b3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6QVJJQU93bnNFbGVtZW50cywgY2hpbGRyZW4pOyB9
CisgICAgYm9vbCBoYXNQb3B1cCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1
dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SGFzUG9wdXApOyB9CisgICAgU3RyaW5nIHBvcHVwVmFs
dWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6UG9wdXBWYWx1ZSk7IH0KKyAgICBib29sIHByZXNzZWRJc1ByZXNlbnQoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlBy
ZXNzZWRJc1ByZXNlbnQpOyB9CisgICAgYm9vbCBhcmlhSXNNdWx0aWxpbmUoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkFSSUFJc011
bHRpbGluZSk7IH0KKyAgICBTdHJpbmcgaW52YWxpZFN0YXR1cygpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJbnZhbGlkU3RhdHVz
KTsgfQorICAgIGJvb2wgc3VwcG9ydHNFeHBhbmRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNFeHBhbmRlZCk7IH0K
KyAgICBBY2Nlc3NpYmlsaXR5U29ydERpcmVjdGlvbiBzb3J0RGlyZWN0aW9uKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb24+KGlu
dEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTb3J0RGlyZWN0aW9uKSk7IH0KKyAgICBi
b29sIGNhbnZhc0hhc0ZhbGxiYWNrQ29udGVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJv
b2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q2FudmFzSGFzRmFsbGJhY2tDb250ZW50
KTsgfQorICAgIGJvb2wgc3VwcG9ydHNSYW5nZVZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c1JhbmdlVmFsdWUp
OyB9CisgICAgU3RyaW5nIGlkZW50aWZpZXJBdHRyaWJ1dGUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SWRlbnRpZmllckF0dHJp
YnV0ZSk7IH0KKyAgICBTdHJpbmcgbGlua1JlbFZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkxpbmtSZWxWYWx1ZSk7IH0K
KyAgICB2b2lkIGNsYXNzTGlzdChWZWN0b3I8U3RyaW5nPiYpIGNvbnN0IG92ZXJyaWRlOworICAg
IEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGUgY3VycmVudFN0YXRlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eUN1cnJlbnRTdGF0ZT4oaW50QXR0cmli
dXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkN1cnJlbnRTdGF0ZSkpOyB9CisgICAgU3RyaW5nIGN1
cnJlbnRWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVl
KEFYUHJvcGVydHlOYW1lOjpDdXJyZW50VmFsdWUpOyB9CisgICAgYm9vbCBzdXBwb3J0c0N1cnJl
bnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0
eU5hbWU6OlN1cHBvcnRzQ3VycmVudCk7IH0KKyAgICBjb25zdCBTdHJpbmcga2V5U2hvcnRjdXRz
VmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFBy
b3BlcnR5TmFtZTo6S2V5U2hvcnRjdXRzVmFsdWUpOyB9CisgICAgYm9vbCBzdXBwb3J0c1NldFNp
emUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0
eU5hbWU6OlN1cHBvcnRzU2V0U2l6ZSk7IH0KKyAgICBib29sIHN1cHBvcnRzUG9zSW5TZXQoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6
OlN1cHBvcnRzUG9zSW5TZXQpOyB9CisgICAgaW50IHNldFNpemUoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBpbnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U2V0U2l6ZSk7IH0KKyAg
ICBpbnQgcG9zSW5TZXQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBpbnRBdHRyaWJ1dGVWYWx1
ZShBWFByb3BlcnR5TmFtZTo6UG9zSW5TZXQpOyB9CisgICAgYm9vbCBzdXBwb3J0c0FSSUFEcm9w
cGluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6U3VwcG9ydHNBUklBRHJvcHBpbmcpOyB9CisgICAgYm9vbCBzdXBwb3J0c0FSSUFE
cmFnZ2luZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFBy
b3BlcnR5TmFtZTo6U3VwcG9ydHNBUklBRHJhZ2dpbmcpOyB9CisgICAgYm9vbCBpc0FSSUFHcmFi
YmVkKCkgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1l
OjpJc0FSSUFHcmFiYmVkKTsgfQorICAgIFZlY3RvcjxTdHJpbmc+IGRldGVybWluZUFSSUFEcm9w
RWZmZWN0cygpIG92ZXJyaWRlIHsgcmV0dXJuIHZlY3RvckF0dHJpYnV0ZVZhbHVlPFN0cmluZz4o
QVhQcm9wZXJ0eU5hbWU6OkFSSUFEcm9wRWZmZWN0cyk7IH0KKyAgICBBWENvcmVPYmplY3QqIGFj
Y2Vzc2liaWxpdHlIaXRUZXN0KGNvbnN0IEludFBvaW50JikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
QVhDb3JlT2JqZWN0KiBmb2N1c2VkVUlFbGVtZW50KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgQVhD
b3JlT2JqZWN0KiBwYXJlbnRPYmplY3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBwYXJlbnRP
YmplY3RVbmlnbm9yZWQoKTsgfQorICAgIEFYQ29yZU9iamVjdCogcGFyZW50T2JqZWN0VW5pZ25v
cmVkKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBsaW5rZWRVSUVsZW1lbnRzKEFjY2Vzc2li
aWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4pIGNvbnN0IG92ZXJyaWRlIHsgZmlsbENoaWxk
cmVuVmVjdG9yRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkxpbmtlZFVJRWxlbWVudHMsIGNo
aWxkcmVuKTsgfQorICAgIEFYQ29yZU9iamVjdCogdGl0bGVVSUVsZW1lbnQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBvYmplY3RBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6VGl0bGVV
SUVsZW1lbnQpOyB9CisgICAgYm9vbCBleHBvc2VzVGl0bGVVSUVsZW1lbnQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkV4cG9zZXNU
aXRsZVVJRWxlbWVudCk7IH0KKyAgICBBWENvcmVPYmplY3QqIHNjcm9sbEJhcihBY2Nlc3NpYmls
aXR5T3JpZW50YXRpb24pIG92ZXJyaWRlOworICAgIEFjY2Vzc2liaWxpdHlSb2xlIGFyaWFSb2xl
QXR0cmlidXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNzaWJp
bGl0eVJvbGU+KGludEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpBUklBUm9sZUF0dHJp
YnV0ZSkpOyB9CisgICAgU3RyaW5nIGNvbXB1dGVkTGFiZWwoKSBvdmVycmlkZSB7IHJldHVybiBz
dHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q29tcHV0ZWRMYWJlbCk7IH0KKyAg
ICBpbnQgdGV4dExlbmd0aCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGludEF0dHJpYnV0ZVZh
bHVlKEFYUHJvcGVydHlOYW1lOjpUZXh0TGVuZ3RoKTsgfQorICAgIGNvbnN0IFN0cmluZyBwbGFj
ZWhvbGRlclZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFs
dWUoQVhQcm9wZXJ0eU5hbWU6OlBsYWNlaG9sZGVyVmFsdWUpOyB9CisgICAgU3RyaW5nIGV4cGFu
ZGVkVGV4dFZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFs
dWUoQVhQcm9wZXJ0eU5hbWU6OkV4cGFuZGVkVGV4dFZhbHVlKTsgfQorICAgIGJvb2wgc3VwcG9y
dHNFeHBhbmRlZFRleHRWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1
dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNFeHBhbmRlZFRleHRWYWx1ZSk7IH0KKyAg
ICB2b2lkIGNvbG9yVmFsdWUoaW50JiwgaW50JiwgaW50JikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
QWNjZXNzaWJpbGl0eVJvbGUgcm9sZVZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVJvbGU+KGludEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlO
YW1lOjpSb2xlVmFsdWUpKTsgfQorICAgIFN0cmluZyByb2xlUGxhdGZvcm1TdHJpbmcoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6
Um9sZVBsYXRmb3JtU3RyaW5nKTsgfQorICAgIFN0cmluZyByb2xlRGVzY3JpcHRpb24oKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6
Um9sZURlc2NyaXB0aW9uKTsgfQorICAgIFN0cmluZyBhcmlhTGFuZG1hcmtSb2xlRGVzY3JpcHRp
b24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6QVJJQUxhbmRtYXJrUm9sZURlc2NyaXB0aW9uKTsgfQorICAgIGJvb2wgc3VwcG9y
dHNQcmVzc0FjdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1
ZShBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNQcmVzc0FjdGlvbik7IH0KKyAgICBMYXlvdXRSZWN0
IGJvdW5kaW5nQm94UmVjdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHJlY3RBdHRyaWJ1dGVW
YWx1ZTxMYXlvdXRSZWN0PihBWFByb3BlcnR5TmFtZTo6Qm91bmRpbmdCb3hSZWN0KTsgfQorICAg
IExheW91dFJlY3QgZWxlbWVudFJlY3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiByZWN0QXR0
cmlidXRlVmFsdWU8TGF5b3V0UmVjdD4oQVhQcm9wZXJ0eU5hbWU6OkVsZW1lbnRSZWN0KTsgfQor
ICAgIEludFBvaW50IGNsaWNrUG9pbnQoKSBvdmVycmlkZSB7IHJldHVybiBpbnRQb2ludEF0dHJp
YnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpDbGlja1BvaW50KTsgfQorICAgIHZvaWQgYWNjZXNz
aWJpbGl0eVRleHQoVmVjdG9yPEFjY2Vzc2liaWxpdHlUZXh0PiYgdGV4dHMpIGNvbnN0IG92ZXJy
aWRlOworICAgIFN0cmluZyBjb21wdXRlZFJvbGVTdHJpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q29tcHV0ZWRSb2xlU3Ry
aW5nKTsgfQorICAgIGJvb2wgaXNWYWx1ZUF1dG9maWxsZWQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzVmFsdWVBdXRvZmlsbGVk
KTsgfQorICAgIGJvb2wgaXNWYWx1ZUF1dG9maWxsQXZhaWxhYmxlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc1ZhbHVlQXV0b2Zp
bGxBdmFpbGFibGUpOyB9CisgICAgQXV0b0ZpbGxCdXR0b25UeXBlIHZhbHVlQXV0b2ZpbGxCdXR0
b25UeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QXV0b0ZpbGxCdXR0
b25UeXBlPihpbnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6VmFsdWVBdXRvZmlsbEJ1
dHRvblR5cGUpKTsgfQorICAgIHZvaWQgYXJpYVRyZWVSb3dzKEFjY2Vzc2liaWxpdHlDaGlsZHJl
blZlY3RvciYgY2hpbGRyZW4pIG92ZXJyaWRlIHsgZmlsbENoaWxkcmVuVmVjdG9yRm9yUHJvcGVy
dHkoQVhQcm9wZXJ0eU5hbWU6OkFSSUFUcmVlUm93cywgY2hpbGRyZW4pOyB9CisgICAgdm9pZCBh
cmlhVHJlZUl0ZW1EaXNjbG9zZWRSb3dzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hp
bGRyZW4pIG92ZXJyaWRlIHsgZmlsbENoaWxkcmVuVmVjdG9yRm9yUHJvcGVydHkoQVhQcm9wZXJ0
eU5hbWU6OkFSSUFUcmVlSXRlbURpc2Nsb3NlZFJvd3MsIGNoaWxkcmVuKTsgfQorICAgIHZvaWQg
YXJpYVRyZWVJdGVtQ29udGVudChBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVu
KSBvdmVycmlkZSB7IGZpbGxDaGlsZHJlblZlY3RvckZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1l
OjpBUklBVHJlZUl0ZW1Db250ZW50LCBjaGlsZHJlbik7IH0KKyAgICBVUkwgdXJsKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gdXJsQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlVSTCk7
IH0KKyAgICBTdHJpbmcgYWNjZXNzS2V5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5n
QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkFjY2Vzc0tleSk7IH0KKyAgICBTdHJpbmcg
YWN0aW9uVmVyYigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVl
KEFYUHJvcGVydHlOYW1lOjpBY3Rpb25WZXJiKTsgfQorICAgIFN0cmluZyByZWFkT25seVZhbHVl
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0
eU5hbWU6OlJlYWRPbmx5VmFsdWUpOyB9CisgICAgU3RyaW5nIGF1dG9Db21wbGV0ZVZhbHVlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5h
bWU6OkF1dG9Db21wbGV0ZVZhbHVlKTsgfQorICAgIE9wdGlvblNldDxTcGVha0FzPiBzcGVha0Fz
UHJvcGVydHkoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBvcHRpb25TZXRBdHRyaWJ1dGVWYWx1
ZTxTcGVha0FzPihBWFByb3BlcnR5TmFtZTo6U3BlYWtBcyk7IH0KKyAgICBib29sIGlzTWF0aEVs
ZW1lbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9w
ZXJ0eU5hbWU6OklzTWF0aEVsZW1lbnQpOyB9CisgICAgYm9vbCBpc01hdGhGcmFjdGlvbigpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6
SXNNYXRoRnJhY3Rpb24pOyB9CisgICAgYm9vbCBpc01hdGhGZW5jZWQoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aEZlbmNl
ZCk7IH0KKyAgICBib29sIGlzTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc01hdGhTdWJz
Y3JpcHRTdXBlcnNjcmlwdCk7IH0KKyAgICBib29sIGlzTWF0aFJvdygpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNNYXRoUm93KTsg
fQorICAgIGJvb2wgaXNNYXRoVW5kZXJPdmVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9v
bEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc01hdGhVbmRlck92ZXIpOyB9CisgICAg
Ym9vbCBpc01hdGhSb290KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZh
bHVlKEFYUHJvcGVydHlOYW1lOjpJc01hdGhSb290KTsgfQorICAgIGJvb2wgaXNNYXRoU3F1YXJl
Um9vdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6SXNNYXRoU3F1YXJlUm9vdCk7IH0KKyAgICBib29sIGlzTWF0aFRleHQoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Oklz
TWF0aFRleHQpOyB9CisgICAgYm9vbCBpc01hdGhOdW1iZXIoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aE51bWJlcik7IH0K
KyAgICBib29sIGlzTWF0aE9wZXJhdG9yKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0
dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc01hdGhPcGVyYXRvcik7IH0KKyAgICBib29s
IGlzTWF0aEZlbmNlT3BlcmF0b3IoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmli
dXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aEZlbmNlT3BlcmF0b3IpOyB9CisgICAgYm9v
bCBpc01hdGhTZXBhcmF0b3JPcGVyYXRvcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xB
dHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNNYXRoU2VwYXJhdG9yT3BlcmF0b3IpOyB9
CisgICAgYm9vbCBpc01hdGhJZGVudGlmaWVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9v
bEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc01hdGhJZGVudGlmaWVyKTsgfQorICAg
IGJvb2wgaXNNYXRoVGFibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRl
VmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aFRhYmxlKTsgfQorICAgIGJvb2wgaXNNYXRoVGFi
bGVSb3coKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9w
ZXJ0eU5hbWU6OklzTWF0aFRhYmxlUm93KTsgfQorICAgIGJvb2wgaXNNYXRoVGFibGVDZWxsKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1l
OjpJc01hdGhUYWJsZUNlbGwpOyB9CisgICAgYm9vbCBpc01hdGhNdWx0aXNjcmlwdCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNN
YXRoTXVsdGlzY3JpcHQpOyB9CisgICAgYm9vbCBpc01hdGhUb2tlbigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNNYXRoVG9rZW4p
OyB9CisgICAgQVhDb3JlT2JqZWN0KiBtYXRoUmFkaWNhbmRPYmplY3QoKSBvdmVycmlkZSB7IHJl
dHVybiBvYmplY3RBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6TWF0aFJhZGljYW5kT2Jq
ZWN0KTsgfQorICAgIEFYQ29yZU9iamVjdCogbWF0aFJvb3RJbmRleE9iamVjdCgpIG92ZXJyaWRl
IHsgcmV0dXJuIG9iamVjdEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpNYXRoUm9vdElu
ZGV4T2JqZWN0KTsgfQorICAgIEFYQ29yZU9iamVjdCogbWF0aFVuZGVyT2JqZWN0KCkgb3ZlcnJp
ZGUgeyByZXR1cm4gb2JqZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Ok1hdGhVbmRl
ck9iamVjdCk7IH0KKyAgICBBWENvcmVPYmplY3QqIG1hdGhPdmVyT2JqZWN0KCkgb3ZlcnJpZGUg
eyByZXR1cm4gb2JqZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Ok1hdGhPdmVyT2Jq
ZWN0KTsgfQorICAgIEFYQ29yZU9iamVjdCogbWF0aE51bWVyYXRvck9iamVjdCgpIG92ZXJyaWRl
IHsgcmV0dXJuIG9iamVjdEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpNYXRoTnVtZXJh
dG9yT2JqZWN0KTsgfQorICAgIEFYQ29yZU9iamVjdCogbWF0aERlbm9taW5hdG9yT2JqZWN0KCkg
b3ZlcnJpZGUgeyByZXR1cm4gb2JqZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Ok1h
dGhEZW5vbWluYXRvck9iamVjdCk7IH0KKyAgICBBWENvcmVPYmplY3QqIG1hdGhCYXNlT2JqZWN0
KCkgb3ZlcnJpZGUgeyByZXR1cm4gb2JqZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6
Ok1hdGhCYXNlT2JqZWN0KTsgfQorICAgIEFYQ29yZU9iamVjdCogbWF0aFN1YnNjcmlwdE9iamVj
dCgpIG92ZXJyaWRlIHsgcmV0dXJuIG9iamVjdEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1l
OjpNYXRoU3Vic2NyaXB0T2JqZWN0KTsgfQorICAgIEFYQ29yZU9iamVjdCogbWF0aFN1cGVyc2Ny
aXB0T2JqZWN0KCkgb3ZlcnJpZGUgeyByZXR1cm4gb2JqZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9w
ZXJ0eU5hbWU6Ok1hdGhTdXBlcnNjcmlwdE9iamVjdCk7IH0KKyAgICBTdHJpbmcgbWF0aEZlbmNl
ZE9wZW5TdHJpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1
ZShBWFByb3BlcnR5TmFtZTo6TWF0aEZlbmNlZE9wZW5TdHJpbmcpOyB9CisgICAgU3RyaW5nIG1h
dGhGZW5jZWRDbG9zZVN0cmluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJp
YnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpNYXRoRmVuY2VkQ2xvc2VTdHJpbmcpOyB9CisgICAg
aW50IG1hdGhMaW5lVGhpY2tuZXNzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gaW50QXR0cmli
dXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Ok1hdGhMaW5lVGhpY2tuZXNzKTsgfQorICAgIGJvb2wg
aXNBbm9ueW1vdXNNYXRoT3BlcmF0b3IoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0
cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzQW5vbnltb3VzTWF0aE9wZXJhdG9yKTsgfQor
ICAgIHZvaWQgbWF0aFByZXNjcmlwdHMoQWNjZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlwdFBhaXJz
Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBtYXRoUG9zdHNjcmlwdHMoQWNjZXNzaWJpbGl0eU1hdGhN
dWx0aXNjcmlwdFBhaXJzJikgb3ZlcnJpZGU7CisgICAgYm9vbCBmaWxlVXBsb2FkQnV0dG9uUmV0
dXJuc1ZhbHVlSW5UaXRsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVW
YWx1ZShBWFByb3BlcnR5TmFtZTo6RmlsZVVwbG9hZEJ1dHRvblJldHVybnNWYWx1ZUluVGl0bGUp
OyB9CisgICAgU3RyaW5nIHNwZWVjaEhpbnRBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTcGVlY2hIaW50
KTsgfQorICAgIFN0cmluZyBkZXNjcmlwdGlvbkF0dHJpYnV0ZVZhbHVlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkRlc2NyaXB0
aW9uKTsgfQorICAgIFN0cmluZyBoZWxwVGV4dEF0dHJpYnV0ZVZhbHVlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkhlbHBUZXh0
KTsgfQorICAgIFN0cmluZyB0aXRsZUF0dHJpYnV0ZVZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlRpdGxlKTsgfQorI2lm
IFBMQVRGT1JNKENPQ09BKSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBib29sIGNhcmV0
QnJvd3NpbmdFbmFibGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZh
bHVlKEFYUHJvcGVydHlOYW1lOjpDYXJldEJyb3dzaW5nRW5hYmxlZCk7IH0KKyNlbmRpZgorICAg
IEFYQ29yZU9iamVjdCogZm9jdXNhYmxlQW5jZXN0b3IoKSBvdmVycmlkZSB7IHJldHVybiBvYmpl
Y3RBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Rm9jdXNhYmxlQW5jZXN0b3IpOyB9Cisg
ICAgQVhDb3JlT2JqZWN0KiBlZGl0YWJsZUFuY2VzdG9yKCkgb3ZlcnJpZGUgeyByZXR1cm4gb2Jq
ZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkVkaXRhYmxlQW5jZXN0b3IpOyB9Cisg
ICAgQVhDb3JlT2JqZWN0KiBoaWdoZXN0RWRpdGFibGVBbmNlc3RvcigpIG92ZXJyaWRlIHsgcmV0
dXJuIG9iamVjdEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpIaWdoZXN0RWRpdGFibGVB
bmNlc3Rvcik7IH0KKyAgICBBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb24gb3JpZW50YXRpb24oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5T3JpZW50YXRp
b24+KGludEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpPcmllbnRhdGlvbikpOyB9Cisg
ICAgdW5zaWduZWQgaGllcmFyY2hpY2FsTGV2ZWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB1
bnNpZ25lZEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpIaWVyYXJjaGljYWxMZXZlbCk7
IH0KKyAgICBTdHJpbmcgbGFuZ3VhZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdB
dHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6TGFuZ3VhZ2UpOyB9CisgICAgYm9vbCBjYW5I
YXZlU2VsZWN0ZWRDaGlsZHJlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1
dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q2FuSGF2ZVNlbGVjdGVkQ2hpbGRyZW4pOyB9CisgICAg
dm9pZCBzZWxlY3RlZENoaWxkcmVuKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRy
ZW4pIG92ZXJyaWRlIHsgZmlsbENoaWxkcmVuVmVjdG9yRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5h
bWU6OlNlbGVjdGVkQ2hpbGRyZW4sIGNoaWxkcmVuKTsgfQorICAgIHZvaWQgdmlzaWJsZUNoaWxk
cmVuKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4pIG92ZXJyaWRlIHsgZmls
bENoaWxkcmVuVmVjdG9yRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlZpc2libGVDaGlsZHJl
biwgY2hpbGRyZW4pOyB9CisgICAgdm9pZCB0YWJDaGlsZHJlbihBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW5WZWN0b3ImIGNoaWxkcmVuKSBvdmVycmlkZSB7IGZpbGxDaGlsZHJlblZlY3RvckZvclByb3Bl
cnR5KEFYUHJvcGVydHlOYW1lOjpUYWJDaGlsZHJlbiwgY2hpbGRyZW4pOyB9CisgICAgYm9vbCBo
YXNBUklBVmFsdWVOb3coKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFs
dWUoQVhQcm9wZXJ0eU5hbWU6Okhhc0FSSUFWYWx1ZU5vdyk7IH0KKyAgICBTdHJpbmcgdGFnTmFt
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVy
dHlOYW1lOjpUYWdOYW1lKTsgfQorICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rv
ciYgY2hpbGRyZW4oYm9vbCB1cGRhdGVDaGlsZHJlbklmTmVlZGVkID0gdHJ1ZSkgb3ZlcnJpZGU7
CisgICAgdm9pZCB1cGRhdGVDaGlsZHJlbklmTmVjZXNzYXJ5KCkgb3ZlcnJpZGUgeyB9CisgICAg
Ym9vbCBpc0RldGFjaGVkRnJvbVBhcmVudCgpIG92ZXJyaWRlOworICAgIGJvb2wgc3VwcG9ydHNM
aXZlUmVnaW9uKGJvb2wgPSB0cnVlKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmli
dXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzTGl2ZVJlZ2lvbik7IH0KKyAgICBib29s
IGlzSW5zaWRlTGl2ZVJlZ2lvbihib29sID0gdHJ1ZSkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
Ym9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0luc2lkZUxpdmVSZWdpb24pOyB9
CisgICAgY29uc3QgU3RyaW5nIGxpdmVSZWdpb25TdGF0dXMoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6TGl2ZVJlZ2lvblN0YXR1
cyk7IH0KKyAgICBjb25zdCBTdHJpbmcgbGl2ZVJlZ2lvblJlbGV2YW50KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkxpdmVSZWdp
b25SZWxldmFudCk7IH0KKyAgICBib29sIGxpdmVSZWdpb25BdG9taWMoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkxpdmVSZWdpb25B
dG9taWMpOyB9CisgICAgYm9vbCBpc0J1c3koKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29s
QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzQnVzeSk7IH0KKyAgICBib29sIGlzSW5s
aW5lVGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFBy
b3BlcnR5TmFtZTo6SXNJbmxpbmVUZXh0KTsgfQorICAgIC8vIFNwaW4gYnV0dG9uIHN1cHBvcnQu
CisgICAgQVhDb3JlT2JqZWN0KiBpbmNyZW1lbnRCdXR0b24oKSBvdmVycmlkZSB7IHJldHVybiBv
YmplY3RBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SW5jcmVtZW50QnV0dG9uKTsgfQor
ICAgIEFYQ29yZU9iamVjdCogZGVjcmVtZW50QnV0dG9uKCkgb3ZlcnJpZGUgeyByZXR1cm4gb2Jq
ZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkRlY3JlbWVudEJ1dHRvbik7IH0KKyAg
ICBib29sIGlzSW5jcmVtZW50b3IoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmli
dXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzSW5jcmVtZW50b3IpOyB9CisKKyAgICBTdHJpbmcg
c3RyaW5nVmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1
ZShBWFByb3BlcnR5TmFtZTo6U3RyaW5nVmFsdWUpOyB9CisKKyAgICAvLyBQYXJhbWV0ZXJpemVk
IGF0dHJpYnV0ZSByZXRyaWV2YWwuCisgICAgVmVjdG9yPFJlZlB0cjxSYW5nZT4+IGZpbmRUZXh0
UmFuZ2VzKEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0Q3JpdGVyaWEgY29uc3QmKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBWZWN0b3I8U3RyaW5nPiBwZXJmb3JtVGV4dE9wZXJhdGlvbihBY2Nlc3NpYmls
aXR5VGV4dE9wZXJhdGlvbiBjb25zdCYpIG92ZXJyaWRlOworICAgIHZvaWQgZmluZE1hdGNoaW5n
T2JqZWN0cyhBY2Nlc3NpYmlsaXR5U2VhcmNoQ3JpdGVyaWEqLCBBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW5WZWN0b3ImKSBvdmVycmlkZTsKKworICAgIC8vIEF0dHJpYnV0ZXMgcmV0cmlldmVkIGZyb20g
dGhlIHJvb3Qgbm9kZSBvbmx5IHNvIHRoYXQgdGhlIGRhdGEgaXNuJ3QgZHVwbGljYXRlZCBvbiBl
YWNoIG5vZGUuCisgICAgdWludDY0X3Qgc2Vzc2lvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
U3RyaW5nIGRvY3VtZW50VVJJKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgU3RyaW5nIGRvY3VtZW50
RW5jb2RpbmcoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIHByZXZlbnRLZXlib2FyZERPTUV2
ZW50RGlzcGF0Y2goKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIFRPRE86IFRleHQgcmFuZ2Vz
IGFuZCBzZWxlY3Rpb24uCisgICAgUGxhaW5UZXh0UmFuZ2Ugc2VsZWN0ZWRUZXh0UmFuZ2UoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBQbGFpblRleHRSYW5nZSgpOyB9CisgICAgdW5zaWduZWQg
c2VsZWN0aW9uU3RhcnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9CisgICAgdW5zaWdu
ZWQgc2VsZWN0aW9uRW5kKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQorICAgIFZpc2li
bGVTZWxlY3Rpb24gc2VsZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVNl
bGVjdGlvbigpOyB9CisgICAgU3RyaW5nIHNlbGVjdGVkVGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIFN0cmluZygpOyB9CisgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0
aW9uUmFuZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgp
OyB9CisgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JMaW5l
KHVuc2lnbmVkKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgp
OyB9CisgICAgUmVmUHRyPFJhbmdlPiBlbGVtZW50UmFuZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBudWxscHRyOyB9CisgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9u
UmFuZ2VGb3JVbm9yZGVyZWRQb3NpdGlvbnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9u
UmFuZ2UoKTsgfQorICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHBvc2l0aW9uT2ZMZWZ0V29yZChj
b25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9z
aXRpb25SYW5nZSgpOyB9CisgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcG9zaXRpb25PZlJpZ2h0
V29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNp
YmxlUG9zaXRpb25SYW5nZSgpOyB9CisgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgbGVmdExpbmVW
aXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOyB9CisgICAgVmlzaWJsZVBvc2l0aW9u
UmFuZ2UgcmlnaHRMaW5lVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9u
JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQorICAg
IFZpc2libGVQb3NpdGlvblJhbmdlIHNlbnRlbmNlRm9yUG9zaXRpb24oY29uc3QgVmlzaWJsZVBv
c2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsg
fQorICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHBhcmFncmFwaEZvclBvc2l0aW9uKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJh
bmdlKCk7IH0KKyAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSBzdHlsZVJhbmdlRm9yUG9zaXRpb24o
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uUmFuZ2UoKTsgfQorICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NpdGlv
blJhbmdlRm9yUmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOyB9CisgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2Ug
bGluZVJhbmdlRm9yUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQorICAgIFJlZlB0cjxSYW5nZT4g
cmFuZ2VGb3JQbGFpblRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBTdHJpbmcgc3RyaW5nRm9yUmFuZ2UoUmVmUHRy
PFJhbmdlPikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICBJbnRSZWN0
IGJvdW5kc0ZvclZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdl
JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gSW50UmVjdCgpOyB9CisgICAgSW50UmVjdCBib3Vu
ZHNGb3JSYW5nZShjb25zdCBSZWZQdHI8UmFuZ2U+KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBJ
bnRSZWN0KCk7IH0KKyAgICBpbnQgbGVuZ3RoRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uUmFuZ2UmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9CisgICAg
dm9pZCBzZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlv
blJhbmdlJikgY29uc3Qgb3ZlcnJpZGUgeyB9CisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQ
b3NpdGlvbkZvckJvdW5kcyhjb25zdCBJbnRSZWN0JiwgQWNjZXNzaWJpbGl0eVZpc2libGVQb3Np
dGlvbkZvckJvdW5kcykgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7
IH0KKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoY29uc3QgSW50
UG9pbnQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsgfQorICAg
IFZpc2libGVQb3NpdGlvbiBuZXh0VmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlv
biYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOyB9CisgICAgVmlz
aWJsZVBvc2l0aW9uIHByZXZpb3VzVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlv
biYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOyB9CisgICAgVmlz
aWJsZVBvc2l0aW9uIG5leHRXb3JkRW5kKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOyB9CisgICAgVmlzaWJsZVBvc2l0aW9u
IHByZXZpb3VzV29yZFN0YXJ0KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOyB9CisgICAgVmlzaWJsZVBvc2l0aW9uIG5leHRM
aW5lRW5kUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7IH0KKyAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNM
aW5lU3RhcnRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsgfQorICAgIFZpc2libGVQb3NpdGlvbiBuZXh0U2Vu
dGVuY2VFbmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsgfQorICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91
c1NlbnRlbmNlU3RhcnRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsgfQorICAgIFZpc2libGVQb3NpdGlvbiBu
ZXh0UGFyYWdyYXBoRW5kUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7IH0KKyAgICBWaXNpYmxlUG9zaXRpb24g
cHJldmlvdXNQYXJhZ3JhcGhTdGFydFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOyB9CisgICAgVmlzaWJsZVBv
c2l0aW9uIHZpc2libGVQb3NpdGlvbkZvckluZGV4KHVuc2lnbmVkLCBib29sIC8qbGFzdEluZGV4
T0sgKi8pIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOyB9CisgICAg
VmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvckluZGV4KGludCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7IH0KKyAgICBpbnQgaW5kZXhGb3JWaXNpYmxl
UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
MDsgfQorICAgIEFYQ29yZU9iamVjdCogYWNjZXNzaWJpbGl0eU9iamVjdEZvclBvc2l0aW9uKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0K
KyAgICBpbnQgbGluZUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKyAgICBQbGFpblRleHRSYW5nZSBwbGFpblRleHRSYW5nZUZv
clZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJikgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gUGxhaW5UZXh0UmFuZ2UoKTsgfQorICAgIGludCBpbmRleChjb25z
dCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9CisgICAgdm9p
ZCBsaW5lQnJlYWtzKFZlY3RvcjxpbnQ+JikgY29uc3Qgb3ZlcnJpZGUgeyB9CisgICAgUGxhaW5U
ZXh0UmFuZ2UgZG9BWFJhbmdlRm9yTGluZSh1bnNpZ25lZCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gUGxhaW5UZXh0UmFuZ2UoKTsgfQorICAgIFBsYWluVGV4dFJhbmdlIGRvQVhSYW5nZUZvclBv
c2l0aW9uKGNvbnN0IEludFBvaW50JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gUGxhaW5UZXh0
UmFuZ2UoKTsgfQorICAgIFBsYWluVGV4dFJhbmdlIGRvQVhSYW5nZUZvckluZGV4KHVuc2lnbmVk
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBQbGFpblRleHRSYW5nZSgpOyB9CisgICAgUGxhaW5U
ZXh0UmFuZ2UgZG9BWFN0eWxlUmFuZ2VGb3JJbmRleCh1bnNpZ25lZCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gUGxhaW5UZXh0UmFuZ2UoKTsgfQorICAgIFN0cmluZyBkb0FYU3RyaW5nRm9yUmFu
Z2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmco
KTsgfQorICAgIEludFJlY3QgZG9BWEJvdW5kc0ZvclJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdl
JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gSW50UmVjdCgpOyB9CisgICAgSW50UmVjdCBkb0FY
Qm91bmRzRm9yUmFuZ2VVc2luZ0NoYXJhY3Rlck9mZnNldChjb25zdCBQbGFpblRleHRSYW5nZSYp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEludFJlY3QoKTsgfQorICAgIHVuc2lnbmVkIGRvQVhM
aW5lRm9ySW5kZXgodW5zaWduZWQpIG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKworICAgIC8vIEF0
dHJpYnV0ZSBzZXR0ZXJzLgorICAgIHZvaWQgc2V0QVJJQUdyYWJiZWQoYm9vbCkgb3ZlcnJpZGU7
CisgICAgdm9pZCBzZXRJc0V4cGFuZGVkKGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0VmFs
dWUoZmxvYXQpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0U2VsZWN0ZWQoYm9vbCkgb3ZlcnJpZGU7
CisgICAgdm9pZCBzZXRTZWxlY3RlZFJvd3MoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikg
b3ZlcnJpZGU7CisgICAgdm9pZCBzZXRGb2N1c2VkKGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQg
c2V0U2VsZWN0ZWRUZXh0KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0U2Vs
ZWN0ZWRUZXh0UmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmKSBvdmVycmlkZTsKKyAgICB2b2lk
IHNldFZhbHVlKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworI2lmIFBMQVRGT1JNKENPQ09BKSAm
JiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICB2b2lkIHNldENhcmV0QnJvd3NpbmdFbmFibGVk
KGJvb2wpIG92ZXJyaWRlOworI2VuZGlmCisgICAgdm9pZCBzZXRQcmV2ZW50S2V5Ym9hcmRET01F
dmVudERpc3BhdGNoKGJvb2wpIG92ZXJyaWRlOworCisgICAgLy8gVE9ETzogRnVuY3Rpb25zCisg
ICAgU3RyaW5nIHRleHRVbmRlckVsZW1lbnQoQWNjZXNzaWJpbGl0eVRleHRVbmRlckVsZW1lbnRN
b2RlID0gQWNjZXNzaWJpbGl0eVRleHRVbmRlckVsZW1lbnRNb2RlKCkpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgUmVmUHRyPFJhbmdlPiBnZXRNaXNzcGVsbGluZ1Jh
bmdlKFJlZlB0cjxSYW5nZT4gY29uc3QmLCBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgRmxvYXRSZWN0IGNvbnZlcnRG
cmFtZVRvU3BhY2UoY29uc3QgRmxvYXRSZWN0JiwgQWNjZXNzaWJpbGl0eUNvbnZlcnNpb25TcGFj
ZSkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KKyAgICB2b2lkIGluY3Jl
bWVudCgpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgZGVjcmVtZW50KCkgb3ZlcnJpZGUgeyB9Cisg
ICAgdm9pZCBzY3JvbGxUb01ha2VWaXNpYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyB9CisgICAgdm9p
ZCBzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzKGNvbnN0IEludFJlY3QmKSBjb25zdCBv
dmVycmlkZSB7IH0KKyAgICB2b2lkIHNjcm9sbFRvR2xvYmFsUG9pbnQoY29uc3QgSW50UG9pbnQm
KSBjb25zdCBvdmVycmlkZSB7IH0KKyAgICBib29sIHJlcGxhY2VUZXh0SW5SYW5nZShjb25zdCBT
dHJpbmcmLCBjb25zdCBQbGFpblRleHRSYW5nZSYpIG92ZXJyaWRlOworICAgIGJvb2wgaW5zZXJ0
VGV4dChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICB2b2lkIG1ha2VSYW5nZVZpc2libGUo
Y29uc3QgUGxhaW5UZXh0UmFuZ2UmKSBvdmVycmlkZSB7IH0KKyAgICBib29sIHByZXNzKCkgb3Zl
cnJpZGU7CisgICAgYm9vbCBwZXJmb3JtRGVmYXVsdEFjdGlvbigpIG92ZXJyaWRlOworCisgICAg
Ly8gRnVuY3Rpb25zIHRoYXQgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBvbiBhbiBpc29sYXRlZCB0
cmVlIG9iamVjdC4gQVNTRVJUIHRoYXQgdGhlc2UgYXJlIG5vdCByZWFjaGVkOworICAgIGJvb2wg
aXNBY2Nlc3NpYmlsaXR5T2JqZWN0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0FjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzQWNjZXNzaWJp
bGl0eVNjcm9sbGJhcigpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNBY2Nlc3NpYmlsaXR5
U2Nyb2xsVmlldygpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNBY2Nlc3NpYmlsaXR5U1ZH
Um9vdCgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVu
dCgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNBdHRhY2htZW50RWxlbWVudCgpIGNvbnN0
IG92ZXJyaWRlOworICAgIGJvb2wgaXNOYXRpdmVJbWFnZSgpIGNvbnN0IG92ZXJyaWRlOworICAg
IGJvb2wgaXNJbWFnZUJ1dHRvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNDb250YWlu
ZWRCeVBhc3N3b3JkRmllbGQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBBWENvcmVPYmplY3QqIHBh
c3N3b3JkRmllbGRPckNvbnRhaW5pbmdQYXNzd29yZEZpZWxkKCkgb3ZlcnJpZGU7CisgICAgYm9v
bCBpc05hdGl2ZVRleHRDb250cm9sKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc05hdGl2
ZUxpc3RCb3goKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzTGlzdEJveE9wdGlvbigpIGNv
bnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNTbGlkZXJUaHVtYigpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIGJvb2wgaXNJbnB1dFNsaWRlcigpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNMYWJl
bCgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNEYXRhVGFibGUoKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBib29sIGlzSW1hZ2VNYXBMaW5rKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBp
c05hdGl2ZVNwaW5CdXR0b24oKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzU3BpbkJ1dHRv
blBhcnQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzTW9ja09iamVjdCgpIGNvbnN0IG92
ZXJyaWRlOworICAgIGJvb2wgaXNNZWRpYU9iamVjdCgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJv
b2wgaXNBUklBVGV4dENvbnRyb2woKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzTm9uTmF0
aXZlVGV4dENvbnRyb2woKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzQmxvY2txdW90ZSgp
IGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNMYW5kbWFyaygpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIGJvb2wgaXNGaWd1cmVFbGVtZW50KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0tl
eWJvYXJkRm9jdXNhYmxlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0hvdmVyZWQoKSBj
b25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzSW5kZXRlcm1pbmF0ZSgpIGNvbnN0IG92ZXJyaWRl
OworICAgIGJvb2wgaXNMb2FkZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmli
dXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTG9hZGVkKTsgfQorICAgIGJvb2wgaXNPblNjcmVl
bigpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNPZmZTY3JlZW4oKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBib29sIGlzUHJlc3NlZCgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNVbnZp
c2l0ZWQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzTGlua2VkKCkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzQ29s
bGFwc2VkKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1NlbGVjdGVkT3B0aW9uQWN0aXZl
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBoYXNCb2xkRm9udCgpIGNvbnN0IG92ZXJyaWRl
OworICAgIGJvb2wgaGFzSXRhbGljRm9udCgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaGFz
TWlzc3BlbGxpbmcoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGhhc1BsYWluVGV4dCgpIGNv
bnN0IG92ZXJyaWRlOworICAgIGJvb2wgaGFzU2FtZUZvbnQoUmVuZGVyT2JqZWN0KikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgYm9vbCBoYXNTYW1lRm9udENvbG9yKFJlbmRlck9iamVjdCopIGNvbnN0
IG92ZXJyaWRlOworICAgIGJvb2wgaGFzU2FtZVN0eWxlKFJlbmRlck9iamVjdCopIGNvbnN0IG92
ZXJyaWRlOworICAgIGJvb2wgaXNTdGF0aWNUZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9v
bCBoYXNVbmRlcmxpbmUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGhhc0hpZ2hsaWdodGlu
ZygpIGNvbnN0IG92ZXJyaWRlOworICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBOb2RlKiBub2RlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlcigpIGNvbnN0IG92ZXJyaWRlOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNp
b24gZGVmYXVsdE9iamVjdEluY2x1c2lvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYWNj
ZXNzaWJpbGl0eUlzSWdub3JlZEJ5RGVmYXVsdCgpIGNvbnN0IG92ZXJyaWRlOworICAgIGZsb2F0
IHN0ZXBWYWx1ZUZvclJhbmdlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgQVhDb3JlT2JqZWN0KiBz
ZWxlY3RlZExpc3RJdGVtKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBhcmlhQWN0aXZlRGVzY2VuZGFu
dFJlZmVyZW5jaW5nRWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdm9pZCBhcmlhQ29udHJvbHNSZWZlcmVuY2luZ0VsZW1lbnRzKEFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYXJpYURl
c2NyaWJlZEJ5RWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdm9pZCBhcmlhRGVzY3JpYmVkQnlSZWZlcmVuY2luZ0VsZW1lbnRzKEFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYXJpYURl
dGFpbHNSZWZlcmVuY2luZ0VsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIGNv
bnN0IG92ZXJyaWRlOworICAgIHZvaWQgYXJpYUVycm9yTWVzc2FnZVJlZmVyZW5jaW5nRWxlbWVu
dHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9p
ZCBhcmlhRmxvd1RvUmVmZXJlbmNpbmdFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3ImKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFyaWFMYWJlbGxlZEJ5RWxlbWVudHMoQWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhcmlh
TGFiZWxsZWRCeVJlZmVyZW5jaW5nRWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9y
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhcmlhT3duc1JlZmVyZW5jaW5nRWxlbWVudHMo
QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBo
YXNEYXRhbGlzdCgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgc3VwcG9ydHNIYXNQb3B1cCgp
IGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgc3VwcG9ydHNQcmVzc2VkKCkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgYm9vbCBzdXBwb3J0c0NoZWNrZWQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29s
IGlnbm9yZWRGcm9tTW9kYWxQcmVzZW5jZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNN
b2RhbERlc2NlbmRhbnQoTm9kZSopIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNNb2RhbE5v
ZGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBBWENvcmVPYmplY3QqIGVsZW1lbnRBY2Nlc3NpYmls
aXR5SGl0VGVzdChjb25zdCBJbnRQb2ludCYpIGNvbnN0IG92ZXJyaWRlOworICAgIEFYQ29yZU9i
amVjdCogZmlyc3RDaGlsZCgpIGNvbnN0IG92ZXJyaWRlOworICAgIEFYQ29yZU9iamVjdCogbGFz
dENoaWxkKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgQVhDb3JlT2JqZWN0KiBwcmV2aW91c1NpYmxp
bmcoKSBjb25zdCBvdmVycmlkZTsKKyAgICBBWENvcmVPYmplY3QqIG5leHRTaWJsaW5nKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgQVhDb3JlT2JqZWN0KiBuZXh0U2libGluZ1VuaWdub3JlZChpbnQg
bGltaXQpIGNvbnN0IG92ZXJyaWRlOworICAgIEFYQ29yZU9iamVjdCogcHJldmlvdXNTaWJsaW5n
VW5pZ25vcmVkKGludCBsaW1pdCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgQVhDb3JlT2JqZWN0KiBw
YXJlbnRPYmplY3RJZkV4aXN0cygpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNEZXNjZW5k
YW50T2ZCYXJyZW5QYXJlbnQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzRGVzY2VuZGFu
dE9mUm9sZShBY2Nlc3NpYmlsaXR5Um9sZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgQVhDb3JlT2Jq
ZWN0KiBvYnNlcnZhYmxlT2JqZWN0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgQVhDb3JlT2JqZWN0
KiBjb3JyZXNwb25kaW5nTGFiZWxGb3JDb250cm9sRWxlbWVudCgpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIEFYQ29yZU9iamVjdCogY29ycmVzcG9uZGluZ0NvbnRyb2xGb3JMYWJlbEVsZW1lbnQoKSBj
b25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzUHJlc2VudGF0aW9uYWxDaGlsZE9mQXJpYVJvbGUo
KSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGFyaWFSb2xlSGFzUHJlc2VudGF0aW9uYWxDaGls
ZHJlbigpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaW5oZXJpdHNQcmVzZW50YXRpb25hbFJv
bGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHNldEFjY2Vzc2libGVOYW1lKGNvbnN0IEF0
b21TdHJpbmcmKSBvdmVycmlkZTsKKyAgICBib29sIGhhc0F0dHJpYnV0ZXNSZXF1aXJlZEZvcklu
Y2x1c2lvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIFN0cmluZyBhY2Nlc3NpYmlsaXR5RGVzY3Jp
cHRpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICBTdHJpbmcgdGl0bGUoKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBTdHJpbmcgaGVscFRleHQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzQVJJ
QVN0YXRpY1RleHQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBTdHJpbmcgdGV4dCgpIGNvbnN0IG92
ZXJyaWRlOworICAgIFN0cmluZyBhcmlhTGFiZWxlZEJ5QXR0cmlidXRlKCkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgU3RyaW5nIGFyaWFEZXNjcmliZWRCeUF0dHJpYnV0ZSgpIGNvbnN0IG92ZXJyaWRl
OworICAgIGJvb2wgYWNjZXNzaWJsZU5hbWVEZXJpdmVzRnJvbUNvbnRlbnQoKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2b2lkIGVsZW1lbnRzRnJvbUF0dHJpYnV0ZShWZWN0b3I8RWxlbWVudCo+Jiwg
Y29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0IG92ZXJyaWRlOworICAgIEFYT2JqZWN0Q2FjaGUq
IGF4T2JqZWN0Q2FjaGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBFbGVtZW50KiBhbmNob3JFbGVt
ZW50KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRWxlbWVudCogYWN0aW9uRWxlbWVudCgpIGNvbnN0
IG92ZXJyaWRlOworICAgIFBhdGggZWxlbWVudFBhdGgoKSBjb25zdCBvdmVycmlkZTsKKyAgICBi
b29sIHN1cHBvcnRzUGF0aCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVW
YWx1ZShBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNQYXRoKTsgfQorICAgIFRleHRJdGVyYXRvckJl
aGF2aW9yIHRleHRJdGVyYXRvckJlaGF2aW9yRm9yVGV4dFJhbmdlKCkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgV2lkZ2V0KiB3aWRnZXQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBXaWRnZXQqIHdpZGdl
dEZvckF0dGFjaG1lbnRWaWV3KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgUGFnZSogcGFnZSgpIGNv
bnN0IG92ZXJyaWRlOworICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIEZyYW1lVmlldyogZG9jdW1lbnRGcmFtZVZpZXcoKSBjb25zdCBvdmVycmlkZTsKKyAgICBG
cmFtZSogZnJhbWUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBGcmFtZSogbWFpbkZyYW1lKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgRG9jdW1lbnQqIHRvcERvY3VtZW50KCkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgU2Nyb2xsVmlldyogc2Nyb2xsVmlld0FuY2VzdG9yKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBjaGlsZHJlbkNoYW5nZWQoKSBvdmVycmlkZTsKKyAgICB2b2lkIHRleHRDaGFuZ2Vk
KCkgb3ZlcnJpZGU7CisgICAgdm9pZCB1cGRhdGVBY2Nlc3NpYmlsaXR5Um9sZSgpIG92ZXJyaWRl
OworICAgIHZvaWQgYWRkQ2hpbGRyZW4oKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkKEFY
Q29yZU9iamVjdCopIG92ZXJyaWRlOworICAgIHZvaWQgaW5zZXJ0Q2hpbGQoQVhDb3JlT2JqZWN0
KiwgdW5zaWduZWQpIG92ZXJyaWRlOworICAgIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlUm9s
ZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgYm9vbCBoYXNDaGlsZHJlbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQg
c2V0TmVlZHNUb1VwZGF0ZUNoaWxkcmVuKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXROZWVkc1Rv
VXBkYXRlU3VidHJlZSgpIG92ZXJyaWRlOworICAgIHZvaWQgY2xlYXJDaGlsZHJlbigpIG92ZXJy
aWRlOworICAgIGJvb2wgbmVlZHNUb1VwZGF0ZUNoaWxkcmVuKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBkZXRhY2hGcm9tUGFyZW50KCkgb3ZlcnJpZGU7CisgICAgYm9vbCBzaG91bGRGb2N1
c0FjdGl2ZURlc2NlbmRhbnQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBBWENvcmVPYmplY3QqIGFj
dGl2ZURlc2NlbmRhbnQoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGhhbmRsZUFjdGl2ZURl
c2NlbmRhbnRDaGFuZ2VkKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBoYW5kbGVBcmlhRXhwYW5kZWRD
aGFuZ2VkKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0Rlc2NlbmRhbnRPZk9iamVjdChjb25zdCBB
WENvcmVPYmplY3QqKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzQW5jZXN0b3JPZk9iamVj
dChjb25zdCBBWENvcmVPYmplY3QqKSBjb25zdCBvdmVycmlkZTsKKyAgICBBWENvcmVPYmplY3Qq
IGZpcnN0QW5vbnltb3VzQmxvY2tDaGlsZCgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaGFz
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdCBvdmVycmlkZTsKKyAgICBjb25z
dCBBdG9tU3RyaW5nJiBnZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0IG92
ZXJyaWRlOworICAgIGJvb2wgaGFzVGFnTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgU3RyaW5nIHN0cmluZ1ZhbHVlRm9yTVNBQSgpIGNvbnN0IG92ZXJyaWRl
OworICAgIFN0cmluZyBzdHJpbmdSb2xlRm9yTVNBQSgpIGNvbnN0IG92ZXJyaWRlOworICAgIFN0
cmluZyBuYW1lRm9yTVNBQSgpIGNvbnN0IG92ZXJyaWRlOworICAgIFN0cmluZyBkZXNjcmlwdGlv
bkZvck1TQUEoKSBjb25zdCBvdmVycmlkZTsKKyAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlVmFs
dWVGb3JNU0FBKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHBhc3N3b3JkRmllbGRWYWx1
ZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIEFYQ29yZU9iamVjdCogbGl2ZVJlZ2lvbkFuY2VzdG9y
KGJvb2wgZXhjbHVkZUlmT2ZmID0gdHJ1ZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBoYXND
b250ZW50RWRpdGFibGVBdHRyaWJ1dGVTZXQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIHN1
cHBvcnRzUmVhZE9ubHkoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIHN1cHBvcnRzQXV0b0Nv
bXBsZXRlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBzdXBwb3J0c0FSSUFBdHRyaWJ1dGVz
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBzY3JvbGxCeVBhZ2UoU2Nyb2xsQnlQYWdlRGly
ZWN0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBJbnRQb2ludCBzY3JvbGxQb3NpdGlvbigpIGNv
bnN0IG92ZXJyaWRlOworICAgIEludFNpemUgc2Nyb2xsQ29udGVudHNTaXplKCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgSW50UmVjdCBzY3JvbGxWaXNpYmxlQ29udGVudFJlY3QoKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2b2lkIHNjcm9sbFRvTWFrZVZpc2libGUoY29uc3QgU2Nyb2xsUmVjdFRvVmlz
aWJsZU9wdGlvbnMmKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGxhc3RLbm93bklzSWdub3Jl
ZFZhbHVlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRMYXN0S25vd25Jc0lnbm9yZWRWYWx1ZShi
b29sKSBvdmVycmlkZTsKKyAgICB2b2lkIG5vdGlmeUlmSWdub3JlZFZhbHVlQ2hhbmdlZCgpIG92
ZXJyaWRlOworICAgIGJvb2wgaXNNYXRoU2NyaXB0T2JqZWN0KEFjY2Vzc2liaWxpdHlNYXRoU2Ny
aXB0T2JqZWN0VHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc01hdGhNdWx0aXNjcmlw
dE9iamVjdChBY2Nlc3NpYmlsaXR5TWF0aE11bHRpc2NyaXB0T2JqZWN0VHlwZSkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgYm9vbCBpc0FYSGlkZGVuKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBp
c0RPTUhpZGRlbigpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNIaWRkZW4oKSBjb25zdCBv
dmVycmlkZTsKKyAgICB2b2lkIG92ZXJyaWRlQXR0YWNobWVudFBhcmVudChBWENvcmVPYmplY3Qq
IHBhcmVudCkgb3ZlcnJpZGU7CisgICAgYm9vbCBhY2Nlc3NpYmlsaXR5SWdub3JlQXR0YWNobWVu
dCgpIGNvbnN0IG92ZXJyaWRlOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb24gYWNj
ZXNzaWJpbGl0eVBsYXRmb3JtSW5jbHVkZXNPYmplY3QoKSBjb25zdCBvdmVycmlkZTsKKyAgICBi
b29sIGhhc0FwcGxlUERGQW5ub3RhdGlvbkF0dHJpYnV0ZSgpIGNvbnN0IG92ZXJyaWRlOworICAg
IGNvbnN0IEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KiBhbmNlc3RvckFjY2Vzc2liaWxpdHlTY3Jv
bGxWaWV3KGJvb2wgaW5jbHVkZVNlbGYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgc2V0SXNJ
Z25vcmVkRnJvbVBhcmVudERhdGEoQWNjZXNzaWJpbGl0eUlzSWdub3JlZEZyb21QYXJlbnREYXRh
Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGVhcklzSWdub3JlZEZyb21QYXJlbnREYXRhKCkgb3Zl
cnJpZGU7CisgICAgdm9pZCBzZXRJc0lnbm9yZWRGcm9tUGFyZW50RGF0YUZvckNoaWxkKEFYQ29y
ZU9iamVjdCopIG92ZXJyaWRlOworCisgICAgdm9pZCB1cGRhdGVCYWNraW5nU3RvcmUoKSBvdmVy
cmlkZTsKKworICAgIEFYSUQgbV9wYXJlbnQgeyBJbnZhbGlkQVhJRCB9OworICAgIEFYSUQgbV9p
ZCB7IEludmFsaWRBWElEIH07CisgICAgYm9vbCBtX2luaXRpYWxpemVkIHsgZmFsc2UgfTsKKyAg
ICBBWElzb2xhdGVkVHJlZUlEIG1fdHJlZUlkZW50aWZpZXI7CisgICAgUmVmUHRyPEFYSXNvbGF0
ZWRUcmVlPiBtX2NhY2hlZFRyZWU7CisgICAgVmVjdG9yPEFYSUQ+IG1fY2hpbGRyZW5JRHM7Cisg
ICAgVmVjdG9yPFJlZlB0cjxBWENvcmVPYmplY3Q+PiBtX2NoaWxkcmVuOworCisgICAgSGFzaE1h
cDxBWFByb3BlcnR5TmFtZSwgQXR0cmlidXRlVmFsdWVWYXJpYW50LCBXVEY6OkludEhhc2g8QVhQ
cm9wZXJ0eU5hbWU+LCBXVEY6OlN0cm9uZ0VudW1IYXNoVHJhaXRzPEFYUHJvcGVydHlOYW1lPj4g
bV9hdHRyaWJ1dGVNYXA7CisgICAgTG9jayBtX2F0dHJpYnV0ZU1hcExvY2s7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoKEFDQ0VTU0lCSUxJVFlfSVNP
TEFURURfVFJFRSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lz
b2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHAKaW5kZXggZWY5ZWVkMzgwZTVmYzMz
MWFiZTkxZTM0NzM0NmUyY2U5MWNmNmJmYi4uMmVmMThhNTRhNTdjOGFkMzQxZWVjMGZhNDU1OGI4
ODJmM2U1YmM5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29s
YXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmNwcApAQCAtMjgsNyArMjgsNiBAQAog
I2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCiAjaW5jbHVkZSAiQVhJc29s
YXRlZFRyZWUuaCIKIAotI2luY2x1ZGUgIkFYSXNvbGF0ZWRUcmVlTm9kZS5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIApAQCAtOTAsNiArODks
NyBAQCBSZWY8QVhJc29sYXRlZFRyZWU+IEFYSXNvbGF0ZWRUcmVlOjpjcmVhdGVUcmVlRm9yUGFn
ZUlEKFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCkKIAogdm9pZCBBWElzb2xhdGVkVHJlZTo6cmVtb3Zl
VHJlZUZvclBhZ2VJRChQYWdlSWRlbnRpZmllciBwYWdlSUQpCiB7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihzX2NhY2hlTG9jayk7CiAKICAgICBp
ZiAoYXV0byBvcHRpb25hbFRyZWUgPSB0cmVlUGFnZUNhY2hlKCkudGFrZShwYWdlSUQpKSB7CkBA
IC05Nyw3ICs5Nyw3IEBAIHZvaWQgQVhJc29sYXRlZFRyZWU6OnJlbW92ZVRyZWVGb3JQYWdlSUQo
UGFnZUlkZW50aWZpZXIgcGFnZUlEKQogICAgICAgICBMb2NrSG9sZGVyIHRyZWVMb2NrZXIgeyB0
cmVlLT5tX2NoYW5nZUxvZ0xvY2sgfTsKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBheElEIDog
dHJlZS0+bV9yZWFkZXJUaHJlYWROb2RlTWFwLmtleXMoKSkgewogICAgICAgICAgICAgaWYgKGF1
dG8gb2JqZWN0ID0gdHJlZS0+bm9kZUZvcklEKGF4SUQpKQotICAgICAgICAgICAgICAgIG9iamVj
dC0+ZGlzY29ubmVjdCgpOworICAgICAgICAgICAgICAgIG9iamVjdC0+ZGV0YWNoKEFjY2Vzc2li
aWxpdHlEZXRhY2htZW50VHlwZTo6Q2FjaGVEZXN0cm95ZWQpOwogICAgICAgICB9CiAgICAgICAg
IHRyZWUtPm1fcmVhZGVyVGhyZWFkTm9kZU1hcC5jbGVhcigpOwogICAgICAgICB0cmVlTG9ja2Vy
LnVubG9ja0Vhcmx5KCk7CkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBBWElzb2xhdGVkVHJlZTo6
YXBwbHlQZW5kaW5nQ2hhbmdlcygpCiAKICAgICBmb3IgKGF1dG8gaXRlbSA6IHJlbW92ZUNvcHkp
IHsKICAgICAgICAgaWYgKGF1dG8gb2JqZWN0ID0gbm9kZUZvcklEKGl0ZW0pKQotICAgICAgICAg
ICAgb2JqZWN0LT5kaXNjb25uZWN0KCk7CisgICAgICAgICAgICBvYmplY3QtPmRldGFjaChBY2Nl
c3NpYmlsaXR5RGV0YWNobWVudFR5cGU6OkVsZW1lbnREZXN0cm95ZWQpOwogICAgICAgICBtX3Jl
YWRlclRocmVhZE5vZGVNYXAucmVtb3ZlKGl0ZW0pOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJl
ZS5oCmluZGV4IDM4YjRkYzUzNDgzMmZlZjQzZTMzNGUzZGZjNzUzZDY5Mjc3Mzg0NjQuLjllMmMw
YTllYzk3NDExYzZhOWVhZDY2NjY2MmYzYmY1NzQ0Nzg2ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUu
aApAQCAtMjcsNyArMjcsNiBAQAogCiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURf
VFJFRSkKIAotI2luY2x1ZGUgIkFYSXNvbGF0ZWRUcmVlTm9kZS5oIgogI2luY2x1ZGUgIlBhZ2VJ
ZGVudGlmaWVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVk
dHJlZS9BWElzb2xhdGVkVHJlZU5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWVOb2RlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMWQ0MTA0Nzk1NmIyZDY2NmQwNGY0MmFjZWE0MjQzMTE4MzU5NDIyZC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZU5vZGUuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMTg3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotCi0jaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKLSNpbmNsdWRl
ICJBWElzb2xhdGVkVHJlZU5vZGUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1BWElzb2xh
dGVkT2JqZWN0OjpBWElzb2xhdGVkT2JqZWN0KEFYQ29yZU9iamVjdCYgb2JqZWN0LCBib29sIGlz
Um9vdCkKLSAgICA6IG1faWQob2JqZWN0Lm9iamVjdElEKCkpCi17Ci0gICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLSAgICBpbml0aWFsaXplQXR0cmlidXRlRGF0YShvYmplY3QsIGlzUm9vdCk7
Ci0gICAgbV9pbml0aWFsaXplZCA9IHRydWU7Ci19Ci0KLVJlZjxBWElzb2xhdGVkT2JqZWN0PiBB
WElzb2xhdGVkT2JqZWN0OjpjcmVhdGUoQVhDb3JlT2JqZWN0JiBvYmplY3QsIGJvb2wgaXNSb290
KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFYSXNvbGF0ZWRPYmplY3Qob2JqZWN0LCBp
c1Jvb3QpKTsKLX0KLQotQVhJc29sYXRlZE9iamVjdDo6fkFYSXNvbGF0ZWRPYmplY3QoKSA9IGRl
ZmF1bHQ7Ci0KLXZvaWQgQVhJc29sYXRlZE9iamVjdDo6aW5pdGlhbGl6ZUF0dHJpYnV0ZURhdGEo
QVhDb3JlT2JqZWN0JiBvYmplY3QsIGJvb2wgaXNSb290KQotewotICAgIHNldFByb3BlcnR5KEFY
UHJvcGVydHlOYW1lOjpCb3VuZGluZ0JveFJlY3QsIG9iamVjdC5ib3VuZGluZ0JveFJlY3QoKSk7
Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkVsZW1lbnRSZWN0LCBvYmplY3QuZWxl
bWVudFJlY3QoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlJvbGVWYWx1ZSwg
c3RhdGljX2Nhc3Q8aW50PihvYmplY3Qucm9sZVZhbHVlKCkpKTsKLSAgICBzZXRQcm9wZXJ0eShB
WFByb3BlcnR5TmFtZTo6Um9sZVBsYXRmb3JtU3RyaW5nLCBvYmplY3Qucm9sZVBsYXRmb3JtU3Ry
aW5nKCkuaXNvbGF0ZWRDb3B5KCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpB
UklBTGFuZG1hcmtSb2xlRGVzY3JpcHRpb24sIG9iamVjdC5hcmlhTGFuZG1hcmtSb2xlRGVzY3Jp
cHRpb24oKS5pc29sYXRlZENvcHkoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6
OlJvbGVEZXNjcmlwdGlvbiwgb2JqZWN0LnJvbGVEZXNjcmlwdGlvbigpLmlzb2xhdGVkQ29weSgp
KTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNBdHRhY2htZW50LCBvYmplY3Qu
aXNBdHRhY2htZW50KCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0xpbmss
IG9iamVjdC5pc0xpbmsoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzSW1h
Z2VNYXBMaW5rLCBvYmplY3QuaXNJbWFnZU1hcExpbmsoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQ
cm9wZXJ0eU5hbWU6OklzSW1hZ2UsIG9iamVjdC5pc0ltYWdlKCkpOwotICAgIHNldFByb3BlcnR5
KEFYUHJvcGVydHlOYW1lOjpJc0ZpbGVVcGxvYWRCdXR0b24sIG9iamVjdC5pc0ZpbGVVcGxvYWRC
dXR0b24oKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzQWNjZXNzaWJpbGl0
eUlnbm9yZWQsIG9iamVjdC5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpOwotICAgIHNldFByb3Bl
cnR5KEFYUHJvcGVydHlOYW1lOjpJc1RyZWUsIG9iamVjdC5pc1RyZWUoKSk7Ci0gICAgc2V0UHJv
cGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzU2Nyb2xsYmFyLCBvYmplY3QuaXNTY3JvbGxiYXIoKSk7
Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlJlbGF0aXZlRnJhbWUsIG9iamVjdC5y
ZWxhdGl2ZUZyYW1lKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpTcGVlY2hI
aW50LCBvYmplY3Quc3BlZWNoSGludEF0dHJpYnV0ZVZhbHVlKCkuaXNvbGF0ZWRDb3B5KCkpOwot
ICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpUaXRsZSwgb2JqZWN0LnRpdGxlQXR0cmli
dXRlVmFsdWUoKS5pc29sYXRlZENvcHkoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5h
bWU6OkRlc2NyaXB0aW9uLCBvYmplY3QuZGVzY3JpcHRpb25BdHRyaWJ1dGVWYWx1ZSgpLmlzb2xh
dGVkQ29weSgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SGVscFRleHQsIG9i
amVjdC5oZWxwVGV4dEF0dHJpYnV0ZVZhbHVlKCkuaXNvbGF0ZWRDb3B5KCkpOwotICAgIHNldFBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc1NlYXJjaEZpZWxkLCBvYmplY3QuaXNTZWFyY2hGaWVs
ZCgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNNZWRpYVRpbWVsaW5lLCBv
YmplY3QuaXNNZWRpYVRpbWVsaW5lKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1l
OjpJc01lbnVSZWxhdGVkLCBvYmplY3QuaXNNZW51UmVsYXRlZCgpKTsKLSAgICBzZXRQcm9wZXJ0
eShBWFByb3BlcnR5TmFtZTo6SXNNZW51LCBvYmplY3QuaXNNZW51KCkpOwotICAgIHNldFByb3Bl
cnR5KEFYUHJvcGVydHlOYW1lOjpJc01lbnVCYXIsIG9iamVjdC5pc01lbnVCYXIoKSk7Ci0gICAg
c2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTWVudUJ1dHRvbiwgb2JqZWN0LmlzTWVudUJ1
dHRvbigpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNNZW51SXRlbSwgb2Jq
ZWN0LmlzTWVudUl0ZW0oKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzSW5w
dXRJbWFnZSwgb2JqZWN0LmlzSW5wdXRJbWFnZSgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3Bl
cnR5TmFtZTo6SXNQcm9ncmVzc0luZGljYXRvciwgb2JqZWN0LmlzUHJvZ3Jlc3NJbmRpY2F0b3Io
KSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzU2xpZGVyLCBvYmplY3QuaXNT
bGlkZXIoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzQ29udHJvbCwgb2Jq
ZWN0LmlzQ29udHJvbCgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNMaXN0
LCBvYmplY3QuaXNMaXN0KCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc1Vu
b3JkZXJlZExpc3QsIG9iamVjdC5pc1Vub3JkZXJlZExpc3QoKSk7Ci0gICAgc2V0UHJvcGVydHko
QVhQcm9wZXJ0eU5hbWU6OklzT3JkZXJlZExpc3QsIG9iamVjdC5pc09yZGVyZWRMaXN0KCkpOwot
ICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0Rlc2NyaXB0aW9uTGlzdCwgb2JqZWN0
LmlzRGVzY3JpcHRpb25MaXN0KCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJ
c1RhYmxlUm93LCBvYmplY3QuaXNUYWJsZVJvdygpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3Bl
cnR5TmFtZTo6SXNUYWJsZUNvbHVtbiwgb2JqZWN0LmlzVGFibGVDb2x1bW4oKSk7Ci0gICAgc2V0
UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzVGFibGVDZWxsLCBvYmplY3QuaXNUYWJsZUNlbGwo
KSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzRmllbGRzZXQsIG9iamVjdC5p
c0ZpZWxkc2V0KCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0dyb3VwLCBv
YmplY3QuaXNHcm91cCgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNBUklB
VHJlZUdyaWRSb3csIG9iamVjdC5pc0FSSUFUcmVlR3JpZFJvdygpKTsKLSAgICBzZXRQcm9wZXJ0
eShBWFByb3BlcnR5TmFtZTo6SXNNZW51TGlzdCwgb2JqZWN0LmlzTWVudUxpc3QoKSk7Ci0gICAg
c2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTWVudUxpc3RQb3B1cCwgb2JqZWN0LmlzTWVu
dUxpc3RQb3B1cCgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNNZW51TGlz
dE9wdGlvbiwgb2JqZWN0LmlzTWVudUxpc3RPcHRpb24oKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQ
cm9wZXJ0eU5hbWU6OklzVGV4dENvbnRyb2wsIG9iamVjdC5pc1RleHRDb250cm9sKCkpOwotICAg
IHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0J1dHRvbiwgb2JqZWN0LmlzQnV0dG9uKCkp
OwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc1JhbmdlQ29udHJvbCwgb2JqZWN0
LmlzUmFuZ2VDb250cm9sKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc1N0
eWxlRm9ybWF0R3JvdXAsIG9iamVjdC5pc1N0eWxlRm9ybWF0R3JvdXAoKSk7Ci0gICAgc2V0UHJv
cGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzT3V0cHV0LCBvYmplY3QuaXNPdXRwdXQoKSk7Ci0gICAg
c2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzRGF0ZXRpbWVBdHRyaWJ1dGUsIG9i
amVjdC5zdXBwb3J0c0RhdGV0aW1lQXR0cmlidXRlKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJv
cGVydHlOYW1lOjpEYXRldGltZUF0dHJpYnV0ZVZhbHVlLCBvYmplY3QuZGF0ZXRpbWVBdHRyaWJ1
dGVWYWx1ZSgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6Q2FuU2V0Rm9jdXNB
dHRyaWJ1dGUsIG9iamVjdC5jYW5TZXRGb2N1c0F0dHJpYnV0ZSgpKTsKLSAgICBzZXRQcm9wZXJ0
eShBWFByb3BlcnR5TmFtZTo6Q2FuU2V0VGV4dFJhbmdlQXR0cmlidXRlcywgb2JqZWN0LmNhblNl
dFRleHRSYW5nZUF0dHJpYnV0ZXMoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6
OkNhblNldFZhbHVlQXR0cmlidXRlLCBvYmplY3QuY2FuU2V0VmFsdWVBdHRyaWJ1dGUoKSk7Ci0g
ICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkNhblNldE51bWVyaWNWYWx1ZSwgb2JqZWN0
LmNhblNldE51bWVyaWNWYWx1ZSgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6
SXNQYXNzd29yZEZpZWxkLCBvYmplY3QuaXNQYXNzd29yZEZpZWxkKCkpOwotICAgIHNldFByb3Bl
cnR5KEFYUHJvcGVydHlOYW1lOjpJc0hlYWRpbmcsIG9iamVjdC5pc0hlYWRpbmcoKSk7Ci0gICAg
c2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzQ2hlY2tlZCwgb2JqZWN0LmlzQ2hlY2tlZCgp
KTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNFbmFibGVkLCBvYmplY3QuaXNF
bmFibGVkKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc1NlbGVjdGVkLCBv
YmplY3QuaXNTZWxlY3RlZCgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNG
b2N1c2VkLCBvYmplY3QuaXNGb2N1c2VkKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlO
YW1lOjpJc0hvdmVyZWQsIG9iamVjdC5pc0hvdmVyZWQoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQ
cm9wZXJ0eU5hbWU6OklzSW5kZXRlcm1pbmF0ZSwgb2JqZWN0LmlzSW5kZXRlcm1pbmF0ZSgpKTsK
LSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNMb2FkZWQsIG9iamVjdC5pc0xvYWRl
ZCgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNNdWx0aVNlbGVjdGFibGUs
IG9iamVjdC5pc011bHRpU2VsZWN0YWJsZSgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5
TmFtZTo6SXNPblNjcmVlbiwgb2JqZWN0LmlzT25TY3JlZW4oKSk7Ci0gICAgc2V0UHJvcGVydHko
QVhQcm9wZXJ0eU5hbWU6OklzT2ZmU2NyZWVuLCBvYmplY3QuaXNPZmZTY3JlZW4oKSk7Ci0gICAg
c2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzUHJlc3NlZCwgb2JqZWN0LmlzUHJlc3NlZCgp
KTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNVbnZpc2l0ZWQsIG9iamVjdC5p
c1VudmlzaXRlZCgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNWaXNpdGVk
LCBvYmplY3QuaXNWaXNpdGVkKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJ
c1JlcXVpcmVkLCBvYmplY3QuaXNSZXF1aXJlZCgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3Bl
cnR5TmFtZTo6U3VwcG9ydHNSZXF1aXJlZEF0dHJpYnV0ZSwgb2JqZWN0LnN1cHBvcnRzUmVxdWly
ZWRBdHRyaWJ1dGUoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTGlua2Vk
LCBvYmplY3QuaXNMaW5rZWQoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6Oklz
RXhwYW5kZWQsIG9iamVjdC5pc0V4cGFuZGVkKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVy
dHlOYW1lOjpJc1Zpc2libGUsIG9iamVjdC5pc1Zpc2libGUoKSk7Ci0gICAgc2V0UHJvcGVydHko
QVhQcm9wZXJ0eU5hbWU6OklzQ29sbGFwc2VkLCBvYmplY3QuaXNDb2xsYXBzZWQoKSk7Ci0gICAg
c2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzU2VsZWN0ZWRPcHRpb25BY3RpdmUsIG9iamVj
dC5pc1NlbGVjdGVkT3B0aW9uQWN0aXZlKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlO
YW1lOjpDYW5TZXRTZWxlY3RlZEF0dHJpYnV0ZSwgb2JqZWN0LmNhblNldFNlbGVjdGVkQXR0cmli
dXRlKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDYW5TZXRTZWxlY3RlZENo
aWxkcmVuQXR0cmlidXRlLCBvYmplY3QuY2FuU2V0U2VsZWN0ZWRDaGlsZHJlbkF0dHJpYnV0ZSgp
KTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6Q2FuU2V0RXhwYW5kZWRBdHRyaWJ1
dGUsIG9iamVjdC5jYW5TZXRFeHBhbmRlZEF0dHJpYnV0ZSgpKTsKLSAgICBzZXRQcm9wZXJ0eShB
WFByb3BlcnR5TmFtZTo6SXNTaG93aW5nVmFsaWRhdGlvbk1lc3NhZ2UsIG9iamVjdC5pc1Nob3dp
bmdWYWxpZGF0aW9uTWVzc2FnZSgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6
VmFsaWRhdGlvbk1lc3NhZ2UsIG9iamVjdC52YWxpZGF0aW9uTWVzc2FnZSgpKTsKLSAgICBzZXRQ
cm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6QmxvY2txdW90ZUxldmVsLCBvYmplY3QuYmxvY2txdW90
ZUxldmVsKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpIZWFkaW5nTGV2ZWws
IG9iamVjdC5oZWFkaW5nTGV2ZWwoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6
OlRhYmxlTGV2ZWwsIG9iamVjdC50YWJsZUxldmVsKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJv
cGVydHlOYW1lOjpBY2Nlc3NpYmlsaXR5QnV0dG9uU3RhdGUsIHN0YXRpY19jYXN0PGludD4ob2Jq
ZWN0LmNoZWNrYm94T3JSYWRpb1ZhbHVlKCkpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5
TmFtZTo6VmFsdWVEZXNjcmlwdGlvbiwgb2JqZWN0LnZhbHVlRGVzY3JpcHRpb24oKSk7Ci0gICAg
c2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlZhbHVlRm9yUmFuZ2UsIG9iamVjdC52YWx1ZUZv
clJhbmdlKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpNYXhWYWx1ZUZvclJh
bmdlLCBvYmplY3QubWF4VmFsdWVGb3JSYW5nZSgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3Bl
cnR5TmFtZTo6TWluVmFsdWVGb3JSYW5nZSwgb2JqZWN0Lm1pblZhbHVlRm9yUmFuZ2UoKSk7Ci0g
ICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlNlbGVjdGVkUmFkaW9CdXR0b24sIG9iamVj
dC5zZWxlY3RlZFJhZGlvQnV0dG9uKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1l
OjpTZWxlY3RlZFRhYkl0ZW0sIG9iamVjdC5zZWxlY3RlZFRhYkl0ZW0oKSk7Ci0gICAgc2V0UHJv
cGVydHkoQVhQcm9wZXJ0eU5hbWU6OkxheW91dENvdW50LCBvYmplY3QubGF5b3V0Q291bnQoKSk7
Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkVzdGltYXRlZExvYWRpbmdQcm9ncmVz
cywgb2JqZWN0LmVzdGltYXRlZExvYWRpbmdQcm9ncmVzcygpKTsKLSAgICBzZXRQcm9wZXJ0eShB
WFByb3BlcnR5TmFtZTo6U3VwcG9ydHNBUklBT3ducywgb2JqZWN0LnN1cHBvcnRzQVJJQU93bnMo
KSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzQWN0aXZlRGVzY2VuZGFudE9m
Rm9jdXNlZENvbnRhaW5lciwgb2JqZWN0LmlzQWN0aXZlRGVzY2VuZGFudE9mRm9jdXNlZENvbnRh
aW5lcigpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SGFzUG9wdXAsIG9iamVj
dC5oYXNQb3B1cCgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6UG9wdXBWYWx1
ZSwgb2JqZWN0LnBvcHVwVmFsdWUoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6
OlByZXNzZWRJc1ByZXNlbnQsIG9iamVjdC5wcmVzc2VkSXNQcmVzZW50KCkpOwotICAgIHNldFBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpBUklBSXNNdWx0aWxpbmUsIG9iamVjdC5hcmlhSXNNdWx0
aWxpbmUoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkludmFsaWRTdGF0dXMs
IG9iamVjdC5pbnZhbGlkU3RhdHVzKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1l
OjpTdXBwb3J0c0V4cGFuZGVkLCBvYmplY3Quc3VwcG9ydHNFeHBhbmRlZCgpKTsKLSAgICBzZXRQ
cm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6U29ydERpcmVjdGlvbiwgc3RhdGljX2Nhc3Q8aW50Pihv
YmplY3Quc29ydERpcmVjdGlvbigpKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6
OkNhbnZhc0hhc0ZhbGxiYWNrQ29udGVudCwgb2JqZWN0LmNhbnZhc0hhc0ZhbGxiYWNrQ29udGVu
dCgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNSYW5nZVZhbHVl
LCBvYmplY3Quc3VwcG9ydHNSYW5nZVZhbHVlKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVy
dHlOYW1lOjpJZGVudGlmaWVyQXR0cmlidXRlLCBvYmplY3QuaWRlbnRpZmllckF0dHJpYnV0ZSgp
KTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6TGlua1JlbFZhbHVlLCBvYmplY3Qu
bGlua1JlbFZhbHVlKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDdXJyZW50
U3RhdGUsIHN0YXRpY19jYXN0PGludD4ob2JqZWN0LmN1cnJlbnRTdGF0ZSgpKSk7Ci0gICAgc2V0
UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkN1cnJlbnRWYWx1ZSwgb2JqZWN0LmN1cnJlbnRWYWx1
ZSgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNDdXJyZW50LCBv
YmplY3Quc3VwcG9ydHNDdXJyZW50KCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1l
OjpLZXlTaG9ydGN1dHNWYWx1ZSwgb2JqZWN0LmtleVNob3J0Y3V0c1ZhbHVlKCkpOwotICAgIHNl
dFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c1NldFNpemUsIG9iamVjdC5zdXBwb3J0
c1NldFNpemUoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzUGF0
aCwgb2JqZWN0LnN1cHBvcnRzUGF0aCgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFt
ZTo6U3VwcG9ydHNQb3NJblNldCwgb2JqZWN0LnN1cHBvcnRzUG9zSW5TZXQoKSk7Ci0gICAgc2V0
UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlNldFNpemUsIG9iamVjdC5zZXRTaXplKCkpOwotICAg
IHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpQb3NJblNldCwgb2JqZWN0LnBvc0luU2V0KCkp
OwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c0FSSUFEcm9wcGluZywg
b2JqZWN0LnN1cHBvcnRzQVJJQURyb3BwaW5nKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVy
dHlOYW1lOjpTdXBwb3J0c0FSSUFEcmFnZ2luZywgb2JqZWN0LnN1cHBvcnRzQVJJQURyYWdnaW5n
KCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0FSSUFHcmFiYmVkLCBvYmpl
Y3QuaXNBUklBR3JhYmJlZCgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6QVJJ
QURyb3BFZmZlY3RzLCBvYmplY3QuZGV0ZXJtaW5lQVJJQURyb3BFZmZlY3RzKCkpOwotICAgIHNl
dE9iamVjdFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpUaXRsZVVJRWxlbWVudCwgb2JqZWN0LnRp
dGxlVUlFbGVtZW50KCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpFeHBvc2Vz
VGl0bGVVSUVsZW1lbnQsIG9iamVjdC5leHBvc2VzVGl0bGVVSUVsZW1lbnQoKSk7Ci0gICAgc2V0
T2JqZWN0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlZlcnRpY2FsU2Nyb2xsQmFyLCBvYmplY3Qu
c2Nyb2xsQmFyKEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbjo6VmVydGljYWwpKTsKLSAgICBzZXRP
YmplY3RQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SG9yaXpvbnRhbFNjcm9sbEJhciwgb2JqZWN0
LnNjcm9sbEJhcihBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb246Okhvcml6b250YWwpKTsKLSAgICBz
ZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6QVJJQVJvbGVBdHRyaWJ1dGUsIHN0YXRpY19jYXN0
PGludD4ob2JqZWN0LmFyaWFSb2xlQXR0cmlidXRlKCkpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFBy
b3BlcnR5TmFtZTo6Q29tcHV0ZWRMYWJlbCwgb2JqZWN0LmNvbXB1dGVkTGFiZWwoKSk7Ci0gICAg
c2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlBsYWNlaG9sZGVyVmFsdWUsIG9iamVjdC5wbGFj
ZWhvbGRlclZhbHVlKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpFeHBhbmRl
ZFRleHRWYWx1ZSwgb2JqZWN0LmV4cGFuZGVkVGV4dFZhbHVlKCkpOwotICAgIHNldFByb3BlcnR5
KEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c0V4cGFuZGVkVGV4dFZhbHVlLCBvYmplY3Quc3VwcG9y
dHNFeHBhbmRlZFRleHRWYWx1ZSgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6
U3VwcG9ydHNQcmVzc0FjdGlvbiwgb2JqZWN0LnN1cHBvcnRzUHJlc3NBY3Rpb24oKSk7Ci0gICAg
c2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkNsaWNrUG9pbnQsIG9iamVjdC5jbGlja1BvaW50
KCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDb21wdXRlZFJvbGVTdHJpbmcs
IG9iamVjdC5jb21wdXRlZFJvbGVTdHJpbmcoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0
eU5hbWU6OklzVmFsdWVBdXRvZmlsbGVkLCBvYmplY3QuaXNWYWx1ZUF1dG9maWxsZWQoKSk7Ci0g
ICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzVmFsdWVBdXRvZmlsbEF2YWlsYWJsZSwg
b2JqZWN0LmlzVmFsdWVBdXRvZmlsbEF2YWlsYWJsZSgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFBy
b3BlcnR5TmFtZTo6VmFsdWVBdXRvZmlsbEJ1dHRvblR5cGUsIHN0YXRpY19jYXN0PGludD4ob2Jq
ZWN0LnZhbHVlQXV0b2ZpbGxCdXR0b25UeXBlKCkpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3Bl
cnR5TmFtZTo6VVJMLCBvYmplY3QudXJsKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlO
YW1lOjpBY2Nlc3NLZXksIG9iamVjdC5hY2Nlc3NLZXkoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQ
cm9wZXJ0eU5hbWU6OkFjdGlvblZlcmIsIG9iamVjdC5hY3Rpb25WZXJiKCkpOwotICAgIHNldFBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpSZWFkT25seVZhbHVlLCBvYmplY3QucmVhZE9ubHlWYWx1
ZSgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6QXV0b0NvbXBsZXRlVmFsdWUs
IG9iamVjdC5hdXRvQ29tcGxldGVWYWx1ZSgpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5
TmFtZTo6U3BlYWtBcywgb2JqZWN0LnNwZWFrQXNQcm9wZXJ0eSgpKTsKLSAgICBzZXRQcm9wZXJ0
eShBWFByb3BlcnR5TmFtZTo6U3RyaW5nVmFsdWUsIG9iamVjdC5zdHJpbmdWYWx1ZSgpLmlzb2xh
dGVkQ29weSgpKTsKLSNpZiBQTEFURk9STShDT0NPQSkgJiYgIVBMQVRGT1JNKElPU19GQU1JTFkp
Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkNhcmV0QnJvd3NpbmdFbmFibGVkLCBv
YmplY3QuY2FyZXRCcm93c2luZ0VuYWJsZWQoKSk7Ci0jZW5kaWYKLSAgICBzZXRPYmplY3RQcm9w
ZXJ0eShBWFByb3BlcnR5TmFtZTo6Rm9jdXNhYmxlQW5jZXN0b3IsIG9iamVjdC5mb2N1c2FibGVB
bmNlc3RvcigpKTsKLSAgICBzZXRPYmplY3RQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6RWRpdGFi
bGVBbmNlc3Rvciwgb2JqZWN0LmVkaXRhYmxlQW5jZXN0b3IoKSk7Ci0gICAgc2V0T2JqZWN0UHJv
cGVydHkoQVhQcm9wZXJ0eU5hbWU6OkhpZ2hlc3RFZGl0YWJsZUFuY2VzdG9yLCBvYmplY3QuaGln
aGVzdEVkaXRhYmxlQW5jZXN0b3IoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6
Ok9yaWVudGF0aW9uLCBzdGF0aWNfY2FzdDxpbnQ+KG9iamVjdC5vcmllbnRhdGlvbigpKSk7Ci0g
ICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkhpZXJhcmNoaWNhbExldmVsLCBvYmplY3Qu
aGllcmFyY2hpY2FsTGV2ZWwoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6Okxh
bmd1YWdlLCBvYmplY3QubGFuZ3VhZ2UoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5h
bWU6OkNhbkhhdmVTZWxlY3RlZENoaWxkcmVuLCBvYmplY3QuY2FuSGF2ZVNlbGVjdGVkQ2hpbGRy
ZW4oKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6Okhhc0FSSUFWYWx1ZU5vdywg
b2JqZWN0Lmhhc0FSSUFWYWx1ZU5vdygpKTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFt
ZTo6VGFnTmFtZSwgb2JqZWN0LnRhZ05hbWUoKSk7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0
eU5hbWU6OlN1cHBvcnRzTGl2ZVJlZ2lvbiwgb2JqZWN0LnN1cHBvcnRzTGl2ZVJlZ2lvbigpKTsK
LSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNJbnNpZGVMaXZlUmVnaW9uLCBvYmpl
Y3QuaXNJbnNpZGVMaXZlUmVnaW9uKCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1l
OjpMaXZlUmVnaW9uU3RhdHVzLCBvYmplY3QubGl2ZVJlZ2lvblN0YXR1cygpKTsKLSAgICBzZXRQ
cm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6TGl2ZVJlZ2lvblJlbGV2YW50LCBvYmplY3QubGl2ZVJl
Z2lvblJlbGV2YW50KCkpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpMaXZlUmVn
aW9uQXRvbWljLCBvYmplY3QubGl2ZVJlZ2lvbkF0b21pYygpKTsKLSAgICBzZXRQcm9wZXJ0eShB
WFByb3BlcnR5TmFtZTo6SXNCdXN5LCBvYmplY3QuaXNCdXN5KCkpOwotICAgIHNldFByb3BlcnR5
KEFYUHJvcGVydHlOYW1lOjpJc0lubGluZVRleHQsIG9iamVjdC5pc0lubGluZVRleHQoKSk7Ci0g
ICAgaWYgKG9iamVjdC5pc1RleHRDb250cm9sKCkpCi0gICAgICAgIHNldFByb3BlcnR5KEFYUHJv
cGVydHlOYW1lOjpUZXh0TGVuZ3RoLCBvYmplY3QudGV4dExlbmd0aCgpKTsKLQotICAgIEFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciBzZWxlY3RlZENoaWxkcmVuOwotICAgIG9iamVjdC5zZWxl
Y3RlZENoaWxkcmVuKHNlbGVjdGVkQ2hpbGRyZW4pOwotICAgIHNldE9iamVjdFZlY3RvclByb3Bl
cnR5KEFYUHJvcGVydHlOYW1lOjpTZWxlY3RlZENoaWxkcmVuLCBzZWxlY3RlZENoaWxkcmVuKTsK
LQotICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciB2aXNpYmxlQ2hpbGRyZW47Ci0gICAg
b2JqZWN0LnZpc2libGVDaGlsZHJlbih2aXNpYmxlQ2hpbGRyZW4pOwotICAgIHNldE9iamVjdFZl
Y3RvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpWaXNpYmxlQ2hpbGRyZW4sIHZpc2libGVDaGls
ZHJlbik7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgdGFiQ2hpbGRyZW47Ci0g
ICAgb2JqZWN0LnRhYkNoaWxkcmVuKHRhYkNoaWxkcmVuKTsKLSAgICBzZXRPYmplY3RWZWN0b3JQ
cm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6VGFiQ2hpbGRyZW4sIHRhYkNoaWxkcmVuKTsKLQotICAg
IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBhcmlhVHJlZVJvd3M7Ci0gICAgb2JqZWN0LmFy
aWFUcmVlUm93cyhhcmlhVHJlZVJvd3MpOwotICAgIHNldE9iamVjdFZlY3RvclByb3BlcnR5KEFY
UHJvcGVydHlOYW1lOjpBUklBVHJlZVJvd3MsIGFyaWFUcmVlUm93cyk7Ci0KLSAgICBBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3IgYXJpYVRyZWVJdGVtRGlzY2xvc2VkUm93czsKLSAgICBvYmpl
Y3QuYXJpYVRyZWVJdGVtRGlzY2xvc2VkUm93cyhhcmlhVHJlZUl0ZW1EaXNjbG9zZWRSb3dzKTsK
LSAgICBzZXRPYmplY3RWZWN0b3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6QVJJQVRyZWVJdGVt
RGlzY2xvc2VkUm93cywgYXJpYVRyZWVJdGVtRGlzY2xvc2VkUm93cyk7Ci0KLSAgICBBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3IgYXJpYVRyZWVJdGVtQ29udGVudDsKLSAgICBvYmplY3QuYXJp
YVRyZWVJdGVtQ29udGVudChhcmlhVHJlZUl0ZW1Db250ZW50KTsKLSAgICBzZXRPYmplY3RWZWN0
b3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6QVJJQVRyZWVJdGVtQ29udGVudCwgYXJpYVRyZWVJ
dGVtQ29udGVudCk7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgbGlua2VkVUlF
bGVtZW50czsKLSAgICBvYmplY3QubGlua2VkVUlFbGVtZW50cyhsaW5rZWRVSUVsZW1lbnRzKTsK
LSAgICBzZXRPYmplY3RWZWN0b3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6TGlua2VkVUlFbGVt
ZW50cywgbGlua2VkVUlFbGVtZW50cyk7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3IgYXJpYUNvbnRyb2xzRWxlbWVudHM7Ci0gICAgb2JqZWN0LmFyaWFDb250cm9sc0VsZW1lbnRz
KGFyaWFDb250cm9sc0VsZW1lbnRzKTsKLSAgICBzZXRPYmplY3RWZWN0b3JQcm9wZXJ0eShBWFBy
b3BlcnR5TmFtZTo6QVJJQUNvbnRyb2xzRWxlbWVudHMsIGFyaWFDb250cm9sc0VsZW1lbnRzKTsK
LQotICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBhcmlhRGV0YWlsc0VsZW1lbnRzOwot
ICAgIG9iamVjdC5hcmlhRGV0YWlsc0VsZW1lbnRzKGFyaWFEZXRhaWxzRWxlbWVudHMpOwotICAg
IHNldE9iamVjdFZlY3RvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpBUklBRGV0YWlsc0VsZW1l
bnRzLCBhcmlhRGV0YWlsc0VsZW1lbnRzKTsKLQotICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciBhcmlhRXJyb3JNZXNzYWdlRWxlbWVudHM7Ci0gICAgb2JqZWN0LmFyaWFFcnJvck1lc3Nh
Z2VFbGVtZW50cyhhcmlhRXJyb3JNZXNzYWdlRWxlbWVudHMpOwotICAgIHNldE9iamVjdFZlY3Rv
clByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpBUklBRXJyb3JNZXNzYWdlRWxlbWVudHMsIGFyaWFF
cnJvck1lc3NhZ2VFbGVtZW50cyk7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Ig
YXJpYUZsb3dUb0VsZW1lbnRzOwotICAgIG9iamVjdC5hcmlhRmxvd1RvRWxlbWVudHMoYXJpYUZs
b3dUb0VsZW1lbnRzKTsKLSAgICBzZXRPYmplY3RWZWN0b3JQcm9wZXJ0eShBWFByb3BlcnR5TmFt
ZTo6QVJJQUZsb3dUb0VsZW1lbnRzLCBhcmlhRmxvd1RvRWxlbWVudHMpOwotCi0gICAgQWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yIGFyaWFPd25zRWxlbWVudHM7Ci0gICAgb2JqZWN0LmFyaWFP
d25zRWxlbWVudHMoYXJpYU93bnNFbGVtZW50cyk7Ci0gICAgc2V0T2JqZWN0VmVjdG9yUHJvcGVy
dHkoQVhQcm9wZXJ0eU5hbWU6OkFSSUFPd25zRWxlbWVudHMsIGFyaWFPd25zRWxlbWVudHMpOwot
Ci0gICAgVmVjdG9yPEFjY2Vzc2liaWxpdHlUZXh0PiB0ZXh0czsKLSAgICBvYmplY3QuYWNjZXNz
aWJpbGl0eVRleHQodGV4dHMpOwotICAgIFZlY3RvcjxBY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVl
VGV4dD4gaXNvbGF0ZWRUZXh0czsKLSAgICBpc29sYXRlZFRleHRzLnJlc2VydmVDYXBhY2l0eSh0
ZXh0cy5zaXplKCkpOwotICAgIGZvciAoYXV0byB0ZXh0IDogdGV4dHMpIHsKLSAgICAgICAgQWNj
ZXNzaWJpbGl0eUlzb2xhdGVkVHJlZVRleHQgaXNvbGF0ZWRUZXh0OwotICAgICAgICBpc29sYXRl
ZFRleHQudGV4dCA9IHRleHQudGV4dDsKLSAgICAgICAgaXNvbGF0ZWRUZXh0LnRleHRTb3VyY2Ug
PSB0ZXh0LnRleHRTb3VyY2U7Ci0gICAgICAgIGZvciAoYXV0byBvYmplY3QgOiB0ZXh0LnRleHRF
bGVtZW50cykKLSAgICAgICAgICAgIGlzb2xhdGVkVGV4dC50ZXh0RWxlbWVudHMuYXBwZW5kKG9i
amVjdC0+b2JqZWN0SUQoKSk7Ci0gICAgICAgIGlzb2xhdGVkVGV4dHMudW5jaGVja2VkQXBwZW5k
KGlzb2xhdGVkVGV4dCk7Ci0gICAgfQotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpB
Y2Nlc3NpYmlsaXR5VGV4dCwgaXNvbGF0ZWRUZXh0cyk7Ci0KLSAgICAvLyBTcGluIGJ1dHRvbiBz
dXBwb3J0LgotICAgIHNldE9iamVjdFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpEZWNyZW1lbnRC
dXR0b24sIG9iamVjdC5kZWNyZW1lbnRCdXR0b24oKSk7Ci0gICAgc2V0T2JqZWN0UHJvcGVydHko
QVhQcm9wZXJ0eU5hbWU6OkluY3JlbWVudEJ1dHRvbiwgb2JqZWN0LmluY3JlbWVudEJ1dHRvbigp
KTsKLSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNJbmNyZW1lbnRvciwgb2JqZWN0
LmlzSW5jcmVtZW50b3IoKSk7Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiBjbGFzc0xpc3Q7Ci0gICAg
b2JqZWN0LmNsYXNzTGlzdChjbGFzc0xpc3QpOwotICAgIFN0cmluZyBjb21iaW5lZENsYXNzTGlz
dDsKLSAgICBmb3IgKGF1dG8gaXQgPSBjbGFzc0xpc3QuYmVnaW4oKSwgZW5kID0gY2xhc3NMaXN0
LmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29tYmluZWRDbGFzc0xpc3QuYXBw
ZW5kKCppdCk7Ci0gICAgICAgIGNvbWJpbmVkQ2xhc3NMaXN0LmFwcGVuZCgiICIpOwotICAgIH0K
LSAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6Q2xhc3NMaXN0LCBjb21iaW5lZENsYXNz
TGlzdCk7Ci0gICAgCi0gICAgaW50IHIsIGcsIGI7Ci0gICAgb2JqZWN0LmNvbG9yVmFsdWUociwg
ZywgYik7Ci0gICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkNvbG9yVmFsdWUsIENvbG9y
KHIsIGcsIGIpKTsKLSAgICAKLSAgICBpZiAoYm9vbCBpc01hdGhFbGVtZW50ID0gb2JqZWN0Lmlz
TWF0aEVsZW1lbnQoKSkgewotICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNN
YXRoRWxlbWVudCwgaXNNYXRoRWxlbWVudCk7Ci0gICAgICAgIHNldFByb3BlcnR5KEFYUHJvcGVy
dHlOYW1lOjpJc0Fub255bW91c01hdGhPcGVyYXRvciwgb2JqZWN0LmlzQW5vbnltb3VzTWF0aE9w
ZXJhdG9yKCkpOwotICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNNYXRoRnJh
Y3Rpb24sIG9iamVjdC5pc01hdGhGcmFjdGlvbigpKTsKLSAgICAgICAgc2V0UHJvcGVydHkoQVhQ
cm9wZXJ0eU5hbWU6OklzTWF0aEZlbmNlZCwgb2JqZWN0LmlzTWF0aEZlbmNlZCgpKTsKLSAgICAg
ICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0
LCBvYmplY3QuaXNNYXRoU3Vic2NyaXB0U3VwZXJzY3JpcHQoKSk7Ci0gICAgICAgIHNldFByb3Bl
cnR5KEFYUHJvcGVydHlOYW1lOjpJc01hdGhSb3csIG9iamVjdC5pc01hdGhSb3coKSk7Ci0gICAg
ICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc01hdGhVbmRlck92ZXIsIG9iamVjdC5p
c01hdGhVbmRlck92ZXIoKSk7Ci0gICAgICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJ
c01hdGhSb290LCBvYmplY3QuaXNNYXRoUm9vdCgpKTsKLSAgICAgICAgc2V0UHJvcGVydHkoQVhQ
cm9wZXJ0eU5hbWU6OklzTWF0aFNxdWFyZVJvb3QsIG9iamVjdC5pc01hdGhTcXVhcmVSb290KCkp
OwotICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNNYXRoVGV4dCwgb2JqZWN0
LmlzTWF0aFRleHQoKSk7Ci0gICAgICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc01h
dGhOdW1iZXIsIG9iamVjdC5pc01hdGhOdW1iZXIoKSk7Ci0gICAgICAgIHNldFByb3BlcnR5KEFY
UHJvcGVydHlOYW1lOjpJc01hdGhPcGVyYXRvciwgb2JqZWN0LmlzTWF0aE9wZXJhdG9yKCkpOwot
ICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNNYXRoRmVuY2VPcGVyYXRvciwg
b2JqZWN0LmlzTWF0aEZlbmNlT3BlcmF0b3IoKSk7Ci0gICAgICAgIHNldFByb3BlcnR5KEFYUHJv
cGVydHlOYW1lOjpJc01hdGhTZXBhcmF0b3JPcGVyYXRvciwgb2JqZWN0LmlzTWF0aFNlcGFyYXRv
ck9wZXJhdG9yKCkpOwotICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNNYXRo
SWRlbnRpZmllciwgb2JqZWN0LmlzTWF0aElkZW50aWZpZXIoKSk7Ci0gICAgICAgIHNldFByb3Bl
cnR5KEFYUHJvcGVydHlOYW1lOjpJc01hdGhUYWJsZSwgb2JqZWN0LmlzTWF0aFRhYmxlKCkpOwot
ICAgICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6SXNNYXRoVGFibGVSb3csIG9iamVj
dC5pc01hdGhUYWJsZVJvdygpKTsKLSAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6
OklzTWF0aFRhYmxlQ2VsbCwgb2JqZWN0LmlzTWF0aFRhYmxlQ2VsbCgpKTsKLSAgICAgICAgc2V0
UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aE11bHRpc2NyaXB0LCBvYmplY3QuaXNNYXRo
TXVsdGlzY3JpcHQoKSk7Ci0gICAgICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc01h
dGhUb2tlbiwgb2JqZWN0LmlzTWF0aFRva2VuKCkpOwotICAgICAgICBzZXRQcm9wZXJ0eShBWFBy
b3BlcnR5TmFtZTo6TWF0aEZlbmNlZE9wZW5TdHJpbmcsIG9iamVjdC5tYXRoRmVuY2VkT3BlblN0
cmluZygpKTsKLSAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6Ok1hdGhGZW5jZWRD
bG9zZVN0cmluZywgb2JqZWN0Lm1hdGhGZW5jZWRDbG9zZVN0cmluZygpKTsKLSAgICAgICAgc2V0
UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6Ok1hdGhMaW5lVGhpY2tuZXNzLCBvYmplY3QubWF0aExp
bmVUaGlja25lc3MoKSk7Ci0gICAgICAgIHNldE9iamVjdFByb3BlcnR5KEFYUHJvcGVydHlOYW1l
OjpNYXRoUmFkaWNhbmRPYmplY3QsIG9iamVjdC5tYXRoUmFkaWNhbmRPYmplY3QoKSk7Ci0gICAg
ICAgIHNldE9iamVjdFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpNYXRoUm9vdEluZGV4T2JqZWN0
LCBvYmplY3QubWF0aFJvb3RJbmRleE9iamVjdCgpKTsKLSAgICAgICAgc2V0T2JqZWN0UHJvcGVy
dHkoQVhQcm9wZXJ0eU5hbWU6Ok1hdGhVbmRlck9iamVjdCwgb2JqZWN0Lm1hdGhVbmRlck9iamVj
dCgpKTsKLSAgICAgICAgc2V0T2JqZWN0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6Ok1hdGhPdmVy
T2JqZWN0LCBvYmplY3QubWF0aE92ZXJPYmplY3QoKSk7Ci0gICAgICAgIHNldE9iamVjdFByb3Bl
cnR5KEFYUHJvcGVydHlOYW1lOjpNYXRoTnVtZXJhdG9yT2JqZWN0LCBvYmplY3QubWF0aE51bWVy
YXRvck9iamVjdCgpKTsKLSAgICAgICAgc2V0T2JqZWN0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6
Ok1hdGhEZW5vbWluYXRvck9iamVjdCwgb2JqZWN0Lm1hdGhEZW5vbWluYXRvck9iamVjdCgpKTsK
LSAgICAgICAgc2V0T2JqZWN0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6Ok1hdGhCYXNlT2JqZWN0
LCBvYmplY3QubWF0aEJhc2VPYmplY3QoKSk7Ci0gICAgICAgIHNldE9iamVjdFByb3BlcnR5KEFY
UHJvcGVydHlOYW1lOjpNYXRoU3Vic2NyaXB0T2JqZWN0LCBvYmplY3QubWF0aFN1YnNjcmlwdE9i
amVjdCgpKTsKLSAgICAgICAgc2V0T2JqZWN0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6Ok1hdGhT
dXBlcnNjcmlwdE9iamVjdCwgb2JqZWN0Lm1hdGhTdXBlcnNjcmlwdE9iamVjdCgpKTsKLSAgICAg
ICAgc2V0TWF0aHNjcmlwdHMoQVhQcm9wZXJ0eU5hbWU6Ok1hdGhQcmVzY3JpcHRzLCBvYmplY3Qp
OwotICAgICAgICBzZXRNYXRoc2NyaXB0cyhBWFByb3BlcnR5TmFtZTo6TWF0aFBvc3RzY3JpcHRz
LCBvYmplY3QpOwotICAgIH0KLSAgICAKLSAgICBpZiAoaXNSb290KSB7Ci0gICAgICAgIHNldFBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpQcmV2ZW50S2V5Ym9hcmRET01FdmVudERpc3BhdGNoLCBv
YmplY3QucHJldmVudEtleWJvYXJkRE9NRXZlbnREaXNwYXRjaCgpKTsKLSAgICAgICAgc2V0UHJv
cGVydHkoQVhQcm9wZXJ0eU5hbWU6OlNlc3Npb25JRCwgb2JqZWN0LnNlc3Npb25JRCgpKTsKLSAg
ICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkRvY3VtZW50VVJJLCBvYmplY3QuZG9j
dW1lbnRVUkkoKSk7Ci0gICAgICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpEb2N1bWVu
dEVuY29kaW5nLCBvYmplY3QuZG9jdW1lbnRFbmNvZGluZygpKTsKLSAgICB9Ci19Ci0KLXZvaWQg
QVhJc29sYXRlZE9iamVjdDo6c2V0TWF0aHNjcmlwdHMoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBBWENvcmVPYmplY3QmIG9iamVjdCkKLXsKLSAgICBBY2Nlc3NpYmlsaXR5TWF0aE11bHRp
c2NyaXB0UGFpcnMgcGFpcnM7Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBBWFByb3BlcnR5TmFt
ZTo6TWF0aFByZXNjcmlwdHMpCi0gICAgICAgIG9iamVjdC5tYXRoUHJlc2NyaXB0cyhwYWlycyk7
Ci0gICAgZWxzZSBpZiAocHJvcGVydHlOYW1lID09IEFYUHJvcGVydHlOYW1lOjpNYXRoUG9zdHNj
cmlwdHMpCi0gICAgICAgIG9iamVjdC5tYXRoUG9zdHNjcmlwdHMocGFpcnMpOwotICAgIAotICAg
IHNpemVfdCBtYXRoU2l6ZSA9IHBhaXJzLnNpemUoKTsKLSAgICBpZiAoIW1hdGhTaXplKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgVmVjdG9yPEFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVN
YXRoTXVsdGlzY3JpcHRQYWlyPiBpZFBhaXJzOwotICAgIGlkUGFpcnMucmVzZXJ2ZUNhcGFjaXR5
KG1hdGhTaXplKTsKLSAgICBmb3IgKGF1dG8gbWF0aFBhaXIgOiBwYWlycykgewotICAgICAgICBB
Y2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlTWF0aE11bHRpc2NyaXB0UGFpciBpZFBhaXI7Ci0gICAg
ICAgIGlmIChtYXRoUGFpci5maXJzdCkKLSAgICAgICAgICAgIGlkUGFpci5maXJzdCA9IG1hdGhQ
YWlyLmZpcnN0LT5vYmplY3RJRCgpOwotICAgICAgICBpZiAobWF0aFBhaXIuc2Vjb25kKQotICAg
ICAgICAgICAgaWRQYWlyLnNlY29uZCA9IG1hdGhQYWlyLnNlY29uZC0+b2JqZWN0SUQoKTsKLSAg
ICAgICAgaWRQYWlycy51bmNoZWNrZWRBcHBlbmQoaWRQYWlyKTsKLSAgICB9Ci0gICAgc2V0UHJv
cGVydHkocHJvcGVydHlOYW1lLCBpZFBhaXJzKTsKLX0KLQotdm9pZCBBWElzb2xhdGVkT2JqZWN0
OjpzZXRPYmplY3RQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEFYQ29yZU9i
amVjdCogb2JqZWN0KQotewotICAgIGlmIChvYmplY3QpCi0gICAgICAgIHNldFByb3BlcnR5KHBy
b3BlcnR5TmFtZSwgb2JqZWN0LT5vYmplY3RJRCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHNldFBy
b3BlcnR5KHByb3BlcnR5TmFtZSwgbnVsbHB0ciwgdHJ1ZSk7Ci19Ci0KLXZvaWQgQVhJc29sYXRl
ZE9iamVjdDo6c2V0T2JqZWN0VmVjdG9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuKQotewotICAgIHNpemVf
dCBjaGlsZHJlblNpemUgPSBjaGlsZHJlbi5zaXplKCk7Ci0gICAgaWYgKCFjaGlsZHJlblNpemUp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBWZWN0b3I8QVhJRD4gY2hpbGRyZW5WZWN0b3I7
Ci0gICAgY2hpbGRyZW5WZWN0b3IucmVzZXJ2ZUNhcGFjaXR5KGNoaWxkcmVuU2l6ZSk7Ci0gICAg
Zm9yIChhdXRvIGNoaWxkT2JqZWN0IDogY2hpbGRyZW4pCi0gICAgICAgIGNoaWxkcmVuVmVjdG9y
LnVuY2hlY2tlZEFwcGVuZChjaGlsZE9iamVjdC0+b2JqZWN0SUQoKSk7Ci0gICAgc2V0UHJvcGVy
dHkocHJvcGVydHlOYW1lLCBjaGlsZHJlblZlY3Rvcik7Ci19Ci0KLXZvaWQgQVhJc29sYXRlZE9i
amVjdDo6c2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBBdHRyaWJ1dGVW
YWx1ZVZhcmlhbnQmJiB2YWx1ZSwgYm9vbCBzaG91bGRSZW1vdmUpCi17Ci0gICAgQVNTRVJUKCFt
X2luaXRpYWxpemVkKTsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKHNo
b3VsZFJlbW92ZSkKLSAgICAgICAgbV9hdHRyaWJ1dGVNYXAucmVtb3ZlKHByb3BlcnR5TmFtZSk7
Ci0gICAgZWxzZQotICAgICAgICBtX2F0dHJpYnV0ZU1hcC5zZXQocHJvcGVydHlOYW1lLCB2YWx1
ZSk7Ci19Ci0KLXZvaWQgQVhJc29sYXRlZE9iamVjdDo6YXBwZW5kQ2hpbGQoQVhJRCBheElEKQot
ewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgbV9jaGlsZHJlbklEcy5hcHBlbmQo
YXhJRCk7Ci19Ci0KLXZvaWQgQVhJc29sYXRlZE9iamVjdDo6c2V0UGFyZW50KEFYSUQgcGFyZW50
KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgbV9wYXJlbnQgPSBwYXJlbnQ7
Ci19Ci0KLXZvaWQgQVhJc29sYXRlZE9iamVjdDo6ZGV0YWNoKEFjY2Vzc2liaWxpdHlEZXRhY2ht
ZW50VHlwZSwgQVhPYmplY3RDYWNoZSopCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
LSAgICBmb3IgKGNvbnN0IGF1dG8mIGNoaWxkSUQgOiBtX2NoaWxkcmVuSURzKQotICAgICAgICB0
cmVlKCktPm5vZGVGb3JJRChjaGlsZElEKS0+ZGV0YWNoRnJvbVBhcmVudCgpOwotCi0gICAgbV9j
aGlsZHJlbklEcy5jbGVhcigpOwotfQotCi1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzRGV0YWNo
ZWQoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotdm9pZCBBWElzb2xhdGVkT2JqZWN0OjpkZXRhY2hGcm9tUGFyZW50KCkKLXsKLSAg
ICBtX3BhcmVudCA9IEludmFsaWRBWElEOwotfQotCi12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmRp
c2Nvbm5lY3QoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgdHJlZSgpLT5h
eE9iamVjdENhY2hlKCktPmRldGFjaFdyYXBwZXIodGhpcywgQWNjZXNzaWJpbGl0eURldGFjaG1l
bnRUeXBlOjpFbGVtZW50RGVzdHJveWVkKTsKLSAgICBkZXRhY2goQWNjZXNzaWJpbGl0eURldGFj
aG1lbnRUeXBlOjpFbGVtZW50RGVzdHJveWVkKTsKLSAgICBzZXRPYmplY3RJRChJbnZhbGlkQVhJ
RCk7Ci19Ci0KLXZvaWQgQVhJc29sYXRlZE9iamVjdDo6c2V0VHJlZUlkZW50aWZpZXIoQVhJc29s
YXRlZFRyZWVJRCB0cmVlSWRlbnRpZmllcikKLXsKLSAgICBtX3RyZWVJZGVudGlmaWVyID0gdHJl
ZUlkZW50aWZpZXI7Ci0gICAgaWYgKGF1dG8gdHJlZSA9IEFYSXNvbGF0ZWRUcmVlOjp0cmVlRm9y
SUQobV90cmVlSWRlbnRpZmllcikpCi0gICAgICAgIG1fY2FjaGVkVHJlZSA9IHRyZWU7Ci19Ci0K
LWNvbnN0IEFYQ29yZU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBBWElzb2xh
dGVkT2JqZWN0OjpjaGlsZHJlbihib29sKQotewotICAgIGlmICghaXNNYWluVGhyZWFkKCkpIHsK
LSAgICAgICAgbV9jaGlsZHJlbi5jbGVhcigpOwotICAgICAgICBtX2NoaWxkcmVuLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkobV9jaGlsZHJlbklEcy5zaXplKCkpOwotICAgICAgICBhdXRvIHRyZWUg
PSB0aGlzLT50cmVlKCk7Ci0gICAgICAgIGZvciAoYXV0byBjaGlsZElEIDogbV9jaGlsZHJlbklE
cykKLSAgICAgICAgICAgIG1fY2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKHRyZWUtPm5vZGVGb3JJ
RChjaGlsZElEKSk7Ci0gICAgfQotICAgIHJldHVybiBtX2NoaWxkcmVuOwotfQotCi1ib29sIEFY
SXNvbGF0ZWRPYmplY3Q6OmlzRGV0YWNoZWRGcm9tUGFyZW50KCkKLXsKLSAgICBpZiAocGFyZW50
KCkgIT0gSW52YWxpZEFYSUQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIENoZWNr
IHdoZXRoZXIgdGhpcyBpcyB0aGUgcm9vdCBub2RlLCBpbiB3aGljaCBjYXNlIHdlIHNob3VsZCBy
ZXR1cm4gZmFsc2UuCi0gICAgaWYgKGF1dG8gcm9vdCA9IHRyZWUoKS0+cm9vdE5vZGUoKSkKLSAg
ICAgICAgcmV0dXJuIHJvb3QtPm9iamVjdElEKCkgIT0gbV9pZDsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLXZvaWQgQVhJc29sYXRlZE9iamVjdDo6YWNjZXNzaWJpbGl0eVRleHQoVmVjdG9yPEFj
Y2Vzc2liaWxpdHlUZXh0PiYgdGV4dHMpIGNvbnN0Ci17Ci0gICAgYXV0byBpc29sYXRlZFRleHRz
ID0gdmVjdG9yQXR0cmlidXRlVmFsdWU8QWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZVRleHQ+KEFY
UHJvcGVydHlOYW1lOjpBY2Nlc3NpYmlsaXR5VGV4dCk7Ci0gICAgZm9yIChhdXRvIGlzb2xhdGVk
VGV4dCA6IGlzb2xhdGVkVGV4dHMpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eVRleHQgdGV4dChp
c29sYXRlZFRleHQudGV4dCwgaXNvbGF0ZWRUZXh0LnRleHRTb3VyY2UpOwotICAgICAgICBmb3Ig
KGF1dG8gYXhJRCA6IGlzb2xhdGVkVGV4dC50ZXh0RWxlbWVudHMpIHsKLSAgICAgICAgICAgIGlm
IChhdXRvIG9iamVjdCA9IHRyZWUoKS0+bm9kZUZvcklEKGF4SUQpKQotICAgICAgICAgICAgICAg
IHRleHQudGV4dEVsZW1lbnRzLmFwcGVuZChvYmplY3QpOwotICAgICAgICB9Ci0gICAgICAgIHRl
eHRzLmFwcGVuZCh0ZXh0KTsKLSAgICB9Ci19Ci0KLXZvaWQgQVhJc29sYXRlZE9iamVjdDo6Y2xh
c3NMaXN0KFZlY3RvcjxTdHJpbmc+JiBsaXN0KSBjb25zdAotewotICAgIFN0cmluZyBjbGFzc0xp
c3QgPSBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q2xhc3NMaXN0KTsKLSAg
ICBsaXN0LmFwcGVuZFZlY3RvcihjbGFzc0xpc3Quc3BsaXQoIiAiKSk7Ci19Ci0KLXVpbnQ2NF90
IEFYSXNvbGF0ZWRPYmplY3Q6OnNlc3Npb25JRCgpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8gcm9v
dCA9IHRyZWUoKS0+cm9vdE5vZGUoKSkKLSAgICAgICAgcmV0dXJuIHJvb3QtPnVpbnQ2NEF0dHJp
YnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTZXNzaW9uSUQpOwotICAgIHJldHVybiAwOwotfQot
Ci1TdHJpbmcgQVhJc29sYXRlZE9iamVjdDo6ZG9jdW1lbnRVUkkoKSBjb25zdAotewotICAgIGlm
IChhdXRvIHJvb3QgPSB0cmVlKCktPnJvb3ROb2RlKCkpCi0gICAgICAgIHJldHVybiByb290LT5z
dHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6RG9jdW1lbnRVUkkpOwotICAgIHJl
dHVybiBTdHJpbmcoKTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0OjpwcmV2ZW50S2V5Ym9h
cmRET01FdmVudERpc3BhdGNoKCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byByb290ID0gdHJlZSgp
LT5yb290Tm9kZSgpKQotICAgICAgICByZXR1cm4gcm9vdC0+Ym9vbEF0dHJpYnV0ZVZhbHVlKEFY
UHJvcGVydHlOYW1lOjpQcmV2ZW50S2V5Ym9hcmRET01FdmVudERpc3BhdGNoKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLVN0cmluZyBBWElzb2xhdGVkT2JqZWN0Ojpkb2N1bWVudEVuY29kaW5n
KCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byByb290ID0gdHJlZSgpLT5yb290Tm9kZSgpKQotICAg
ICAgICByZXR1cm4gcm9vdC0+c3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkRv
Y3VtZW50RW5jb2RpbmcpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotdm9pZCBBWElzb2xh
dGVkT2JqZWN0OjppbnNlcnRNYXRoUGFpcnMoVmVjdG9yPEFjY2Vzc2liaWxpdHlJc29sYXRlZFRy
ZWVNYXRoTXVsdGlzY3JpcHRQYWlyPiYgaXNvbGF0ZWRQYWlycywgQWNjZXNzaWJpbGl0eU1hdGhN
dWx0aXNjcmlwdFBhaXJzJiBwYWlycykKLXsKLSAgICBmb3IgKGF1dG8gcGFpciA6IGlzb2xhdGVk
UGFpcnMpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlwdFBhaXIgcHJlc2Ny
aXB0UGFpcjsKLSAgICAgICAgaWYgKGF1dG8qIGNvcmVPYmplY3QgPSB0cmVlKCktPm5vZGVGb3JJ
RChwYWlyLmZpcnN0KS5nZXQoKSkKLSAgICAgICAgICAgIHByZXNjcmlwdFBhaXIuZmlyc3QgPSBj
b3JlT2JqZWN0OwotICAgICAgICBpZiAoYXV0byogY29yZU9iamVjdCA9IHRyZWUoKS0+bm9kZUZv
cklEKHBhaXIuc2Vjb25kKS5nZXQoKSkKLSAgICAgICAgICAgIHByZXNjcmlwdFBhaXIuc2Vjb25k
ID0gY29yZU9iamVjdDsKLSAgICAgICAgcGFpcnMuYXBwZW5kKHByZXNjcmlwdFBhaXIpOwotICAg
IH0KLX0KLQotdm9pZCBBWElzb2xhdGVkT2JqZWN0OjptYXRoUHJlc2NyaXB0cyhBY2Nlc3NpYmls
aXR5TWF0aE11bHRpc2NyaXB0UGFpcnMmIHBhaXJzKQotewotICAgIGF1dG8gaXNvbGF0ZWRQYWly
cyA9IHZlY3RvckF0dHJpYnV0ZVZhbHVlPEFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVNYXRoTXVs
dGlzY3JpcHRQYWlyPihBWFByb3BlcnR5TmFtZTo6TWF0aFByZXNjcmlwdHMpOwotICAgIGluc2Vy
dE1hdGhQYWlycyhpc29sYXRlZFBhaXJzLCBwYWlycyk7Ci19Ci0KLXZvaWQgQVhJc29sYXRlZE9i
amVjdDo6bWF0aFBvc3RzY3JpcHRzKEFjY2Vzc2liaWxpdHlNYXRoTXVsdGlzY3JpcHRQYWlycyYg
cGFpcnMpCi17Ci0gICAgYXV0byBpc29sYXRlZFBhaXJzID0gdmVjdG9yQXR0cmlidXRlVmFsdWU8
QWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1hdGhNdWx0aXNjcmlwdFBhaXI+KEFYUHJvcGVydHlO
YW1lOjpNYXRoUG9zdHNjcmlwdHMpOwotICAgIGluc2VydE1hdGhQYWlycyhpc29sYXRlZFBhaXJz
LCBwYWlycyk7Ci19Ci0KLUFYQ29yZU9iamVjdCogQVhJc29sYXRlZE9iamVjdDo6Zm9jdXNlZFVJ
RWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8gZm9jdXNlZEVsZW1lbnQgPSB0cmVlKCkt
PmZvY3VzZWRVSUVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGZvY3VzZWRFbGVtZW50LmdldCgp
OwotICAgIHJldHVybiBudWxscHRyOwotfQotICAgIAotQVhDb3JlT2JqZWN0KiBBWElzb2xhdGVk
T2JqZWN0OjpwYXJlbnRPYmplY3RVbmlnbm9yZWQoKSBjb25zdAotewotICAgIHJldHVybiB0cmVl
KCktPm5vZGVGb3JJRChwYXJlbnQoKSkuZ2V0KCk7Ci19Ci0KLUFYQ29yZU9iamVjdCogQVhJc29s
YXRlZE9iamVjdDo6c2Nyb2xsQmFyKEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbiBvcmllbnRhdGlv
bikKLXsKLSAgICByZXR1cm4gb2JqZWN0QXR0cmlidXRlVmFsdWUob3JpZW50YXRpb24gPT0gQWNj
ZXNzaWJpbGl0eU9yaWVudGF0aW9uOjpWZXJ0aWNhbCA/IEFYUHJvcGVydHlOYW1lOjpWZXJ0aWNh
bFNjcm9sbEJhciA6IEFYUHJvcGVydHlOYW1lOjpIb3Jpem9udGFsU2Nyb2xsQmFyKTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVT4KLXZvaWQgQVhJc29sYXRlZE9iamVjdDo6cGVyZm9ybUZ1bmN0
aW9uT25NYWluVGhyZWFkKFUmJiBsYW1iZGEpCi17Ci0gICAgQWNjZXNzaWJpbGl0eTo6cGVyZm9y
bUZ1bmN0aW9uT25NYWluVGhyZWFkKFsmbGFtYmRhLCB0aGlzXSAoKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBvYmplY3QgPSBhc3NvY2lhdGVkQVhPYmplY3QoKSkKLSAgICAgICAgICAgIGxhbWJkYShv
YmplY3QpOwotICAgIH0pOwotfQotCi12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNldEFSSUFHcmFi
YmVkKGJvb2wgdmFsdWUpCi17Ci0gICAgcGVyZm9ybUZ1bmN0aW9uT25NYWluVGhyZWFkKFsmdmFs
dWVdKEFYQ29yZU9iamVjdCogb2JqZWN0KSB7Ci0gICAgICAgIG9iamVjdC0+c2V0QVJJQUdyYWJi
ZWQodmFsdWUpOwotICAgIH0pOwotfQotCi12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNldElzRXhw
YW5kZWQoYm9vbCB2YWx1ZSkKLXsKLSAgICBwZXJmb3JtRnVuY3Rpb25Pbk1haW5UaHJlYWQoWyZ2
YWx1ZV0oQVhDb3JlT2JqZWN0KiBvYmplY3QpIHsKLSAgICAgICAgb2JqZWN0LT5zZXRJc0V4cGFu
ZGVkKHZhbHVlKTsKLSAgICB9KTsKLX0KLXZvaWQgQVhJc29sYXRlZE9iamVjdDo6c2V0VmFsdWUo
ZmxvYXQgdmFsdWUpCi17Ci0gICAgcGVyZm9ybUZ1bmN0aW9uT25NYWluVGhyZWFkKFsmdmFsdWVd
KEFYQ29yZU9iamVjdCogb2JqZWN0KSB7Ci0gICAgICAgIG9iamVjdC0+c2V0VmFsdWUodmFsdWUp
OwotICAgIH0pOwotfQotCi12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNldFNlbGVjdGVkKGJvb2wg
dmFsdWUpCi17Ci0gICAgcGVyZm9ybUZ1bmN0aW9uT25NYWluVGhyZWFkKFsmdmFsdWVdKEFYQ29y
ZU9iamVjdCogb2JqZWN0KSB7Ci0gICAgICAgIG9iamVjdC0+c2V0U2VsZWN0ZWQodmFsdWUpOwot
ICAgIH0pOwotfQotdm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRTZWxlY3RlZFJvd3MoQWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yJiB2YWx1ZSkKLXsKLSAgICBwZXJmb3JtRnVuY3Rpb25Pbk1h
aW5UaHJlYWQoWyZ2YWx1ZV0oQVhDb3JlT2JqZWN0KiBvYmplY3QpIHsKLSAgICAgICAgb2JqZWN0
LT5zZXRTZWxlY3RlZFJvd3ModmFsdWUpOwotICAgIH0pOwotfQotCi12b2lkIEFYSXNvbGF0ZWRP
YmplY3Q6OnNldEZvY3VzZWQoYm9vbCB2YWx1ZSkKLXsKLSAgICBwZXJmb3JtRnVuY3Rpb25Pbk1h
aW5UaHJlYWQoWyZ2YWx1ZV0oQVhDb3JlT2JqZWN0KiBvYmplY3QpIHsKLSAgICAgICAgb2JqZWN0
LT5zZXRGb2N1c2VkKHZhbHVlKTsKLSAgICB9KTsKLX0KLQotdm9pZCBBWElzb2xhdGVkT2JqZWN0
OjpzZXRTZWxlY3RlZFRleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBwZXJmb3JtRnVu
Y3Rpb25Pbk1haW5UaHJlYWQoWyZ2YWx1ZV0oQVhDb3JlT2JqZWN0KiBvYmplY3QpIHsKLSAgICAg
ICAgb2JqZWN0LT5zZXRTZWxlY3RlZFRleHQodmFsdWUpOwotICAgIH0pOwotfQotCi12b2lkIEFY
SXNvbGF0ZWRPYmplY3Q6OnNldFNlbGVjdGVkVGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdl
JiB2YWx1ZSkKLXsKLSAgICBwZXJmb3JtRnVuY3Rpb25Pbk1haW5UaHJlYWQoWyZ2YWx1ZV0oQVhD
b3JlT2JqZWN0KiBvYmplY3QpIHsKLSAgICAgICAgb2JqZWN0LT5zZXRTZWxlY3RlZFRleHRSYW5n
ZSh2YWx1ZSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgQVhJc29sYXRlZE9iamVjdDo6c2V0VmFsdWUo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBwZXJmb3JtRnVuY3Rpb25Pbk1haW5UaHJlYWQo
WyZ2YWx1ZV0oQVhDb3JlT2JqZWN0KiBvYmplY3QpIHsKLSAgICAgICAgb2JqZWN0LT5zZXRWYWx1
ZSh2YWx1ZSk7Ci0gICAgfSk7Ci19Ci0KLSNpZiBQTEFURk9STShDT0NPQSkgJiYgIVBMQVRGT1JN
KElPU19GQU1JTFkpCi12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNldENhcmV0QnJvd3NpbmdFbmFi
bGVkKGJvb2wgdmFsdWUpCi17Ci0gICAgcGVyZm9ybUZ1bmN0aW9uT25NYWluVGhyZWFkKFsmdmFs
dWVdKEFYQ29yZU9iamVjdCogb2JqZWN0KSB7Ci0gICAgICAgIG9iamVjdC0+c2V0Q2FyZXRCcm93
c2luZ0VuYWJsZWQodmFsdWUpOwotICAgIH0pOwotfQotI2VuZGlmCi0KLXZvaWQgQVhJc29sYXRl
ZE9iamVjdDo6c2V0UHJldmVudEtleWJvYXJkRE9NRXZlbnREaXNwYXRjaChib29sIHZhbHVlKQot
ewotICAgIHBlcmZvcm1GdW5jdGlvbk9uTWFpblRocmVhZChbJnZhbHVlXShBWENvcmVPYmplY3Qq
IG9iamVjdCkgewotICAgICAgICBvYmplY3QtPnNldFByZXZlbnRLZXlib2FyZERPTUV2ZW50RGlz
cGF0Y2godmFsdWUpOwotICAgIH0pOwotfQotCi12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmNvbG9y
VmFsdWUoaW50JiByLCBpbnQmIGcsIGludCYgYikgY29uc3QKLXsKLSAgICBhdXRvIGNvbG9yID0g
Y29sb3JBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q29sb3JWYWx1ZSk7Ci0gICAgciA9
IGNvbG9yLnJlZCgpOwotICAgIGcgPSBjb2xvci5ncmVlbigpOwotICAgIGIgPSBjb2xvci5ibHVl
KCk7Ci19Ci0KLUFYQ29yZU9iamVjdCogQVhJc29sYXRlZE9iamVjdDo6YWNjZXNzaWJpbGl0eUhp
dFRlc3QoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAotewotICAgIGlmICghcmVsYXRpdmVG
cmFtZSgpLmNvbnRhaW5zKHBvaW50KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgZm9y
IChjb25zdCBhdXRvJiBjaGlsZElEIDogbV9jaGlsZHJlbklEcykgewotICAgICAgICBhdXRvIGNo
aWxkID0gdHJlZSgpLT5ub2RlRm9ySUQoY2hpbGRJRCk7Ci0gICAgICAgIEFTU0VSVChjaGlsZCk7
Ci0gICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC0+cmVsYXRpdmVGcmFtZSgpLmNvbnRhaW5zKHBv
aW50KSkKLSAgICAgICAgICAgIHJldHVybiBjaGlsZC0+YWNjZXNzaWJpbGl0eUhpdFRlc3QocG9p
bnQpOwotICAgIH0KLSAgICByZXR1cm4gY29uc3RfY2FzdDxBWElzb2xhdGVkT2JqZWN0Kj4odGhp
cyk7Ci19Ci0KLUFYSXNvbGF0ZWRUcmVlKiBBWElzb2xhdGVkT2JqZWN0Ojp0cmVlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9jYWNoZWRUcmVlLmdldCgpOwotfQotCi1JbnRQb2ludCBBWElzb2xh
dGVkT2JqZWN0OjppbnRQb2ludEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSkgY29uc3QKLXsKLSAgICBhdXRvIHZhbHVlID0gbV9hdHRyaWJ1dGVNYXAuZ2V0KHByb3Bl
cnR5TmFtZSk7Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24odmFsdWUsCi0gICAgICAgIFtdIChJ
bnRQb2ludCYgdHlwZWRWYWx1ZSkgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKLSAgICAgICAgW10g
KGF1dG8mKSB7IHJldHVybiBJbnRQb2ludCgpOyB9Ci0gICAgKTsKLX0KLQotQVhDb3JlT2JqZWN0
KiBBWElzb2xhdGVkT2JqZWN0OjpvYmplY3RBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUpIGNvbnN0Ci17Ci0gICAgYXV0byB2YWx1ZSA9IG1fYXR0cmlidXRlTWFwLmdl
dChwcm9wZXJ0eU5hbWUpOwotICAgIEFYSUQgbm9kZUlEID0gV1RGOjpzd2l0Y2hPbih2YWx1ZSwK
LSAgICAgICAgW10gKEFYSUQmIHR5cGVkVmFsdWUpIHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCi0g
ICAgICAgIFtdIChhdXRvJikgeyByZXR1cm4gSW52YWxpZEFYSUQ7IH0KLSAgICApOwotICAgIAot
ICAgIHJldHVybiB0cmVlKCktPm5vZGVGb3JJRChub2RlSUQpLmdldCgpOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotVCBBWElzb2xhdGVkT2JqZWN0OjpyZWN0QXR0cmlidXRlVmFsdWUoQVhQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAotewotICAgIGF1dG8gdmFsdWUgPSBtX2F0
dHJpYnV0ZU1hcC5nZXQocHJvcGVydHlOYW1lKTsKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbih2
YWx1ZSwKLSAgICAgICAgW10gKFQmIHR5cGVkVmFsdWUpIHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0s
Ci0gICAgICAgIFtdIChhdXRvJikgeyByZXR1cm4gVCB7IH07IH0KLSAgICApOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotVmVjdG9yPFQ+IEFYSXNvbGF0ZWRPYmplY3Q6OnZlY3RvckF0dHJp
YnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QKLXsKLSAgICBhdXRv
IHZhbHVlID0gbV9hdHRyaWJ1dGVNYXAuZ2V0KHByb3BlcnR5TmFtZSk7Ci0gICAgcmV0dXJuIFdU
Rjo6c3dpdGNoT24odmFsdWUsCi0gICAgICAgIFtdIChWZWN0b3I8VD4mIHR5cGVkVmFsdWUpIHsg
cmV0dXJuIHR5cGVkVmFsdWU7IH0sCi0gICAgICAgIFtdIChhdXRvJikgeyByZXR1cm4gVmVjdG9y
PFQ+KCk7IH0KLSAgICApOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotT3B0aW9uU2V0PFQ+
IEFYSXNvbGF0ZWRPYmplY3Q6Om9wdGlvblNldEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSkgY29uc3QKLXsKLSAgICBhdXRvIHZhbHVlID0gbV9hdHRyaWJ1dGVNYXAu
Z2V0KHByb3BlcnR5TmFtZSk7Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24odmFsdWUsCi0gICAg
ICAgIFtdIChUJiB0eXBlZFZhbHVlKSB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAotICAgICAgICBb
XSAoYXV0byYpIHsgcmV0dXJuIE9wdGlvblNldDxUPigpOyB9Ci0gICAgKTsKLX0KLQotdWludDY0
X3QgQVhJc29sYXRlZE9iamVjdDo6dWludDY0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lKSBjb25zdAotewotICAgIGF1dG8gdmFsdWUgPSBtX2F0dHJpYnV0ZU1hcC5n
ZXQocHJvcGVydHlOYW1lKTsKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbih2YWx1ZSwKLSAgICAg
ICAgW10gKHVpbnQ2NF90JiB0eXBlZFZhbHVlKSB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAotICAg
ICAgICBbXSAoYXV0byYpIHsgcmV0dXJuIDA7IH0KLSAgICApOwotfQotCi1VUkwgQVhJc29sYXRl
ZE9iamVjdDo6dXJsQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBj
b25zdAotewotICAgIGF1dG8gdmFsdWUgPSBtX2F0dHJpYnV0ZU1hcC5nZXQocHJvcGVydHlOYW1l
KTsKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbih2YWx1ZSwKLSAgICAgICAgW10gKFVSTCYgdHlw
ZWRWYWx1ZSkgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKLSAgICAgICAgW10gKGF1dG8mKSB7IHJl
dHVybiBVUkwoKTsgfQotICAgICk7Ci19Ci0KLUNvbG9yIEFYSXNvbGF0ZWRPYmplY3Q6OmNvbG9y
QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAotewotICAg
IGF1dG8gdmFsdWUgPSBtX2F0dHJpYnV0ZU1hcC5nZXQocHJvcGVydHlOYW1lKTsKLSAgICByZXR1
cm4gV1RGOjpzd2l0Y2hPbih2YWx1ZSwKLSAgICAgICAgW10gKENvbG9yJiB0eXBlZFZhbHVlKSB7
IHJldHVybiB0eXBlZFZhbHVlOyB9LAotICAgICAgICBbXSAoYXV0byYpIHsgcmV0dXJuIENvbG9y
KCk7IH0KLSAgICApOwotfQotCi1mbG9hdCBBWElzb2xhdGVkT2JqZWN0OjpmbG9hdEF0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QKLXsKLSAgICBhdXRvIHZh
bHVlID0gbV9hdHRyaWJ1dGVNYXAuZ2V0KHByb3BlcnR5TmFtZSk7Ci0gICAgcmV0dXJuIFdURjo6
c3dpdGNoT24odmFsdWUsCi0gICAgICAgIFtdIChmbG9hdCYgdHlwZWRWYWx1ZSkgeyByZXR1cm4g
dHlwZWRWYWx1ZTsgfSwKLSAgICAgICAgW10gKGF1dG8mKSB7IHJldHVybiAwOyB9Ci0gICAgKTsK
LX0KLQotZG91YmxlIEFYSXNvbGF0ZWRPYmplY3Q6OmRvdWJsZUF0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QKLXsKLSAgICBhdXRvIHZhbHVlID0gbV9hdHRy
aWJ1dGVNYXAuZ2V0KHByb3BlcnR5TmFtZSk7Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24odmFs
dWUsCi0gICAgICAgIFtdIChkb3VibGUmIHR5cGVkVmFsdWUpIHsgcmV0dXJuIHR5cGVkVmFsdWU7
IH0sCi0gICAgICAgIFtdIChhdXRvJikgeyByZXR1cm4gMDsgfQotICAgICk7Ci19Ci0KLXVuc2ln
bmVkIEFYSXNvbGF0ZWRPYmplY3Q6OnVuc2lnbmVkQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lKSBjb25zdAotewotICAgIGF1dG8gdmFsdWUgPSBtX2F0dHJpYnV0ZU1h
cC5nZXQocHJvcGVydHlOYW1lKTsKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbih2YWx1ZSwKLSAg
ICAgICAgW10gKHVuc2lnbmVkJiB0eXBlZFZhbHVlKSB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAot
ICAgICAgICBbXSAoYXV0byYpIHsgcmV0dXJuIDA7IH0KLSAgICApOwotfQotCi1ib29sIEFYSXNv
bGF0ZWRPYmplY3Q6OmJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUpIGNvbnN0Ci17Ci0gICAgYXV0byB2YWx1ZSA9IG1fYXR0cmlidXRlTWFwLmdldChwcm9wZXJ0
eU5hbWUpOwotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKHZhbHVlLAotICAgICAgICBbXSAoYm9v
bCYgdHlwZWRWYWx1ZSkgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKLSAgICAgICAgW10gKGF1dG8m
KSB7IHJldHVybiBmYWxzZTsgfQotICAgICk7Ci19Ci0KLWNvbnN0IFN0cmluZyBBWElzb2xhdGVk
T2JqZWN0OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUp
IGNvbnN0Ci17Ci0gICAgYXV0byB2YWx1ZSA9IG1fYXR0cmlidXRlTWFwLmdldChwcm9wZXJ0eU5h
bWUpOwotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKHZhbHVlLAotICAgICAgICBbXSAoU3RyaW5n
JiB0eXBlZFZhbHVlKSB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAotICAgICAgICBbXSAoYXV0byYp
IHsgcmV0dXJuIGVtcHR5U3RyaW5nKCk7IH0KLSAgICApOwotfQotCi1pbnQgQVhJc29sYXRlZE9i
amVjdDo6aW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25z
dAotewotICAgIGF1dG8gdmFsdWUgPSBtX2F0dHJpYnV0ZU1hcC5nZXQocHJvcGVydHlOYW1lKTsK
LSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbih2YWx1ZSwKLSAgICAgICAgW10gKGludCYgdHlwZWRW
YWx1ZSkgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKLSAgICAgICAgW10gKGF1dG8mKSB7IHJldHVy
biAwOyB9Ci0gICAgKTsKLX0KLQotdm9pZCBBWElzb2xhdGVkT2JqZWN0OjpmaWxsQ2hpbGRyZW5W
ZWN0b3JGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4pIGNvbnN0Ci17Ci0gICAgVmVjdG9yPEFYSUQ+IGNo
aWxkSURzID0gdmVjdG9yQXR0cmlidXRlVmFsdWU8QVhJRD4ocHJvcGVydHlOYW1lKTsKLSAgICBj
aGlsZHJlbi5yZXNlcnZlQ2FwYWNpdHkoY2hpbGRJRHMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8g
Y2hpbGRJRCA6IGNoaWxkSURzKSB7Ci0gICAgICAgIGlmIChhdXRvIG9iamVjdCA9IHRyZWUoKS0+
bm9kZUZvcklEKGNoaWxkSUQpKQotICAgICAgICAgICAgY2hpbGRyZW4udW5jaGVja2VkQXBwZW5k
KG9iamVjdCk7Ci0gICAgfQotfQotCi12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnVwZGF0ZUJhY2tp
bmdTdG9yZSgpCi17Ci0gICAgLy8gVGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCBvbiBlaXRoZXIg
dGhlIG1haW4gb3IgdGhlIEFYIHRocmVhZHMuCi0gICAgLy8gSXQgY2FuIGJlIGNhbGxlZCBpbiB0
aGUgbWFpbiB0aHJlYWQgZnJvbSBbV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNz
aWJpbGl0eUZvY3VzZWRVSUVsZW1lbnRdLgotICAgIC8vIFVwZGF0ZSB0aGUgSXNvbGF0ZWRUcmVl
IG9ubHkgaWYgaXQgaXMgY2FsbGVkIG9uIHRoZSBBWCB0aHJlYWQuCi0gICAgaWYgKCFpc01haW5U
aHJlYWQoKSkgewotICAgICAgICBpZiAoYXV0byB0cmVlID0gdGhpcy0+dHJlZSgpKQotICAgICAg
ICAgICAgdHJlZS0+YXBwbHlQZW5kaW5nQ2hhbmdlcygpOwotICAgIH0KLX0KLQotVmVjdG9yPFJl
ZlB0cjxSYW5nZT4+IEFYSXNvbGF0ZWRPYmplY3Q6OmZpbmRUZXh0UmFuZ2VzKEFjY2Vzc2liaWxp
dHlTZWFyY2hUZXh0Q3JpdGVyaWEgY29uc3QmIGNyaXRlcmlhKSBjb25zdAotewotICAgIHJldHVy
biBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8VmVjdG9yPFJlZlB0
cjxSYW5nZT4+PihbJmNyaXRlcmlhLCB0aGlzXSAoKSAtPiBWZWN0b3I8UmVmUHRyPFJhbmdlPj4g
ewotICAgICAgICBpZiAoYXV0byogb2JqZWN0ID0gYXNzb2NpYXRlZEFYT2JqZWN0KCkpCi0gICAg
ICAgICAgICByZXR1cm4gb2JqZWN0LT5maW5kVGV4dFJhbmdlcyhjcml0ZXJpYSk7Ci0gICAgICAg
IHJldHVybiBWZWN0b3I8UmVmUHRyPFJhbmdlPj4oKTsKLSAgICB9KTsKLX0KLQotVmVjdG9yPFN0
cmluZz4gQVhJc29sYXRlZE9iamVjdDo6cGVyZm9ybVRleHRPcGVyYXRpb24oQWNjZXNzaWJpbGl0
eVRleHRPcGVyYXRpb24gY29uc3QmIHRleHRPcGVyYXRpb24pCi17Ci0gICAgcmV0dXJuIEFjY2Vz
c2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxWZWN0b3I8U3RyaW5nPj4oWyZ0
ZXh0T3BlcmF0aW9uLCB0aGlzXSAoKSAtPiBWZWN0b3I8U3RyaW5nPiB7Ci0gICAgICAgIGlmIChh
dXRvKiBvYmplY3QgPSBhc3NvY2lhdGVkQVhPYmplY3QoKSkKLSAgICAgICAgICAgIHJldHVybiBv
YmplY3QtPnBlcmZvcm1UZXh0T3BlcmF0aW9uKHRleHRPcGVyYXRpb24pOwotICAgICAgICByZXR1
cm4gVmVjdG9yPFN0cmluZz4oKTsKLSAgICB9KTsKLX0KLQotdm9pZCBBWElzb2xhdGVkT2JqZWN0
OjpmaW5kTWF0Y2hpbmdPYmplY3RzKEFjY2Vzc2liaWxpdHlTZWFyY2hDcml0ZXJpYSogY3JpdGVy
aWEsIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgcmVzdWx0cykKLXsKLSAgICBBU1NFUlQo
Y3JpdGVyaWEpOwotICAgIGlmICghY3JpdGVyaWEpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNy
aXRlcmlhLT5hbmNob3JPYmplY3QgPSB0aGlzOwotICAgIEFjY2Vzc2liaWxpdHk6OmZpbmRNYXRj
aGluZ09iamVjdHMoKmNyaXRlcmlhLCByZXN1bHRzKTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2Jq
ZWN0OjpyZXBsYWNlVGV4dEluUmFuZ2UoY29uc3QgU3RyaW5nJiwgY29uc3QgUGxhaW5UZXh0UmFu
Z2UmKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBBWElzb2xhdGVkT2JqZWN0OjppbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYpCi17Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFY
SXNvbGF0ZWRPYmplY3Q6OnByZXNzKCkKLXsKLSAgICBpZiAoYXV0byogb2JqZWN0ID0gYXNzb2Np
YXRlZEFYT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBvYmplY3QtPnByZXNzKCk7Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6OnBlcmZvcm1EZWZhdWx0QWN0
aW9uKCkKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNBY2Nlc3NpYmlsaXR5T2JqZWN0KCkgY29uc3QK
LXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJv
b2wgQVhJc29sYXRlZE9iamVjdDo6aXNBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCgpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IEFYSXNvbGF0ZWRPYmplY3Q6OmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IEFYSXNvbGF0ZWRPYmplY3Q6OmlzQWNjZXNzaWJpbGl0eVNjcm9sbGJhcigpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFY
SXNvbGF0ZWRPYmplY3Q6OmlzQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoKSBjb25zdAotewotICAg
IC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBBU1NFUlRfTk9UX1JFQUNIRUQsIGJ1dCBpdCBpcyBj
YWxsZWQgYnkKLSAgICAvLyBBWE9iamVjdENhY2hlOjpyb290V2ViQXJlYSwgdGhhdCBpbiB0dXJu
IGlzIGNhbGxlZCBieQotICAgIC8vIEFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0U3RhdGVDaGFuZ2VQ
bGF0Zm9ybU5vdGlmaWNhdGlvbi4KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQVhJc29s
YXRlZE9iamVjdDo6aXNBY2Nlc3NpYmlsaXR5U1ZHUm9vdCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFYSXNvbGF0ZWRP
YmplY3Q6OmlzQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQoKSBjb25zdAotewotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2Jq
ZWN0Ojppc0F0dGFjaG1lbnRFbGVtZW50KCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNO
YXRpdmVJbWFnZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzSW1hZ2VCdXR0b24oKSBj
b25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0NvbnRhaW5lZEJ5UGFzc3dvcmRGaWVsZCgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1BWENvcmVPYmplY3QqIEFYSXNvbGF0ZWRPYmplY3Q6OnBhc3N3b3JkRmllbGRPckNvbnRhaW5p
bmdQYXNzd29yZEZpZWxkKCkKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gbnVsbHB0cjsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc05hdGl2ZVRleHRDb250
cm9sKCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNOYXRpdmVMaXN0Qm94KCkgY29uc3QK
LXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJv
b2wgQVhJc29sYXRlZE9iamVjdDo6aXNMaXN0Qm94T3B0aW9uKCkgY29uc3QKLXsKLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQVhJc29sYXRl
ZE9iamVjdDo6aXNTbGlkZXJUaHVtYigpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzSW5w
dXRTbGlkZXIoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0xhYmVsKCkgY29uc3QKLXsK
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
QVhJc29sYXRlZE9iamVjdDo6aXNEYXRhVGFibGUoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0
Ojppc0ltYWdlTWFwTGluaygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzTmF0aXZlU3Bp
bkJ1dHRvbigpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzU3BpbkJ1dHRvblBhcnQoKSBj
b25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc01vY2tPYmplY3QoKSBjb25zdAotewotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBWElzb2xh
dGVkT2JqZWN0Ojppc01lZGlhT2JqZWN0KCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNB
UklBVGV4dENvbnRyb2woKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc05vbk5hdGl2ZVRl
eHRDb250cm9sKCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNCbG9ja3F1b3RlKCkgY29u
c3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNMYW5kbWFyaygpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFYSXNvbGF0ZWRP
YmplY3Q6OmlzRmlndXJlRWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzS2V5
Ym9hcmRGb2N1c2FibGUoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0hvdmVyZWQoKSBj
b25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0luZGV0ZXJtaW5hdGUoKSBjb25zdAotewotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBWElz
b2xhdGVkT2JqZWN0Ojppc09uU2NyZWVuKCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNP
ZmZTY3JlZW4oKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc1ByZXNzZWQoKSBjb25zdAot
ewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBBWElzb2xhdGVkT2JqZWN0Ojppc1VudmlzaXRlZCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFYSXNvbGF0ZWRPYmpl
Y3Q6OmlzTGlua2VkKCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNWaXNpYmxlKCkgY29u
c3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNDb2xsYXBzZWQoKSBjb25zdAotewotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBWElzb2xhdGVk
T2JqZWN0Ojppc1NlbGVjdGVkT3B0aW9uQWN0aXZlKCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVj
dDo6aGFzQm9sZEZvbnQoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0OjpoYXNJdGFsaWNGb250
KCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6aGFzTWlzc3BlbGxpbmcoKSBjb25zdAotewot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBB
WElzb2xhdGVkT2JqZWN0OjpoYXNQbGFpblRleHQoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0
OjpoYXNTYW1lRm9udChSZW5kZXJPYmplY3QqKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojpo
YXNTYW1lRm9udENvbG9yKFJlbmRlck9iamVjdCopIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6
Omhhc1NhbWVTdHlsZShSZW5kZXJPYmplY3QqKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojpp
c1N0YXRpY1RleHQoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0OjpoYXNVbmRlcmxpbmUoKSBj
b25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBBWElzb2xhdGVkT2JqZWN0OjpoYXNIaWdobGlnaHRpbmcoKSBjb25zdAotewotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotRWxlbWVudCog
QVhJc29sYXRlZE9iamVjdDo6ZWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLU5vZGUqIEFYSXNvbGF0ZWRPYmplY3Q6
Om5vZGUoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBu
dWxscHRyOwotfQotCi1SZW5kZXJPYmplY3QqIEFYSXNvbGF0ZWRPYmplY3Q6OnJlbmRlcmVyKCkg
Y29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsK
LX0KLQotQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbiBBWElzb2xhdGVkT2JqZWN0OjpkZWZh
dWx0T2JqZWN0SW5jbHVzaW9uKCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbjo6RGVmYXVsdEJlaGF2aW9y
OwotfQotCi1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmFjY2Vzc2liaWxpdHlJc0lnbm9yZWRCeURl
ZmF1bHQoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotZmxvYXQgQVhJc29sYXRlZE9iamVjdDo6c3RlcFZhbHVlRm9yUmFuZ2UoKSBj
b25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi1B
WENvcmVPYmplY3QqIEFYSXNvbGF0ZWRPYmplY3Q6OnNlbGVjdGVkTGlzdEl0ZW0oKQotewotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lkIEFY
SXNvbGF0ZWRPYmplY3Q6OmFyaWFBY3RpdmVEZXNjZW5kYW50UmVmZXJlbmNpbmdFbGVtZW50cyhB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotfQotCi12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmFyaWFDb250cm9sc1JlZmVyZW5j
aW5nRWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3QKLXsKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBBWElzb2xhdGVkT2JqZWN0OjphcmlhRGVz
Y3JpYmVkQnlFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdAotewot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmFy
aWFEZXNjcmliZWRCeVJlZmVyZW5jaW5nRWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVj
dG9yJikgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBBWElz
b2xhdGVkT2JqZWN0OjphcmlhRGV0YWlsc1JlZmVyZW5jaW5nRWxlbWVudHMoQWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yJikgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0K
LQotdm9pZCBBWElzb2xhdGVkT2JqZWN0OjphcmlhRXJyb3JNZXNzYWdlUmVmZXJlbmNpbmdFbGVt
ZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdAotewotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmFyaWFGbG93VG9SZWZl
cmVuY2luZ0VsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgQVhJc29sYXRlZE9iamVjdDo6YXJp
YUxhYmVsbGVkQnlFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdAot
ewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6
OmFyaWFMYWJlbGxlZEJ5UmVmZXJlbmNpbmdFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5W
ZWN0b3ImKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIEFY
SXNvbGF0ZWRPYmplY3Q6OmFyaWFPd25zUmVmZXJlbmNpbmdFbGVtZW50cyhBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3ImKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQot
Ci1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6Omhhc0RhdGFsaXN0KCkgY29uc3QKLXsKLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQVhJc29sYXRl
ZE9iamVjdDo6c3VwcG9ydHNIYXNQb3B1cCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6OnN1
cHBvcnRzUHJlc3NlZCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6OnN1cHBvcnRzQ2hlY2tl
ZCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6Omlnbm9yZWRGcm9tTW9kYWxQcmVzZW5jZSgp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzTW9kYWxEZXNjZW5kYW50KE5vZGUqKSBjb25z
dAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ym9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc01vZGFsTm9kZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1BWENvcmVPYmplY3QqIEFY
SXNvbGF0ZWRPYmplY3Q6OmVsZW1lbnRBY2Nlc3NpYmlsaXR5SGl0VGVzdChjb25zdCBJbnRQb2lu
dCYpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51bGxw
dHI7Ci19Ci0KLUFYQ29yZU9iamVjdCogQVhJc29sYXRlZE9iamVjdDo6Zmlyc3RDaGlsZCgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19
Ci0KLUFYQ29yZU9iamVjdCogQVhJc29sYXRlZE9iamVjdDo6bGFzdENoaWxkKCkgY29uc3QKLXsK
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotQVhD
b3JlT2JqZWN0KiBBWElzb2xhdGVkT2JqZWN0OjpwcmV2aW91c1NpYmxpbmcoKSBjb25zdAotewot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1BWENv
cmVPYmplY3QqIEFYSXNvbGF0ZWRPYmplY3Q6Om5leHRTaWJsaW5nKCkgY29uc3QKLXsKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotQVhDb3JlT2Jq
ZWN0KiBBWElzb2xhdGVkT2JqZWN0OjpuZXh0U2libGluZ1VuaWdub3JlZChpbnQpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLUFY
Q29yZU9iamVjdCogQVhJc29sYXRlZE9iamVjdDo6cHJldmlvdXNTaWJsaW5nVW5pZ25vcmVkKGlu
dCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0
cjsKLX0KLQotQVhDb3JlT2JqZWN0KiBBWElzb2xhdGVkT2JqZWN0OjpwYXJlbnRPYmplY3RJZkV4
aXN0cygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51
bGxwdHI7Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNEZXNjZW5kYW50T2ZCYXJyZW5Q
YXJlbnQoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0Rlc2NlbmRhbnRPZlJvbGUoQWNj
ZXNzaWJpbGl0eVJvbGUpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1BWENvcmVPYmplY3QqIEFYSXNvbGF0ZWRPYmplY3Q6Om9ic2Vy
dmFibGVPYmplY3QoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiBudWxscHRyOwotfQotCi1BWENvcmVPYmplY3QqIEFYSXNvbGF0ZWRPYmplY3Q6OmNvcnJl
c3BvbmRpbmdMYWJlbEZvckNvbnRyb2xFbGVtZW50KCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotQVhDb3JlT2JqZWN0KiBBWElz
b2xhdGVkT2JqZWN0Ojpjb3JyZXNwb25kaW5nQ29udHJvbEZvckxhYmVsRWxlbWVudCgpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0K
LWJvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNQcmVzZW50YXRpb25hbENoaWxkT2ZBcmlhUm9sZSgp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmFyaWFSb2xlSGFzUHJlc2VudGF0aW9uYWxDaGls
ZHJlbigpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmluaGVyaXRzUHJlc2VudGF0aW9uYWxS
b2xlKCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXZvaWQgQVhJc29sYXRlZE9iamVjdDo6c2V0QWNjZXNzaWJsZU5hbWUoY29uc3Qg
QXRvbVN0cmluZyYpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLWJvb2wgQVhJ
c29sYXRlZE9iamVjdDo6aGFzQXR0cmlidXRlc1JlcXVpcmVkRm9ySW5jbHVzaW9uKCkgY29uc3QK
LXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVN0
cmluZyBBWElzb2xhdGVkT2JqZWN0OjphY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKSBjb25zdAot
ewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQot
U3RyaW5nIEFYSXNvbGF0ZWRPYmplY3Q6OnRpdGxlKCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBBWElzb2xhdGVk
T2JqZWN0OjpoZWxwVGV4dCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzQVJJQVN0
YXRpY1RleHQoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotU3RyaW5nIEFYSXNvbGF0ZWRPYmplY3Q6OnRleHQoKSBjb25zdAotewot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3Ry
aW5nIEFYSXNvbGF0ZWRPYmplY3Q6OmFyaWFMYWJlbGVkQnlBdHRyaWJ1dGUoKSBjb25zdAotewot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3Ry
aW5nIEFYSXNvbGF0ZWRPYmplY3Q6OmFyaWFEZXNjcmliZWRCeUF0dHJpYnV0ZSgpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1i
b29sIEFYSXNvbGF0ZWRPYmplY3Q6OmFjY2Vzc2libGVOYW1lRGVyaXZlc0Zyb21Db250ZW50KCkg
Y29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLXZvaWQgQVhJc29sYXRlZE9iamVjdDo6ZWxlbWVudHNGcm9tQXR0cmlidXRlKFZlY3RvcjxF
bGVtZW50Kj4mLCBjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLX0KLQotQVhPYmplY3RDYWNoZSogQVhJc29sYXRlZE9iamVjdDo6YXhPYmpl
Y3RDYWNoZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICByZXR1
cm4gdHJlZSgpLT5heE9iamVjdENhY2hlKCk7Ci19Ci0KLUVsZW1lbnQqIEFYSXNvbGF0ZWRPYmpl
Y3Q6OmFuY2hvckVsZW1lbnQoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiBudWxscHRyOwotfQotCi1FbGVtZW50KiBBWElzb2xhdGVkT2JqZWN0OjphY3Rp
b25FbGVtZW50KCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gbnVsbHB0cjsKLX0KLQotUGF0aCBBWElzb2xhdGVkT2JqZWN0OjplbGVtZW50UGF0aCgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFBhdGgoKTsKLX0K
LQotVGV4dEl0ZXJhdG9yQmVoYXZpb3IgQVhJc29sYXRlZE9iamVjdDo6dGV4dEl0ZXJhdG9yQmVo
YXZpb3JGb3JUZXh0UmFuZ2UoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotV2lkZ2V0KiBBWElzb2xhdGVkT2JqZWN0Ojp3aWRnZXQo
KSBjb25zdAotewotICAgIGlmIChhdXRvKiBvYmplY3QgPSBhc3NvY2lhdGVkQVhPYmplY3QoKSkK
LSAgICAgICAgcmV0dXJuIG9iamVjdC0+d2lkZ2V0KCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19
Ci0KLVdpZGdldCogQVhJc29sYXRlZE9iamVjdDo6d2lkZ2V0Rm9yQXR0YWNobWVudFZpZXcoKSBj
b25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBudWxscHRyOwot
fQotCi1QYWdlKiBBWElzb2xhdGVkT2JqZWN0OjpwYWdlKCkgY29uc3QKLXsKLSAgICBpZiAoYXV0
byogb2JqZWN0ID0gYXNzb2NpYXRlZEFYT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBvYmplY3Qt
PnBhZ2UoKTsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsK
LX0KLQotRG9jdW1lbnQqIEFYSXNvbGF0ZWRPYmplY3Q6OmRvY3VtZW50KCkgY29uc3QKLXsKLSAg
ICBpZiAoYXV0byogb2JqZWN0ID0gYXNzb2NpYXRlZEFYT2JqZWN0KCkpCi0gICAgICAgIHJldHVy
biBvYmplY3QtPmRvY3VtZW50KCk7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIG51bGxwdHI7Ci19Ci0KLUZyYW1lVmlldyogQVhJc29sYXRlZE9iamVjdDo6ZG9jdW1lbnRG
cmFtZVZpZXcoKSBjb25zdAotewotICAgIGlmIChhdXRvKiBvYmplY3QgPSBhc3NvY2lhdGVkQVhP
YmplY3QoKSkKLSAgICAgICAgcmV0dXJuIG9iamVjdC0+ZG9jdW1lbnRGcmFtZVZpZXcoKTsKLSAg
ICByZXR1cm4gbnVsbHB0cjsKLX0KLQotRnJhbWUqIEFYSXNvbGF0ZWRPYmplY3Q6OmZyYW1lKCkg
Y29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsK
LX0KLQotRnJhbWUqIEFYSXNvbGF0ZWRPYmplY3Q6Om1haW5GcmFtZSgpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLURvY3VtZW50
KiBBWElzb2xhdGVkT2JqZWN0Ojp0b3BEb2N1bWVudCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVNjcm9sbFZpZXcqIEFYSXNv
bGF0ZWRPYmplY3Q6OnNjcm9sbFZpZXdBbmNlc3RvcigpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgQVhJc29sYXRlZE9i
amVjdDo6Y2hpbGRyZW5DaGFuZ2VkKCkKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0K
LQotdm9pZCBBWElzb2xhdGVkT2JqZWN0Ojp0ZXh0Q2hhbmdlZCgpCi17Ci0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgQVhJc29sYXRlZE9iamVjdDo6dXBkYXRlQWNjZXNzaWJp
bGl0eVJvbGUoKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIEFYSXNv
bGF0ZWRPYmplY3Q6OmFkZENoaWxkcmVuKCkKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LX0KLQotdm9pZCBBWElzb2xhdGVkT2JqZWN0OjphZGRDaGlsZChBWENvcmVPYmplY3QqKQotewot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6Omlu
c2VydENoaWxkKEFYQ29yZU9iamVjdCosIHVuc2lnbmVkKQotewotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotfQotCi1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6OnNob3VsZElnbm9yZUF0dHJpYnV0
ZVJvbGUoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0OjpjYW5IYXZlQ2hpbGRyZW4oKSBjb25z
dAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ym9vbCBBWElzb2xhdGVkT2JqZWN0OjpoYXNDaGlsZHJlbigpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEFYSXNvbGF0ZWRP
YmplY3Q6OnNldE5lZWRzVG9VcGRhdGVDaGlsZHJlbigpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci19Ci0KLXZvaWQgQVhJc29sYXRlZE9iamVjdDo6c2V0TmVlZHNUb1VwZGF0ZVN1YnRy
ZWUoKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIEFYSXNvbGF0ZWRP
YmplY3Q6OmNsZWFyQ2hpbGRyZW4oKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQot
Ci1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6Om5lZWRzVG9VcGRhdGVDaGlsZHJlbigpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IEFYSXNvbGF0ZWRPYmplY3Q6OnNob3VsZEZvY3VzQWN0aXZlRGVzY2VuZGFudCgpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1BWENv
cmVPYmplY3QqIEFYSXNvbGF0ZWRPYmplY3Q6OmFjdGl2ZURlc2NlbmRhbnQoKSBjb25zdAotewot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lk
IEFYSXNvbGF0ZWRPYmplY3Q6OmhhbmRsZUFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkKCkKLXsKLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBBWElzb2xhdGVkT2JqZWN0OjpoYW5k
bGVBcmlhRXhwYW5kZWRDaGFuZ2VkKCkKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0K
LQotYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0Rlc2NlbmRhbnRPZk9iamVjdChjb25zdCBBWENv
cmVPYmplY3QqKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc0FuY2VzdG9yT2ZPYmplY3Qo
Y29uc3QgQVhDb3JlT2JqZWN0KikgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUFYQ29yZU9iamVjdCogQVhJc29sYXRlZE9iamVjdDo6
Zmlyc3RBbm9ueW1vdXNCbG9ja0NoaWxkKCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0Ojpo
YXNBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1jb25zdCBBdG9tU3RyaW5nJiBB
WElzb2xhdGVkT2JqZWN0OjpnZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51bGxBdG9tKCk7Ci19
Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6aGFzVGFnTmFtZShjb25zdCBRdWFsaWZpZWROYW1l
JikgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLVN0cmluZyBBWElzb2xhdGVkT2JqZWN0OjpzdHJpbmdWYWx1ZUZvck1TQUEoKSBjb25z
dAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0K
LQotU3RyaW5nIEFYSXNvbGF0ZWRPYmplY3Q6OnN0cmluZ1JvbGVGb3JNU0FBKCkgY29uc3QKLXsK
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0
cmluZyBBWElzb2xhdGVkT2JqZWN0OjpuYW1lRm9yTVNBQSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgQVhJc29s
YXRlZE9iamVjdDo6ZGVzY3JpcHRpb25Gb3JNU0FBKCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLUFjY2Vzc2liaWxpdHlSb2xl
IEFYSXNvbGF0ZWRPYmplY3Q6OnJvbGVWYWx1ZUZvck1TQUEoKSBjb25zdAotewotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5Um9sZTo6VW5rbm93bjsK
LX0KLQotU3RyaW5nIEFYSXNvbGF0ZWRPYmplY3Q6OnBhc3N3b3JkRmllbGRWYWx1ZSgpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQot
Ci1BWENvcmVPYmplY3QqIEFYSXNvbGF0ZWRPYmplY3Q6OmxpdmVSZWdpb25BbmNlc3Rvcihib29s
KSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBudWxscHRy
OwotfQotCi1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6Omhhc0NvbnRlbnRFZGl0YWJsZUF0dHJpYnV0
ZVNldCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6OnN1cHBvcnRzUmVhZE9ubHkoKSBjb25z
dAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ym9vbCBBWElzb2xhdGVkT2JqZWN0OjpzdXBwb3J0c0F1dG9Db21wbGV0ZSgpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFY
SXNvbGF0ZWRPYmplY3Q6OnN1cHBvcnRzQVJJQUF0dHJpYnV0ZXMoKSBjb25zdAotewotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBWElzb2xh
dGVkT2JqZWN0OjpzY3JvbGxCeVBhZ2UoU2Nyb2xsQnlQYWdlRGlyZWN0aW9uKSBjb25zdAotewot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotSW50UG9p
bnQgQVhJc29sYXRlZE9iamVjdDo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAotewotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBJbnRQb2ludCgpOwotfQotCi1JbnRTaXplIEFY
SXNvbGF0ZWRPYmplY3Q6OnNjcm9sbENvbnRlbnRzU2l6ZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEludFNpemUoKTsKLX0KLQotSW50UmVjdCBBWElz
b2xhdGVkT2JqZWN0OjpzY3JvbGxWaXNpYmxlQ29udGVudFJlY3QoKSBjb25zdAotewotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBJbnRSZWN0KCk7Ci19Ci0KLXZvaWQgQVhJ
c29sYXRlZE9iamVjdDo6c2Nyb2xsVG9NYWtlVmlzaWJsZShjb25zdCBTY3JvbGxSZWN0VG9WaXNp
YmxlT3B0aW9ucyYpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLWJv
b2wgQVhJc29sYXRlZE9iamVjdDo6bGFzdEtub3duSXNJZ25vcmVkVmFsdWUoKQotewotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBBWElzb2xh
dGVkT2JqZWN0OjpzZXRMYXN0S25vd25Jc0lnbm9yZWRWYWx1ZShib29sKQotewotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6Om5vdGlmeUlmSWdu
b3JlZFZhbHVlQ2hhbmdlZCgpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLWJv
b2wgQVhJc29sYXRlZE9iamVjdDo6aXNNYXRoU2NyaXB0T2JqZWN0KEFjY2Vzc2liaWxpdHlNYXRo
U2NyaXB0T2JqZWN0VHlwZSkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNNYXRoTXVsdGlz
Y3JpcHRPYmplY3QoQWNjZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlwdE9iamVjdFR5cGUpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzQVhIaWRkZW4oKSBjb25zdAotewotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBWElzb2xhdGVkT2Jq
ZWN0Ojppc0RPTUhpZGRlbigpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzSGlkZGVuKCkg
Y29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLXZvaWQgQVhJc29sYXRlZE9iamVjdDo6b3ZlcnJpZGVBdHRhY2htZW50UGFyZW50KEFYQ29y
ZU9iamVjdCopCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLWJvb2wgQVhJc29s
YXRlZE9iamVjdDo6YWNjZXNzaWJpbGl0eUlnbm9yZUF0dGFjaG1lbnQoKSBjb25zdAotewotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotQWNjZXNzaWJp
bGl0eU9iamVjdEluY2x1c2lvbiBBWElzb2xhdGVkT2JqZWN0OjphY2Nlc3NpYmlsaXR5UGxhdGZv
cm1JbmNsdWRlc09iamVjdCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb246OkRlZmF1bHRCZWhhdmlvcjsK
LX0KLQotYm9vbCBBWElzb2xhdGVkT2JqZWN0OjpoYXNBcHBsZVBERkFubm90YXRpb25BdHRyaWJ1
dGUoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotY29uc3QgQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcqIEFYSXNvbGF0ZWRPYmplY3Q6
OmFuY2VzdG9yQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoYm9vbCkgY29uc3QKLXsKLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBBWElzb2xh
dGVkT2JqZWN0OjpzZXRJc0lnbm9yZWRGcm9tUGFyZW50RGF0YShBY2Nlc3NpYmlsaXR5SXNJZ25v
cmVkRnJvbVBhcmVudERhdGEmKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12
b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmNsZWFySXNJZ25vcmVkRnJvbVBhcmVudERhdGEoKQotewot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNl
dElzSWdub3JlZEZyb21QYXJlbnREYXRhRm9yQ2hpbGQoQVhDb3JlT2JqZWN0KikKLXsKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gRU5BQkxFKChBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZU5v
ZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0
ZWRUcmVlTm9kZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTYyMTk3NGRjMmVj
ZWI2NDY4OGU3MjE1ZDQ2YTEwZDkzMDQyZGJmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0
cmVlL0FYSXNvbGF0ZWRUcmVlTm9kZS5oCisrKyAvZGV2L251bGwKQEAgLTEsODM4ICswLDAgQEAK
LS8qCi0qIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0qIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0qIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0qIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0qIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0qIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQotCi0jaW5jbHVk
ZSAiQVhPYmplY3RDYWNoZS5oIgotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZh
Y2UuaCIKLSNpbmNsdWRlICJJbnRQb2ludC5oIgotI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKLSNp
bmNsdWRlICJQYXRoLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8
d3RmL1ZhcmlhbnQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL1dl
YWtQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBWElzb2xhdGVkVHJlZTsK
LQotY2xhc3MgQVhJc29sYXRlZE9iamVjdCBmaW5hbCA6IHB1YmxpYyBBWENvcmVPYmplY3Qgewot
cHVibGljOgotICAgIHN0YXRpYyBSZWY8QVhJc29sYXRlZE9iamVjdD4gY3JlYXRlKEFYQ29yZU9i
amVjdCYsIGJvb2wgaXNSb290KTsKLSAgICB+QVhJc29sYXRlZE9iamVjdCgpOwotCi0gICAgdm9p
ZCBzZXRPYmplY3RJRChBWElEIGlkKSBvdmVycmlkZSB7IG1faWQgPSBpZDsgfQotICAgIEFYSUQg
b2JqZWN0SUQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2lkOyB9Ci0gICAgdm9pZCBpbml0
KCkgb3ZlcnJpZGUgeyB9Ci0KLSAgICB2b2lkIGRldGFjaChBY2Nlc3NpYmlsaXR5RGV0YWNobWVu
dFR5cGUsIEFYT2JqZWN0Q2FjaGUqID0gbnVsbHB0cikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0Rl
dGFjaGVkKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNjb25uZWN0KCk7Ci0KLSAgICB2
b2lkIHNldFRyZWVJZGVudGlmaWVyKEFYSXNvbGF0ZWRUcmVlSUQpOwotICAgIHZvaWQgc2V0UGFy
ZW50KEFYSUQpOwotICAgIHZvaWQgYXBwZW5kQ2hpbGQoQVhJRCk7Ci0KLXByaXZhdGU6Ci0KLSAg
ICBBWElEIHBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50OyB9Ci0gICAgCi0gICAgQVhJ
c29sYXRlZFRyZWVJRCB0cmVlSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fdHJlZUlkZW50
aWZpZXI7IH0KLSAgICBBWElzb2xhdGVkVHJlZSogdHJlZSgpIGNvbnN0OwotICAgIAotICAgIEFY
SXNvbGF0ZWRPYmplY3QoKSA9IGRlZmF1bHQ7Ci0gICAgQVhJc29sYXRlZE9iamVjdChBWENvcmVP
YmplY3QmLCBib29sIGlzUm9vdCk7Ci0gICAgdm9pZCBpbml0aWFsaXplQXR0cmlidXRlRGF0YShB
WENvcmVPYmplY3QmLCBib29sIGlzUm9vdCk7Ci0gICAgQVhDb3JlT2JqZWN0KiBhc3NvY2lhdGVk
QVhPYmplY3QoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
LSAgICAgICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+b2JqZWN0RnJvbUFYSUQob2JqZWN0SUQo
KSk7Ci0gICAgfQotCi0gICAgZW51bSBjbGFzcyBBWFByb3BlcnR5TmFtZSA6IHVpbnQ4X3Qgewot
ICAgICAgICBOb25lID0gMCwKLSAgICAgICAgQWNjZXNzS2V5LAotICAgICAgICBBY3Rpb25WZXJi
LAotICAgICAgICBBY2Nlc3NpYmlsaXR5QnV0dG9uU3RhdGUsCi0gICAgICAgIEFjY2Vzc2liaWxp
dHlUZXh0LAotICAgICAgICBBdXRvQ29tcGxldGVWYWx1ZSwKLSAgICAgICAgQVJJQUNvbnRyb2xz
RWxlbWVudHMsCi0gICAgICAgIEFSSUFEZXRhaWxzRWxlbWVudHMsCi0gICAgICAgIEFSSUFEcm9w
RWZmZWN0cywKLSAgICAgICAgQVJJQUVycm9yTWVzc2FnZUVsZW1lbnRzLAotICAgICAgICBBUklB
SXNNdWx0aWxpbmUsCi0gICAgICAgIEFSSUFGbG93VG9FbGVtZW50cywKLSAgICAgICAgQVJJQUxh
bmRtYXJrUm9sZURlc2NyaXB0aW9uLAotICAgICAgICBBUklBVHJlZUl0ZW1Db250ZW50LAotICAg
ICAgICBBUklBVHJlZUl0ZW1EaXNjbG9zZWRSb3dzLAotICAgICAgICBBUklBVHJlZVJvd3MsCi0g
ICAgICAgIEFSSUFSb2xlQXR0cmlidXRlLAotICAgICAgICBBUklBT3duc0VsZW1lbnRzLAotICAg
ICAgICBCbG9ja3F1b3RlTGV2ZWwsCi0gICAgICAgIEJvdW5kaW5nQm94UmVjdCwKLSAgICAgICAg
Q2FuSGF2ZVNlbGVjdGVkQ2hpbGRyZW4sCi0gICAgICAgIENhblNldEV4cGFuZGVkQXR0cmlidXRl
LAotICAgICAgICBDYW5TZXRGb2N1c0F0dHJpYnV0ZSwKLSAgICAgICAgQ2FuU2V0TnVtZXJpY1Zh
bHVlLAotICAgICAgICBDYW5TZXRTZWxlY3RlZEF0dHJpYnV0ZSwKLSAgICAgICAgQ2FuU2V0U2Vs
ZWN0ZWRDaGlsZHJlbkF0dHJpYnV0ZSwKLSAgICAgICAgQ2FuU2V0VGV4dFJhbmdlQXR0cmlidXRl
cywKLSAgICAgICAgQ2FuU2V0VmFsdWVBdHRyaWJ1dGUsCi0gICAgICAgIENhbnZhc0hhc0ZhbGxi
YWNrQ29udGVudCwKLSNpZiBQTEFURk9STShDT0NPQSkgJiYgIVBMQVRGT1JNKElPU19GQU1JTFkp
Ci0gICAgICAgIENhcmV0QnJvd3NpbmdFbmFibGVkLAotI2VuZGlmCi0gICAgICAgIENsYXNzTGlz
dCwKLSAgICAgICAgQ2xpY2tQb2ludCwKLSAgICAgICAgQ29sb3JWYWx1ZSwKLSAgICAgICAgQ29t
cHV0ZWRMYWJlbCwKLSAgICAgICAgQ29tcHV0ZWRSb2xlU3RyaW5nLAotICAgICAgICBDdXJyZW50
U3RhdGUsCi0gICAgICAgIEN1cnJlbnRWYWx1ZSwKLSAgICAgICAgRGF0ZXRpbWVBdHRyaWJ1dGVW
YWx1ZSwKLSAgICAgICAgRGVjcmVtZW50QnV0dG9uLAotICAgICAgICBEZXNjcmlwdGlvbiwKLSAg
ICAgICAgRG9jdW1lbnRFbmNvZGluZywKLSAgICAgICAgRG9jdW1lbnRVUkksCi0gICAgICAgIEVk
aXRhYmxlQW5jZXN0b3IsCi0gICAgICAgIEVsZW1lbnRSZWN0LAotICAgICAgICBFc3RpbWF0ZWRM
b2FkaW5nUHJvZ3Jlc3MsCi0gICAgICAgIEV4cGFuZGVkVGV4dFZhbHVlLAotICAgICAgICBFeHBv
c2VzVGl0bGVVSUVsZW1lbnQsCi0gICAgICAgIEZpbGVVcGxvYWRCdXR0b25SZXR1cm5zVmFsdWVJ
blRpdGxlLAotICAgICAgICBGb2N1c2FibGVBbmNlc3RvciwKLSAgICAgICAgSGFzQVJJQVZhbHVl
Tm93LAotICAgICAgICBIYXNQb3B1cCwKLSAgICAgICAgSGVhZGluZ0xldmVsLAotICAgICAgICBI
ZWxwVGV4dCwKLSAgICAgICAgSGllcmFyY2hpY2FsTGV2ZWwsCi0gICAgICAgIEhpZ2hlc3RFZGl0
YWJsZUFuY2VzdG9yLAotICAgICAgICBIb3Jpem9udGFsU2Nyb2xsQmFyLAotICAgICAgICBJZGVu
dGlmaWVyQXR0cmlidXRlLAotICAgICAgICBJbnZhbGlkU3RhdHVzLAotICAgICAgICBJbmNyZW1l
bnRCdXR0b24sCi0gICAgICAgIElzQWNjZXNzaWJpbGl0eUlnbm9yZWQsCi0gICAgICAgIElzQWN0
aXZlRGVzY2VuZGFudE9mRm9jdXNlZENvbnRhaW5lciwKLSAgICAgICAgSXNBbm9ueW1vdXNNYXRo
T3BlcmF0b3IsCi0gICAgICAgIElzQVJJQUdyYWJiZWQsCi0gICAgICAgIElzQVJJQVRyZWVHcmlk
Um93LAotICAgICAgICBJc0F0dGFjaG1lbnQsCi0gICAgICAgIElzQnV0dG9uLAotICAgICAgICBJ
c0J1c3ksCi0gICAgICAgIElzQ2hlY2tlZCwKLSAgICAgICAgSXNDb2xsYXBzZWQsCi0gICAgICAg
IElzQ29udHJvbCwKLSAgICAgICAgSXNEZXNjcmlwdGlvbkxpc3QsCi0gICAgICAgIElzRW5hYmxl
ZCwKLSAgICAgICAgSXNFeHBhbmRlZCwKLSAgICAgICAgSXNGaWVsZHNldCwKLSAgICAgICAgSXNG
aWxlVXBsb2FkQnV0dG9uLAotICAgICAgICBJc0ZvY3VzZWQsCi0gICAgICAgIElzR3JvdXAsCi0g
ICAgICAgIElzSW1hZ2UsCi0gICAgICAgIElzSW1hZ2VNYXBMaW5rLAotICAgICAgICBJc0luY3Jl
bWVudG9yLAotICAgICAgICBJc0luZGV0ZXJtaW5hdGUsCi0gICAgICAgIElzSW5saW5lVGV4dCwK
LSAgICAgICAgSXNJbnB1dEltYWdlLAotICAgICAgICBJc0luc2lkZUxpdmVSZWdpb24sCi0gICAg
ICAgIElzTGluaywKLSAgICAgICAgSXNMaW5rZWQsCi0gICAgICAgIElzTGlzdCwKLSAgICAgICAg
SXNMaXN0Qm94LAotICAgICAgICBJc0xvYWRlZCwKLSAgICAgICAgSXNIZWFkaW5nLAotICAgICAg
ICBJc0hvdmVyZWQsCi0gICAgICAgIElzTWF0aEVsZW1lbnQsCi0gICAgICAgIElzTWF0aEZyYWN0
aW9uLAotICAgICAgICBJc01hdGhGZW5jZWQsCi0gICAgICAgIElzTWF0aFN1YnNjcmlwdFN1cGVy
c2NyaXB0LAotICAgICAgICBJc01hdGhSb3csCi0gICAgICAgIElzTWF0aFVuZGVyT3ZlciwKLSAg
ICAgICAgSXNNYXRoUm9vdCwKLSAgICAgICAgSXNNYXRoU3F1YXJlUm9vdCwKLSAgICAgICAgSXNN
YXRoVGV4dCwKLSAgICAgICAgSXNNYXRoTnVtYmVyLAotICAgICAgICBJc01hdGhPcGVyYXRvciwK
LSAgICAgICAgSXNNYXRoRmVuY2VPcGVyYXRvciwKLSAgICAgICAgSXNNYXRoU2VwYXJhdG9yT3Bl
cmF0b3IsCi0gICAgICAgIElzTWF0aElkZW50aWZpZXIsCi0gICAgICAgIElzTWF0aFRhYmxlLAot
ICAgICAgICBJc01hdGhUYWJsZVJvdywKLSAgICAgICAgSXNNYXRoVGFibGVDZWxsLAotICAgICAg
ICBJc01hdGhNdWx0aXNjcmlwdCwKLSAgICAgICAgSXNNYXRoVG9rZW4sCi0gICAgICAgIElzTWF0
aFNjcmlwdE9iamVjdCwKLSAgICAgICAgSXNNZWRpYVRpbWVsaW5lLAotICAgICAgICBJc01lbnUs
Ci0gICAgICAgIElzTWVudUJhciwKLSAgICAgICAgSXNNZW51QnV0dG9uLAotICAgICAgICBJc01l
bnVJdGVtLAotICAgICAgICBJc01lbnVMaXN0LAotICAgICAgICBJc01lbnVMaXN0T3B0aW9uLAot
ICAgICAgICBJc01lbnVMaXN0UG9wdXAsCi0gICAgICAgIElzTWVudVJlbGF0ZWQsCi0gICAgICAg
IElzTWV0ZXIsCi0gICAgICAgIElzTXVsdGlTZWxlY3RhYmxlLAotICAgICAgICBJc09mZlNjcmVl
biwKLSAgICAgICAgSXNPblNjcmVlbiwKLSAgICAgICAgSXNPcmRlcmVkTGlzdCwKLSAgICAgICAg
SXNPdXRwdXQsCi0gICAgICAgIElzUGFzc3dvcmRGaWVsZCwKLSAgICAgICAgSXNQcmVzc2VkLAot
ICAgICAgICBJc1Byb2dyZXNzSW5kaWNhdG9yLAotICAgICAgICBJc1JhbmdlQ29udHJvbCwKLSAg
ICAgICAgSXNSZXF1aXJlZCwKLSAgICAgICAgSXNTY3JvbGxiYXIsCi0gICAgICAgIElzU2VhcmNo
RmllbGQsCi0gICAgICAgIElzU2VsZWN0ZWQsCi0gICAgICAgIElzU2VsZWN0ZWRPcHRpb25BY3Rp
dmUsCi0gICAgICAgIElzU2hvd2luZ1ZhbGlkYXRpb25NZXNzYWdlLAotICAgICAgICBJc1NsaWRl
ciwKLSAgICAgICAgSXNTdHlsZUZvcm1hdEdyb3VwLAotICAgICAgICBJc1RhYmxlQ2VsbCwKLSAg
ICAgICAgSXNUYWJsZUNvbHVtbiwKLSAgICAgICAgSXNUYWJsZVJvdywKLSAgICAgICAgSXNUZXh0
Q29udHJvbCwKLSAgICAgICAgSXNUcmVlLAotICAgICAgICBJc1RyZWVJdGVtLAotICAgICAgICBJ
c1Vub3JkZXJlZExpc3QsCi0gICAgICAgIElzVW52aXNpdGVkLAotICAgICAgICBJc1ZhbHVlQXV0
b2ZpbGxlZCwKLSAgICAgICAgSXNWYWx1ZUF1dG9maWxsQXZhaWxhYmxlLAotICAgICAgICBJc1Zp
c2libGUsCi0gICAgICAgIElzVmlzaXRlZCwKLSAgICAgICAgS2V5U2hvcnRjdXRzVmFsdWUsCi0g
ICAgICAgIExhbmd1YWdlLAotICAgICAgICBMYXlvdXRDb3VudCwKLSAgICAgICAgTGlua1JlbFZh
bHVlLAotICAgICAgICBMaW5rZWRVSUVsZW1lbnRzLAotICAgICAgICBMaXZlUmVnaW9uQXRvbWlj
LAotICAgICAgICBMaXZlUmVnaW9uUmVsZXZhbnQsCi0gICAgICAgIExpdmVSZWdpb25TdGF0dXMs
Ci0gICAgICAgIE1hdGhGZW5jZWRPcGVuU3RyaW5nLAotICAgICAgICBNYXRoRmVuY2VkQ2xvc2VT
dHJpbmcsCi0gICAgICAgIE1hdGhMaW5lVGhpY2tuZXNzLAotICAgICAgICBNYXRoUHJlc2NyaXB0
cywKLSAgICAgICAgTWF0aFBvc3RzY3JpcHRzLAotICAgICAgICBNYXRoUmFkaWNhbmRPYmplY3Qs
Ci0gICAgICAgIE1hdGhSb290SW5kZXhPYmplY3QsCi0gICAgICAgIE1hdGhVbmRlck9iamVjdCwK
LSAgICAgICAgTWF0aE92ZXJPYmplY3QsCi0gICAgICAgIE1hdGhOdW1lcmF0b3JPYmplY3QsCi0g
ICAgICAgIE1hdGhEZW5vbWluYXRvck9iamVjdCwKLSAgICAgICAgTWF0aEJhc2VPYmplY3QsCi0g
ICAgICAgIE1hdGhTdWJzY3JpcHRPYmplY3QsCi0gICAgICAgIE1hdGhTdXBlcnNjcmlwdE9iamVj
dCwKLSAgICAgICAgTWF4VmFsdWVGb3JSYW5nZSwKLSAgICAgICAgTWluVmFsdWVGb3JSYW5nZSwK
LSAgICAgICAgT3JpZW50YXRpb24sCi0gICAgICAgIFBsYWNlaG9sZGVyVmFsdWUsCi0gICAgICAg
IFByZXNzZWRJc1ByZXNlbnQsCi0gICAgICAgIFBvcHVwVmFsdWUsCi0gICAgICAgIFBvc0luU2V0
LAotICAgICAgICBQcmV2ZW50S2V5Ym9hcmRET01FdmVudERpc3BhdGNoLAotICAgICAgICBSZWFk
T25seVZhbHVlLAotICAgICAgICBSZWxhdGl2ZUZyYW1lLAotICAgICAgICBSb2xlVmFsdWUsCi0g
ICAgICAgIFJvbGVQbGF0Zm9ybVN0cmluZywKLSAgICAgICAgUm9sZURlc2NyaXB0aW9uLAotICAg
ICAgICBTZWxlY3RlZENoaWxkcmVuLAotICAgICAgICBTZWxlY3RlZFJhZGlvQnV0dG9uLAotICAg
ICAgICBTZWxlY3RlZFRhYkl0ZW0sCi0gICAgICAgIFNlc3Npb25JRCwKLSAgICAgICAgU2V0U2l6
ZSwKLSAgICAgICAgU29ydERpcmVjdGlvbiwKLSAgICAgICAgU3BlYWtBcywKLSAgICAgICAgU3Bl
ZWNoSGludCwKLSAgICAgICAgU3RyaW5nVmFsdWUsCi0gICAgICAgIFN1cHBvcnRzQVJJQURyYWdn
aW5nLAotICAgICAgICBTdXBwb3J0c0FSSUFEcm9wcGluZywKLSAgICAgICAgU3VwcG9ydHNBUklB
T3ducywKLSAgICAgICAgU3VwcG9ydHNDdXJyZW50LAotICAgICAgICBTdXBwb3J0c0RhdGV0aW1l
QXR0cmlidXRlLAotICAgICAgICBTdXBwb3J0c0V4cGFuZGVkLAotICAgICAgICBTdXBwb3J0c0V4
cGFuZGVkVGV4dFZhbHVlLAotICAgICAgICBTdXBwb3J0c0xpdmVSZWdpb24sCi0gICAgICAgIFN1
cHBvcnRzUGF0aCwKLSAgICAgICAgU3VwcG9ydHNQb3NJblNldCwKLSAgICAgICAgU3VwcG9ydHNQ
cmVzc0FjdGlvbiwKLSAgICAgICAgU3VwcG9ydHNSYW5nZVZhbHVlLAotICAgICAgICBTdXBwb3J0
c1JlcXVpcmVkQXR0cmlidXRlLAotICAgICAgICBTdXBwb3J0c1NldFNpemUsCi0gICAgICAgIFRh
YkNoaWxkcmVuLAotICAgICAgICBUYWJsZUxldmVsLAotICAgICAgICBUYWdOYW1lLAotICAgICAg
ICBUZXh0TGVuZ3RoLAotICAgICAgICBUaXRsZSwKLSAgICAgICAgVGl0bGVVSUVsZW1lbnQsCi0g
ICAgICAgIFVSTCwKLSAgICAgICAgVmFsdWVBdXRvZmlsbEJ1dHRvblR5cGUsCi0gICAgICAgIFZh
bHVlRGVzY3JpcHRpb24sCi0gICAgICAgIFZhbHVlRm9yUmFuZ2UsCi0gICAgICAgIFZhbGlkYXRp
b25NZXNzYWdlLAotICAgICAgICBWZXJ0aWNhbFNjcm9sbEJhciwKLSAgICAgICAgVmlzaWJsZUNo
aWxkcmVuLAotICAgIH07Ci0gICAgCi0gICAgdHlwZWRlZiBzdGQ6OnBhaXI8QVhJRCwgQVhJRD4g
QWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1hdGhNdWx0aXNjcmlwdFBhaXI7Ci0gICAgc3RydWN0
IEFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVUZXh0IHsKLSAgICAgICAgU3RyaW5nIHRleHQ7Ci0g
ICAgICAgIEFjY2Vzc2liaWxpdHlUZXh0U291cmNlIHRleHRTb3VyY2U7Ci0gICAgICAgIFZlY3Rv
cjxBWElEPiB0ZXh0RWxlbWVudHM7Ci0gICAgfTsKLSAgICAKLSAgICB1c2luZyBBdHRyaWJ1dGVW
YWx1ZVZhcmlhbnQgPSBWYXJpYW50PHN0ZDo6bnVsbHB0cl90LCBTdHJpbmcsIGJvb2wsIGludCwg
dW5zaWduZWQsIGRvdWJsZSwgZmxvYXQsIHVpbnQ2NF90LCBDb2xvciwgVVJMLCBMYXlvdXRSZWN0
LCBBWElELCBJbnRQb2ludCwgT3B0aW9uU2V0PFNwZWFrQXM+LCBWZWN0b3I8QWNjZXNzaWJpbGl0
eUlzb2xhdGVkVHJlZVRleHQ+LCBWZWN0b3I8QVhJRD4sIFZlY3RvcjxBY2Nlc3NpYmlsaXR5SXNv
bGF0ZWRUcmVlTWF0aE11bHRpc2NyaXB0UGFpcj4sIFZlY3RvcjxTdHJpbmc+PjsKLSAgICB2b2lk
IHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lLCBBdHRyaWJ1dGVWYWx1ZVZhcmlhbnQmJiwgYm9v
bCBzaG91bGRSZW1vdmUgPSBmYWxzZSk7Ci0gICAgdm9pZCBzZXRPYmplY3RQcm9wZXJ0eShBWFBy
b3BlcnR5TmFtZSwgQVhDb3JlT2JqZWN0Kik7Ci0gICAgdm9pZCBzZXRPYmplY3RWZWN0b3JQcm9w
ZXJ0eShBWFByb3BlcnR5TmFtZSwgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJik7Ci0KLSAg
ICBib29sIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSkgY29uc3Q7Ci0gICAgY29u
c3QgU3RyaW5nIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lKSBjb25zdDsKLSAg
ICBpbnQgaW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUpIGNvbnN0OwotICAgIHVuc2ln
bmVkIHVuc2lnbmVkQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUpIGNvbnN0OwotICAgIGRv
dWJsZSBkb3VibGVBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSkgY29uc3Q7Ci0gICAgZmxv
YXQgZmxvYXRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSkgY29uc3Q7Ci0gICAgQVhDb3Jl
T2JqZWN0KiBvYmplY3RBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSkgY29uc3Q7Ci0gICAg
SW50UG9pbnQgaW50UG9pbnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSkgY29uc3Q7Ci0g
ICAgQ29sb3IgY29sb3JBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSkgY29uc3Q7Ci0gICAg
VVJMIHVybEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lKSBjb25zdDsKLSAgICB1aW50NjRf
dCB1aW50NjRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSkgY29uc3Q7Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gVCByZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUpIGNvbnN0
OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFZlY3RvcjxUPiB2ZWN0b3JBdHRyaWJ1dGVWYWx1
ZShBWFByb3BlcnR5TmFtZSkgY29uc3Q7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gT3B0aW9u
U2V0PFQ+IG9wdGlvblNldEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lKSBjb25zdDsKLQot
ICAgIHZvaWQgZmlsbENoaWxkcmVuVmVjdG9yRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWUsIEFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0OwotICAgIHZvaWQgc2V0TWF0aHNjcmlw
dHMoQVhQcm9wZXJ0eU5hbWUsIEFYQ29yZU9iamVjdCYpOwotICAgIHZvaWQgaW5zZXJ0TWF0aFBh
aXJzKFZlY3RvcjxBY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlTWF0aE11bHRpc2NyaXB0UGFpcj4m
LCBBY2Nlc3NpYmlsaXR5TWF0aE11bHRpc2NyaXB0UGFpcnMmKTsKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPiB2b2lkIHBlcmZvcm1GdW5jdGlvbk9uTWFpblRocmVhZChVJiYpOwotCi0gICAgLy8g
QXR0cmlidXRlIHJldHJpZXZhbCBvdmVycmlkZXMuCi0gICAgYm9vbCBpc0hlYWRpbmcoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Oklz
SGVhZGluZyk7IH0KLSAgICBib29sIGlzTGluaygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJv
b2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNMaW5rKTsgfQotICAgIGJvb2wgaXNJ
bWFnZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6SXNJbWFnZSk7IH0KLSAgICBib29sIGlzUGFzc3dvcmRGaWVsZCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNQYXNz
d29yZEZpZWxkKTsgfQotICAgIGJvb2wgaXNTZWFyY2hGaWVsZCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNTZWFyY2hGaWVsZCk7
IH0KLSAgICBib29sIGlzQXR0YWNobWVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xB
dHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNBdHRhY2htZW50KTsgfQotICAgIGJvb2wg
aXNNZWRpYVRpbWVsaW5lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZh
bHVlKEFYUHJvcGVydHlOYW1lOjpJc01lZGlhVGltZWxpbmUpOyB9Ci0gICAgYm9vbCBpc01lbnVS
ZWxhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpJc01lbnVSZWxhdGVkKTsgfQotICAgIGJvb2wgaXNNZW51KCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc01lbnUp
OyB9Ci0gICAgYm9vbCBpc01lbnVCYXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0
cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTWVudUJhcik7IH0KLSAgICBib29sIGlzTWVu
dUJ1dHRvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFBy
b3BlcnR5TmFtZTo6SXNNZW51QnV0dG9uKTsgfQotICAgIGJvb2wgaXNNZW51SXRlbSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNN
ZW51SXRlbSk7IH0KLSAgICBib29sIGlzRmlsZVVwbG9hZEJ1dHRvbigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNGaWxlVXBsb2Fk
QnV0dG9uKTsgfQotICAgIGJvb2wgaXNJbnB1dEltYWdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0lucHV0SW1hZ2UpOyB9Ci0g
ICAgYm9vbCBpc1Byb2dyZXNzSW5kaWNhdG9yKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9v
bEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc1Byb2dyZXNzSW5kaWNhdG9yKTsgfQot
ICAgIGJvb2wgaXNTbGlkZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRl
VmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzU2xpZGVyKTsgfQotICAgIGJvb2wgaXNDb250cm9sKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1l
OjpJc0NvbnRyb2wpOyB9Ci0KLSAgICBib29sIGlzTGlzdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNMaXN0KTsgfQotICAgIGJv
b2wgaXNVbm9yZGVyZWRMaXN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc1Vub3JkZXJlZExpc3QpOyB9Ci0gICAgYm9vbCBpc09y
ZGVyZWRMaXN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFY
UHJvcGVydHlOYW1lOjpJc09yZGVyZWRMaXN0KTsgfQotICAgIGJvb2wgaXNEZXNjcmlwdGlvbkxp
c3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0
eU5hbWU6OklzRGVzY3JpcHRpb25MaXN0KTsgfQotCi0gICAgYm9vbCBpc1RhYmxlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIGlzVGFibGVSb3coKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzVGFi
bGVSb3cpOyB9Ci0gICAgYm9vbCBpc1RhYmxlQ29sdW1uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc1RhYmxlQ29sdW1uKTsgfQot
ICAgIGJvb2wgaXNUYWJsZUNlbGwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmli
dXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzVGFibGVDZWxsKTsgfQotICAgIGJvb2wgaXNGaWVs
ZHNldCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6SXNGaWVsZHNldCk7IH0KLSAgICBib29sIGlzR3JvdXAoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzR3JvdXApOyB9
Ci0gICAgYm9vbCBpc0FSSUFUcmVlR3JpZFJvdygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJv
b2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNBUklBVHJlZUdyaWRSb3cpOyB9Ci0g
ICAgYm9vbCBpc01lbnVMaXN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc01lbnVMaXN0KTsgfQotICAgIGJvb2wgaXNNZW51TGlz
dFBvcHVwKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpJc01lbnVMaXN0UG9wdXApOyB9Ci0gICAgYm9vbCBpc01lbnVMaXN0T3B0aW9u
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlO
YW1lOjpJc01lbnVMaXN0T3B0aW9uKTsgfQotICAgIGJvb2wgaXNUZXh0Q29udHJvbCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNU
ZXh0Q29udHJvbCk7IH0KLSAgICBib29sIGlzQnV0dG9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0J1dHRvbik7IH0KLSAgICBi
b29sIGlzUmFuZ2VDb250cm9sKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc1JhbmdlQ29udHJvbCk7IH0KLSAgICBib29sIGlzTWV0
ZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0
eU5hbWU6OklzTWV0ZXIpOyB9Ci0gICAgYm9vbCBpc1N0eWxlRm9ybWF0R3JvdXAoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzU3R5
bGVGb3JtYXRHcm91cCk7IH0KLSAgICBib29sIGlzT3V0cHV0KCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc091dHB1dCk7IH0KLSAg
ICBib29sIGlzQ2hlY2tlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVW
YWx1ZShBWFByb3BlcnR5TmFtZTo6SXNDaGVja2VkKTsgfQotICAgIGJvb2wgaXNFbmFibGVkKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1l
OjpJc0VuYWJsZWQpOyB9Ci0gICAgYm9vbCBpc1NlbGVjdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc1NlbGVjdGVkKTsgfQot
ICAgIGJvb2wgaXNGb2N1c2VkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0ZvY3VzZWQpOyB9Ci0gICAgYm9vbCBpc011bHRpU2Vs
ZWN0YWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFBy
b3BlcnR5TmFtZTo6SXNNdWx0aVNlbGVjdGFibGUpOyB9Ci0gICAgYm9vbCBpc1Zpc2l0ZWQoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6
OklzVmlzaXRlZCk7IH0KLSAgICBib29sIGlzUmVxdWlyZWQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzUmVxdWlyZWQpOyB9Ci0g
ICAgYm9vbCBzdXBwb3J0c1JlcXVpcmVkQXR0cmlidXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c1JlcXVpcmVkQXR0
cmlidXRlKTsgfQotICAgIGJvb2wgaXNFeHBhbmRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNFeHBhbmRlZCk7IH0KLSAgICBG
bG9hdFJlY3QgcmVsYXRpdmVGcmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHJlY3RBdHRy
aWJ1dGVWYWx1ZTxGbG9hdFJlY3Q+KEFYUHJvcGVydHlOYW1lOjpSZWxhdGl2ZUZyYW1lKTsgfQot
ICAgIGJvb2wgc3VwcG9ydHNEYXRldGltZUF0dHJpYnV0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNEYXRldGltZUF0
dHJpYnV0ZSk7IH0KLSAgICBTdHJpbmcgZGF0ZXRpbWVBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpEYXRl
dGltZUF0dHJpYnV0ZVZhbHVlKTsgfQotICAgIGJvb2wgY2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6
OkNhblNldEZvY3VzQXR0cmlidXRlKTsgfQotICAgIGJvb2wgY2FuU2V0VGV4dFJhbmdlQXR0cmli
dXRlcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6Q2FuU2V0VGV4dFJhbmdlQXR0cmlidXRlcyk7IH0KLSAgICBib29sIGNhblNldFZh
bHVlQXR0cmlidXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVl
KEFYUHJvcGVydHlOYW1lOjpDYW5TZXRWYWx1ZUF0dHJpYnV0ZSk7IH0KLSAgICBib29sIGNhblNl
dE51bWVyaWNWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1
ZShBWFByb3BlcnR5TmFtZTo6Q2FuU2V0TnVtZXJpY1ZhbHVlKTsgfQotICAgIGJvb2wgY2FuU2V0
U2VsZWN0ZWRBdHRyaWJ1dGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRl
VmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNhblNldFNlbGVjdGVkQXR0cmlidXRlKTsgfQotICAgIGJv
b2wgY2FuU2V0U2VsZWN0ZWRDaGlsZHJlbkF0dHJpYnV0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q2FuU2V0U2VsZWN0ZWRDaGls
ZHJlbkF0dHJpYnV0ZSk7IH0KLSAgICBib29sIGNhblNldEV4cGFuZGVkQXR0cmlidXRlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpD
YW5TZXRFeHBhbmRlZEF0dHJpYnV0ZSk7IH0KLSAgICBib29sIGFjY2Vzc2liaWxpdHlJc0lnbm9y
ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0
eU5hbWU6OklzQWNjZXNzaWJpbGl0eUlnbm9yZWQpOyB9Ci0gICAgYm9vbCBpc1Nob3dpbmdWYWxp
ZGF0aW9uTWVzc2FnZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1
ZShBWFByb3BlcnR5TmFtZTo6SXNTaG93aW5nVmFsaWRhdGlvbk1lc3NhZ2UpOyB9Ci0gICAgU3Ry
aW5nIHZhbGlkYXRpb25NZXNzYWdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0
cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlZhbGlkYXRpb25NZXNzYWdlKTsgfQotICAgIHVu
c2lnbmVkIGJsb2NrcXVvdGVMZXZlbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHVuc2lnbmVk
QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkJsb2NrcXVvdGVMZXZlbCk7IH0KLSAgICBp
bnQgaGVhZGluZ0xldmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gaW50QXR0cmlidXRlVmFs
dWUoQVhQcm9wZXJ0eU5hbWU6OkhlYWRpbmdMZXZlbCk7IH0KLSAgICBpbnQgdGFibGVMZXZlbCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGludEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1l
OjpUYWJsZUxldmVsKTsgfQotICAgIEFjY2Vzc2liaWxpdHlCdXR0b25TdGF0ZSBjaGVja2JveE9y
UmFkaW9WYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2li
aWxpdHlCdXR0b25TdGF0ZT4oaW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkFjY2Vz
c2liaWxpdHlCdXR0b25TdGF0ZSkpOyB9Ci0gICAgU3RyaW5nIHZhbHVlRGVzY3JpcHRpb24oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFt
ZTo6VmFsdWVEZXNjcmlwdGlvbik7IH0KLSAgICBmbG9hdCB2YWx1ZUZvclJhbmdlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZmxvYXRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6VmFs
dWVGb3JSYW5nZSk7IH0KLSAgICBmbG9hdCBtYXhWYWx1ZUZvclJhbmdlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gZmxvYXRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6TWF4VmFsdWVG
b3JSYW5nZSk7IH0KLSAgICBmbG9hdCBtaW5WYWx1ZUZvclJhbmdlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZmxvYXRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6TWluVmFsdWVGb3JS
YW5nZSk7IH0KLSAgICBBWENvcmVPYmplY3QqIHNlbGVjdGVkUmFkaW9CdXR0b24oKSBvdmVycmlk
ZSB7IHJldHVybiBvYmplY3RBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U2VsZWN0ZWRS
YWRpb0J1dHRvbik7IH0KLSAgICBBWENvcmVPYmplY3QqIHNlbGVjdGVkVGFiSXRlbSgpIG92ZXJy
aWRlIHsgcmV0dXJuIG9iamVjdEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTZWxlY3Rl
ZFRhYkl0ZW0pOyB9Ci0gICAgaW50IGxheW91dENvdW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gaW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkxheW91dENvdW50KTsgfQotICAg
IGRvdWJsZSBlc3RpbWF0ZWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBkb3VibGVBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6RXN0aW1hdGVkTG9hZGluZ1By
b2dyZXNzKTsgfQotICAgIGJvb2wgc3VwcG9ydHNBUklBT3ducygpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNBUklBT3du
cyk7IH0KLSAgICBib29sIGlzQWN0aXZlRGVzY2VuZGFudE9mRm9jdXNlZENvbnRhaW5lcigpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6
SXNBY3RpdmVEZXNjZW5kYW50T2ZGb2N1c2VkQ29udGFpbmVyKTsgfQotICAgIHZvaWQgYXJpYUNv
bnRyb2xzRWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbikgY29u
c3Qgb3ZlcnJpZGUgeyBmaWxsQ2hpbGRyZW5WZWN0b3JGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFt
ZTo6QVJJQUNvbnRyb2xzRWxlbWVudHMsIGNoaWxkcmVuKTsgfQotICAgIHZvaWQgYXJpYURldGFp
bHNFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuKSBjb25zdCBv
dmVycmlkZSB7IGZpbGxDaGlsZHJlblZlY3RvckZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpB
UklBRGV0YWlsc0VsZW1lbnRzLCBjaGlsZHJlbik7IH0KLSAgICB2b2lkIGFyaWFFcnJvck1lc3Nh
Z2VFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuKSBjb25zdCBv
dmVycmlkZSB7IGZpbGxDaGlsZHJlblZlY3RvckZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpB
UklBRXJyb3JNZXNzYWdlRWxlbWVudHMsIGNoaWxkcmVuKTsgfQotICAgIHZvaWQgYXJpYUZsb3dU
b0VsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4pIGNvbnN0IG92
ZXJyaWRlIHsgZmlsbENoaWxkcmVuVmVjdG9yRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkFS
SUFGbG93VG9FbGVtZW50cywgY2hpbGRyZW4pOyB9Ci0gICAgdm9pZCBhcmlhT3duc0VsZW1lbnRz
KEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4pIGNvbnN0IG92ZXJyaWRlIHsg
ZmlsbENoaWxkcmVuVmVjdG9yRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkFSSUFPd25zRWxl
bWVudHMsIGNoaWxkcmVuKTsgfQotICAgIGJvb2wgaGFzUG9wdXAoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Okhhc1BvcHVwKTsgfQot
ICAgIFN0cmluZyBwb3B1cFZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0
cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlBvcHVwVmFsdWUpOyB9Ci0gICAgYm9vbCBwcmVz
c2VkSXNQcmVzZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVl
KEFYUHJvcGVydHlOYW1lOjpQcmVzc2VkSXNQcmVzZW50KTsgfQotICAgIGJvb2wgYXJpYUlzTXVs
dGlsaW5lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpBUklBSXNNdWx0aWxpbmUpOyB9Ci0gICAgU3RyaW5nIGludmFsaWRTdGF0dXMo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5
TmFtZTo6SW52YWxpZFN0YXR1cyk7IH0KLSAgICBib29sIHN1cHBvcnRzRXhwYW5kZWQoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlN1
cHBvcnRzRXhwYW5kZWQpOyB9Ci0gICAgQWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb24gc29ydERp
cmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxp
dHlTb3J0RGlyZWN0aW9uPihpbnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U29ydERp
cmVjdGlvbikpOyB9Ci0gICAgYm9vbCBjYW52YXNIYXNGYWxsYmFja0NvbnRlbnQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNhbnZh
c0hhc0ZhbGxiYWNrQ29udGVudCk7IH0KLSAgICBib29sIHN1cHBvcnRzUmFuZ2VWYWx1ZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6
U3VwcG9ydHNSYW5nZVZhbHVlKTsgfQotICAgIFN0cmluZyBpZGVudGlmaWVyQXR0cmlidXRlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5h
bWU6OklkZW50aWZpZXJBdHRyaWJ1dGUpOyB9Ci0gICAgU3RyaW5nIGxpbmtSZWxWYWx1ZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1l
OjpMaW5rUmVsVmFsdWUpOyB9Ci0gICAgdm9pZCBjbGFzc0xpc3QoVmVjdG9yPFN0cmluZz4mKSBj
b25zdCBvdmVycmlkZTsKLSAgICBBY2Nlc3NpYmlsaXR5Q3VycmVudFN0YXRlIGN1cnJlbnRTdGF0
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlDdXJy
ZW50U3RhdGU+KGludEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpDdXJyZW50U3RhdGUp
KTsgfQotICAgIFN0cmluZyBjdXJyZW50VmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBz
dHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q3VycmVudFZhbHVlKTsgfQotICAg
IGJvb2wgc3VwcG9ydHNDdXJyZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJp
YnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c0N1cnJlbnQpOyB9Ci0gICAgY29uc3Qg
U3RyaW5nIGtleVNob3J0Y3V0c1ZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5n
QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OktleVNob3J0Y3V0c1ZhbHVlKTsgfQotICAg
IGJvb2wgc3VwcG9ydHNTZXRTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJp
YnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c1NldFNpemUpOyB9Ci0gICAgYm9vbCBz
dXBwb3J0c1Bvc0luU2V0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZh
bHVlKEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c1Bvc0luU2V0KTsgfQotICAgIGludCBzZXRTaXpl
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gaW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5h
bWU6OlNldFNpemUpOyB9Ci0gICAgaW50IHBvc0luU2V0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gaW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlBvc0luU2V0KTsgfQotICAgIGJv
b2wgc3VwcG9ydHNBUklBRHJvcHBpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0
cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzQVJJQURyb3BwaW5nKTsgfQotICAg
IGJvb2wgc3VwcG9ydHNBUklBRHJhZ2dpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29s
QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzQVJJQURyYWdnaW5nKTsgfQot
ICAgIGJvb2wgaXNBUklBR3JhYmJlZCgpIG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVW
YWx1ZShBWFByb3BlcnR5TmFtZTo6SXNBUklBR3JhYmJlZCk7IH0KLSAgICBWZWN0b3I8U3RyaW5n
PiBkZXRlcm1pbmVBUklBRHJvcEVmZmVjdHMoKSBvdmVycmlkZSB7IHJldHVybiB2ZWN0b3JBdHRy
aWJ1dGVWYWx1ZTxTdHJpbmc+KEFYUHJvcGVydHlOYW1lOjpBUklBRHJvcEVmZmVjdHMpOyB9Ci0g
ICAgQVhDb3JlT2JqZWN0KiBhY2Nlc3NpYmlsaXR5SGl0VGVzdChjb25zdCBJbnRQb2ludCYpIGNv
bnN0IG92ZXJyaWRlOwotICAgIEFYQ29yZU9iamVjdCogZm9jdXNlZFVJRWxlbWVudCgpIGNvbnN0
IG92ZXJyaWRlOwotICAgIEFYQ29yZU9iamVjdCogcGFyZW50T2JqZWN0KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gcGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7IH0KLSAgICBBWENvcmVPYmplY3Qq
IHBhcmVudE9iamVjdFVuaWdub3JlZCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgbGlua2Vk
VUlFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuKSBjb25zdCBv
dmVycmlkZSB7IGZpbGxDaGlsZHJlblZlY3RvckZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpM
aW5rZWRVSUVsZW1lbnRzLCBjaGlsZHJlbik7IH0KLSAgICBBWENvcmVPYmplY3QqIHRpdGxlVUlF
bGVtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gb2JqZWN0QXR0cmlidXRlVmFsdWUoQVhQ
cm9wZXJ0eU5hbWU6OlRpdGxlVUlFbGVtZW50KTsgfQotICAgIGJvb2wgZXhwb3Nlc1RpdGxlVUlF
bGVtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpFeHBvc2VzVGl0bGVVSUVsZW1lbnQpOyB9Ci0gICAgQVhDb3JlT2JqZWN0KiBz
Y3JvbGxCYXIoQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uKSBvdmVycmlkZTsKLSAgICBBY2Nlc3Np
YmlsaXR5Um9sZSBhcmlhUm9sZUF0dHJpYnV0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0
YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlSb2xlPihpbnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5
TmFtZTo6QVJJQVJvbGVBdHRyaWJ1dGUpKTsgfQotICAgIFN0cmluZyBjb21wdXRlZExhYmVsKCkg
b3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNv
bXB1dGVkTGFiZWwpOyB9Ci0gICAgaW50IHRleHRMZW5ndGgoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBpbnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6VGV4dExlbmd0aCk7IH0KLSAg
ICBjb25zdCBTdHJpbmcgcGxhY2Vob2xkZXJWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpQbGFjZWhvbGRlclZhbHVlKTsg
fQotICAgIFN0cmluZyBleHBhbmRlZFRleHRWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpFeHBhbmRlZFRleHRWYWx1ZSk7
IH0KLSAgICBib29sIHN1cHBvcnRzRXhwYW5kZWRUZXh0VmFsdWUoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzRXhwYW5k
ZWRUZXh0VmFsdWUpOyB9Ci0gICAgdm9pZCBjb2xvclZhbHVlKGludCYsIGludCYsIGludCYpIGNv
bnN0IG92ZXJyaWRlOwotICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGVWYWx1ZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlSb2xlPihpbnRBdHRyaWJ1
dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Um9sZVZhbHVlKSk7IH0KLSAgICBTdHJpbmcgcm9sZVBs
YXRmb3JtU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFs
dWUoQVhQcm9wZXJ0eU5hbWU6OlJvbGVQbGF0Zm9ybVN0cmluZyk7IH0KLSAgICBTdHJpbmcgcm9s
ZURlc2NyaXB0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFs
dWUoQVhQcm9wZXJ0eU5hbWU6OlJvbGVEZXNjcmlwdGlvbik7IH0KLSAgICBTdHJpbmcgYXJpYUxh
bmRtYXJrUm9sZURlc2NyaXB0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0
cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkFSSUFMYW5kbWFya1JvbGVEZXNjcmlwdGlvbik7
IH0KLSAgICBib29sIHN1cHBvcnRzUHJlc3NBY3Rpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzUHJlc3NBY3Rpb24p
OyB9Ci0gICAgTGF5b3V0UmVjdCBib3VuZGluZ0JveFJlY3QoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiByZWN0QXR0cmlidXRlVmFsdWU8TGF5b3V0UmVjdD4oQVhQcm9wZXJ0eU5hbWU6OkJvdW5k
aW5nQm94UmVjdCk7IH0KLSAgICBMYXlvdXRSZWN0IGVsZW1lbnRSZWN0KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gcmVjdEF0dHJpYnV0ZVZhbHVlPExheW91dFJlY3Q+KEFYUHJvcGVydHlOYW1l
OjpFbGVtZW50UmVjdCk7IH0KLSAgICBJbnRQb2ludCBjbGlja1BvaW50KCkgb3ZlcnJpZGUgeyBy
ZXR1cm4gaW50UG9pbnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q2xpY2tQb2ludCk7
IH0KLSAgICB2b2lkIGFjY2Vzc2liaWxpdHlUZXh0KFZlY3RvcjxBY2Nlc3NpYmlsaXR5VGV4dD4m
IHRleHRzKSBjb25zdCBvdmVycmlkZTsKLSAgICBTdHJpbmcgY29tcHV0ZWRSb2xlU3RyaW5nKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5h
bWU6OkNvbXB1dGVkUm9sZVN0cmluZyk7IH0KLSAgICBib29sIGlzVmFsdWVBdXRvZmlsbGVkKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1l
OjpJc1ZhbHVlQXV0b2ZpbGxlZCk7IH0KLSAgICBib29sIGlzVmFsdWVBdXRvZmlsbEF2YWlsYWJs
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5
TmFtZTo6SXNWYWx1ZUF1dG9maWxsQXZhaWxhYmxlKTsgfQotICAgIEF1dG9GaWxsQnV0dG9uVHlw
ZSB2YWx1ZUF1dG9maWxsQnV0dG9uVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PEF1dG9GaWxsQnV0dG9uVHlwZT4oaW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5h
bWU6OlZhbHVlQXV0b2ZpbGxCdXR0b25UeXBlKSk7IH0KLSAgICB2b2lkIGFyaWFUcmVlUm93cyhB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuKSBvdmVycmlkZSB7IGZpbGxDaGls
ZHJlblZlY3RvckZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpBUklBVHJlZVJvd3MsIGNoaWxk
cmVuKTsgfQotICAgIHZvaWQgYXJpYVRyZWVJdGVtRGlzY2xvc2VkUm93cyhBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuKSBvdmVycmlkZSB7IGZpbGxDaGlsZHJlblZlY3RvckZv
clByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpBUklBVHJlZUl0ZW1EaXNjbG9zZWRSb3dzLCBjaGls
ZHJlbik7IH0KLSAgICB2b2lkIGFyaWFUcmVlSXRlbUNvbnRlbnQoQWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yJiBjaGlsZHJlbikgb3ZlcnJpZGUgeyBmaWxsQ2hpbGRyZW5WZWN0b3JGb3JQcm9w
ZXJ0eShBWFByb3BlcnR5TmFtZTo6QVJJQVRyZWVJdGVtQ29udGVudCwgY2hpbGRyZW4pOyB9Ci0g
ICAgVVJMIHVybCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHVybEF0dHJpYnV0ZVZhbHVlKEFY
UHJvcGVydHlOYW1lOjpVUkwpOyB9Ci0gICAgU3RyaW5nIGFjY2Vzc0tleSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpBY2Nlc3NL
ZXkpOyB9Ci0gICAgU3RyaW5nIGFjdGlvblZlcmIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBz
dHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6QWN0aW9uVmVyYik7IH0KLSAgICBT
dHJpbmcgcmVhZE9ubHlWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJp
YnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpSZWFkT25seVZhbHVlKTsgfQotICAgIFN0cmluZyBh
dXRvQ29tcGxldGVWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpBdXRvQ29tcGxldGVWYWx1ZSk7IH0KLSAgICBPcHRpb25T
ZXQ8U3BlYWtBcz4gc3BlYWtBc1Byb3BlcnR5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gb3B0
aW9uU2V0QXR0cmlidXRlVmFsdWU8U3BlYWtBcz4oQVhQcm9wZXJ0eU5hbWU6OlNwZWFrQXMpOyB9
Ci0gICAgYm9vbCBpc01hdGhFbGVtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0
dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc01hdGhFbGVtZW50KTsgfQotICAgIGJvb2wg
aXNNYXRoRnJhY3Rpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFs
dWUoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aEZyYWN0aW9uKTsgfQotICAgIGJvb2wgaXNNYXRoRmVu
Y2VkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVy
dHlOYW1lOjpJc01hdGhGZW5jZWQpOyB9Ci0gICAgYm9vbCBpc01hdGhTdWJzY3JpcHRTdXBlcnNj
cmlwdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6SXNNYXRoU3Vic2NyaXB0U3VwZXJzY3JpcHQpOyB9Ci0gICAgYm9vbCBpc01hdGhS
b3coKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0
eU5hbWU6OklzTWF0aFJvdyk7IH0KLSAgICBib29sIGlzTWF0aFVuZGVyT3ZlcigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNNYXRo
VW5kZXJPdmVyKTsgfQotICAgIGJvb2wgaXNNYXRoUm9vdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNNYXRoUm9vdCk7IH0KLSAg
ICBib29sIGlzTWF0aFNxdWFyZVJvb3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0
cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aFNxdWFyZVJvb3QpOyB9Ci0gICAgYm9v
bCBpc01hdGhUZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVl
KEFYUHJvcGVydHlOYW1lOjpJc01hdGhUZXh0KTsgfQotICAgIGJvb2wgaXNNYXRoTnVtYmVyKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1l
OjpJc01hdGhOdW1iZXIpOyB9Ci0gICAgYm9vbCBpc01hdGhPcGVyYXRvcigpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNNYXRoT3Bl
cmF0b3IpOyB9Ci0gICAgYm9vbCBpc01hdGhGZW5jZU9wZXJhdG9yKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc01hdGhGZW5jZU9w
ZXJhdG9yKTsgfQotICAgIGJvb2wgaXNNYXRoU2VwYXJhdG9yT3BlcmF0b3IoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTWF0aFNl
cGFyYXRvck9wZXJhdG9yKTsgfQotICAgIGJvb2wgaXNNYXRoSWRlbnRpZmllcigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNNYXRo
SWRlbnRpZmllcik7IH0KLSAgICBib29sIGlzTWF0aFRhYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc01hdGhUYWJsZSk7IH0K
LSAgICBib29sIGlzTWF0aFRhYmxlUm93KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0
dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc01hdGhUYWJsZVJvdyk7IH0KLSAgICBib29s
IGlzTWF0aFRhYmxlQ2VsbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVW
YWx1ZShBWFByb3BlcnR5TmFtZTo6SXNNYXRoVGFibGVDZWxsKTsgfQotICAgIGJvb2wgaXNNYXRo
TXVsdGlzY3JpcHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUo
QVhQcm9wZXJ0eU5hbWU6OklzTWF0aE11bHRpc2NyaXB0KTsgfQotICAgIGJvb2wgaXNNYXRoVG9r
ZW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0
eU5hbWU6OklzTWF0aFRva2VuKTsgfQotICAgIEFYQ29yZU9iamVjdCogbWF0aFJhZGljYW5kT2Jq
ZWN0KCkgb3ZlcnJpZGUgeyByZXR1cm4gb2JqZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5h
bWU6Ok1hdGhSYWRpY2FuZE9iamVjdCk7IH0KLSAgICBBWENvcmVPYmplY3QqIG1hdGhSb290SW5k
ZXhPYmplY3QoKSBvdmVycmlkZSB7IHJldHVybiBvYmplY3RBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6TWF0aFJvb3RJbmRleE9iamVjdCk7IH0KLSAgICBBWENvcmVPYmplY3QqIG1hdGhV
bmRlck9iamVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG9iamVjdEF0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpNYXRoVW5kZXJPYmplY3QpOyB9Ci0gICAgQVhDb3JlT2JqZWN0KiBtYXRoT3Zl
ck9iamVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG9iamVjdEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVy
dHlOYW1lOjpNYXRoT3Zlck9iamVjdCk7IH0KLSAgICBBWENvcmVPYmplY3QqIG1hdGhOdW1lcmF0
b3JPYmplY3QoKSBvdmVycmlkZSB7IHJldHVybiBvYmplY3RBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6TWF0aE51bWVyYXRvck9iamVjdCk7IH0KLSAgICBBWENvcmVPYmplY3QqIG1hdGhE
ZW5vbWluYXRvck9iamVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG9iamVjdEF0dHJpYnV0ZVZhbHVl
KEFYUHJvcGVydHlOYW1lOjpNYXRoRGVub21pbmF0b3JPYmplY3QpOyB9Ci0gICAgQVhDb3JlT2Jq
ZWN0KiBtYXRoQmFzZU9iamVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG9iamVjdEF0dHJpYnV0ZVZh
bHVlKEFYUHJvcGVydHlOYW1lOjpNYXRoQmFzZU9iamVjdCk7IH0KLSAgICBBWENvcmVPYmplY3Qq
IG1hdGhTdWJzY3JpcHRPYmplY3QoKSBvdmVycmlkZSB7IHJldHVybiBvYmplY3RBdHRyaWJ1dGVW
YWx1ZShBWFByb3BlcnR5TmFtZTo6TWF0aFN1YnNjcmlwdE9iamVjdCk7IH0KLSAgICBBWENvcmVP
YmplY3QqIG1hdGhTdXBlcnNjcmlwdE9iamVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG9iamVjdEF0
dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpNYXRoU3VwZXJzY3JpcHRPYmplY3QpOyB9Ci0g
ICAgU3RyaW5nIG1hdGhGZW5jZWRPcGVuU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
c3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Ok1hdGhGZW5jZWRPcGVuU3RyaW5n
KTsgfQotICAgIFN0cmluZyBtYXRoRmVuY2VkQ2xvc2VTdHJpbmcoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6TWF0aEZlbmNlZENs
b3NlU3RyaW5nKTsgfQotICAgIGludCBtYXRoTGluZVRoaWNrbmVzcygpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGludEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpNYXRoTGluZVRoaWNr
bmVzcyk7IH0KLSAgICBib29sIGlzQW5vbnltb3VzTWF0aE9wZXJhdG9yKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0Fub255bW91
c01hdGhPcGVyYXRvcik7IH0KLSAgICB2b2lkIG1hdGhQcmVzY3JpcHRzKEFjY2Vzc2liaWxpdHlN
YXRoTXVsdGlzY3JpcHRQYWlycyYpIG92ZXJyaWRlOwotICAgIHZvaWQgbWF0aFBvc3RzY3JpcHRz
KEFjY2Vzc2liaWxpdHlNYXRoTXVsdGlzY3JpcHRQYWlycyYpIG92ZXJyaWRlOwotICAgIGJvb2wg
ZmlsZVVwbG9hZEJ1dHRvblJldHVybnNWYWx1ZUluVGl0bGUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkZpbGVVcGxvYWRCdXR0b25S
ZXR1cm5zVmFsdWVJblRpdGxlKTsgfQotICAgIFN0cmluZyBzcGVlY2hIaW50QXR0cmlidXRlVmFs
dWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6U3BlZWNoSGludCk7IH0KLSAgICBTdHJpbmcgZGVzY3JpcHRpb25BdHRyaWJ1dGVW
YWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpEZXNjcmlwdGlvbik7IH0KLSAgICBTdHJpbmcgaGVscFRleHRBdHRyaWJ1dGVW
YWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpIZWxwVGV4dCk7IH0KLSAgICBTdHJpbmcgdGl0bGVBdHRyaWJ1dGVWYWx1ZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlO
YW1lOjpUaXRsZSk7IH0KLSNpZiBQTEFURk9STShDT0NPQSkgJiYgIVBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgYm9vbCBjYXJldEJyb3dzaW5nRW5hYmxlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q2FyZXRCcm93c2luZ0VuYWJs
ZWQpOyB9Ci0jZW5kaWYKLSAgICBBWENvcmVPYmplY3QqIGZvY3VzYWJsZUFuY2VzdG9yKCkgb3Zl
cnJpZGUgeyByZXR1cm4gb2JqZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkZvY3Vz
YWJsZUFuY2VzdG9yKTsgfQotICAgIEFYQ29yZU9iamVjdCogZWRpdGFibGVBbmNlc3RvcigpIG92
ZXJyaWRlIHsgcmV0dXJuIG9iamVjdEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpFZGl0
YWJsZUFuY2VzdG9yKTsgfQotICAgIEFYQ29yZU9iamVjdCogaGlnaGVzdEVkaXRhYmxlQW5jZXN0
b3IoKSBvdmVycmlkZSB7IHJldHVybiBvYmplY3RBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFt
ZTo6SGlnaGVzdEVkaXRhYmxlQW5jZXN0b3IpOyB9Ci0gICAgQWNjZXNzaWJpbGl0eU9yaWVudGF0
aW9uIG9yaWVudGF0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QWNj
ZXNzaWJpbGl0eU9yaWVudGF0aW9uPihpbnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6
T3JpZW50YXRpb24pKTsgfQotICAgIHVuc2lnbmVkIGhpZXJhcmNoaWNhbExldmVsKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gdW5zaWduZWRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6
SGllcmFyY2hpY2FsTGV2ZWwpOyB9Ci0gICAgU3RyaW5nIGxhbmd1YWdlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Okxhbmd1YWdl
KTsgfQotICAgIGJvb2wgY2FuSGF2ZVNlbGVjdGVkQ2hpbGRyZW4oKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNhbkhhdmVTZWxlY3Rl
ZENoaWxkcmVuKTsgfQotICAgIHZvaWQgc2VsZWN0ZWRDaGlsZHJlbihBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3ImIGNoaWxkcmVuKSBvdmVycmlkZSB7IGZpbGxDaGlsZHJlblZlY3RvckZvclBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpTZWxlY3RlZENoaWxkcmVuLCBjaGlsZHJlbik7IH0KLSAg
ICB2b2lkIHZpc2libGVDaGlsZHJlbihBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxk
cmVuKSBvdmVycmlkZSB7IGZpbGxDaGlsZHJlblZlY3RvckZvclByb3BlcnR5KEFYUHJvcGVydHlO
YW1lOjpWaXNpYmxlQ2hpbGRyZW4sIGNoaWxkcmVuKTsgfQotICAgIHZvaWQgdGFiQ2hpbGRyZW4o
QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbikgb3ZlcnJpZGUgeyBmaWxsQ2hp
bGRyZW5WZWN0b3JGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6VGFiQ2hpbGRyZW4sIGNoaWxk
cmVuKTsgfQotICAgIGJvb2wgaGFzQVJJQVZhbHVlTm93KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpIYXNBUklBVmFsdWVOb3cpOyB9
Ci0gICAgU3RyaW5nIHRhZ05hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRy
aWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6VGFnTmFtZSk7IH0KLSAgICBjb25zdCBBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuKGJvb2wgdXBkYXRlQ2hpbGRyZW5JZk5lZWRl
ZCA9IHRydWUpIG92ZXJyaWRlOwotICAgIHZvaWQgdXBkYXRlQ2hpbGRyZW5JZk5lY2Vzc2FyeSgp
IG92ZXJyaWRlIHsgfQotICAgIGJvb2wgaXNEZXRhY2hlZEZyb21QYXJlbnQoKSBvdmVycmlkZTsK
LSAgICBib29sIHN1cHBvcnRzTGl2ZVJlZ2lvbihib29sID0gdHJ1ZSkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTdXBwb3J0c0xpdmVS
ZWdpb24pOyB9Ci0gICAgYm9vbCBpc0luc2lkZUxpdmVSZWdpb24oYm9vbCA9IHRydWUpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNJ
bnNpZGVMaXZlUmVnaW9uKTsgfQotICAgIGNvbnN0IFN0cmluZyBsaXZlUmVnaW9uU3RhdHVzKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5h
bWU6OkxpdmVSZWdpb25TdGF0dXMpOyB9Ci0gICAgY29uc3QgU3RyaW5nIGxpdmVSZWdpb25SZWxl
dmFudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpMaXZlUmVnaW9uUmVsZXZhbnQpOyB9Ci0gICAgYm9vbCBsaXZlUmVnaW9uQXRv
bWljKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVy
dHlOYW1lOjpMaXZlUmVnaW9uQXRvbWljKTsgfQotICAgIGJvb2wgaXNCdXN5KCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0J1c3kp
OyB9Ci0gICAgYm9vbCBpc0lubGluZVRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29s
QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzSW5saW5lVGV4dCk7IH0KLSAgICAvLyBT
cGluIGJ1dHRvbiBzdXBwb3J0LgotICAgIEFYQ29yZU9iamVjdCogaW5jcmVtZW50QnV0dG9uKCkg
b3ZlcnJpZGUgeyByZXR1cm4gb2JqZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Oklu
Y3JlbWVudEJ1dHRvbik7IH0KLSAgICBBWENvcmVPYmplY3QqIGRlY3JlbWVudEJ1dHRvbigpIG92
ZXJyaWRlIHsgcmV0dXJuIG9iamVjdEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpEZWNy
ZW1lbnRCdXR0b24pOyB9Ci0gICAgYm9vbCBpc0luY3JlbWVudG9yKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0luY3JlbWVudG9y
KTsgfQotCi0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
c3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlN0cmluZ1ZhbHVlKTsgfQotCi0g
ICAgLy8gUGFyYW1ldGVyaXplZCBhdHRyaWJ1dGUgcmV0cmlldmFsLgotICAgIFZlY3RvcjxSZWZQ
dHI8UmFuZ2U+PiBmaW5kVGV4dFJhbmdlcyhBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dENyaXRlcmlh
IGNvbnN0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVmVjdG9yPFN0cmluZz4gcGVyZm9ybVRleHRP
cGVyYXRpb24oQWNjZXNzaWJpbGl0eVRleHRPcGVyYXRpb24gY29uc3QmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGZpbmRNYXRjaGluZ09iamVjdHMoQWNjZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhKiwg
QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgb3ZlcnJpZGU7Ci0KLSAgICAvLyBBdHRyaWJ1
dGVzIHJldHJpZXZlZCBmcm9tIHRoZSByb290IG5vZGUgb25seSBzbyB0aGF0IHRoZSBkYXRhIGlz
bid0IGR1cGxpY2F0ZWQgb24gZWFjaCBub2RlLgotICAgIHVpbnQ2NF90IHNlc3Npb25JRCgpIGNv
bnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyBkb2N1bWVudFVSSSgpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIFN0cmluZyBkb2N1bWVudEVuY29kaW5nKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBw
cmV2ZW50S2V5Ym9hcmRET01FdmVudERpc3BhdGNoKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICAv
LyBUT0RPOiBUZXh0IHJhbmdlcyBhbmQgc2VsZWN0aW9uLgotICAgIFBsYWluVGV4dFJhbmdlIHNl
bGVjdGVkVGV4dFJhbmdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gUGxhaW5UZXh0UmFuZ2Uo
KTsgfQotICAgIHVuc2lnbmVkIHNlbGVjdGlvblN0YXJ0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gMDsgfQotICAgIHVuc2lnbmVkIHNlbGVjdGlvbkVuZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIDA7IH0KLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIFZpc2libGVTZWxlY3Rpb24oKTsgfQotICAgIFN0cmluZyBzZWxlY3RlZFRleHQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQotICAgIFZpc2libGVQb3NpdGlv
blJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQotICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQ
b3NpdGlvblJhbmdlRm9yTGluZSh1bnNpZ25lZCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQotICAgIFJlZlB0cjxSYW5nZT4gZWxlbWVudFJhbmdlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQotICAgIFZpc2libGVQb3NpdGlvblJh
bmdlIHZpc2libGVQb3NpdGlvblJhbmdlRm9yVW5vcmRlcmVkUG9zaXRpb25zKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0KLSAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSBw
b3NpdGlvbk9mTGVmdFdvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQotICAgIFZpc2libGVQb3NpdGlvblJh
bmdlIHBvc2l0aW9uT2ZSaWdodFdvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQotICAgIFZpc2libGVQb3Np
dGlvblJhbmdlIGxlZnRMaW5lVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0
aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQot
ICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHJpZ2h0TGluZVZpc2libGVQb3NpdGlvblJhbmdlKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3Np
dGlvblJhbmdlKCk7IH0KLSAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSBzZW50ZW5jZUZvclBvc2l0
aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2li
bGVQb3NpdGlvblJhbmdlKCk7IH0KLSAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSBwYXJhZ3JhcGhG
b3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOyB9Ci0gICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2Ugc3R5
bGVSYW5nZUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0KLSAgICBWaXNpYmxlUG9zaXRpb25S
YW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJikg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQotICAgIFZp
c2libGVQb3NpdGlvblJhbmdlIGxpbmVSYW5nZUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0K
LSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlRm9yUGxhaW5UZXh0UmFuZ2UoY29uc3QgUGxhaW5UZXh0
UmFuZ2UmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9Ci0gICAgU3RyaW5nIHN0
cmluZ0ZvclJhbmdlKFJlZlB0cjxSYW5nZT4pIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmlu
ZygpOyB9Ci0gICAgSW50UmVjdCBib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBW
aXNpYmxlUG9zaXRpb25SYW5nZSYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEludFJlY3QoKTsg
fQotICAgIEludFJlY3QgYm91bmRzRm9yUmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdlPikgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gSW50UmVjdCgpOyB9Ci0gICAgaW50IGxlbmd0aEZvclZpc2libGVQ
b3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJikgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gMDsgfQotICAgIHZvaWQgc2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZShj
b25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYpIGNvbnN0IG92ZXJyaWRlIHsgfQotICAgIFZpc2li
bGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JCb3VuZHMoY29uc3QgSW50UmVjdCYsIEFjY2Vz
c2liaWxpdHlWaXNpYmxlUG9zaXRpb25Gb3JCb3VuZHMpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IFZpc2libGVQb3NpdGlvbigpOyB9Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlv
bkZvclBvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJs
ZVBvc2l0aW9uKCk7IH0KLSAgICBWaXNpYmxlUG9zaXRpb24gbmV4dFZpc2libGVQb3NpdGlvbihj
b25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9z
aXRpb24oKTsgfQotICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c1Zpc2libGVQb3NpdGlvbihj
b25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9z
aXRpb24oKTsgfQotICAgIFZpc2libGVQb3NpdGlvbiBuZXh0V29yZEVuZChjb25zdCBWaXNpYmxl
UG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsgfQot
ICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c1dvcmRTdGFydChjb25zdCBWaXNpYmxlUG9zaXRp
b24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsgfQotICAgIFZp
c2libGVQb3NpdGlvbiBuZXh0TGluZUVuZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOyB9Ci0gICAgVmlzaWJs
ZVBvc2l0aW9uIHByZXZpb3VzTGluZVN0YXJ0UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9u
JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7IH0KLSAgICBWaXNp
YmxlUG9zaXRpb24gbmV4dFNlbnRlbmNlRW5kUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9u
JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7IH0KLSAgICBWaXNp
YmxlUG9zaXRpb24gcHJldmlvdXNTZW50ZW5jZVN0YXJ0UG9zaXRpb24oY29uc3QgVmlzaWJsZVBv
c2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7IH0KLSAg
ICBWaXNpYmxlUG9zaXRpb24gbmV4dFBhcmFncmFwaEVuZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOyB9Ci0g
ICAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzUGFyYWdyYXBoU3RhcnRQb3NpdGlvbihjb25zdCBW
aXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24o
KTsgfQotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleCh1bnNpZ25l
ZCwgYm9vbCAvKmxhc3RJbmRleE9LICovKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxl
UG9zaXRpb24oKTsgfQotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JJbmRl
eChpbnQpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOyB9Ci0gICAg
aW50IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KLSAgICBBWENvcmVPYmplY3QqIGFjY2Vzc2liaWxpdHlP
YmplY3RGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBudWxscHRyOyB9Ci0gICAgaW50IGxpbmVGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxl
UG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9Ci0gICAgUGxhaW5UZXh0UmFu
Z2UgcGxhaW5UZXh0UmFuZ2VGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9z
aXRpb25SYW5nZSYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7IH0K
LSAgICBpbnQgaW5kZXgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gMDsgfQotICAgIHZvaWQgbGluZUJyZWFrcyhWZWN0b3I8aW50PiYpIGNvbnN0IG92ZXJy
aWRlIHsgfQotICAgIFBsYWluVGV4dFJhbmdlIGRvQVhSYW5nZUZvckxpbmUodW5zaWduZWQpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7IH0KLSAgICBQbGFpblRleHRS
YW5nZSBkb0FYUmFuZ2VGb3JQb3NpdGlvbihjb25zdCBJbnRQb2ludCYpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7IH0KLSAgICBQbGFpblRleHRSYW5nZSBkb0FYUmFu
Z2VGb3JJbmRleCh1bnNpZ25lZCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gUGxhaW5UZXh0UmFu
Z2UoKTsgfQotICAgIFBsYWluVGV4dFJhbmdlIGRvQVhTdHlsZVJhbmdlRm9ySW5kZXgodW5zaWdu
ZWQpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7IH0KLSAgICBTdHJp
bmcgZG9BWFN0cmluZ0ZvclJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJikgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KLSAgICBJbnRSZWN0IGRvQVhCb3VuZHNGb3JSYW5nZShj
b25zdCBQbGFpblRleHRSYW5nZSYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEludFJlY3QoKTsg
fQotICAgIEludFJlY3QgZG9BWEJvdW5kc0ZvclJhbmdlVXNpbmdDaGFyYWN0ZXJPZmZzZXQoY29u
c3QgUGxhaW5UZXh0UmFuZ2UmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBJbnRSZWN0KCk7IH0K
LSAgICB1bnNpZ25lZCBkb0FYTGluZUZvckluZGV4KHVuc2lnbmVkKSBvdmVycmlkZSB7IHJldHVy
biAwOyB9Ci0KLSAgICAvLyBBdHRyaWJ1dGUgc2V0dGVycy4KLSAgICB2b2lkIHNldEFSSUFHcmFi
YmVkKGJvb2wpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0SXNFeHBhbmRlZChib29sKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHNldFZhbHVlKGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFNlbGVj
dGVkKGJvb2wpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0U2VsZWN0ZWRSb3dzKEFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Rm9jdXNlZChib29sKSBv
dmVycmlkZTsKLSAgICB2b2lkIHNldFNlbGVjdGVkVGV4dChjb25zdCBTdHJpbmcmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHNldFNlbGVjdGVkVGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSNp
ZiBQTEFURk9STShDT0NPQSkgJiYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgdm9pZCBzZXRD
YXJldEJyb3dzaW5nRW5hYmxlZChib29sKSBvdmVycmlkZTsKLSNlbmRpZgotICAgIHZvaWQgc2V0
UHJldmVudEtleWJvYXJkRE9NRXZlbnREaXNwYXRjaChib29sKSBvdmVycmlkZTsKLQotICAgIC8v
IFRPRE86IEZ1bmN0aW9ucwotICAgIFN0cmluZyB0ZXh0VW5kZXJFbGVtZW50KEFjY2Vzc2liaWxp
dHlUZXh0VW5kZXJFbGVtZW50TW9kZSA9IEFjY2Vzc2liaWxpdHlUZXh0VW5kZXJFbGVtZW50TW9k
ZSgpKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQotICAgIFJlZlB0cjxSYW5n
ZT4gZ2V0TWlzc3BlbGxpbmdSYW5nZShSZWZQdHI8UmFuZ2U+IGNvbnN0JiwgQWNjZXNzaWJpbGl0
eVNlYXJjaERpcmVjdGlvbikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQotICAg
IEZsb2F0UmVjdCBjb252ZXJ0RnJhbWVUb1NwYWNlKGNvbnN0IEZsb2F0UmVjdCYsIEFjY2Vzc2li
aWxpdHlDb252ZXJzaW9uU3BhY2UpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZsb2F0UmVjdCgp
OyB9Ci0gICAgdm9pZCBpbmNyZW1lbnQoKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGRlY3JlbWVu
dCgpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgc2Nyb2xsVG9NYWtlVmlzaWJsZSgpIGNvbnN0IG92
ZXJyaWRlIHsgfQotICAgIHZvaWQgc2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1cyhjb25z
dCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBzY3JvbGxUb0dsb2JhbFBv
aW50KGNvbnN0IEludFBvaW50JikgY29uc3Qgb3ZlcnJpZGUgeyB9Ci0gICAgYm9vbCByZXBsYWNl
VGV4dEluUmFuZ2UoY29uc3QgU3RyaW5nJiwgY29uc3QgUGxhaW5UZXh0UmFuZ2UmKSBvdmVycmlk
ZTsKLSAgICBib29sIGluc2VydFRleHQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBtYWtlUmFuZ2VWaXNpYmxlKGNvbnN0IFBsYWluVGV4dFJhbmdlJikgb3ZlcnJpZGUgeyB9Ci0g
ICAgYm9vbCBwcmVzcygpIG92ZXJyaWRlOwotICAgIGJvb2wgcGVyZm9ybURlZmF1bHRBY3Rpb24o
KSBvdmVycmlkZTsKLQotICAgIC8vIEZ1bmN0aW9ucyB0aGF0IHNob3VsZCBuZXZlciBiZSBjYWxs
ZWQgb24gYW4gaXNvbGF0ZWQgdHJlZSBvYmplY3QuIEFTU0VSVCB0aGF0IHRoZXNlIGFyZSBub3Qg
cmVhY2hlZDsKLSAgICBib29sIGlzQWNjZXNzaWJpbGl0eU9iamVjdCgpIGNvbnN0IG92ZXJyaWRl
OwotICAgIGJvb2wgaXNBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCgpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIGJvb2wgaXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgYm9vbCBpc0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIoKSBjb25zdCBvdmVycmlkZTsKLSAgICBi
b29sIGlzQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29s
IGlzQWNjZXNzaWJpbGl0eVNWR1Jvb3QoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlzQWNj
ZXNzaWJpbGl0eVNWR0VsZW1lbnQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlzQXR0YWNo
bWVudEVsZW1lbnQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlzTmF0aXZlSW1hZ2UoKSBj
b25zdCBvdmVycmlkZTsKLSAgICBib29sIGlzSW1hZ2VCdXR0b24oKSBjb25zdCBvdmVycmlkZTsK
LSAgICBib29sIGlzQ29udGFpbmVkQnlQYXNzd29yZEZpZWxkKCkgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgQVhDb3JlT2JqZWN0KiBwYXNzd29yZEZpZWxkT3JDb250YWluaW5nUGFzc3dvcmRGaWVsZCgp
IG92ZXJyaWRlOwotICAgIGJvb2wgaXNOYXRpdmVUZXh0Q29udHJvbCgpIGNvbnN0IG92ZXJyaWRl
OwotICAgIGJvb2wgaXNOYXRpdmVMaXN0Qm94KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBp
c0xpc3RCb3hPcHRpb24oKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlzU2xpZGVyVGh1bWIo
KSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlzSW5wdXRTbGlkZXIoKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBib29sIGlzTGFiZWwoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlzRGF0YVRh
YmxlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0ltYWdlTWFwTGluaygpIGNvbnN0IG92
ZXJyaWRlOwotICAgIGJvb2wgaXNOYXRpdmVTcGluQnV0dG9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgYm9vbCBpc1NwaW5CdXR0b25QYXJ0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc01v
Y2tPYmplY3QoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlzTWVkaWFPYmplY3QoKSBjb25z
dCBvdmVycmlkZTsKLSAgICBib29sIGlzQVJJQVRleHRDb250cm9sKCkgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgYm9vbCBpc05vbk5hdGl2ZVRleHRDb250cm9sKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
Ym9vbCBpc0Jsb2NrcXVvdGUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlzTGFuZG1hcmso
KSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlzRmlndXJlRWxlbWVudCgpIGNvbnN0IG92ZXJy
aWRlOwotICAgIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZSgpIGNvbnN0IG92ZXJyaWRlOwotICAg
IGJvb2wgaXNIb3ZlcmVkKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0luZGV0ZXJtaW5h
dGUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlzTG9hZGVkKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0xvYWRlZCk7IH0K
LSAgICBib29sIGlzT25TY3JlZW4oKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlzT2ZmU2Ny
ZWVuKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc1ByZXNzZWQoKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBib29sIGlzVW52aXNpdGVkKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0xp
bmtlZCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgYm9vbCBpc0NvbGxhcHNlZCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNT
ZWxlY3RlZE9wdGlvbkFjdGl2ZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaGFzQm9sZEZv
bnQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGhhc0l0YWxpY0ZvbnQoKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBib29sIGhhc01pc3NwZWxsaW5nKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9v
bCBoYXNQbGFpblRleHQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGhhc1NhbWVGb250KFJl
bmRlck9iamVjdCopIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaGFzU2FtZUZvbnRDb2xvcihS
ZW5kZXJPYmplY3QqKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGhhc1NhbWVTdHlsZShSZW5k
ZXJPYmplY3QqKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlzU3RhdGljVGV4dCgpIGNvbnN0
IG92ZXJyaWRlOwotICAgIGJvb2wgaGFzVW5kZXJsaW5lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
Ym9vbCBoYXNIaWdobGlnaHRpbmcoKSBjb25zdCBvdmVycmlkZTsKLSAgICBFbGVtZW50KiBlbGVt
ZW50KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgTm9kZSogbm9kZSgpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIoKSBjb25zdCBvdmVycmlkZTsKLSAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0SW5jbHVzaW9uIGRlZmF1bHRPYmplY3RJbmNsdXNpb24oKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBib29sIGFjY2Vzc2liaWxpdHlJc0lnbm9yZWRCeURlZmF1bHQoKSBjb25zdCBv
dmVycmlkZTsKLSAgICBmbG9hdCBzdGVwVmFsdWVGb3JSYW5nZSgpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIEFYQ29yZU9iamVjdCogc2VsZWN0ZWRMaXN0SXRlbSgpIG92ZXJyaWRlOwotICAgIHZvaWQg
YXJpYUFjdGl2ZURlc2NlbmRhbnRSZWZlcmVuY2luZ0VsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGls
ZHJlblZlY3RvciYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgYXJpYUNvbnRyb2xzUmVmZXJl
bmNpbmdFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdCBvdmVycmlk
ZTsKLSAgICB2b2lkIGFyaWFEZXNjcmliZWRCeUVsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJl
blZlY3RvciYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgYXJpYURlc2NyaWJlZEJ5UmVmZXJl
bmNpbmdFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdCBvdmVycmlk
ZTsKLSAgICB2b2lkIGFyaWFEZXRhaWxzUmVmZXJlbmNpbmdFbGVtZW50cyhBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3ImKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIGFyaWFFcnJvck1lc3Nh
Z2VSZWZlcmVuY2luZ0VsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0
IG92ZXJyaWRlOwotICAgIHZvaWQgYXJpYUZsb3dUb1JlZmVyZW5jaW5nRWxlbWVudHMoQWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhcmlhTGFi
ZWxsZWRCeUVsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0IG92ZXJy
aWRlOwotICAgIHZvaWQgYXJpYUxhYmVsbGVkQnlSZWZlcmVuY2luZ0VsZW1lbnRzKEFjY2Vzc2li
aWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgYXJpYU93bnNS
ZWZlcmVuY2luZ0VsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0IG92
ZXJyaWRlOwotICAgIGJvb2wgaGFzRGF0YWxpc3QoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29s
IHN1cHBvcnRzSGFzUG9wdXAoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIHN1cHBvcnRzUHJl
c3NlZCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgc3VwcG9ydHNDaGVja2VkKCkgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgYm9vbCBpZ25vcmVkRnJvbU1vZGFsUHJlc2VuY2UoKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBib29sIGlzTW9kYWxEZXNjZW5kYW50KE5vZGUqKSBjb25zdCBvdmVycmlkZTsK
LSAgICBib29sIGlzTW9kYWxOb2RlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgQVhDb3JlT2JqZWN0
KiBlbGVtZW50QWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG9pbnQmKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBBWENvcmVPYmplY3QqIGZpcnN0Q2hpbGQoKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBBWENvcmVPYmplY3QqIGxhc3RDaGlsZCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIEFYQ29yZU9i
amVjdCogcHJldmlvdXNTaWJsaW5nKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgQVhDb3JlT2JqZWN0
KiBuZXh0U2libGluZygpIGNvbnN0IG92ZXJyaWRlOwotICAgIEFYQ29yZU9iamVjdCogbmV4dFNp
YmxpbmdVbmlnbm9yZWQoaW50IGxpbWl0KSBjb25zdCBvdmVycmlkZTsKLSAgICBBWENvcmVPYmpl
Y3QqIHByZXZpb3VzU2libGluZ1VuaWdub3JlZChpbnQgbGltaXQpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIEFYQ29yZU9iamVjdCogcGFyZW50T2JqZWN0SWZFeGlzdHMoKSBjb25zdCBvdmVycmlkZTsK
LSAgICBib29sIGlzRGVzY2VuZGFudE9mQmFycmVuUGFyZW50KCkgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgYm9vbCBpc0Rlc2NlbmRhbnRPZlJvbGUoQWNjZXNzaWJpbGl0eVJvbGUpIGNvbnN0IG92ZXJy
aWRlOwotICAgIEFYQ29yZU9iamVjdCogb2JzZXJ2YWJsZU9iamVjdCgpIGNvbnN0IG92ZXJyaWRl
OwotICAgIEFYQ29yZU9iamVjdCogY29ycmVzcG9uZGluZ0xhYmVsRm9yQ29udHJvbEVsZW1lbnQo
KSBjb25zdCBvdmVycmlkZTsKLSAgICBBWENvcmVPYmplY3QqIGNvcnJlc3BvbmRpbmdDb250cm9s
Rm9yTGFiZWxFbGVtZW50KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc1ByZXNlbnRhdGlv
bmFsQ2hpbGRPZkFyaWFSb2xlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBhcmlhUm9sZUhh
c1ByZXNlbnRhdGlvbmFsQ2hpbGRyZW4oKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGluaGVy
aXRzUHJlc2VudGF0aW9uYWxSb2xlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRBY2Nl
c3NpYmxlTmFtZShjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBoYXNBdHRy
aWJ1dGVzUmVxdWlyZWRGb3JJbmNsdXNpb24oKSBjb25zdCBvdmVycmlkZTsKLSAgICBTdHJpbmcg
YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIHRp
dGxlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIGhlbHBUZXh0KCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgYm9vbCBpc0FSSUFTdGF0aWNUZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3Ry
aW5nIHRleHQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBTdHJpbmcgYXJpYUxhYmVsZWRCeUF0dHJp
YnV0ZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyBhcmlhRGVzY3JpYmVkQnlBdHRyaWJ1
dGUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGFjY2Vzc2libGVOYW1lRGVyaXZlc0Zyb21D
b250ZW50KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBlbGVtZW50c0Zyb21BdHRyaWJ1dGUo
VmVjdG9yPEVsZW1lbnQqPiYsIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdCBvdmVycmlkZTsK
LSAgICBBWE9iamVjdENhY2hlKiBheE9iamVjdENhY2hlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
RWxlbWVudCogYW5jaG9yRWxlbWVudCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIEVsZW1lbnQqIGFj
dGlvbkVsZW1lbnQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBQYXRoIGVsZW1lbnRQYXRoKCkgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzdXBwb3J0c1BhdGgoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzUGF0aCk7IH0K
LSAgICBUZXh0SXRlcmF0b3JCZWhhdmlvciB0ZXh0SXRlcmF0b3JCZWhhdmlvckZvclRleHRSYW5n
ZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFdpZGdldCogd2lkZ2V0KCkgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgV2lkZ2V0KiB3aWRnZXRGb3JBdHRhY2htZW50VmlldygpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIFBhZ2UqIHBhZ2UoKSBjb25zdCBvdmVycmlkZTsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQo
KSBjb25zdCBvdmVycmlkZTsKLSAgICBGcmFtZVZpZXcqIGRvY3VtZW50RnJhbWVWaWV3KCkgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgRnJhbWUqIGZyYW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgRnJh
bWUqIG1haW5GcmFtZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIERvY3VtZW50KiB0b3BEb2N1bWVu
dCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFNjcm9sbFZpZXcqIHNjcm9sbFZpZXdBbmNlc3Rvcigp
IGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCB0ZXh0Q2hhbmdlZCgpIG92ZXJyaWRlOwotICAgIHZvaWQgdXBkYXRlQWNjZXNzaWJp
bGl0eVJvbGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGFkZENoaWxkcmVuKCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBhZGRDaGlsZChBWENvcmVPYmplY3QqKSBvdmVycmlkZTsKLSAgICB2b2lkIGluc2Vy
dENoaWxkKEFYQ29yZU9iamVjdCosIHVuc2lnbmVkKSBvdmVycmlkZTsKLSAgICBib29sIHNob3Vs
ZElnbm9yZUF0dHJpYnV0ZVJvbGUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGNhbkhhdmVD
aGlsZHJlbigpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaGFzQ2hpbGRyZW4oKSBjb25zdCBv
dmVycmlkZTsKLSAgICB2b2lkIHNldE5lZWRzVG9VcGRhdGVDaGlsZHJlbigpIG92ZXJyaWRlOwot
ICAgIHZvaWQgc2V0TmVlZHNUb1VwZGF0ZVN1YnRyZWUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGNs
ZWFyQ2hpbGRyZW4oKSBvdmVycmlkZTsKLSAgICBib29sIG5lZWRzVG9VcGRhdGVDaGlsZHJlbigp
IGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgZGV0YWNoRnJvbVBhcmVudCgpIG92ZXJyaWRlOwot
ICAgIGJvb2wgc2hvdWxkRm9jdXNBY3RpdmVEZXNjZW5kYW50KCkgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgQVhDb3JlT2JqZWN0KiBhY3RpdmVEZXNjZW5kYW50KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBoYW5kbGVBY3RpdmVEZXNjZW5kYW50Q2hhbmdlZCgpIG92ZXJyaWRlOwotICAgIHZvaWQg
aGFuZGxlQXJpYUV4cGFuZGVkQ2hhbmdlZCgpIG92ZXJyaWRlOwotICAgIGJvb2wgaXNEZXNjZW5k
YW50T2ZPYmplY3QoY29uc3QgQVhDb3JlT2JqZWN0KikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9v
bCBpc0FuY2VzdG9yT2ZPYmplY3QoY29uc3QgQVhDb3JlT2JqZWN0KikgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgQVhDb3JlT2JqZWN0KiBmaXJzdEFub255bW91c0Jsb2NrQ2hpbGQoKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBib29sIGhhc0F0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgY29uc3QgQXRvbVN0cmluZyYgZ2V0QXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGhhc1RhZ05hbWUoY29uc3QgUXVh
bGlmaWVkTmFtZSYpIGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyBzdHJpbmdWYWx1ZUZvck1T
QUEoKSBjb25zdCBvdmVycmlkZTsKLSAgICBTdHJpbmcgc3RyaW5nUm9sZUZvck1TQUEoKSBjb25z
dCBvdmVycmlkZTsKLSAgICBTdHJpbmcgbmFtZUZvck1TQUEoKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBTdHJpbmcgZGVzY3JpcHRpb25Gb3JNU0FBKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgQWNjZXNz
aWJpbGl0eVJvbGUgcm9sZVZhbHVlRm9yTVNBQSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmlu
ZyBwYXNzd29yZEZpZWxkVmFsdWUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBBWENvcmVPYmplY3Qq
IGxpdmVSZWdpb25BbmNlc3Rvcihib29sIGV4Y2x1ZGVJZk9mZiA9IHRydWUpIGNvbnN0IG92ZXJy
aWRlOwotICAgIGJvb2wgaGFzQ29udGVudEVkaXRhYmxlQXR0cmlidXRlU2V0KCkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgYm9vbCBzdXBwb3J0c1JlYWRPbmx5KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
Ym9vbCBzdXBwb3J0c0F1dG9Db21wbGV0ZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgc3Vw
cG9ydHNBUklBQXR0cmlidXRlcygpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgc2Nyb2xsQnlQ
YWdlKFNjcm9sbEJ5UGFnZURpcmVjdGlvbikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgSW50UG9pbnQg
c2Nyb2xsUG9zaXRpb24oKSBjb25zdCBvdmVycmlkZTsKLSAgICBJbnRTaXplIHNjcm9sbENvbnRl
bnRzU2l6ZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIEludFJlY3Qgc2Nyb2xsVmlzaWJsZUNvbnRl
bnRSZWN0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzY3JvbGxUb01ha2VWaXNpYmxlKGNv
bnN0IFNjcm9sbFJlY3RUb1Zpc2libGVPcHRpb25zJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9v
bCBsYXN0S25vd25Jc0lnbm9yZWRWYWx1ZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TGFzdEtu
b3duSXNJZ25vcmVkVmFsdWUoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBub3RpZnlJZklnbm9y
ZWRWYWx1ZUNoYW5nZWQoKSBvdmVycmlkZTsKLSAgICBib29sIGlzTWF0aFNjcmlwdE9iamVjdChB
Y2Nlc3NpYmlsaXR5TWF0aFNjcmlwdE9iamVjdFR5cGUpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJv
b2wgaXNNYXRoTXVsdGlzY3JpcHRPYmplY3QoQWNjZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlwdE9i
amVjdFR5cGUpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNBWEhpZGRlbigpIGNvbnN0IG92
ZXJyaWRlOwotICAgIGJvb2wgaXNET01IaWRkZW4oKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29s
IGlzSGlkZGVuKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBvdmVycmlkZUF0dGFjaG1lbnRQ
YXJlbnQoQVhDb3JlT2JqZWN0KiBwYXJlbnQpIG92ZXJyaWRlOwotICAgIGJvb2wgYWNjZXNzaWJp
bGl0eUlnbm9yZUF0dGFjaG1lbnQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0SW5jbHVzaW9uIGFjY2Vzc2liaWxpdHlQbGF0Zm9ybUluY2x1ZGVzT2JqZWN0KCkgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBoYXNBcHBsZVBERkFubm90YXRpb25BdHRyaWJ1dGUoKSBj
b25zdCBvdmVycmlkZTsKLSAgICBjb25zdCBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyogYW5jZXN0
b3JBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyhib29sIGluY2x1ZGVTZWxmKSBjb25zdCBvdmVycmlk
ZTsKLSAgICB2b2lkIHNldElzSWdub3JlZEZyb21QYXJlbnREYXRhKEFjY2Vzc2liaWxpdHlJc0ln
bm9yZWRGcm9tUGFyZW50RGF0YSYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJJc0lnbm9yZWRG
cm9tUGFyZW50RGF0YSgpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0SXNJZ25vcmVkRnJvbVBhcmVu
dERhdGFGb3JDaGlsZChBWENvcmVPYmplY3QqKSBvdmVycmlkZTsKLQotICAgIHZvaWQgdXBkYXRl
QmFja2luZ1N0b3JlKCkgb3ZlcnJpZGU7Ci0KLSAgICBBWElEIG1fcGFyZW50IHsgSW52YWxpZEFY
SUQgfTsKLSAgICBBWElEIG1faWQgeyBJbnZhbGlkQVhJRCB9OwotICAgIGJvb2wgbV9pbml0aWFs
aXplZCB7IGZhbHNlIH07Ci0gICAgQVhJc29sYXRlZFRyZWVJRCBtX3RyZWVJZGVudGlmaWVyOwot
ICAgIFJlZlB0cjxBWElzb2xhdGVkVHJlZT4gbV9jYWNoZWRUcmVlOwotICAgIFZlY3RvcjxBWElE
PiBtX2NoaWxkcmVuSURzOwotICAgIFZlY3RvcjxSZWZQdHI8QVhDb3JlT2JqZWN0Pj4gbV9jaGls
ZHJlbjsKLQotICAgIEhhc2hNYXA8QVhQcm9wZXJ0eU5hbWUsIEF0dHJpYnV0ZVZhbHVlVmFyaWFu
dCwgV1RGOjpJbnRIYXNoPEFYUHJvcGVydHlOYW1lPiwgV1RGOjpTdHJvbmdFbnVtSGFzaFRyYWl0
czxBWFByb3BlcnR5TmFtZT4+IG1fYXR0cmlidXRlTWFwOwotICAgIExvY2sgbV9hdHRyaWJ1dGVN
YXBMb2NrOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KChBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvbWFjL0FYSXNvbGF0ZWRPYmplY3RNYWMubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9tYWMvQVhJc29sYXRl
ZE9iamVjdE1hYy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMjI0YzU5ODVjN2IzNTJkYmJkY2NhN2EwOTNmMDI0
ZjQ4ZWRmNzlmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pc29sYXRlZHRyZWUvbWFjL0FYSXNvbGF0ZWRPYmplY3RNYWMubW0KQEAgLTAsMCArMSw0NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQg
ImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFBMQVRGT1JNKE1BQykK
KyNpbXBvcnQgIkFYSXNvbGF0ZWRPYmplY3QuaCIKKworI2ltcG9ydCAiV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJNYWMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEFYSXNv
bGF0ZWRPYmplY3Q6OmF0dGFjaFBsYXRmb3JtV3JhcHBlcigpCit7CisgICAgW3dyYXBwZXIoKSBh
dHRhY2g6KEFYQ29yZU9iamVjdCopdGhpc107Cit9CisKK3ZvaWQgQVhJc29sYXRlZE9iamVjdDo6
ZGV0YWNoUGxhdGZvcm1XcmFwcGVyKEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlwZSkKK3sKKyAg
ICBbd3JhcHBlcigpIGRldGFjaF07Cit9CisKK30gLy8gV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKEFDQ0VTU0lCSUxJVFkpICYmIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tCmluZGV4IGI3NGU2ZDk5
ODQ5OWNkMTg4YzdiNTAzMmUxOGZmMzEwOTAwNDM1OWIuLjlkNDk0ZjFiNTNhZWI2Yjc4M2ZhZmRk
MmE1NjMyYjA1MGI3YTM1ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbQpAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgRU5B
QkxFKEFDQ0VTU0lCSUxJVFkpICYmIFBMQVRGT1JNKE1BQykKIAotI2ltcG9ydCAiQVhJc29sYXRl
ZFRyZWVOb2RlLmgiCisjaW1wb3J0ICJBWElzb2xhdGVkT2JqZWN0LmgiCiAjaW1wb3J0ICJBY2Nl
c3NpYmlsaXR5T2JqZWN0LmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5VGFibGUuaCIKICNpbXBv
cnQgIlJlbmRlck9iamVjdC5oIgpAQCAtMjMyLDEyICsyMzIsNiBAQCBzdGF0aWMgQVhUZXh0U2Vs
ZWN0aW9uR3JhbnVsYXJpdHkgcGxhdGZvcm1HcmFudWxhcml0eUZvcldlYkNvcmVHcmFudWxhcml0
eShXZWJDbwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgQVhPYmplY3RDYWNoZTo6ZGV0
YWNoV3JhcHBlcihBWENvcmVPYmplY3QqIG9iaiwgQWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBl
KQotewotICAgIFtvYmotPndyYXBwZXIoKSBkZXRhY2hdOwotICAgIG9iai0+c2V0V3JhcHBlcihu
dWxscHRyKTsKLX0KLQogdm9pZCBBWE9iamVjdENhY2hlOjphdHRhY2hXcmFwcGVyKEFYQ29yZU9i
amVjdCogb2JqKQogewogICAgIFJldGFpblB0cjxXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
cj4gd3JhcHBlciA9IGFkb3B0TlMoW1tXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhbGxv
Y10gaW5pdFdpdGhBY2Nlc3NpYmlsaXR5T2JqZWN0Om9ial0pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdE1hYy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RNYWMubW0K
aW5kZXggN2Y4ZDQ3MDAzYmNiNTc5YmU3MDczMDE0ZTY0NzA4YzM1OTJiNjc2Ny4uNWQ4ZTIwMDI3
MzY4NDNkYTFhOTkzMjZmN2RlZDFjMzllN2ZmN2UwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdE1hYy5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0TWFjLm1tCkBA
IC00MSw2ICs0MSwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3ZvaWQgQWNjZXNzaWJp
bGl0eU9iamVjdDo6YXR0YWNoUGxhdGZvcm1XcmFwcGVyKCkKK3sKKyAgICBbd3JhcHBlcigpIGF0
dGFjaDp0aGlzXTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpkZXRhY2hQbGF0Zm9y
bVdyYXBwZXIoQWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBlKQoreworICAgIFt3cmFwcGVyKCkg
ZGV0YWNoXTsKK30KKwogdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpkZXRhY2hGcm9tUGFyZW50
KCkKIHsKICAgICBpZiAoaXNBdHRhY2htZW50KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaCBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyQmFzZS5oCmluZGV4IGI2NGQwZTc2YzRkMzk2ZGVjMThmYjY4ZjYwYzk1ODExMDg1YmZm
NWQuLmJlOWY5NWYyMGNjNDRhZTllMjk4OWI1YjAxMTc5NGY5MzViNmJlYzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5oCkBAIC01MSw2ICs1MSw3IEBAIGNsYXNzIFZp
c2libGVQb3NpdGlvbjsKIAogLSAoaWQpaW5pdFdpdGhBY2Nlc3NpYmlsaXR5T2JqZWN0OihXZWJD
b3JlOjpBWENvcmVPYmplY3QqKWF4T2JqZWN0OwogCistICh2b2lkKWF0dGFjaDooV2ViQ29yZTo6
QVhDb3JlT2JqZWN0KilheE9iamVjdDsKIC0gKHZvaWQpZGV0YWNoOwogCiBAcHJvcGVydHkgKG5v
bmF0b21pYywgYXNzaWduKSBXZWJDb3JlOjpBWElEIGlkZW50aWZpZXI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlckJhc2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW0KaW5kZXggNzI0NjkwNmE4N2IwODIwOTY4M2ExNTcz
ZjdiYmMwMzBmZTg5ZWUwOC4uMTZmOTFiYjZlZDQ0NzQ0Y2FmNDc1ZmNkYTNkNzUyZTQ0MDY2ZmM5
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbQpAQCAtMjkwLDEw
ICsyOTAsMTQgQEAgTlNBcnJheSAqY29udmVydFRvTlNBcnJheShjb25zdCBXZWJDb3JlOjpBWENv
cmVPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3QKICAgICBpZiAoIShzZWxmID0gW3N1
cGVyIGluaXRdKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAorICAgIFtzZWxmIGF0dGFjaDpheE9i
amVjdF07CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpYXR0YWNoOihBWENvcmVPYmpl
Y3QqKWF4T2JqZWN0Cit7CiAgICAgbV9vYmplY3QgPSBheE9iamVjdDsKICAgICBfaWRlbnRpZmll
ciA9IG1fb2JqZWN0LT5vYmplY3RJRCgpOwotCi0gICAgcmV0dXJuIHNlbGY7CiB9CiAKIC0gKHZv
aWQpZGV0YWNoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L3dpbi9B
WE9iamVjdENhY2hlV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvd2luL0FY
T2JqZWN0Q2FjaGVXaW4uY3BwCmluZGV4IDNmNTU1ODY4NTk3NzMxNDFiYzE1ZWVhYTdlYzc4NmU5
OGNlMzFkNjAuLmRlNTAwMWIxYTg1YzUyZmZlYThhNzNhOTI5NTRiMGE2NTIzYWUxOWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvd2luL0FYT2JqZWN0Q2FjaGVXaW4u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvd2luL0FYT2JqZWN0Q2FjaGVX
aW4uY3BwCkBAIC00MSwxNSArNDEsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQg
QVhPYmplY3RDYWNoZTo6ZGV0YWNoV3JhcHBlcihBWENvcmVPYmplY3QqIG9iaiwgQWNjZXNzaWJp
bGl0eURldGFjaG1lbnRUeXBlKQotewotICAgIC8vIE9uIFdpbmRvd3MsIEFjY2Vzc2liaWxpdHlP
YmplY3RzIGFyZSBjcmVhdGVkIHdoZW4gZ2V0X2FjY0NoaWxkQ291bnQgaXMKLSAgICAvLyBjYWxs
ZWQsIGJ1dCB0aGV5IGFyZSBub3Qgd3JhcHBlZCB1bnRpbCBnZXRfYWNjQ2hpbGQgaXMgY2FsbGVk
LCBzbyB0aGlzCi0gICAgLy8gb2JqZWN0IG1heSBub3QgaGF2ZSBhIHdyYXBwZXIuCi0gICAgaWYg
KEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiB3cmFwcGVyID0gb2JqLT53cmFwcGVyKCkpCi0g
ICAgICAgIHdyYXBwZXItPmRldGFjaCgpOwotfQotCiB2b2lkIEFYT2JqZWN0Q2FjaGU6OmF0dGFj
aFdyYXBwZXIoQVhDb3JlT2JqZWN0KikKIHsKICAgICAvLyBPbiBXaW5kb3dzLCBBY2Nlc3NpYmls
aXR5T2JqZWN0cyBhcmUgd3JhcHBlZCB3aGVuIHRoZSBhY2Nlc3NpYmlsaXR5CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L3dpbi9BY2Nlc3NpYmlsaXR5T2JqZWN0V2lu
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvd2luL0FjY2Vzc2liaWxpdHlPYmpl
Y3RXaW4uY3BwCmluZGV4IDQzMDRkM2I1NDZiYWE5NGFiYjI5MzJkZWU2OTZhNjFmZjU3OGNmYmYu
LjZmYzdhNmFhMzY0ZjE3ZDBkMWVmMTZjNjY4NTMxNjY5ZWEyYTA3OWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvd2luL0FjY2Vzc2liaWxpdHlPYmplY3RXaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvd2luL0FjY2Vzc2liaWxpdHlPYmpl
Y3RXaW4uY3BwCkBAIC0zMCw2ICszMCwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3Zv
aWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6ZGV0YWNoUGxhdGZvcm1XcmFwcGVyKEFjY2Vzc2liaWxp
dHlEZXRhY2htZW50VHlwZSkKK3sKKyAgICAvLyBPbiBXaW5kb3dzLCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0cyBhcmUgY3JlYXRlZCB3aGVuIGdldF9hY2NDaGlsZENvdW50IGlzCisgICAgLy8gY2FsbGVk
LCBidXQgdGhleSBhcmUgbm90IHdyYXBwZWQgdW50aWwgZ2V0X2FjY0NoaWxkIGlzIGNhbGxlZCwg
c28gdGhpcworICAgIC8vIG9iamVjdCBtYXkgbm90IGhhdmUgYSB3cmFwcGVyLgorICAgIGlmIChB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciogd3JhcHBlciA9IHRoaXMtPndyYXBwZXIoKSkKKyAg
ICAgICAgd3JhcHBlci0+ZGV0YWNoKCk7Cit9CisKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6
YWNjZXNzaWJpbGl0eUlnbm9yZUF0dGFjaG1lbnQoKSBjb25zdAogewogICAgIHJldHVybiBmYWxz
ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387997</attachid>
            <date>2020-01-16 17:48:04 -0800</date>
            <delta_ts>2020-01-23 09:41:18 -0800</delta_ts>
            <desc>Uploading diff manually.</desc>
            <filename>patch_for_bug206384.diff</filename>
            <type>text/plain</type>
            <size>30500</size>
            <attacher name="Andres Gonzalez">andresg_22</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2MmM1NzY2MDY5Mi4uMGIyYWUzOTE0ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTAs
MCArMSw5MiBAQAorMjAyMC0wMS0xNiAgQW5kcmVzIEdvbnphbGV6ICA8YW5kcmVzZ18yMkBhcHBs
ZS5jb20+CisKKyAgICAgICAgVXNlIHRoZSBzYW1lIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
IGZvciBhc3NvY2lhdGVkIEFYT2JqZWN0IGFuZCBBWElzb2xhdGVkT2JqZWN0LgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2Mzg0CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXNzb2NpYXRlZCBBWE9iamVj
dCBhbmQgQVhJc29sYXRlZE9iamVjdCBuZWVkIHRvIHNoYXJlIHRoZSBzYW1lCisgICAgICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGluIG9yZGVyIGZvciBhY2Nlc3NpYmlsaXR5IGNsaWVu
dHMgdG8gd29yaworICAgICAgICBwcm9wZXJseS4gVGhpcyBjaGFuZ2UgaW1wbGVtZW50cyBBWENv
cmVPYmplY3Q6OnRha2VXcmFwcGVyIHdoaWNoIGlzCisgICAgICAgIHVzZWQgdG8gdHJhbnNmZXIg
dGhlIG93bmVyc2hpcCBvZiB0aGUgd3JhcHBlciBmcm9tIHRoZSBBWE9iamVjdCB0byB0aGUKKyAg
ICAgICAgYXNzb2NpYXRlZCBBWElzb2xhdGVkT2JqZWN0LiBTZXZlcmFsIGNoYW5nZXMgdG8gdGhl
IGRldGFjaCBhbmQgYXR0YWNoCisgICAgICAgIHdyYXBwZXIgbWV0aG9kcyB3ZXJlIG5lY2Vzc2Fy
eS4KKyAgICAgICAgLSBJbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbmV3IHdyYXBwZXIgZm9yIGFuIEFY
SXNvbGF0ZWRPYmplY3QsIGl0IHRha2VzCisgICAgICAgIHRoZSBvbmUgZnJvbSBpdHMgYXNzb2Np
YXRlZCBBWE9iamVjdC4KKyAgICAgICAgLSBUaGUgcHJldmlvdXMgQVhDb3JlT2JqZWN0OjpkZXRh
Y2ggbWV0aG9kIGJlY2FtZSBkZXRhY2hSZW1vdGVQYXJ0cywKKyAgICAgICAgc2luY2UgdGhpcyBt
ZXRob2QgZGV0YWNoZXMgYWxsIHJlZmVyZW5jZXMgdG8gYW5kIGZyb20gb3RoZXIgb2JqZWN0cy4K
KyAgICAgICAgLSBUaGUgbmV3IEFYQ29yZU9iamVjdDo6ZGV0YWNoIG1ldGhvZCBwZXJmb3JtcyB0
aHJlZSBkaXN0aW5jdGl2ZQorICAgICAgICBvcGVyYXRpb25zOgorICAgICAgICAxLiBEZXRhY2hl
cyB0aGUgcGxhdGZvcm0gd3JhcHBlci4KKyAgICAgICAgMi4gRGV0YWNoZXMgYWxsIHJlbW90ZSBy
ZWZlcmVuY2VzIHRvIGFuZCBmcm9tIG90aGVyIG9iamVjdHMuCisgICAgICAgIDMuIFNldHMgdGhl
IG9iamVjdCBJRCB0byBJbnZhbGlkQVhJRC4KKyAgICAgICAgLSBUaGUgYXR0YWNoUGxhdGZvcm1X
cmFwcGVyIGFuZCBkZXRhY2hQbGF0Zm9ybVdyYXBwZXIgbWV0aG9kcyBhbGxvdyBmb3IKKyAgICAg
ICAgcGxhdGZvcm0tc3BlY2lmaWMgY3VzdG9taXphdGlvbnMuCisgICAgICAgIC0gRm9yIGNvbnNp
c3RlbmN5IGluIG5hbWluZywgcmVuYW1lZCBBWElzb2xhdGVkVHJlZU5vZGUuaC9jcHAgdG8KKyAg
ICAgICAgQVhJc29sYXRlZE9iamVjdC5oL2NwcC4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6
CisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICogU291cmNlcy50eHQ6Cisg
ICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6On5BWE9iamVjdENhY2hlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBWE9iamVjdENhY2hlOjpjcmVhdGVJc29sYXRlZFRyZWVIaWVyYXJjaHkpOgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmpl
Y3RDYWNoZTo6ZGVmZXJUZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb25Gb3JUZXh0Q29udHJvbCk6
CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpkZXRhY2hXcmFwcGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpkZXRhY2hSZW1vdGVQ
YXJ0cyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6ZGV0YWNo
KTogRGVsZXRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0Lmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmRldGFjaFJlbW90ZVBhcnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmRldGFjaCk6IERlbGV0
ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6CisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpBWENvcmVPYmplY3Q6OmRldGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpB
WENvcmVPYmplY3Q6OmRldGFjaFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6QVhDb3JlT2Jq
ZWN0Ojp0YWtlV3JhcHBlcik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmRldGFjaFJlbW90ZVBhcnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OmRldGFjaCk6IERlbGV0ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Lmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5U2Nyb2xsVmlldzo6ZGV0YWNoUmVtb3RlUGFydHMpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVNjcm9sbFZpZXc6OmRldGFjaCk6IERlbGV0ZWQuCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5oOgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvYXRrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RD
YWNoZTo6ZGV0YWNoV3JhcHBlcik6IERlbGV0ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9h
dGsvQWNjZXNzaWJpbGl0eU9iamVjdEF0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpkZXRhY2hQbGF0Zm9ybVdyYXBwZXIpOgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvaW9zL0FYT2JqZWN0Q2FjaGVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVj
dENhY2hlOjpkZXRhY2hXcmFwcGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eU9iamVjdDo6YXR0YWNoUGxhdGZvcm1XcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmRldGFjaFBsYXRmb3JtV3JhcHBlcik6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVk
VHJlZU5vZGUuY3BwLgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZE9iamVjdDo6ZGV0YWNo
UmVtb3RlUGFydHMpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNv
bGF0ZWRPYmplY3QuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlTm9kZS5oLgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFY
SXNvbGF0ZWRUcmVlOjpyZW1vdmVUcmVlRm9yUGFnZUlEKToKKyAgICAgICAgKFdlYkNvcmU6OkFY
SXNvbGF0ZWRUcmVlOjphcHBseVBlbmRpbmdDaGFuZ2VzKToKKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5oOgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvaXNvbGF0ZWR0cmVlL21hYy9BWElzb2xhdGVkT2JqZWN0TWFjLm1tOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L3dpbi9BY2Nlc3NpYmlsaXR5T2JqZWN0V2luLmNw
cC4KKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6OmF0dGFjaFBsYXRmb3JtV3Jh
cHBlcik6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkT2JqZWN0OjpkZXRhY2hQbGF0Zm9y
bVdyYXBwZXIpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpkZXRhY2hXcmFwcGVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0TWFj
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6YXR0YWNoUGxhdGZv
cm1XcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmRldGFj
aFBsYXRmb3JtV3JhcHBlcik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UgaW5pdFdpdGhBY2Nlc3NpYmlsaXR5T2JqZWN0Ol0p
OgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UgYXR0YWNoOl0p
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvd2luL0FYT2JqZWN0Q2FjaGVXaW4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6ZGV0YWNoV3JhcHBlcik6IERlbGV0ZWQuCisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS93aW4vQWNjZXNzaWJpbGl0eU9iamVjdFdpbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpkZXRhY2hQbGF0Zm9ybVdyYXBw
ZXIpOgorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCAyOTZkZWE3ODMxYi4uN2RjODY0YWYyMDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNv
cmUvSGVhZGVycy5jbWFrZQpAQCAtMTczLDAgKzE3NCBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZS
QU1FV09SS19IRUFERVJTCisgICAgYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRl
ZE9iamVjdC5oCkBAIC0xNzUgKzE3NSwwIEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JL
X0hFQURFUlMKLSAgICBhY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZU5v
ZGUuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCBjMDNjZTZiNTEzMS4uZDY0ZWU3Y2E5
ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCkBAIC04MCwwICs4MSBAQCBsaXN0KEFQUEVO
RCBXZWJDb3JlX1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RPUklFUworICAgICIke1dFQkNPUkVfRElS
fS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9tYWMiCkBAIC0xNTEsMCArMTUzIEBAIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgIGFjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL21h
Yy9BWElzb2xhdGVkT2JqZWN0TWFjLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGQ4NWIxNzlhZGM3Li4x
ZDgzZmNhYTllZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTQ1MywwICs0NTQgQEAgYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5VHJlZUl0ZW0uY3BwCithY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9B
WElzb2xhdGVkT2JqZWN0LmNwcApAQCAtNDU1ICs0NTUsMCBAQCBhY2Nlc3NpYmlsaXR5L2lzb2xh
dGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHAKLWFjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FY
SXNvbGF0ZWRUcmVlTm9kZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXND
b2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDg5MDZmNTdk
YzlkLi5hOTcyNjY5MWZmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29h
LnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0zOCwwICszOSBA
QCBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW0g
QG5vLXVuaWZ5CithY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9tYWMvQVhJc29sYXRlZE9iamVj
dE1hYy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IGNjMzVhNTg5MTEzLi5jZWJkYjNkYWVhZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNzEzICs3MTMgQEAK
LQkJMjlBRTIxMzUyMUFCQTQ4QTAwODY5MjgzIC8qIEFYSXNvbGF0ZWRUcmVlTm9kZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlBRTIxMzMyMUFCQTQ4
QTAwODY5MjgzIC8qIEFYSXNvbGF0ZWRUcmVlTm9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTI5QUUyMTM1MjFBQkE0OEEwMDg2OTI4MyAvKiBB
WElzb2xhdGVkT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyOUFFMjEzMzIxQUJBNDhBMDA4NjkyODMgLyogQVhJc29sYXRlZE9iamVjdC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC02NjgzLDIg
KzY2ODMsMiBAQAotCQkyOUFFMjEzMzIxQUJBNDhBMDA4NjkyODMgLyogQVhJc29sYXRlZFRyZWVO
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFYSXNvbGF0ZWRUcmVlTm9kZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkyOUFFMjEzNDIxQUJBNDhBMDA4NjkyODMgLyogQVhJc29sYXRlZFRy
ZWVOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFYSXNvbGF0ZWRUcmVlTm9kZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI5QUUyMTMzMjFBQkE0OEEwMDg2OTI4MyAvKiBB
WElzb2xhdGVkT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFYSXNvbGF0ZWRPYmplY3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjlBRTIxMzQyMUFCQTQ4QTAwODY5MjgzIC8qIEFY
SXNvbGF0ZWRPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQVhJc29sYXRlZE9iamVjdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzQ5MSwwICsxMzQ5MiBAQAorCQlD
MDgzNDQzRDIzRDA3RkI3MDBCMzZFM0QgLyogQVhJc29sYXRlZE9iamVjdE1hYy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IEFYSXNvbGF0ZWRPYmplY3RNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xNzc5OSwwICsxNzgwMSwzIEBACisJCQkJQzA4MzQ0M0YyM0QwODAzRDAw
QjM2RTNEIC8qIG1hYyAqLywKKwkJCQkyOUFFMjEzNDIxQUJBNDhBMDA4NjkyODMgLyogQVhJc29s
YXRlZE9iamVjdC5jcHAgKi8sCisJCQkJMjlBRTIxMzMyMUFCQTQ4QTAwODY5MjgzIC8qIEFYSXNv
bGF0ZWRPYmplY3QuaCAqLywKQEAgLTE3ODAyLDIgKzE3ODA1LDAgQEAKLQkJCQkyOUFFMjEzNDIx
QUJBNDhBMDA4NjkyODMgLyogQVhJc29sYXRlZFRyZWVOb2RlLmNwcCAqLywKLQkJCQkyOUFFMjEz
MzIxQUJBNDhBMDA4NjkyODMgLyogQVhJc29sYXRlZFRyZWVOb2RlLmggKi8sCkBAIC0yNjA3Miww
ICsyNjA3NSw4IEBACisJCUMwODM0NDNGMjNEMDgwM0QwMEIzNkUzRCAvKiBtYWMgKi8gPSB7CisJ
CQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUMwODM0NDNEMjNEMDdGQjcw
MEIzNkUzRCAvKiBBWElzb2xhdGVkT2JqZWN0TWFjLm1tICovLAorCQkJKTsKKwkJCXBhdGggPSBt
YWM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwpAQCAtMjkxNTksMCArMjkxNzAg
QEAKKwkJCQkyOUFFMjEzNTIxQUJBNDhBMDA4NjkyODMgLyogQVhJc29sYXRlZE9iamVjdC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yOTE2MSArMjkxNzEsMCBAQAotCQkJCTI5QUUyMTM1MjFBQkE0OEEw
MDg2OTI4MyAvKiBBWElzb2xhdGVkVHJlZU5vZGUuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5kZXggZTM2YTIwZDY5
OGEuLjAxYTlhZjMwMWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHAKQEAgLTM0LDAgKzM1IEBACisjaW5jbHVkZSAiQVhJc29sYXRlZE9iamVj
dC5oIgpAQCAtMzYgKzM2LDAgQEAKLSNpbmNsdWRlICJBWElzb2xhdGVkVHJlZU5vZGUuaCIKQEAg
LTI0MiwyICsyNDIgQEAgQVhPYmplY3RDYWNoZTo6fkFYT2JqZWN0Q2FjaGUoKQotICAgIGZvciAo
Y29uc3QgYXV0byYgb2JqZWN0IDogbV9vYmplY3RzLnZhbHVlcygpKSB7Ci0gICAgICAgIGRldGFj
aFdyYXBwZXIob2JqZWN0LmdldCgpLCBBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGU6OkNhY2hl
RGVzdHJveWVkKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIG9iamVjdCA6IG1fb2JqZWN0cy52YWx1
ZXMoKSkKQEAgLTI0NSwyICsyNDMsMCBAQCBBWE9iamVjdENhY2hlOjp+QVhPYmplY3RDYWNoZSgp
Ci0gICAgICAgIG9iamVjdC0+c2V0T2JqZWN0SUQoMCk7Ci0gICAgfQpAQCAtODYwLDMgKzg1NyBA
QCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnJlbW92ZShBWElEIGF4SUQpCi0gICAgZGV0YWNoV3JhcHBl
cihvYmplY3QuZ2V0KCksIEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlwZTo6RWxlbWVudERlc3Ry
b3llZCk7Ci0gICAgb2JqZWN0LT5kZXRhY2goQWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBlOjpF
bGVtZW50RGVzdHJveWVkLCB0aGlzKTsKLSAgICBvYmplY3QtPnNldE9iamVjdElEKDApOworICAg
IG9iamVjdC0+ZGV0YWNoKEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlwZTo6RWxlbWVudERlc3Ry
b3llZCk7CkBAIC0zMDgzLDIgKzMwNzggQEAgUmVmPEFYSXNvbGF0ZWRPYmplY3Q+IEFYT2JqZWN0
Q2FjaGU6OmNyZWF0ZUlzb2xhdGVkVHJlZUhpZXJhcmNoeShBWENvcmVPYmplY3QmIG8KLSAgICBh
eE9iamVjdENhY2hlLT5kZXRhY2hXcmFwcGVyKCZvYmplY3QsIEFjY2Vzc2liaWxpdHlEZXRhY2ht
ZW50VHlwZTo6RWxlbWVudENoYW5nZSk7Ci0gICAgYXhPYmplY3RDYWNoZS0+YXR0YWNoV3JhcHBl
cigmaXNvbGF0ZWRUcmVlTm9kZS5nZXQoKSk7CisgICAgaXNvbGF0ZWRUcmVlTm9kZS0+dGFrZVdy
YXBwZXIob2JqZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENh
Y2hlLmgKaW5kZXggZDNkNDVmMzNjODAuLjRlYTlmNzlhZTI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaApAQCAtMTc0ICsxNzMsMCBAQCBwdWJsaWM6
Ci0gICAgdm9pZCBkZXRhY2hXcmFwcGVyKEFYQ29yZU9iamVjdCosIEFjY2Vzc2liaWxpdHlEZXRh
Y2htZW50VHlwZSk7CkBAIC0zNjAgKzM1OCwwIEBAIHB1YmxpYzoKLSAgICAKQEAgLTU1MCArNTQ3
LDAgQEAgaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6ZGVmZXJUZXh0UmVwbGFjZW1lbnROb3Rp
ZmljYXRpb25Gb3JUZXh0Q29udHJvbChIVE1MVGUKLWlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6
OmRldGFjaFdyYXBwZXIoQVhDb3JlT2JqZWN0KiwgQWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBl
KSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdC5jcHAKaW5kZXggNGRjNzNlYzYyYWMuLjIwOWViOGU2NThlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0LmNwcApAQCAtMTA5ICsxMDkgQEAgUmVmPEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
PiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y3JlYXRlKE5vZGUqIG5vZGUpCi12b2lkIEFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0OjpkZXRhY2goQWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBlIGRl
dGFjaG1lbnRUeXBlLCBBWE9iamVjdENhY2hlKiBjYWNoZSkKK3ZvaWQgQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6OmRldGFjaFJlbW90ZVBhcnRzKEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlwZSBk
ZXRhY2htZW50VHlwZSkKQEAgLTExMiArMTEyIEBAIHZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q6OmRldGFjaChBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGUgZGV0YWNobWVudFR5cGUsCi0g
ICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6ZGV0YWNoKGRldGFjaG1lbnRUeXBlLCBjYWNoZSk7Cisg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6ZGV0YWNoUmVtb3RlUGFydHMoZGV0YWNobWVudFR5cGUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdC5oCmluZGV4IDM4MGQ5OTdhNTQxLi43ODVmNjc4OTQ5NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Qu
aApAQCAtMTM1ICsxMzUgQEAgcHVibGljOgotICAgIHZvaWQgZGV0YWNoKEFjY2Vzc2liaWxpdHlE
ZXRhY2htZW50VHlwZSwgQVhPYmplY3RDYWNoZSopIG92ZXJyaWRlOworICAgIHZvaWQgZGV0YWNo
UmVtb3RlUGFydHMoQWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBlKSBvdmVycmlkZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
CmluZGV4IDZiOWUwZWY3NjJlLi5lNTYwZDAxZTRkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC05OSArOTkgQEAg
QWNjZXNzaWJpbGl0eU9iamVjdDo6fkFjY2Vzc2liaWxpdHlPYmplY3QoKQotdm9pZCBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpkZXRhY2goQWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBlIGRldGFjaG1l
bnRUeXBlLCBBWE9iamVjdENhY2hlKiBjYWNoZSkKK3ZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6
ZGV0YWNoUmVtb3RlUGFydHMoQWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBlIGRldGFjaG1lbnRU
eXBlKQpAQCAtMTAyLDMgKzEwMiw1IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6ZGV0YWNo
KEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlwZSBkZXRhY2htZW50VHlwZSwgQVhPCi0gICAgaWYg
KGRldGFjaG1lbnRUeXBlID09IEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlwZTo6RWxlbWVudERl
c3Ryb3llZCAmJiByb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6TWVudSAmJiBjYWNo
ZSkKLSAgICAgICAgY2FjaGUtPnBvc3ROb3RpZmljYXRpb24obnVsbHB0ciwgJmNhY2hlLT5kb2N1
bWVudCgpLCBBWE9iamVjdENhY2hlOjpBWE1lbnVDbG9zZWQpOwotICAgIAorICAgIGlmIChkZXRh
Y2htZW50VHlwZSA9PSBBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGU6OkVsZW1lbnREZXN0cm95
ZWQgJiYgcm9sZVZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6Ok1lbnUpIHsKKyAgICAgICAg
aWYgKGF1dG8qIGNhY2hlID0gYXhPYmplY3RDYWNoZSgpKQorICAgICAgICAgICAgY2FjaGUtPnBv
c3ROb3RpZmljYXRpb24obnVsbHB0ciwgJmNhY2hlLT5kb2N1bWVudCgpLCBBWE9iamVjdENhY2hl
OjpBWE1lbnVDbG9zZWQpOworICAgIH0KKwpAQCAtMTA4LDQgKzEwOSwwIEBAIHZvaWQgQWNjZXNz
aWJpbGl0eU9iamVjdDo6ZGV0YWNoKEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlwZSBkZXRhY2ht
ZW50VHlwZSwgQVhPCi0KLSNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWSkKLSAgICBzZXRXcmFwcGVy
KG51bGxwdHIpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdC5oCmluZGV4IDliZjA0OTc4YjcxLi5iMzY3NzM4YzFiMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0
LmgKQEAgLTExMSwzICsxMTAsMCBAQCBwdWJsaWM6Ci0gICAgLy8gV2hlbiB0aGUgY29ycmVzcG9u
ZGluZyBXZWJDb3JlIG9iamVjdCB0aGF0IHRoaXMgQWNjZXNzaWJpbGl0eU9iamVjdAotICAgIC8v
IHdyYXBzIGlzIGRlbGV0ZWQsIGl0IG11c3QgYmUgZGV0YWNoZWQuCi0gICAgdm9pZCBkZXRhY2go
QWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBlLCBBWE9iamVjdENhY2hlKiA9IG51bGxwdHIpIG92
ZXJyaWRlOwpAQCAtMTE0LDAgKzExMiw0IEBAIHB1YmxpYzoKK3Byb3RlY3RlZDoKKyAgICAvLyBX
aGVuIHRoZSBjb3JyZXNwb25kaW5nIFdlYkNvcmUgb2JqZWN0IHRoYXQgdGhpcyBBY2Nlc3NpYmls
aXR5T2JqZWN0CisgICAgLy8gd3JhcHMgaXMgZGVsZXRlZCwgaXQgbXVzdCBiZSBkZXRhY2hlZCBm
cm9tIGFsbCByZWZlcmVuY2VzLgorICAgIHZvaWQgZGV0YWNoUmVtb3RlUGFydHMoQWNjZXNzaWJp
bGl0eURldGFjaG1lbnRUeXBlKSBvdmVycmlkZTsKQEAgLTExNSwwICsxMTcsNSBAQCBwdWJsaWM6
Citwcml2YXRlOgorICAgIHZvaWQgYXR0YWNoUGxhdGZvcm1XcmFwcGVyKCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBkZXRhY2hQbGF0Zm9ybVdyYXBwZXIoQWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBl
KSBvdmVycmlkZTsKKworcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaAppbmRleCAxZGZkMzQy
NWYxYi4uODBiNTA5YjFlYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oCkBAIC00ODAgKzQ4MCBA
QCBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaChBY2Nlc3NpYmlsaXR5RGV0YWNobWVu
dFR5cGUsIEFYT2JqZWN0Q2FjaGUqID0gbnVsbHB0cikgPSAwOworICAgIHZvaWQgZGV0YWNoKEFj
Y2Vzc2liaWxpdHlEZXRhY2htZW50VHlwZSk7CkBAIC0xMDgwLDAgKzEwODEsMiBAQCBwdWJsaWM6
CisgICAgdm9pZCBkZXRhY2hXcmFwcGVyKEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlwZSk7Cisg
ICAgdm9pZCB0YWtlV3JhcHBlcihBWENvcmVPYmplY3QmKTsKQEAgLTExMzIgKzExMzQsNCBAQCBw
dWJsaWM6Ci1wcm90ZWN0ZWQ6Citwcml2YXRlOgorICAgIC8vIERldGFjaGVzIHRoaXMgb2JqZWN0
IGZyb20gdGhlIG9iamVjdHMgaXQgcmVmZXJlbmNlcyBhbmQgaXQgaXMgcmVmZXJlbmNlZCBieS4K
KyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoUmVtb3RlUGFydHMoQWNjZXNzaWJpbGl0eURldGFjaG1l
bnRUeXBlKSA9IDA7CisKQEAgLTExMzksMCArMTE0NSwyIEBAIHByb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIHZvaWQgYXR0YWNoUGxhdGZvcm1XcmFwcGVyKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBk
ZXRhY2hQbGF0Zm9ybVdyYXBwZXIoQWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBlKSA9IDA7CkBA
IC0xMTQxLDAgKzExNDksMjAgQEAgcHJvdGVjdGVkOgoraW5saW5lIHZvaWQgQVhDb3JlT2JqZWN0
OjpkZXRhY2goQWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBlIGRldGFjaG1lbnRUeXBlKQorewor
ICAgIGRldGFjaFdyYXBwZXIoZGV0YWNobWVudFR5cGUpOworICAgIGRldGFjaFJlbW90ZVBhcnRz
KGRldGFjaG1lbnRUeXBlKTsKKyAgICBzZXRPYmplY3RJRChJbnZhbGlkQVhJRCk7Cit9CisKK2lu
bGluZSB2b2lkIEFYQ29yZU9iamVjdDo6ZGV0YWNoV3JhcHBlcihBY2Nlc3NpYmlsaXR5RGV0YWNo
bWVudFR5cGUgZGV0YWNobWVudFR5cGUpCit7CisgICAgZGV0YWNoUGxhdGZvcm1XcmFwcGVyKGRl
dGFjaG1lbnRUeXBlKTsKKyAgICBtX3dyYXBwZXIgPSBudWxscHRyOworfQorCitpbmxpbmUgdm9p
ZCBBWENvcmVPYmplY3Q6OnRha2VXcmFwcGVyKEFYQ29yZU9iamVjdCYgb3RoZXIpCit7CisgICAg
bV93cmFwcGVyID0gb3RoZXIubV93cmFwcGVyOworICAgIG90aGVyLmRldGFjaFdyYXBwZXIoQWNj
ZXNzaWJpbGl0eURldGFjaG1lbnRUeXBlOjpFbGVtZW50Q2hhbmdlKTsKKyAgICBhdHRhY2hQbGF0
Zm9ybVdyYXBwZXIoKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggNTE0Nzg4YTNhMjgu
Ljk0MjZhZDllY2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTEzNiArMTM2IEBAIFJlZjxB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0PiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpjcmVh
dGUoUmVuZGVyT2JqZWN0KiByCi12b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRldGFj
aChBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGUgZGV0YWNobWVudFR5cGUsIEFYT2JqZWN0Q2Fj
aGUqIGNhY2hlKQordm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpkZXRhY2hSZW1vdGVQ
YXJ0cyhBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGUgZGV0YWNobWVudFR5cGUpCkBAIC0xMzgs
MiArMTM4LDIgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpkZXRhY2goQWNjZXNz
aWJpbGl0eURldGFjaG1lbnRUeXBlIGRldGFjaG1lbnRUeXAKLSAgICBBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6ZGV0YWNoKGRldGFjaG1lbnRUeXBlLCBjYWNoZSk7Ci0gICAgCisgICAgQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6OmRldGFjaFJlbW90ZVBhcnRzKGRldGFjaG1lbnRUeXBlKTsKKwpA
QCAtMTQxICsxNDEgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpkZXRhY2goQWNj
ZXNzaWJpbGl0eURldGFjaG1lbnRUeXBlIGRldGFjaG1lbnRUeXAKLSAgICAKKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuaAppbmRleCAzZjM0Njc4M2U0OC4uM2U4MDEyNmY0MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCkBA
IC0xNTIsMiArMTUyIEBAIHB1YmxpYzoKLSAgICAKLSAgICB2b2lkIGRldGFjaChBY2Nlc3NpYmls
aXR5RGV0YWNobWVudFR5cGUsIEFYT2JqZWN0Q2FjaGUqKSBvdmVycmlkZTsKKwpAQCAtMjIwLDAg
KzIyMCBAQCBwcml2YXRlOgorICAgIHZvaWQgZGV0YWNoUmVtb3RlUGFydHMoQWNjZXNzaWJpbGl0
eURldGFjaG1lbnRUeXBlKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5jcHAKaW5kZXggZDExNmVkZGZk
N2UuLmFjZTAxMTNiNmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmNwcApAQCAtNTEgKzUxIEBAIEFjY2Vzc2li
aWxpdHlTY3JvbGxWaWV3Ojp+QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoKQotdm9pZCBBY2Nlc3Np
YmlsaXR5U2Nyb2xsVmlldzo6ZGV0YWNoKEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlwZSBkZXRh
Y2htZW50VHlwZSwgQVhPYmplY3RDYWNoZSogY2FjaGUpCit2b2lkIEFjY2Vzc2liaWxpdHlTY3Jv
bGxWaWV3OjpkZXRhY2hSZW1vdGVQYXJ0cyhBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGUgZGV0
YWNobWVudFR5cGUpCkBAIC01MyArNTMgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldzo6
ZGV0YWNoKEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlwZSBkZXRhY2htZW50VHlwZSwKLSAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpkZXRhY2goZGV0YWNobWVudFR5cGUsIGNhY2hlKTsKKyAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpkZXRhY2hSZW1vdGVQYXJ0cyhkZXRhY2htZW50VHlwZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3Jv
bGxWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3Jv
bGxWaWV3LmgKaW5kZXggOWJmYWYxNTVhZGIuLjM5YjNmYWFiNTExIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5oCkBA
IC00MyArNDIsMCBAQCBwdWJsaWM6Ci0gICAgdm9pZCBkZXRhY2goQWNjZXNzaWJpbGl0eURldGFj
aG1lbnRUeXBlLCBBWE9iamVjdENhY2hlKikgb3ZlcnJpZGU7CkBAIC00OSArNDgsMiBAQCBwcml2
YXRlOgotICAgIAorICAgIHZvaWQgZGV0YWNoUmVtb3RlUGFydHMoQWNjZXNzaWJpbGl0eURldGFj
aG1lbnRUeXBlKSBvdmVycmlkZTsKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdGsvQVhPYmplY3RDYWNoZUF0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0ay9BWE9iamVjdENhY2hlQXRrLmNwcAppbmRleCBmZTEyNjBkN2ZkYy4uNjRkMjU2
YWMxZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL0FYT2Jq
ZWN0Q2FjaGVBdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL0FY
T2JqZWN0Q2FjaGVBdGsuY3BwCkBAIC01MSwxMyArNTAsMCBAQCBzdGF0aWMgQXRrT2JqZWN0KiB3
cmFwcGVyUGFyZW50KFdlYktpdEFjY2Vzc2libGUqIHdyYXBwZXIpCi12b2lkIEFYT2JqZWN0Q2Fj
aGU6OmRldGFjaFdyYXBwZXIoQVhDb3JlT2JqZWN0KiBvYmosIEFjY2Vzc2liaWxpdHlEZXRhY2ht
ZW50VHlwZSBkZXRhY2htZW50VHlwZSkKLXsKLSAgICBhdXRvKiB3cmFwcGVyID0gb2JqLT53cmFw
cGVyKCk7Ci0gICAgQVNTRVJUKHdyYXBwZXIpOwotCi0gICAgLy8gSWYgYW4gb2JqZWN0IGlzIGJl
aW5nIGRldGFjaGVkIE5PVCBiZWNhdXNlIG9mIHRoZSBBWE9iamVjdENhY2hlIGJlaW5nIGRlc3Ry
b3llZCwKLSAgICAvLyB0aGVuIGl0J3MgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBhY2Nlc3NpYmls
aXR5IHRyZWUgYW5kIHdlIHNob3VsZCBlbWl0IGEgc2lnbmFsLgotICAgIGlmIChkZXRhY2htZW50
VHlwZSAhPSBBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGU6OkNhY2hlRGVzdHJveWVkICYmIG9i
ai0+ZG9jdW1lbnQoKSAmJiB3cmFwcGVyUGFyZW50KHdyYXBwZXIpKQotICAgICAgICBtX2RlZmVy
cmVkRGV0YWNoZWRXcmFwcGVyTGlzdC5hZGQod3JhcHBlcik7Ci0KLSAgICB3ZWJraXRBY2Nlc3Np
YmxlRGV0YWNoKFdFQktJVF9BQ0NFU1NJQkxFKHdyYXBwZXIpKTsKLX0KLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvQWNjZXNzaWJpbGl0eU9iamVjdEF0ay5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0
QXRrLmNwcAppbmRleCAyNjQwYzY5MzU2NS4uMzhhNTk1NDk2MDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL0FjY2Vzc2liaWxpdHlPYmplY3RBdGsuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL0FjY2Vzc2liaWxpdHlPYmplY3RB
dGsuY3BwCkBAIC0zNiwwICszNywxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7Cit2b2lkIEFjY2Vz
c2liaWxpdHlPYmplY3Q6OmRldGFjaFBsYXRmb3JtV3JhcHBlcihBY2Nlc3NpYmlsaXR5RGV0YWNo
bWVudFR5cGUgZGV0YWNobWVudFR5cGUpCit7CisgICAgYXV0byogd3JhcHBlciA9IHRoaXMtPndy
YXBwZXIoKTsKKyAgICBBU1NFUlQod3JhcHBlcik7CisKKyAgICAvLyBJZiBhbiBvYmplY3QgaXMg
YmVpbmcgZGV0YWNoZWQgTk9UIGJlY2F1c2Ugb2YgdGhlIEFYT2JqZWN0Q2FjaGUgYmVpbmcgZGVz
dHJveWVkLAorICAgIC8vIHRoZW4gaXQncyBiZWluZyByZW1vdmVkIGZyb20gdGhlIGFjY2Vzc2li
aWxpdHkgdHJlZSBhbmQgd2Ugc2hvdWxkIGVtaXQgYSBzaWduYWwuCisgICAgaWYgKGRldGFjaG1l
bnRUeXBlICE9IEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlwZTo6Q2FjaGVEZXN0cm95ZWQgJiYg
ZG9jdW1lbnQoKSAmJiB3cmFwcGVyUGFyZW50KHdyYXBwZXIpKQorICAgICAgICBtX2RlZmVycmVk
RGV0YWNoZWRXcmFwcGVyTGlzdC5hZGQod3JhcHBlcik7CisKKyAgICB3ZWJraXRBY2Nlc3NpYmxl
RGV0YWNoKFdFQktJVF9BQ0NFU1NJQkxFKHdyYXBwZXIpKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvQVhPYmplY3RDYWNoZUlPUy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FYT2JqZWN0Q2FjaGVJT1MubW0KaW5kZXggZjEx
YmZhOGUwZmEuLmNjMzNhMmJjZTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2lvcy9BWE9iamVjdENhY2hlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvaW9zL0FYT2JqZWN0Q2FjaGVJT1MubW0KQEAgLTM5LDYgKzM4LDAgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewotdm9pZCBBWE9iamVjdENhY2hlOjpkZXRhY2hXcmFwcGVyKEFYQ29yZU9i
amVjdCogb2JqLCBBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGUpCi17Ci0gICAgW29iai0+d3Jh
cHBlcigpIGRldGFjaF07Ci0gICAgb2JqLT5zZXRXcmFwcGVyKG51bGxwdHIpOwotfQotCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0SU9TLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvQWNjZXNzaWJpbGl0
eU9iamVjdElPUy5tbQppbmRleCA3ZTA1YWNmZmZjOS4uMTk1ZmY4ODc4NTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxpdHlPYmplY3RJT1Mu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvQWNjZXNzaWJpbGl0eU9i
amVjdElPUy5tbQpAQCAtMzkgKzM5LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKKwor
dm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphdHRhY2hQbGF0Zm9ybVdyYXBwZXIoKQoreworICAg
IFt3cmFwcGVyKCkgYXR0YWNoOnRoaXNdOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OmRldGFjaFBsYXRmb3JtV3JhcHBlcihBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGUpCit7Cisg
ICAgW3dyYXBwZXIoKSBkZXRhY2hdOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZU5vZGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAK
c2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWVOb2RlLmNwcApyZW5hbWUgdG8gU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAK
aW5kZXggMWQ0MTA0Nzk1NmIuLjRkODFiNzQ5NTI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZU5vZGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmpl
Y3QuY3BwCkBAIC0yOSArMjksMyBAQAotI2luY2x1ZGUgIkFYSXNvbGF0ZWRUcmVlTm9kZS5oIgor
I2luY2x1ZGUgIkFYSXNvbGF0ZWRPYmplY3QuaCIKKworI2luY2x1ZGUgIkFYSXNvbGF0ZWRUcmVl
LmgiCkBAIC00MDcgKzQwOSBAQCB2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNldFBhcmVudChBWElE
IHBhcmVudCkKLXZvaWQgQVhJc29sYXRlZE9iamVjdDo6ZGV0YWNoKEFjY2Vzc2liaWxpdHlEZXRh
Y2htZW50VHlwZSwgQVhPYmplY3RDYWNoZSopCit2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmRldGFj
aFJlbW90ZVBhcnRzKEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlwZSkKQEAgLTQyNyw4ICs0Mjgs
MCBAQCB2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmRldGFjaEZyb21QYXJlbnQoKQotdm9pZCBBWElz
b2xhdGVkT2JqZWN0OjpkaXNjb25uZWN0KCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotICAgIHRyZWUoKS0+YXhPYmplY3RDYWNoZSgpLT5kZXRhY2hXcmFwcGVyKHRoaXMsIEFjY2Vz
c2liaWxpdHlEZXRhY2htZW50VHlwZTo6RWxlbWVudERlc3Ryb3llZCk7Ci0gICAgZGV0YWNoKEFj
Y2Vzc2liaWxpdHlEZXRhY2htZW50VHlwZTo6RWxlbWVudERlc3Ryb3llZCk7Ci0gICAgc2V0T2Jq
ZWN0SUQoSW52YWxpZEFYSUQpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZU5vZGUuaCBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuaApzaW1pbGFy
aXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lz
b2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZU5vZGUuaApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oCmluZGV4IGNlNjIx
OTc0ZGMyLi45M2MyNDhjZjlmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWVOb2RlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oCkBAIC01NyAr
NTYsMCBAQCBwdWJsaWM6Ci0gICAgdm9pZCBkZXRhY2goQWNjZXNzaWJpbGl0eURldGFjaG1lbnRU
eXBlLCBBWE9iamVjdENhY2hlKiA9IG51bGxwdHIpIG92ZXJyaWRlOwpAQCAtNTkgKzU3LDAgQEAg
cHVibGljOgotICAgIHZvaWQgZGlzY29ubmVjdCgpOwpAQCAtNjYgKzY0LDMgQEAgcHJpdmF0ZToK
LQorICAgIHZvaWQgZGV0YWNoUmVtb3RlUGFydHMoQWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBl
KSBvdmVycmlkZTsKKyAgICB2b2lkIGF0dGFjaFBsYXRmb3JtV3JhcHBlcigpIG92ZXJyaWRlOwor
ICAgIHZvaWQgZGV0YWNoUGxhdGZvcm1XcmFwcGVyKEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlw
ZSkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lz
b2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHAKaW5kZXggZWY5ZWVkMzgwZTUuLjJl
ZjE4YTU0YTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xh
dGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3BwCkBAIC0zMSArMzAsMCBAQAotI2lu
Y2x1ZGUgIkFYSXNvbGF0ZWRUcmVlTm9kZS5oIgpAQCAtOTIsMCArOTIgQEAgdm9pZCBBWElzb2xh
dGVkVHJlZTo6cmVtb3ZlVHJlZUZvclBhZ2VJRChQYWdlSWRlbnRpZmllciBwYWdlSUQpCisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKQEAgLTEwMCArMTAwIEBAIHZvaWQgQVhJc29sYXRlZFRy
ZWU6OnJlbW92ZVRyZWVGb3JQYWdlSUQoUGFnZUlkZW50aWZpZXIgcGFnZUlEKQotICAgICAgICAg
ICAgICAgIG9iamVjdC0+ZGlzY29ubmVjdCgpOworICAgICAgICAgICAgICAgIG9iamVjdC0+ZGV0
YWNoKEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlwZTo6Q2FjaGVEZXN0cm95ZWQpOwpAQCAtMTgx
ICsxODEgQEAgdm9pZCBBWElzb2xhdGVkVHJlZTo6YXBwbHlQZW5kaW5nQ2hhbmdlcygpCi0gICAg
ICAgICAgICBvYmplY3QtPmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgICAgIG9iamVjdC0+ZGV0YWNo
KEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlwZTo6RWxlbWVudERlc3Ryb3llZCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVk
VHJlZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29s
YXRlZFRyZWUuaAppbmRleCAzOGI0ZGM1MzQ4My4uOWUyYzBhOWVjOTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRl
ZFRyZWUuaApAQCAtMzAgKzI5LDAgQEAKLSNpbmNsdWRlICJBWElzb2xhdGVkVHJlZU5vZGUuaCIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL21h
Yy9BWElzb2xhdGVkT2JqZWN0TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9p
c29sYXRlZHRyZWUvbWFjL0FYSXNvbGF0ZWRPYmplY3RNYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLmUyMjRjNTk4NWM3Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvbWFjL0FYSXNvbGF0ZWRPYmpl
Y3RNYWMubW0KQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEFDQ0VTU0lC
SUxJVFkpICYmIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgIkFYSXNvbGF0ZWRPYmplY3QuaCIKKwor
I2ltcG9ydCAiV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmF0dGFjaFBsYXRmb3JtV3JhcHBl
cigpCit7CisgICAgW3dyYXBwZXIoKSBhdHRhY2g6KEFYQ29yZU9iamVjdCopdGhpc107Cit9CisK
K3ZvaWQgQVhJc29sYXRlZE9iamVjdDo6ZGV0YWNoUGxhdGZvcm1XcmFwcGVyKEFjY2Vzc2liaWxp
dHlEZXRhY2htZW50VHlwZSkKK3sKKyAgICBbd3JhcHBlcigpIGRldGFjaF07Cit9CisKK30gLy8g
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFBMQVRGT1JNKE1B
QykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0
Q2FjaGVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENh
Y2hlTWFjLm1tCmluZGV4IGI3NGU2ZDk5ODQ5Li45ZDQ5NGYxYjUzYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tCkBAIC0z
MSArMzEgQEAKLSNpbXBvcnQgIkFYSXNvbGF0ZWRUcmVlTm9kZS5oIgorI2ltcG9ydCAiQVhJc29s
YXRlZE9iamVjdC5oIgpAQCAtMjM1LDYgKzIzNCwwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKLXZv
aWQgQVhPYmplY3RDYWNoZTo6ZGV0YWNoV3JhcHBlcihBWENvcmVPYmplY3QqIG9iaiwgQWNjZXNz
aWJpbGl0eURldGFjaG1lbnRUeXBlKQotewotICAgIFtvYmotPndyYXBwZXIoKSBkZXRhY2hdOwot
ICAgIG9iai0+c2V0V3JhcHBlcihudWxscHRyKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdE1hYy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RNYWMubW0KaW5k
ZXggN2Y4ZDQ3MDAzYmMuLjVkOGUyMDAyNzM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0TWFjLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RNYWMubW0KQEAgLTQz
LDAgKzQ0LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKK3ZvaWQgQWNjZXNzaWJpbGl0eU9iamVj
dDo6YXR0YWNoUGxhdGZvcm1XcmFwcGVyKCkKK3sKKyAgICBbd3JhcHBlcigpIGF0dGFjaDp0aGlz
XTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpkZXRhY2hQbGF0Zm9ybVdyYXBwZXIo
QWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBlKQoreworICAgIFt3cmFwcGVyKCkgZGV0YWNoXTsK
K30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaAppbmRleCBiNjRkMGU3
NmM0ZC4uYmU5Zjk1ZjIwY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFz
ZS5oCkBAIC01MywwICs1NCBAQCBjbGFzcyBWaXNpYmxlUG9zaXRpb247CistICh2b2lkKWF0dGFj
aDooV2ViQ29yZTo6QVhDb3JlT2JqZWN0KilheE9iamVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFz
ZS5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyQmFzZS5tbQppbmRleCA3MjQ2OTA2YTg3Yi4uMTZmOTFiYjZlZDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyQmFzZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21h
Yy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW0KQEAgLTI5MiwwICsyOTMsNiBA
QCBOU0FycmF5ICpjb252ZXJ0VG9OU0FycmF5KGNvbnN0IFdlYkNvcmU6OkFYQ29yZU9iamVjdDo6
QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdAorICAgIFtzZWxmIGF0dGFjaDpheE9iamVjdF07Cisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpYXR0YWNoOihBWENvcmVPYmplY3QqKWF4T2Jq
ZWN0Cit7CkBAIC0yOTUsMiArMzAwLDAgQEAgTlNBcnJheSAqY29udmVydFRvTlNBcnJheShjb25z
dCBXZWJDb3JlOjpBWENvcmVPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3QKLQotICAg
IHJldHVybiBzZWxmOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS93
aW4vQVhPYmplY3RDYWNoZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L3dp
bi9BWE9iamVjdENhY2hlV2luLmNwcAppbmRleCAzZjU1NTg2ODU5Ny4uZGU1MDAxYjFhODUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvd2luL0FYT2JqZWN0Q2FjaGVX
aW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvd2luL0FYT2JqZWN0Q2Fj
aGVXaW4uY3BwCkBAIC00NCw5ICs0MywwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKLXZvaWQgQVhP
YmplY3RDYWNoZTo6ZGV0YWNoV3JhcHBlcihBWENvcmVPYmplY3QqIG9iaiwgQWNjZXNzaWJpbGl0
eURldGFjaG1lbnRUeXBlKQotewotICAgIC8vIE9uIFdpbmRvd3MsIEFjY2Vzc2liaWxpdHlPYmpl
Y3RzIGFyZSBjcmVhdGVkIHdoZW4gZ2V0X2FjY0NoaWxkQ291bnQgaXMKLSAgICAvLyBjYWxsZWQs
IGJ1dCB0aGV5IGFyZSBub3Qgd3JhcHBlZCB1bnRpbCBnZXRfYWNjQ2hpbGQgaXMgY2FsbGVkLCBz
byB0aGlzCi0gICAgLy8gb2JqZWN0IG1heSBub3QgaGF2ZSBhIHdyYXBwZXIuCi0gICAgaWYgKEFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiB3cmFwcGVyID0gb2JqLT53cmFwcGVyKCkpCi0gICAg
ICAgIHdyYXBwZXItPmRldGFjaCgpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L3dpbi9BY2Nlc3NpYmlsaXR5T2JqZWN0V2luLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvd2luL0FjY2Vzc2liaWxpdHlPYmplY3RXaW4uY3BwCmluZGV4IDQz
MDRkM2I1NDZiLi42ZmM3YTZhYTM2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS93aW4vQWNjZXNzaWJpbGl0eU9iamVjdFdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS93aW4vQWNjZXNzaWJpbGl0eU9iamVjdFdpbi5jcHAKQEAgLTMyLDAg
KzMzLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewordm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpk
ZXRhY2hQbGF0Zm9ybVdyYXBwZXIoQWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBlKQoreworICAg
IC8vIE9uIFdpbmRvd3MsIEFjY2Vzc2liaWxpdHlPYmplY3RzIGFyZSBjcmVhdGVkIHdoZW4gZ2V0
X2FjY0NoaWxkQ291bnQgaXMKKyAgICAvLyBjYWxsZWQsIGJ1dCB0aGV5IGFyZSBub3Qgd3JhcHBl
ZCB1bnRpbCBnZXRfYWNjQ2hpbGQgaXMgY2FsbGVkLCBzbyB0aGlzCisgICAgLy8gb2JqZWN0IG1h
eSBub3QgaGF2ZSBhIHdyYXBwZXIuCisgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
KiB3cmFwcGVyID0gdGhpcy0+d3JhcHBlcigpKQorICAgICAgICB3cmFwcGVyLT5kZXRhY2goKTsK
K30KKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388555</attachid>
            <date>2020-01-23 09:41:22 -0800</date>
            <delta_ts>2020-01-23 11:55:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206384-20200123124120.patch</filename>
            <type>text/plain</type>
            <size>224594</size>
            <attacher name="Andres Gonzalez">andresg_22</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0Nzk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWI0YzhlZmEyOWViZGYx
N2VjMTEyNjM3MWZjMTE4MDQwNmY4ZTk5Zi4uODZkYjBlNjM3ZDhiYTNjYTY0N2M5MTkxNTRkNDQ0
ZGUwNWYzYmYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0NCBAQAorMjAyMC0wMS0yMyAgQW5k
cmVzIEdvbnphbGV6ICA8YW5kcmVzZ18yMkBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIHRoZSBz
YW1lIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGZvciBhc3NvY2lhdGVkIEFYT2JqZWN0IGFu
ZCBBWElzb2xhdGVkT2JqZWN0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA2Mzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQXNzb2NpYXRlZCBBWE9iamVjdCBhbmQgQVhJc29sYXRlZE9iamVjdCBuZWVk
IHRvIHNoYXJlIHRoZSBzYW1lCisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGlu
IG9yZGVyIGZvciBhY2Nlc3NpYmlsaXR5IGNsaWVudHMgdG8gd29yaworICAgICAgICBwcm9wZXJs
eS4gVGhpcyBjaGFuZ2UgaW1wbGVtZW50cyBDaHJpcyBGbGVpemFjaCdzIG9yaWdpbmFsIGFwcHJv
YWNoIHRvCisgICAgICAgIGhhdmUgYm90aCB0aGUgQVhPYmplY3QgYW5kIElzb2xhdGVkT2JqZWN0
IGluIHRoZSBzYW1lIHdyYXBwZXIuIFRoaXMKKyAgICAgICAgYXBwcm9hY2ggYWxsb3dzIHRoZSBl
dmVudCBub3RpZmljYXRpb24gY29kZSB0byByZW1haW4gdGhlIHNhbWUgaW4KKyAgICAgICAgaXNv
bGF0ZWQgdHJlZSBtb2RlLCBhbmQgbWluaW1pemVzIGxvY2sgY29udGVudGlvbiBiZXR3ZWVuIHRo
ZSBtYWluIGFuZAorICAgICAgICBBWCB0aHJlYWRzLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmNh
Y2hlQW5kSW5pdGlhbGl6ZVdyYXBwZXIpOiBVdGlsaXR5IG1ldGhvZCB0aGF0IGVuY2Fwc3VsYXRl
cyB0aGVzZSBvcGVyYXRpb25zIHBlcmZvcm1lZCBpbiB0aGUgZ2V0T3JDcmVhdGUgbWV0aG9kcy4K
KyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmNyZWF0ZUlzb2xhdGVkVHJlZUhpZXJhcmNoeSk6IEF0
dGFjaGVzIHRvIHRoZSBJc29sYXRlZE9iamVjdCB0aGUgc2FtZSB3cmFwcGVyIGFzIGl0cyBhc3Nv
Y2lhdGVkIEFYT2JqZWN0LgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5o
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVySU9TLm1tOiBJbnN0ZWFkIG9mIGFjY2Vzc2luZyB0aGUgYmFja2luZyBvYmplY3QgZGlyZWN0
bHkgKG1fb2JqZWN0KSBvciB0aHJvdWdoIHRoZSBtYWNybyBfYXhCYWNraW5nT2JqZWN0LCB1c2Vz
IHNlbGYuYXhCYWNraW5nT2JqZWN0LgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFu
Y2VzdG9yKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgaW5pdFdpdGhE
YXRhOmFjY2Vzc2liaWxpdHlPYmplY3Q6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGRldGFjaF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBkZWFsbG9jXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUNhbkZ1enp5SGl0VGVzdF0pOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5SGl0VGVzdDpd
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgZW5hYmxlQXR0cmli
dXRlQ2FjaGluZ10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBk
aXNhYmxlQXR0cmlidXRlQ2FjaGluZ10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5RWxlbWVudENvdW50XSk6CisgICAgICAgICgtW1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlFbGVtZW50QXRJbmRleDpdKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgaW5kZXhPZkFjY2Vzc2li
aWxpdHlFbGVtZW50Ol0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBfYWNjZXNzaWJpbGl0eVBhdGhdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgYWNjZXNzaWJpbGl0eUhhc1BvcHVwXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlQb3B1cFZhbHVlXSk6CisgICAgICAgICgt
W1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlMYW5ndWFnZV0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5SXNE
aWFsb2ddKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vz
c2liaWxpdHlUcmVlQW5jZXN0b3JdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlMaXN0QW5jZXN0b3JdKToKKyAgICAgICAgKC1bV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlBcnRpY2xlQW5jZXN0b3JdKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlM
YW5kbWFya0FuY2VzdG9yXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyIF9hY2Nlc3NpYmlsaXR5VGFibGVBbmNlc3Rvcl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eUlzSW5UYWJsZUNlbGxdKToKKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlGaWVsZHNl
dEFuY2VzdG9yXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9h
Y2Nlc3NpYmlsaXR5RnJhbWVBbmNlc3Rvcl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eVRyYWl0c0Zyb21BbmNlc3RvcnNdKToKKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUlzV2ViSW50
ZXJhY3RpdmVWaWRlb10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBpbnRlcmFjdGl2ZVZpZGVvRGVzY3JpcHRpb25dKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUlzTWVkaWFQbGF5aW5nXSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlJc01lZGlhTXV0
ZWRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJp
bGl0eVRvZ2dsZU11dGVGb3JNZWRpYV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5VmlkZW9FbnRlckZ1bGxzY3JlZW5dKToKKyAgICAgICAg
KC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlUZXh0RW50cnlU
cmFpdHNdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNz
aWJpbGl0eVRyYWl0c10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBpc1NWR0dyb3VwRWxlbWVudF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBkZXRlcm1pbmVJc0FjY2Vzc2liaWxpdHlFbGVtZW50XSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHN0cmluZ1ZhbHVlU2hvdWxkQmVVc2VkSW5MYWJl
bF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJp
bGl0eUhhc1RvdWNoRXZlbnRMaXN0ZW5lcl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eVZhbHVlSXNBdXRvZmlsbGVkXSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5SXNTdHJvbmdQ
YXNzd29yZEZpZWxkXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
IF9hY2Nlc3NpYmlsaXR5TWluVmFsdWVdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlNYXhWYWx1ZV0pOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0aW9uXSk6Cisg
ICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlMYWJl
bF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0YWJsZUNlbGxQ
YXJlbnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGFibGVQ
YXJlbnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNz
aWJpbGl0eVRpdGxlRWxlbWVudF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBhY2Nlc3NpYmlsaXR5Um93UmFuZ2VdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUJsb2NrcXVvdGVMZXZlbF0pOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5RGF0ZXRpbWVW
YWx1ZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3Np
YmlsaXR5UGxhY2Vob2xkZXJWYWx1ZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5Q29sb3JTdHJpbmdWYWx1ZV0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5VmFsdWVdKToKKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUlzQXR0YWNo
bWVudEVsZW1lbnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
YWNjZXNzaWJpbGl0eUlzQ29tYm9Cb3hdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUhpbnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eVVSTF0pOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eVNjcm9sbFRvVmlzaWJsZV0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5U2Ny
b2xsOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNz
aWJpbGl0eVJlbGF0aXZlRnJhbWVdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgYWNjZXNzaWJpbGl0eUVsZW1lbnRSZWN0XSk6CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlWaXNpYmxlQ29udGVudFJlY3RdKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUFj
dGl2YXRpb25Qb2ludF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBhY2Nlc3NpYmlsaXR5RnJhbWVdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgY29udGFpbnNVbm5hdHVyYWxseVNlZ21lbnRlZENoaWxkcmVuXSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlDb250YWluZXJd
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0
eUZvY3VzZWRVSUVsZW1lbnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgX2FjY2Vzc2liaWxpdHlXZWJEb2N1bWVudFZpZXddKToKKyAgICAgICAgKC1bV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUNhblNldFZhbHVlXSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlMaW5rUmVs
YXRpb25zaGlwVHlwZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBhY2Nlc3NpYmlsaXR5UmVxdWlyZWRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUZsb3dUb0VsZW1lbnRzXSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlMaW5rZWRFbGVtZW50XSk6
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGlzQXR0YWNobWVudF0p
OgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5
VGV4dHVhbENvbnRleHRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgX2FjY2Vzc2liaWxpdHlBY3RpdmF0ZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciBhdHRhY2htZW50Vmlld10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eVNjcm9sbFBvc2l0aW9uXSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5U2Nyb2xsU2l6
ZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJp
bGl0eVNjcm9sbFZpc2libGVSZWN0XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlGaW5kTWF0Y2hpbmdPYmplY3RzOl0pOgorICAgICAgICAo
LVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5TW9kaWZ5U2VsZWN0
aW9uOmluY3JlYXNlOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBhY2Nlc3NpYmlsaXR5TW92ZVNlbGVjdGlvblRvTWFya2VyOl0pOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5SW5jcmVtZW50XSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlEZWNyZW1l
bnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2li
aWxpdHlTZXRWYWx1ZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgc3RyaW5nRm9yVGV4dE1hcmtlcnM6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGFycmF5T2ZUZXh0Rm9yVGV4dE1hcmtlcnM6YXR0cmlidXRlZDpdKToKKyAg
ICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2NvbnZlcnRUb05TUmFuZ2U6
XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9jb252ZXJ0VG9E
T01SYW5nZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgcG9z
aXRpb25Gb3JUZXh0TWFya2VyOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciB0ZXh0TWFya2VyUmFuZ2VdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgdGV4dE1hcmtlclJhbmdlRm9yU2VsZWN0aW9uXSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRleHRNYXJrZXJGb3JQb3NpdGlvbjpdKToKKyAg
ICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgc3RyaW5nRm9yUmFuZ2U6XSk6
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5
U2VsZWN0ZWRUZXh0UmFuZ2VdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgX2FjY2Vzc2liaWxpdHlTZXRTZWxlY3RlZFRleHRSYW5nZTpdKToKKyAgICAgICAgKC1b
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eVJlcGxhY2VSYW5nZTp3
aXRoVGV4dDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNj
ZXNzaWJpbGl0eUluc2VydFRleHQ6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIHNlbGVjdGVkVGV4dE1hcmtlcl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciBsaW5lRW5kTWFya2VyRm9yTWFya2VyOl0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBsaW5lU3RhcnRNYXJrZXJGb3JNYXJrZXI6XSk6
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIG1pc3NwZWxsaW5nVGV4
dE1hcmtlclJhbmdlOmZvcndhcmQ6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIGZyYW1lRm9yVGV4dE1hcmtlcnM6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIHJhbmdlRnJvbU1hcmtlcnM6d2l0aFRleHQ6XSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRleHRNYXJrZXJGb3JQb2ludDpdKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgbmV4dE1hcmtlckZvckNo
YXJhY3Rlck9mZnNldDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgcHJldmlvdXNNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6XSk6CisgICAgICAgICgtW1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHJhbmdlRm9yVGV4dE1hcmtlcnM6XSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHN0YXJ0T3JFbmRUZXh0TWFya2VyRm9y
VGV4dE1hcmtlcnM6aXNTdGFydDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgdGV4dE1hcmtlcnNGb3JSYW5nZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUV4cGFuZGVkVGV4dFZhbHVlXSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlJZGVudGlm
aWVyXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2li
aWxpdHlBUklBSXNCdXN5XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyIGFjY2Vzc2liaWxpdHlBUklBTGl2ZVJlZ2lvblN0YXR1c10pOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QVJJQVJlbGV2YW50U3RhdHVz
XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxp
dHlBUklBTGl2ZVJlZ2lvbklzQXRvbWljXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlTdXBwb3J0c0FSSUFQcmVzc2VkXSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlJc1ByZXNzZWRd
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0
eVN1cHBvcnRzQVJJQUV4cGFuZGVkXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlJc0V4cGFuZGVkXSk6CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlJc1Nob3dpbmdWYWxpZGF0aW9uTWVz
c2FnZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3Np
YmlsaXR5SW52YWxpZFN0YXR1c10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBhY2Nlc3NpYmlsaXR5QVJJQUN1cnJlbnRTdGF0dXNdKToKKyAgICAgICAgKC1bV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb25dKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eU1h
dGhSb290SW5kZXhPYmplY3RdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgYWNjZXNzaWJpbGl0eU1hdGhSYWRpY2FuZE9iamVjdF0pOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5TWF0aE51bWVyYXRvck9iamVj
dF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmls
aXR5TWF0aERlbm9taW5hdG9yT2JqZWN0XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlNYXRoQmFzZU9iamVjdF0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5TWF0aFN1YnNjcmlwdE9i
amVjdF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3Np
YmlsaXR5TWF0aFN1cGVyc2NyaXB0T2JqZWN0XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlNYXRoVW5kZXJPYmplY3RdKToKKyAgICAgICAg
KC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eU1hdGhPdmVyT2Jq
ZWN0XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2li
aWxpdHlNYXRoRmVuY2VkT3BlblN0cmluZ10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5TWF0aEZlbmNlZENsb3NlU3RyaW5nXSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlJc01hdGhU
b3BPYmplY3RdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNj
ZXNzaWJpbGl0eU1hdGhMaW5lVGhpY2tuZXNzXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlNYXRoVHlwZV0pOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5Q2xpY2tQb2ludF0pOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW06CisgICAgICAgIChX
ZWJDb3JlOjpBWE9iamVjdENhY2hlOjphdHRhY2hXcmFwcGVyKTogQXR0YWNoZXMgdGhlIGdpdmVu
IElzb2xhdGVkT2JqZWN0IGFuZCB3cmFwcGVyLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFj
L1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5oOgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbToKKyAgICAgICAg
KC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlIGluaXRXaXRoQWNjZXNzaWJpbGl0
eU9iamVjdDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNl
IGF0dGFjaEFYT2JqZWN0Ol0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlckJhc2UgYXR0YWNoSXNvbGF0ZWRPYmplY3Q6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyQmFzZSBkZXRhY2hdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJCYXNlIHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9yZV0pOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UgYmFzZUFjY2Vzc2liaWxpdHlU
aXRsZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UgYXhC
YWNraW5nT2JqZWN0XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
QmFzZSBiYXNlQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uXSk6CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZSBiYXNlQWNjZXNzaWJpbGl0eVNwZWVjaEhpbnRdKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlIGJhc2VBY2Nlc3Np
YmlsaXR5SGVscFRleHRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJCYXNlIGNvbnZlcnRSZWN0VG9TcGFjZTpzcGFjZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlIGFyaWFMYW5kbWFya1JvbGVEZXNjcmlwdGlvbl0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UgYmFzZUFjY2Vzc2li
aWxpdHlTZXRGb2N1czpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJCYXNlIGFjY2Vzc2liaWxpdHlNYXRoUG9zdHNjcmlwdFBhaXJzXSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZSBhY2Nlc3NpYmlsaXR5TWF0aFByZXNjcmlw
dFBhaXJzXSk6CisgICAgICAgIChhY2Nlc3NpYmlsaXR5U2VhcmNoQ3JpdGVyaWFGb3JTZWFyY2hQ
cmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJCYXNlIGFjY2Vzc2liaWxpdHlPYmplY3RdKTogRGVsZXRlZCwgYXhC
YWNraW5nT2JqZWN0IHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06IEluc3RlYWQgb2Yg
YWNjZXNzaW5nIHRoZSBiYWNraW5nIG9iamVjdCBkaXJlY3RseSAobV9vYmplY3QpIG9yIHRocm91
Z2ggdGhlIG1hY3JvIF9heEJhY2tpbmdPYmplY3QsIHVzZXMgc2VsZi5heEJhY2tpbmdPYmplY3Qu
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGF0dGFjaG1lbnRWaWV3
XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHNjcmVlblRvQ29u
dGVudHM6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vz
c2liaWxpdHlPYmplY3RGb3JUZXh0TWFya2VyOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6XSk6CisgICAgICAgICgt
W1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHN0YXJ0T3JFbmRUZXh0TWFya2VyRm9yUmFu
Z2U6aXNTdGFydDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
bmV4dFRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6XSk6CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIHByZXZpb3VzVGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNl
dDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGV4dE1hcmtl
ckZvckNoYXJhY3Rlck9mZnNldDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6XSk6CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6XSk6Cisg
ICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRleHRNYXJrZXJGb3JWaXNp
YmxlUG9zaXRpb246XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
IHRleHRNYXJrZXJGb3JGaXJzdFBvc2l0aW9uSW5UZXh0Q29udHJvbDpdKToKKyAgICAgICAgKC1b
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtl
cjpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgZG9BWEF0dHJp
YnV0ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2U6c3BlbGxDaGVjazpdKToKKyAgICAgICAgKC1b
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQ
b3NpdGlvbnM6ZW5kUG9zaXRpb246XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORF0pOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhZGRpdGlvbmFsQWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZU5hbWVzXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyIHZpc2libGVQb3NpdGlvblJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOl0pOgorICAgICAgICAo
LVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciByZW5kZXJXaWRnZXRDaGlsZHJlbl0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciByZW1vdGVBY2Nlc3NpYmls
aXR5UGFyZW50T2JqZWN0XSk6CisgICAgICAgIChjb252ZXJ0VG9WZWN0b3IpOgorICAgICAgICAo
LVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0ZXh0TWFya2VyUmFuZ2VGb3JTZWxlY3Rp
b25dKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYXNzb2NpYXRl
ZFBsdWdpblBhcmVudF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBwYXRoXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGNoaWxk
cmVuVmVjdG9yU2l6ZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBjaGlsZHJlblZlY3RvckFycmF5XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIHBvc2l0aW9uXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyIHJvbGVdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
c3Vicm9sZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciByb2xl
RGVzY3JpcHRpb25dKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
Y29tcHV0ZWRSb2xlU3RyaW5nXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyIHNjcm9sbFZpZXdQYXJlbnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgdmFsdWVEZXNjcmlwdGlvbkZvck1ldGVyXSk6CisgICAgICAgICgtW1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHdpbmRvd0VsZW1lbnQ6XSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpd
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0
eUZvY3VzZWRVSUVsZW1lbnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgYWNjZXNzaWJpbGl0eUhpdFRlc3Q6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlJc0F0dHJpYnV0ZVNldHRhYmxlOl0pOgorICAg
ICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eVBlcmZv
cm1QcmVzc0FjdGlvbl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBfYWNjZXNzaWJpbGl0eVBlcmZvcm1JbmNyZW1lbnRBY3Rpb25dKToKKyAgICAgICAgKC1bV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlQZXJmb3JtRGVjcmVtZW50
QWN0aW9uXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vz
c2liaWxpdHlQZXJmb3JtU2hvd01lbnVBY3Rpb25dKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlTaG93Q29udGV4dE1lbnVdKToKKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eVNjcm9sbFRv
VmlzaWJsZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNj
ZXNzaWJpbGl0eVNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXM6XSk6CisgICAgICAgICgt
W1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5U2Nyb2xsVG9HbG9i
YWxQb2ludDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNj
ZXNzaWJpbGl0eVJlcGxhY2VSYW5nZTp3aXRoVGV4dDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUluc2VydFRleHQ6XSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5U2V0VmFsdWU6
Zm9yQXR0cmlidXRlOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclJhbmdlOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlciBfY29udmVydFRvTlNSYW5nZTpdKToKKyAgICAgICAgKC1bV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2luZGV4Rm9yVGV4dE1hcmtlcjpdKToKKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX3RleHRNYXJrZXJGb3JJbmRleDpd
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZVZhbHVlOmZvclBhcmFtZXRlcjpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUluZGV4T2ZDaGlsZDpdKToKKyAgICAgICAg
KC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUFycmF5QXR0cmli
dXRlQ291bnQ6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFj
Y2Vzc2liaWxpdHlBcnJheUF0dHJpYnV0ZVZhbHVlczppbmRleDptYXhDb3VudDpdKToKKwogMjAy
MC0wMS0xOCAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0xG
Q10gTGF5b3V0U3RhdGUgY29uc3RydWN0b3Igc2hvdWxkbid0IHRha2UgTGF5b3V0VHJlZUNvbnRl
bnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCmlu
ZGV4IDZmMzdjMGIzZjI4OTYzNTA1Mjg0NDA0ZDQyYzYxZjdlYjA0ODk2YjIuLjliNzVlYWQ1ZDA3
Nzc1ODhjZjZlZTkwMjhhY2JjNTg1ZjI1ZDE4M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAtNjAzLDYgKzYwMywyMSBAQCBzdGF0aWMg
UmVmPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGNyZWF0ZUZyb21Ob2RlKE5vZGUqIG5vZGUpCiAgICAg
cmV0dXJuIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjcmVhdGUobm9kZSk7CiB9CiAKK3ZvaWQg
QVhPYmplY3RDYWNoZTo6Y2FjaGVBbmRJbml0aWFsaXplV3JhcHBlcihBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBuZXdPYmplY3QsIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIE5vZGUqIG5vZGUsIFdpZGdl
dCogd2lkZ2V0KQoreworICAgIEFTU0VSVChuZXdPYmplY3QpOworICAgIEFYSUQgYXhJRCA9IGdl
dEFYSUQobmV3T2JqZWN0KTsKKyAgICBpZiAocmVuZGVyZXIpCisgICAgICAgIG1fcmVuZGVyT2Jq
ZWN0TWFwcGluZy5zZXQocmVuZGVyZXIsIGF4SUQpOworICAgIGlmIChub2RlKQorICAgICAgICBt
X25vZGVPYmplY3RNYXBwaW5nLnNldChub2RlLCBheElEKTsKKyAgICBpZiAod2lkZ2V0KQorICAg
ICAgICBtX3dpZGdldE9iamVjdE1hcHBpbmcuc2V0KHdpZGdldCwgYXhJRCk7CisgICAgbV9vYmpl
Y3RzLnNldChheElELCBuZXdPYmplY3QpOworICAgIG5ld09iamVjdC0+aW5pdCgpOworICAgIGF0
dGFjaFdyYXBwZXIobmV3T2JqZWN0KTsKK30KKwogQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmpl
Y3RDYWNoZTo6Z2V0T3JDcmVhdGUoV2lkZ2V0KiB3aWRnZXQpCiB7CiAgICAgaWYgKCF3aWRnZXQp
CkBAIC02MjUsMTIgKzY0MCw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6
OmdldE9yQ3JlYXRlKFdpZGdldCogd2lkZ2V0KQogICAgIGlmICghbmV3T2JqKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgIGdldEFYSUQobmV3T2JqLmdldCgpKTsKLSAgICAKLSAgICBt
X3dpZGdldE9iamVjdE1hcHBpbmcuc2V0KHdpZGdldCwgbmV3T2JqLT5vYmplY3RJRCgpKTsKLSAg
ICBtX29iamVjdHMuc2V0KG5ld09iai0+b2JqZWN0SUQoKSwgbmV3T2JqKTsKLSAgICBuZXdPYmot
PmluaXQoKTsKLSAgICBhdHRhY2hXcmFwcGVyKG5ld09iai5nZXQoKSk7CisgICAgY2FjaGVBbmRJ
bml0aWFsaXplV3JhcHBlcihuZXdPYmouZ2V0KCksIG51bGxwdHIsIG51bGxwdHIsIHdpZGdldCk7
CiAgICAgcmV0dXJuIG5ld09iai5nZXQoKTsKIH0KIApAQCAtNjczLDEyICs2ODMsNyBAQCBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZShOb2RlKiBub2RlKQog
ICAgIC8vIFdpbGwgY3Jhc2ggbGF0ZXIgaWYgd2UgaGF2ZSB0d28gb2JqZWN0cyBmb3IgdGhlIHNh
bWUgbm9kZS4KICAgICBBU1NFUlQoIWdldChub2RlKSk7CiAKLSAgICBnZXRBWElEKG5ld09iai5n
ZXQoKSk7Ci0KLSAgICBtX25vZGVPYmplY3RNYXBwaW5nLnNldChub2RlLCBuZXdPYmotPm9iamVj
dElEKCkpOwotICAgIG1fb2JqZWN0cy5zZXQobmV3T2JqLT5vYmplY3RJRCgpLCBuZXdPYmopOwot
ICAgIG5ld09iai0+aW5pdCgpOwotICAgIGF0dGFjaFdyYXBwZXIobmV3T2JqLmdldCgpKTsKKyAg
ICBjYWNoZUFuZEluaXRpYWxpemVXcmFwcGVyKG5ld09iai5nZXQoKSwgbnVsbHB0ciwgbm9kZSk7
CiAgICAgbmV3T2JqLT5zZXRMYXN0S25vd25Jc0lnbm9yZWRWYWx1ZShuZXdPYmotPmFjY2Vzc2li
aWxpdHlJc0lnbm9yZWQoKSk7CiAgICAgLy8gU29tZXRpbWVzIGFza2luZyBhY2Nlc3NpYmlsaXR5
SXNJZ25vcmVkKCkgd2lsbCBjYXVzZSB0aGUgbmV3T2JqZWN0IHRvIGJlIGRlYWxsb2NhdGVkLCBh
bmQgdGhlbgogICAgIC8vIGl0IHdpbGwgZGlzYXBwZWFyIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBm
aW5pc2hlZCwgbGVhZGluZyB0byBhIHVzZS1hZnRlci1mcmVlLgpAQCAtNzAxLDEyICs3MDYsNyBA
QCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZShSZW5kZXJP
YmplY3QqIHJlbmRlcmVyKQogICAgIC8vIFdpbGwgY3Jhc2ggbGF0ZXIgaWYgd2UgaGF2ZSB0d28g
b2JqZWN0cyBmb3IgdGhlIHNhbWUgcmVuZGVyZXIuCiAgICAgQVNTRVJUKCFnZXQocmVuZGVyZXIp
KTsKIAotICAgIGdldEFYSUQobmV3T2JqLmdldCgpKTsKLQotICAgIG1fcmVuZGVyT2JqZWN0TWFw
cGluZy5zZXQocmVuZGVyZXIsIG5ld09iai0+b2JqZWN0SUQoKSk7Ci0gICAgbV9vYmplY3RzLnNl
dChuZXdPYmotPm9iamVjdElEKCksIG5ld09iaik7Ci0gICAgbmV3T2JqLT5pbml0KCk7Ci0gICAg
YXR0YWNoV3JhcHBlcihuZXdPYmouZ2V0KCkpOworICAgIGNhY2hlQW5kSW5pdGlhbGl6ZVdyYXBw
ZXIobmV3T2JqLmdldCgpLCByZW5kZXJlcik7CiAgICAgbmV3T2JqLT5zZXRMYXN0S25vd25Jc0ln
bm9yZWRWYWx1ZShuZXdPYmotPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSk7CiAgICAgLy8gU29t
ZXRpbWVzIGFza2luZyBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgd2lsbCBjYXVzZSB0aGUgbmV3
T2JqZWN0IHRvIGJlIGRlYWxsb2NhdGVkLCBhbmQgdGhlbgogICAgIC8vIGl0IHdpbGwgZGlzYXBw
ZWFyIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBmaW5pc2hlZCwgbGVhZGluZyB0byBhIHVzZS1hZnRl
ci1mcmVlLgpAQCAtNzk1LDggKzc5NSw4IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0
Q2FjaGU6OnJvb3RPYmplY3RGb3JGcmFtZShGcmFtZSogZnJhbWUpCiAgICAgCiBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZShBY2Nlc3NpYmlsaXR5Um9sZSBy
b2xlKQogewotICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBvYmogPSBudWxscHRyOwot
ICAgIAorICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBvYmo7CisKICAgICAvLyB3aWxs
IGJlIGZpbGxlZCBpbi4uLgogICAgIHN3aXRjaCAocm9sZSkgewogICAgIGNhc2UgQWNjZXNzaWJp
bGl0eVJvbGU6Okxpc3RCb3hPcHRpb246CkBAIC04MjksMTUgKzgyOSwxMSBAQCBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZShBY2Nlc3NpYmlsaXR5Um9sZSBy
b2xlKQogICAgIGRlZmF1bHQ6CiAgICAgICAgIG9iaiA9IG51bGxwdHI7CiAgICAgfQotICAgIAot
ICAgIGlmIChvYmopCi0gICAgICAgIGdldEFYSUQob2JqLmdldCgpKTsKLSAgICBlbHNlCisKKyAg
ICBpZiAoIW9iaikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBtX29iamVjdHMuc2V0
KG9iai0+b2JqZWN0SUQoKSwgb2JqKTsKLSAgICBvYmotPmluaXQoKTsKLSAgICBhdHRhY2hXcmFw
cGVyKG9iai5nZXQoKSk7CisgICAgY2FjaGVBbmRJbml0aWFsaXplV3JhcHBlcihvYmouZ2V0KCkp
OwogICAgIHJldHVybiBvYmouZ2V0KCk7CiB9CiAKQEAgLTMwODAsOCArMzA3Niw3IEBAIFJlZjxB
WElzb2xhdGVkT2JqZWN0PiBBWE9iamVjdENhY2hlOjpjcmVhdGVJc29sYXRlZFRyZWVIaWVyYXJj
aHkoQVhDb3JlT2JqZWN0JiBvCiAKICAgICBpc29sYXRlZFRyZWVOb2RlLT5zZXRUcmVlSWRlbnRp
Zmllcih0cmVlLnRyZWVJZGVudGlmaWVyKCkpOwogICAgIGlzb2xhdGVkVHJlZU5vZGUtPnNldFBh
cmVudChwYXJlbnRJRCk7Ci0gICAgYXhPYmplY3RDYWNoZS0+ZGV0YWNoV3JhcHBlcigmb2JqZWN0
LCBBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGU6OkVsZW1lbnRDaGFuZ2UpOwotICAgIGF4T2Jq
ZWN0Q2FjaGUtPmF0dGFjaFdyYXBwZXIoJmlzb2xhdGVkVHJlZU5vZGUuZ2V0KCkpOworICAgIGF4
T2JqZWN0Q2FjaGUtPmF0dGFjaFdyYXBwZXIoJmlzb2xhdGVkVHJlZU5vZGUuZ2V0KCksIG9iamVj
dC53cmFwcGVyKCkpOwogCiAgICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZCA6IG9iamVjdC5jaGls
ZHJlbigpKSB7CiAgICAgICAgIGF1dG8gc3RhdGljQ2hpbGQgPSBjcmVhdGVJc29sYXRlZFRyZWVI
aWVyYXJjaHkoKmNoaWxkLCBpc29sYXRlZFRyZWVOb2RlLT5vYmplY3RJRCgpLCBheE9iamVjdENh
Y2hlLCB0cmVlLCBub2RlQ2hhbmdlcywgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAppbmRleCBkM2Q0NWYzM2M4MDk4ZDk3M2U5NTkyMzc5MmQx
MmE2YTc4OTgwZGFmLi4zODA0ZWIyODJlNjA4YzQzZDcxODE5ZDY3ZGY1MGJlY2U4ZjZiNGY1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaApAQCAtMTcy
LDcgKzE3MiwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmUoQVhJRCk7CiAKICAgICB2b2lk
IGRldGFjaFdyYXBwZXIoQVhDb3JlT2JqZWN0KiwgQWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBl
KTsKK3ByaXZhdGU6CisgICAgdm9pZCBjYWNoZUFuZEluaXRpYWxpemVXcmFwcGVyKEFjY2Vzc2li
aWxpdHlPYmplY3QqLCBSZW5kZXJPYmplY3QqID0gbnVsbHB0ciwgTm9kZSogPSBudWxscHRyLCBX
aWRnZXQqID0gbnVsbHB0cik7CiAgICAgdm9pZCBhdHRhY2hXcmFwcGVyKEFYQ29yZU9iamVjdCop
OworI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCisgICAgdm9pZCBhdHRh
Y2hXcmFwcGVyKEFYSXNvbGF0ZWRPYmplY3QqLCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciopOworI2VuZGlmCisKK3B1YmxpYzoKICAgICB2b2lkIGNoaWxkcmVuQ2hhbmdlZChOb2RlKiwg
Tm9kZSogbmV3Q2hpbGQgPSBudWxscHRyKTsKICAgICB2b2lkIGNoaWxkcmVuQ2hhbmdlZChSZW5k
ZXJPYmplY3QqLCBSZW5kZXJPYmplY3QqIG5ld0NoaWxkID0gbnVsbHB0cik7CiAgICAgdm9pZCBj
aGlsZHJlbkNoYW5nZWQoQVhDb3JlT2JqZWN0Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbSBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVySU9TLm1tCmluZGV4IDI2ZGNiMGVhYjYzNTkwNDA5MTFkZGFjZTVkYjlmNjhjMGQ0MTM1
ZjEuLjQ3NGU4NTNlNzE2YWM1NGI1OWMzNDRjMjFkMDhmYzVmZmRhNTNhZDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCkBAIC0xMjMsNyArMTIzLDcgQEAgc3RhdGlj
IE5TU3RyaW5nICogY29uc3QgVUlBY2Nlc3NpYmlsaXR5VGV4dHVhbENvbnRleHRTb3VyY2VDb2Rl
ID0gQCJVSUFjY2Vzc2liaWwKIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciogQWNj
ZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyICp3
cmFwcGVyKQogewogICAgIHdoaWxlICh3cmFwcGVyICYmICFbd3JhcHBlciBpc0FjY2Vzc2liaWxp
dHlFbGVtZW50XSkgewotICAgICAgICBBWENvcmVPYmplY3QqIG9iamVjdCA9IFt3cmFwcGVyIGFj
Y2Vzc2liaWxpdHlPYmplY3RdOworICAgICAgICBBWENvcmVPYmplY3QqIG9iamVjdCA9IHdyYXBw
ZXIuYXhCYWNraW5nT2JqZWN0OwogICAgICAgICBpZiAoIW9iamVjdCkKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAKQEAgLTE3OSw3ICsxNzksNyBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5
TwogLy8gVGhpcyBpcyBuZWVkZWQgZm9yIGV4dGVybmFsIGNsaWVudHMgdG8gYmUgYWJsZSB0byBj
cmVhdGUgYSB0ZXh0IG1hcmtlciB3aXRob3V0IGhhdmluZyBhIHBvaW50ZXIgdG8gdGhlIGNhY2hl
LgogLSAoaWQpaW5pdFdpdGhEYXRhOihOU0RhdGEgKilkYXRhIGFjY2Vzc2liaWxpdHlPYmplY3Q6
KEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyICopd3JhcHBlcgogewotICAgIFdlYkNvcmU6OkFY
Q29yZU9iamVjdCogYXhPYmplY3QgPSBbd3JhcHBlciBhY2Nlc3NpYmlsaXR5T2JqZWN0XTsKKyAg
ICBXZWJDb3JlOjpBWENvcmVPYmplY3QqIGF4T2JqZWN0ID0gd3JhcHBlci5heEJhY2tpbmdPYmpl
Y3Q7CiAgICAgaWYgKCFheE9iamVjdCkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKQEAgLTI3
NCw3ICsyNzQsNyBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2li
aWxpdHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5TwogewogICAgIC8vIHJkYXI6Ly84
Nzk4OTYwIE1ha2Ugc3VyZSB0aGUgb2JqZWN0IGlzIGdvbmUgZWFybHksIHNvIHRoYXQgYW55dGhp
bmcgX2FjY2Vzc2liaWxpdHlVbnJlZ2lzdGVyIAogICAgIC8vIGRvZXMgY2FuJ3QgY2FsbCBiYWNr
IGludG8gdGhlIHJlbmRlciB0cmVlLgotICAgIG1fb2JqZWN0ID0gbnVsbHB0cjsKKyAgICBbc3Vw
ZXIgZGV0YWNoXTsKIAogICAgIGlmIChbc2VsZiByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KF9hY2Nlc3NpYmlsaXR5VW5yZWdpc3RlcildKQogICAgICAgICBbc2VsZiBfYWNjZXNzaWJpbGl0
eVVucmVnaXN0ZXJdOwpAQCAtMjgzLDcgKzI4Myw3IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciogQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKEFjY2Vzc2liaWxpdHlP
CiAtICh2b2lkKWRlYWxsb2MKIHsKICAgICAvLyBXZSBzaG91bGQgaGF2ZSBiZWVuIGRldGFjaGVk
IGJlZm9yZSBkZWFsbG9jYXRlZC4KLSAgICBBU1NFUlQoIW1fb2JqZWN0KTsKKyAgICBBU1NFUlQo
IXNlbGYuYXhCYWNraW5nT2JqZWN0KTsKICAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKQEAgLTI5
NSwxMiArMjk1LDEyIEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciogQWNjZXNz
aWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKEFjY2Vzc2liaWxpdHlPCiAKICAgICBXZWJUaHJlYWRM
b2NrKCk7CiAgICAgCi0gICAgLy8gSWYgd2UgY2FtZSBiYWNrIGZyb20gb3VyIHRocmVhZCBsb2Nr
IGFuZCB3ZSB3ZXJlIGRldGFjaGVkLCB3ZSB3aWxsIG5vIGxvbmdlciBoYXZlIGFuIG1fb2JqZWN0
LgotICAgIGlmICghbV9vYmplY3QpCisgICAgLy8gSWYgd2UgY2FtZSBiYWNrIGZyb20gb3VyIHRo
cmVhZCBsb2NrIGFuZCB3ZSB3ZXJlIGRldGFjaGVkLCB3ZSB3aWxsIG5vIGxvbmdlciBoYXZlIGFu
IHNlbGYuYXhCYWNraW5nT2JqZWN0LgorICAgIGlmICghc2VsZi5heEJhY2tpbmdPYmplY3QpCiAg
ICAgICAgIHJldHVybiBOTzsKICAgICAKLSAgICBtX29iamVjdC0+dXBkYXRlQmFja2luZ1N0b3Jl
KCk7Ci0gICAgaWYgKCFtX29iamVjdCkKKyAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+dXBkYXRl
QmFja2luZ1N0b3JlKCk7CisgICAgaWYgKCFzZWxmLmF4QmFja2luZ09iamVjdCkKICAgICAgICAg
cmV0dXJuIE5POwogICAgIAogICAgIHJldHVybiBZRVM7CkBAIC0zNDEsNyArMzQxLDcgQEAgc3Rh
dGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5j
ZXN0b3IoQWNjZXNzaWJpbGl0eU8KICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0
eUNhbGxdKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgQWNjZXNzaWJpbGl0eVJv
bGUgcm9sZSA9IG1fb2JqZWN0LT5yb2xlVmFsdWUoKTsKKyAgICBBY2Nlc3NpYmlsaXR5Um9sZSBy
b2xlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnJvbGVWYWx1ZSgpOwogICAgIC8vIEVsZW1lbnRz
IHRoYXQgY2FuIGJlIHJldHVybmVkIHdoZW4gcGVyZm9ybWluZyBmdXp6eSBoaXQgdGVzdGluZy4K
ICAgICBzd2l0Y2ggKHJvbGUpIHsKICAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpCdXR0b246
CkBAIC0zNjksNyArMzY5LDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBB
Y2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KICAgICBjYXNlIEFj
Y2Vzc2liaWxpdHlSb2xlOjpUYWI6CiAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6VGV4dEZp
ZWxkOgogICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlRvZ2dsZUJ1dHRvbjoKLSAgICAgICAg
cmV0dXJuICFtX29iamVjdC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpOworICAgICAgICByZXR1
cm4gIXNlbGYuYXhCYWNraW5nT2JqZWN0LT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCk7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTM5MCw4ICszOTAsOCBA
QCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9y
ZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5TwogICAgIC8vIFRyeSBhIGZ1enp5IGhpdCB0ZXN0IGZp
cnN0IHRvIGZpbmQgYW4gYWNjZXNzaWJsZSBlbGVtZW50LgogICAgIEFYQ29yZU9iamVjdCAqYXhP
YmplY3QgPSBudWxscHRyOwogICAgIHsKLSAgICAgICAgQVhBdHRyaWJ1dGVDYWNoZUVuYWJsZXIg
ZW5hYmxlQ2FjaGUobV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSk7Ci0gICAgICAgIGF4T2JqZWN0
ID0gbV9vYmplY3QtPmFjY2Vzc2liaWxpdHlIaXRUZXN0KEludFBvaW50KHBvaW50KSk7CisgICAg
ICAgIEFYQXR0cmlidXRlQ2FjaGVFbmFibGVyIGVuYWJsZUNhY2hlKHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5heE9iamVjdENhY2hlKCkpOworICAgICAgICBheE9iamVjdCA9IHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5hY2Nlc3NpYmlsaXR5SGl0VGVzdChJbnRQb2ludChwb2ludCkpOwogICAgIH0KIAog
ICAgIGlmICghYXhPYmplY3QpCkBAIC00MTIsMTMgKzQxMiwxMyBAQCBzdGF0aWMgQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nlc3Np
YmlsaXR5TwogCiAtICh2b2lkKWVuYWJsZUF0dHJpYnV0ZUNhY2hpbmcKIHsKLSAgICBpZiAoQVhP
YmplY3RDYWNoZSogY2FjaGUgPSBtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpKQorICAgIGlmIChh
dXRvKiBjYWNoZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCkpCiAgICAg
ICAgIGNhY2hlLT5zdGFydENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXNVbnRpbFRyZWVN
dXRhdGVzKCk7CiB9CiAKIC0gKHZvaWQpZGlzYWJsZUF0dHJpYnV0ZUNhY2hpbmcKIHsKLSAgICBp
ZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpKQorICAg
IGlmIChhdXRvKiBjYWNoZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCkp
CiAgICAgICAgIGNhY2hlLT5zdG9wQ2FjaGluZ0NvbXB1dGVkT2JqZWN0QXR0cmlidXRlcygpOwog
fQogCkBAIC00MzIsNyArNDMyLDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
KiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KICAgICAgICAg
ICAgIHJldHVybiBbYXR0YWNobWVudFZpZXcgYWNjZXNzaWJpbGl0eUVsZW1lbnRDb3VudF07CiAg
ICAgfQogICAgIAotICAgIHJldHVybiBtX29iamVjdC0+Y2hpbGRyZW4oKS5zaXplKCk7CisgICAg
cmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5jaGlsZHJlbigpLnNpemUoKTsKIH0KIAogLSAo
aWQpYWNjZXNzaWJpbGl0eUVsZW1lbnRBdEluZGV4OihOU0ludGVnZXIpaW5kZXgKQEAgLTQ0NSw3
ICs0NDUsNyBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxp
dHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5TwogICAgICAgICAgICAgcmV0dXJuIFth
dHRhY2htZW50VmlldyBhY2Nlc3NpYmlsaXR5RWxlbWVudEF0SW5kZXg6aW5kZXhdOwogICAgIH0K
ICAgICAKLSAgICBjb25zdCBhdXRvJiBjaGlsZHJlbiA9IG1fb2JqZWN0LT5jaGlsZHJlbigpOwor
ICAgIGNvbnN0IGF1dG8mIGNoaWxkcmVuID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmNoaWxkcmVu
KCk7CiAgICAgc2l6ZV90IGVsZW1lbnRJbmRleCA9IHN0YXRpY19jYXN0PHNpemVfdD4oaW5kZXgp
OwogICAgIGlmIChlbGVtZW50SW5kZXggPj0gY2hpbGRyZW4uc2l6ZSgpKQogICAgICAgICByZXR1
cm4gbmlsOwpAQCAtNDY5LDcgKzQ2OSw3IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciogQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKEFjY2Vzc2liaWxpdHlPCiAgICAg
ICAgICAgICByZXR1cm4gW2F0dGFjaG1lbnRWaWV3IGluZGV4T2ZBY2Nlc3NpYmlsaXR5RWxlbWVu
dDplbGVtZW50XTsKICAgICB9CiAgICAgCi0gICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSBtX29i
amVjdC0+Y2hpbGRyZW4oKTsKKyAgICBjb25zdCBhdXRvJiBjaGlsZHJlbiA9IHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5jaGlsZHJlbigpOwogICAgIHVuc2lnbmVkIGNvdW50ID0gY2hpbGRyZW4uc2l6
ZSgpOwogICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBjb3VudDsgKytrKSB7CiAgICAgICAg
IEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiB3cmFwcGVyID0gY2hpbGRyZW5ba10tPndyYXBw
ZXIoKTsKQEAgLTQ4NSwxMCArNDg1LDEwIEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciogQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKEFjY2Vzc2liaWxpdHlPCiAgICAg
aWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIE5V
TEw7CiAKLSAgICBpZiAoIW1fb2JqZWN0LT5zdXBwb3J0c1BhdGgoKSkKKyAgICBpZiAoIXNlbGYu
YXhCYWNraW5nT2JqZWN0LT5zdXBwb3J0c1BhdGgoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAg
ICAgCi0gICAgUGF0aCBwYXRoID0gbV9vYmplY3QtPmVsZW1lbnRQYXRoKCk7CisgICAgUGF0aCBw
YXRoID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmVsZW1lbnRQYXRoKCk7CiAgICAgaWYgKHBhdGgu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICAKQEAgLTUwMCw3ICs1MDAsNyBA
QCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9y
ZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5TwogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3Np
YmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBOTzsKICAgICAKLSAgICByZXR1cm4gbV9vYmpl
Y3QtPmhhc1BvcHVwKCk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5oYXNQb3B1
cCgpOwogfQogCiAtIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlQb3B1cFZhbHVlCkBAIC01MDgs
NyArNTA4LDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nlc3NpYmls
aXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KICAgICBpZiAoIVtzZWxmIF9wcmVw
YXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgcmV0dXJu
IG1fb2JqZWN0LT5wb3B1cFZhbHVlKCk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5wb3B1cFZhbHVlKCk7CiB9CiAKIC0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eUxhbmd1YWdl
CkBAIC01MTYsNyArNTE2LDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBB
Y2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KICAgICBpZiAoIVtz
ZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gbmlsOwogICAg
IAotICAgIHJldHVybiBtX29iamVjdC0+bGFuZ3VhZ2UoKTsKKyAgICByZXR1cm4gc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmxhbmd1YWdlKCk7CiB9CiAKIC0gKEJPT0wpYWNjZXNzaWJpbGl0eUlzRGlh
bG9nCkBAIC01MjQsNyArNTI0LDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
KiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KICAgICBpZiAo
IVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gTk87CiAK
LSAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlVmFsdWUgPSBtX29iamVjdC0+cm9sZVZhbHVlKCk7
CisgICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZVZhbHVlID0gc2VsZi5heEJhY2tpbmdPYmplY3Qt
PnJvbGVWYWx1ZSgpOwogICAgIHJldHVybiByb2xlVmFsdWUgPT0gQWNjZXNzaWJpbGl0eVJvbGU6
OkFwcGxpY2F0aW9uRGlhbG9nIHx8IHJvbGVWYWx1ZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6QXBw
bGljYXRpb25BbGVydERpYWxvZzsKIH0KIApAQCAtNTU1LDcgKzU1NSw3IEBAIHN0YXRpYyBBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciogQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKEFj
Y2Vzc2liaWxpdHlPCiAgICAgICAgIHJldHVybiByb2xlID09IEFjY2Vzc2liaWxpdHlSb2xlOjpU
cmVlOwogICAgIH07CiAKLSAgICBpZiAoY29uc3QgQVhDb3JlT2JqZWN0KiBwYXJlbnQgPSBBY2Nl
c3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QVhDb3JlT2JqZWN0PigqbV9vYmplY3QsIGZhbHNlLCBX
VEZNb3ZlKG1hdGNoRnVuYykpKQorICAgIGlmIChjb25zdCBBWENvcmVPYmplY3QqIHBhcmVudCA9
IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCpzZWxmLmF4QmFja2lu
Z09iamVjdCwgZmFsc2UsIFdURk1vdmUobWF0Y2hGdW5jKSkpCiAgICAgICAgIHJldHVybiBwYXJl
bnQtPndyYXBwZXIoKTsKICAgICByZXR1cm4gbmlsOwogfQpAQCAtNTY3LDE0ICs1NjcsMTQgQEAg
c3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVk
QW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KICAgICAgICAgcmV0dXJuIHJvbGUgPT0gQWNjZXNzaWJp
bGl0eVJvbGU6Okxpc3QgfHwgcm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6TGlzdEJveDsKICAg
ICB9OwogICAgIAotICAgIGlmIChjb25zdCBBWENvcmVPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2li
aWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCptX29iamVjdCwgZmFsc2UsIFdURk1v
dmUobWF0Y2hGdW5jKSkpCisgICAgaWYgKGNvbnN0IEFYQ29yZU9iamVjdCogcGFyZW50ID0gQWNj
ZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yPEFYQ29yZU9iamVjdD4oKnNlbGYuYXhCYWNraW5nT2Jq
ZWN0LCBmYWxzZSwgV1RGTW92ZShtYXRjaEZ1bmMpKSkKICAgICAgICAgcmV0dXJuIHBhcmVudC0+
d3JhcHBlcigpOwogICAgIHJldHVybiBuaWw7CiB9CiAKIC0gKEFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyKilfYWNjZXNzaWJpbGl0eUFydGljbGVBbmNlc3RvcgogewotICAgIGlmIChjb25zdCBB
WENvcmVPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVP
YmplY3Q+KCptX29iamVjdCwgZmFsc2UsIFtdIChjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkg
eworICAgIGlmIChjb25zdCBBWENvcmVPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZp
bmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCpzZWxmLmF4QmFja2luZ09iamVjdCwgZmFsc2UsIFtd
IChjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkgewogICAgICAgICByZXR1cm4gb2JqZWN0LnJv
bGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpEb2N1bWVudEFydGljbGU7CiAgICAgfSkp
CiAgICAgICAgIHJldHVybiBwYXJlbnQtPndyYXBwZXIoKTsKQEAgLTU4Myw3ICs1ODMsNyBAQCBz
dGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRB
bmNlc3RvcihBY2Nlc3NpYmlsaXR5TwogCiAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciop
X2FjY2Vzc2liaWxpdHlMYW5kbWFya0FuY2VzdG9yCiB7Ci0gICAgaWYgKGNvbnN0IEFYQ29yZU9i
amVjdCogcGFyZW50ID0gQWNjZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yPEFYQ29yZU9iamVjdD4o
Km1fb2JqZWN0LCBmYWxzZSwgW3NlbGZdIChjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkgewor
ICAgIGlmIChjb25zdCBBWENvcmVPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRB
bmNlc3RvcjxBWENvcmVPYmplY3Q+KCpzZWxmLmF4QmFja2luZ09iamVjdCwgZmFsc2UsIFtzZWxm
XSAoY29uc3QgQVhDb3JlT2JqZWN0JiBvYmplY3QpIHsKICAgICAgICAgcmV0dXJuIFtzZWxmIF9h
Y2Nlc3NpYmlsaXR5SXNMYW5kbWFya1JvbGU6b2JqZWN0LnJvbGVWYWx1ZSgpXTsKICAgICB9KSkK
ICAgICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOwpAQCAtNTkyLDcgKzU5Miw3IEBAIHN0
YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciogQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFu
Y2VzdG9yKEFjY2Vzc2liaWxpdHlPCiAKIC0gKEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKilf
YWNjZXNzaWJpbGl0eVRhYmxlQW5jZXN0b3IKIHsKLSAgICBpZiAoY29uc3QgQVhDb3JlT2JqZWN0
KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QVhDb3JlT2JqZWN0PigqbV9v
YmplY3QsIGZhbHNlLCBbXSAoY29uc3QgQVhDb3JlT2JqZWN0JiBvYmplY3QpIHsKKyAgICBpZiAo
Y29uc3QgQVhDb3JlT2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8
QVhDb3JlT2JqZWN0Pigqc2VsZi5heEJhY2tpbmdPYmplY3QsIGZhbHNlLCBbXSAoY29uc3QgQVhD
b3JlT2JqZWN0JiBvYmplY3QpIHsKICAgICAgICAgcmV0dXJuIG9iamVjdC5yb2xlVmFsdWUoKSA9
PSBBY2Nlc3NpYmlsaXR5Um9sZTo6VGFibGU7CiAgICAgfSkpCiAgICAgICAgIHJldHVybiBwYXJl
bnQtPndyYXBwZXIoKTsKQEAgLTYwMSwxNCArNjAxLDE0IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciogQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKEFjY2Vzc2liaWxp
dHlPCiAKIC0gKEJPT0wpX2FjY2Vzc2liaWxpdHlJc0luVGFibGVDZWxsCiB7Ci0gICAgcmV0dXJu
IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCptX29iamVjdCwgZmFs
c2UsIFtdIChjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkgeworICAgIHJldHVybiBBY2Nlc3Np
YmlsaXR5OjpmaW5kQW5jZXN0b3I8QVhDb3JlT2JqZWN0Pigqc2VsZi5heEJhY2tpbmdPYmplY3Qs
IGZhbHNlLCBbXSAoY29uc3QgQVhDb3JlT2JqZWN0JiBvYmplY3QpIHsKICAgICAgICAgcmV0dXJu
IG9iamVjdC5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6Q2VsbDsKICAgICB9KSAh
PSBudWxscHRyOwogfQogCiAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciopX2FjY2Vzc2li
aWxpdHlGaWVsZHNldEFuY2VzdG9yCiB7Ci0gICAgaWYgKGNvbnN0IEFYQ29yZU9iamVjdCogcGFy
ZW50ID0gQWNjZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yPEFYQ29yZU9iamVjdD4oKm1fb2JqZWN0
LCBmYWxzZSwgW10gKGNvbnN0IEFYQ29yZU9iamVjdCYgb2JqZWN0KSB7CisgICAgaWYgKGNvbnN0
IEFYQ29yZU9iamVjdCogcGFyZW50ID0gQWNjZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yPEFYQ29y
ZU9iamVjdD4oKnNlbGYuYXhCYWNraW5nT2JqZWN0LCBmYWxzZSwgW10gKGNvbnN0IEFYQ29yZU9i
amVjdCYgb2JqZWN0KSB7CiAgICAgICAgIHJldHVybiBvYmplY3QuaXNGaWVsZHNldCgpOwogICAg
IH0pKQogICAgICAgICByZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7CkBAIC02MTcsNyArNjE3LDcg
QEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nlc3NpYmlsaXR5VW5pZ25v
cmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KIAogLSAoQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIqKV9hY2Nlc3NpYmlsaXR5RnJhbWVBbmNlc3RvcgogewotICAgIGF1dG8qIHBhcmVudCA9IEFj
Y2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCptX29iamVjdCwgZmFsc2Us
IFtdIChjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkgeworICAgIGF1dG8qIHBhcmVudCA9IEFj
Y2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCpzZWxmLmF4QmFja2luZ09i
amVjdCwgZmFsc2UsIFtdIChjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkgewogICAgICAgICBy
ZXR1cm4gb2JqZWN0LmlzV2ViQXJlYSgpOwogICAgIH0pOwogICAgIGlmICghcGFyZW50KQpAQCAt
NjI4LDExICs2MjgsMTEgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nl
c3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KIC0gKHVpbnQ2NF90KV9h
Y2Nlc3NpYmlsaXR5VHJhaXRzRnJvbUFuY2VzdG9ycwogewogICAgIHVpbnQ2NF90IHRyYWl0cyA9
IDA7Ci0gICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSA9IG1fb2JqZWN0LT5yb2xlVmFsdWUoKTsK
KyAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnJvbGVW
YWx1ZSgpOwogICAgIAogICAgIC8vIFRyYWl0IGluZm9ybWF0aW9uIGFsc28gbmVlZHMgdG8gYmUg
Z2F0aGVyZWQgZnJvbSB0aGUgcGFyZW50cyBhYm92ZSB0aGUgb2JqZWN0LgogICAgIC8vIFRoZSBw
YXJlbnRPYmplY3QgaXMgbmVlZGVkIGluc3RlYWQgb2YgdGhlIHVuaWdub3JlZFBhcmVudE9iamVj
dCwgYmVjYXVzZSBhIHRhYmxlIG1pZ2h0IGJlIGlnbm9yZWQsIGJ1dCBpbmZvcm1hdGlvbiBzdGls
bCBuZWVkcyB0byBiZSBnYXRoZXJlZCBmcm9tIGl0LiAgICAKLSAgICBmb3IgKGF1dG8qIHBhcmVu
dCA9IG1fb2JqZWN0LT5wYXJlbnRPYmplY3QoKTsgcGFyZW50ICE9IG5pbDsgcGFyZW50ID0gcGFy
ZW50LT5wYXJlbnRPYmplY3QoKSkgeworICAgIGZvciAoYXV0byogcGFyZW50ID0gc2VsZi5heEJh
Y2tpbmdPYmplY3QtPnBhcmVudE9iamVjdCgpOyBwYXJlbnQgIT0gbmlsOyBwYXJlbnQgPSBwYXJl
bnQtPnBhcmVudE9iamVjdCgpKSB7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlSb2xlIHBhcmVudFJv
bGUgPSBwYXJlbnQtPnJvbGVWYWx1ZSgpOwogICAgICAgICBpZiAocGFyZW50Um9sZSA9PSBBY2Nl
c3NpYmlsaXR5Um9sZTo6V2ViQXJlYSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjU1LDcgKzY1
NSw3IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciogQWNjZXNzaWJpbGl0eVVu
aWdub3JlZEFuY2VzdG9yKEFjY2Vzc2liaWxpdHlPCiAgICAgICAgICAgICAgICAgLy8gYWx0ZXJu
YXRlIHRleHQgb24gdGhlIGhlYWRpbmcgcGFyZW50LgogICAgICAgICAgICAgICAgIE5TU3RyaW5n
ICpoZWFkaW5nTGFiZWwgPSBbd3JhcHBlciBiYXNlQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uXTsK
ICAgICAgICAgICAgICAgICBpZiAoIVtoZWFkaW5nTGFiZWwgbGVuZ3RoXSkKLSAgICAgICAgICAg
ICAgICAgICAgW3NlbGYgc2V0QWNjZXNzaWJpbGl0eUxhYmVsOm1fb2JqZWN0LT5zdHJpbmdWYWx1
ZSgpXTsKKyAgICAgICAgICAgICAgICAgICAgW3NlbGYgc2V0QWNjZXNzaWJpbGl0eUxhYmVsOnNl
bGYuYXhCYWNraW5nT2JqZWN0LT5zdHJpbmdWYWx1ZSgpXTsKICAgICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgICAgIFtzZWxmIHNldEFjY2Vzc2liaWxpdHlMYWJlbDpoZWFkaW5n
TGFiZWxdOwogICAgICAgICAgICAgfQpAQCAtNjkwLDE4ICs2OTAsMTggQEAgc3RhdGljIEFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNj
ZXNzaWJpbGl0eU8KICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQog
ICAgICAgICByZXR1cm4gTk87CiAKLSAgICBpZiAobV9vYmplY3QtPnJvbGVWYWx1ZSgpICE9IEFj
Y2Vzc2liaWxpdHlSb2xlOjpWaWRlbyB8fCAhaXM8QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0Piht
X29iamVjdCkpCisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5yb2xlVmFsdWUoKSAhPSBB
Y2Nlc3NpYmlsaXR5Um9sZTo6VmlkZW8gfHwgIWlzPEFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdD4o
c2VsZi5heEJhY2tpbmdPYmplY3QpKQogICAgICAgICByZXR1cm4gTk87CiAKICAgICAvLyBDb252
ZXkgdGhlIHZpZGVvIG9iamVjdCBhcyBpbnRlcmFjdGl2ZSBpZiBhdXRvLXBsYXkgaXMgbm90IGVu
YWJsZWQuCi0gICAgcmV0dXJuICFkb3duY2FzdDxBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q+KCpt
X29iamVjdCkuaXNBdXRvcGxheUVuYWJsZWQoKTsKKyAgICByZXR1cm4gIWRvd25jYXN0PEFjY2Vz
c2liaWxpdHlNZWRpYU9iamVjdD4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KS5pc0F1dG9wbGF5RW5h
YmxlZCgpOwogfQogCiAtIChOU1N0cmluZyAqKWludGVyYWN0aXZlVmlkZW9EZXNjcmlwdGlvbgog
ewotICAgIGlmICghaXM8QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0PihtX29iamVjdCkpCisgICAg
aWYgKCFpczxBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q+KHNlbGYuYXhCYWNraW5nT2JqZWN0KSkK
ICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eU1l
ZGlhT2JqZWN0PihtX29iamVjdCktPmludGVyYWN0aXZlVmlkZW9EdXJhdGlvbigpOworICAgIHJl
dHVybiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q+KHNlbGYuYXhCYWNraW5nT2Jq
ZWN0KS0+aW50ZXJhY3RpdmVWaWRlb0R1cmF0aW9uKCk7CiB9CiAKIC0gKEJPT0wpYWNjZXNzaWJp
bGl0eUlzTWVkaWFQbGF5aW5nCkBAIC03MDksMTAgKzcwOSwxMCBAQCBzdGF0aWMgQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nlc3Np
YmlsaXR5TwogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAg
ICAgIHJldHVybiBOTzsKICAgICAKLSAgICBpZiAoIWlzPEFjY2Vzc2liaWxpdHlNZWRpYU9iamVj
dD4obV9vYmplY3QpKQorICAgIGlmICghaXM8QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0PihzZWxm
LmF4QmFja2luZ09iamVjdCkpCiAgICAgICAgIHJldHVybiBOTzsKICAgICAKLSAgICByZXR1cm4g
ZG93bmNhc3Q8QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0PihtX29iamVjdCktPmlzUGxheWluZygp
OworICAgIHJldHVybiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q+KHNlbGYuYXhC
YWNraW5nT2JqZWN0KS0+aXNQbGF5aW5nKCk7CiB9CiAKIC0gKEJPT0wpYWNjZXNzaWJpbGl0eUlz
TWVkaWFNdXRlZApAQCAtNzIwLDEwICs3MjAsMTAgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyKiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8K
ICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1
cm4gTk87CiAgICAgCi0gICAgaWYgKCFpczxBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q+KG1fb2Jq
ZWN0KSkKKyAgICBpZiAoIWlzPEFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdD4oc2VsZi5heEJhY2tp
bmdPYmplY3QpKQogICAgICAgICByZXR1cm4gTk87CiAgICAgCi0gICAgcmV0dXJuIGRvd25jYXN0
PEFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdD4obV9vYmplY3QpLT5pc011dGVkKCk7CisgICAgcmV0
dXJuIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdD4oc2VsZi5heEJhY2tpbmdPYmpl
Y3QpLT5pc011dGVkKCk7CiB9CiAKIC0gKHZvaWQpYWNjZXNzaWJpbGl0eVRvZ2dsZU11dGVGb3JN
ZWRpYQpAQCAtNzMxLDEwICs3MzEsMTAgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyKiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KICAgICBp
ZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm47CiAg
ICAgCi0gICAgaWYgKCFpczxBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q+KG1fb2JqZWN0KSkKKyAg
ICBpZiAoIWlzPEFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdD4oc2VsZi5heEJhY2tpbmdPYmplY3Qp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5TWVkaWFPYmpl
Y3Q+KG1fb2JqZWN0KS0+dG9nZ2xlTXV0ZSgpOworICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlN
ZWRpYU9iamVjdD4oc2VsZi5heEJhY2tpbmdPYmplY3QpLT50b2dnbGVNdXRlKCk7CiB9CiAKIC0g
KHZvaWQpYWNjZXNzaWJpbGl0eVZpZGVvRW50ZXJGdWxsc2NyZWVuCkBAIC03NDIsMjIgKzc0Miwy
MiBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmln
bm9yZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5TwogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nl
c3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoIWlzPEFjY2Vz
c2liaWxpdHlNZWRpYU9iamVjdD4obV9vYmplY3QpKQorICAgIGlmICghaXM8QWNjZXNzaWJpbGl0
eU1lZGlhT2JqZWN0PihzZWxmLmF4QmFja2luZ09iamVjdCkpCiAgICAgICAgIHJldHVybjsKICAg
ICAKLSAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q+KG1fb2JqZWN0KS0+ZW50
ZXJGdWxsc2NyZWVuKCk7CisgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0Pihz
ZWxmLmF4QmFja2luZ09iamVjdCktPmVudGVyRnVsbHNjcmVlbigpOwogfQogCiAtICh1aW50NjRf
dClfYWNjZXNzaWJpbGl0eVRleHRFbnRyeVRyYWl0cwogewogICAgIHVpbnQ2NF90IHRyYWl0cyA9
IFtzZWxmIF9heFRleHRFbnRyeVRyYWl0XTsKLSAgICBpZiAobV9vYmplY3QtPmlzRm9jdXNlZCgp
KQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNGb2N1c2VkKCkpCiAgICAgICAgIHRy
YWl0cyB8PSAoW3NlbGYgX2F4SGFzVGV4dEN1cnNvclRyYWl0XSB8IFtzZWxmIF9heFRleHRPcGVy
YXRpb25zQXZhaWxhYmxlVHJhaXRdKTsKLSAgICBpZiAobV9vYmplY3QtPmlzUGFzc3dvcmRGaWVs
ZCgpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNQYXNzd29yZEZpZWxkKCkpCiAg
ICAgICAgIHRyYWl0cyB8PSBbc2VsZiBfYXhTZWN1cmVUZXh0RmllbGRUcmFpdF07Ci0gICAgaWYg
KG1fb2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6U2VhcmNoRmllbGQp
CisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmls
aXR5Um9sZTo6U2VhcmNoRmllbGQpCiAgICAgICAgIHRyYWl0cyB8PSBbc2VsZiBfYXhTZWFyY2hG
aWVsZFRyYWl0XTsKLSAgICBpZiAobV9vYmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxp
dHlSb2xlOjpUZXh0QXJlYSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnJvbGVWYWx1
ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpUZXh0QXJlYSkKICAgICAgICAgdHJhaXRzIHw9IFtz
ZWxmIF9heFRleHRBcmVhVHJhaXRdOwogICAgIHJldHVybiB0cmFpdHM7CiB9CkBAIC03NjcsMTMg
Kzc2NywxMyBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxp
dHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5TwogICAgIGlmICghW3NlbGYgX3ByZXBh
cmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIEFjY2Vz
c2liaWxpdHlSb2xlIHJvbGUgPSBtX29iamVjdC0+cm9sZVZhbHVlKCk7CisgICAgQWNjZXNzaWJp
bGl0eVJvbGUgcm9sZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5yb2xlVmFsdWUoKTsKICAgICB1
aW50NjRfdCB0cmFpdHMgPSBbc2VsZiBfYXhXZWJDb250ZW50VHJhaXRdOwogICAgIHN3aXRjaCAo
cm9sZSkgewogICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6Okxpbms6CiAgICAgY2FzZSBBY2Nl
c3NpYmlsaXR5Um9sZTo6V2ViQ29yZUxpbms6CiAgICAgICAgIHRyYWl0cyB8PSBbc2VsZiBfYXhM
aW5rVHJhaXRdOwotICAgICAgICBpZiAobV9vYmplY3QtPmlzVmlzaXRlZCgpKQorICAgICAgICBp
ZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVmlzaXRlZCgpKQogICAgICAgICAgICAgdHJhaXRz
IHw9IFtzZWxmIF9heFZpc2l0ZWRUcmFpdF07CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNj
ZXNzaWJpbGl0eVJvbGU6OlRleHRGaWVsZDoKQEAgLTc4OSw3ICs3ODksNyBAQCBzdGF0aWMgQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihB
Y2Nlc3NpYmlsaXR5TwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xl
OjpCdXR0b246CiAgICAgICAgIHRyYWl0cyB8PSBbc2VsZiBfYXhCdXR0b25UcmFpdF07Ci0gICAg
ICAgIGlmIChtX29iamVjdC0+aXNQcmVzc2VkKCkpCisgICAgICAgIGlmIChzZWxmLmF4QmFja2lu
Z09iamVjdC0+aXNQcmVzc2VkKCkpCiAgICAgICAgICAgICB0cmFpdHMgfD0gW3NlbGYgX2F4VG9n
Z2xlVHJhaXRdOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpQ
b3BVcEJ1dHRvbjoKQEAgLTgyNCwxMyArODI0LDEzIEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciogQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKEFjY2Vzc2liaWxpdHlP
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGlmIChtX29iamVjdC0+aXNBdHRhY2htZW50
RWxlbWVudCgpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNBdHRhY2htZW50RWxl
bWVudCgpKQogICAgICAgICB0cmFpdHMgfD0gW3NlbGYgX2F4VXBkYXRlc0ZyZXF1ZW50bHlUcmFp
dF07CiAgICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc1NlbGVjdGVkKCkpCisgICAgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc1NlbGVjdGVkKCkpCiAgICAgICAgIHRyYWl0cyB8PSBbc2VsZiBf
YXhTZWxlY3RlZFRyYWl0XTsKIAotICAgIGlmICghbV9vYmplY3QtPmlzRW5hYmxlZCgpKQorICAg
IGlmICghc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzRW5hYmxlZCgpKQogICAgICAgICB0cmFpdHMg
fD0gW3NlbGYgX2F4Tm90RW5hYmxlZFRyYWl0XTsKICAgICAKICAgICBpZiAobV9hY2Nlc3NpYmls
aXR5VHJhaXRzRnJvbUFuY2VzdG9yID09IFVMTE9OR19NQVgpCkBAIC04NDQsNyArODQ0LDcgQEAg
c3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVk
QW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KIC0gKEJPT0wpaXNTVkdHcm91cEVsZW1lbnQKIHsKICAg
ICAvLyBJZiBhbiBTVkcgZ3JvdXAgZWxlbWVudCBoYXMgYSB0aXRsZSwgaXQgc2hvdWxkIGJlIGFu
IGFjY2Vzc2libGUgZWxlbWVudCBvbiBpT1MuCi0gICAgTm9kZSogbm9kZSA9IG1fb2JqZWN0LT5u
b2RlKCk7CisgICAgTm9kZSogbm9kZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5ub2RlKCk7CiAg
ICAgaWYgKG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6Z1RhZykgJiYgW1tzZWxm
IGFjY2Vzc2liaWxpdHlMYWJlbF0gbGVuZ3RoXSA+IDApCiAgICAgICAgIHJldHVybiBZRVM7CiAg
ICAgCkBAIC04NTMsMTYgKzg1MywxNiBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5TwogCiAtIChC
T09MKWRldGVybWluZUlzQWNjZXNzaWJpbGl0eUVsZW1lbnQKIHsKLSAgICBpZiAoIW1fb2JqZWN0
KQorICAgIGlmICghc2VsZi5heEJhY2tpbmdPYmplY3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKICAgICAvLyBIb25vciB3aGVuIHNvbWV0aGluZyBleHBsaWNpdGx5IG1ha2VzIHRoaXMg
YW4gZWxlbWVudCAoc3VwZXIgd2lsbCBjb250YWluIHRoYXQgbG9naWMpIAogICAgIGlmIChbc3Vw
ZXIgaXNBY2Nlc3NpYmlsaXR5RWxlbWVudF0pCiAgICAgICAgIHJldHVybiBZRVM7CiAgICAgCi0g
ICAgbV9vYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworICAgIHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKICAgICAKLSAgICBzd2l0Y2ggKG1fb2JqZWN0LT5y
b2xlVmFsdWUoKSkgeworICAgIHN3aXRjaCAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnJvbGVWYWx1
ZSgpKSB7CiAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6VGV4dEZpZWxkOgogICAgIGNhc2Ug
QWNjZXNzaWJpbGl0eVJvbGU6OlRleHRBcmVhOgogICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6
OkJ1dHRvbjoKQEAgLTEwNjEsMTEgKzEwNjEsMTEgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyKiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8K
IAogLSAoQk9PTClzdHJpbmdWYWx1ZVNob3VsZEJlVXNlZEluTGFiZWwKIHsKLSAgICBpZiAobV9v
YmplY3QtPmlzVGV4dENvbnRyb2woKSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlz
VGV4dENvbnRyb2woKSkKICAgICAgICAgcmV0dXJuIE5POwotICAgIGlmIChtX29iamVjdC0+cm9s
ZVZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OlBvcFVwQnV0dG9uKQorICAgIGlmIChzZWxm
LmF4QmFja2luZ09iamVjdC0+cm9sZVZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OlBvcFVw
QnV0dG9uKQogICAgICAgICByZXR1cm4gTk87Ci0gICAgaWYgKG1fb2JqZWN0LT5pc0ZpbGVVcGxv
YWRCdXR0b24oKSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzRmlsZVVwbG9hZEJ1
dHRvbigpKQogICAgICAgICByZXR1cm4gTk87CiAgICAgaWYgKFtzZWxmIGFjY2Vzc2liaWxpdHlJ
c1dlYkludGVyYWN0aXZlVmlkZW9dKQogICAgICAgICByZXR1cm4gTk87CkBAIC0xMDg4LDcgKzEw
ODgsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcg
KnJlc3VsdCwgTlNTdHJpbmcgKnN0cmluZykKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNz
aWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gTk87CiAgICAgCi0gICAgcmV0dXJuIG1fb2Jq
ZWN0LT5oYXNUb3VjaEV2ZW50TGlzdGVuZXIoKTsKKyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdP
YmplY3QtPmhhc1RvdWNoRXZlbnRMaXN0ZW5lcigpOwogfQogCiAtIChCT09MKV9hY2Nlc3NpYmls
aXR5VmFsdWVJc0F1dG9maWxsZWQKQEAgLTEwOTYsNyArMTA5Niw3IEBAIHN0YXRpYyB2b2lkIGFw
cGVuZFN0cmluZ1RvUmVzdWx0KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3Ry
aW5nKQogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAg
IHJldHVybiBOTzsKIAotICAgIHJldHVybiBtX29iamVjdC0+aXNWYWx1ZUF1dG9maWxsZWQoKTsK
KyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVmFsdWVBdXRvZmlsbGVkKCk7CiB9
CiAKIC0gKEJPT0wpX2FjY2Vzc2liaWxpdHlJc1N0cm9uZ1Bhc3N3b3JkRmllbGQKQEAgLTExMDQs
MTAgKzExMDQsMTAgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQoTlNNdXRhYmxl
U3RyaW5nICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFy
ZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIE5POwogICAgIAotICAgIGlmICgh
bV9vYmplY3QtPmlzUGFzc3dvcmRGaWVsZCgpKQorICAgIGlmICghc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmlzUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gTk87CiAgICAgCi0gICAgcmV0
dXJuIG1fb2JqZWN0LT52YWx1ZUF1dG9maWxsQnV0dG9uVHlwZSgpID09IEF1dG9GaWxsQnV0dG9u
VHlwZTo6U3Ryb25nUGFzc3dvcmQ7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT52
YWx1ZUF1dG9maWxsQnV0dG9uVHlwZSgpID09IEF1dG9GaWxsQnV0dG9uVHlwZTo6U3Ryb25nUGFz
c3dvcmQ7CiB9CiAKIC0gKENHRmxvYXQpX2FjY2Vzc2liaWxpdHlNaW5WYWx1ZQpAQCAtMTExNSw3
ICsxMTE1LDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQoTlNNdXRhYmxlU3Ry
aW5nICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFj
Y2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgcmV0dXJuIG1f
b2JqZWN0LT5taW5WYWx1ZUZvclJhbmdlKCk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5taW5WYWx1ZUZvclJhbmdlKCk7CiB9CiAKIC0gKENHRmxvYXQpX2FjY2Vzc2liaWxpdHlN
YXhWYWx1ZQpAQCAtMTEyMyw3ICsxMTIzLDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9S
ZXN1bHQoTlNNdXRhYmxlU3RyaW5nICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgaWYg
KCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgCi0gICAgcmV0dXJuIG1fb2JqZWN0LT5tYXhWYWx1ZUZvclJhbmdlKCk7CisgICAgcmV0dXJu
IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXhWYWx1ZUZvclJhbmdlKCk7CiB9CiAKIC0gKE5TU3Ry
aW5nICopYWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlvbgpAQCAtMTEzMSwxMCArMTEzMSwxMCBA
QCBzdGF0aWMgdm9pZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3Vs
dCwgTlNTdHJpbmcgKnN0cmluZykKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0
eUNhbGxdKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgaWYgKG1fb2JqZWN0LT5pc0NvbG9y
V2VsbCgpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNDb2xvcldlbGwoKSkKICAg
ICAgICAgcmV0dXJuIEFYQ29sb3JXZWxsVGV4dCgpOwogCi0gICAgcmV0dXJuIG1fb2JqZWN0LT5y
b2xlRGVzY3JpcHRpb24oKTsKKyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPnJvbGVE
ZXNjcmlwdGlvbigpOwogfQogCiAtIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlMYWJlbApAQCAt
MTE1NSwyMSArMTE1NSwyMSBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011
dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJpbmcgKnN0cmluZykKICAgICBOU1N0cmluZyAqaW50
ZXJhY3RpdmVWaWRlb0Rlc2NyaXB0aW9uID0gW3NlbGYgaW50ZXJhY3RpdmVWaWRlb0Rlc2NyaXB0
aW9uXTsKICAgICAKICAgICAvLyBXZSBzaG91bGQgZXhwb3NlIHRoZSB2YWx1ZSBvZiB0aGUgaW5w
dXQgdHlwZSBkYXRlIG9yIHRpbWUgdGhyb3VnaCBBWFZhbHVlIGluc3RlYWQgb2YgQVhUaXRsZS4K
LSAgICBpZiAobV9vYmplY3QtPmlzSW5wdXRUeXBlUG9wdXBCdXR0b24oKSAmJiBbYXhUaXRsZSBp
c0VxdWFsVG9TdHJpbmc6W3NlbGYgYWNjZXNzaWJpbGl0eVZhbHVlXV0pCisgICAgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc0lucHV0VHlwZVBvcHVwQnV0dG9uKCkgJiYgW2F4VGl0bGUgaXNF
cXVhbFRvU3RyaW5nOltzZWxmIGFjY2Vzc2liaWxpdHlWYWx1ZV1dKQogICAgICAgICBheFRpdGxl
ID0gbmlsOwogCiAgICAgLy8gRm9vdGVyIGlzIG5vdCBjb25zaWRlcmVkIGEgbGFuZG1hcmssIGJ1
dCB3ZSB3YW50IHRoZSByb2xlIGRlc2NyaXB0aW9uLgotICAgIGlmIChtX29iamVjdC0+cm9sZVZh
bHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OkZvb3RlcikKKyAgICBpZiAoc2VsZi5heEJhY2tp
bmdPYmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpGb290ZXIpCiAgICAg
ICAgIGxhbmRtYXJrRGVzY3JpcHRpb24gPSBBWEZvb3RlclJvbGVEZXNjcmlwdGlvblRleHQoKTsK
IAogICAgIE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0ID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmdd
OwotICAgIGlmIChtX29iamVjdC0+cm9sZVZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6Okhv
cml6b250YWxSdWxlKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+cm9sZVZhbHVlKCkg
PT0gQWNjZXNzaWJpbGl0eVJvbGU6Okhvcml6b250YWxSdWxlKQogICAgICAgICBhcHBlbmRTdHJp
bmdUb1Jlc3VsdChyZXN1bHQsIEFYSG9yaXpvbnRhbFJ1bGVEZXNjcmlwdGlvblRleHQoKSk7CiAK
ICAgICBhcHBlbmRTdHJpbmdUb1Jlc3VsdChyZXN1bHQsIGF4VGl0bGUpOwogICAgIGFwcGVuZFN0
cmluZ1RvUmVzdWx0KHJlc3VsdCwgYXhEZXNjcmlwdGlvbik7CiAgICAgaWYgKFtzZWxmIHN0cmlu
Z1ZhbHVlU2hvdWxkQmVVc2VkSW5MYWJlbF0pIHsKLSAgICAgICAgTlNTdHJpbmcgKnZhbHVlTGFi
ZWwgPSBtX29iamVjdC0+c3RyaW5nVmFsdWUoKTsKKyAgICAgICAgTlNTdHJpbmcgKnZhbHVlTGFi
ZWwgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+c3RyaW5nVmFsdWUoKTsKICAgICAgICAgdmFsdWVM
YWJlbCA9IFt2YWx1ZUxhYmVsIHN0cmluZ0J5VHJpbW1pbmdDaGFyYWN0ZXJzSW5TZXQ6W05TQ2hh
cmFjdGVyU2V0IHdoaXRlc3BhY2VDaGFyYWN0ZXJTZXRdXTsKICAgICAgICAgYXBwZW5kU3RyaW5n
VG9SZXN1bHQocmVzdWx0LCB2YWx1ZUxhYmVsKTsKICAgICB9CkBAIC0xMTgyLDcgKzExODIsNyBA
QCBzdGF0aWMgdm9pZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3Vs
dCwgTlNTdHJpbmcgKnN0cmluZykKIC0gKEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqKXRhYmxlQ2Vs
bFBhcmVudAogewogICAgIC8vIEZpbmQgaWYgdGhpcyBlbGVtZW50IGlzIGluIGEgdGFibGUgY2Vs
bC4KLSAgICBpZiAoQVhDb3JlT2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5j
ZXN0b3I8QVhDb3JlT2JqZWN0PigqbV9vYmplY3QsIHRydWUsIFtdIChjb25zdCBBWENvcmVPYmpl
Y3QmIG9iamVjdCkgeworICAgIGlmIChBWENvcmVPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxp
dHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCpzZWxmLmF4QmFja2luZ09iamVjdCwgdHJ1
ZSwgW10gKGNvbnN0IEFYQ29yZU9iamVjdCYgb2JqZWN0KSB7CiAgICAgICAgIHJldHVybiBvYmpl
Y3QuaXNUYWJsZUNlbGwoKTsKICAgICB9KSkKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFj
Y2Vzc2liaWxpdHlUYWJsZUNlbGwqPihwYXJlbnQpOwpAQCAtMTE5Miw3ICsxMTkyLDcgQEAgc3Rh
dGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQoTlNNdXRhYmxlU3RyaW5nICpyZXN1bHQsIE5T
U3RyaW5nICpzdHJpbmcpCiAtIChBY2Nlc3NpYmlsaXR5VGFibGUqKXRhYmxlUGFyZW50CiB7CiAg
ICAgLy8gRmluZCBpZiB0aGUgcGFyZW50IHRhYmxlIGZvciB0aGUgdGFibGUgY2VsbC4KLSAgICBp
ZiAoQVhDb3JlT2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QVhD
b3JlT2JqZWN0PigqbV9vYmplY3QsIHRydWUsIFtdIChjb25zdCBBWENvcmVPYmplY3QmIG9iamVj
dCkgeworICAgIGlmIChBWENvcmVPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRB
bmNlc3RvcjxBWENvcmVPYmplY3Q+KCpzZWxmLmF4QmFja2luZ09iamVjdCwgdHJ1ZSwgW10gKGNv
bnN0IEFYQ29yZU9iamVjdCYgb2JqZWN0KSB7CiAgICAgICAgIHJldHVybiBpczxBY2Nlc3NpYmls
aXR5VGFibGU+KG9iamVjdCkgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPihvYmplY3Qp
LmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKTsKICAgICB9KSkKICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZSo+KHBhcmVudCk7CkBAIC0xMjA0LDcg
KzEyMDQsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJp
bmcgKnJlc3VsdCwgTlNTdHJpbmcgKnN0cmluZykKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNj
ZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgQVhDb3JlT2JqZWN0
KiB0aXRsZUVsZW1lbnQgPSBtX29iamVjdC0+dGl0bGVVSUVsZW1lbnQoKTsKKyAgICBBWENvcmVP
YmplY3QqIHRpdGxlRWxlbWVudCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT50aXRsZVVJRWxlbWVu
dCgpOwogICAgIGlmICh0aXRsZUVsZW1lbnQpCiAgICAgICAgIHJldHVybiB0aXRsZUVsZW1lbnQt
PndyYXBwZXIoKTsKIApAQCAtMTM1NCwxMyArMTM1NCwxMyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRT
dHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJpbmcgKnN0cmluZykK
ICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1
cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CiAKLSAgICBpZiAobV9vYmplY3QtPmlzUmFk
aW9CdXR0b24oKSkgeworICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNSYWRpb0J1dHRv
bigpKSB7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJl
blZlY3RvciByYWRpb0J1dHRvblNpYmxpbmdzOwotICAgICAgICBtX29iamVjdC0+bGlua2VkVUlF
bGVtZW50cyhyYWRpb0J1dHRvblNpYmxpbmdzKTsKKyAgICAgICAgc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmxpbmtlZFVJRWxlbWVudHMocmFkaW9CdXR0b25TaWJsaW5ncyk7CiAgICAgICAgIGlmIChy
YWRpb0J1dHRvblNpYmxpbmdzLnNpemUoKSA8PSAxKQogICAgICAgICAgICAgcmV0dXJuIE5TTWFr
ZVJhbmdlKE5TTm90Rm91bmQsIDApOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJh
bmdlKHJhZGlvQnV0dG9uU2libGluZ3MuZmluZChtX29iamVjdCksIHJhZGlvQnV0dG9uU2libGlu
Z3Muc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKHJhZGlvQnV0dG9uU2libGlu
Z3MuZmluZChzZWxmLmF4QmFja2luZ09iamVjdCksIHJhZGlvQnV0dG9uU2libGluZ3Muc2l6ZSgp
KTsKICAgICB9CiAgICAgCiAgICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogdGFibGVDZWxsID0g
W3NlbGYgdGFibGVDZWxsUGFyZW50XTsKQEAgLTEzOTAsNyArMTM5MCw3IEBAIHN0YXRpYyB2b2lk
IGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAq
c3RyaW5nKQogewogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAg
ICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX29iamVjdC0+YmxvY2txdW90ZUxldmVsKCk7
CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5ibG9ja3F1b3RlTGV2ZWwoKTsKIH0K
IAogLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5RGF0ZXRpbWVWYWx1ZQpAQCAtMTM5OCw3ICsx
Mzk4LDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQoTlNNdXRhYmxlU3RyaW5n
ICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vz
c2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIGlmIChhdXRvKiBwYXJl
bnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QVhDb3JlT2JqZWN0PigqbV9vYmplY3Qs
IHRydWUsIFtdIChjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkgeworICAgIGlmIChhdXRvKiBw
YXJlbnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QVhDb3JlT2JqZWN0Pigqc2VsZi5h
eEJhY2tpbmdPYmplY3QsIHRydWUsIFtdIChjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkgewog
ICAgICAgICByZXR1cm4gb2JqZWN0LnN1cHBvcnRzRGF0ZXRpbWVBdHRyaWJ1dGUoKTsKICAgICB9
KSkKICAgICAgICAgcmV0dXJuIHBhcmVudC0+ZGF0ZXRpbWVBdHRyaWJ1dGVWYWx1ZSgpOwpAQCAt
MTQxMSw3ICsxNDExLDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQoTlNNdXRh
YmxlU3RyaW5nICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgaWYgKCFbc2VsZiBfcHJl
cGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIHJldHVy
biBtX29iamVjdC0+cGxhY2Vob2xkZXJWYWx1ZSgpOworICAgIHJldHVybiBzZWxmLmF4QmFja2lu
Z09iamVjdC0+cGxhY2Vob2xkZXJWYWx1ZSgpOwogfQogCiAtIChOU1N0cmluZyAqKWFjY2Vzc2li
aWxpdHlDb2xvclN0cmluZ1ZhbHVlCkBAIC0xNDE5LDkgKzE0MTksOSBAQCBzdGF0aWMgdm9pZCBh
cHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJpbmcgKnN0
cmluZykKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAg
ICByZXR1cm4gbmlsOwogCi0gICAgaWYgKG1fb2JqZWN0LT5pc0NvbG9yV2VsbCgpKSB7CisgICAg
aWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0NvbG9yV2VsbCgpKSB7CiAgICAgICAgIGludCBy
LCBnLCBiOwotICAgICAgICBtX29iamVjdC0+Y29sb3JWYWx1ZShyLCBnLCBiKTsKKyAgICAgICAg
c2VsZi5heEJhY2tpbmdPYmplY3QtPmNvbG9yVmFsdWUociwgZywgYik7CiAgICAgICAgIHJldHVy
biBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInJnYiAlNy41ZiAlNy41ZiAlNy41ZiAxIiwg
ciAvIDI1NS4sIGcgLyAyNTUuLCBiIC8gMjU1Ll07CiAgICAgfQogCkBAIC0xNDM4LDkgKzE0Mzgs
OSBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJl
c3VsdCwgTlNTdHJpbmcgKnN0cmluZykKICAgICBpZiAodmFsdWUpCiAgICAgICAgIHJldHVybiB2
YWx1ZTsKICAgICAKLSAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gbV9vYmplY3QtPnJvbGVW
YWx1ZSgpOwotICAgIGlmIChtX29iamVjdC0+aXNDaGVja2JveE9yUmFkaW8oKSB8fCByb2xlID09
IEFjY2Vzc2liaWxpdHlSb2xlOjpNZW51SXRlbUNoZWNrYm94IHx8IHJvbGUgPT0gQWNjZXNzaWJp
bGl0eVJvbGU6Ok1lbnVJdGVtUmFkaW8gfHwgcm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6U3dp
dGNoKSB7Ci0gICAgICAgIHN3aXRjaCAobV9vYmplY3QtPmNoZWNrYm94T3JSYWRpb1ZhbHVlKCkp
IHsKKyAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnJv
bGVWYWx1ZSgpOworICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNDaGVja2JveE9yUmFk
aW8oKSB8fCByb2xlID09IEFjY2Vzc2liaWxpdHlSb2xlOjpNZW51SXRlbUNoZWNrYm94IHx8IHJv
bGUgPT0gQWNjZXNzaWJpbGl0eVJvbGU6Ok1lbnVJdGVtUmFkaW8gfHwgcm9sZSA9PSBBY2Nlc3Np
YmlsaXR5Um9sZTo6U3dpdGNoKSB7CisgICAgICAgIHN3aXRjaCAoc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmNoZWNrYm94T3JSYWRpb1ZhbHVlKCkpIHsKICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5
QnV0dG9uU3RhdGU6Ok9mZjoKICAgICAgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0
aEZvcm1hdDpAIiVkIiwgMF07CiAgICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRl
OjpPbjoKQEAgLTE0NTIsMTIgKzE0NTIsMTIgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9S
ZXN1bHQoTlNNdXRhYmxlU3RyaW5nICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgICAg
IHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVkIiwgMF07CiAgICAgfQogICAg
IAotICAgIGlmIChtX29iamVjdC0+aXNCdXR0b24oKSAmJiBtX29iamVjdC0+aXNQcmVzc2VkKCkp
CisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0J1dHRvbigpICYmIHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5pc1ByZXNzZWQoKSkKICAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdX
aXRoRm9ybWF0OkAiJWQiLCAxXTsKIAogICAgIC8vIHJkYXI6Ly84MTMxMzg4IFdlYktpdCBzaG91
bGQgZXhwb3NlIHRoZSBzYW1lIGluZm8gYXMgVUlLaXQgZm9yIGl0cyBwYXNzd29yZCBmaWVsZHMu
Ci0gICAgaWYgKG1fb2JqZWN0LT5pc1Bhc3N3b3JkRmllbGQoKSAmJiAhW3NlbGYgX2FjY2Vzc2li
aWxpdHlJc1N0cm9uZ1Bhc3N3b3JkRmllbGRdKSB7Ci0gICAgICAgIGludCBwYXNzd29yZExlbmd0
aCA9IG1fb2JqZWN0LT5hY2Nlc3NpYmlsaXR5UGFzc3dvcmRGaWVsZExlbmd0aCgpOworICAgIGlm
IChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNQYXNzd29yZEZpZWxkKCkgJiYgIVtzZWxmIF9hY2Nl
c3NpYmlsaXR5SXNTdHJvbmdQYXNzd29yZEZpZWxkXSkgeworICAgICAgICBpbnQgcGFzc3dvcmRM
ZW5ndGggPSBzZWxmLmF4QmFja2luZ09iamVjdC0+YWNjZXNzaWJpbGl0eVBhc3N3b3JkRmllbGRM
ZW5ndGgoKTsKICAgICAgICAgTlNNdXRhYmxlU3RyaW5nKiBzdHJpbmcgPSBbTlNNdXRhYmxlU3Ry
aW5nIHN0cmluZ107CiAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgcGFzc3dvcmRMZW5ndGg7
ICsraykKICAgICAgICAgICAgIFtzdHJpbmcgYXBwZW5kU3RyaW5nOkAi4oCiIl07CkBAIC0xNDY2
LDIyICsxNDY2LDIyIEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5TTXV0YWJs
ZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3RyaW5nKQogICAgIAogICAgIC8vIEEgdGV4dCBj
b250cm9sIHNob3VsZCByZXR1cm4gaXRzIHRleHQgZGF0YSBhcyB0aGUgYXhWYWx1ZSAocGVyIGlQ
aG9uZSBBWCBBUEkpLgogICAgIGlmICghW3NlbGYgc3RyaW5nVmFsdWVTaG91bGRCZVVzZWRJbkxh
YmVsXSkKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5zdHJpbmdWYWx1ZSgpOworICAgICAgICBy
ZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPnN0cmluZ1ZhbHVlKCk7CiAgICAgCi0gICAgaWYg
KG1fb2JqZWN0LT5pc1JhbmdlQ29udHJvbCgpKSB7CisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5pc1JhbmdlQ29udHJvbCgpKSB7CiAgICAgICAgIC8vIFByZWZlciBhIHZhbHVlRGVzY3Jp
cHRpb24gaWYgcHJvdmlkZWQgYnkgdGhlIGF1dGhvciAodGhyb3VnaCBhcmlhLXZhbHVldGV4dCku
Ci0gICAgICAgIFN0cmluZyB2YWx1ZURlc2NyaXB0aW9uID0gbV9vYmplY3QtPnZhbHVlRGVzY3Jp
cHRpb24oKTsKKyAgICAgICAgU3RyaW5nIHZhbHVlRGVzY3JpcHRpb24gPSBzZWxmLmF4QmFja2lu
Z09iamVjdC0+dmFsdWVEZXNjcmlwdGlvbigpOwogICAgICAgICBpZiAoIXZhbHVlRGVzY3JpcHRp
b24uaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIHZhbHVlRGVzY3JpcHRpb247CiAKLSAg
ICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJS4yZiIsIG1fb2JqZWN0
LT52YWx1ZUZvclJhbmdlKCldOworICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6QCIlLjJmIiwgc2VsZi5heEJhY2tpbmdPYmplY3QtPnZhbHVlRm9yUmFuZ2UoKV07CiAg
ICAgfQogCi0gICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlBdHRhY2htZW50PihtX29iamVjdCkgJiYg
ZG93bmNhc3Q8QWNjZXNzaWJpbGl0eUF0dGFjaG1lbnQ+KG1fb2JqZWN0KS0+aGFzUHJvZ3Jlc3Mo
KSkKLSAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJS4yZiIsIG1f
b2JqZWN0LT52YWx1ZUZvclJhbmdlKCldOworICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5QXR0YWNo
bWVudD4oc2VsZi5heEJhY2tpbmdPYmplY3QpICYmIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlBdHRh
Y2htZW50PihzZWxmLmF4QmFja2luZ09iamVjdCktPmhhc1Byb2dyZXNzKCkpCisgICAgICAgIHJl
dHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiUuMmYiLCBzZWxmLmF4QmFja2luZ09i
amVjdC0+dmFsdWVGb3JSYW5nZSgpXTsKICAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzSGVhZGlu
ZygpKQotICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlZCIsIG1f
b2JqZWN0LT5oZWFkaW5nTGV2ZWwoKV07CisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5p
c0hlYWRpbmcoKSkKKyAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAi
JWQiLCBzZWxmLmF4QmFja2luZ09iamVjdC0+aGVhZGluZ0xldmVsKCldOwogICAgIAogICAgIHJl
dHVybiBuaWw7CiB9CkBAIC0xNDkxLDcgKzE0OTEsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTdHJp
bmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJpbmcgKnN0cmluZykKICAg
ICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4g
Tk87CiAKLSAgICByZXR1cm4gaXM8QWNjZXNzaWJpbGl0eUF0dGFjaG1lbnQ+KG1fb2JqZWN0KTsK
KyAgICByZXR1cm4gaXM8QWNjZXNzaWJpbGl0eUF0dGFjaG1lbnQ+KHNlbGYuYXhCYWNraW5nT2Jq
ZWN0KTsKIH0KIAogLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNDb21ib0JveApAQCAtMTQ5OSw3ICsx
NDk5LDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQoTlNNdXRhYmxlU3RyaW5n
ICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vz
c2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIE5POwogCi0gICAgcmV0dXJuIG1fb2JqZWN0
LT5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6Q29tYm9Cb3g7CisgICAgcmV0dXJu
IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6
Q29tYm9Cb3g7CiB9CiAKIC0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eUhpbnQKQEAgLTE1MTEs
NyArMTUxMSw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5TTXV0YWJsZVN0
cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3RyaW5nKQogICAgIGFwcGVuZFN0cmluZ1RvUmVzdWx0
KHJlc3VsdCwgW3NlbGYgYmFzZUFjY2Vzc2liaWxpdHlIZWxwVGV4dF0pOwogICAgIAogICAgIGlm
IChbc2VsZiBhY2Nlc3NpYmlsaXR5SXNTaG93aW5nVmFsaWRhdGlvbk1lc3NhZ2VdKQotICAgICAg
ICBhcHBlbmRTdHJpbmdUb1Jlc3VsdChyZXN1bHQsIG1fb2JqZWN0LT52YWxpZGF0aW9uTWVzc2Fn
ZSgpKTsKKyAgICAgICAgYXBwZW5kU3RyaW5nVG9SZXN1bHQocmVzdWx0LCBzZWxmLmF4QmFja2lu
Z09iamVjdC0+dmFsaWRhdGlvbk1lc3NhZ2UoKSk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KQEAgLTE1MjEsNyArMTUyMSw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0
KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3RyaW5nKQogICAgIGlmICghW3Nl
bGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAg
Ci0gICAgVVJMIHVybCA9IG1fb2JqZWN0LT51cmwoKTsKKyAgICBVUkwgdXJsID0gc2VsZi5heEJh
Y2tpbmdPYmplY3QtPnVybCgpOwogICAgIGlmICh1cmwuaXNOdWxsKCkpCiAgICAgICAgIHJldHVy
biBuaWw7CiAgICAgcmV0dXJuIChOU1VSTCopdXJsOwpAQCAtMTU0Miw3ICsxNTQyLDcgQEAgc3Rh
dGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQoTlNNdXRhYmxlU3RyaW5nICpyZXN1bHQsIE5T
U3RyaW5nICpzdHJpbmcpCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxs
XSkKICAgICAgICAgcmV0dXJuIE5POwogICAgIAotICAgIG1fb2JqZWN0LT5zY3JvbGxUb01ha2VW
aXNpYmxlKCk7CisgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPnNjcm9sbFRvTWFrZVZpc2libGUo
KTsKICAgICByZXR1cm4gWUVTOwogfQogCkBAIC0xNTcwLDcgKzE1NzAsNyBAQCBzdGF0aWMgdm9p
ZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJpbmcg
KnN0cmluZykKICAgICAgICAgcmV0dXJuIE5POwogICAgIH0KIAotICAgIEJPT0wgcmVzdWx0ID0g
bV9vYmplY3QtPnNjcm9sbEJ5UGFnZShzY3JvbGxEaXJlY3Rpb24pOworICAgIEJPT0wgcmVzdWx0
ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnNjcm9sbEJ5UGFnZShzY3JvbGxEaXJlY3Rpb24pOwog
ICAgIAogICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAgW3NlbGYgcG9zdFNjcm9sbFN0YXR1c0No
YW5nZU5vdGlmaWNhdGlvbl07CkBAIC0xNTg2LDcgKzE1ODYsNyBAQCBzdGF0aWMgdm9pZCBhcHBl
bmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJpbmcgKnN0cmlu
ZykKIAogLSAoQ0dSZWN0KV9hY2Nlc3NpYmlsaXR5UmVsYXRpdmVGcmFtZQogewotICAgIGF1dG8g
cmVjdCA9IEZsb2F0UmVjdChzbmFwcGVkSW50UmVjdChtX29iamVjdC0+ZWxlbWVudFJlY3QoKSkp
OworICAgIGF1dG8gcmVjdCA9IEZsb2F0UmVjdChzbmFwcGVkSW50UmVjdChzZWxmLmF4QmFja2lu
Z09iamVjdC0+ZWxlbWVudFJlY3QoKSkpOwogICAgIHJldHVybiBbc2VsZiBjb252ZXJ0UmVjdFRv
U3BhY2U6cmVjdCBzcGFjZTpBY2Nlc3NpYmlsaXR5Q29udmVyc2lvblNwYWNlOjpQYWdlXTsKIH0K
IApAQCAtMTU5Niw3ICsxNTk2LDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQo
TlNNdXRhYmxlU3RyaW5nICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgaWYgKCFbc2Vs
ZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIENHUmVjdFplcm87
CiAgICAgCi0gICAgTGF5b3V0UmVjdCByZWN0ID0gbV9vYmplY3QtPmVsZW1lbnRSZWN0KCk7Cisg
ICAgTGF5b3V0UmVjdCByZWN0ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmVsZW1lbnRSZWN0KCk7
CiAgICAgcmV0dXJuIENHUmVjdE1ha2UocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCks
IHJlY3QuaGVpZ2h0KCkpOwogfQogCkBAIC0xNjA1LDcgKzE2MDUsNyBAQCBzdGF0aWMgdm9pZCBh
cHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJpbmcgKnN0
cmluZykKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAg
ICByZXR1cm4gQ0dSZWN0WmVybzsKICAgICAKLSAgICBhdXRvIGRvY3VtZW50ID0gbV9vYmplY3Qt
PmRvY3VtZW50KCk7CisgICAgYXV0byBkb2N1bWVudCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5k
b2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT52aWV3KCkpCiAgICAg
ICAgIHJldHVybiBDR1JlY3RaZXJvOwogICAgIGF1dG8gcmVjdCA9IEZsb2F0UmVjdChzbmFwcGVk
SW50UmVjdChkb2N1bWVudC0+dmlldygpLT51bm9ic2N1cmVkQ29udGVudFJlY3QoKSkpOwpAQCAt
MTYxOSw3ICsxNjE5LDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQoTlNNdXRh
YmxlU3RyaW5nICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgaWYgKCFbc2VsZiBfcHJl
cGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIENHUG9pbnRaZXJvOwogCi0g
ICAgSW50UG9pbnQgcG9pbnQgPSBtX29iamVjdC0+Y2xpY2tQb2ludCgpOworICAgIEludFBvaW50
IHBvaW50ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmNsaWNrUG9pbnQoKTsKICAgICByZXR1cm4g
W3NlbGYgX2FjY2Vzc2liaWxpdHlDb252ZXJ0UG9pbnRUb1ZpZXdTcGFjZTpwb2ludF07CiB9CiAK
QEAgLTE2MjgsMjEgKzE2MjgsMjEgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQo
TlNNdXRhYmxlU3RyaW5nICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgaWYgKCFbc2Vs
ZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIENHUmVjdFplcm87
CiAgICAgCi0gICAgYXV0byByZWN0ID0gRmxvYXRSZWN0KHNuYXBwZWRJbnRSZWN0KG1fb2JqZWN0
LT5lbGVtZW50UmVjdCgpKSk7CisgICAgYXV0byByZWN0ID0gRmxvYXRSZWN0KHNuYXBwZWRJbnRS
ZWN0KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5lbGVtZW50UmVjdCgpKSk7CiAgICAgcmV0dXJuIFtz
ZWxmIGNvbnZlcnRSZWN0VG9TcGFjZTpyZWN0IHNwYWNlOkFjY2Vzc2liaWxpdHlDb252ZXJzaW9u
U3BhY2U6OlNjcmVlbl07CiB9CiAKIC8vIENoZWNrcyB3aGV0aGVyIGEgbGluayBjb250YWlucyBv
bmx5IHN0YXRpYyB0ZXh0IGFuZCBpbWFnZXMgKGFuZCBoYXMgYmVlbiBkaXZpZGVkIHVubmF0dXJh
bGx5IGJ5IDxzcGFucz4gYW5kIG90aGVyIG5lZmFyaW91cyBtZWNoYW5pc21zKS4KIC0gKEJPT0wp
Y29udGFpbnNVbm5hdHVyYWxseVNlZ21lbnRlZENoaWxkcmVuCiB7Ci0gICAgaWYgKCFtX29iamVj
dCkKKyAgICBpZiAoIXNlbGYuYXhCYWNraW5nT2JqZWN0KQogICAgICAgICByZXR1cm4gTk87CiAg
ICAgCi0gICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSA9IG1fb2JqZWN0LT5yb2xlVmFsdWUoKTsK
KyAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnJvbGVW
YWx1ZSgpOwogICAgIGlmIChyb2xlICE9IEFjY2Vzc2liaWxpdHlSb2xlOjpMaW5rICYmIHJvbGUg
IT0gQWNjZXNzaWJpbGl0eVJvbGU6OldlYkNvcmVMaW5rKQogICAgICAgICByZXR1cm4gTk87CiAg
ICAgCi0gICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSBtX29iamVjdC0+Y2hpbGRyZW4oKTsKKyAg
ICBjb25zdCBhdXRvJiBjaGlsZHJlbiA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5jaGlsZHJlbigp
OwogICAgIHVuc2lnbmVkIGNoaWxkcmVuU2l6ZSA9IGNoaWxkcmVuLnNpemUoKTsKIAogICAgIC8v
IElmIHRoZXJlJ3Mgb25seSBvbmUgY2hpbGQsIHRoZW4gaXQgZG9lc24ndCBoYXZlIHNlZ21lbnRl
ZCBjaGlsZHJlbi4gCkBAIC0xNjYzLDIzICsxNjYzLDIzIEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0
cmluZ1RvUmVzdWx0KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3RyaW5nKQog
ICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVy
biBuaWw7CiAKLSAgICBBWEF0dHJpYnV0ZUNhY2hlRW5hYmxlciBlbmFibGVDYWNoZShtX29iamVj
dC0+YXhPYmplY3RDYWNoZSgpKTsKKyAgICBBWEF0dHJpYnV0ZUNhY2hlRW5hYmxlciBlbmFibGVD
YWNoZShzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpKTsKICAgICAKICAgICAv
LyBBcyBsb25nIGFzIHRoZXJlJ3MgYSBwYXJlbnQgd3JhcHBlciwgdGhhdCdzIHRoZSBjb3JyZWN0
IGNoYWluIHRvIGNsaW1iLgotICAgIEFYQ29yZU9iamVjdCogcGFyZW50ID0gbV9vYmplY3QtPnBh
cmVudE9iamVjdFVuaWdub3JlZCgpOworICAgIEFYQ29yZU9iamVjdCogcGFyZW50ID0gc2VsZi5h
eEJhY2tpbmdPYmplY3QtPnBhcmVudE9iamVjdFVuaWdub3JlZCgpOwogICAgIGlmIChwYXJlbnQp
CiAgICAgICAgIHJldHVybiBwYXJlbnQtPndyYXBwZXIoKTsKIAogICAgIC8vIE1vY2sgb2JqZWN0
cyBjYW4gaGF2ZSB0aGVpciBwYXJlbnRzIGRldGFjaGVkIGJ1dCBzdGlsbCBleGlzdCBpbiB0aGUg
Y2FjaGUuCi0gICAgaWYgKG1fb2JqZWN0LT5pc0RldGFjaGVkRnJvbVBhcmVudCgpKQorICAgIGlm
IChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNEZXRhY2hlZEZyb21QYXJlbnQoKSkKICAgICAgICAg
cmV0dXJuIG5pbDsKICAgICAKICAgICAvLyBUaGUgb25seSBvYmplY3Qgd2l0aG91dCBhIHBhcmVu
dCB3cmFwcGVyIGF0IHRoaXMgcG9pbnQgc2hvdWxkIGJlIGEgc2Nyb2xsIHZpZXcuCi0gICAgQVNT
RVJUKG1fb2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KCkpOworICAgIEFTU0VSVChz
ZWxmLmF4QmFja2luZ09iamVjdC0+aXNBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldygpKTsKICAgICAK
ICAgICAvLyBWZXJpZnkgdGhpcyBpcyB0aGUgdG9wIGRvY3VtZW50LiBJZiBub3QsIHdlIG1pZ2h0
IG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgcGxhdGZvcm0gd2lkZ2V0LgotICAgIEZyYW1lVmlldyog
ZnJhbWVWaWV3ID0gbV9vYmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCk7Ci0gICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gbV9vYmplY3QtPmRvY3VtZW50KCk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZp
ZXcgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnRGcmFtZVZpZXcoKTsKKyAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKTsKICAgICBp
ZiAoZG9jdW1lbnQgJiYgZnJhbWVWaWV3ICYmIGRvY3VtZW50ICE9ICZkb2N1bWVudC0+dG9wRG9j
dW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZyYW1lVmlldy0+cGxhdGZvcm1XaWRnZXQoKTsKICAg
ICAKQEAgLTE2OTIsNyArMTY5Miw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0
KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3RyaW5nKQogICAgIGlmICghW3Nl
bGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAg
Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogZm9jdXNlZE9iaiA9IGRvd25jYXN0PEFjY2Vzc2li
aWxpdHlPYmplY3Q+KG1fb2JqZWN0LT5mb2N1c2VkVUlFbGVtZW50KCkpOworICAgIEFjY2Vzc2li
aWxpdHlPYmplY3QqIGZvY3VzZWRPYmogPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5T2JqZWN0Pihz
ZWxmLmF4QmFja2luZ09iamVjdC0+Zm9jdXNlZFVJRWxlbWVudCgpKTsKICAgICAKICAgICBpZiAo
IWZvY3VzZWRPYmopCiAgICAgICAgIHJldHVybiBuaWw7CkBAIC0xNzE0LDcgKzE3MTQsNyBAQCBz
dGF0aWMgdm9pZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwg
TlNTdHJpbmcgKnN0cmluZykKICAgICBpZiAoIXdlYlZpZXdDbGFzcykKICAgICAgICAgcmV0dXJu
IG5pbDsKICAgICAKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fb2JqZWN0LT5kb2N1bWVu
dEZyYW1lVmlldygpOworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc2VsZi5heEJhY2tpbmdP
YmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCk7CiAKICAgICBpZiAoIWZyYW1lVmlldykKICAgICAg
ICAgcmV0dXJuIG5pbDsKQEAgLTE3NTMsNyArMTc1Myw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0
cmluZ1RvUmVzdWx0KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3RyaW5nKQog
ICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVy
biBOTzsKICAgICAKLSAgICByZXR1cm4gbV9vYmplY3QtPmNhblNldFZhbHVlQXR0cmlidXRlKCk7
CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5jYW5TZXRWYWx1ZUF0dHJpYnV0ZSgp
OwogfQogCiAtIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlMaW5rUmVsYXRpb25zaGlwVHlwZQpA
QCAtMTc2MSw3ICsxNzYxLDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQoTlNN
dXRhYmxlU3RyaW5nICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgaWYgKCFbc2VsZiBf
cHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAg
ICByZXR1cm4gbV9vYmplY3QtPmxpbmtSZWxWYWx1ZSgpOworICAgIHJldHVybiBzZWxmLmF4QmFj
a2luZ09iamVjdC0+bGlua1JlbFZhbHVlKCk7CiB9CiAKIC0gKEJPT0wpYWNjZXNzaWJpbGl0eVJl
cXVpcmVkCkBAIC0xNzY5LDcgKzE3NjksNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTdHJpbmdUb1Jl
c3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJpbmcgKnN0cmluZykKICAgICBpZiAo
IVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gTk87CiAK
LSAgICByZXR1cm4gbV9vYmplY3QtPmlzUmVxdWlyZWQoKTsKKyAgICByZXR1cm4gc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmlzUmVxdWlyZWQoKTsKIH0KIAogLSAoTlNBcnJheSAqKWFjY2Vzc2liaWxp
dHlGbG93VG9FbGVtZW50cwpAQCAtMTc3OCw3ICsxNzc4LDcgQEAgc3RhdGljIHZvaWQgYXBwZW5k
U3RyaW5nVG9SZXN1bHQoTlNNdXRhYmxlU3RyaW5nICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcp
CiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuOwotICAgIG1fb2JqZWN0LT5hcmlhRmxv
d1RvRWxlbWVudHMoY2hpbGRyZW4pOworICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5hcmlhRmxv
d1RvRWxlbWVudHMoY2hpbGRyZW4pOwogICAgIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGNoaWxk
cmVuLnNpemUoKTsKICAgICBOU011dGFibGVBcnJheSogYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkg
YXJyYXlXaXRoQ2FwYWNpdHk6bGVuZ3RoXTsKQEAgLTE4MDIsOSArMTgwMiw5IEBAIHN0YXRpYyB2
b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmlu
ZyAqc3RyaW5nKQogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgLy8gSWYgdGhpcyBzdGF0aWMg
dGV4dCBpbnNpZGUgb2YgYSBsaW5rLCBpdCBzaG91bGQgdXNlIGl0cyBwYXJlbnQncyBsaW5rZWQg
ZWxlbWVudC4KLSAgICBBWENvcmVPYmplY3QqIGVsZW1lbnQgPSBtX29iamVjdDsKLSAgICBpZiAo
bV9vYmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpTdGF0aWNUZXh0ICYm
IG1fb2JqZWN0LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKS0+aXNMaW5rKCkpCi0gICAgICAgIGVs
ZW1lbnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7CisgICAgQVhDb3JlT2Jq
ZWN0KiBlbGVtZW50ID0gc2VsZi5heEJhY2tpbmdPYmplY3Q7CisgICAgaWYgKHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6U3RhdGljVGV4dCAm
JiBzZWxmLmF4QmFja2luZ09iamVjdC0+cGFyZW50T2JqZWN0VW5pZ25vcmVkKCktPmlzTGluaygp
KQorICAgICAgICBlbGVtZW50ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnBhcmVudE9iamVjdFVu
aWdub3JlZCgpOwogCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yIGxpbmtlZEVsZW1lbnRzOwogICAgIGVsZW1lbnQtPmxpbmtlZFVJRWxlbWVudHMo
bGlua2VkRWxlbWVudHMpOwpAQCAtMTgyMywxMCArMTgyMywxMCBAQCBzdGF0aWMgdm9pZCBhcHBl
bmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJpbmcgKnN0cmlu
ZykKIAogLSAoQk9PTClpc0F0dGFjaG1lbnQKIHsKLSAgICBpZiAoIW1fb2JqZWN0KQorICAgIGlm
ICghc2VsZi5heEJhY2tpbmdPYmplY3QpCiAgICAgICAgIHJldHVybiBOTzsKICAgICAKLSAgICBy
ZXR1cm4gbV9vYmplY3QtPmlzQXR0YWNobWVudCgpOworICAgIHJldHVybiBzZWxmLmF4QmFja2lu
Z09iamVjdC0+aXNBdHRhY2htZW50KCk7CiB9CiAKIC0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0
eVRleHR1YWxDb250ZXh0CkBAIC0xODM0LDcgKzE4MzQsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRT
dHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJpbmcgKnN0cmluZykK
ICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1
cm4gbmlsOwogCi0gICAgaWYgKG1fb2JqZWN0LT5ub2RlKCkgJiYgbV9vYmplY3QtPm5vZGUoKS0+
aGFzVGFnTmFtZShjb2RlVGFnKSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPm5vZGUo
KSAmJiBzZWxmLmF4QmFja2luZ09iamVjdC0+bm9kZSgpLT5oYXNUYWdOYW1lKGNvZGVUYWcpKQog
ICAgICAgICByZXR1cm4gVUlBY2Nlc3NpYmlsaXR5VGV4dHVhbENvbnRleHRTb3VyY2VDb2RlOwog
ICAgIAogICAgIHJldHVybiBuaWw7CkBAIC0xODQ1LDcgKzE4NDUsNyBAQCBzdGF0aWMgdm9pZCBh
cHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJpbmcgKnN0
cmluZykKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAg
ICByZXR1cm4gTk87CiAKLSAgICByZXR1cm4gbV9vYmplY3QtPnByZXNzKCk7CisgICAgcmV0dXJu
IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5wcmVzcygpOwogfQogCiAtIChpZClhdHRhY2htZW50Vmll
dwpAQCAtMTg1NCw3ICsxODU0LDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQo
TlNNdXRhYmxlU3RyaW5nICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgICAgIHJldHVy
biBuaWw7CiAKICAgICBBU1NFUlQoW3NlbGYgaXNBdHRhY2htZW50XSk7Ci0gICAgV2lkZ2V0KiB3
aWRnZXQgPSBtX29iamVjdC0+d2lkZ2V0Rm9yQXR0YWNobWVudFZpZXcoKTsKKyAgICBXaWRnZXQq
IHdpZGdldCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT53aWRnZXRGb3JBdHRhY2htZW50Vmlldygp
OwogICAgIGlmICghd2lkZ2V0KQogICAgICAgICByZXR1cm4gbmlsOwogICAgIHJldHVybiB3aWRn
ZXQtPnBsYXRmb3JtV2lkZ2V0KCk7ICAgIApAQCAtMTk1MCw3ICsxOTUwLDcgQEAgc3RhdGljIFJl
bmRlck9iamVjdCogcmVuZGVyZXJGb3JWaWV3KFdBS1ZpZXcqIHZpZXcpCiAgICAgaWYgKCFbc2Vs
ZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIENHUG9pbnRaZXJv
OwogICAgIAotICAgIHJldHVybiBtX29iamVjdC0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICByZXR1
cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPnNjcm9sbFBvc2l0aW9uKCk7CiB9CiAKIC0gKENHU2l6
ZSlfYWNjZXNzaWJpbGl0eVNjcm9sbFNpemUKQEAgLTE5NTgsNyArMTk1OCw3IEBAIHN0YXRpYyBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyRm9yVmlldyhXQUtWaWV3KiB2aWV3KQogICAgIGlmICghW3Nl
bGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBDR1NpemVaZXJv
OwogICAgIAotICAgIHJldHVybiBtX29iamVjdC0+c2Nyb2xsQ29udGVudHNTaXplKCk7CisgICAg
cmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zY3JvbGxDb250ZW50c1NpemUoKTsKIH0KIAog
LSAoQ0dSZWN0KV9hY2Nlc3NpYmlsaXR5U2Nyb2xsVmlzaWJsZVJlY3QKQEAgLTE5NjYsNyArMTk2
Niw3IEBAIHN0YXRpYyBSZW5kZXJPYmplY3QqIHJlbmRlcmVyRm9yVmlldyhXQUtWaWV3KiB2aWV3
KQogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJl
dHVybiBDR1JlY3RaZXJvOwogICAgIAotICAgIHJldHVybiBtX29iamVjdC0+c2Nyb2xsVmlzaWJs
ZUNvbnRlbnRSZWN0KCk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zY3JvbGxW
aXNpYmxlQ29udGVudFJlY3QoKTsKIH0KIAogLSAoQVhDb3JlT2JqZWN0KilkZXRhaWxQYXJlbnRG
b3JTdW1tYXJ5T2JqZWN0OihBWENvcmVPYmplY3QqKW9iamVjdApAQCAtMjAwNCw3ICsyMDA0LDcg
QEAgc3RhdGljIFJlbmRlck9iamVjdCogcmVuZGVyZXJGb3JWaWV3KFdBS1ZpZXcqIHZpZXcpCiB7
CiAgICAgQWNjZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhIGNyaXRlcmlhID0gYWNjZXNzaWJpbGl0
eVNlYXJjaENyaXRlcmlhRm9yU2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZShw
YXJhbWV0ZXJzKTsKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW5WZWN0b3IgcmVzdWx0czsKLSAgICBtX29iamVjdC0+ZmluZE1hdGNoaW5nT2JqZWN0cygmY3Jp
dGVyaWEsIHJlc3VsdHMpOworICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5maW5kTWF0Y2hpbmdP
YmplY3RzKCZjcml0ZXJpYSwgcmVzdWx0cyk7CiAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXko
cmVzdWx0cyk7CiB9CiAKQEAgLTIwMTMsOSArMjAxMyw5IEBAIHN0YXRpYyBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyRm9yVmlldyhXQUtWaWV3KiB2aWV3KQogICAgIGlmICghW3NlbGYgX3ByZXBhcmVB
Y2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBGcmFtZVNlbGVj
dGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBtX29iamVjdC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2Vs
ZWN0aW9uKCk7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX29iamVjdC0+c2Vs
ZWN0aW9uKCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcmFuZ2UgPSBtX29iamVjdC0+dmlz
aWJsZVBvc2l0aW9uUmFuZ2UoKTsKKyAgICBGcmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24g
PSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCk7
CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBzZWxmLmF4QmFja2luZ09iamVjdC0+
c2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcmFuZ2UgPSBzZWxmLmF4QmFj
a2luZ09iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsKICAgICAKICAgICAvLyBCZWZvcmUg
YSBzZWxlY3Rpb24gd2l0aCBsZW5ndGggZXhpc3RzLCB0aGUgY3Vyc29yIHBvc2l0aW9uIG5lZWRz
IHRvIG1vdmUgdG8gdGhlIHJpZ2h0IHN0YXJ0aW5nIHBsYWNlLgogICAgIC8vIFRoYXQgc2hvdWxk
IGJlIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBlbGVtZW50IChyYW5nZS5zdGFydCkuIEhvd2V2ZXIs
IGlmIHRoZSBjdXJzb3IgaXMgYWxyZWFkeSB3aXRoaW4gdGhlIApAQCAtMjA1MCw3ICsyMDUwLDcg
QEAgc3RhdGljIFJlbmRlck9iamVjdCogcmVuZGVyZXJGb3JWaWV3KFdBS1ZpZXcqIHZpZXcpCiAg
ICAgaWYgKHZpc2libGVQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
RnJhbWVTZWxlY3Rpb24mIGZyYW1lU2VsZWN0aW9uID0gbV9vYmplY3QtPmRvY3VtZW50KCktPmZy
YW1lKCktPnNlbGVjdGlvbigpOworICAgIEZyYW1lU2VsZWN0aW9uJiBmcmFtZVNlbGVjdGlvbiA9
IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5kb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKTsK
ICAgICBmcmFtZVNlbGVjdGlvbi5tb3ZlVG8odmlzaWJsZVBvc2l0aW9uLCBVc2VyVHJpZ2dlcmVk
KTsKIH0KIApAQCAtMjA1OSw3ICsyMDU5LDcgQEAgc3RhdGljIFJlbmRlck9iamVjdCogcmVuZGVy
ZXJGb3JWaWV3KFdBS1ZpZXcqIHZpZXcpCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2li
aWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9vYmplY3QtPmluY3JlbWVudCgp
OworICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pbmNyZW1lbnQoKTsKIH0KIAogLSAodm9pZClh
Y2Nlc3NpYmlsaXR5RGVjcmVtZW50CkBAIC0yMDY3LDcgKzIwNjcsNyBAQCBzdGF0aWMgUmVuZGVy
T2JqZWN0KiByZW5kZXJlckZvclZpZXcoV0FLVmlldyogdmlldykKICAgICBpZiAoIVtzZWxmIF9w
cmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX29iamVj
dC0+ZGVjcmVtZW50KCk7CisgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPmRlY3JlbWVudCgpOwog
fQogCiAjcHJhZ21hIG1hcmsgQWNjZXNzaWJpbGl0eSBUZXh0IE1hcmtlciBIYW5kbGVycwpAQCAt
MjA5Niw3ICsyMDk2LDcgQEAgc3RhdGljIFJlbmRlck9iamVjdCogcmVuZGVyZXJGb3JWaWV3KFdB
S1ZpZXcqIHZpZXcpCiB7CiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxs
XSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fb2JqZWN0LT5zZXRWYWx1ZShzdHJpbmcpOworICAg
IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZXRWYWx1ZShzdHJpbmcpOwogfQogCiAtIChOU1N0cmlu
ZyAqKXN0cmluZ0ZvclRleHRNYXJrZXJzOihOU0FycmF5ICopbWFya2VycwpAQCAtMjEwOCw3ICsy
MTA4LDcgQEAgc3RhdGljIFJlbmRlck9iamVjdCogcmVuZGVyZXJGb3JWaWV3KFdBS1ZpZXcqIHZp
ZXcpCiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICByZXR1
cm4gbV9vYmplY3QtPnN0cmluZ0ZvclJhbmdlKHJhbmdlKTsKKyAgICByZXR1cm4gc2VsZi5heEJh
Y2tpbmdPYmplY3QtPnN0cmluZ0ZvclJhbmdlKHJhbmdlKTsKIH0KIAogc3RhdGljIGludCBibG9j
a3F1b3RlTGV2ZWwoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKQEAgLTIzMDgsNyArMjMwOCw3IEBA
IHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmli
dXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIE5v
ZGUqIHJlcGxhY2VkTm9kZSA9IG5vZGUudHJhdmVyc2VUb0NoaWxkQXQob2Zmc2V0KTsKICAgICAg
ICAgICAgIGlmIChyZXBsYWNlZE5vZGUpIHsKLSAgICAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBvYmogPSBtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShyZXBs
YWNlZE5vZGUtPnJlbmRlcmVyKCkpOworICAgICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIG9iaiA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCktPmdldE9yQ3Jl
YXRlKHJlcGxhY2VkTm9kZS0+cmVuZGVyZXIoKSk7CiAgICAgICAgICAgICAgICAgaWYgKG9iaiAm
JiAhb2JqLT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpCiAgICAgICAgICAgICAgICAgICAgIFtz
ZWxmIF9hZGRBY2Nlc3NpYmlsaXR5T2JqZWN0Om9iaiB0b1RleHRNYXJrZXJBcnJheTphcnJheV07
CiAgICAgICAgICAgICB9CkBAIC0yMzIzLDcgKzIzMjMsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJp
YnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJp
bmcsCiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91
bmQsIDApOwogCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9vYmplY3QtPmRvY3VtZW50KCk7
CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmRvY3VtZW50
KCk7CiAgICAgRWxlbWVudCogc2VsZWN0aW9uUm9vdCA9IGRvY3VtZW50LT5mcmFtZSgpLT5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgRWxlbWVudCog
c2NvcGUgPSBzZWxlY3Rpb25Sb290ID8gc2VsZWN0aW9uUm9vdCA6IGRvY3VtZW50LT5kb2N1bWVu
dEVsZW1lbnQoKTsKIApAQCAtMjM1Nyw3ICsyMzU3LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1
dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5n
LAogICAgIC8vIGRpcmVjdGx5IGluIHRoZSBkb2N1bWVudCBET00sIHNvIHNlcmlhbGl6YXRpb24g
aXMgcHJvYmxlbWF0aWMuIE91ciBzb2x1dGlvbiBpcwogICAgIC8vIHRvIHVzZSB0aGUgcm9vdCBl
ZGl0YWJsZSBlbGVtZW50IG9mIHRoZSBzZWxlY3Rpb24gc3RhcnQgYXMgdGhlIHBvc2l0aW9uYWwg
YmFzZS4KICAgICAvLyBUaGF0IGZpdHMgd2l0aCBBcHBLaXQncyBpZGVhIG9mIGFuIGlucHV0IGNv
bnRleHQuCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9vYmplY3QtPmRvY3VtZW50KCk7Cisg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmRvY3VtZW50KCk7
CiAgICAgRWxlbWVudCogc2VsZWN0aW9uUm9vdCA9IGRvY3VtZW50LT5mcmFtZSgpLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgRWxlbWVudCogc2Nv
cGUgPSBzZWxlY3Rpb25Sb290ID8gc2VsZWN0aW9uUm9vdCA6IGRvY3VtZW50LT5kb2N1bWVudEVs
ZW1lbnQoKTsKICAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExl
bmd0aChzY29wZSwgbnNyYW5nZS5sb2NhdGlvbiwgbnNyYW5nZS5sZW5ndGgpOwpAQCAtMjM3Myw3
ICsyMzczLDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChOU011
dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAgIGlmICghbWFya2VyKQogICAg
ICAgICByZXR1cm4gTlNOb3RGb3VuZDsgICAgCiAKLSAgICBpZiAoQVhPYmplY3RDYWNoZSogY2Fj
aGUgPSBtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpKSB7CisgICAgaWYgKEFYT2JqZWN0Q2FjaGUq
IGNhY2hlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSkgewogICAgICAg
ICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gW21hcmtlciBjaGFyYWN0ZXJPZmZz
ZXRdOwogICAgICAgICAvLyBDcmVhdGUgYSBjb2xsYXBzZWQgcmFuZ2UgZnJvbSB0aGUgQ2hhcmFj
dGVyT2Zmc2V0IG9iamVjdC4KICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGNhY2hlLT5y
YW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoY2hhcmFjdGVyT2Zmc2V0LCBjaGFyYWN0
ZXJPZmZzZXQpOwpAQCAtMjM4OCw3ICsyMzg4LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVk
U3RyaW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAog
ICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVy
biBuaWw7CiAgICAgCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1fb2JqZWN0LT5lbGVtZW50
UmFuZ2UoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZi5heEJhY2tpbmdPYmplY3Qt
PmVsZW1lbnRSYW5nZSgpOwogICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2Vyc0ZvclJhbmdlOnJh
bmdlXTsKIH0KIApAQCAtMjQzMSwxMSArMjQzMSwxMSBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0
ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcs
CiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0
dXJuIG5pbDsKICAgICAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fb2JqZWN0
LT5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5zZWxlY3Rpb24oKTsKICAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKQog
ICAgICAgICByZXR1cm4gbmlsOwogICAgIAotICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9v
YmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7CiAgICAgaWYgKCFjYWNoZSkKICAgICAg
ICAgcmV0dXJuIG5pbDsKICAgICAKQEAgLTI0NjMsNyArMjQ2Myw3IEBAIHN0YXRpYyB2b2lkIEFY
QXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0
clN0cmluZywKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgQVhP
YmplY3RDYWNoZSogY2FjaGUgPSBtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpOworICAgIEFYT2Jq
ZWN0Q2FjaGUqIGNhY2hlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsK
ICAgICBpZiAoIWNhY2hlKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIApAQCAtMjUyOCw3ICsy
NTI4LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFi
bGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAgIGlmICghW3NlbGYgX3ByZXBhcmVB
Y2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICByZXR1cm4gbV9v
YmplY3QtPnN0cmluZ0ZvclJhbmdlKFtzZWxmIF9jb252ZXJ0VG9ET01SYW5nZTpyYW5nZV0pOwor
ICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+c3RyaW5nRm9yUmFuZ2UoW3NlbGYgX2Nv
bnZlcnRUb0RPTVJhbmdlOnJhbmdlXSk7CiB9CiAKIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0
dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZTooTlNSYW5nZSlyYW5nZQpAQCAtMjU1MCwxMCArMjU1MCwx
MCBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0
dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAKIC0gKE5TUmFuZ2UpX2FjY2Vzc2liaWxpdHlT
ZWxlY3RlZFRleHRSYW5nZQogewotICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5
Q2FsbF0gfHwgIW1fb2JqZWN0LT5pc1RleHRDb250cm9sKCkpCisgICAgaWYgKCFbc2VsZiBfcHJl
cGFyZUFjY2Vzc2liaWxpdHlDYWxsXSB8fCAhc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVGV4dENv
bnRyb2woKSkKICAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwogCi0g
ICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlID0gbV9vYmplY3QtPnNlbGVjdGVkVGV4dFJhbmdl
KCk7CisgICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlID0gc2VsZi5heEJhY2tpbmdPYmplY3Qt
PnNlbGVjdGVkVGV4dFJhbmdlKCk7CiAgICAgaWYgKHRleHRSYW5nZS5pc051bGwoKSkKICAgICAg
ICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwogICAgIHJldHVybiBOU01ha2VS
YW5nZSh0ZXh0UmFuZ2Uuc3RhcnQsIHRleHRSYW5nZS5sZW5ndGgpOwpAQCAtMjU2MSwxMCArMjU2
MSwxMCBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJs
ZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAKIC0gKHZvaWQpX2FjY2Vzc2liaWxpdHlT
ZXRTZWxlY3RlZFRleHRSYW5nZTooTlNSYW5nZSlyYW5nZQogewotICAgIGlmICghW3NlbGYgX3By
ZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0gfHwgIW1fb2JqZWN0LT5pc1RleHRDb250cm9sKCkpCisg
ICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSB8fCAhc2VsZi5heEJhY2tp
bmdPYmplY3QtPmlzVGV4dENvbnRyb2woKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG1f
b2JqZWN0LT5zZXRTZWxlY3RlZFRleHRSYW5nZShQbGFpblRleHRSYW5nZShyYW5nZS5sb2NhdGlv
biwgcmFuZ2UubGVuZ3RoKSk7CisgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPnNldFNlbGVjdGVk
VGV4dFJhbmdlKFBsYWluVGV4dFJhbmdlKHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgpKTsK
IH0KIAogLSAoQk9PTClhY2Nlc3NpYmlsaXR5UmVwbGFjZVJhbmdlOihOU1JhbmdlKXJhbmdlIHdp
dGhUZXh0OihOU1N0cmluZyAqKXN0cmluZwpAQCAtMjU3Miw3ICsyNTcyLDcgQEAgc3RhdGljIHZv
aWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5n
KiBhdHRyU3RyaW5nLAogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0p
CiAgICAgICAgIHJldHVybiBOTzsKIAotICAgIHJldHVybiBtX29iamVjdC0+cmVwbGFjZVRleHRJ
blJhbmdlKHN0cmluZywgUGxhaW5UZXh0UmFuZ2UocmFuZ2UpKTsKKyAgICByZXR1cm4gc2VsZi5h
eEJhY2tpbmdPYmplY3QtPnJlcGxhY2VUZXh0SW5SYW5nZShzdHJpbmcsIFBsYWluVGV4dFJhbmdl
KHJhbmdlKSk7CiB9CiAKIC0gKEJPT0wpYWNjZXNzaWJpbGl0eUluc2VydFRleHQ6KE5TU3RyaW5n
ICopdGV4dApAQCAtMjU4MCw3ICsyNTgwLDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3Ry
aW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAg
IGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBO
TzsKIAotICAgIHJldHVybiBtX29iamVjdC0+aW5zZXJ0VGV4dCh0ZXh0KTsKKyAgICByZXR1cm4g
c2VsZi5heEJhY2tpbmdPYmplY3QtPmluc2VydFRleHQodGV4dCk7CiB9CiAKIC8vIEEgY29udmVu
aWVuY2UgbWV0aG9kIGZvciBnZXR0aW5nIHRoZSBhY2Nlc3NpYmlsaXR5IG9iamVjdHMgb2YgYSBO
U1JhbmdlLiBDdXJyZW50bHkgdXNlZCBvbmx5IGJ5IERSVC4KQEAgLTI2MTUsMTQgKzI2MTUsMTQg
QEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRy
aWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3Np
YmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0gICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3Rpb24gPSBtX29iamVjdC0+c2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3Rpb24gPSBzZWxmLmF4QmFja2luZ09iamVjdC0+c2VsZWN0aW9uKCk7CiAgICAg
VmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwogICAg
IAogICAgIC8vIGlmIHRoZXJlJ3Mgbm8gc2VsZWN0aW9uLCBzdGFydCBhdCB0aGUgdG9wIG9mIHRo
ZSBkb2N1bWVudAogICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKLSAgICAgICAgcG9zaXRpb24g
PSBzdGFydE9mRG9jdW1lbnQobV9vYmplY3QtPmRvY3VtZW50KCkpOworICAgICAgICBwb3NpdGlv
biA9IHN0YXJ0T2ZEb2N1bWVudChzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKSk7CiAg
ICAgCi0gICAgcmV0dXJuIFtXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFya2VyV2l0
aFZpc2libGVQb3NpdGlvbjpwb3NpdGlvbiBjYWNoZTptX29iamVjdC0+YXhPYmplY3RDYWNoZSgp
XTsKKyAgICByZXR1cm4gW1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHRleHRNYXJrZXJXaXRo
VmlzaWJsZVBvc2l0aW9uOnBvc2l0aW9uIGNhY2hlOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9i
amVjdENhY2hlKCldOwogfQogCiAvLyBUaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCB0byByZXR1cm4g
dGhlIG1hcmtlciBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIHN0YXJ0aW5nIGF0CkBAIC0yNjM2LDkg
KzI2MzYsOSBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0
YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAgICAgIHJldHVybiBuaWw7CiAg
ICAgCiAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0ID0gW21hcmtlciB2aXNpYmxlUG9zaXRpb25d
OwotICAgIFZpc2libGVQb3NpdGlvbiBsaW5lRW5kID0gbV9vYmplY3QtPm5leHRMaW5lRW5kUG9z
aXRpb24oc3RhcnQpOworICAgIFZpc2libGVQb3NpdGlvbiBsaW5lRW5kID0gc2VsZi5heEJhY2tp
bmdPYmplY3QtPm5leHRMaW5lRW5kUG9zaXRpb24oc3RhcnQpOwogICAgIAotICAgIHJldHVybiBb
V2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgdGV4dE1hcmtlcldpdGhWaXNpYmxlUG9zaXRpb246
bGluZUVuZCBjYWNoZTptX29iamVjdC0+YXhPYmplY3RDYWNoZSgpXTsKKyAgICByZXR1cm4gW1dl
YkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHRleHRNYXJrZXJXaXRoVmlzaWJsZVBvc2l0aW9uOmxp
bmVFbmQgY2FjaGU6c2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKV07CiB9CiAK
IC8vIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIHRvIHJldHVybiB0aGUgbWFya2VyIGF0IHRoZSBz
dGFydCBvZiB0aGUgbGluZSBzdGFydGluZyBhdApAQCAtMjY1Miw5ICsyNjUyLDkgQEAgc3RhdGlj
IHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3Ry
aW5nKiBhdHRyU3RyaW5nLAogICAgICAgICByZXR1cm4gbmlsOwogICAgIAogICAgIFZpc2libGVQ
b3NpdGlvbiBzdGFydCA9IFttYXJrZXIgdmlzaWJsZVBvc2l0aW9uXTsKLSAgICBWaXNpYmxlUG9z
aXRpb24gbGluZVN0YXJ0ID0gbV9vYmplY3QtPnByZXZpb3VzTGluZVN0YXJ0UG9zaXRpb24oc3Rh
cnQpOworICAgIFZpc2libGVQb3NpdGlvbiBsaW5lU3RhcnQgPSBzZWxmLmF4QmFja2luZ09iamVj
dC0+cHJldmlvdXNMaW5lU3RhcnRQb3NpdGlvbihzdGFydCk7CiAgICAgCi0gICAgcmV0dXJuIFtX
ZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFya2VyV2l0aFZpc2libGVQb3NpdGlvbjps
aW5lU3RhcnQgY2FjaGU6bV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKV07CisgICAgcmV0dXJuIFtX
ZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFya2VyV2l0aFZpc2libGVQb3NpdGlvbjps
aW5lU3RhcnQgY2FjaGU6c2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKV07CiB9
CiAKIC0gKE5TQXJyYXkgKiltaXNzcGVsbGluZ1RleHRNYXJrZXJSYW5nZTooTlNBcnJheSAqKXN0
YXJ0VGV4dE1hcmtlclJhbmdlIGZvcndhcmQ6KEJPT0wpZm9yd2FyZApAQCAtMjY2Niw3ICsyNjY2
LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFibGVB
dHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAgIGlmICghc3RhcnRSYW5nZSkKICAgICAg
ICAgcmV0dXJuIG5pbDsKIAotICAgIFJlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZSA9IG1f
b2JqZWN0LT5nZXRNaXNzcGVsbGluZ1JhbmdlKHN0YXJ0UmFuZ2UsCisgICAgUmVmUHRyPFJhbmdl
PiBtaXNzcGVsbGluZ1JhbmdlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmdldE1pc3NwZWxsaW5n
UmFuZ2Uoc3RhcnRSYW5nZSwKICAgICAgICAgZm9yd2FyZCA/IEFjY2Vzc2liaWxpdHlTZWFyY2hE
aXJlY3Rpb246Ok5leHQgOiBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uOjpQcmV2aW91cyk7
CiAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJzRm9yUmFuZ2U6bWlzc3BlbGxpbmdSYW5nZV07
CiB9CkBAIC0yNzAxLDE0ICsyNzAxLDE0IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmlu
Z0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICBp
ZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gQ0dS
ZWN0WmVybzsKIAotICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9vYmplY3QtPmF4T2JqZWN0
Q2FjaGUoKTsKKyAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5heE9iamVjdENhY2hlKCk7CiAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgcmV0dXJuIENHUmVj
dFplcm87CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFtzZWxmIHJhbmdlRm9yVGV4dE1hcmtl
cnM6YXJyYXldOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBDR1JlY3RaZXJvOwog
ICAgIAotICAgIGF1dG8gcmVjdCA9IEZsb2F0UmVjdChtX29iamVjdC0+Ym91bmRzRm9yUmFuZ2Uo
cmFuZ2UpKTsKKyAgICBhdXRvIHJlY3QgPSBGbG9hdFJlY3Qoc2VsZi5heEJhY2tpbmdPYmplY3Qt
PmJvdW5kc0ZvclJhbmdlKHJhbmdlKSk7CiAgICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRSZWN0VG9T
cGFjZTpyZWN0IHNwYWNlOkFjY2Vzc2liaWxpdHlDb252ZXJzaW9uU3BhY2U6OlNjcmVlbl07CiB9
CiAKQEAgLTI3MTgsNyArMjcxOCw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0Fw
cGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICBpZiAo
IW9yaWdpbmFsUmFuZ2UpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0gICAgQVhPYmplY3RD
YWNoZSogY2FjaGUgPSBtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpOworICAgIEFYT2JqZWN0Q2Fj
aGUqIGNhY2hlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKICAgICBp
ZiAoIWNhY2hlKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIApAQCAtMjc2NywxNiArMjc2Nywx
NiBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0
dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vz
c2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBBWE9iamVjdENh
Y2hlKiBjYWNoZSA9IG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCk7CisgICAgQVhPYmplY3RDYWNo
ZSogY2FjaGUgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpOwogICAgIGlm
ICghY2FjaGUpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJh
Y3Rlck9mZnNldCA9IGNhY2hlLT5jaGFyYWN0ZXJPZmZzZXRGb3JQb2ludChJbnRQb2ludChwb2lu
dCksIG1fb2JqZWN0KTsKKyAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gY2Fj
aGUtPmNoYXJhY3Rlck9mZnNldEZvclBvaW50KEludFBvaW50KHBvaW50KSwgc2VsZi5heEJhY2tp
bmdPYmplY3QpOwogICAgIHJldHVybiBbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgdGV4dE1h
cmtlcldpdGhDaGFyYWN0ZXJPZmZzZXQ6Y2hhcmFjdGVyT2Zmc2V0IGNhY2hlOmNhY2hlXTsKIH0K
IAogLSAoV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKiluZXh0TWFya2VyRm9yQ2hhcmFjdGVy
T2Zmc2V0OihDaGFyYWN0ZXJPZmZzZXQmKWNoYXJhY3Rlck9mZnNldAogewotICAgIEFYT2JqZWN0
Q2FjaGUqIGNhY2hlID0gbV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICBBWE9iamVjdENh
Y2hlKiBjYWNoZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7CiAgICAg
aWYgKCFjYWNoZSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKQEAgLTI3ODksNyArMjc4OSw3
IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0
cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKIAogLSAoV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXIgKilwcmV2aW91c01hcmtlckZvckNoYXJhY3Rlck9mZnNldDooQ2hhcmFjdGVyT2Zmc2V0Jilj
aGFyYWN0ZXJPZmZzZXQKIHsKLSAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fb2JqZWN0LT5h
eE9iamVjdENhY2hlKCk7CisgICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBzZWxmLmF4QmFja2lu
Z09iamVjdC0+YXhPYmplY3RDYWNoZSgpOwogICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVy
biBuaWw7CiAgICAgCkBAIC0yODExLDcgKzI4MTEsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0
ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcs
CiAgICAgaWYgKCFbc3RhcnRNYXJrZXIgaXNLaW5kT2ZDbGFzczpbV2ViQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXIgY2xhc3NdXSB8fCAhW2VuZE1hcmtlciBpc0tpbmRPZkNsYXNzOltXZWJBY2Nlc3Np
YmlsaXR5VGV4dE1hcmtlciBjbGFzc11dKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAK
LSAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCk7Cisg
ICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RD
YWNoZSgpOwogICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIApA
QCAtMjgzOSw3ICsyODM5LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5k
VGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAgIGlmICghcmFu
Z2UpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0gICAgcmV0dXJuIFtXZWJBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlciBzdGFydE9yRW5kVGV4dE1hcmtlckZvclJhbmdlOnJhbmdlIGlzU3RhcnQ6
aXNTdGFydCBjYWNoZTptX29iamVjdC0+YXhPYmplY3RDYWNoZSgpXTsKKyAgICByZXR1cm4gW1dl
YkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHN0YXJ0T3JFbmRUZXh0TWFya2VyRm9yUmFuZ2U6cmFu
Z2UgaXNTdGFydDppc1N0YXJ0IGNhY2hlOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENh
Y2hlKCldOwogfQogCiAtIChOU0FycmF5ICopdGV4dE1hcmtlclJhbmdlRm9yTWFya2VyczooTlNB
cnJheSAqKXRleHRNYXJrZXJzCkBAIC0yODU2LDggKzI4NTYsOCBAQCBzdGF0aWMgdm9pZCBBWEF0
dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJT
dHJpbmcsCiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBX
ZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogc3RhcnQgPSBbV2ViQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXIgc3RhcnRPckVuZFRleHRNYXJrZXJGb3JSYW5nZTpyYW5nZSBpc1N0YXJ0OllFUyBjYWNo
ZTptX29iamVjdC0+YXhPYmplY3RDYWNoZSgpXTsKLSAgICBXZWJBY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlciogZW5kID0gW1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHN0YXJ0T3JFbmRUZXh0TWFy
a2VyRm9yUmFuZ2U6cmFuZ2UgaXNTdGFydDpOTyBjYWNoZTptX29iamVjdC0+YXhPYmplY3RDYWNo
ZSgpXTsKKyAgICBXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogc3RhcnQgPSBbV2ViQWNjZXNz
aWJpbGl0eVRleHRNYXJrZXIgc3RhcnRPckVuZFRleHRNYXJrZXJGb3JSYW5nZTpyYW5nZSBpc1N0
YXJ0OllFUyBjYWNoZTpzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpXTsKKyAg
ICBXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogZW5kID0gW1dlYkFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyIHN0YXJ0T3JFbmRUZXh0TWFya2VyRm9yUmFuZ2U6cmFuZ2UgaXNTdGFydDpOTyBjYWNo
ZTpzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpXTsKICAgICBpZiAoIXN0YXJ0
IHx8ICFlbmQpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5
V2l0aE9iamVjdHM6c3RhcnQsIGVuZCwgbmlsXTsKQEAgLTI4NjcsNyArMjg2Nyw3IEBAIHN0YXRp
YyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0
cmluZyogYXR0clN0cmluZywKIHsKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0
eUNhbGxdKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBtX29iamVjdC0+ZXhwYW5k
ZWRUZXh0VmFsdWUoKTsKKyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPmV4cGFuZGVk
VGV4dFZhbHVlKCk7CiB9CiAKIC0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eUlkZW50aWZpZXIK
QEAgLTI4NzUsNyArMjg3NSw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVu
ZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICBpZiAoIVtz
ZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gbmlsOwogICAg
IAotICAgIHJldHVybiBtX29iamVjdC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyKTsK
KyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6
OmlkQXR0cik7CiB9CiAKIC0gKE5TQXJyYXk8TlNTdHJpbmcgKj4gKilhY2Nlc3NpYmlsaXR5U3Bl
ZWNoSGludApAQCAtMjg5MSw3ICsyODkxLDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3Ry
aW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAg
IGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBO
TzsKIAotICAgIHJldHVybiBtX29iamVjdC0+aXNCdXN5KCk7CisgICAgcmV0dXJuIHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5pc0J1c3koKTsKIH0KIAogLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5
QVJJQUxpdmVSZWdpb25TdGF0dXMKQEAgLTI4OTksNyArMjg5OSw3IEBAIHN0YXRpYyB2b2lkIEFY
QXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0
clN0cmluZywKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAg
ICAgICByZXR1cm4gbmlsOwogCi0gICAgcmV0dXJuIG1fb2JqZWN0LT5saXZlUmVnaW9uU3RhdHVz
KCk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5saXZlUmVnaW9uU3RhdHVzKCk7
CiB9CiAKIC0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eUFSSUFSZWxldmFudFN0YXR1cwpAQCAt
MjkwNyw3ICsyOTA3LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4
dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAgIGlmICghW3NlbGYg
X3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0g
ICAgcmV0dXJuIG1fb2JqZWN0LT5saXZlUmVnaW9uUmVsZXZhbnQoKTsKKyAgICByZXR1cm4gc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmxpdmVSZWdpb25SZWxldmFudCgpOwogfQogCiAtIChCT09MKWFj
Y2Vzc2liaWxpdHlBUklBTGl2ZVJlZ2lvbklzQXRvbWljCkBAIC0yOTE1LDcgKzI5MTUsNyBAQCBz
dGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0
ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxp
dHlDYWxsXSkKICAgICAgICAgcmV0dXJuIE5POwogICAgIAotICAgIHJldHVybiBtX29iamVjdC0+
bGl2ZVJlZ2lvbkF0b21pYygpOworICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+bGl2
ZVJlZ2lvbkF0b21pYygpOwogfQogCiAtIChCT09MKWFjY2Vzc2liaWxpdHlTdXBwb3J0c0FSSUFQ
cmVzc2VkCkBAIC0yOTIzLDcgKzI5MjMsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJp
bmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAg
aWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIE5P
OwogICAgIAotICAgIHJldHVybiBtX29iamVjdC0+c3VwcG9ydHNQcmVzc2VkKCk7CisgICAgcmV0
dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zdXBwb3J0c1ByZXNzZWQoKTsKIH0KIAogLSAoQk9P
TClhY2Nlc3NpYmlsaXR5SXNQcmVzc2VkCkBAIC0yOTMxLDcgKzI5MzEsNyBAQCBzdGF0aWMgdm9p
ZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcq
IGF0dHJTdHJpbmcsCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkK
ICAgICAgICAgcmV0dXJuIE5POwogICAgIAotICAgIHJldHVybiBtX29iamVjdC0+aXNQcmVzc2Vk
KCk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1ByZXNzZWQoKTsKIH0KIAog
LSAoQk9PTClhY2Nlc3NpYmlsaXR5U3VwcG9ydHNBUklBRXhwYW5kZWQKQEAgLTI5NDEsMTMgKzI5
NDEsMTMgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFi
bGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAgIAogICAgIC8vIFNpbmNlIGRldGFp
bHMgZWxlbWVudCBpcyBpZ25vcmVkIG9uIGlPUywgd2Ugc2hvdWxkIGV4cG9zZSB0aGUgZXhwYW5k
ZWQgc3RhdHVzIG9uIGl0cwogICAgIC8vIHN1bW1hcnkncyBhY2Nlc3NpYmxlIGNoaWxkcmVuLgot
ICAgIGlmIChBWENvcmVPYmplY3QqIGRldGFpbFBhcmVudCA9IFtzZWxmIGRldGFpbFBhcmVudEZv
clN1bW1hcnlPYmplY3Q6bV9vYmplY3RdKQorICAgIGlmIChBWENvcmVPYmplY3QqIGRldGFpbFBh
cmVudCA9IFtzZWxmIGRldGFpbFBhcmVudEZvclN1bW1hcnlPYmplY3Q6c2VsZi5heEJhY2tpbmdP
YmplY3RdKQogICAgICAgICByZXR1cm4gZGV0YWlsUGFyZW50LT5zdXBwb3J0c0V4cGFuZGVkKCk7
CiAgICAgCi0gICAgaWYgKEFYQ29yZU9iamVjdCogdHJlZUl0ZW1QYXJlbnQgPSBbc2VsZiB0cmVl
SXRlbVBhcmVudEZvck9iamVjdDptX29iamVjdF0pCisgICAgaWYgKEFYQ29yZU9iamVjdCogdHJl
ZUl0ZW1QYXJlbnQgPSBbc2VsZiB0cmVlSXRlbVBhcmVudEZvck9iamVjdDpzZWxmLmF4QmFja2lu
Z09iamVjdF0pCiAgICAgICAgIHJldHVybiB0cmVlSXRlbVBhcmVudC0+c3VwcG9ydHNFeHBhbmRl
ZCgpOwogICAgIAotICAgIHJldHVybiBtX29iamVjdC0+c3VwcG9ydHNFeHBhbmRlZCgpOworICAg
IHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+c3VwcG9ydHNFeHBhbmRlZCgpOwogfQogCiAt
IChCT09MKWFjY2Vzc2liaWxpdHlJc0V4cGFuZGVkCkBAIC0yOTU3LDEzICsyOTU3LDEzIEBAIHN0
YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRl
ZFN0cmluZyogYXR0clN0cmluZywKIAogICAgIC8vIFNpbmNlIGRldGFpbHMgZWxlbWVudCBpcyBp
Z25vcmVkIG9uIGlPUywgd2Ugc2hvdWxkIGV4cG9zZSB0aGUgZXhwYW5kZWQgc3RhdHVzIG9uIGl0
cwogICAgIC8vIHN1bW1hcnkncyBhY2Nlc3NpYmxlIGNoaWxkcmVuLgotICAgIGlmIChBWENvcmVP
YmplY3QqIGRldGFpbFBhcmVudCA9IFtzZWxmIGRldGFpbFBhcmVudEZvclN1bW1hcnlPYmplY3Q6
bV9vYmplY3RdKQorICAgIGlmIChBWENvcmVPYmplY3QqIGRldGFpbFBhcmVudCA9IFtzZWxmIGRl
dGFpbFBhcmVudEZvclN1bW1hcnlPYmplY3Q6c2VsZi5heEJhY2tpbmdPYmplY3RdKQogICAgICAg
ICByZXR1cm4gZGV0YWlsUGFyZW50LT5pc0V4cGFuZGVkKCk7CiAgICAgCi0gICAgaWYgKEFYQ29y
ZU9iamVjdCogdHJlZUl0ZW1QYXJlbnQgPSBbc2VsZiB0cmVlSXRlbVBhcmVudEZvck9iamVjdDpt
X29iamVjdF0pCisgICAgaWYgKEFYQ29yZU9iamVjdCogdHJlZUl0ZW1QYXJlbnQgPSBbc2VsZiB0
cmVlSXRlbVBhcmVudEZvck9iamVjdDpzZWxmLmF4QmFja2luZ09iamVjdF0pCiAgICAgICAgIHJl
dHVybiB0cmVlSXRlbVBhcmVudC0+aXNFeHBhbmRlZCgpOwogICAgIAotICAgIHJldHVybiBtX29i
amVjdC0+aXNFeHBhbmRlZCgpOworICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+aXNF
eHBhbmRlZCgpOwogfQogCiAtIChCT09MKWFjY2Vzc2liaWxpdHlJc1Nob3dpbmdWYWxpZGF0aW9u
TWVzc2FnZQpAQCAtMjk3MSw3ICsyOTcxLDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3Ry
aW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAg
IGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBO
TzsKICAgICAKLSAgICByZXR1cm4gbV9vYmplY3QtPmlzU2hvd2luZ1ZhbGlkYXRpb25NZXNzYWdl
KCk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1Nob3dpbmdWYWxpZGF0aW9u
TWVzc2FnZSgpOwogfQogCiAtIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlJbnZhbGlkU3RhdHVz
CkBAIC0yOTc5LDcgKzI5NzksNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBl
bmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAgaWYgKCFb
c2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAg
ICAKLSAgICByZXR1cm4gbV9vYmplY3QtPmludmFsaWRTdGF0dXMoKTsKKyAgICByZXR1cm4gc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmludmFsaWRTdGF0dXMoKTsKIH0KIAogLSAoTlNTdHJpbmcgKilh
Y2Nlc3NpYmlsaXR5QVJJQUN1cnJlbnRTdGF0dXMKQEAgLTI5ODcsNyArMjk4Nyw3IEBAIHN0YXRp
YyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0
cmluZyogYXR0clN0cmluZywKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNh
bGxdKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIAotICAgIHN3aXRjaCAobV9vYmplY3QtPmN1
cnJlbnRTdGF0ZSgpKSB7CisgICAgc3dpdGNoIChzZWxmLmF4QmFja2luZ09iamVjdC0+Y3VycmVu
dFN0YXRlKCkpIHsKICAgICBjYXNlIEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGU6OkZhbHNlOgog
ICAgICAgICByZXR1cm4gQCJmYWxzZSI7CiAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Q3VycmVudFN0
YXRlOjpQYWdlOgpAQCAtMzAxMCw3ICszMDEwLDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVk
U3RyaW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAog
ICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVy
biBuaWw7CiAgICAgCi0gICAgc3dpdGNoIChtX29iamVjdC0+c29ydERpcmVjdGlvbigpKSB7Cisg
ICAgc3dpdGNoIChzZWxmLmF4QmFja2luZ09iamVjdC0+c29ydERpcmVjdGlvbigpKSB7CiAgICAg
Y2FzZSBBY2Nlc3NpYmlsaXR5U29ydERpcmVjdGlvbjo6QXNjZW5kaW5nOgogICAgICAgICByZXR1
cm4gQCJhc2NlbmRpbmciOwogICAgIGNhc2UgQWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb246OkRl
c2NlbmRpbmc6CkBAIC0zMDI4LDcgKzMwMjgsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRT
dHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAg
ICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJu
IG5pbDsKIAotICAgIHJldHVybiBtX29iamVjdC0+bWF0aFJvb3RJbmRleE9iamVjdCgpID8gbV9v
YmplY3QtPm1hdGhSb290SW5kZXhPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKKyAgICByZXR1cm4g
c2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhSb290SW5kZXhPYmplY3QoKSA/IHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5tYXRoUm9vdEluZGV4T2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CiB9CiAKIC0g
KFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyICopYWNjZXNzaWJpbGl0eU1hdGhSYWRpY2Fu
ZE9iamVjdApAQCAtMzAzNiw3ICszMDM2LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3Ry
aW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAg
IGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBu
aWw7CiAKLSAgICByZXR1cm4gbV9vYmplY3QtPm1hdGhSYWRpY2FuZE9iamVjdCgpID8gbV9vYmpl
Y3QtPm1hdGhSYWRpY2FuZE9iamVjdCgpLT53cmFwcGVyKCkgOiAwOworICAgIHJldHVybiBzZWxm
LmF4QmFja2luZ09iamVjdC0+bWF0aFJhZGljYW5kT2JqZWN0KCkgPyBzZWxmLmF4QmFja2luZ09i
amVjdC0+bWF0aFJhZGljYW5kT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CiB9CiAKIC0gKFdlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyICopYWNjZXNzaWJpbGl0eU1hdGhOdW1lcmF0b3JPYmpl
Y3QKQEAgLTMwNDQsNyArMzA0NCw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0Fw
cGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICBpZiAo
IVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gbmlsOwog
Ci0gICAgcmV0dXJuIG1fb2JqZWN0LT5tYXRoTnVtZXJhdG9yT2JqZWN0KCkgPyBtX29iamVjdC0+
bWF0aE51bWVyYXRvck9iamVjdCgpLT53cmFwcGVyKCkgOiAwOworICAgIHJldHVybiBzZWxmLmF4
QmFja2luZ09iamVjdC0+bWF0aE51bWVyYXRvck9iamVjdCgpID8gc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPm1hdGhOdW1lcmF0b3JPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKIH0KIAogLSAoV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgKilhY2Nlc3NpYmlsaXR5TWF0aERlbm9taW5hdG9yT2Jq
ZWN0CkBAIC0zMDUyLDcgKzMwNTIsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdB
cHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAgaWYg
KCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIG5pbDsK
IAotICAgIHJldHVybiBtX29iamVjdC0+bWF0aERlbm9taW5hdG9yT2JqZWN0KCkgPyBtX29iamVj
dC0+bWF0aERlbm9taW5hdG9yT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CisgICAgcmV0dXJuIHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoRGVub21pbmF0b3JPYmplY3QoKSA/IHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5tYXRoRGVub21pbmF0b3JPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKIH0KIAog
LSAoV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgKilhY2Nlc3NpYmlsaXR5TWF0aEJhc2VP
YmplY3QKQEAgLTMwNjAsNyArMzA2MCw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmlu
Z0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICBp
ZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gbmls
OwogCi0gICAgcmV0dXJuIG1fb2JqZWN0LT5tYXRoQmFzZU9iamVjdCgpID8gbV9vYmplY3QtPm1h
dGhCYXNlT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5tYXRoQmFzZU9iamVjdCgpID8gc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhCYXNl
T2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CiB9CiAKIC0gKFdlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyICopYWNjZXNzaWJpbGl0eU1hdGhTdWJzY3JpcHRPYmplY3QKQEAgLTMwNjgsNyArMzA2
OCw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxl
QXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNj
ZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgcmV0dXJuIG1fb2Jq
ZWN0LT5tYXRoU3Vic2NyaXB0T2JqZWN0KCkgPyBtX29iamVjdC0+bWF0aFN1YnNjcmlwdE9iamVj
dCgpLT53cmFwcGVyKCkgOiAwOworICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+bWF0
aFN1YnNjcmlwdE9iamVjdCgpID8gc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhTdWJzY3JpcHRP
YmplY3QoKS0+d3JhcHBlcigpIDogMDsKIH0KIAogLSAoV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgKilhY2Nlc3NpYmlsaXR5TWF0aFN1cGVyc2NyaXB0T2JqZWN0CkBAIC0zMDc2LDcgKzMw
NzYsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJs
ZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFj
Y2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIHJldHVybiBtX29i
amVjdC0+bWF0aFN1cGVyc2NyaXB0T2JqZWN0KCkgPyBtX29iamVjdC0+bWF0aFN1cGVyc2NyaXB0
T2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5tYXRoU3VwZXJzY3JpcHRPYmplY3QoKSA/IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoU3Vw
ZXJzY3JpcHRPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKIH0KIAogLSAoV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIgKilhY2Nlc3NpYmlsaXR5TWF0aFVuZGVyT2JqZWN0CkBAIC0zMDg0LDcg
KzMwODQsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0
YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFy
ZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIHJldHVybiBt
X29iamVjdC0+bWF0aFVuZGVyT2JqZWN0KCkgPyBtX29iamVjdC0+bWF0aFVuZGVyT2JqZWN0KCkt
PndyYXBwZXIoKSA6IDA7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoVW5k
ZXJPYmplY3QoKSA/IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoVW5kZXJPYmplY3QoKS0+d3Jh
cHBlcigpIDogMDsKIH0KIAogLSAoV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgKilhY2Nl
c3NpYmlsaXR5TWF0aE92ZXJPYmplY3QKQEAgLTMwOTIsNyArMzA5Miw3IEBAIHN0YXRpYyB2b2lk
IEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyog
YXR0clN0cmluZywKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQog
ICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgcmV0dXJuIG1fb2JqZWN0LT5tYXRoT3Zlck9iamVj
dCgpID8gbV9vYmplY3QtPm1hdGhPdmVyT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CisgICAgcmV0
dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoT3Zlck9iamVjdCgpID8gc2VsZi5heEJhY2tp
bmdPYmplY3QtPm1hdGhPdmVyT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CiB9CiAKIC0gKE5TU3Ry
aW5nICopYWNjZXNzaWJpbGl0eVBsYXRmb3JtTWF0aFN1YnNjcmlwdEtleQpAQCAtMzEyNiw3ICsz
MTI2LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFi
bGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAgIGlmICghW3NlbGYgX3ByZXBhcmVB
Y2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICByZXR1cm4gbV9v
YmplY3QtPm1hdGhGZW5jZWRPcGVuU3RyaW5nKCk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5tYXRoRmVuY2VkT3BlblN0cmluZygpOwogfQogCiAtIChOU1N0cmluZyAqKWFjY2Vz
c2liaWxpdHlNYXRoRmVuY2VkQ2xvc2VTdHJpbmcKQEAgLTMxMzQsNyArMzEzNCw3IEBAIHN0YXRp
YyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0
cmluZyogYXR0clN0cmluZywKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNh
bGxdKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgcmV0dXJuIG1fb2JqZWN0LT5tYXRoRmVu
Y2VkQ2xvc2VTdHJpbmcoKTsKKyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhG
ZW5jZWRDbG9zZVN0cmluZygpOwogfQogCiAtIChCT09MKWFjY2Vzc2liaWxpdHlJc01hdGhUb3BP
YmplY3QKQEAgLTMxNDIsNyArMzE0Miw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmlu
Z0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICBp
ZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gTk87
CiAKLSAgICByZXR1cm4gbV9vYmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xl
OjpEb2N1bWVudE1hdGg7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5yb2xlVmFs
dWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6RG9jdW1lbnRNYXRoOwogfQogCiAtIChOU0ludGVn
ZXIpYWNjZXNzaWJpbGl0eU1hdGhMaW5lVGhpY2tuZXNzCkBAIC0zMTUwLDcgKzMxNTAsNyBAQCBz
dGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0
ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxp
dHlDYWxsXSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gbV9vYmplY3QtPm1hdGhM
aW5lVGhpY2tuZXNzKCk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoTGlu
ZVRoaWNrbmVzcygpOwogfQogCiAtIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlNYXRoVHlwZQpA
QCAtMzE1OCw0MCArMzE1OCw0MCBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBl
bmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAgaWYgKCFb
c2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAot
ICAgIGlmIChtX29iamVjdC0+cm9sZVZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6Ok1hdGhF
bGVtZW50KSB7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoRnJhY3Rpb24oKSkKKyAgICBp
ZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xl
OjpNYXRoRWxlbWVudCkgeworICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWF0
aEZyYWN0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhGcmFjdGlvbiI7Ci0gICAg
ICAgIGlmIChtX29iamVjdC0+aXNNYXRoRmVuY2VkKCkpCisgICAgICAgIGlmIChzZWxmLmF4QmFj
a2luZ09iamVjdC0+aXNNYXRoRmVuY2VkKCkpCiAgICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhG
ZW5jZWQiOwotICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0
KCkpCisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRoU3Vic2NyaXB0U3Vw
ZXJzY3JpcHQoKSkKICAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aFN1YnNjcmlwdFN1cGVyc2Ny
aXB0IjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhSb3coKSkKKyAgICAgICAgaWYgKHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5pc01hdGhSb3coKSkKICAgICAgICAgICAgIHJldHVybiBAIkFY
TWF0aFJvdyI7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoVW5kZXJPdmVyKCkpCisgICAg
ICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRoVW5kZXJPdmVyKCkpCiAgICAgICAg
ICAgICByZXR1cm4gQCJBWE1hdGhVbmRlck92ZXIiOwotICAgICAgICBpZiAobV9vYmplY3QtPmlz
TWF0aFNxdWFyZVJvb3QoKSkKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01h
dGhTcXVhcmVSb290KCkpCiAgICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhTcXVhcmVSb290IjsK
LSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhSb290KCkpCisgICAgICAgIGlmIChzZWxmLmF4
QmFja2luZ09iamVjdC0+aXNNYXRoUm9vdCgpKQogICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRo
Um9vdCI7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoVGV4dCgpKQorICAgICAgICBpZiAo
c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWF0aFRleHQoKSkKICAgICAgICAgICAgIHJldHVybiBA
IkFYTWF0aFRleHQiOwotICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aE51bWJlcigpKQorICAg
ICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWF0aE51bWJlcigpKQogICAgICAgICAg
ICAgcmV0dXJuIEAiQVhNYXRoTnVtYmVyIjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhJ
ZGVudGlmaWVyKCkpCisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRoSWRl
bnRpZmllcigpKQogICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoSWRlbnRpZmllciI7Ci0gICAg
ICAgIGlmIChtX29iamVjdC0+aXNNYXRoVGFibGUoKSkKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5pc01hdGhUYWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoVGFi
bGUiOwotICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFRhYmxlUm93KCkpCisgICAgICAgIGlm
IChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRoVGFibGVSb3coKSkKICAgICAgICAgICAgIHJl
dHVybiBAIkFYTWF0aFRhYmxlUm93IjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhUYWJs
ZUNlbGwoKSkKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01hdGhUYWJsZUNl
bGwoKSkKICAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aFRhYmxlQ2VsbCI7Ci0gICAgICAgIGlm
IChtX29iamVjdC0+aXNNYXRoRmVuY2VPcGVyYXRvcigpKQorICAgICAgICBpZiAoc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmlzTWF0aEZlbmNlT3BlcmF0b3IoKSkKICAgICAgICAgICAgIHJldHVybiBA
IkFYTWF0aEZlbmNlT3BlcmF0b3IiOwotICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFNlcGFy
YXRvck9wZXJhdG9yKCkpCisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRo
U2VwYXJhdG9yT3BlcmF0b3IoKSkKICAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aFNlcGFyYXRv
ck9wZXJhdG9yIjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhPcGVyYXRvcigpKQorICAg
ICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWF0aE9wZXJhdG9yKCkpCiAgICAgICAg
ICAgICByZXR1cm4gQCJBWE1hdGhPcGVyYXRvciI7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNN
YXRoTXVsdGlzY3JpcHQoKSkKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01h
dGhNdWx0aXNjcmlwdCgpKQogICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoTXVsdGlzY3JpcHQi
OwogICAgIH0KICAgICAKQEAgLTMyMDAsNyArMzIwMCw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmli
dXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmlu
ZywKIAogLSAoQ0dQb2ludClhY2Nlc3NpYmlsaXR5Q2xpY2tQb2ludAogewotICAgIHJldHVybiBt
X29iamVjdC0+Y2xpY2tQb2ludCgpOworICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+
Y2xpY2tQb2ludCgpOwogfQogCiAtIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbQppbmRl
eCBmNWRhMTZhMGQ2ZDZmMzg2ZjE1ODNjOGQ5Mzk1MmNiZjA3MThlNjY1Li40MmM2NDc5Y2Q2Mjk1
Y2Q5OWNiMWYxZTQ2MTgzMjNiNGMwNjRhNzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW0KQEAgLTI0NCw2ICsyNDQsMTQg
QEAgdm9pZCBBWE9iamVjdENhY2hlOjphdHRhY2hXcmFwcGVyKEFYQ29yZU9iamVjdCogb2JqKQog
ICAgIG9iai0+c2V0V3JhcHBlcih3cmFwcGVyLmdldCgpKTsKIH0KIAorI2lmIEVOQUJMRShBQ0NF
U1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCit2b2lkIEFYT2JqZWN0Q2FjaGU6OmF0dGFjaFdyYXBw
ZXIoQVhJc29sYXRlZE9iamVjdCogaXNvbGF0ZWRPYmplY3QsIFdlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyKiB3cmFwcGVyKQoreworICAgIFt3cmFwcGVyIGF0dGFjaElzb2xhdGVkT2JqZWN0
OihBWENvcmVPYmplY3QqKWlzb2xhdGVkT2JqZWN0XTsKKyAgICBpc29sYXRlZE9iamVjdC0+c2V0
V3JhcHBlcih3cmFwcGVyKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgQk9PTCBheFNob3VsZFJlcG9z
dE5vdGlmaWNhdGlvbnNGb3JUZXN0cyA9IGZhbHNlOwogCiB2b2lkIEFYT2JqZWN0Q2FjaGU6OnNl
dFNob3VsZFJlcG9zdE5vdGlmaWNhdGlvbnNGb3JUZXN0cyhib29sIHZhbHVlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaAppbmRleCBiNjRkMGU3NmM0ZDM5NmRlYzE4ZmI2
OGY2MGM5NTgxMTA4NWJmZjVkLi40YTRlM2RiMGQzZWM3NGNlZjdmZDgyNzBjYzUxYjJhZmE0ZThj
MDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaApAQCAtNDUsMTcg
KzQ1LDIyIEBAIGNsYXNzIFZpc2libGVQb3NpdGlvbjsKIH0KIAogQGludGVyZmFjZSBXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UgOiBOU09iamVjdCB7Ci0gICAgV2ViQ29yZTo6QVhD
b3JlT2JqZWN0KiBtX29iamVjdDsKKyAgICBXZWJDb3JlOjpBWENvcmVPYmplY3QqIG1fYXhPYmpl
Y3Q7CisjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKKyAgICBXZWJDb3Jl
OjpBWENvcmVPYmplY3QqIG1faXNvbGF0ZWRPYmplY3Q7CisjZW5kaWYKICAgICBXZWJDb3JlOjpB
WElEIF9pZGVudGlmaWVyOwogfQogCiAtIChpZClpbml0V2l0aEFjY2Vzc2liaWxpdHlPYmplY3Q6
KFdlYkNvcmU6OkFYQ29yZU9iamVjdCopYXhPYmplY3Q7CisjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJ
VFlfSVNPTEFURURfVFJFRSkKKy0gKHZvaWQpYXR0YWNoSXNvbGF0ZWRPYmplY3Q6KFdlYkNvcmU6
OkFYQ29yZU9iamVjdCopaXNvbGF0ZWRPYmplY3Q7CisjZW5kaWYKIAogLSAodm9pZClkZXRhY2g7
CiAKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIFdlYkNvcmU6OkFYSUQgaWRlbnRpZmll
cjsKIAotLSAoV2ViQ29yZTo6QVhDb3JlT2JqZWN0KilhY2Nlc3NpYmlsaXR5T2JqZWN0OwogLSAo
Qk9PTCl1cGRhdGVPYmplY3RCYWNraW5nU3RvcmU7CiAKIC8vIFRoaXMgY2FuIGJlIGVpdGhlciBh
biBBY2Nlc3NpYmlsaXR5T2JqZWN0IG9yIGFuIEFYSXNvbGF0ZWRPYmplY3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyQmFzZS5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbQppbmRleCA3MjQ2OTA2YTg3YjA4MjA5NjgzYTE1
NzNmN2JiYzAzMGZlODllZTA4Li41NTY2YWRmZTEzOTMyMDQ0NjJjYzlmNTk5MjhhYTA3YWFiMGM5
MDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCkBAIC0yNDYs
OCArMjQ2LDYgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKICNkZWZpbmUgTlNBY2Nlc3Np
YmlsaXR5SW1tZWRpYXRlRGVzY2VuZGFudHNPbmx5IEAiQVhJbW1lZGlhdGVEZXNjZW5kYW50c09u
bHkiCiAjZW5kaWYKIAotI2RlZmluZSBfYXhCYWNraW5nT2JqZWN0IHNlbGYuYXhCYWNraW5nT2Jq
ZWN0Ci0KIHN0YXRpYyBOU0FycmF5ICpjb252ZXJ0TWF0aFBhaXJzVG9OU0FycmF5KGNvbnN0IEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlNYXRoTXVsdGlzY3JpcHRQYWlycyYgcGFp
cnMsIE5TU3RyaW5nICpzdWJzY3JpcHRLZXksIE5TU3RyaW5nICpzdXBlcnNjcmlwdEtleSkKIHsK
ICAgICBOU011dGFibGVBcnJheSAqYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2Fw
YWNpdHk6cGFpcnMuc2l6ZSgpXTsKQEAgLTI5MCwzMCArMjg4LDQ5IEBAIE5TQXJyYXkgKmNvbnZl
cnRUb05TQXJyYXkoY29uc3QgV2ViQ29yZTo6QVhDb3JlT2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0CiAgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCiAgICAgICAgIHJldHVy
biBuaWw7CiAKLSAgICBtX29iamVjdCA9IGF4T2JqZWN0OwotICAgIF9pZGVudGlmaWVyID0gbV9v
YmplY3QtPm9iamVjdElEKCk7Ci0KKyAgICBbc2VsZiBhdHRhY2hBWE9iamVjdDpheE9iamVjdF07
CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKKy0gKHZvaWQpYXR0YWNoQVhPYmplY3Q6KEFYQ29yZU9i
amVjdCopYXhPYmplY3QKK3sKKyAgICBBU1NFUlQoYXhPYmplY3QgJiYgKF9pZGVudGlmaWVyID09
IEludmFsaWRBWElEIHx8IF9pZGVudGlmaWVyID09IGF4T2JqZWN0LT5vYmplY3RJRCgpKSk7Cisg
ICAgbV9heE9iamVjdCA9IGF4T2JqZWN0OworICAgIGlmIChfaWRlbnRpZmllciA9PSBJbnZhbGlk
QVhJRCkKKyAgICAgICAgX2lkZW50aWZpZXIgPSBtX2F4T2JqZWN0LT5vYmplY3RJRCgpOworfQor
CisjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKKy0gKHZvaWQpYXR0YWNo
SXNvbGF0ZWRPYmplY3Q6KEFYQ29yZU9iamVjdCopaXNvbGF0ZWRPYmplY3QKK3sKKyAgICBBU1NF
UlQoaXNvbGF0ZWRPYmplY3QgJiYgKF9pZGVudGlmaWVyID09IEludmFsaWRBWElEIHx8IF9pZGVu
dGlmaWVyID09IGlzb2xhdGVkT2JqZWN0LT5vYmplY3RJRCgpKSk7CisgICAgbV9pc29sYXRlZE9i
amVjdCA9IGlzb2xhdGVkT2JqZWN0OworICAgIGlmIChfaWRlbnRpZmllciA9PSBJbnZhbGlkQVhJ
RCkKKyAgICAgICAgX2lkZW50aWZpZXIgPSBtX2lzb2xhdGVkT2JqZWN0LT5vYmplY3RJRCgpOwor
fQorI2VuZGlmCisKIC0gKHZvaWQpZGV0YWNoCiB7Ci0gICAgbV9vYmplY3QgPSBudWxscHRyOwot
ICAgIF9pZGVudGlmaWVyID0gMDsKKyAgICBtX2F4T2JqZWN0ID0gbnVsbHB0cjsKKyNpZiBFTkFC
TEUoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQorICAgIG1faXNvbGF0ZWRPYmplY3QgPSBu
dWxscHRyOworI2VuZGlmCisgICAgX2lkZW50aWZpZXIgPSBJbnZhbGlkQVhJRDsKIH0KIAogLSAo
Qk9PTCl1cGRhdGVPYmplY3RCYWNraW5nU3RvcmUKIHsKICAgICAvLyBDYWxsaW5nIHVwZGF0ZUJh
Y2tpbmdTdG9yZSgpIGNhbiBpbnZhbGlkYXRlIHRoaXMgZWxlbWVudCBzbyBzZWxmIG11c3QgYmUg
cmV0YWluZWQuCi0gICAgLy8gSWYgaXQgZG9lcyBiZWNvbWUgaW52YWxpZGF0ZWQsIG1fb2JqZWN0
IHdpbGwgYmUgbmlsLgorICAgIC8vIElmIGl0IGRvZXMgYmVjb21lIGludmFsaWRhdGVkLCBzZWxm
LmF4QmFja2luZ09iamVjdCB3aWxsIGJlIG5pbC4KICAgICBDRlJldGFpbigoX19icmlkZ2UgQ0ZU
eXBlUmVmKXNlbGYpOwogICAgIENGQXV0b3JlbGVhc2UoKF9fYnJpZGdlIENGVHlwZVJlZilzZWxm
KTsKIAotICAgIGlmICghbV9vYmplY3QpCisgICAgaWYgKCFzZWxmLmF4QmFja2luZ09iamVjdCkK
ICAgICAgICAgcmV0dXJuIE5POwogICAgIAotICAgIG1fb2JqZWN0LT51cGRhdGVCYWNraW5nU3Rv
cmUoKTsKLSAgICBpZiAoIW1fb2JqZWN0KQorICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT51cGRh
dGVCYWNraW5nU3RvcmUoKTsKKyAgICBpZiAoIXNlbGYuYXhCYWNraW5nT2JqZWN0KQogICAgICAg
ICByZXR1cm4gTk87CiAgICAgCiAgICAgcmV0dXJuIFlFUzsKQEAgLTMyNCwzNiArMzQxLDM1IEBA
IE5TQXJyYXkgKmNvbnZlcnRUb05TQXJyYXkoY29uc3QgV2ViQ29yZTo6QVhDb3JlT2JqZWN0OjpB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0CiAgICAgcmV0dXJuIG5pbDsKIH0KIAotLSAoQVhDb3Jl
T2JqZWN0KilhY2Nlc3NpYmlsaXR5T2JqZWN0Ci17Ci0gICAgcmV0dXJuIG1fb2JqZWN0OwotfQot
CiAvLyBUaGlzIHNob3VsZCBiZSB0aGUgInZpc2libGUiIHRleHQgdGhhdCdzIGFjdHVhbGx5IG9u
IHRoZSBzY3JlZW4gaWYgcG9zc2libGUuCiAvLyBJZiB0aGVyZSdzIGFsdGVybmF0aXZlIHRleHQs
IHRoYXQgY2FuIG92ZXJyaWRlIHRoZSB0aXRsZS4KIC0gKE5TU3RyaW5nICopYmFzZUFjY2Vzc2li
aWxpdHlUaXRsZQogewotICAgIHJldHVybiBfYXhCYWNraW5nT2JqZWN0LT50aXRsZUF0dHJpYnV0
ZVZhbHVlKCk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT50aXRsZUF0dHJpYnV0
ZVZhbHVlKCk7CiB9CiAKIC0gKFdlYkNvcmU6OkFYQ29yZU9iamVjdCopYXhCYWNraW5nT2JqZWN0
CiB7Ci0gICAgcmV0dXJuIG1fb2JqZWN0OworI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xB
VEVEX1RSRUUpCisgICAgaWYgKCFpc01haW5UaHJlYWQoKSkKKyAgICAgICAgcmV0dXJuIG1faXNv
bGF0ZWRPYmplY3Q7CisjZW5kaWYKKyAgICByZXR1cm4gbV9heE9iamVjdDsKIH0KIAogLSAoTlNT
dHJpbmcgKiliYXNlQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uCiB7Ci0gICAgcmV0dXJuIF9heEJh
Y2tpbmdPYmplY3QtPmRlc2NyaXB0aW9uQXR0cmlidXRlVmFsdWUoKTsKKyAgICByZXR1cm4gc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmRlc2NyaXB0aW9uQXR0cmlidXRlVmFsdWUoKTsKIH0KIAogLSAo
TlNBcnJheTxOU1N0cmluZyAqPiAqKWJhc2VBY2Nlc3NpYmlsaXR5U3BlZWNoSGludAogewotICAg
IHJldHVybiBbKE5TU3RyaW5nICopX2F4QmFja2luZ09iamVjdC0+c3BlZWNoSGludEF0dHJpYnV0
ZVZhbHVlKCkgY29tcG9uZW50c1NlcGFyYXRlZEJ5U3RyaW5nOkAiICJdOworICAgIHJldHVybiBb
KE5TU3RyaW5nICopc2VsZi5heEJhY2tpbmdPYmplY3QtPnNwZWVjaEhpbnRBdHRyaWJ1dGVWYWx1
ZSgpIGNvbXBvbmVudHNTZXBhcmF0ZWRCeVN0cmluZzpAIiAiXTsKIH0KIAogLSAoTlNTdHJpbmcg
KiliYXNlQWNjZXNzaWJpbGl0eUhlbHBUZXh0CiB7Ci0gICAgcmV0dXJuIF9heEJhY2tpbmdPYmpl
Y3QtPmhlbHBUZXh0QXR0cmlidXRlVmFsdWUoKTsKKyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdP
YmplY3QtPmhlbHBUZXh0QXR0cmlidXRlVmFsdWUoKTsKIH0KIAogc3RydWN0IFBhdGhDb252ZXJz
aW9uSW5mbyB7CkBAIC00MzEsNyArNDQ3LDcgQEAgc3RhdGljIHZvaWQgY29udmVydFBhdGhUb1Nj
cmVlblNwYWNlRnVuY3Rpb24oUGF0aENvbnZlcnNpb25JbmZvJiBjb252ZXJzaW9uLCBjb24KIAog
LSAoQ0dSZWN0KWNvbnZlcnRSZWN0VG9TcGFjZTooV2ViQ29yZTo6RmxvYXRSZWN0ICYpcmVjdCBz
cGFjZTooQWNjZXNzaWJpbGl0eUNvbnZlcnNpb25TcGFjZSlzcGFjZQogewotICAgIGlmICghbV9v
YmplY3QpCisgICAgaWYgKCFzZWxmLmF4QmFja2luZ09iamVjdCkKICAgICAgICAgcmV0dXJuIENH
UmVjdFplcm87CiAgICAgCiAgICAgQ0dTaXplIHNpemUgPSBDR1NpemVNYWtlKHJlY3Quc2l6ZSgp
LndpZHRoKCksIHJlY3Quc2l6ZSgpLmhlaWdodCgpKTsKQEAgLTQ0MCw3ICs0NTYsNyBAQCBzdGF0
aWMgdm9pZCBjb252ZXJ0UGF0aFRvU2NyZWVuU3BhY2VGdW5jdGlvbihQYXRoQ29udmVyc2lvbklu
Zm8mIGNvbnZlcnNpb24sIGNvbgogICAgIENHUmVjdCBjZ1JlY3QgPSBDR1JlY3RNYWtlKHBvaW50
LngsIHBvaW50LnksIHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KTsKIAogICAgIC8vIFdlYktpdDEg
Y29kZSBwYXRoLi4uIHBsYXRmb3JtV2lkZ2V0KCkgZXhpc3RzLgotICAgIEZyYW1lVmlldyogZnJh
bWVWaWV3ID0gbV9vYmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCk7CisgICAgRnJhbWVWaWV3KiBm
cmFtZVZpZXcgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnRGcmFtZVZpZXcoKTsKICNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIFdBS1ZpZXcqIGRvY3VtZW50VmlldyA9IGZyYW1l
VmlldyA/IGZyYW1lVmlldy0+ZG9jdW1lbnRWaWV3KCkgOiBudWxscHRyOwogICAgIGlmIChkb2N1
bWVudFZpZXcpIHsKQEAgLTQ2NCwyMCArNDgwLDIwIEBAIHN0YXRpYyB2b2lkIGNvbnZlcnRQYXRo
VG9TY3JlZW5TcGFjZUZ1bmN0aW9uKFBhdGhDb252ZXJzaW9uSW5mbyYgY29udmVyc2lvbiwgY29u
CiAgICAgfQogI2VuZGlmCiAgICAgZWxzZQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0dS
ZWN0PihtX29iamVjdC0+Y29udmVydEZyYW1lVG9TcGFjZShyZWN0LCBzcGFjZSkpOworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0dSZWN0PihzZWxmLmF4QmFja2luZ09iamVjdC0+Y29udmVy
dEZyYW1lVG9TcGFjZShyZWN0LCBzcGFjZSkpOwogfQogCiAtIChOU1N0cmluZyAqKWFyaWFMYW5k
bWFya1JvbGVEZXNjcmlwdGlvbgogewotICAgIHJldHVybiBtX29iamVjdC0+YXJpYUxhbmRtYXJr
Um9sZURlc2NyaXB0aW9uKCk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5hcmlh
TGFuZG1hcmtSb2xlRGVzY3JpcHRpb24oKTsKIH0KIAogLSAodm9pZCliYXNlQWNjZXNzaWJpbGl0
eVNldEZvY3VzOihCT09MKWZvY3VzCiB7CiAgICAgLy8gSWYgZm9jdXMgaXMganVzdCBzZXQgd2l0
aG91dCBtYWtpbmcgdGhlIHZpZXcgdGhlIGZpcnN0IHJlc3BvbmRlciwgdGhlbiBrZXlib2FyZCBm
b2N1cyB3b24ndCBtb3ZlIHRvIHRoZSByaWdodCBwbGFjZS4KLSAgICBpZiAoZm9jdXMgJiYgIW1f
b2JqZWN0LT5kb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3Rp
dmUoKSkgewotICAgICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fb2JqZWN0LT5kb2N1bWVu
dEZyYW1lVmlldygpOwotICAgICAgICBQYWdlKiBwYWdlID0gbV9vYmplY3QtPnBhZ2UoKTsKKyAg
ICBpZiAoZm9jdXMgJiYgIXNlbGYuYXhCYWNraW5nT2JqZWN0LT5kb2N1bWVudCgpLT5mcmFtZSgp
LT5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSkgeworICAgICAgICBGcmFtZVZpZXcq
IGZyYW1lVmlldyA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5kb2N1bWVudEZyYW1lVmlldygpOwor
ICAgICAgICBQYWdlKiBwYWdlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnBhZ2UoKTsKICAgICAg
ICAgaWYgKHBhZ2UgJiYgZnJhbWVWaWV3KSB7CiAgICAgICAgICAgICBDaHJvbWVDbGllbnQmIGNo
cm9tZUNsaWVudCA9IHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpOwogICAgICAgICAgICAgY2hyb21l
Q2xpZW50LmZvY3VzKCk7CkBAIC00OTAsNyArNTA2LDcgQEAgc3RhdGljIHZvaWQgY29udmVydFBh
dGhUb1NjcmVlblNwYWNlRnVuY3Rpb24oUGF0aENvbnZlcnNpb25JbmZvJiBjb252ZXJzaW9uLCBj
b24KICAgICAgICAgfQogICAgIH0KIAotICAgIG1fb2JqZWN0LT5zZXRGb2N1c2VkKGZvY3VzKTsK
KyAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+c2V0Rm9jdXNlZChmb2N1cyk7CiB9CiAKIC0gKE5T
U3RyaW5nICopYWNjZXNzaWJpbGl0eVBsYXRmb3JtTWF0aFN1YnNjcmlwdEtleQpAQCAtNTA4LDE0
ICs1MjQsMTQgQEAgc3RhdGljIHZvaWQgY29udmVydFBhdGhUb1NjcmVlblNwYWNlRnVuY3Rpb24o
UGF0aENvbnZlcnNpb25JbmZvJiBjb252ZXJzaW9uLCBjb24KIC0gKE5TQXJyYXkgKilhY2Nlc3Np
YmlsaXR5TWF0aFBvc3RzY3JpcHRQYWlycwogewogICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFj
Y2Vzc2liaWxpdHlNYXRoTXVsdGlzY3JpcHRQYWlycyBwYWlyczsKLSAgICBtX29iamVjdC0+bWF0
aFBvc3RzY3JpcHRzKHBhaXJzKTsKKyAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+bWF0aFBvc3Rz
Y3JpcHRzKHBhaXJzKTsKICAgICByZXR1cm4gY29udmVydE1hdGhQYWlyc1RvTlNBcnJheShwYWly
cywgW3NlbGYgYWNjZXNzaWJpbGl0eVBsYXRmb3JtTWF0aFN1YnNjcmlwdEtleV0sIFtzZWxmIGFj
Y2Vzc2liaWxpdHlQbGF0Zm9ybU1hdGhTdXBlcnNjcmlwdEtleV0pOwogfQogCiAtIChOU0FycmF5
ICopYWNjZXNzaWJpbGl0eU1hdGhQcmVzY3JpcHRQYWlycwogewogICAgIEFjY2Vzc2liaWxpdHlP
YmplY3Q6OkFjY2Vzc2liaWxpdHlNYXRoTXVsdGlzY3JpcHRQYWlycyBwYWlyczsKLSAgICBtX29i
amVjdC0+bWF0aFByZXNjcmlwdHMocGFpcnMpOworICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5t
YXRoUHJlc2NyaXB0cyhwYWlycyk7CiAgICAgcmV0dXJuIGNvbnZlcnRNYXRoUGFpcnNUb05TQXJy
YXkocGFpcnMsIFtzZWxmIGFjY2Vzc2liaWxpdHlQbGF0Zm9ybU1hdGhTdWJzY3JpcHRLZXldLCBb
c2VsZiBhY2Nlc3NpYmlsaXR5UGxhdGZvcm1NYXRoU3VwZXJzY3JpcHRLZXldKTsKIH0KIApAQCAt
Njg3LDggKzcwMyw4IEBAIEFjY2Vzc2liaWxpdHlTZWFyY2hDcml0ZXJpYSBhY2Nlc3NpYmlsaXR5
U2VhcmNoQ3JpdGVyaWFGb3JTZWFyY2hQcmVkaWNhdGVQYXJhbWV0CiAgICAgCiAgICAgQVhDb3Jl
T2JqZWN0KiBzdGFydEVsZW1lbnQgPSBudWxscHRyOwogICAgIGlmIChbc3RhcnRFbGVtZW50UGFy
YW1ldGVyIGlzS2luZE9mQ2xhc3M6W1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZSBj
bGFzc11dKQotICAgICAgICBzdGFydEVsZW1lbnQgPSBbc3RhcnRFbGVtZW50UGFyYW1ldGVyIGFj
Y2Vzc2liaWxpdHlPYmplY3RdOwotICAgIAorICAgICAgICBzdGFydEVsZW1lbnQgPSBbc3RhcnRF
bGVtZW50UGFyYW1ldGVyIGF4QmFja2luZ09iamVjdF07CisKICAgICBib29sIHZpc2libGVPbmx5
ID0gZmFsc2U7CiAgICAgaWYgKFt2aXNpYmxlT25seVBhcmFtZXRlciBpc0tpbmRPZkNsYXNzOltO
U051bWJlciBjbGFzc11dKQogICAgICAgICB2aXNpYmxlT25seSA9IFt2aXNpYmxlT25seVBhcmFt
ZXRlciBib29sVmFsdWVdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQpp
bmRleCA5MjM0OTQ2YzkzOGYxMmU1MzUzMmM2NWQ0NjExYWRkNDIxNDRjMGI4Li5hZjlmZGI5MWU3
NTE5NzM2NWNiYmEyNDc5OTkwZjk3MDc4ZjYyMmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlck1hYy5tbQpAQCAtNTM0LDggKzUzNCw2IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CiAjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVJlbGF0aXZlRnJhbWVBdHRyaWJ1dGUgQCJB
WFJlbGF0aXZlRnJhbWUiCiAjZW5kaWYKIAotI2RlZmluZSBfYXhCYWNraW5nT2JqZWN0IHNlbGYu
YXhCYWNraW5nT2JqZWN0Ci0KIGV4dGVybiAiQyIgQVhVSUVsZW1lbnRSZWYgTlNBY2Nlc3NpYmls
aXR5Q3JlYXRlQVhVSUVsZW1lbnRSZWYoaWQgZWxlbWVudCk7CiAKIEBpbXBsZW1lbnRhdGlvbiBX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcgpAQCAtNTU3LDEwICs1NTUsMTAgQEAgZXh0ZXJu
ICJDIiBBWFVJRWxlbWVudFJlZiBOU0FjY2Vzc2liaWxpdHlDcmVhdGVBWFVJRWxlbWVudFJlZihp
ZCBlbGVtZW50KTsKIAogLSAoaWQpYXR0YWNobWVudFZpZXcKIHsKLSAgICBBU1NFUlQobV9vYmpl
Y3QtPmlzQXR0YWNobWVudCgpKTsKKyAgICBBU1NFUlQoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlz
QXR0YWNobWVudCgpKTsKIAogICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVl
RnJvbU1haW5UaHJlYWQ8aWQ+KFtwcm90ZWN0ZWRTZWxmID0gUmV0YWluUHRyPFdlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyPihzZWxmKV0gKCkgLT4gaWQgewotICAgICAgICBhdXRvKiB3aWRn
ZXQgPSBwcm90ZWN0ZWRTZWxmLT5tX29iamVjdC0+d2lkZ2V0Rm9yQXR0YWNobWVudFZpZXcoKTsK
KyAgICAgICAgYXV0byogd2lkZ2V0ID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmpl
Y3QtPndpZGdldEZvckF0dGFjaG1lbnRWaWV3KCk7CiAgICAgICAgIGlmICghd2lkZ2V0KQogICAg
ICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVVuaWdu
b3JlZERlc2NlbmRhbnQod2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpKTsKQEAgLTYwOCw3ICs2MDYs
NyBAQCBzdGF0aWMgaWQgQVhUZXh0TWFya2VyUmFuZ2VFbmQoaWQgcmFuZ2UpCiB7CiAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IF9heEJhY2tp
bmdPYmplY3QtPmRvY3VtZW50KCk7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0
dXJuIEludFJlY3QoKTsKICAgICAKQEAgLTc4NSw3ICs3ODMsNyBAQCBzdGF0aWMgYm9vbCBpc1Rl
eHRNYXJrZXJJZ25vcmVkKGlkIHRleHRNYXJrZXIpCiAKIC0gKEFjY2Vzc2liaWxpdHlPYmplY3Qq
KWFjY2Vzc2liaWxpdHlPYmplY3RGb3JUZXh0TWFya2VyOihpZCl0ZXh0TWFya2VyCiB7Ci0gICAg
cmV0dXJuIGFjY2Vzc2liaWxpdHlPYmplY3RGb3JUZXh0TWFya2VyKG1fb2JqZWN0LT5heE9iamVj
dENhY2hlKCksIHRleHRNYXJrZXIpOworICAgIHJldHVybiBhY2Nlc3NpYmlsaXR5T2JqZWN0Rm9y
VGV4dE1hcmtlcihzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpLCB0ZXh0TWFy
a2VyKTsKIH0KIAogc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY2Vzc2liaWxpdHlPYmpl
Y3RGb3JUZXh0TWFya2VyKEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBpZCB0ZXh0TWFya2VyKQpAQCAt
ODAxLDcgKzc5OSw3IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2Nlc3NpYmlsaXR5
T2JqZWN0Rm9yVGV4dE1hcmtlcihBWE9iamVjdENhY2hlKiBjYWNoCiAKIC0gKGlkKXRleHRNYXJr
ZXJSYW5nZUZyb21SYW5nZTooY29uc3QgUmVmUHRyPFJhbmdlPilyYW5nZQogewotICAgIHJldHVy
biB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2UobV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgcmFu
Z2UpOworICAgIHJldHVybiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2Uoc2VsZi5heEJhY2tpbmdP
YmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgcmFuZ2UpOwogfQogCiBzdGF0aWMgaWQgdGV4dE1hcmtl
clJhbmdlRnJvbVJhbmdlKEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBjb25zdCBSZWZQdHI8UmFuZ2U+
IHJhbmdlKQpAQCAtODEzLDcgKzgxMSw3IEBAIHN0YXRpYyBpZCB0ZXh0TWFya2VyUmFuZ2VGcm9t
UmFuZ2UoQVhPYmplY3RDYWNoZSogY2FjaGUsIGNvbnN0IFJlZlB0cjxSYW5nZT4gcmFuCiAKIC0g
KGlkKXN0YXJ0T3JFbmRUZXh0TWFya2VyRm9yUmFuZ2U6KGNvbnN0IFJlZlB0cjxSYW5nZT4pcmFu
Z2UgaXNTdGFydDooQk9PTClpc1N0YXJ0CiB7Ci0gICAgcmV0dXJuIHN0YXJ0T3JFbmRUZXh0bWFy
a2VyRm9yUmFuZ2UobV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgcmFuZ2UsIGlzU3RhcnQpOwor
ICAgIHJldHVybiBzdGFydE9yRW5kVGV4dG1hcmtlckZvclJhbmdlKHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5heE9iamVjdENhY2hlKCksIHJhbmdlLCBpc1N0YXJ0KTsKIH0KIAogc3RhdGljIGlkIHN0
YXJ0T3JFbmRUZXh0bWFya2VyRm9yUmFuZ2UoQVhPYmplY3RDYWNoZSogY2FjaGUsIFJlZlB0cjxS
YW5nZT4gcmFuZ2UsIGJvb2wgaXNTdGFydCkKQEAgLTg1NSwxNyArODUzLDE3IEBAIHN0YXRpYyBp
ZCBwcmV2aW91c1RleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQoQVhPYmplY3RDYWNoZSogY2Fj
aGUsIENoYXJhY3Rlck9mCiAKIC0gKGlkKW5leHRUZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0
OihDaGFyYWN0ZXJPZmZzZXQmKWNoYXJhY3Rlck9mZnNldAogewotICAgIHJldHVybiBuZXh0VGV4
dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldChtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpLCBjaGFy
YWN0ZXJPZmZzZXQpOworICAgIHJldHVybiBuZXh0VGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNl
dChzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpLCBjaGFyYWN0ZXJPZmZzZXQp
OwogfQogCiAtIChpZClwcmV2aW91c1RleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6KENoYXJh
Y3Rlck9mZnNldCYpY2hhcmFjdGVyT2Zmc2V0CiB7Ci0gICAgcmV0dXJuIHByZXZpb3VzVGV4dE1h
cmtlckZvckNoYXJhY3Rlck9mZnNldChtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpLCBjaGFyYWN0
ZXJPZmZzZXQpOworICAgIHJldHVybiBwcmV2aW91c1RleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZz
ZXQoc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgY2hhcmFjdGVyT2Zmc2V0
KTsKIH0KIAogLSAoaWQpdGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldDooQ2hhcmFjdGVyT2Zm
c2V0JiljaGFyYWN0ZXJPZmZzZXQKIHsKLSAgICByZXR1cm4gdGV4dE1hcmtlckZvckNoYXJhY3Rl
ck9mZnNldChtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpLCBjaGFyYWN0ZXJPZmZzZXQpOworICAg
IHJldHVybiB0ZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0KHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5heE9iamVjdENhY2hlKCksIGNoYXJhY3Rlck9mZnNldCk7CiB9CiAKIHN0YXRpYyBpZCB0ZXh0
TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0KEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBjb25zdCBDaGFy
YWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNldCkKQEAgLTg5Miw3ICs4OTAsNyBAQCBzdGF0aWMg
aWQgdGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldChBWE9iamVjdENhY2hlKiBjYWNoZSwgY29u
c3QgQ2hhcmFjdGVyT2ZmcwogICAgIGlmICghc3RhcnRUZXh0TWFya2VyIHx8ICFlbmRUZXh0TWFy
a2VyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICBBWE9iamVjdENhY2hlKiBj
YWNoZSA9IG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCk7CisgICAgQVhPYmplY3RDYWNoZSogY2Fj
aGUgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpOwogICAgIGlmICghY2Fj
aGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIApAQCAtOTE1LDcgKzkxMyw3IEBAIHN0
YXRpYyBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcihBWE9iamVj
dENhY2hlKiBjYWNoZSwgQ0ZUeXBlCiAKIC0gKENoYXJhY3Rlck9mZnNldCljaGFyYWN0ZXJPZmZz
ZXRGb3JUZXh0TWFya2VyOihpZCl0ZXh0TWFya2VyCiB7Ci0gICAgcmV0dXJuIGNoYXJhY3Rlck9m
ZnNldEZvclRleHRNYXJrZXIobV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgKF9fYnJpZGdlIENG
VHlwZVJlZil0ZXh0TWFya2VyKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1h
cmtlcihzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpLCAoX19icmlkZ2UgQ0ZU
eXBlUmVmKXRleHRNYXJrZXIpOwogfQogCiBzdGF0aWMgaWQgdGV4dE1hcmtlckZvclZpc2libGVQ
b3NpdGlvbihBWE9iamVjdENhY2hlKiBjYWNoZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNp
YmxlUG9zKQpAQCAtOTMzLDEyICs5MzEsMTIgQEAgc3RhdGljIGlkIHRleHRNYXJrZXJGb3JWaXNp
YmxlUG9zaXRpb24oQVhPYmplY3RDYWNoZSogY2FjaGUsIGNvbnN0IFZpc2libGVQb3NpdGkKIAog
LSAoaWQpdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjooY29uc3QgVmlzaWJsZVBvc2l0aW9u
ICYpdmlzaWJsZVBvcwogewotICAgIHJldHVybiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9u
KG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCksIHZpc2libGVQb3MpOworICAgIHJldHVybiB0ZXh0
TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENh
Y2hlKCksIHZpc2libGVQb3MpOwogfQogCiAtIChpZCl0ZXh0TWFya2VyRm9yRmlyc3RQb3NpdGlv
bkluVGV4dENvbnRyb2w6KEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50ICYpdGV4dENvbnRyb2wK
IHsKLSAgICBhdXRvICpjYWNoZSA9IG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCk7CisgICAgYXV0
byAqY2FjaGUgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpOwogICAgIGlm
ICghY2FjaGUpCiAgICAgICAgIHJldHVybiBuaWw7CiAKQEAgLTk2NCw3ICs5NjIsNyBAQCBzdGF0
aWMgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIoQVhPYmplY3RD
YWNoZSogY2FjaGUsIENGVHlwZQogCiAtIChWaXNpYmxlUG9zaXRpb24pdmlzaWJsZVBvc2l0aW9u
Rm9yVGV4dE1hcmtlcjooaWQpdGV4dE1hcmtlcgogewotICAgIHJldHVybiB2aXNpYmxlUG9zaXRp
b25Gb3JUZXh0TWFya2VyKG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCksIChfX2JyaWRnZSBDRlR5
cGVSZWYpdGV4dE1hcmtlcik7CisgICAgcmV0dXJuIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJr
ZXIoc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgKF9fYnJpZGdlIENGVHlw
ZVJlZil0ZXh0TWFya2VyKTsKIH0KIAogc3RhdGljIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9z
aXRpb25Gb3JTdGFydE9mVGV4dE1hcmtlclJhbmdlKEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBpZCB0
ZXh0TWFya2VyUmFuZ2UpCkBAIC0xMjc3LDcgKzEyNzUsNyBAQCBzdGF0aWMgTlNTdHJpbmcqIG5z
U3RyaW5nRm9yUmVwbGFjZWROb2RlKE5vZGUqIHJlcGxhY2VkTm9kZSkKIAogLSAoTlNBdHRyaWJ1
dGVkU3RyaW5nKilkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZTooaWQpdGV4
dE1hcmtlclJhbmdlIHNwZWxsQ2hlY2s6KEJPT0wpc3BlbGxDaGVjawogewotICAgIGlmICghbV9v
YmplY3QpCisgICAgaWYgKCFzZWxmLmF4QmFja2luZ09iamVjdCkKICAgICAgICAgcmV0dXJuIG5p
bDsKICAgICAKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gW3NlbGYgcmFuZ2VGb3JUZXh0TWFy
a2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKQEAgLTEzMzEsNyArMTMyOSw3IEBAIHN0YXRpYyBp
ZCB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9ucyhBWE9iamVjdENhY2hlKiBjYWNo
ZSwgY29uc3QgVmlzaWJsCiAKIC0gKGlkKXRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRp
b25zOihjb25zdCBWaXNpYmxlUG9zaXRpb24mKXN0YXJ0UG9zaXRpb24gZW5kUG9zaXRpb246KGNv
bnN0IFZpc2libGVQb3NpdGlvbiYpZW5kUG9zaXRpb24KIHsKLSAgICByZXR1cm4gdGV4dE1hcmtl
clJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnMobV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgc3Rh
cnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOworICAgIHJldHVybiB0ZXh0TWFya2VyUmFuZ2VGcm9t
VmlzaWJsZVBvc2l0aW9ucyhzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpLCBz
dGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CiB9CiAKIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVN
RU5UQVRJT05TX0JFR0lOCkBAIC0xMzU2LDEzICsxMzU0LDEzIEBAIEFMTE9XX0RFUFJFQ0FURURf
SU1QTEVNRU5UQVRJT05TX0VORAogICAgIHN0YXRpYyBOU0FycmF5ICpzbGlkZXJBY3Rpb25zID0g
W1tkZWZhdWx0RWxlbWVudEFjdGlvbnMgYXJyYXlCeUFkZGluZ09iamVjdHNGcm9tQXJyYXk6W05T
QXJyYXkgYXJyYXlXaXRoT2JqZWN0czpOU0FjY2Vzc2liaWxpdHlJbmNyZW1lbnRBY3Rpb24sIE5T
QWNjZXNzaWJpbGl0eURlY3JlbWVudEFjdGlvbiwgbmlsXV0gcmV0YWluXTsKICAgICAKICAgICBO
U0FycmF5ICphY3Rpb25zOwotICAgIGlmIChtX29iamVjdC0+c3VwcG9ydHNQcmVzc0FjdGlvbigp
KQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+c3VwcG9ydHNQcmVzc0FjdGlvbigpKQog
ICAgICAgICBhY3Rpb25zID0gYWN0aW9uRWxlbWVudEFjdGlvbnM7Ci0gICAgZWxzZSBpZiAobV9v
YmplY3QtPmlzTWVudVJlbGF0ZWQoKSkKKyAgICBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVj
dC0+aXNNZW51UmVsYXRlZCgpKQogICAgICAgICBhY3Rpb25zID0gbWVudUVsZW1lbnRBY3Rpb25z
OwotICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc1NsaWRlcigpKQorICAgIGVsc2UgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc1NsaWRlcigpKQogICAgICAgICBhY3Rpb25zID0gc2xpZGVyQWN0
aW9uczsKLSAgICBlbHNlIGlmIChtX29iamVjdC0+aXNBdHRhY2htZW50KCkpCisgICAgZWxzZSBp
ZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzQXR0YWNobWVudCgpKQogICAgICAgICBhY3Rpb25z
ID0gW1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5QWN0aW9uTmFtZXNdOwogICAg
IGVsc2UKICAgICAgICAgYWN0aW9ucyA9IGRlZmF1bHRFbGVtZW50QWN0aW9uczsKQEAgLTEzNzIs
OTkgKzEzNzAsOTkgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAKIC0g
KE5TQXJyYXkqKWFkZGl0aW9uYWxBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMKIHsKLSAgICBp
ZiAoIW1fb2JqZWN0KQorICAgIGlmICghc2VsZi5heEJhY2tpbmdPYmplY3QpCiAgICAgICAgIHJl
dHVybiBuaWw7CiAgICAgCiAgICAgTlNNdXRhYmxlQXJyYXkgKmFkZGl0aW9uYWwgPSBbTlNNdXRh
YmxlQXJyYXkgYXJyYXldOwotICAgIGlmIChtX29iamVjdC0+c3VwcG9ydHNBUklBT3ducygpKQor
ICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+c3VwcG9ydHNBUklBT3ducygpKQogICAgICAg
ICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5T3duc0F0dHJpYnV0ZV07CiAg
ICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc1RvZ2dsZUJ1dHRvbigpKQorICAgIGlmIChzZWxmLmF4
QmFja2luZ09iamVjdC0+aXNUb2dnbGVCdXR0b24oKSkKICAgICAgICAgW2FkZGl0aW9uYWwgYWRk
T2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRlXTsKICAgICAKLSAgICBpZiAobV9v
YmplY3QtPnN1cHBvcnRzRXhwYW5kZWQoKSB8fCBtX29iamVjdC0+aXNTdW1tYXJ5KCkpCisgICAg
aWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zdXBwb3J0c0V4cGFuZGVkKCkgfHwgc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmlzU3VtbWFyeSgpKQogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6
TlNBY2Nlc3NpYmlsaXR5RXhwYW5kZWRBdHRyaWJ1dGVdOwogICAgIAotICAgIGlmIChtX29iamVj
dC0+aXNTY3JvbGxiYXIoKQotICAgICAgICB8fCBtX29iamVjdC0+aXNSYWRpb0dyb3VwKCkKLSAg
ICAgICAgfHwgbV9vYmplY3QtPmlzU3BsaXR0ZXIoKQotICAgICAgICB8fCBtX29iamVjdC0+aXNU
b29sYmFyKCkpCisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1Njcm9sbGJhcigpCisg
ICAgICAgIHx8IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1JhZGlvR3JvdXAoKQorICAgICAgICB8
fCBzZWxmLmF4QmFja2luZ09iamVjdC0+aXNTcGxpdHRlcigpCisgICAgICAgIHx8IHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5pc1Rvb2xiYXIoKSkKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0
Ok5TQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uQXR0cmlidXRlXTsKICAgICAKLSAgICBpZiAobV9v
YmplY3QtPnN1cHBvcnRzQVJJQURyYWdnaW5nKCkpCisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5zdXBwb3J0c0FSSUFEcmFnZ2luZygpKQogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmpl
Y3Q6TlNBY2Nlc3NpYmlsaXR5R3JhYmJlZEF0dHJpYnV0ZV07CiAgICAgCi0gICAgaWYgKG1fb2Jq
ZWN0LT5zdXBwb3J0c0FSSUFEcm9wcGluZygpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVj
dC0+c3VwcG9ydHNBUklBRHJvcHBpbmcoKSkKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0
Ok5TQWNjZXNzaWJpbGl0eURyb3BFZmZlY3RzQXR0cmlidXRlXTsKICAgICAKLSAgICBpZiAoaXM8
QWNjZXNzaWJpbGl0eVRhYmxlPigqbV9vYmplY3QpICYmIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlU
YWJsZT4oKm1fb2JqZWN0KS5pc0V4cG9zYWJsZVRocm91Z2hBY2Nlc3NpYmlsaXR5KCkgJiYgZG93
bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqbV9vYmplY3QpLnN1cHBvcnRzU2VsZWN0ZWRSb3dz
KCkpCisgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKnNlbGYuYXhCYWNraW5nT2JqZWN0
KSAmJiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpzZWxmLmF4QmFja2luZ09iamVjdCku
aXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpICYmIGRvd25jYXN0PEFjY2Vzc2liaWxp
dHlUYWJsZT4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KS5zdXBwb3J0c1NlbGVjdGVkUm93cygpKQog
ICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRSb3dz
QXR0cmlidXRlXTsKICAgICAKLSAgICBpZiAobV9vYmplY3QtPnN1cHBvcnRzTGl2ZVJlZ2lvbigp
KSB7CisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zdXBwb3J0c0xpdmVSZWdpb24oKSkg
ewogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5QVJJQUxpdmVB
dHRyaWJ1dGVdOwogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5
QVJJQVJlbGV2YW50QXR0cmlidXRlXTsKICAgICB9CiAgICAgCi0gICAgaWYgKG1fb2JqZWN0LT5z
dXBwb3J0c1NldFNpemUoKSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnN1cHBvcnRz
U2V0U2l6ZSgpKQogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5
QVJJQVNldFNpemVBdHRyaWJ1dGVdOwotICAgIGlmIChtX29iamVjdC0+c3VwcG9ydHNQb3NJblNl
dCgpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+c3VwcG9ydHNQb3NJblNldCgpKQog
ICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5QVJJQVBvc0luU2V0
QXR0cmlidXRlXTsKICAgICAKLSAgICBBY2Nlc3NpYmlsaXR5U29ydERpcmVjdGlvbiBzb3J0RGly
ZWN0aW9uID0gbV9vYmplY3QtPnNvcnREaXJlY3Rpb24oKTsKKyAgICBBY2Nlc3NpYmlsaXR5U29y
dERpcmVjdGlvbiBzb3J0RGlyZWN0aW9uID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnNvcnREaXJl
Y3Rpb24oKTsKICAgICBpZiAoc29ydERpcmVjdGlvbiAhPSBBY2Nlc3NpYmlsaXR5U29ydERpcmVj
dGlvbjo6Tm9uZSAmJiBzb3J0RGlyZWN0aW9uICE9IEFjY2Vzc2liaWxpdHlTb3J0RGlyZWN0aW9u
OjpJbnZhbGlkKQogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5
U29ydERpcmVjdGlvbkF0dHJpYnV0ZV07CiAgICAgCiAgICAgLy8gSWYgYW4gb2JqZWN0IGlzIGEg
Y2hpbGQgb2YgYSBsaXZlIHJlZ2lvbiwgdGhlbiBhZGQgdGhlc2UKLSAgICBpZiAobV9vYmplY3Qt
PmlzSW5zaWRlTGl2ZVJlZ2lvbigpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNJ
bnNpZGVMaXZlUmVnaW9uKCkpCiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vz
c2liaWxpdHlBUklBQXRvbWljQXR0cmlidXRlXTsKICAgICAvLyBBbGwgb2JqZWN0cyBzaG91bGQg
ZXhwb3NlIHRoZSBBUklBIGJ1c3kgYXR0cmlidXRlIChBUklBIDEuMSB3aXRoIElTU1VFLTUzOCku
CiAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUVsZW1lbnRCdXN5QXR0
cmlidXRlXTsKICAgICAKICAgICAvLyBQb3B1cCBidXR0b25zIG9uIHRoZSBNYWMgZXhwb3NlIHRo
ZSB2YWx1ZSBhdHRyaWJ1dGUuCi0gICAgaWYgKG1fb2JqZWN0LT5pc1BvcFVwQnV0dG9uKCkpIHsK
KyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzUG9wVXBCdXR0b24oKSkgewogICAgICAg
ICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGVdOwog
ICAgIH0KIAotICAgIGlmIChtX29iamVjdC0+c3VwcG9ydHNEYXRldGltZUF0dHJpYnV0ZSgpKQor
ICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+c3VwcG9ydHNEYXRldGltZUF0dHJpYnV0ZSgp
KQogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5RGF0ZXRpbWVW
YWx1ZUF0dHJpYnV0ZV07CiAgICAgCi0gICAgaWYgKG1fb2JqZWN0LT5zdXBwb3J0c1JlcXVpcmVk
QXR0cmlidXRlKCkpIHsKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnN1cHBvcnRzUmVx
dWlyZWRBdHRyaWJ1dGUoKSkgewogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nl
c3NpYmlsaXR5UmVxdWlyZWRBdHRyaWJ1dGVdOwogICAgIH0KICAgICAKLSAgICBpZiAobV9vYmpl
Y3QtPmhhc1BvcHVwKCkpCisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5oYXNQb3B1cCgp
KQogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5SGFzUG9wdXBB
dHRyaWJ1dGVdOwogICAgIAotICAgIGlmIChtX29iamVjdC0+aXNNYXRoUm9vdCgpKSB7CisgICAg
aWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01hdGhSb290KCkpIHsKICAgICAgICAgLy8gVGhl
IGluZGV4IG9mIGEgc3F1YXJlIHJvb3QgaXMgYWx3YXlzIGtub3duLCBzbyB0aGVyZSdzIG5vIG9i
amVjdCBhc3NvY2lhdGVkIHdpdGggaXQuCi0gICAgICAgIGlmICghbV9vYmplY3QtPmlzTWF0aFNx
dWFyZVJvb3QoKSkKKyAgICAgICAgaWYgKCFzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRoU3F1
YXJlUm9vdCgpKQogICAgICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJp
bGl0eU1hdGhSb290SW5kZXhBdHRyaWJ1dGVdOwogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmpl
Y3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aFJvb3RSYWRpY2FuZEF0dHJpYnV0ZV07Ci0gICAgfSBlbHNl
IGlmIChtX29iamVjdC0+aXNNYXRoRnJhY3Rpb24oKSkgeworICAgIH0gZWxzZSBpZiAoc2VsZi5h
eEJhY2tpbmdPYmplY3QtPmlzTWF0aEZyYWN0aW9uKCkpIHsKICAgICAgICAgW2FkZGl0aW9uYWwg
YWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhGcmFjdGlvbk51bWVyYXRvckF0dHJpYnV0ZV07
CiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoRnJhY3Rp
b25EZW5vbWluYXRvckF0dHJpYnV0ZV07CiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpO
U0FjY2Vzc2liaWxpdHlNYXRoTGluZVRoaWNrbmVzc0F0dHJpYnV0ZV07Ci0gICAgfSBlbHNlIGlm
IChtX29iamVjdC0+aXNNYXRoU3Vic2NyaXB0U3VwZXJzY3JpcHQoKSkgeworICAgIH0gZWxzZSBp
ZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0KCkpIHsK
ICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhCYXNlQXR0
cmlidXRlXTsKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1h
dGhTdWJzY3JpcHRBdHRyaWJ1dGVdOwogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNB
Y2Nlc3NpYmlsaXR5TWF0aFN1cGVyc2NyaXB0QXR0cmlidXRlXTsKLSAgICB9IGVsc2UgaWYgKG1f
b2JqZWN0LT5pc01hdGhVbmRlck92ZXIoKSkgeworICAgIH0gZWxzZSBpZiAoc2VsZi5heEJhY2tp
bmdPYmplY3QtPmlzTWF0aFVuZGVyT3ZlcigpKSB7CiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9i
amVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoQmFzZUF0dHJpYnV0ZV07CiAgICAgICAgIFthZGRpdGlv
bmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoVW5kZXJBdHRyaWJ1dGVdOwogICAgICAg
ICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aE92ZXJBdHRyaWJ1dGVd
OwotICAgIH0gZWxzZSBpZiAobV9vYmplY3QtPmlzTWF0aEZlbmNlZCgpKSB7CisgICAgfSBlbHNl
IGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRoRmVuY2VkKCkpIHsKICAgICAgICAgW2Fk
ZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhGZW5jZWRPcGVuQXR0cmlidXRl
XTsKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhGZW5j
ZWRDbG9zZUF0dHJpYnV0ZV07Ci0gICAgfSBlbHNlIGlmIChtX29iamVjdC0+aXNNYXRoTXVsdGlz
Y3JpcHQoKSkgeworICAgIH0gZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWF0aE11
bHRpc2NyaXB0KCkpIHsKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJp
bGl0eU1hdGhCYXNlQXR0cmlidXRlXTsKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5T
QWNjZXNzaWJpbGl0eU1hdGhQcmVzY3JpcHRzQXR0cmlidXRlXTsKICAgICAgICAgW2FkZGl0aW9u
YWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhQb3N0c2NyaXB0c0F0dHJpYnV0ZV07CiAg
ICAgfQogICAgIAotICAgIGlmIChtX29iamVjdC0+c3VwcG9ydHNQYXRoKCkpCisgICAgaWYgKHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5zdXBwb3J0c1BhdGgoKSkKICAgICAgICAgW2FkZGl0aW9uYWwg
YWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVBhdGhBdHRyaWJ1dGVdOwogICAgIAotICAgIGlmICht
X29iamVjdC0+c3VwcG9ydHNFeHBhbmRlZFRleHRWYWx1ZSgpKQorICAgIGlmIChzZWxmLmF4QmFj
a2luZ09iamVjdC0+c3VwcG9ydHNFeHBhbmRlZFRleHRWYWx1ZSgpKQogICAgICAgICBbYWRkaXRp
b25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5RXhwYW5kZWRUZXh0VmFsdWVBdHRyaWJ1dGVd
OwogICAgIAogICAgIHJldHVybiBhZGRpdGlvbmFsOwpAQCAtMTQ3Nyw3ICsxNDc1LDcgQEAgQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgaWYgKCFbc2VsZiB1cGRhdGVP
YmplY3RCYWNraW5nU3RvcmVdKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIAotICAgIGlmICht
X29iamVjdC0+aXNBdHRhY2htZW50KCkpCisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5p
c0F0dGFjaG1lbnQoKSkKICAgICAgICAgcmV0dXJuIFtbc2VsZiBhdHRhY2htZW50Vmlld10gYWNj
ZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzXTsKICAgICAKICAgICBzdGF0aWMgTlNBcnJheSogYXR0
cmlidXRlcyA9IG5pbDsKQEAgLTE4MDYsNzIgKzE4MDQsNzAgQEAgQUxMT1dfREVQUkVDQVRFRF9J
TVBMRU1FTlRBVElPTlNfRU5ECiAgICAgCiAgICAgTlNBcnJheSAqb2JqZWN0QXR0cmlidXRlcyA9
IGF0dHJpYnV0ZXM7CiAgICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc1Bhc3N3b3JkRmllbGQoKSkK
KyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzUGFzc3dvcmRGaWVsZCgpKQogICAgICAg
ICBvYmplY3RBdHRyaWJ1dGVzID0gcGFzc3dvcmRGaWVsZEF0dHJzOwogICAgIAotICAgIGVsc2Ug
aWYgKG1fb2JqZWN0LT5pc1dlYkFyZWEoKSkKKyAgICBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09i
amVjdC0+aXNXZWJBcmVhKCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSB3ZWJBcmVhQXR0
cnM7CiAgICAgCi0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzVGV4dENvbnRyb2woKSkKKyAgICBl
bHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUZXh0Q29udHJvbCgpKQogICAgICAgICBv
YmplY3RBdHRyaWJ1dGVzID0gdGV4dEF0dHJzOwogICAgIAotICAgIGVsc2UgaWYgKF9heEJhY2tp
bmdPYmplY3QtPmlzTGluaygpIHx8IF9heEJhY2tpbmdPYmplY3QtPmlzSW1hZ2UoKSkKKyAgICBl
bHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNMaW5rKCkgfHwgc2VsZi5heEJhY2tpbmdP
YmplY3QtPmlzSW1hZ2UoKSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IGFuY2hvckF0dHJz
OwogICAgIAotICAgIGVsc2UgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKm1fb2JqZWN0KSAm
JiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCptX29iamVjdCkuaXNFeHBvc2FibGVUaHJv
dWdoQWNjZXNzaWJpbGl0eSgpKQorICAgIGVsc2UgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4o
KnNlbGYuYXhCYWNraW5nT2JqZWN0KSAmJiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpz
ZWxmLmF4QmFja2luZ09iamVjdCkuaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpKQog
ICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gdGFibGVBdHRyczsKLSAgICBlbHNlIGlmIChtX29i
amVjdC0+aXNUYWJsZUNvbHVtbigpKQorICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5pc1RhYmxlQ29sdW1uKCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSB0YWJsZUNvbEF0
dHJzOwotICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc1RhYmxlQ2VsbCgpKQorICAgIGVsc2UgaWYg
KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1RhYmxlQ2VsbCgpKQogICAgICAgICBvYmplY3RBdHRy
aWJ1dGVzID0gdGFibGVDZWxsQXR0cnM7Ci0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzVGFibGVS
b3coKSkgeworICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1RhYmxlUm93KCkp
IHsKICAgICAgICAgLy8gQW4gQVJJQSB0YWJsZSByb3cgY2FuIGJlIGNvbGxhcHNlZCBhbmQgZXhw
YW5kZWQsIHNvIGl0IG5lZWRzIHRoZSBleHRyYSBhdHRyaWJ1dGVzLgotICAgICAgICBpZiAobV9v
YmplY3QtPmlzQVJJQVRyZWVHcmlkUm93KCkpCisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09i
amVjdC0+aXNBUklBVHJlZUdyaWRSb3coKSkKICAgICAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMg
PSBvdXRsaW5lUm93QXR0cnM7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG9iamVjdEF0dHJp
YnV0ZXMgPSB0YWJsZVJvd0F0dHJzOwotICAgIH0KLSAgICAKLSAgICBlbHNlIGlmIChtX29iamVj
dC0+aXNUcmVlKCkpCisgICAgfSBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUcmVl
KCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBvdXRsaW5lQXR0cnM7Ci0gICAgZWxzZSBp
ZiAobV9vYmplY3QtPmlzVHJlZUl0ZW0oKSkKKyAgICBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09i
amVjdC0+aXNUcmVlSXRlbSgpKQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gb3V0bGluZVJv
d0F0dHJzOwogICAgIAotICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc0xpc3RCb3goKSkKKyAgICBl
bHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNMaXN0Qm94KCkpCiAgICAgICAgIG9iamVj
dEF0dHJpYnV0ZXMgPSBsaXN0Qm94QXR0cnM7Ci0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzTGlz
dCgpKQorICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0xpc3QoKSkKICAgICAg
ICAgb2JqZWN0QXR0cmlidXRlcyA9IGxpc3RBdHRyczsKICAgICAKLSAgICBlbHNlIGlmIChtX29i
amVjdC0+aXNDb21ib0JveCgpKQorICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5p
c0NvbWJvQm94KCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBjb21ib0JveEF0dHJzOwog
ICAgIAotICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc1Byb2dyZXNzSW5kaWNhdG9yKCkgfHwgbV9v
YmplY3QtPmlzU2xpZGVyKCkpCisgICAgZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlz
UHJvZ3Jlc3NJbmRpY2F0b3IoKSB8fCBzZWxmLmF4QmFja2luZ09iamVjdC0+aXNTbGlkZXIoKSkK
ICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IHJhbmdlQXR0cnM7CiAgICAgCiAgICAgLy8gVGhl
c2UgYXJlIHByb2Nlc3NlZCBpbiBvcmRlciBiZWNhdXNlIGFuIGlucHV0IGltYWdlIGlzIGEgYnV0
dG9uLCBhbmQgYSBidXR0b24gaXMgYSBjb250cm9sLgotICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5p
c0lucHV0SW1hZ2UoKSkKKyAgICBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNJbnB1
dEltYWdlKCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBpbnB1dEltYWdlQXR0cnM7Ci0g
ICAgZWxzZSBpZiAobV9vYmplY3QtPmlzQnV0dG9uKCkpCisgICAgZWxzZSBpZiAoc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmlzQnV0dG9uKCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBidXR0
b25BdHRyczsKLSAgICBlbHNlIGlmIChtX29iamVjdC0+aXNDb250cm9sKCkpCisgICAgZWxzZSBp
ZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzQ29udHJvbCgpKQogICAgICAgICBvYmplY3RBdHRy
aWJ1dGVzID0gY29udHJvbEF0dHJzOwogICAgIAotICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc0dy
b3VwKCkgfHwgbV9vYmplY3QtPmlzTGlzdEl0ZW0oKSkKKyAgICBlbHNlIGlmIChzZWxmLmF4QmFj
a2luZ09iamVjdC0+aXNHcm91cCgpIHx8IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0xpc3RJdGVt
KCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBncm91cEF0dHJzOwotICAgIGVsc2UgaWYg
KG1fb2JqZWN0LT5pc1RhYkxpc3QoKSkKKyAgICBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVj
dC0+aXNUYWJMaXN0KCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSB0YWJMaXN0QXR0cnM7
Ci0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzU2Nyb2xsVmlldygpKQorICAgIGVsc2UgaWYgKHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5pc1Njcm9sbFZpZXcoKSkKICAgICAgICAgb2JqZWN0QXR0cmli
dXRlcyA9IHNjcm9sbFZpZXdBdHRyczsKLSAgICBlbHNlIGlmIChtX29iamVjdC0+aXNTcGluQnV0
dG9uKCkpCisgICAgZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzU3BpbkJ1dHRvbigp
KQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gaW5jcmVtZW50b3JBdHRyczsKICAgICAKLSAg
ICBlbHNlIGlmIChtX29iamVjdC0+aXNNZW51KCkpCisgICAgZWxzZSBpZiAoc2VsZi5heEJhY2tp
bmdPYmplY3QtPmlzTWVudSgpKQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gbWVudUF0dHJz
OwotICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc01lbnVCYXIoKSkKKyAgICBlbHNlIGlmIChzZWxm
LmF4QmFja2luZ09iamVjdC0+aXNNZW51QmFyKCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMg
PSBtZW51QmFyQXR0cnM7Ci0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzTWVudUJ1dHRvbigpKQor
ICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01lbnVCdXR0b24oKSkKICAgICAg
ICAgb2JqZWN0QXR0cmlidXRlcyA9IG1lbnVCdXR0b25BdHRyczsKLSAgICBlbHNlIGlmIChtX29i
amVjdC0+aXNNZW51SXRlbSgpKQorICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5p
c01lbnVJdGVtKCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBtZW51SXRlbUF0dHJzOwog
ICAgIAogICAgIE5TQXJyYXkgKmFkZGl0aW9uYWxBdHRyaWJ1dGVzID0gW3NlbGYgYWRkaXRpb25h
bEFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lc107CkBAIC0xODc5LDcgKzE4NzUsNyBAQCBBTExP
V19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgb2JqZWN0QXR0cmlidXRl
cyA9IFtvYmplY3RBdHRyaWJ1dGVzIGFycmF5QnlBZGRpbmdPYmplY3RzRnJvbUFycmF5OmFkZGl0
aW9uYWxBdHRyaWJ1dGVzXTsKICAgICAKICAgICAvLyBPbmx5IGV4cG9zZSBBWEFSSUFDdXJyZW50
IGF0dHJpYnV0ZSB3aGVuIHRoZSBlbGVtZW50IGlzIHNldCB0byBiZSBjdXJyZW50IGl0ZW0uCi0g
ICAgaWYgKG1fb2JqZWN0LT5jdXJyZW50U3RhdGUoKSAhPSBBY2Nlc3NpYmlsaXR5Q3VycmVudFN0
YXRlOjpGYWxzZSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmN1cnJlbnRTdGF0ZSgp
ICE9IEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGU6OkZhbHNlKQogICAgICAgICBvYmplY3RBdHRy
aWJ1dGVzID0gW29iamVjdEF0dHJpYnV0ZXMgYXJyYXlCeUFkZGluZ09iamVjdHNGcm9tQXJyYXk6
QFsgTlNBY2Nlc3NpYmlsaXR5QVJJQUN1cnJlbnRBdHRyaWJ1dGUgXV07CiAgICAgCiAgICAgLy8g
QXBwS2l0IG5lZWRzIHRvIGtub3cgdGhlIHNjcmVlbiBoZWlnaHQgaW4gb3JkZXIgdG8gZG8gdGhl
IGNvb3JkaW5hdGUgY29udmVyc2lvbi4KQEAgLTE4OTIsMTQgKzE4ODgsMTQgQEAgQUxMT1dfREVQ
UkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiB7CiAgICAgaWYgKCF0ZXh0TWFya2VyUmFuZ2Up
CiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOwotICAgIEFYT2JqZWN0Q2Fj
aGUqIGNhY2hlID0gbV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICBBWE9iamVjdENhY2hl
KiBjYWNoZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7CiAgICAgcmV0
dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKHZpc2libGVQb3NpdGlvbkZvclN0YXJ0T2ZUZXh0TWFy
a2VyUmFuZ2UoY2FjaGUsIHRleHRNYXJrZXJSYW5nZSksIHZpc2libGVQb3NpdGlvbkZvckVuZE9m
VGV4dE1hcmtlclJhbmdlKGNhY2hlLCB0ZXh0TWFya2VyUmFuZ2UpKTsKIH0KIAogLSAoTlNBcnJh
eSopcmVuZGVyV2lkZ2V0Q2hpbGRyZW4KIHsKICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0
cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPE5TQXJyYXkgKj4oW3Byb3RlY3RlZFNlbGYgPSBSZXRh
aW5QdHI8V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+KHNlbGYpXSAoKSAtPiBOU0FycmF5
ICogewotICAgICAgICBXaWRnZXQqIHdpZGdldCA9IHByb3RlY3RlZFNlbGYtPm1fb2JqZWN0LT53
aWRnZXQoKTsKKyAgICAgICAgV2lkZ2V0KiB3aWRnZXQgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4
QmFja2luZ09iamVjdC0+d2lkZ2V0KCk7CiAgICAgICAgIGlmICghd2lkZ2V0KQogICAgICAgICAg
ICAgcmV0dXJuIG5pbDsKICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVH
SU4KQEAgLTE5MTEsMTAgKzE5MDcsMTAgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElP
TlNfRU5ECiAtIChpZClyZW1vdGVBY2Nlc3NpYmlsaXR5UGFyZW50T2JqZWN0CiB7CiAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1fb2JqZWN0KQorICAgIGlmICghc2VsZi5h
eEJhY2tpbmdPYmplY3QpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBpZiAoYXV0byogZG9j
dW1lbnQgPSBfYXhCYWNraW5nT2JqZWN0LT5kb2N1bWVudCgpKSB7CisgICAgaWYgKGF1dG8qIGRv
Y3VtZW50ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmRvY3VtZW50KCkpIHsKICAgICAgICAgaWYg
KGF1dG8qIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCkpCiAgICAgICAgICAgICByZXR1cm4gZnJh
bWUtPmxvYWRlcigpLmNsaWVudCgpLmFjY2Vzc2liaWxpdHlSZW1vdGVPYmplY3QoKTsKICAgICB9
CkBAIC0xOTI3LDcgKzE5MjMsNyBAQCBzdGF0aWMgdm9pZCBjb252ZXJ0VG9WZWN0b3IoTlNBcnJh
eSogYXJyYXksIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaAogICAgIHVuc2ln
bmVkIGxlbmd0aCA9IFthcnJheSBjb3VudF07CiAgICAgdmVjdG9yLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobGVuZ3RoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgQVhDb3JlT2JqZWN0KiBvYmogPSBbW2FycmF5IG9iamVjdEF0SW5kZXg6aV0g
YWNjZXNzaWJpbGl0eU9iamVjdF07CisgICAgICAgIEFYQ29yZU9iamVjdCogb2JqID0gW1thcnJh
eSBvYmplY3RBdEluZGV4OmldIGF4QmFja2luZ09iamVjdF07CiAgICAgICAgIGlmIChvYmopCiAg
ICAgICAgICAgICB2ZWN0b3IuYXBwZW5kKG9iaik7CiAgICAgfQpAQCAtMTk0Myw3ICsxOTM5LDcg
QEAgc3RhdGljIE5TTXV0YWJsZUFycmF5ICpjb252ZXJ0U3RyaW5nc1RvTlNBcnJheShjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgdmVjdG9yKQogCiAtIChpZCl0ZXh0TWFya2VyUmFuZ2VGb3JTZWxlY3Rp
b24KIHsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fb2JqZWN0LT5zZWxlY3Rp
b24oKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5zZWxlY3Rpb24oKTsKICAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKQogICAgICAgICBy
ZXR1cm4gbmlsOwogICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBv
c2l0aW9uczpzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkgZW5kUG9zaXRpb246c2VsZWN0aW9uLnZp
c2libGVFbmQoKV07CkBAIC0xOTUyLDE3ICsxOTQ4LDE3IEBAIHN0YXRpYyBOU011dGFibGVBcnJh
eSAqY29udmVydFN0cmluZ3NUb05TQXJyYXkoY29uc3QgVmVjdG9yPFN0cmluZz4mIHZlY3RvcikK
IC0gKGlkKWFzc29jaWF0ZWRQbHVnaW5QYXJlbnQKIHsKICAgICByZXR1cm4gQWNjZXNzaWJpbGl0
eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbcHJvdGVjdGVkU2VsZiA9IFJldGFp
blB0cjxXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4oc2VsZildICgpIC0+IGlkIHsKLSAg
ICAgICAgaWYgKCFwcm90ZWN0ZWRTZWxmLT5tX29iamVjdCB8fCAhcHJvdGVjdGVkU2VsZi0+bV9v
YmplY3QtPmhhc0FwcGxlUERGQW5ub3RhdGlvbkF0dHJpYnV0ZSgpKQorICAgICAgICBpZiAoIXBy
b3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0IHx8ICFwcm90ZWN0ZWRTZWxmLmdldCgp
LmF4QmFja2luZ09iamVjdC0+aGFzQXBwbGVQREZBbm5vdGF0aW9uQXR0cmlidXRlKCkpCiAgICAg
ICAgICAgICByZXR1cm4gbmlsOwogICAgIAotICAgICAgICBpZiAoIXByb3RlY3RlZFNlbGYtPm1f
b2JqZWN0LT5kb2N1bWVudCgpLT5pc1BsdWdpbkRvY3VtZW50KCkpCisgICAgICAgIGlmICghcHJv
dGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3QtPmRvY3VtZW50KCktPmlzUGx1Z2luRG9j
dW1lbnQoKSkKICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgIAotICAgICAgICBXaWRn
ZXQqIHBsdWdpbldpZGdldCA9IHN0YXRpY19jYXN0PFBsdWdpbkRvY3VtZW50Kj4ocHJvdGVjdGVk
U2VsZi0+bV9vYmplY3QtPmRvY3VtZW50KCkpLT5wbHVnaW5XaWRnZXQoKTsKKyAgICAgICAgV2lk
Z2V0KiBwbHVnaW5XaWRnZXQgPSBzdGF0aWNfY2FzdDxQbHVnaW5Eb2N1bWVudCo+KHByb3RlY3Rl
ZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0LT5kb2N1bWVudCgpKS0+cGx1Z2luV2lkZ2V0KCk7
CiAgICAgICAgIGlmICghcGx1Z2luV2lkZ2V0IHx8ICFwbHVnaW5XaWRnZXQtPmlzUGx1Z2luVmll
d0Jhc2UoKSkKICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgIAotICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlld0Jhc2UqPihwbHVnaW5XaWRnZXQpLT5hY2Nlc3NpYmls
aXR5QXNzb2NpYXRlZFBsdWdpblBhcmVudEZvckVsZW1lbnQocHJvdGVjdGVkU2VsZi0+bV9vYmpl
Y3QtPmVsZW1lbnQoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3QmFz
ZSo+KHBsdWdpbldpZGdldCktPmFjY2Vzc2liaWxpdHlBc3NvY2lhdGVkUGx1Z2luUGFyZW50Rm9y
RWxlbWVudChwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdC0+ZWxlbWVudCgpKTsK
ICAgICB9KTsKIH0KIApAQCAtMTk5Niw3ICsxOTkyLDcgQEAgc3RhdGljIHZvaWQgV2ViVHJhbnNm
b3JtQ0dQYXRoVG9OU0JlemllclBhdGgodm9pZCogaW5mbywgY29uc3QgQ0dQYXRoRWxlbWVudCAq
ZWwKIAogLSAoTlNCZXppZXJQYXRoICopcGF0aAogewotICAgIFBhdGggcGF0aCA9IG1fb2JqZWN0
LT5lbGVtZW50UGF0aCgpOworICAgIFBhdGggcGF0aCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5l
bGVtZW50UGF0aCgpOwogICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIE5V
TEw7CiAgICAgCkBAIC0yMDEyLDIyICsyMDA4LDIyIEBAIHN0YXRpYyB2b2lkIFdlYlRyYW5zZm9y
bUNHUGF0aFRvTlNCZXppZXJQYXRoKHZvaWQqIGluZm8sIGNvbnN0IENHUGF0aEVsZW1lbnQgKmVs
CiAKIC0gKHNpemVfdCljaGlsZHJlblZlY3RvclNpemUKIHsKLSAgICByZXR1cm4gbV9vYmplY3Qt
PmNoaWxkcmVuKCkuc2l6ZSgpOworICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+Y2hp
bGRyZW4oKS5zaXplKCk7CiB9CiAKIC0gKE5TQXJyYXk8V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgKj4gKiljaGlsZHJlblZlY3RvckFycmF5CiB7Ci0gICAgcmV0dXJuIGNvbnZlcnRUb05T
QXJyYXkobV9vYmplY3QtPmNoaWxkcmVuKCkpOworICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5
KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5jaGlsZHJlbigpKTsKIH0KIAogLSAoTlNWYWx1ZSAqKXBv
c2l0aW9uCiB7CiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKICAgICBp
ZiAoX0FYVUlFbGVtZW50UmVxdWVzdFNlcnZpY2VkQnlTZWNvbmRhcnlBWFRocmVhZCgpKQotICAg
ICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUG9pbnQ6KE5TUG9pbnQpX2F4QmFja2luZ09i
amVjdC0+cmVsYXRpdmVGcmFtZSgpLmxvY2F0aW9uKCldOworICAgICAgICByZXR1cm4gW05TVmFs
dWUgdmFsdWVXaXRoUG9pbnQ6KE5TUG9pbnQpc2VsZi5heEJhY2tpbmdPYmplY3QtPnJlbGF0aXZl
RnJhbWUoKS5sb2NhdGlvbigpXTsKICNlbmRpZgogICAgICAgICAKLSAgICBhdXRvIHJlY3QgPSBz
bmFwcGVkSW50UmVjdChtX29iamVjdC0+ZWxlbWVudFJlY3QoKSk7CisgICAgYXV0byByZWN0ID0g
c25hcHBlZEludFJlY3Qoc2VsZi5heEJhY2tpbmdPYmplY3QtPmVsZW1lbnRSZWN0KCkpOwogICAg
IAogICAgIC8vIFRoZSBDb2NvYSBhY2Nlc3NpYmlsaXR5IEFQSSB3YW50cyB0aGUgbG93ZXItbGVm
dCBjb3JuZXIuCiAgICAgYXV0byBmbG9hdFBvaW50ID0gRmxvYXRQb2ludChyZWN0LngoKSwgcmVj
dC5tYXhZKCkpOwpAQCAtMjA0MCwxMSArMjAzNiwxMSBAQCBzdGF0aWMgdm9pZCBXZWJUcmFuc2Zv
cm1DR1BhdGhUb05TQmV6aWVyUGF0aCh2b2lkKiBpbmZvLCBjb25zdCBDR1BhdGhFbGVtZW50ICpl
bAogLSAoTlNTdHJpbmcqKXJvbGUKIHsKICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9O
U19CRUdJTgotICAgIGlmIChfYXhCYWNraW5nT2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkKKyAgICBp
ZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzQXR0YWNobWVudCgpKQogICAgICAgICByZXR1cm4g
W1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nl
c3NpYmlsaXR5Um9sZUF0dHJpYnV0ZV07CiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElP
TlNfRU5ECiAKLSAgICBOU1N0cmluZyAqc3RyaW5nID0gbV9vYmplY3QtPnJvbGVQbGF0Zm9ybVN0
cmluZygpOworICAgIE5TU3RyaW5nICpzdHJpbmcgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+cm9s
ZVBsYXRmb3JtU3RyaW5nKCk7CiAgICAgaWYgKHN0cmluZy5sZW5ndGgpCiAgICAgICAgIHJldHVy
biBzdHJpbmc7CiAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVVua25vd25Sb2xlOwpAQCAtMjA1
MywyMSArMjA0OSwyMSBAQCBzdGF0aWMgdm9pZCBXZWJUcmFuc2Zvcm1DR1BhdGhUb05TQmV6aWVy
UGF0aCh2b2lkKiBpbmZvLCBjb25zdCBDR1BhdGhFbGVtZW50ICplbAogQUxMT1dfREVQUkVDQVRF
RF9ERUNMQVJBVElPTlNfQkVHSU4KIC0gKE5TU3RyaW5nKilzdWJyb2xlCiB7Ci0gICAgaWYgKG1f
b2JqZWN0LT5pc1Bhc3N3b3JkRmllbGQoKSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3Qt
PmlzUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5U2VjdXJl
VGV4dEZpZWxkU3Vicm9sZTsKLSAgICBpZiAobV9vYmplY3QtPmlzU2VhcmNoRmllbGQoKSkKKyAg
ICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzU2VhcmNoRmllbGQoKSkKICAgICAgICAgcmV0
dXJuIE5TQWNjZXNzaWJpbGl0eVNlYXJjaEZpZWxkU3Vicm9sZTsKICAgICAKLSAgICBpZiAoX2F4
QmFja2luZ09iamVjdC0+aXNBdHRhY2htZW50KCkpIHsKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdP
YmplY3QtPmlzQXR0YWNobWVudCgpKSB7CiAgICAgICAgIE5TVmlldyogYXR0YWNoVmlldyA9IFtz
ZWxmIGF0dGFjaG1lbnRWaWV3XTsKICAgICAgICAgaWYgKFtbYXR0YWNoVmlldyBhY2Nlc3NpYmls
aXR5QXR0cmlidXRlTmFtZXNdIGNvbnRhaW5zT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVN1YnJvbGVB
dHRyaWJ1dGVdKQogICAgICAgICAgICAgcmV0dXJuIFthdHRhY2hWaWV3IGFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlTdWJyb2xlQXR0cmlidXRlXTsKICAgICB9CiAg
ICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc01ldGVyKCkpCisgICAgaWYgKHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5pc01ldGVyKCkpCiAgICAgICAgIHJldHVybiBAIkFYTWV0ZXIiOwogICAgIAotICAg
IEFjY2Vzc2liaWxpdHlSb2xlIHJvbGUgPSBtX29iamVjdC0+cm9sZVZhbHVlKCk7CisgICAgQWNj
ZXNzaWJpbGl0eVJvbGUgcm9sZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5yb2xlVmFsdWUoKTsK
ICAgICBpZiAocm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6SG9yaXpvbnRhbFJ1bGUpCiAgICAg
ICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlDb250ZW50U2VwYXJhdG9yU3Vicm9sZTsKICAgICBp
ZiAocm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6VG9nZ2xlQnV0dG9uKQpAQCAtMjA3NSwyNSAr
MjA3MSwyNSBAQCBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgogICAgIGlmIChy
b2xlID09IEFjY2Vzc2liaWxpdHlSb2xlOjpGb290ZXIpCiAgICAgICAgIHJldHVybiBAIkFYRm9v
dGVyIjsKIAotICAgIGlmIChtX29iamVjdC0+cm9sZVZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJv
bGU6OlNwaW5CdXR0b25QYXJ0KSB7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNJbmNyZW1lbnRv
cigpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+cm9sZVZhbHVlKCkgPT0gQWNjZXNz
aWJpbGl0eVJvbGU6OlNwaW5CdXR0b25QYXJ0KSB7CisgICAgICAgIGlmIChzZWxmLmF4QmFja2lu
Z09iamVjdC0+aXNJbmNyZW1lbnRvcigpKQogICAgICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJp
bGl0eUluY3JlbWVudEFycm93U3Vicm9sZTsKICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0
eURlY3JlbWVudEFycm93U3Vicm9sZTsKICAgICB9CiAgICAgCi0gICAgaWYgKF9heEJhY2tpbmdP
YmplY3QtPmlzRmlsZVVwbG9hZEJ1dHRvbigpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVj
dC0+aXNGaWxlVXBsb2FkQnV0dG9uKCkpCiAgICAgICAgIHJldHVybiBAIkFYRmlsZVVwbG9hZEJ1
dHRvbiI7CiAgICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc1RyZWVJdGVtKCkpCisgICAgaWYgKHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5pc1RyZWVJdGVtKCkpCiAgICAgICAgIHJldHVybiBOU0FjY2Vz
c2liaWxpdHlPdXRsaW5lUm93U3Vicm9sZTsKICAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzRmll
bGRzZXQoKSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzRmllbGRzZXQoKSkKICAg
ICAgICAgcmV0dXJuIEAiQVhGaWVsZHNldCI7CiAKLSAgICBpZiAobV9vYmplY3QtPmlzTGlzdCgp
KSB7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNVbm9yZGVyZWRMaXN0KCkgfHwgbV9vYmplY3Qt
PmlzT3JkZXJlZExpc3QoKSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTGlzdCgp
KSB7CisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNVbm9yZGVyZWRMaXN0KCkg
fHwgc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzT3JkZXJlZExpc3QoKSkKICAgICAgICAgICAgIHJl
dHVybiBOU0FjY2Vzc2liaWxpdHlDb250ZW50TGlzdFN1YnJvbGU7Ci0gICAgICAgIGlmIChtX29i
amVjdC0+aXNEZXNjcmlwdGlvbkxpc3QoKSkgeworICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdP
YmplY3QtPmlzRGVzY3JpcHRpb25MaXN0KCkpIHsKICAgICAgICAgICAgIHJldHVybiBOU0FjY2Vz
c2liaWxpdHlEZXNjcmlwdGlvbkxpc3RTdWJyb2xlOwogICAgICAgICB9CiAgICAgfQpAQCAtMjE2
MiwzOSArMjE1OCwzOSBAQCBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgogICAg
IH0KICAgICAKICAgICBpZiAocm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6TWF0aEVsZW1lbnQp
IHsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhGcmFjdGlvbigpKQorICAgICAgICBpZiAo
c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWF0aEZyYWN0aW9uKCkpCiAgICAgICAgICAgICByZXR1
cm4gQCJBWE1hdGhGcmFjdGlvbiI7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoRmVuY2Vk
KCkpCisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRoRmVuY2VkKCkpCiAg
ICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhGZW5jZWQiOwotICAgICAgICBpZiAobV9vYmplY3Qt
PmlzTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0KCkpCisgICAgICAgIGlmIChzZWxmLmF4QmFja2lu
Z09iamVjdC0+aXNNYXRoU3Vic2NyaXB0U3VwZXJzY3JpcHQoKSkKICAgICAgICAgICAgIHJldHVy
biBAIkFYTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0IjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5p
c01hdGhSb3coKSkKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01hdGhSb3co
KSkKICAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aFJvdyI7Ci0gICAgICAgIGlmIChtX29iamVj
dC0+aXNNYXRoVW5kZXJPdmVyKCkpCisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+
aXNNYXRoVW5kZXJPdmVyKCkpCiAgICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhVbmRlck92ZXIi
OwotICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFNxdWFyZVJvb3QoKSkKKyAgICAgICAgaWYg
KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01hdGhTcXVhcmVSb290KCkpCiAgICAgICAgICAgICBy
ZXR1cm4gQCJBWE1hdGhTcXVhcmVSb290IjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhS
b290KCkpCisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRoUm9vdCgpKQog
ICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoUm9vdCI7Ci0gICAgICAgIGlmIChtX29iamVjdC0+
aXNNYXRoVGV4dCgpKQorICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWF0aFRl
eHQoKSkKICAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aFRleHQiOwotICAgICAgICBpZiAobV9v
YmplY3QtPmlzTWF0aE51bWJlcigpKQorICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3Qt
PmlzTWF0aE51bWJlcigpKQogICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoTnVtYmVyIjsKLSAg
ICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhJZGVudGlmaWVyKCkpCisgICAgICAgIGlmIChzZWxm
LmF4QmFja2luZ09iamVjdC0+aXNNYXRoSWRlbnRpZmllcigpKQogICAgICAgICAgICAgcmV0dXJu
IEAiQVhNYXRoSWRlbnRpZmllciI7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoVGFibGUo
KSkKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01hdGhUYWJsZSgpKQogICAg
ICAgICAgICAgcmV0dXJuIEAiQVhNYXRoVGFibGUiOwotICAgICAgICBpZiAobV9vYmplY3QtPmlz
TWF0aFRhYmxlUm93KCkpCisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRo
VGFibGVSb3coKSkKICAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aFRhYmxlUm93IjsKLSAgICAg
ICAgaWYgKG1fb2JqZWN0LT5pc01hdGhUYWJsZUNlbGwoKSkKKyAgICAgICAgaWYgKHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5pc01hdGhUYWJsZUNlbGwoKSkKICAgICAgICAgICAgIHJldHVybiBAIkFY
TWF0aFRhYmxlQ2VsbCI7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoRmVuY2VPcGVyYXRv
cigpKQorICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWF0aEZlbmNlT3BlcmF0
b3IoKSkKICAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aEZlbmNlT3BlcmF0b3IiOwotICAgICAg
ICBpZiAobV9vYmplY3QtPmlzTWF0aFNlcGFyYXRvck9wZXJhdG9yKCkpCisgICAgICAgIGlmIChz
ZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRoU2VwYXJhdG9yT3BlcmF0b3IoKSkKICAgICAgICAg
ICAgIHJldHVybiBAIkFYTWF0aFNlcGFyYXRvck9wZXJhdG9yIjsKLSAgICAgICAgaWYgKG1fb2Jq
ZWN0LT5pc01hdGhPcGVyYXRvcigpKQorICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3Qt
PmlzTWF0aE9wZXJhdG9yKCkpCiAgICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhPcGVyYXRvciI7
Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoTXVsdGlzY3JpcHQoKSkKKyAgICAgICAgaWYg
KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01hdGhNdWx0aXNjcmlwdCgpKQogICAgICAgICAgICAg
cmV0dXJuIEAiQVhNYXRoTXVsdGlzY3JpcHQiOwogICAgIH0KICAgICAKQEAgLTIyMDksMTAgKzIy
MDUsMTAgQEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KICAgICBpZiAocm9s
ZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6VGltZSkKICAgICAgICAgcmV0dXJuIEAiQVhUaW1lR3Jv
dXAiOwogCi0gICAgaWYgKG1fb2JqZWN0LT5pc01lZGlhVGltZWxpbmUoKSkKKyAgICBpZiAoc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmlzTWVkaWFUaW1lbGluZSgpKQogICAgICAgICByZXR1cm4gTlNB
Y2Nlc3NpYmlsaXR5VGltZWxpbmVTdWJyb2xlOwogCi0gICAgaWYgKG1fb2JqZWN0LT5pc1N3aXRj
aCgpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNTd2l0Y2goKSkKICAgICAgICAg
cmV0dXJuIE5TQWNjZXNzaWJpbGl0eVN3aXRjaFN1YnJvbGU7CiAKICAgICBpZiAocm9sZSA9PSBB
Y2Nlc3NpYmlsaXR5Um9sZTo6SW5zZXJ0aW9uKQpAQCAtMjIyNCw4ICsyMjIwLDggQEAgQUxMT1df
REVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KICAgICBpZiAocm9sZSA9PSBBY2Nlc3NpYmls
aXR5Um9sZTo6U3Vic2NyaXB0KQogICAgICAgICByZXR1cm4gQCJBWFN1YnNjcmlwdFN0eWxlR3Jv
dXAiOwogCi0gICAgaWYgKG1fb2JqZWN0LT5pc1N0eWxlRm9ybWF0R3JvdXAoKSkgewotICAgICAg
ICBhdXRvIHRhZ05hbWUgPSBtX29iamVjdC0+dGFnTmFtZSgpOworICAgIGlmIChzZWxmLmF4QmFj
a2luZ09iamVjdC0+aXNTdHlsZUZvcm1hdEdyb3VwKCkpIHsKKyAgICAgICAgYXV0byB0YWdOYW1l
ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnRhZ05hbWUoKTsKICAgICAgICAgaWYgKHRhZ05hbWUg
PT0ga2JkVGFnKQogICAgICAgICAgICAgcmV0dXJuIEAiQVhLZXlib2FyZElucHV0U3R5bGVHcm91
cCI7CiAgICAgICAgIGlmICh0YWdOYW1lID09IGNvZGVUYWcpCkBAIC0yMjYzLDIwICsyMjU5LDIw
IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogCiAtIChOU1N0cmluZyopcm9s
ZURlc2NyaXB0aW9uCiB7Ci0gICAgaWYgKCFtX29iamVjdCkKKyAgICBpZiAoIXNlbGYuYXhCYWNr
aW5nT2JqZWN0KQogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgQUxMT1dfREVQUkVDQVRFRF9E
RUNMQVJBVElPTlNfQkVHSU4KICAgICAvLyBhdHRhY2htZW50cyBoYXZlIHRoZSBBWEltYWdlIHJv
bGUsIGJ1dCBhIGRpZmZlcmVudCBzdWJyb2xlCi0gICAgaWYgKF9heEJhY2tpbmdPYmplY3QtPmlz
QXR0YWNobWVudCgpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNBdHRhY2htZW50
KCkpCiAgICAgICAgIHJldHVybiBbW3NlbGYgYXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRpb25BdHRyaWJ1dGVdOwog
ICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogCi0gICAgU3RyaW5nIHJvbGVE
ZXNjcmlwdGlvbiA9IG1fb2JqZWN0LT5yb2xlRGVzY3JpcHRpb24oKTsKKyAgICBTdHJpbmcgcm9s
ZURlc2NyaXB0aW9uID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnJvbGVEZXNjcmlwdGlvbigpOwog
ICAgIGlmICghcm9sZURlc2NyaXB0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHJvbGVE
ZXNjcmlwdGlvbjsKIAotICAgIE5TU3RyaW5nICpheFJvbGUgPSBtX29iamVjdC0+cm9sZVBsYXRm
b3JtU3RyaW5nKCk7CisgICAgTlNTdHJpbmcgKmF4Um9sZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5yb2xlUGxhdGZvcm1TdHJpbmcoKTsKICAgICAvLyBGYWxsYmFjayB0byB0aGUgc3lzdGVtIGRl
ZmF1bHQgcm9sZSBkZXNjcmlwdGlvbi4KICAgICAvLyBJZiB3ZSBnZXQgdGhlIHNhbWUgc3RyaW5n
IGJhY2ssIHRoZW4gYXMgYSBsYXN0IHJlc29ydCwgcmV0dXJuIHVua25vd24uCiAgICAgTlNTdHJp
bmcgKmRlZmF1bHRSb2xlRGVzY3JpcHRpb24gPSBOU0FjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRp
b24oYXhSb2xlLCBbc2VsZiBzdWJyb2xlXSk7CkBAIC0yMjk1LDIzICsyMjkxLDIzIEBAIEFMTE9X
X0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogCiAtIChOU1N0cmluZyAqKWNvbXB1dGVkUm9s
ZVN0cmluZwogewotICAgIGlmICghbV9vYmplY3QpCisgICAgaWYgKCFzZWxmLmF4QmFja2luZ09i
amVjdCkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gbV9vYmplY3QtPmNvbXB1dGVk
Um9sZVN0cmluZygpOworICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+Y29tcHV0ZWRS
b2xlU3RyaW5nKCk7CiB9CiAKIC0gKGlkKXNjcm9sbFZpZXdQYXJlbnQKIHsKICAgICByZXR1cm4g
QWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbcHJvdGVjdGVk
U2VsZiA9IFJldGFpblB0cjxXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4oc2VsZildICgp
IC0+IGlkIHsKLSAgICAgICAgaWYgKCFpczxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldz4ocHJvdGVj
dGVkU2VsZi0+bV9vYmplY3QpKQorICAgICAgICBpZiAoIWlzPEFjY2Vzc2liaWxpdHlTY3JvbGxW
aWV3Pihwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdCkpCiAgICAgICAgICAgICBy
ZXR1cm4gbmlsOwogCiAgICAgICAgIC8vIElmIHRoaXMgc2Nyb2xsIHZpZXcgcHJvdmlkZXMgaXQn
cyBwYXJlbnQgb2JqZWN0IChiZWNhdXNlIGl0J3MgYSBzdWItZnJhbWUpLCB0aGVuCiAgICAgICAg
IC8vIHdlIHNob3VsZCBub3QgZmluZCB0aGUgcmVtb3RlQWNjZXNzaWJpbGl0eVBhcmVudC4KLSAg
ICAgICAgaWYgKHByb3RlY3RlZFNlbGYtPm1fb2JqZWN0LT5wYXJlbnRPYmplY3QoKSkKKyAgICAg
ICAgaWYgKHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0LT5wYXJlbnRPYmplY3Qo
KSkKICAgICAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICAgICAgU2Nyb2xsVmlldyogc2Nyb2xs
ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+KCpwcm90ZWN0ZWRTZWxmLT5tX29i
amVjdCkuc2Nyb2xsVmlldygpOworICAgICAgICBTY3JvbGxWaWV3KiBzY3JvbGwgPSBkb3duY2Fz
dDxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldz4oKnByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5n
T2JqZWN0KS5zY3JvbGxWaWV3KCk7CiAgICAgICAgIGlmICghc2Nyb2xsKQogICAgICAgICAgICAg
cmV0dXJuIG5pbDsKIApAQCAtMjMyNCwxNCArMjMyMCwxNCBAQCBBTExPV19ERVBSRUNBVEVEX0RF
Q0xBUkFUSU9OU19FTkQKIAogLSAoTlNTdHJpbmcgKil2YWx1ZURlc2NyaXB0aW9uRm9yTWV0ZXIK
IHsKLSAgICBpZiAoIW1fb2JqZWN0KQorICAgIGlmICghc2VsZi5heEJhY2tpbmdPYmplY3QpCiAg
ICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0gICAgU3RyaW5nIHZhbHVlRGVzY3JpcHRpb24gPSBt
X29iamVjdC0+dmFsdWVEZXNjcmlwdGlvbigpOworICAgIFN0cmluZyB2YWx1ZURlc2NyaXB0aW9u
ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnZhbHVlRGVzY3JpcHRpb24oKTsKICNpZiBFTkFCTEUo
TUVURVJfRUxFTUVOVCkKLSAgICBpZiAoIWlzPEFjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRv
cj4obV9vYmplY3QpKQorICAgIGlmICghaXM8QWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9y
PihzZWxmLmF4QmFja2luZ09iamVjdCkpCiAgICAgICAgIHJldHVybiB2YWx1ZURlc2NyaXB0aW9u
OwotICAgIGF1dG8gJm1ldGVyID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNh
dG9yPigqbV9vYmplY3QpOworICAgIGF1dG8gJm1ldGVyID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0
eVByb2dyZXNzSW5kaWNhdG9yPigqc2VsZi5heEJhY2tpbmdPYmplY3QpOwogICAgIFN0cmluZyBn
YXVnZVJlZ2lvblZhbHVlID0gbWV0ZXIuZ2F1Z2VSZWdpb25WYWx1ZURlc2NyaXB0aW9uKCk7CiAg
ICAgaWYgKCFnYXVnZVJlZ2lvblZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICBTdHJpbmdCdWls
ZGVyIGJ1aWxkZXI7CkBAIC0yMzU1LDcgKzIzNTEsNyBAQCBBTExPV19ERVBSRUNBVEVEX0RFQ0xB
UkFUSU9OU19FTkQKICAgICAgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VO
RAogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGF1dG8qIGZ2ID0gcHJvdGVjdGVkU2VsZi0+bV9v
YmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCkpCisgICAgICAgIGlmIChhdXRvKiBmdiA9IHByb3Rl
Y3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0LT5kb2N1bWVudEZyYW1lVmlldygpKQogICAg
ICAgICAgICAgcmV0dXJuIFtmdi0+cGxhdGZvcm1XaWRnZXQoKSB3aW5kb3ddOwogCiAgICAgICAg
IHJldHVybiBuaWw7CkBAIC0yMzcyLDcgKzIzNjgsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExF
TUVOVEFUSU9OU19FTkQKICAgICBpZiAoIVtzZWxmIHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9yZV0p
CiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc0RldGFjaGVk
RnJvbVBhcmVudCgpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNEZXRhY2hlZEZy
b21QYXJlbnQoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKICAgICBpZiAoW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlSb2xlQXR0cmlidXRlXSkKQEAg
LTIzOTYsOCArMjM5Miw4IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAog
ICAgICAgICAgICAgcmV0dXJuIHNjcm9sbFZpZXdQYXJlbnQ7CiAgICAgICAgIAogICAgICAgICAv
LyBUcmVlIGl0ZW0gKGNoYW5nZWQgdG8gQVhSb3dzKSBjYW4gb25seSByZXBvcnQgdGhlIHRyZWUg
KEFYT3V0bGluZSkgYXMgaXRzIHBhcmVudC4KLSAgICAgICAgaWYgKF9heEJhY2tpbmdPYmplY3Qt
PmlzVHJlZUl0ZW0oKSkgewotICAgICAgICAgICAgYXV0byBwYXJlbnQgPSBfYXhCYWNraW5nT2Jq
ZWN0LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5pc1RyZWVJdGVtKCkpIHsKKyAgICAgICAgICAgIGF1dG8gcGFyZW50ID0gc2VsZi5h
eEJhY2tpbmdPYmplY3QtPnBhcmVudE9iamVjdFVuaWdub3JlZCgpOwogICAgICAgICAgICAgd2hp
bGUgKHBhcmVudCkgewogICAgICAgICAgICAgICAgIGlmIChwYXJlbnQtPmlzVHJlZSgpKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7CkBAIC0yNDA1LDEzICsy
NDAxLDEzIEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBhdXRvIHBhcmVudCA9IF9heEJhY2tp
bmdPYmplY3QtPnBhcmVudE9iamVjdFVuaWdub3JlZCgpOworICAgICAgICBhdXRvIHBhcmVudCA9
IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKICAgICAgICAg
aWYgKCFwYXJlbnQpCiAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICAKICAgICAgICAg
Ly8gSW4gV2ViS2l0MSwgdGhlIHNjcm9sbCB2aWV3IGlzIHByb3ZpZGVkIGJ5IHRoZSBzeXN0ZW0g
KHRoZSBhdHRhY2htZW50IHZpZXcpLCBzbyB0aGUgcGFyZW50CiAgICAgICAgIC8vIHNob3VsZCBi
ZSByZXBvcnRlZCBkaXJlY3RseSBhcyBzdWNoLgotICAgICAgICBpZiAobV9vYmplY3QtPmlzV2Vi
QXJlYSgpICYmIHBhcmVudC0+aXNBdHRhY2htZW50KCkpCisgICAgICAgIGlmIChzZWxmLmF4QmFj
a2luZ09iamVjdC0+aXNXZWJBcmVhKCkgJiYgcGFyZW50LT5pc0F0dGFjaG1lbnQoKSkKICAgICAg
ICAgICAgIHJldHVybiBbcGFyZW50LT53cmFwcGVyKCkgYXR0YWNobWVudFZpZXddOwogICAgICAg
ICAKICAgICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOwpAQCAtMjQyNiwxMyArMjQyMiwx
MyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgCiAgICAg
ICAgIC8vIFRoZSB0cmVlJ3MgKEFYT3V0bGluZSkgY2hpbGRyZW4gYXJlIHN1cHBvc2VkIHRvIGJl
IGl0cyByb3dzIGFuZCBjb2x1bW5zLgogICAgICAgICAvLyBUaGUgQVJJQSBzcGVjIGRvZXNuJ3Qg
aGF2ZSBjb2x1bW5zLCBzbyB3ZSBqdXN0IG5lZWQgcm93cy4KLSAgICAgICAgaWYgKG1fb2JqZWN0
LT5pc1RyZWUoKSkKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1RyZWUoKSkK
ICAgICAgICAgICAgIHJldHVybiBbc2VsZiBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNB
Y2Nlc3NpYmlsaXR5Um93c0F0dHJpYnV0ZV07CiAgICAgICAgIAogICAgICAgICAvLyBBIHRyZWUg
aXRlbSBzaG91bGQgb25seSBleHBvc2UgaXRzIGNvbnRlbnQgYXMgaXRzIGNoaWxkcmVuIChub3Qg
aXRzIHJvd3MpCi0gICAgICAgIGlmIChtX29iamVjdC0+aXNUcmVlSXRlbSgpKSB7CisgICAgICAg
IGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUcmVlSXRlbSgpKSB7CiAgICAgICAgICAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY29udGVudENv
cHk7Ci0gICAgICAgICAgICBtX29iamVjdC0+YXJpYVRyZWVJdGVtQ29udGVudChjb250ZW50Q29w
eSk7CisgICAgICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+YXJpYVRyZWVJdGVtQ29udGVu
dChjb250ZW50Q29weSk7CiAgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShjb250
ZW50Q29weSk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0yNDQwLDc4ICsyNDM2LDc5IEBAIEFM
TE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgIH0KICAgICAKICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZENo
aWxkcmVuQXR0cmlidXRlXSkgewotICAgICAgICBpZiAobV9vYmplY3QtPmNhbkhhdmVTZWxlY3Rl
ZENoaWxkcmVuKCkpIHsKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5jYW5IYXZl
U2VsZWN0ZWRDaGlsZHJlbigpKSB7CiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igc2VsZWN0ZWRDaGlsZHJlbkNvcHk7Ci0gICAgICAg
ICAgICBtX29iamVjdC0+c2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZENoaWxkcmVuQ29weSk7Cisg
ICAgICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+c2VsZWN0ZWRDaGlsZHJlbihzZWxlY3Rl
ZENoaWxkcmVuQ29weSk7CiAgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShzZWxl
Y3RlZENoaWxkcmVuQ29weSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG5pbDsKICAgICB9
CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3Np
YmlsaXR5VmlzaWJsZUNoaWxkcmVuQXR0cmlidXRlXSkgewotICAgICAgICBpZiAobV9vYmplY3Qt
PmlzTGlzdEJveCgpKSB7CisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNMaXN0
Qm94KCkpIHsKICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlD
aGlsZHJlblZlY3RvciB2aXNpYmxlQ2hpbGRyZW5Db3B5OwotICAgICAgICAgICAgbV9vYmplY3Qt
PnZpc2libGVDaGlsZHJlbih2aXNpYmxlQ2hpbGRyZW5Db3B5KTsKKyAgICAgICAgICAgIHNlbGYu
YXhCYWNraW5nT2JqZWN0LT52aXNpYmxlQ2hpbGRyZW4odmlzaWJsZUNoaWxkcmVuQ29weSk7CiAg
ICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheSh2aXNpYmxlQ2hpbGRyZW5Db3B5KTsK
ICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChtX29iamVjdC0+aXNMaXN0KCkpCisKKyAgICAg
ICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0xpc3QoKSkKICAgICAgICAgICAgIHJldHVy
biBbc2VsZiBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW5BdHRyaWJ1dGVdOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbmlsOwogICAgIH0KICAg
ICAKICAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzV2ViQXJlYSgpKSB7CisgICAgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc1dlYkFyZWEoKSkgewogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhMaW5rVUlFbGVtZW50cyJdKSB7CiAgICAgICAgICAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgbGlua3M7Ci0g
ICAgICAgICAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0PigqbV9vYmplY3Qp
LmdldERvY3VtZW50TGlua3MobGlua3MpOworICAgICAgICAgICAgZG93bmNhc3Q8QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdD4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KS5nZXREb2N1bWVudExpbmtz
KGxpbmtzKTsKICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGxpbmtzKTsKICAg
ICAgICAgfQogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhM
b2FkZWQiXSkKLSAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6bV9v
YmplY3QtPmlzTG9hZGVkKCldOworICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJX
aXRoQm9vbDpzZWxmLmF4QmFja2luZ09iamVjdC0+aXNMb2FkZWQoKV07CiAgICAgICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWExheW91dENvdW50Il0pCi0gICAgICAg
ICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bV9vYmplY3QtPmxheW91dENvdW50
KCldOworICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50OnNlbGYuYXhC
YWNraW5nT2JqZWN0LT5sYXlvdXRDb3VudCgpXTsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlMb2FkaW5nUHJvZ3Jlc3NBdHRyaWJ1dGVd
KQotICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOm1fb2JqZWN0
LT5lc3RpbWF0ZWRMb2FkaW5nUHJvZ3Jlc3MoKV07CisgICAgICAgICAgICByZXR1cm4gW05TTnVt
YmVyIG51bWJlcldpdGhEb3VibGU6c2VsZi5heEJhY2tpbmdPYmplY3QtPmVzdGltYXRlZExvYWRp
bmdQcm9ncmVzcygpXTsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzpOU0FjY2Vzc2liaWxpdHlQcmV2ZW50S2V5Ym9hcmRET01FdmVudERpc3BhdGNoQXR0cmlidXRl
XSkKLSAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6bV9vYmplY3Qt
PnByZXZlbnRLZXlib2FyZERPTUV2ZW50RGlzcGF0Y2goKV07CisgICAgICAgICAgICByZXR1cm4g
W05TTnVtYmVyIG51bWJlcldpdGhCb29sOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5wcmV2ZW50S2V5
Ym9hcmRET01FdmVudERpc3BhdGNoKCldOwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUNhcmV0QnJvd3NpbmdFbmFibGVkQXR0cmlidXRl
XSkKLSAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6bV9vYmplY3Qt
PmNhcmV0QnJvd3NpbmdFbmFibGVkKCldOworICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBu
dW1iZXJXaXRoQm9vbDpzZWxmLmF4QmFja2luZ09iamVjdC0+Y2FyZXRCcm93c2luZ0VuYWJsZWQo
KV07CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3Np
YmlsaXR5V2ViU2Vzc2lvbklEQXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiBAKG1fb2Jq
ZWN0LT5zZXNzaW9uSUQoKSk7CisgICAgICAgICAgICByZXR1cm4gQChzZWxmLmF4QmFja2luZ09i
amVjdC0+c2Vzc2lvbklEKCkpOwogICAgIH0KICAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzVGV4
dENvbnRyb2woKSkgeworICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUZXh0Q29udHJv
bCgpKSB7CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNj
ZXNzaWJpbGl0eU51bWJlck9mQ2hhcmFjdGVyc0F0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIGlu
dCBsZW5ndGggPSBtX29iamVjdC0+dGV4dExlbmd0aCgpOworICAgICAgICAgICAgaW50IGxlbmd0
aCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT50ZXh0TGVuZ3RoKCk7CiAgICAgICAgICAgICBpZiAo
bGVuZ3RoIDwgMCkKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICAgICAgcmV0
dXJuIFtOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnQ6bGVuZ3RoXTsKICAgICAgICAgfQog
ICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxp
dHlTZWxlY3RlZFRleHRBdHRyaWJ1dGVdKSB7Ci0gICAgICAgICAgICBTdHJpbmcgc2VsZWN0ZWRU
ZXh0ID0gbV9vYmplY3QtPnNlbGVjdGVkVGV4dCgpOworICAgICAgICAgICAgU3RyaW5nIHNlbGVj
dGVkVGV4dCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZWxlY3RlZFRleHQoKTsKICAgICAgICAg
ICAgIGlmIChzZWxlY3RlZFRleHQuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5p
bDsKICAgICAgICAgICAgIHJldHVybiAoTlNTdHJpbmcqKXNlbGVjdGVkVGV4dDsKICAgICAgICAg
fQogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2li
aWxpdHlTZWxlY3RlZFRleHRSYW5nZUF0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIFBsYWluVGV4
dFJhbmdlIHRleHRSYW5nZSA9IG1fb2JqZWN0LT5zZWxlY3RlZFRleHRSYW5nZSgpOworICAgICAg
ICAgICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnNl
bGVjdGVkVGV4dFJhbmdlKCk7CiAgICAgICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRo
UmFuZ2U6TlNNYWtlUmFuZ2UodGV4dFJhbmdlLnN0YXJ0LCB0ZXh0UmFuZ2UubGVuZ3RoKV07CiAg
ICAgICAgIH0KICAgICAgICAgLy8gVE9ETzogR2V0IGFjdHVhbCB2aXNpYmxlIHJhbmdlLiA8cmRh
cjovL3Byb2JsZW0vNDcxMjEwMT4KICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNoYXJhY3RlclJhbmdlQXR0cmlidXRlXSkK
LSAgICAgICAgICAgIHJldHVybiBtX29iamVjdC0+aXNQYXNzd29yZEZpZWxkKCkgPyBuaWwgOiBb
TlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTogTlNNYWtlUmFuZ2UoMCwgbV9vYmplY3QtPnRleHRMZW5n
dGgoKSldOworICAgICAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1Bhc3N3
b3JkRmllbGQoKSA/IG5pbCA6IFtOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOiBOU01ha2VSYW5nZSgw
LCBzZWxmLmF4QmFja2luZ09iamVjdC0+dGV4dExlbmd0aCgpKV07CiAgICAgICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eUluc2VydGlvblBvaW50
TGluZU51bWJlckF0dHJpYnV0ZV0pIHsKICAgICAgICAgICAgIC8vIGlmIHNlbGVjdGlvbkVuZCA+
IDAsIHRoZW4gdGhlcmUgaXMgc2VsZWN0ZWQgdGV4dCBhbmQgdGhpcyBxdWVzdGlvbiBzaG91bGQg
bm90IGJlIGFuc3dlcmVkCi0gICAgICAgICAgICBpZiAobV9vYmplY3QtPmlzUGFzc3dvcmRGaWVs
ZCgpIHx8IG1fb2JqZWN0LT5zZWxlY3Rpb25FbmQoKSA+IDApCisgICAgICAgICAgICBpZiAoc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmlzUGFzc3dvcmRGaWVsZCgpIHx8IHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5zZWxlY3Rpb25FbmQoKSA+IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgYXV0byBmb2N1c2VkT2JqZWN0ID0gZG93bmNhc3Q8QWNj
ZXNzaWJpbGl0eU9iamVjdD4obV9vYmplY3QtPmZvY3VzZWRVSUVsZW1lbnQoKSk7Ci0gICAgICAg
ICAgICBpZiAoZm9jdXNlZE9iamVjdCAhPSBtX29iamVjdCkKKyAgICAgICAgICAgIGF1dG8gZm9j
dXNlZE9iamVjdCA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlPYmplY3Q+KHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5mb2N1c2VkVUlFbGVtZW50KCkpOworICAgICAgICAgICAgaWYgKGZvY3VzZWRPYmpl
Y3QgIT0gc2VsZi5heEJhY2tpbmdPYmplY3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGZvY3VzZWRQb3NpdGlv
biA9IGZvY3VzZWRPYmplY3QtPnZpc2libGVQb3NpdGlvbkZvckluZGV4KGZvY3VzZWRPYmplY3Qt
PnNlbGVjdGlvblN0YXJ0KCksIHRydWUpOwotICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIgPSBt
X29iamVjdC0+bGluZUZvclBvc2l0aW9uKGZvY3VzZWRQb3NpdGlvbik7CisgICAgICAgICAgICBp
bnQgbGluZU51bWJlciA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5saW5lRm9yUG9zaXRpb24oZm9j
dXNlZFBvc2l0aW9uKTsKICAgICAgICAgICAgIGlmIChsaW5lTnVtYmVyIDwgMCkKICAgICAgICAg
ICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICAgICAgCkBAIC0yNTIwLDQ0ICsyNTE3LDQ0IEBA
IEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgIH0KICAgICAKICAgICBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlVUkxBdHRy
aWJ1dGVdKSB7Ci0gICAgICAgIFVSTCB1cmwgPSBtX29iamVjdC0+dXJsKCk7CisgICAgICAgIFVS
TCB1cmwgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+dXJsKCk7CiAgICAgICAgIGlmICh1cmwuaXNO
dWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICByZXR1cm4gKE5TVVJMKil1
cmw7CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0Fj
Y2Vzc2liaWxpdHlJbmNyZW1lbnRCdXR0b25BdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGF1dG8gaW5j
cmVtZW50QnV0dG9uID0gbV9vYmplY3QtPmluY3JlbWVudEJ1dHRvbigpOworICAgICAgICBhdXRv
IGluY3JlbWVudEJ1dHRvbiA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pbmNyZW1lbnRCdXR0b24o
KTsKICAgICAgICAgcmV0dXJuIGluY3JlbWVudEJ1dHRvbiA/IGluY3JlbWVudEJ1dHRvbi0+d3Jh
cHBlcigpIDogbmlsOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5RGVjcmVtZW50QnV0dG9uQXR0cmlidXRlXSkgewotICAgICAg
ICBhdXRvIGRlY3JlbWVudEJ1dHRvbiA9IG1fb2JqZWN0LT5kZWNyZW1lbnRCdXR0b24oKTsKKyAg
ICAgICAgYXV0byBkZWNyZW1lbnRCdXR0b24gPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZGVjcmVt
ZW50QnV0dG9uKCk7CiAgICAgICAgIHJldHVybiBkZWNyZW1lbnRCdXR0b24gPyBkZWNyZW1lbnRC
dXR0b24tPndyYXBwZXIoKSA6IG5pbDsKICAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOiBAIkFYVmlzaXRlZCJdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVy
IG51bWJlcldpdGhCb29sOiBtX29iamVjdC0+aXNWaXNpdGVkKCldOworICAgICAgICByZXR1cm4g
W05TTnVtYmVyIG51bWJlcldpdGhCb29sOiBzZWxmLmF4QmFja2luZ09iamVjdC0+aXNWaXNpdGVk
KCldOwogICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNj
ZXNzaWJpbGl0eVRpdGxlQXR0cmlidXRlXSkgewotICAgICAgICBpZiAoX2F4QmFja2luZ09iamVj
dC0+aXNBdHRhY2htZW50KCkpIHsKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5p
c0F0dGFjaG1lbnQoKSkgewogICAgICAgICAgICAgaWYgKFtbW3NlbGYgYXR0YWNobWVudFZpZXdd
IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lc10gY29udGFpbnNPYmplY3Q6TlNBY2Nlc3NpYmls
aXR5VGl0bGVBdHRyaWJ1dGVdKQogICAgICAgICAgICAgICAgIHJldHVybiBbW3NlbGYgYXR0YWNo
bWVudFZpZXddIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlUaXRs
ZUF0dHJpYnV0ZV07CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIE1ldGVyIGVsZW1l
bnRzIHNob3VsZCBjb21tdW5pY2F0ZSB0aGVpciBjb250ZW50IHZpYSBBWFZhbHVlRGVzY3JpcHRp
b24uCi0gICAgICAgIGlmIChtX29iamVjdC0+aXNNZXRlcigpKQorICAgICAgICBpZiAoc2VsZi5h
eEJhY2tpbmdPYmplY3QtPmlzTWV0ZXIoKSkKICAgICAgICAgICAgIHJldHVybiBbTlNTdHJpbmcg
c3RyaW5nXTsKICAgICAgICAgCiAgICAgICAgIC8vIFN1bW1hcnkgZWxlbWVudCBzaG91bGQgdXNl
IGl0cyB0ZXh0IG5vZGUgYXMgQVhUaXRsZS4KLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1N1bW1h
cnkoKSkKLSAgICAgICAgICAgIHJldHVybiBtX29iamVjdC0+dGV4dFVuZGVyRWxlbWVudCgpOwor
ICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzU3VtbWFyeSgpKQorICAgICAgICAg
ICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT50ZXh0VW5kZXJFbGVtZW50KCk7CiAgICAg
ICAgIAogICAgICAgICByZXR1cm4gW3NlbGYgYmFzZUFjY2Vzc2liaWxpdHlUaXRsZV07CiAgICAg
fQogICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNz
aWJpbGl0eURlc2NyaXB0aW9uQXR0cmlidXRlXSkgewotICAgICAgICBpZiAoX2F4QmFja2luZ09i
amVjdC0+aXNBdHRhY2htZW50KCkpIHsKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5pc0F0dGFjaG1lbnQoKSkgewogICAgICAgICAgICAgaWYgKFtbW3NlbGYgYXR0YWNobWVudFZp
ZXddIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lc10gY29udGFpbnNPYmplY3Q6TlNBY2Nlc3Np
YmlsaXR5RGVzY3JpcHRpb25BdHRyaWJ1dGVdKQogICAgICAgICAgICAgICAgIHJldHVybiBbW3Nl
bGYgYXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2li
aWxpdHlEZXNjcmlwdGlvbkF0dHJpYnV0ZV07CiAgICAgICAgIH0KQEAgLTI1NjUsMTkgKzI1NjIs
MTkgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgfQogICAgIAog
ICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVZh
bHVlQXR0cmlidXRlXSkgewotICAgICAgICBpZiAoX2F4QmFja2luZ09iamVjdC0+aXNBdHRhY2ht
ZW50KCkpIHsKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0F0dGFjaG1lbnQo
KSkgewogICAgICAgICAgICAgaWYgKFtbW3NlbGYgYXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVOYW1lc10gY29udGFpbnNPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VmFsdWVBdHRy
aWJ1dGVdKQogICAgICAgICAgICAgICAgIHJldHVybiBbW3NlbGYgYXR0YWNobWVudFZpZXddIGFj
Y2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlWYWx1ZUF0dHJpYnV0ZV07
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1fb2JqZWN0LT5zdXBwb3J0c1JhbmdlVmFsdWUoKSkK
LSAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0Om1fb2JqZWN0LT52
YWx1ZUZvclJhbmdlKCldOwotICAgICAgICBpZiAobV9vYmplY3QtPnJvbGVWYWx1ZSgpID09IEFj
Y2Vzc2liaWxpdHlSb2xlOjpTbGlkZXJUaHVtYikKLSAgICAgICAgICAgIHJldHVybiBbTlNOdW1i
ZXIgbnVtYmVyV2l0aEZsb2F0Om1fb2JqZWN0LT5wYXJlbnRPYmplY3QoKS0+dmFsdWVGb3JSYW5n
ZSgpXTsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc0hlYWRpbmcoKSkKLSAgICAgICAgICAgIHJl
dHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDptX29iamVjdC0+aGVhZGluZ0xldmVsKCldOwor
ICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnN1cHBvcnRzUmFuZ2VWYWx1ZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6c2VsZi5heEJhY2tp
bmdPYmplY3QtPnZhbHVlRm9yUmFuZ2UoKV07CisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09i
amVjdC0+cm9sZVZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OlNsaWRlclRodW1iKQorICAg
ICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6c2VsZi5heEJhY2tpbmdP
YmplY3QtPnBhcmVudE9iamVjdCgpLT52YWx1ZUZvclJhbmdlKCldOworICAgICAgICBpZiAoc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmlzSGVhZGluZygpKQorICAgICAgICAgICAgcmV0dXJuIFtOU051
bWJlciBudW1iZXJXaXRoSW50OnNlbGYuYXhCYWNraW5nT2JqZWN0LT5oZWFkaW5nTGV2ZWwoKV07
CiAgICAgICAgIAotICAgICAgICBpZiAobV9vYmplY3QtPmlzQ2hlY2tib3hPclJhZGlvKCkgfHwg
bV9vYmplY3QtPmlzTWVudUl0ZW0oKSB8fCBtX29iamVjdC0+aXNTd2l0Y2goKSB8fCBtX29iamVj
dC0+aXNUb2dnbGVCdXR0b24oKSkgewotICAgICAgICAgICAgc3dpdGNoIChtX29iamVjdC0+Y2hl
Y2tib3hPclJhZGlvVmFsdWUoKSkgeworICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3Qt
PmlzQ2hlY2tib3hPclJhZGlvKCkgfHwgc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWVudUl0ZW0o
KSB8fCBzZWxmLmF4QmFja2luZ09iamVjdC0+aXNTd2l0Y2goKSB8fCBzZWxmLmF4QmFja2luZ09i
amVjdC0+aXNUb2dnbGVCdXR0b24oKSkgeworICAgICAgICAgICAgc3dpdGNoIChzZWxmLmF4QmFj
a2luZ09iamVjdC0+Y2hlY2tib3hPclJhZGlvVmFsdWUoKSkgewogICAgICAgICAgICAgY2FzZSBB
Y2Nlc3NpYmlsaXR5QnV0dG9uU3RhdGU6Ok9mZjoKICAgICAgICAgICAgICAgICByZXR1cm4gW05T
TnVtYmVyIG51bWJlcldpdGhJbnQ6MF07CiAgICAgICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlC
dXR0b25TdGF0ZTo6T246CkBAIC0yNTg4LDYyICsyNTg1LDYyIEBAIEFMTE9XX0RFUFJFQ0FURURf
SU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyByYWRp
byBncm91cHMgcmV0dXJuIHRoZSBzZWxlY3RlZCByYWRpbyBidXR0b24gYXMgdGhlIEFYVmFsdWUK
LSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1JhZGlvR3JvdXAoKSkgewotICAgICAgICAgICAgQVhD
b3JlT2JqZWN0KiByYWRpb0J1dHRvbiA9IG1fb2JqZWN0LT5zZWxlY3RlZFJhZGlvQnV0dG9uKCk7
CisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNSYWRpb0dyb3VwKCkpIHsKKyAg
ICAgICAgICAgIEFYQ29yZU9iamVjdCogcmFkaW9CdXR0b24gPSBzZWxmLmF4QmFja2luZ09iamVj
dC0+c2VsZWN0ZWRSYWRpb0J1dHRvbigpOwogICAgICAgICAgICAgaWYgKCFyYWRpb0J1dHRvbikK
ICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICAgICAgcmV0dXJuIHJhZGlvQnV0
dG9uLT53cmFwcGVyKCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChtX29iamVj
dC0+aXNUYWJMaXN0KCkpIHsKLSAgICAgICAgICAgIEFYQ29yZU9iamVjdCogdGFiSXRlbSA9IG1f
b2JqZWN0LT5zZWxlY3RlZFRhYkl0ZW0oKTsKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5pc1RhYkxpc3QoKSkgeworICAgICAgICAgICAgQVhDb3JlT2JqZWN0KiB0YWJJdGVtID0g
c2VsZi5heEJhY2tpbmdPYmplY3QtPnNlbGVjdGVkVGFiSXRlbSgpOwogICAgICAgICAgICAgaWYg
KCF0YWJJdGVtKQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgICAgICByZXR1
cm4gdGFiSXRlbS0+d3JhcHBlcigpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAo
bV9vYmplY3QtPmlzVGFiSXRlbSgpKQotICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1i
ZXJXaXRoSW50Om1fb2JqZWN0LT5pc1NlbGVjdGVkKCldOworICAgICAgICBpZiAoc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmlzVGFiSXRlbSgpKQorICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBu
dW1iZXJXaXRoSW50OnNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1NlbGVjdGVkKCldOwogICAgICAg
ICAKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc0NvbG9yV2VsbCgpKSB7CisgICAgICAgIGlmIChz
ZWxmLmF4QmFja2luZ09iamVjdC0+aXNDb2xvcldlbGwoKSkgewogICAgICAgICAgICAgaW50IHIs
IGcsIGI7Ci0gICAgICAgICAgICBtX29iamVjdC0+Y29sb3JWYWx1ZShyLCBnLCBiKTsKKyAgICAg
ICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5jb2xvclZhbHVlKHIsIGcsIGIpOwogICAgICAg
ICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAicmdiICU3LjVmICU3LjVm
ICU3LjVmIDEiLCByIC8gMjU1LiwgZyAvIDI1NS4sIGIgLyAyNTUuXTsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5zdHJpbmdWYWx1ZSgpOworICAgICAgICBy
ZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPnN0cmluZ1ZhbHVlKCk7CiAgICAgfQogCiAgICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcgKilrQVhNZW51SXRl
bU1hcmtDaGFyQXR0cmlidXRlXSkgewogICAgICAgICBjb25zdCB1bmljaGFyIGNoID0gMHgyNzEz
OyAvLyDinJMgdXNlZCBvbiBNYWMgZm9yIHNlbGVjdGVkIG1lbnUgaXRlbXMuCi0gICAgICAgIHJl
dHVybiAobV9vYmplY3QtPmlzQ2hlY2tlZCgpKSA/IFtOU1N0cmluZyBzdHJpbmdXaXRoQ2hhcmFj
dGVyczomY2ggbGVuZ3RoOjFdIDogbmlsOworICAgICAgICByZXR1cm4gKHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5pc0NoZWNrZWQoKSkgPyBbTlNTdHJpbmcgc3RyaW5nV2l0aENoYXJhY3RlcnM6JmNo
IGxlbmd0aDoxXSA6IG5pbDsKICAgICB9CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5TWluVmFsdWVBdHRyaWJ1dGVdKSB7CiAgICAg
ICAgIC8vIEluZGV0ZXJtaW5hdGUgcHJvZ3Jlc3MgaW5kaWNhdG9yIHNob3VsZCByZXR1cm4gMC4K
LSAgICAgICAgaWYgKG1fb2JqZWN0LT5hcmlhUm9sZUF0dHJpYnV0ZSgpID09IEFjY2Vzc2liaWxp
dHlSb2xlOjpQcm9ncmVzc0luZGljYXRvciAmJiAhbV9vYmplY3QtPmhhc0FSSUFWYWx1ZU5vdygp
KQorICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmFyaWFSb2xlQXR0cmlidXRlKCkg
PT0gQWNjZXNzaWJpbGl0eVJvbGU6OlByb2dyZXNzSW5kaWNhdG9yICYmICFzZWxmLmF4QmFja2lu
Z09iamVjdC0+aGFzQVJJQVZhbHVlTm93KCkpCiAgICAgICAgICAgICByZXR1cm4gQDA7Ci0gICAg
ICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0Om1fb2JqZWN0LT5taW5WYWx1ZUZv
clJhbmdlKCldOworICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpzZWxm
LmF4QmFja2luZ09iamVjdC0+bWluVmFsdWVGb3JSYW5nZSgpXTsKICAgICB9CiAgICAgCiAgICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5TWF4VmFs
dWVBdHRyaWJ1dGVdKSB7CiAgICAgICAgIC8vIEluZGV0ZXJtaW5hdGUgcHJvZ3Jlc3MgaW5kaWNh
dG9yIHNob3VsZCByZXR1cm4gMC4KLSAgICAgICAgaWYgKG1fb2JqZWN0LT5hcmlhUm9sZUF0dHJp
YnV0ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpQcm9ncmVzc0luZGljYXRvciAmJiAhbV9vYmpl
Y3QtPmhhc0FSSUFWYWx1ZU5vdygpKQorICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3Qt
PmFyaWFSb2xlQXR0cmlidXRlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OlByb2dyZXNzSW5kaWNh
dG9yICYmICFzZWxmLmF4QmFja2luZ09iamVjdC0+aGFzQVJJQVZhbHVlTm93KCkpCiAgICAgICAg
ICAgICByZXR1cm4gQDA7Ci0gICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0
Om1fb2JqZWN0LT5tYXhWYWx1ZUZvclJhbmdlKCldOworICAgICAgICByZXR1cm4gW05TTnVtYmVy
IG51bWJlcldpdGhGbG9hdDpzZWxmLmF4QmFja2luZ09iamVjdC0+bWF4VmFsdWVGb3JSYW5nZSgp
XTsKICAgICB9CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzog
TlNBY2Nlc3NpYmlsaXR5SGVscEF0dHJpYnV0ZV0pCiAgICAgICAgIHJldHVybiBbc2VsZiBiYXNl
QWNjZXNzaWJpbGl0eUhlbHBUZXh0XTsKICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlGb2N1c2VkQXR0cmlidXRlXSkKLSAgICAgICAg
cmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDogbV9vYmplY3QtPmlzRm9jdXNlZCgpXTsK
KyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDogc2VsZi5heEJhY2tpbmdP
YmplY3QtPmlzRm9jdXNlZCgpXTsKICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlFbmFibGVkQXR0cmlidXRlXSkKLSAgICAgICAgcmV0
dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDogbV9vYmplY3QtPmlzRW5hYmxlZCgpXTsKKyAg
ICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDogc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmlzRW5hYmxlZCgpXTsKICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTaXplQXR0cmlidXRlXSkgewotICAgICAgICBJbnRTaXpl
IHMgPSBzbmFwcGVkSW50UmVjdChtX29iamVjdC0+ZWxlbWVudFJlY3QoKSkuc2l6ZSgpOworICAg
ICAgICBJbnRTaXplIHMgPSBzbmFwcGVkSW50UmVjdChzZWxmLmF4QmFja2luZ09iamVjdC0+ZWxl
bWVudFJlY3QoKSkuc2l6ZSgpOwogICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoU2l6
ZTogTlNNYWtlU2l6ZShzLndpZHRoKCksIHMuaGVpZ2h0KCkpXTsKICAgICB9CiAgICAgCkBAIC0y
NjU5LDI5ICsyNjU2LDI5IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAog
ICAgICAgICByZXR1cm4gW3NlbGYgd2luZG93RWxlbWVudDphdHRyaWJ1dGVOYW1lXTsKIAogICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5QWNjZXNz
S2V5QXR0cmlidXRlXSkgewotICAgICAgICBBdG9tU3RyaW5nIGFjY2Vzc0tleSA9IG1fb2JqZWN0
LT5hY2Nlc3NLZXkoKTsKKyAgICAgICAgQXRvbVN0cmluZyBhY2Nlc3NLZXkgPSBzZWxmLmF4QmFj
a2luZ09iamVjdC0+YWNjZXNzS2V5KCk7CiAgICAgICAgIGlmIChhY2Nlc3NLZXkuaXNOdWxsKCkp
CiAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICByZXR1cm4gYWNjZXNzS2V5OwogICAg
IH0KICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eUxpbmtSZWxhdGlvbnNoaXBUeXBlQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIG1f
b2JqZWN0LT5saW5rUmVsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5saW5rUmVsVmFsdWUoKTsKICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVRhYnNBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlmICht
X29iamVjdC0+aXNUYWJMaXN0KCkpIHsKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5pc1RhYkxpc3QoKSkgewogICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yIHRhYnNDaGlsZHJlbjsKLSAgICAgICAgICAgIG1fb2JqZWN0
LT50YWJDaGlsZHJlbih0YWJzQ2hpbGRyZW4pOworICAgICAgICAgICAgc2VsZi5heEJhY2tpbmdP
YmplY3QtPnRhYkNoaWxkcmVuKHRhYnNDaGlsZHJlbik7CiAgICAgICAgICAgICByZXR1cm4gY29u
dmVydFRvTlNBcnJheSh0YWJzQ2hpbGRyZW4pOwogICAgICAgICB9CiAgICAgfQogICAgIAogICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q29udGVu
dHNBdHRyaWJ1dGVdKSB7CiAgICAgICAgIC8vIFRoZSBjb250ZW50cyBvZiBhIHRhYiBsaXN0IGFy
ZSBhbGwgdGhlIGNoaWxkcmVuIGV4Y2VwdCB0aGUgdGFicy4KLSAgICAgICAgaWYgKG1fb2JqZWN0
LT5pc1RhYkxpc3QoKSkgeworICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVGFi
TGlzdCgpKSB7CiAgICAgICAgICAgICBhdXRvIGNoaWxkcmVuID0gc2VsZi5jaGlsZHJlblZlY3Rv
ckFycmF5OwogICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNo
aWxkcmVuVmVjdG9yIHRhYnM7Ci0gICAgICAgICAgICBtX29iamVjdC0+dGFiQ2hpbGRyZW4odGFi
cyk7CisgICAgICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+dGFiQ2hpbGRyZW4odGFicyk7
CiAgICAgICAgICAgICBhdXRvIHRhYnNDaGlsZHJlbiA9IGNvbnZlcnRUb05TQXJyYXkodGFicyk7
CiAKICAgICAgICAgICAgIE5TTXV0YWJsZUFycmF5ICpjb250ZW50cyA9IFtOU011dGFibGVBcnJh
eSBhcnJheV07CkBAIC0yNjkwLDcgKzI2ODcsOSBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVO
VEFUSU9OU19FTkQKICAgICAgICAgICAgICAgICAgICAgW2NvbnRlbnRzIGFkZE9iamVjdDpjaGls
ZFdyYXBwZXJdOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRzOwot
ICAgICAgICB9IGVsc2UgaWYgKG1fb2JqZWN0LT5pc1Njcm9sbFZpZXcoKSkgeworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1Njcm9sbFZpZXcoKSkgewog
ICAgICAgICAgICAgLy8gQSBzY3JvbGxWaWV3J3MgY29udGVudHMgYXJlIGV2ZXJ5dGhpbmcgZXhj
ZXB0IHRoZSBzY3JvbGwgYmFycy4KICAgICAgICAgICAgIGF1dG8gY2hpbGRyZW4gPSBzZWxmLmNo
aWxkcmVuVmVjdG9yQXJyYXk7CiAgICAgICAgICAgICBOU011dGFibGVBcnJheSAqY29udGVudHMg
PSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwpAQCAtMjcwNSw4ICsyNzA0LDggQEAgQUxMT1dfREVQ
UkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAg
aWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKm1fb2JqZWN0KSAmJiBkb3duY2FzdDxBY2Nlc3Np
YmlsaXR5VGFibGU+KCptX29iamVjdCkuaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgp
KSB7Ci0gICAgICAgIGF1dG8mIHRhYmxlID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigq
bV9vYmplY3QpOworICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCpzZWxmLmF4QmFja2lu
Z09iamVjdCkgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqc2VsZi5heEJhY2tpbmdP
YmplY3QpLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSkgeworICAgICAgICBhdXRv
JiB0YWJsZSA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKnNlbGYuYXhCYWNraW5nT2Jq
ZWN0KTsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vz
c2liaWxpdHlSb3dzQXR0cmlidXRlXSkKICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0Fy
cmF5KHRhYmxlLnJvd3MoKSk7CiAgICAgICAgIApAQCAtMjcyNCw3ICsyNzIzLDcgQEAgQUxMT1df
REVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgIAogICAgICAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkUm93c0F0
dHJpYnV0ZV0pIHsKICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciBzZWxlY3RlZENoaWxkcmVuQ29weTsKLSAgICAgICAgICAgIG1fb2Jq
ZWN0LT5zZWxlY3RlZENoaWxkcmVuKHNlbGVjdGVkQ2hpbGRyZW5Db3B5KTsKKyAgICAgICAgICAg
IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZWxlY3RlZENoaWxkcmVuKHNlbGVjdGVkQ2hpbGRyZW5D
b3B5KTsKICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KHNlbGVjdGVkQ2hpbGRy
ZW5Db3B5KTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTI3NzEsOCArMjc3MCw4IEBAIEFMTE9X
X0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgcmV0dXJuIEAodGFi
bGUuYXhSb3dDb3VudCgpKTsKICAgICB9CiAgICAgCi0gICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlU
YWJsZUNvbHVtbj4oKm1fb2JqZWN0KSkgewotICAgICAgICBhdXRvJiBjb2x1bW4gPSBkb3duY2Fz
dDxBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4+KCptX29iamVjdCk7CisgICAgaWYgKGlzPEFjY2Vz
c2liaWxpdHlUYWJsZUNvbHVtbj4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KSkgeworICAgICAgICBh
dXRvJiBjb2x1bW4gPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4+KCpzZWxmLmF4
QmFja2luZ09iamVjdCk7CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJp
bmc6TlNBY2Nlc3NpYmlsaXR5SW5kZXhBdHRyaWJ1dGVdKQogICAgICAgICAgICAgcmV0dXJuIFtO
U051bWJlciBudW1iZXJXaXRoSW50OmNvbHVtbi5jb2x1bW5JbmRleCgpXTsKICAgICAgICAgCkBA
IC0yNzg5LDggKzI3ODgsOCBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQK
ICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxlQ2Vs
bD4oKm1fb2JqZWN0KSkgewotICAgICAgICBhdXRvJiBjZWxsID0gZG93bmNhc3Q8QWNjZXNzaWJp
bGl0eVRhYmxlQ2VsbD4oKm1fb2JqZWN0KTsKKyAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxl
Q2VsbD4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KSkgeworICAgICAgICBhdXRvJiBjZWxsID0gZG93
bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KTsKICAg
ICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlS
b3dJbmRleFJhbmdlQXR0cmlidXRlXSkgewogICAgICAgICAgICAgc3RkOjpwYWlyPHVuc2lnbmVk
LCB1bnNpZ25lZD4gcm93UmFuZ2U7CiAgICAgICAgICAgICBjZWxsLnJvd0luZGV4UmFuZ2Uocm93
UmFuZ2UpOwpAQCAtMjgxOCwxNSArMjgxNywxNSBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVO
VEFUSU9OU19FTkQKICAgICAgICAgICAgIHJldHVybiBAKGNlbGwuYXhSb3dJbmRleCgpKTsKICAg
ICB9CiAgICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc1RyZWUoKSkgeworICAgIGlmIChzZWxmLmF4
QmFja2luZ09iamVjdC0+aXNUcmVlKCkpIHsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFJvd3NBdHRyaWJ1dGVdKSB7CiAg
ICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3Igc2VsZWN0ZWRDaGlsZHJlbkNvcHk7Ci0gICAgICAgICAgICBtX29iamVjdC0+c2VsZWN0ZWRD
aGlsZHJlbihzZWxlY3RlZENoaWxkcmVuQ29weSk7CisgICAgICAgICAgICBzZWxmLmF4QmFja2lu
Z09iamVjdC0+c2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZENoaWxkcmVuQ29weSk7CiAgICAgICAg
ICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShzZWxlY3RlZENoaWxkcmVuQ29weSk7CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vz
c2liaWxpdHlSb3dzQXR0cmlidXRlXSkgewogICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVj
dDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd3NDb3B5OwotICAgICAgICAgICAgbV9v
YmplY3QtPmFyaWFUcmVlUm93cyhyb3dzQ29weSk7CisgICAgICAgICAgICBzZWxmLmF4QmFja2lu
Z09iamVjdC0+YXJpYVRyZWVSb3dzKHJvd3NDb3B5KTsKICAgICAgICAgICAgIHJldHVybiBjb252
ZXJ0VG9OU0FycmF5KHJvd3NDb3B5KTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTI4MzYsOCAr
MjgzNSw4IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgIH0KICAg
ICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0
eUluZGV4QXR0cmlidXRlXSkgewotICAgICAgICBpZiAobV9vYmplY3QtPmlzVHJlZUl0ZW0oKSkg
ewotICAgICAgICAgICAgQVhDb3JlT2JqZWN0KiBwYXJlbnQgPSBtX29iamVjdC0+cGFyZW50T2Jq
ZWN0KCk7CisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUcmVlSXRlbSgpKSB7
CisgICAgICAgICAgICBBWENvcmVPYmplY3QqIHBhcmVudCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5wYXJlbnRPYmplY3QoKTsKICAgICAgICAgICAgIGZvciAoOyBwYXJlbnQgJiYgIXBhcmVudC0+
aXNUcmVlKCk7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkpCiAgICAgICAgICAgICB7
IH0KICAgICAgICAgICAgIApAQCAtMjg1NCwyOSArMjg1MywzMSBAQCBBTExPV19ERVBSRUNBVEVE
X0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIG5p
bDsKICAgICAgICAgfQotICAgICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxlUm93PigqbV9v
YmplY3QpKSB7CisgICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGVSb3c+KCpzZWxmLmF4
QmFja2luZ09iamVjdCkpIHsKICAgICAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW5kZXhBdHRyaWJ1dGVdKQotICAgICAgICAgICAgICAg
IHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFi
bGVSb3c+KCptX29iamVjdCkucm93SW5kZXgoKV07CisgICAgICAgICAgICAgICAgcmV0dXJuIFtO
U051bWJlciBudW1iZXJXaXRoSW50OmRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZVJvdz4oKnNl
bGYuYXhCYWNraW5nT2JqZWN0KS5yb3dJbmRleCgpXTsKICAgICAgICAgfQogICAgIH0KICAgICAK
ICAgICAvLyBUaGUgcm93cyB0aGF0IGFyZSBjb25zaWRlcmVkIGluc2lkZSB0aGlzIHJvdy4KICAg
ICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eURpc2Ns
b3NlZFJvd3NBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNUcmVlSXRlbSgp
KSB7CisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUcmVlSXRlbSgpKSB7CiAg
ICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3Igcm93c0NvcHk7Ci0gICAgICAgICAgICBtX29iamVjdC0+YXJpYVRyZWVJdGVtRGlzY2xvc2Vk
Um93cyhyb3dzQ29weSk7CisgICAgICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+YXJpYVRy
ZWVJdGVtRGlzY2xvc2VkUm93cyhyb3dzQ29weSk7CiAgICAgICAgICAgICByZXR1cm4gY29udmVy
dFRvTlNBcnJheShyb3dzQ29weSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXM8QWNjZXNzaWJpbGl0
eUFSSUFHcmlkUm93PigqbV9vYmplY3QpKSB7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXM8
QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93Pigqc2VsZi5heEJhY2tpbmdPYmplY3QpKSB7CiAgICAg
ICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Ig
cm93c0NvcHk7Ci0gICAgICAgICAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c+
KCptX29iamVjdCkuZGlzY2xvc2VkUm93cyhyb3dzQ29weSk7CisgICAgICAgICAgICBkb3duY2Fz
dDxBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c+KCpzZWxmLmF4QmFja2luZ09iamVjdCkuZGlzY2xv
c2VkUm93cyhyb3dzQ29weSk7CiAgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShy
b3dzQ29weSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgLy8gVGhlIHJvdyB0aGF0IGNv
bnRhaW5zIHRoaXMgcm93LiBJdCBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIGZpcnN0IHBhcmVu
dCB0aGF0IGlzIGEgdHJlZWl0ZW0uCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlEaXNjbG9zZWRCeVJvd0F0dHJpYnV0ZV0pIHsKLSAgICAgICAg
aWYgKG1fb2JqZWN0LT5pc1RyZWVJdGVtKCkpIHsKLSAgICAgICAgICAgIEFYQ29yZU9iamVjdCog
cGFyZW50ID0gbV9vYmplY3QtPnBhcmVudE9iamVjdCgpOworICAgICAgICBpZiAoc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmlzVHJlZUl0ZW0oKSkgeworICAgICAgICAgICAgQVhDb3JlT2JqZWN0KiBw
YXJlbnQgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+cGFyZW50T2JqZWN0KCk7CiAgICAgICAgICAg
ICB3aGlsZSAocGFyZW50KSB7CiAgICAgICAgICAgICAgICAgaWYgKHBhcmVudC0+aXNUcmVlSXRl
bSgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7CkBAIC0y
ODg2LDggKzI4ODcsMTAgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAg
ICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXM8QWNj
ZXNzaWJpbGl0eUFSSUFHcmlkUm93PigqbV9vYmplY3QpKSB7Ci0gICAgICAgICAgICBBWENvcmVP
YmplY3QqIHJvdyA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdz4oKm1fb2JqZWN0
KS5kaXNjbG9zZWRCeVJvdygpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzPEFjY2Vzc2li
aWxpdHlBUklBR3JpZFJvdz4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KSkgeworICAgICAgICAgICAg
QVhDb3JlT2JqZWN0KiByb3cgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c+KCpz
ZWxmLmF4QmFja2luZ09iamVjdCkuZGlzY2xvc2VkQnlSb3coKTsKICAgICAgICAgICAgIGlmICgh
cm93KQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgICAgICByZXR1cm4gcm93
LT53cmFwcGVyKCk7CkBAIC0yODk2LDY2ICsyODk5LDY2IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1Q
TEVNRU5UQVRJT05TX0VORAogICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5RGlzY2xvc3VyZUxldmVsQXR0cmlidXRlXSkgewogICAgICAg
ICAvLyBDb252ZXJ0IGZyb20gMS1iYXNlZCBsZXZlbCAoZnJvbSBhcmlhLWxldmVsIHNwZWMpIHRv
IDAtYmFzZWQgbGV2ZWwgKE1hYykKLSAgICAgICAgaW50IGxldmVsID0gbV9vYmplY3QtPmhpZXJh
cmNoaWNhbExldmVsKCk7CisgICAgICAgIGludCBsZXZlbCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5oaWVyYXJjaGljYWxMZXZlbCgpOwogICAgICAgICBpZiAobGV2ZWwgPiAwKQogICAgICAgICAg
ICAgbGV2ZWwgLT0gMTsKICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50Omxl
dmVsXTsKICAgICB9CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0Fj
Y2Vzc2liaWxpdHlEaXNjbG9zaW5nQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJl
ciBudW1iZXJXaXRoQm9vbDptX29iamVjdC0+aXNFeHBhbmRlZCgpXTsKKyAgICAgICAgcmV0dXJu
IFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpzZWxmLmF4QmFja2luZ09iamVjdC0+aXNFeHBhbmRl
ZCgpXTsKICAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzTGlzdCgpICYmIFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlPcmllbnRhdGlvbkF0dHJpYnV0ZV0pCisg
ICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0xpc3QoKSAmJiBbYXR0cmlidXRlTmFtZSBp
c0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb25BdHRyaWJ1dGVdKQogICAg
ICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5VmVydGljYWxPcmllbnRhdGlvblZhbHVlOwogICAg
IAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IEAiQVhTZWxlY3RlZFRl
eHRNYXJrZXJSYW5nZSJdKQogICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRm9y
U2VsZWN0aW9uXTsKICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
OiBAIkFYU3RhcnRUZXh0TWFya2VyIl0pCi0gICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2Vy
Rm9yVmlzaWJsZVBvc2l0aW9uOnN0YXJ0T2ZEb2N1bWVudChfYXhCYWNraW5nT2JqZWN0LT5kb2N1
bWVudCgpKV07CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0
aW9uOnN0YXJ0T2ZEb2N1bWVudChzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKSldOwog
ICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IEAiQVhFbmRUZXh0TWFya2Vy
Il0pCi0gICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOmVu
ZE9mRG9jdW1lbnQoX2F4QmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKSldOworICAgICAgICByZXR1
cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjplbmRPZkRvY3VtZW50KHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5kb2N1bWVudCgpKV07CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlCbG9ja1F1b3RlTGV2ZWxBdHRyaWJ1
dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZEludDptX29i
amVjdC0+YmxvY2txdW90ZUxldmVsKCldOworICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJl
cldpdGhVbnNpZ25lZEludDpzZWxmLmF4QmFja2luZ09iamVjdC0+YmxvY2txdW90ZUxldmVsKCld
OwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFRhYmxlTGV2ZWwi
XSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50Om1fb2JqZWN0LT50YWJs
ZUxldmVsKCldOworICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6c2VsZi5h
eEJhY2tpbmdPYmplY3QtPnRhYmxlTGV2ZWwoKV07CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5TGlua2VkVUlFbGVtZW50c0F0dHJp
YnV0ZV0pIHsKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yIGxpbmtlZFVJRWxlbWVudHM7Ci0gICAgICAgIG1fb2JqZWN0LT5saW5rZWRVSUVs
ZW1lbnRzKGxpbmtlZFVJRWxlbWVudHMpOworICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+
bGlua2VkVUlFbGVtZW50cyhsaW5rZWRVSUVsZW1lbnRzKTsKICAgICAgICAgcmV0dXJuIGNvbnZl
cnRUb05TQXJyYXkobGlua2VkVUlFbGVtZW50cyk7CiAgICAgfQogICAgIAogICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkQXR0cmli
dXRlXSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDptX29iamVjdC0+
aXNTZWxlY3RlZCgpXTsKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpz
ZWxmLmF4QmFja2luZ09iamVjdC0+aXNTZWxlY3RlZCgpXTsKICAgICAKICAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlBUklBQ3VycmVudEF0dHJp
YnV0ZV0pCi0gICAgICAgIHJldHVybiBtX29iamVjdC0+Y3VycmVudFZhbHVlKCk7CisgICAgICAg
IHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+Y3VycmVudFZhbHVlKCk7CiAgICAgCi0gICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2VydmVz
QXNUaXRsZUZvclVJRWxlbWVudHNBdHRyaWJ1dGVdICYmIG1fb2JqZWN0LT5pc01lbnVCdXR0b24o
KSkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiB1aUVsZW1lbnQgPSBkb3duY2FzdDxB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0PigqbV9vYmplY3QpLm1lbnVGb3JNZW51QnV0dG9uKCk7
CisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5
U2VydmVzQXNUaXRsZUZvclVJRWxlbWVudHNBdHRyaWJ1dGVdICYmIHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5pc01lbnVCdXR0b24oKSkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiB1aUVs
ZW1lbnQgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Pigqc2VsZi5heEJhY2tp
bmdPYmplY3QpLm1lbnVGb3JNZW51QnV0dG9uKCk7CiAgICAgICAgIGlmICh1aUVsZW1lbnQpCiAg
ICAgICAgICAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OnVpRWxlbWVudC0+d3Jh
cHBlcigpXTsKICAgICB9CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlUaXRsZVVJRWxlbWVudEF0dHJpYnV0ZV0pIHsKLSAgICAgICAg
aWYgKCFtX29iamVjdC0+ZXhwb3Nlc1RpdGxlVUlFbGVtZW50KCkpCisgICAgICAgIGlmICghc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmV4cG9zZXNUaXRsZVVJRWxlbWVudCgpKQogICAgICAgICAgICAg
cmV0dXJuIG5pbDsKIAotICAgICAgICBBWENvcmVPYmplY3QqIG9iaiA9IG1fb2JqZWN0LT50aXRs
ZVVJRWxlbWVudCgpOworICAgICAgICBBWENvcmVPYmplY3QqIG9iaiA9IHNlbGYuYXhCYWNraW5n
T2JqZWN0LT50aXRsZVVJRWxlbWVudCgpOwogICAgICAgICBpZiAob2JqKQogICAgICAgICAgICAg
cmV0dXJuIG9iai0+d3JhcHBlcigpOwogICAgICAgICByZXR1cm4gbmlsOwogICAgIH0KICAgICAK
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVZh
bHVlRGVzY3JpcHRpb25BdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNNZXRl
cigpKQorICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWV0ZXIoKSkKICAgICAg
ICAgICAgIHJldHVybiBbc2VsZiB2YWx1ZURlc2NyaXB0aW9uRm9yTWV0ZXJdOwotICAgICAgICBy
ZXR1cm4gbV9vYmplY3QtPnZhbHVlRGVzY3JpcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIHNlbGYu
YXhCYWNraW5nT2JqZWN0LT52YWx1ZURlc2NyaXB0aW9uKCk7CiAgICAgfQogICAgIAogICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5T3JpZW50YXRp
b25BdHRyaWJ1dGVdKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbiBlbGVtZW50
T3JpZW50YXRpb24gPSBtX29iamVjdC0+b3JpZW50YXRpb24oKTsKKyAgICAgICAgQWNjZXNzaWJp
bGl0eU9yaWVudGF0aW9uIGVsZW1lbnRPcmllbnRhdGlvbiA9IHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5vcmllbnRhdGlvbigpOwogICAgICAgICBpZiAoZWxlbWVudE9yaWVudGF0aW9uID09IEFjY2Vz
c2liaWxpdHlPcmllbnRhdGlvbjo6VmVydGljYWwpCiAgICAgICAgICAgICByZXR1cm4gTlNBY2Nl
c3NpYmlsaXR5VmVydGljYWxPcmllbnRhdGlvblZhbHVlOwogICAgICAgICBpZiAoZWxlbWVudE9y
aWVudGF0aW9uID09IEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCkKQEAgLTI5
NjYsMjAgKzI5NjksMjAgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAg
ICAgfQogICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5SG9yaXpvbnRhbFNjcm9sbEJhckF0dHJpYnV0ZV0pIHsKLSAgICAgICAgQVhDb3Jl
T2JqZWN0KiBzY3JvbGxCYXIgPSBtX29iamVjdC0+c2Nyb2xsQmFyKEFjY2Vzc2liaWxpdHlPcmll
bnRhdGlvbjo6SG9yaXpvbnRhbCk7CisgICAgICAgIEFYQ29yZU9iamVjdCogc2Nyb2xsQmFyID0g
c2VsZi5heEJhY2tpbmdPYmplY3QtPnNjcm9sbEJhcihBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb246
Okhvcml6b250YWwpOwogICAgICAgICBpZiAoc2Nyb2xsQmFyKQogICAgICAgICAgICAgcmV0dXJu
IHNjcm9sbEJhci0+d3JhcHBlcigpOwogICAgICAgICByZXR1cm4gbmlsOwogICAgIH0KICAgICBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVZlcnRpY2Fs
U2Nyb2xsQmFyQXR0cmlidXRlXSkgewotICAgICAgICBBWENvcmVPYmplY3QqIHNjcm9sbEJhciA9
IG1fb2JqZWN0LT5zY3JvbGxCYXIoQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uOjpWZXJ0aWNhbCk7
CisgICAgICAgIEFYQ29yZU9iamVjdCogc2Nyb2xsQmFyID0gc2VsZi5heEJhY2tpbmdPYmplY3Qt
PnNjcm9sbEJhcihBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb246OlZlcnRpY2FsKTsKICAgICAgICAg
aWYgKHNjcm9sbEJhcikKICAgICAgICAgICAgIHJldHVybiBzY3JvbGxCYXItPndyYXBwZXIoKTsK
ICAgICAgICAgcmV0dXJuIG5pbDsKICAgICB9CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTb3J0RGlyZWN0aW9uQXR0cmlidXRlXSkg
ewotICAgICAgICBzd2l0Y2ggKG1fb2JqZWN0LT5zb3J0RGlyZWN0aW9uKCkpIHsKKyAgICAgICAg
c3dpdGNoIChzZWxmLmF4QmFja2luZ09iamVjdC0+c29ydERpcmVjdGlvbigpKSB7CiAgICAgICAg
IGNhc2UgQWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb246OkFzY2VuZGluZzoKICAgICAgICAgICAg
IHJldHVybiBOU0FjY2Vzc2liaWxpdHlBc2NlbmRpbmdTb3J0RGlyZWN0aW9uVmFsdWU7CiAgICAg
ICAgIGNhc2UgQWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb246OkRlc2NlbmRpbmc6CkBAIC0yOTkw
LDQ0ICsyOTkzLDQ0IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAg
IH0KICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eUxhbmd1YWdlQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5sYW5n
dWFnZSgpOworICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPmxhbmd1YWdlKCk7
CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2li
aWxpdHlFeHBhbmRlZEF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVy
V2l0aEJvb2w6bV9vYmplY3QtPmlzRXhwYW5kZWQoKV07CisgICAgICAgIHJldHVybiBbTlNOdW1i
ZXIgbnVtYmVyV2l0aEJvb2w6c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzRXhwYW5kZWQoKV07CiAg
ICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxp
dHlSZXF1aXJlZEF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0
aEJvb2w6bV9vYmplY3QtPmlzUmVxdWlyZWQoKV07CisgICAgICAgIHJldHVybiBbTlNOdW1iZXIg
bnVtYmVyV2l0aEJvb2w6c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzUmVxdWlyZWQoKV07CiAgICAg
CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlJ
bnZhbGlkQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5pbnZhbGlkU3RhdHVz
KCk7CisgICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+aW52YWxpZFN0YXR1cygp
OwogICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3Np
YmlsaXR5T3duc0F0dHJpYnV0ZV0pIHsKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGFyaWFPd25zOwotICAgICAgICBtX29iamVjdC0+YXJp
YU93bnNFbGVtZW50cyhhcmlhT3ducyk7CisgICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5h
cmlhT3duc0VsZW1lbnRzKGFyaWFPd25zKTsKICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJy
YXkoYXJpYU93bnMpOwogICAgIH0KICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUFSSUFQb3NJblNldEF0dHJpYnV0ZV0pCi0gICAgICAg
IHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDptX29iamVjdC0+cG9zSW5TZXQoKV07Cisg
ICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpzZWxmLmF4QmFja2luZ09iamVj
dC0+cG9zSW5TZXQoKV07CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlBUklBU2V0U2l6ZUF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBbTlNO
dW1iZXIgbnVtYmVyV2l0aEludDptX29iamVjdC0+c2V0U2l6ZSgpXTsKKyAgICAgICAgcmV0dXJu
IFtOU051bWJlciBudW1iZXJXaXRoSW50OnNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZXRTaXplKCld
OwogICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3Np
YmlsaXR5R3JhYmJlZEF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVy
V2l0aEJvb2w6bV9vYmplY3QtPmlzQVJJQUdyYWJiZWQoKV07CisgICAgICAgIHJldHVybiBbTlNO
dW1iZXIgbnVtYmVyV2l0aEJvb2w6c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzQVJJQUdyYWJiZWQo
KV07CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vz
c2liaWxpdHlEcm9wRWZmZWN0c0F0dHJpYnV0ZV0pIHsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4g
ZHJvcEVmZmVjdHMgPSBtX29iamVjdC0+ZGV0ZXJtaW5lQVJJQURyb3BFZmZlY3RzKCk7CisgICAg
ICAgIFZlY3RvcjxTdHJpbmc+IGRyb3BFZmZlY3RzID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmRl
dGVybWluZUFSSUFEcm9wRWZmZWN0cygpOwogICAgICAgICByZXR1cm4gY29udmVydFN0cmluZ3NU
b05TQXJyYXkoZHJvcEVmZmVjdHMpOwogICAgIH0KICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVBsYWNlaG9sZGVyVmFsdWVBdHRyaWJ1
dGVdKQotICAgICAgICByZXR1cm4gbV9vYmplY3QtPnBsYWNlaG9sZGVyVmFsdWUoKTsKKyAgICAg
ICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5wbGFjZWhvbGRlclZhbHVlKCk7CiAKICAg
ICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVZhbHVl
QXV0b2ZpbGxBdmFpbGFibGVBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gQChtX29iamVjdC0+
aXNWYWx1ZUF1dG9maWxsQXZhaWxhYmxlKCkpOworICAgICAgICByZXR1cm4gQChzZWxmLmF4QmFj
a2luZ09iamVjdC0+aXNWYWx1ZUF1dG9maWxsQXZhaWxhYmxlKCkpOwogICAgIAogICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmFsdWVBdXRvZmls
bFR5cGVBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIHN3aXRjaCAobV9vYmplY3QtPnZhbHVlQXV0b2Zp
bGxCdXR0b25UeXBlKCkpIHsKKyAgICAgICAgc3dpdGNoIChzZWxmLmF4QmFja2luZ09iamVjdC0+
dmFsdWVBdXRvZmlsbEJ1dHRvblR5cGUoKSkgewogICAgICAgICBjYXNlIEF1dG9GaWxsQnV0dG9u
VHlwZTo6Tm9uZToKICAgICAgICAgICAgIHJldHVybiBAIm5vbmUiOwogICAgICAgICBjYXNlIEF1
dG9GaWxsQnV0dG9uVHlwZTo6Q3JlZGVudGlhbHM6CkBAIC0zMDQyLDUzICszMDQ1LDUzIEBAIEFM
TE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgIH0KICAgICAKICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVZhbHVlQXV0b2Zp
bGxlZEF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBAKG1fb2JqZWN0LT5pc1ZhbHVlQXV0b2Zp
bGxlZCgpKTsKKyAgICAgICAgcmV0dXJuIEAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVmFsdWVB
dXRvZmlsbGVkKCkpOwogCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlIYXNQb3B1cEF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBbTlNOdW1i
ZXIgbnVtYmVyV2l0aEJvb2w6bV9vYmplY3QtPmhhc1BvcHVwKCldOworICAgICAgICByZXR1cm4g
W05TTnVtYmVyIG51bWJlcldpdGhCb29sOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5oYXNQb3B1cCgp
XTsKIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5RGF0ZXRpbWVWYWx1ZUF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBtX29iamVjdC0+ZGF0
ZXRpbWVBdHRyaWJ1dGVWYWx1ZSgpOworICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmRhdGV0aW1lQXR0cmlidXRlVmFsdWUoKTsKICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUlubGluZVRleHRBdHRyaWJ1dGVdKQot
ICAgICAgICByZXR1cm4gQChfYXhCYWNraW5nT2JqZWN0LT5pc0lubGluZVRleHQoKSk7CisgICAg
ICAgIHJldHVybiBAKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0lubGluZVRleHQoKSk7CiAgICAg
CiAgICAgLy8gQVJJQSBMaXZlIHJlZ2lvbiBhdHRyaWJ1dGVzLgogICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5QVJJQUxpdmVBdHRyaWJ1dGVdKQot
ICAgICAgICByZXR1cm4gbV9vYmplY3QtPmxpdmVSZWdpb25TdGF0dXMoKTsKKyAgICAgICAgcmV0
dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5saXZlUmVnaW9uU3RhdHVzKCk7CiAgICAgaWYgKFth
dHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlBUklBUmVsZXZhbnRB
dHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gbV9vYmplY3QtPmxpdmVSZWdpb25SZWxldmFudCgp
OworICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPmxpdmVSZWdpb25SZWxldmFu
dCgpOwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5QVJJQUF0b21pY0F0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVy
V2l0aEJvb2w6bV9vYmplY3QtPmxpdmVSZWdpb25BdG9taWMoKV07CisgICAgICAgIHJldHVybiBb
TlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6c2VsZi5heEJhY2tpbmdPYmplY3QtPmxpdmVSZWdpb25B
dG9taWMoKV07CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vz
c2liaWxpdHlFbGVtZW50QnVzeUF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBbTlNOdW1iZXIg
bnVtYmVyV2l0aEJvb2w6bV9vYmplY3QtPmlzQnVzeSgpXTsKKyAgICAgICAgcmV0dXJuIFtOU051
bWJlciBudW1iZXJXaXRoQm9vbDpzZWxmLmF4QmFja2luZ09iamVjdC0+aXNCdXN5KCldOwogICAg
IAogICAgIC8vIE1hdGhNTCBBdHRyaWJ1dGVzLgotICAgIGlmIChtX29iamVjdC0+aXNNYXRoRWxl
bWVudCgpKSB7CisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01hdGhFbGVtZW50KCkp
IHsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2li
aWxpdHlNYXRoUm9vdEluZGV4QXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiAobV9vYmpl
Y3QtPm1hdGhSb290SW5kZXhPYmplY3QoKSkgPyBtX29iamVjdC0+bWF0aFJvb3RJbmRleE9iamVj
dCgpLT53cmFwcGVyKCkgOiAwOworICAgICAgICAgICAgcmV0dXJuIChzZWxmLmF4QmFja2luZ09i
amVjdC0+bWF0aFJvb3RJbmRleE9iamVjdCgpKSA/IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRo
Um9vdEluZGV4T2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CiAgICAgICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWF0aFJvb3RSYWRpY2FuZEF0dHJp
YnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gKG1fb2JqZWN0LT5tYXRoUmFkaWNhbmRPYmplY3Qo
KSkgPyBtX29iamVjdC0+bWF0aFJhZGljYW5kT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CisgICAg
ICAgICAgICByZXR1cm4gKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoUmFkaWNhbmRPYmplY3Qo
KSkgPyBzZWxmLmF4QmFja2luZ09iamVjdC0+bWF0aFJhZGljYW5kT2JqZWN0KCktPndyYXBwZXIo
KSA6IDA7CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5TWF0aEZyYWN0aW9uTnVtZXJhdG9yQXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJl
dHVybiAobV9vYmplY3QtPm1hdGhOdW1lcmF0b3JPYmplY3QoKSkgPyBtX29iamVjdC0+bWF0aE51
bWVyYXRvck9iamVjdCgpLT53cmFwcGVyKCkgOiAwOworICAgICAgICAgICAgcmV0dXJuIChzZWxm
LmF4QmFja2luZ09iamVjdC0+bWF0aE51bWVyYXRvck9iamVjdCgpKSA/IHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5tYXRoTnVtZXJhdG9yT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CiAgICAgICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWF0aEZyYWN0
aW9uRGVub21pbmF0b3JBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIChtX29iamVjdC0+
bWF0aERlbm9taW5hdG9yT2JqZWN0KCkpID8gbV9vYmplY3QtPm1hdGhEZW5vbWluYXRvck9iamVj
dCgpLT53cmFwcGVyKCkgOiAwOworICAgICAgICAgICAgcmV0dXJuIChzZWxmLmF4QmFja2luZ09i
amVjdC0+bWF0aERlbm9taW5hdG9yT2JqZWN0KCkpID8gc2VsZi5heEJhY2tpbmdPYmplY3QtPm1h
dGhEZW5vbWluYXRvck9iamVjdCgpLT53cmFwcGVyKCkgOiAwOwogICAgICAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU1hdGhCYXNlQXR0cmlidXRl
XSkKLSAgICAgICAgICAgIHJldHVybiAobV9vYmplY3QtPm1hdGhCYXNlT2JqZWN0KCkpID8gbV9v
YmplY3QtPm1hdGhCYXNlT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CisgICAgICAgICAgICByZXR1
cm4gKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoQmFzZU9iamVjdCgpKSA/IHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5tYXRoQmFzZU9iamVjdCgpLT53cmFwcGVyKCkgOiAwOwogICAgICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU1hdGhTdWJzY3Jp
cHRBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIChtX29iamVjdC0+bWF0aFN1YnNjcmlw
dE9iamVjdCgpKSA/IG1fb2JqZWN0LT5tYXRoU3Vic2NyaXB0T2JqZWN0KCktPndyYXBwZXIoKSA6
IDA7CisgICAgICAgICAgICByZXR1cm4gKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoU3Vic2Ny
aXB0T2JqZWN0KCkpID8gc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhTdWJzY3JpcHRPYmplY3Qo
KS0+d3JhcHBlcigpIDogMDsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoU3VwZXJzY3JpcHRBdHRyaWJ1dGVdKQotICAgICAgICAg
ICAgcmV0dXJuIChtX29iamVjdC0+bWF0aFN1cGVyc2NyaXB0T2JqZWN0KCkpID8gbV9vYmplY3Qt
Pm1hdGhTdXBlcnNjcmlwdE9iamVjdCgpLT53cmFwcGVyKCkgOiAwOworICAgICAgICAgICAgcmV0
dXJuIChzZWxmLmF4QmFja2luZ09iamVjdC0+bWF0aFN1cGVyc2NyaXB0T2JqZWN0KCkpID8gc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPm1hdGhTdXBlcnNjcmlwdE9iamVjdCgpLT53cmFwcGVyKCkgOiAw
OwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJp
bGl0eU1hdGhVbmRlckF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gKG1fb2JqZWN0LT5t
YXRoVW5kZXJPYmplY3QoKSkgPyBtX29iamVjdC0+bWF0aFVuZGVyT2JqZWN0KCktPndyYXBwZXIo
KSA6IDA7CisgICAgICAgICAgICByZXR1cm4gKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoVW5k
ZXJPYmplY3QoKSkgPyBzZWxmLmF4QmFja2luZ09iamVjdC0+bWF0aFVuZGVyT2JqZWN0KCktPndy
YXBwZXIoKSA6IDA7CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
TlNBY2Nlc3NpYmlsaXR5TWF0aE92ZXJBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuICht
X29iamVjdC0+bWF0aE92ZXJPYmplY3QoKSkgPyBtX29iamVjdC0+bWF0aE92ZXJPYmplY3QoKS0+
d3JhcHBlcigpIDogMDsKKyAgICAgICAgICAgIHJldHVybiAoc2VsZi5heEJhY2tpbmdPYmplY3Qt
Pm1hdGhPdmVyT2JqZWN0KCkpID8gc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhPdmVyT2JqZWN0
KCktPndyYXBwZXIoKSA6IDA7CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWF0aEZlbmNlZE9wZW5BdHRyaWJ1dGVdKQotICAgICAgICAg
ICAgcmV0dXJuIG1fb2JqZWN0LT5tYXRoRmVuY2VkT3BlblN0cmluZygpOworICAgICAgICAgICAg
cmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoRmVuY2VkT3BlblN0cmluZygpOwogICAg
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU1h
dGhGZW5jZWRDbG9zZUF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gbV9vYmplY3QtPm1h
dGhGZW5jZWRDbG9zZVN0cmluZygpOworICAgICAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5tYXRoRmVuY2VkQ2xvc2VTdHJpbmcoKTsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoTGluZVRoaWNrbmVzc0F0dHJp
YnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnRlZ2VyOm1f
b2JqZWN0LT5tYXRoTGluZVRoaWNrbmVzcygpXTsKKyAgICAgICAgICAgIHJldHVybiBbTlNOdW1i
ZXIgbnVtYmVyV2l0aEludGVnZXI6c2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhMaW5lVGhpY2tu
ZXNzKCldOwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNj
ZXNzaWJpbGl0eU1hdGhQb3N0c2NyaXB0c0F0dHJpYnV0ZV0pCiAgICAgICAgICAgICByZXR1cm4g
W3NlbGYgYWNjZXNzaWJpbGl0eU1hdGhQb3N0c2NyaXB0UGFpcnNdOwogICAgICAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU1hdGhQcmVzY3JpcHRz
QXR0cmlidXRlXSkKQEAgLTMwOTYsMTMgKzMwOTksMTMgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBM
RU1FTlRBVElPTlNfRU5ECiAgICAgfQogICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RXhwYW5kZWRUZXh0VmFsdWVBdHRyaWJ1dGVdKQot
ICAgICAgICByZXR1cm4gbV9vYmplY3QtPmV4cGFuZGVkVGV4dFZhbHVlKCk7CisgICAgICAgIHJl
dHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+ZXhwYW5kZWRUZXh0VmFsdWUoKTsKICAgICAKICAg
ICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eURPTUlk
ZW50aWZpZXJBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gbV9vYmplY3QtPmlkZW50aWZpZXJB
dHRyaWJ1dGUoKTsKKyAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pZGVudGlm
aWVyQXR0cmlidXRlKCk7CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlET01DbGFzc0xpc3RBdHRyaWJ1dGVdKSB7CiAgICAgICAgIFZlY3RvcjxT
dHJpbmc+IGNsYXNzTGlzdDsKLSAgICAgICAgbV9vYmplY3QtPmNsYXNzTGlzdChjbGFzc0xpc3Qp
OworICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+Y2xhc3NMaXN0KGNsYXNzTGlzdCk7CiAg
ICAgICAgIHJldHVybiBjb252ZXJ0U3RyaW5nc1RvTlNBcnJheShjbGFzc0xpc3QpOwogICAgIH0K
ICAgICAKQEAgLTMxMTIsNyArMzExNSw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJ
T05TX0VORAogICAgIAogICAgIC8vIHRoaXMgaXMgdXNlZCBvbmx5IGJ5IER1bXBSZW5kZXJUcmVl
IGZvciB0ZXN0aW5nCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpAIkFY
Q2xpY2tQb2ludCJdKQotICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUG9pbnQ6bV9v
YmplY3QtPmNsaWNrUG9pbnQoKV07CisgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhQ
b2ludDpzZWxmLmF4QmFja2luZ09iamVjdC0+Y2xpY2tQb2ludCgpXTsKICAgICAKICAgICAvLyBU
aGlzIGlzIHVzZWQgYnkgRFJUIHRvIHZlcmlmeSBDU1MzIHNwZWVjaCB3b3Jrcy4KICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhEUlRTcGVlY2hBdHRyaWJ1dGUiXSkK
QEAgLTMxMjAsNzQgKzMxMjMsNzQgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNf
RU5ECiAgICAgCiAgICAgLy8gVXNlZCBieSBEUlQgdG8gZmluZCBhbiBhY2Nlc3NpYmxlIG5vZGUg
YnkgaXRzIGVsZW1lbnQgaWQuCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzpAIkFYRFJURWxlbWVudElkQXR0cmlidXRlIl0pCi0gICAgICAgIHJldHVybiBtX29iamVjdC0+
aWRlbnRpZmllckF0dHJpYnV0ZSgpOworICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmlkZW50aWZpZXJBdHRyaWJ1dGUoKTsKICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOkAiQVhBdXRvY29tcGxldGVWYWx1ZSJdKQotICAgICAgICByZXR1cm4g
bV9vYmplY3QtPmF1dG9Db21wbGV0ZVZhbHVlKCk7CisgICAgICAgIHJldHVybiBzZWxmLmF4QmFj
a2luZ09iamVjdC0+YXV0b0NvbXBsZXRlVmFsdWUoKTsKIAogICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5UG9wdXBWYWx1ZUF0dHJpYnV0ZV0pCi0g
ICAgICAgIHJldHVybiBtX29iamVjdC0+cG9wdXBWYWx1ZSgpOworICAgICAgICByZXR1cm4gc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPnBvcHVwVmFsdWUoKTsKIAogICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWEtleVNob3J0Y3V0c1ZhbHVlIl0pCi0gICAgICAgIHJldHVy
biBtX29iamVjdC0+a2V5U2hvcnRjdXRzVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5rZXlTaG9ydGN1dHNWYWx1ZSgpOwogICAgIAogICAgIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWEFSSUFQcmVzc2VkSXNQcmVzZW50Il0pCi0gICAg
ICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6bV9vYmplY3QtPnByZXNzZWRJc1By
ZXNlbnQoKV07CisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6c2VsZi5h
eEJhY2tpbmdPYmplY3QtPnByZXNzZWRJc1ByZXNlbnQoKV07CiAgICAgCiAgICAgaWYgKFthdHRy
aWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpAIkFYSXNNdWx0aWxpbmUiXSkKLSAgICAgICAgcmV0
dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDptX29iamVjdC0+YXJpYUlzTXVsdGlsaW5lKCld
OworICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOnNlbGYuYXhCYWNraW5n
T2JqZWN0LT5hcmlhSXNNdWx0aWxpbmUoKV07CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzpAIkFYUmVhZE9ubHlWYWx1ZSJdKQotICAgICAgICByZXR1cm4gbV9v
YmplY3QtPnJlYWRPbmx5VmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5yZWFkT25seVZhbHVlKCk7CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOkAiQVhJc0FjdGl2ZURlc2NlbmRhbnRPZkZvY3VzZWRDb250YWluZXIiXSkKLSAgICAg
ICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDptX29iamVjdC0+aXNBY3RpdmVEZXNj
ZW5kYW50T2ZGb2N1c2VkQ29udGFpbmVyKCldOworICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51
bWJlcldpdGhCb29sOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0FjdGl2ZURlc2NlbmRhbnRPZkZv
Y3VzZWRDb250YWluZXIoKV07CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOkAiQVhEZXRhaWxzRWxlbWVudHMiXSkgewogICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgZGV0YWlsczsKLSAgICAgICAgbV9vYmplY3Qt
PmFyaWFEZXRhaWxzRWxlbWVudHMoZGV0YWlscyk7CisgICAgICAgIHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5hcmlhRGV0YWlsc0VsZW1lbnRzKGRldGFpbHMpOwogICAgICAgICByZXR1cm4gY29udmVy
dFRvTlNBcnJheShkZXRhaWxzKTsKICAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJlbGF0aXZlRnJhbWVBdHRyaWJ1dGVdKQotICAg
ICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpOU1JlY3RGcm9tQ0dSZWN0KF9heEJh
Y2tpbmdPYmplY3QtPnJlbGF0aXZlRnJhbWUoKSldOworICAgICAgICByZXR1cm4gW05TVmFsdWUg
dmFsdWVXaXRoUmVjdDpOU1JlY3RGcm9tQ0dSZWN0KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5yZWxh
dGl2ZUZyYW1lKCkpXTsKIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
QCJBWEVycm9yTWVzc2FnZUVsZW1lbnRzIl0pIHsKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVj
dDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGVycm9yTWVzc2FnZXM7Ci0gICAgICAgIG1f
b2JqZWN0LT5hcmlhRXJyb3JNZXNzYWdlRWxlbWVudHMoZXJyb3JNZXNzYWdlcyk7CisgICAgICAg
IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5hcmlhRXJyb3JNZXNzYWdlRWxlbWVudHMoZXJyb3JNZXNz
YWdlcyk7CiAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGVycm9yTWVzc2FnZXMpOwog
ICAgIH0KIAogICAgIC8vIE11bHRpLXNlbGVjdGFibGUKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUlzTXVsdGlTZWxlY3RhYmxlQXR0cmlidXRl
XSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDptX29iamVjdC0+aXNN
dWx0aVNlbGVjdGFibGUoKV07CisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJv
b2w6c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTXVsdGlTZWxlY3RhYmxlKCldOwogICAgIAogICAg
IC8vIERvY3VtZW50IGF0dHJpYnV0ZXMKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOk5TQWNjZXNzaWJpbGl0eURvY3VtZW50VVJJQXR0cmlidXRlXSkKLSAgICAgICAgcmV0
dXJuIG1fb2JqZWN0LT5kb2N1bWVudFVSSSgpOworICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tp
bmdPYmplY3QtPmRvY3VtZW50VVJJKCk7CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlEb2N1bWVudEVuY29kaW5nQXR0cmlidXRlXSkK
LSAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5kb2N1bWVudEVuY29kaW5nKCk7CisgICAgICAgIHJl
dHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnRFbmNvZGluZygpOwogICAgIAogICAg
IC8vIEFyaWEgY29udHJvbHMgZWxlbWVudAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5QXJpYUNvbnRyb2xzQXR0cmlidXRlXSkgewogICAgICAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgYXJpYUNv
bnRyb2xzOwotICAgICAgICBtX29iamVjdC0+YXJpYUNvbnRyb2xzRWxlbWVudHMoYXJpYUNvbnRy
b2xzKTsKKyAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPmFyaWFDb250cm9sc0VsZW1lbnRz
KGFyaWFDb250cm9scyk7CiAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGFyaWFDb250
cm9scyk7CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlGb2N1c2FibGVBbmNlc3RvckF0dHJpYnV0ZV0pIHsKLSAgICAgICAgQVhD
b3JlT2JqZWN0KiBvYmplY3QgPSBtX29iamVjdC0+Zm9jdXNhYmxlQW5jZXN0b3IoKTsKKyAgICAg
ICAgQVhDb3JlT2JqZWN0KiBvYmplY3QgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+Zm9jdXNhYmxl
QW5jZXN0b3IoKTsKICAgICAgICAgcmV0dXJuIG9iamVjdCA/IG9iamVjdC0+d3JhcHBlcigpIDog
bmlsOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5RWRpdGFibGVBbmNlc3RvckF0dHJpYnV0ZV0pIHsKLSAgICAgICAgQVhDb3Jl
T2JqZWN0KiBvYmplY3QgPSBtX29iamVjdC0+ZWRpdGFibGVBbmNlc3RvcigpOworICAgICAgICBB
WENvcmVPYmplY3QqIG9iamVjdCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5lZGl0YWJsZUFuY2Vz
dG9yKCk7CiAgICAgICAgIHJldHVybiBvYmplY3QgPyBvYmplY3QtPndyYXBwZXIoKSA6IG5pbDsK
ICAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eUhpZ2hlc3RFZGl0YWJsZUFuY2VzdG9yQXR0cmlidXRlXSkgewotICAgICAgICBBWENv
cmVPYmplY3QqIG9iamVjdCA9IG1fb2JqZWN0LT5oaWdoZXN0RWRpdGFibGVBbmNlc3RvcigpOwor
ICAgICAgICBBWENvcmVPYmplY3QqIG9iamVjdCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5oaWdo
ZXN0RWRpdGFibGVBbmNlc3RvcigpOwogICAgICAgICByZXR1cm4gb2JqZWN0ID8gb2JqZWN0LT53
cmFwcGVyKCkgOiBuaWw7CiAgICAgfQogCkBAIC0zMjA5LDcgKzMyMTIsNyBAQCBBTExPV19ERVBS
RUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICBpZiAoIVtzZWxmIHVwZGF0ZU9iamVjdEJh
Y2tpbmdTdG9yZV0pCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0gICAgYXV0byBmb2N1c2Vk
T2JqZWN0ID0gX2F4QmFja2luZ09iamVjdC0+Zm9jdXNlZFVJRWxlbWVudCgpOworICAgIGF1dG8g
Zm9jdXNlZE9iamVjdCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5mb2N1c2VkVUlFbGVtZW50KCk7
CiAgICAgaWYgKCFmb2N1c2VkT2JqZWN0KQogICAgICAgICByZXR1cm4gbmlsOwogICAgIApAQCAt
MzIyMSw4ICszMjI0LDggQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAg
ICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQogICAgICAgICByZXR1cm4g
bmlsOwogICAgIAotICAgIF9heEJhY2tpbmdPYmplY3QtPnVwZGF0ZUNoaWxkcmVuSWZOZWNlc3Nh
cnkoKTsKLSAgICBBWENvcmVPYmplY3QqIGF4T2JqZWN0ID0gX2F4QmFja2luZ09iamVjdC0+YWNj
ZXNzaWJpbGl0eUhpdFRlc3QoSW50UG9pbnQocG9pbnQpKTsKKyAgICBzZWxmLmF4QmFja2luZ09i
amVjdC0+dXBkYXRlQ2hpbGRyZW5JZk5lY2Vzc2FyeSgpOworICAgIEFYQ29yZU9iamVjdCogYXhP
YmplY3QgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+YWNjZXNzaWJpbGl0eUhpdFRlc3QoSW50UG9p
bnQocG9pbnQpKTsKICAgICBpZiAoYXhPYmplY3QpIHsKICAgICAgICAgaWYgKGF4T2JqZWN0LT5p
c0F0dGFjaG1lbnQoKSAmJiBbYXhPYmplY3QtPndyYXBwZXIoKSBhdHRhY2htZW50Vmlld10pCiAg
ICAgICAgICAgICByZXR1cm4gW2F4T2JqZWN0LT53cmFwcGVyKCkgYXR0YWNobWVudFZpZXddOwpA
QCAtMzI0MiwyMCArMzI0NSwyMCBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19F
TkQKICAgICAgICAgcmV0dXJuIFlFUzsKICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlGb2N1c2VkQXR0cmlidXRlXSkKLSAgICAgICAg
cmV0dXJuIG1fb2JqZWN0LT5jYW5TZXRGb2N1c0F0dHJpYnV0ZSgpOworICAgICAgICByZXR1cm4g
c2VsZi5heEJhY2tpbmdPYmplY3QtPmNhblNldEZvY3VzQXR0cmlidXRlKCk7CiAgICAgCiAgICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5VmFsdWVB
dHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gbV9vYmplY3QtPmNhblNldFZhbHVlQXR0cmlidXRl
KCk7CisgICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+Y2FuU2V0VmFsdWVBdHRy
aWJ1dGUoKTsKICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBO
U0FjY2Vzc2liaWxpdHlTZWxlY3RlZEF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBtX29iamVj
dC0+Y2FuU2V0U2VsZWN0ZWRBdHRyaWJ1dGUoKTsKKyAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5jYW5TZXRTZWxlY3RlZEF0dHJpYnV0ZSgpOwogICAgIAogICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkQ2hpbGRy
ZW5BdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gbV9vYmplY3QtPmNhblNldFNlbGVjdGVkQ2hp
bGRyZW5BdHRyaWJ1dGUoKTsKKyAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5j
YW5TZXRTZWxlY3RlZENoaWxkcmVuQXR0cmlidXRlKCk7CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlEaXNjbG9zaW5nQXR0cmlidXRl
XQogICAgICAgICB8fCBbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5RXhwYW5kZWRBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gbV9vYmplY3QtPmNhblNldEV4
cGFuZGVkQXR0cmlidXRlKCk7CisgICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+
Y2FuU2V0RXhwYW5kZWRBdHRyaWJ1dGUoKTsKICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkUm93c0F0dHJpYnV0ZV0pCiAg
ICAgICAgIHJldHVybiBZRVM7CkBAIC0zMjYzLDE1ICszMjY2LDE1IEBAIEFMTE9XX0RFUFJFQ0FU
RURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6IE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkVGV4dEF0dHJpYnV0ZV0gfHwKICAgICAgICAg
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRl
eHRSYW5nZUF0dHJpYnV0ZV0gfHwKICAgICAgICAgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOiBOU0FjY2Vzc2liaWxpdHlWaXNpYmxlQ2hhcmFjdGVyUmFuZ2VBdHRyaWJ1dGVdKQotICAg
ICAgICByZXR1cm4gbV9vYmplY3QtPmNhblNldFRleHRSYW5nZUF0dHJpYnV0ZXMoKTsKKyAgICAg
ICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5jYW5TZXRUZXh0UmFuZ2VBdHRyaWJ1dGVz
KCk7CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vz
c2liaWxpdHlHcmFiYmVkQXR0cmlidXRlXSkKICAgICAgICAgcmV0dXJuIFlFUzsKICAgICAKLSAg
ICBpZiAobV9vYmplY3QtPmlzV2ViQXJlYSgpICYmIFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlQcmV2ZW50S2V5Ym9hcmRET01FdmVudERpc3BhdGNoQXR0cmli
dXRlXSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzV2ViQXJlYSgpICYmIFthdHRy
aWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlQcmV2ZW50S2V5Ym9hcmRE
T01FdmVudERpc3BhdGNoQXR0cmlidXRlXSkKICAgICAgICAgcmV0dXJuIFlFUzsKICAgICAKLSAg
ICBpZiAobV9vYmplY3QtPmlzV2ViQXJlYSgpICYmIFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlDYXJldEJyb3dzaW5nRW5hYmxlZEF0dHJpYnV0ZV0pCisgICAg
aWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1dlYkFyZWEoKSAmJiBbYXR0cmlidXRlTmFtZSBp
c0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q2FyZXRCcm93c2luZ0VuYWJsZWRBdHRyaWJ1
dGVdKQogICAgICAgICByZXR1cm4gWUVTOwogICAgIAogICAgIHJldHVybiBOTzsKQEAgLTMyOTMs
OSArMzI5Niw5IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgIGlm
ICghW3NlbGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKICAgICAgICAgcmV0dXJuIFlFUzsK
ICAgICAKLSAgICBpZiAoX2F4QmFja2luZ09iamVjdC0+aXNBdHRhY2htZW50KCkpCisgICAgaWYg
KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkKICAgICAgICAgcmV0dXJuIFtb
c2VsZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0eUlzSWdub3JlZF07Ci0gICAgcmV0dXJu
IF9heEJhY2tpbmdPYmplY3QtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKTsKKyAgICByZXR1cm4g
c2VsZi5heEJhY2tpbmdPYmplY3QtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKTsKIH0KIAogQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfQkVHSU4KQEAgLTMzMDUsNyArMzMwOCw3IEBA
IEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgIGlmICghW3NlbGYgdXBk
YXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBp
ZiAobV9vYmplY3QtPmlzQXR0YWNobWVudCgpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVj
dC0+aXNBdHRhY2htZW50KCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCiAgICAgc3RhdGlj
IE5TQXJyYXkqIHBhcmFtQXR0cnMgPSBuaWw7CkBAIC0zMzg0LDE5ICszMzg3LDE5IEBAIEFMTE9X
X0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICBbdGVtcEFycmF5IHJlbGVh
c2VdOwogICAgIH0KICAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzUGFzc3dvcmRGaWVsZCgpKQor
ICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNQYXNzd29yZEZpZWxkKCkpCiAgICAgICAg
IHJldHVybiBAWyBOU0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRzRm9yU2VhcmNoUHJlZGljYXRlUGFy
YW1ldGVyaXplZEF0dHJpYnV0ZSBdOwogICAgIAotICAgIGlmIChtX29iamVjdC0+aXNUZXh0Q29u
dHJvbCgpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUZXh0Q29udHJvbCgpKQog
ICAgICAgICByZXR1cm4gdGV4dFBhcmFtQXR0cnM7CiAgICAgCi0gICAgaWYgKGlzPEFjY2Vzc2li
aWxpdHlUYWJsZT4oKm1fb2JqZWN0KSAmJiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpt
X29iamVjdCkuaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpKQorICAgIGlmIChpczxB
Y2Nlc3NpYmlsaXR5VGFibGU+KCpzZWxmLmF4QmFja2luZ09iamVjdCkgJiYgZG93bmNhc3Q8QWNj
ZXNzaWJpbGl0eVRhYmxlPigqc2VsZi5heEJhY2tpbmdPYmplY3QpLmlzRXhwb3NhYmxlVGhyb3Vn
aEFjY2Vzc2liaWxpdHkoKSkKICAgICAgICAgcmV0dXJuIHRhYmxlUGFyYW1BdHRyczsKICAgICAK
LSAgICBpZiAobV9vYmplY3QtPmlzTWVudVJlbGF0ZWQoKSkKKyAgICBpZiAoc2VsZi5heEJhY2tp
bmdPYmplY3QtPmlzTWVudVJlbGF0ZWQoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAg
ICBpZiAobV9vYmplY3QtPmlzV2ViQXJlYSgpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVj
dC0+aXNXZWJBcmVhKCkpCiAgICAgICAgIHJldHVybiB3ZWJBcmVhUGFyYW1BdHRyczsKICAgICAK
ICAgICByZXR1cm4gcGFyYW1BdHRyczsKQEAgLTM0MTgsMTAgKzM0MjEsMTAgQEAgQUxMT1dfREVQ
UkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KICAgICBpZiAoIVtzZWxmIHVwZGF0ZU9iamVjdEJh
Y2tpbmdTdG9yZV0pCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAobV9vYmplY3QtPmlz
QXR0YWNobWVudCgpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNBdHRhY2htZW50
KCkpCiAgICAgICAgIFtbc2VsZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0eVBlcmZvcm1B
Y3Rpb246TlNBY2Nlc3NpYmlsaXR5UHJlc3NBY3Rpb25dOwogICAgIGVsc2UKLSAgICAgICAgbV9v
YmplY3QtPnByZXNzKCk7CisgICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5wcmVzcygpOwog
fQogCiAtICh2b2lkKWFjY2Vzc2liaWxpdHlQZXJmb3JtSW5jcmVtZW50QWN0aW9uCkBAIC0zNDM2
LDEwICszNDM5LDEwIEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCiAgICAg
aWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQogICAgICAgICByZXR1cm47CiAg
ICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkKKyAgICBpZiAoc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmlzQXR0YWNobWVudCgpKQogICAgICAgICBbW3NlbGYgYXR0YWNobWVudFZp
ZXddIGFjY2Vzc2liaWxpdHlQZXJmb3JtQWN0aW9uOk5TQWNjZXNzaWJpbGl0eUluY3JlbWVudEFj
dGlvbl07CiAgICAgZWxzZQotICAgICAgICBtX29iamVjdC0+aW5jcmVtZW50KCk7CisgICAgICAg
IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pbmNyZW1lbnQoKTsKIH0KIAogLSAodm9pZClhY2Nlc3Np
YmlsaXR5UGVyZm9ybURlY3JlbWVudEFjdGlvbgpAQCAtMzQ1NCwxOCArMzQ1NywxOCBAQCBBTExP
V19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgogICAgIGlmICghW3NlbGYgdXBkYXRlT2Jq
ZWN0QmFja2luZ1N0b3JlXSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGlmIChtX29iamVj
dC0+aXNBdHRhY2htZW50KCkpCisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0F0dGFj
aG1lbnQoKSkKICAgICAgICAgW1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5UGVy
Zm9ybUFjdGlvbjpOU0FjY2Vzc2liaWxpdHlEZWNyZW1lbnRBY3Rpb25dOwogICAgIGVsc2UKLSAg
ICAgICAgbV9vYmplY3QtPmRlY3JlbWVudCgpOworICAgICAgICBzZWxmLmF4QmFja2luZ09iamVj
dC0+ZGVjcmVtZW50KCk7CiB9CiAKIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAog
CiAtICh2b2lkKWFjY2Vzc2liaWxpdHlQZXJmb3JtU2hvd01lbnVBY3Rpb24KIHsKLSAgICBpZiAo
bV9vYmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpDb21ib0JveCkKLSAg
ICAgICAgbV9vYmplY3QtPnNldElzRXhwYW5kZWQodHJ1ZSk7CisgICAgaWYgKHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6Q29tYm9Cb3gpCisg
ICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZXRJc0V4cGFuZGVkKHRydWUpOwogICAgIGVs
c2UgewogICAgICAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIHBlcmZvcm1lZCBpbiBhbiBpdGVyYXRp
b24gb2YgdGhlIHJ1biBsb29wIHRoYXQgZGlkIG5vdCBzdGFydCBmcm9tIGFuIEFYIGNhbGwuCiAg
ICAgICAgIC8vIElmIGl0J3MgdGhlIHNhbWUgcnVuIGxvb3AgaXRlcmF0aW9uLCB0aGUgbWVudSBv
cGVuIG5vdGlmaWNhdGlvbiB3b24ndCBiZSBzZW50CkBAIC0zNDg0LDIxICszNDg3LDIxIEBAIEFM
TE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogewogICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CiAgICAgCi0gICAgaWYgKCFfYXhCYWNraW5nT2JqZWN0KQorICAgIGlmICghc2VsZi5h
eEJhY2tpbmdPYmplY3QpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBQYWdlKiBwYWdlID0g
X2F4QmFja2luZ09iamVjdC0+cGFnZSgpOworICAgIFBhZ2UqIHBhZ2UgPSBzZWxmLmF4QmFja2lu
Z09iamVjdC0+cGFnZSgpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwogICAgIAot
ICAgIEludFJlY3QgcmVjdCA9IHNuYXBwZWRJbnRSZWN0KF9heEJhY2tpbmdPYmplY3QtPmVsZW1l
bnRSZWN0KCkpOwotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gX2F4QmFja2luZ09iamVjdC0+
ZG9jdW1lbnRGcmFtZVZpZXcoKTsKKyAgICBJbnRSZWN0IHJlY3QgPSBzbmFwcGVkSW50UmVjdChz
ZWxmLmF4QmFja2luZ09iamVjdC0+ZWxlbWVudFJlY3QoKSk7CisgICAgRnJhbWVWaWV3KiBmcmFt
ZVZpZXcgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnRGcmFtZVZpZXcoKTsKICAgICAK
ICAgICAvLyBPbiBXSzIsIHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgdGhlIHNjcm9sbCBwb3NpdGlv
biB3aXRoIHJlZ2FyZHMgdG8gcm9vdCB2aWV3LgogICAgIC8vIE9uIFdLMSwgd2UgbmVlZCB0byBj
b252ZXJ0IHJlY3QgdG8gd2luZG93IHNwYWNlIHRvIG1hdGNoIG1vdXNlIGNsaWNraW5nLgogICAg
IGlmIChmcmFtZVZpZXcpIHsKICAgICAgICAgLy8gRmluZCB0aGUgYXBwcm9wcmlhdGUgc2Nyb2xs
IHZpZXcgdG8gdXNlIHRvIGNvbnZlcnQgdGhlIGNvbnRlbnRzIHRvIHRoZSB3aW5kb3cuCi0gICAg
ICAgIGZvciAoYXV0byogcGFyZW50ID0gX2F4QmFja2luZ09iamVjdC0+cGFyZW50T2JqZWN0KCk7
IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkgeworICAgICAgICBmb3Ig
KGF1dG8qIHBhcmVudCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5wYXJlbnRPYmplY3QoKTsgcGFy
ZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpKSB7CiAgICAgICAgICAgICBpZiAo
aXM8QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+KCpwYXJlbnQpKSB7CiAgICAgICAgICAgICAgICAg
aWYgKGF1dG8gc2Nyb2xsVmlldyA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3Pigq
cGFyZW50KS5zY3JvbGxWaWV3KCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFmcmFtZVZp
ZXctPnBsYXRmb3JtV2lkZ2V0KCkpCkBAIC0zNTE2LDE3ICszNTE5LDE3IEBAIEFMTE9XX0RFUFJF
Q0FURURfREVDTEFSQVRJT05TX0VORAogCiAtICh2b2lkKWFjY2Vzc2liaWxpdHlTY3JvbGxUb1Zp
c2libGUKIHsKLSAgICBtX29iamVjdC0+c2Nyb2xsVG9NYWtlVmlzaWJsZSgpOworICAgIHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5zY3JvbGxUb01ha2VWaXNpYmxlKCk7CiB9CiAKIC0gKHZvaWQpX2Fj
Y2Vzc2liaWxpdHlTY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzOihOU1JlY3QpcmVjdAog
ewotICAgIG1fb2JqZWN0LT5zY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzKEludFJlY3Qo
cmVjdCkpOworICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zY3JvbGxUb01ha2VWaXNpYmxlV2l0
aFN1YkZvY3VzKEludFJlY3QocmVjdCkpOwogfQogCiAtICh2b2lkKV9hY2Nlc3NpYmlsaXR5U2Ny
b2xsVG9HbG9iYWxQb2ludDooTlNQb2ludClwb2ludAogewotICAgIG1fb2JqZWN0LT5zY3JvbGxU
b0dsb2JhbFBvaW50KEludFBvaW50KHBvaW50KSk7CisgICAgc2VsZi5heEJhY2tpbmdPYmplY3Qt
PnNjcm9sbFRvR2xvYmFsUG9pbnQoSW50UG9pbnQocG9pbnQpKTsKIH0KIAogQUxMT1dfREVQUkVD
QVRFRF9JTVBMRU1FTlRBVElPTlNfQkVHSU4KQEAgLTM1NjcsNyArMzU3MCw3IEBAIEFMTE9XX0RF
UFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgIGlmICghW3NlbGYgdXBkYXRlT2JqZWN0
QmFja2luZ1N0b3JlXSkKICAgICAgICAgcmV0dXJuIE5POwogICAgIAotICAgIHJldHVybiBtX29i
amVjdC0+cmVwbGFjZVRleHRJblJhbmdlKHN0cmluZywgUGxhaW5UZXh0UmFuZ2UocmFuZ2UpKTsK
KyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPnJlcGxhY2VUZXh0SW5SYW5nZShzdHJp
bmcsIFBsYWluVGV4dFJhbmdlKHJhbmdlKSk7CiB9CiAKIC0gKEJPT0wpYWNjZXNzaWJpbGl0eUlu
c2VydFRleHQ6KE5TU3RyaW5nICopdGV4dApAQCAtMzU3NSw3ICszNTc4LDcgQEAgQUxMT1dfREVQ
UkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RC
YWNraW5nU3RvcmVdKQogICAgICAgICByZXR1cm4gTk87CiAKLSAgICByZXR1cm4gbV9vYmplY3Qt
Pmluc2VydFRleHQodGV4dCk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pbnNl
cnRUZXh0KHRleHQpOwogfQogCiBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19CRUdJ
TgpAQCAtMzYyNCw0NyArMzYyNyw0NyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9O
U19FTkQKICAgICAvLyBoYW5kbGUgdGhlIGNvbW1hbmQKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOiBAIkFYU2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2UiXSkgewogICAgICAg
ICBBU1NFUlQodGV4dE1hcmtlclJhbmdlKTsKLSAgICAgICAgbV9vYmplY3QtPnNldFNlbGVjdGVk
VmlzaWJsZVBvc2l0aW9uUmFuZ2UoW3NlbGYgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JUZXh0TWFy
a2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXSk7CisgICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5zZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKFtzZWxmIHZpc2libGVQb3NpdGlvblJh
bmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV0pOwogICAgIH0gZWxzZSBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlGb2N1c2VkQXR0
cmlidXRlXSkgewogICAgICAgICBbc2VsZiBiYXNlQWNjZXNzaWJpbGl0eVNldEZvY3VzOltudW1i
ZXIgYm9vbFZhbHVlXV07CiAgICAgfSBlbHNlIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6IE5TQWNjZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRlXSkgewotICAgICAgICBpZiAobnVt
YmVyICYmIG1fb2JqZWN0LT5jYW5TZXROdW1lcmljVmFsdWUoKSkKLSAgICAgICAgICAgIG1fb2Jq
ZWN0LT5zZXRWYWx1ZShbbnVtYmVyIGZsb2F0VmFsdWVdKTsKKyAgICAgICAgaWYgKG51bWJlciAm
JiBzZWxmLmF4QmFja2luZ09iamVjdC0+Y2FuU2V0TnVtZXJpY1ZhbHVlKCkpCisgICAgICAgICAg
ICBzZWxmLmF4QmFja2luZ09iamVjdC0+c2V0VmFsdWUoW251bWJlciBmbG9hdFZhbHVlXSk7CiAg
ICAgICAgIGVsc2UgaWYgKHN0cmluZykKLSAgICAgICAgICAgIG1fb2JqZWN0LT5zZXRWYWx1ZShz
dHJpbmcpOworICAgICAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPnNldFZhbHVlKHN0cmlu
Zyk7CiAgICAgfSBlbHNlIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNj
ZXNzaWJpbGl0eVNlbGVjdGVkQXR0cmlidXRlXSkgewogICAgICAgICBpZiAoIW51bWJlcikKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9vYmplY3QtPnNldFNlbGVjdGVkKFtudW1iZXIg
Ym9vbFZhbHVlXSk7CisgICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZXRTZWxlY3RlZChb
bnVtYmVyIGJvb2xWYWx1ZV0pOwogICAgIH0gZWxzZSBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZENoaWxkcmVuQXR0cmlidXRlXSkgewog
ICAgICAgICBpZiAoIWFycmF5KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAobV9v
YmplY3QtPnJvbGVWYWx1ZSgpICE9IEFjY2Vzc2liaWxpdHlSb2xlOjpMaXN0Qm94KQorICAgICAg
ICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnJvbGVWYWx1ZSgpICE9IEFjY2Vzc2liaWxpdHlS
b2xlOjpMaXN0Qm94KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igc2VsZWN0ZWRDaGlsZHJlbjsKICAg
ICAgICAgY29udmVydFRvVmVjdG9yKGFycmF5LCBzZWxlY3RlZENoaWxkcmVuKTsKLSAgICAgICAg
ZG93bmNhc3Q8QWNjZXNzaWJpbGl0eUxpc3RCb3g+KCptX29iamVjdCkuc2V0U2VsZWN0ZWRDaGls
ZHJlbihzZWxlY3RlZENoaWxkcmVuKTsKLSAgICB9IGVsc2UgaWYgKG1fb2JqZWN0LT5pc1RleHRD
b250cm9sKCkpIHsKKyAgICAgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eUxpc3RCb3g+KCpzZWxm
LmF4QmFja2luZ09iamVjdCkuc2V0U2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZENoaWxkcmVuKTsK
KyAgICB9IGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1RleHRDb250cm9sKCkpIHsK
ICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmls
aXR5U2VsZWN0ZWRUZXh0QXR0cmlidXRlXSkgewotICAgICAgICAgICAgbV9vYmplY3QtPnNldFNl
bGVjdGVkVGV4dChzdHJpbmcpOworICAgICAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPnNl
dFNlbGVjdGVkVGV4dChzdHJpbmcpOwogICAgICAgICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0UmFuZ2VBdHRyaWJ1
dGVdKSB7Ci0gICAgICAgICAgICBtX29iamVjdC0+c2V0U2VsZWN0ZWRUZXh0UmFuZ2UoUGxhaW5U
ZXh0UmFuZ2UocmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCkpOworICAgICAgICAgICAgc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPnNldFNlbGVjdGVkVGV4dFJhbmdlKFBsYWluVGV4dFJhbmdlKHJh
bmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgpKTsKICAgICAgICAgfSBlbHNlIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVZpc2libGVDaGFyYWN0ZXJS
YW5nZUF0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIG1fb2JqZWN0LT5tYWtlUmFuZ2VWaXNpYmxl
KFBsYWluVGV4dFJhbmdlKHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgpKTsKKyAgICAgICAg
ICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYWtlUmFuZ2VWaXNpYmxlKFBsYWluVGV4dFJhbmdl
KHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eURpc2Nsb3Np
bmdBdHRyaWJ1dGVdIHx8IFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2li
aWxpdHlFeHBhbmRlZEF0dHJpYnV0ZV0pCi0gICAgICAgIG1fb2JqZWN0LT5zZXRJc0V4cGFuZGVk
KFtudW1iZXIgYm9vbFZhbHVlXSk7CisgICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZXRJ
c0V4cGFuZGVkKFtudW1iZXIgYm9vbFZhbHVlXSk7CiAgICAgZWxzZSBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkUm93c0F0dHJpYnV0ZV0p
IHsKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVj
dG9yIHNlbGVjdGVkUm93czsKICAgICAgICAgY29udmVydFRvVmVjdG9yKGFycmF5LCBzZWxlY3Rl
ZFJvd3MpOwotICAgICAgICBpZiAobV9vYmplY3QtPmlzVHJlZSgpIHx8IChpczxBY2Nlc3NpYmls
aXR5VGFibGU+KCptX29iamVjdCkgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqbV9v
YmplY3QpLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSkpCi0gICAgICAgICAgICBt
X29iamVjdC0+c2V0U2VsZWN0ZWRSb3dzKHNlbGVjdGVkUm93cyk7CisgICAgICAgIGlmIChzZWxm
LmF4QmFja2luZ09iamVjdC0+aXNUcmVlKCkgfHwgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKnNl
bGYuYXhCYWNraW5nT2JqZWN0KSAmJiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpzZWxm
LmF4QmFja2luZ09iamVjdCkuaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpKSkKKyAg
ICAgICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZXRTZWxlY3RlZFJvd3Moc2VsZWN0ZWRS
b3dzKTsKICAgICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0Fj
Y2Vzc2liaWxpdHlHcmFiYmVkQXR0cmlidXRlXSkKLSAgICAgICAgbV9vYmplY3QtPnNldEFSSUFH
cmFiYmVkKFtudW1iZXIgYm9vbFZhbHVlXSk7Ci0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzV2Vi
QXJlYSgpICYmIFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlQ
cmV2ZW50S2V5Ym9hcmRET01FdmVudERpc3BhdGNoQXR0cmlidXRlXSkKLSAgICAgICAgbV9vYmpl
Y3QtPnNldFByZXZlbnRLZXlib2FyZERPTUV2ZW50RGlzcGF0Y2goW251bWJlciBib29sVmFsdWVd
KTsKLSAgICBlbHNlIGlmIChtX29iamVjdC0+aXNXZWJBcmVhKCkgJiYgW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUNhcmV0QnJvd3NpbmdFbmFibGVkQXR0cmli
dXRlXSkKLSAgICAgICAgbV9vYmplY3QtPnNldENhcmV0QnJvd3NpbmdFbmFibGVkKFtudW1iZXIg
Ym9vbFZhbHVlXSk7CisgICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZXRBUklBR3JhYmJl
ZChbbnVtYmVyIGJvb2xWYWx1ZV0pOworICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5pc1dlYkFyZWEoKSAmJiBbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3Np
YmlsaXR5UHJldmVudEtleWJvYXJkRE9NRXZlbnREaXNwYXRjaEF0dHJpYnV0ZV0pCisgICAgICAg
IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZXRQcmV2ZW50S2V5Ym9hcmRET01FdmVudERpc3BhdGNo
KFtudW1iZXIgYm9vbFZhbHVlXSk7CisgICAgZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3Qt
PmlzV2ViQXJlYSgpICYmIFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2li
aWxpdHlDYXJldEJyb3dzaW5nRW5hYmxlZEF0dHJpYnV0ZV0pCisgICAgICAgIHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5zZXRDYXJldEJyb3dzaW5nRW5hYmxlZChbbnVtYmVyIGJvb2xWYWx1ZV0pOwog
fQogCiAvLyBVc2VkIHRvIHNldCBhdHRyaWJ1dGVzIHN5bmNocm9ub3VzbHkgb24gYWNjZXNzaWJp
bGl0eSBlbGVtZW50cyB3aXRoaW4gdGVzdHMuCkBAIC0zNzE2LDcgKzM3MTksNyBAQCBBTExPV19E
RVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIC0gKE5TQXR0cmlidXRlZFN0cmluZyopZG9B
WEF0dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZTooTlNSYW5nZSlyYW5nZQogewogICAgIFBsYWluVGV4
dFJhbmdlIHRleHRSYW5nZSA9IFBsYWluVGV4dFJhbmdlKHJhbmdlLmxvY2F0aW9uLCByYW5nZS5s
ZW5ndGgpOwotICAgIFJlZlB0cjxSYW5nZT4gd2ViUmFuZ2UgPSBtX29iamVjdC0+cmFuZ2VGb3JQ
bGFpblRleHRSYW5nZSh0ZXh0UmFuZ2UpOworICAgIFJlZlB0cjxSYW5nZT4gd2ViUmFuZ2UgPSBz
ZWxmLmF4QmFja2luZ09iamVjdC0+cmFuZ2VGb3JQbGFpblRleHRSYW5nZSh0ZXh0UmFuZ2UpOwog
ICAgIHJldHVybiBbc2VsZiBkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZTpb
c2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6d2ViUmFuZ2VdIHNwZWxsQ2hlY2s6WUVTXTsK
IH0KIApAQCAtMzcyOCw3ICszNzMxLDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElP
TlNfRU5ECiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAKLSAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBfYXhCYWNraW5nT2JqZWN0LT5kb2N1bWVudCgpOworICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5kb2N1bWVudCgpOwog
ICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgCkBAIC0zNzQ2
LDcgKzM3NDksNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICBp
ZiAoIW1hcmtlcikKICAgICAgICAgcmV0dXJuIE5TTm90Rm91bmQ7CiAgICAgCi0gICAgaWYgKEFY
T2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSkgeworICAgIGlm
IChBWE9iamVjdENhY2hlKiBjYWNoZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENh
Y2hlKCkpIHsKICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldCA9IFtzZWxm
IGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6bWFya2VyXTsKICAgICAgICAgLy8gQ3JlYXRl
IGEgY29sbGFwc2VkIHJhbmdlIGZyb20gdGhlIENoYXJhY3Rlck9mZnNldCBvYmplY3QuCiAgICAg
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBjYWNoZS0+cmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0
ZXJPZmZzZXRzKGNoYXJhY3Rlck9mZnNldCwgY2hhcmFjdGVyT2Zmc2V0KTsKQEAgLTM3NTksNyAr
Mzc2Miw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogewogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBfYXhCYWNr
aW5nT2JqZWN0LT5kb2N1bWVudCgpOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5kb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJl
dHVybiBuaWw7CiAgICAgCkBAIC0zNzY3LDcgKzM3NzAsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lN
UExFTUVOVEFUSU9OU19FTkQKICAgICBpZiAoIXRleHRSYW5nZSB8fCAhdGV4dFJhbmdlLT5ib3Vu
ZGFyeVBvaW50c1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0gICAgaWYgKEFY
T2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSkgeworICAgIGlm
IChBWE9iamVjdENhY2hlKiBjYWNoZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENh
Y2hlKCkpIHsKICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldCA9IGNhY2hl
LT5zdGFydE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UodGV4dFJhbmdlLCB0cnVlKTsKICAg
ICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6Y2hhcmFjdGVy
T2Zmc2V0XTsKICAgICB9CkBAIC0zODU1LDcgKzM4NTgsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lN
UExFTUVOVEFUSU9OU19FTkQKICAgICBOU1JlY3QgcmVjdCA9IE5TWmVyb1JlY3Q7CiAgICAgCiAg
ICAgLy8gYmFzaWMgcGFyYW1ldGVyIHZhbGlkYXRpb24KLSAgICBpZiAoIW1fb2JqZWN0IHx8ICFh
dHRyaWJ1dGUgfHwgIXBhcmFtZXRlcikKKyAgICBpZiAoIXNlbGYuYXhCYWNraW5nT2JqZWN0IHx8
ICFhdHRyaWJ1dGUgfHwgIXBhcmFtZXRlcikKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKICAg
ICBpZiAoIVtzZWxmIHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9yZV0pCkBAIC0zODcxLDggKzM4NzQs
OCBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgdGV4dE1h
cmtlclJhbmdlID0gcGFyYW1ldGVyOwogICAgIAogICAgIGVsc2UgaWYgKFtwYXJhbWV0ZXIgaXNL
aW5kT2ZDbGFzczpbV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgc2VsZl1dKQotICAgICAg
ICB1aUVsZW1lbnQgPSBbKFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKilwYXJhbWV0ZXIg
YWNjZXNzaWJpbGl0eU9iamVjdF07Ci0gICAgCisgICAgICAgIHVpRWxlbWVudCA9IFsoV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqKXBhcmFtZXRlciBheEJhY2tpbmdPYmplY3RdOworCiAg
ICAgZWxzZSBpZiAoW3BhcmFtZXRlciBpc0tpbmRPZkNsYXNzOltOU051bWJlciBzZWxmXV0pCiAg
ICAgICAgIG51bWJlciA9IHBhcmFtZXRlcjsKICAgICAKQEAgLTM5MDEsOSArMzkwNCw5IEBAIEFM
TE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAvLyBUbyBiZSBkZXBy
ZWNhdGVkLgogICAgICAgICBhdXRvIHJlc3VsdCA9IEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFs
dWVGcm9tTWFpblRocmVhZDxWZWN0b3I8U3RyaW5nPj4oW2RpY3Rpb25hcnksIHNlbGZdICgpIC0+
IFZlY3RvcjxTdHJpbmc+IHsKICAgICAgICAgICAgIGF1dG8gY3JpdGVyaWEgPSBhY2Nlc3NpYmls
aXR5VGV4dENyaXRlcmlhRm9yUGFyYW1ldGVyaXplZEF0dHJpYnV0ZShkaWN0aW9uYXJ5KTsKLSAg
ICAgICAgICAgIGNyaXRlcmlhLnNlY29uZC50ZXh0UmFuZ2VzID0gbV9vYmplY3QtPmZpbmRUZXh0
UmFuZ2VzKGNyaXRlcmlhLmZpcnN0KTsKKyAgICAgICAgICAgIGNyaXRlcmlhLnNlY29uZC50ZXh0
UmFuZ2VzID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmZpbmRUZXh0UmFuZ2VzKGNyaXRlcmlhLmZp
cnN0KTsKICAgICAgICAgICAgIEFTU0VSVChjcml0ZXJpYS5zZWNvbmQudGV4dFJhbmdlcy5zaXpl
KCkgPD0gMSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9vYmplY3QtPnBlcmZvcm1UZXh0T3BlcmF0
aW9uKGNyaXRlcmlhLnNlY29uZCk7CisgICAgICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdP
YmplY3QtPnBlcmZvcm1UZXh0T3BlcmF0aW9uKGNyaXRlcmlhLnNlY29uZCk7CiAgICAgICAgIH0p
OwogICAgICAgICBBU1NFUlQocmVzdWx0LnNpemUoKSA8PSAxKTsKICAgICAgICAgaWYgKHJlc3Vs
dC5zaXplKCkgPiAwKQpAQCAtMzkxNCw3ICszOTE3LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBM
RU1FTlRBVElPTlNfRU5ECiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNj
ZXNzaWJpbGl0eVNlYXJjaFRleHRXaXRoQ3JpdGVyaWFQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkg
ewogICAgICAgICBhdXRvIGNyaXRlcmlhID0gYWNjZXNzaWJpbGl0eVNlYXJjaFRleHRDcml0ZXJp
YUZvclBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUoZGljdGlvbmFyeSk7CiAgICAgICAgIHJldHVybiBB
Y2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8TlNBcnJheSAqPihbJmNy
aXRlcmlhLCBzZWxmXSAoKSAtPiBOU0FycmF5ICogewotICAgICAgICAgICAgYXV0byByYW5nZXMg
PSBtX29iamVjdC0+ZmluZFRleHRSYW5nZXMoY3JpdGVyaWEpOworICAgICAgICAgICAgYXV0byBy
YW5nZXMgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZmluZFRleHRSYW5nZXMoY3JpdGVyaWEpOwog
ICAgICAgICAgICAgaWYgKHJhbmdlcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IG5pbDsKICAgICAgICAgICAgIE5TTXV0YWJsZUFycmF5ICptYXJrZXJzID0gW05TTXV0YWJsZUFy
cmF5IGFycmF5V2l0aENhcGFjaXR5OnJhbmdlcy5zaXplKCldOwpAQCAtMzkyOSw3ICszOTMyLDcg
QEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgaWYgKFthdHRyaWJ1
dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVRleHRPcGVyYXRpb25QYXJhbWV0ZXJp
emVkQXR0cmlidXRlXSkgewogICAgICAgICBhdXRvIG9wZXJhdGlvblJlc3VsdCA9IEFjY2Vzc2li
aWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxWZWN0b3I8U3RyaW5nPj4oW2RpY3Rp
b25hcnksIHNlbGZdICgpIC0+IFZlY3RvcjxTdHJpbmc+IHsKICAgICAgICAgICAgIGF1dG8gdGV4
dE9wZXJhdGlvbiA9IGFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uRm9yUGFyYW1ldGVyaXplZEF0
dHJpYnV0ZShzZWxmLCBkaWN0aW9uYXJ5KTsKLSAgICAgICAgICAgIHJldHVybiBtX29iamVjdC0+
cGVyZm9ybVRleHRPcGVyYXRpb24odGV4dE9wZXJhdGlvbik7CisgICAgICAgICAgICByZXR1cm4g
c2VsZi5heEJhY2tpbmdPYmplY3QtPnBlcmZvcm1UZXh0T3BlcmF0aW9uKHRleHRPcGVyYXRpb24p
OwogICAgICAgICB9KTsKICAgICAgICAgaWYgKG9wZXJhdGlvblJlc3VsdC5pc0VtcHR5KCkpCiAg
ICAgICAgICAgICByZXR1cm4gbmlsOwpAQCAtMzk0MiwyMCArMzk0NSwyMCBAQCBBTExPV19ERVBS
RUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Q291bnRGb3JTZWFyY2hQcmVkaWNhdGVQYXJh
bWV0ZXJpemVkQXR0cmlidXRlXSkgewogICAgICAgICBBY2Nlc3NpYmlsaXR5U2VhcmNoQ3JpdGVy
aWEgY3JpdGVyaWEgPSBhY2Nlc3NpYmlsaXR5U2VhcmNoQ3JpdGVyaWFGb3JTZWFyY2hQcmVkaWNh
dGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlKGRpY3Rpb25hcnkpOwogICAgICAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgcmVzdWx0czsKLSAgICAgICAg
bV9vYmplY3QtPmZpbmRNYXRjaGluZ09iamVjdHMoJmNyaXRlcmlhLCByZXN1bHRzKTsKKyAgICAg
ICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPmZpbmRNYXRjaGluZ09iamVjdHMoJmNyaXRlcmlhLCBy
ZXN1bHRzKTsKICAgICAgICAgcmV0dXJuIEAocmVzdWx0cy5zaXplKCkpOwogICAgIH0KICAgICAK
ICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50c0ZvclNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7CiAgICAgICAg
IEFjY2Vzc2liaWxpdHlTZWFyY2hDcml0ZXJpYSBjcml0ZXJpYSA9IGFjY2Vzc2liaWxpdHlTZWFy
Y2hDcml0ZXJpYUZvclNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUoZGljdGlv
bmFyeSk7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJl
blZlY3RvciByZXN1bHRzOwotICAgICAgICBtX29iamVjdC0+ZmluZE1hdGNoaW5nT2JqZWN0cygm
Y3JpdGVyaWEsIHJlc3VsdHMpOworICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+ZmluZE1h
dGNoaW5nT2JqZWN0cygmY3JpdGVyaWEsIHJlc3VsdHMpOwogICAgICAgICByZXR1cm4gY29udmVy
dFRvTlNBcnJheShyZXN1bHRzKTsKICAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RW5kVGV4dE1hcmtlckZvckJvdW5kc1BhcmFtZXRlcml6
ZWRBdHRyaWJ1dGVdKSB7CiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZh
bHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFsmcmVjdCwgcHJvdGVjdGVkU2VsZiA9IFJldGFpblB0cjxX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4oc2VsZildICgpIC0+IGlkIHsKLSAgICAgICAg
ICAgIGF1dG8qIGNhY2hlID0gcHJvdGVjdGVkU2VsZi0+bV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUo
KTsKKyAgICAgICAgICAgIGF1dG8qIGNhY2hlID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tp
bmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKICAgICAgICAgICAgIGlmICghY2FjaGUpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG5pbDsKIApAQCAtMzk2Nyw3ICszOTcwLDcgQEAgQUxMT1dfREVQ
UkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U3RhcnRUZXh0TWFya2VyRm9yQm91bmRzUGFyYW1ldGVy
aXplZEF0dHJpYnV0ZV0pIHsKICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZl
VmFsdWVGcm9tTWFpblRocmVhZDxpZD4oWyZyZWN0LCBwcm90ZWN0ZWRTZWxmID0gUmV0YWluUHRy
PFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPihzZWxmKV0gKCkgLT4gaWQgewotICAgICAg
ICAgICAgYXV0byogY2FjaGUgPSBwcm90ZWN0ZWRTZWxmLT5tX29iamVjdC0+YXhPYmplY3RDYWNo
ZSgpOworICAgICAgICAgICAgYXV0byogY2FjaGUgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFj
a2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpOwogICAgICAgICAgICAgaWYgKCFjYWNoZSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gbmlsOwogCkBAIC0zOTc5LDEzICszOTgyLDEzIEBAIEFMTE9X
X0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNF
cXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUxpbmVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFy
a2VyUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVQb3NpdGlvbiA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6dGV4dE1h
cmtlcl07Ci0gICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdl
ID0gbV9vYmplY3QtPmxpbmVSYW5nZUZvclBvc2l0aW9uKHZpc2libGVQb3NpdGlvbik7CisgICAg
ICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdlID0gc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmxpbmVSYW5nZUZvclBvc2l0aW9uKHZpc2libGVQb3NpdGlvbik7CiAgICAg
ICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2aXNp
YmxlUG9zaXRpb25SYW5nZS5zdGFydCBlbmRQb3NpdGlvbjp2aXNpYmxlUG9zaXRpb25SYW5nZS5l
bmRdOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vz
c2liaWxpdHlNaXNzcGVsbGluZ1RleHRNYXJrZXJSYW5nZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVd
KSB7CiAgICAgICAgIGF1dG8gY3JpdGVyaWEgPSBhY2Nlc3NpYmlsaXR5TWlzc3BlbGxpbmdTZWFy
Y2hDcml0ZXJpYUZvclBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUoc2VsZiwgZGljdGlvbmFyeSk7Ci0g
ICAgICAgIGlmIChhdXRvIG1pc3NwZWxsaW5nUmFuZ2UgPSBtX29iamVjdC0+Z2V0TWlzc3BlbGxp
bmdSYW5nZShjcml0ZXJpYS5maXJzdCwgY3JpdGVyaWEuc2Vjb25kKSkKKyAgICAgICAgaWYgKGF1
dG8gbWlzc3BlbGxpbmdSYW5nZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5nZXRNaXNzcGVsbGlu
Z1JhbmdlKGNyaXRlcmlhLmZpcnN0LCBjcml0ZXJpYS5zZWNvbmQpKQogICAgICAgICAgICAgcmV0
dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21SYW5nZTptaXNzcGVsbGluZ1JhbmdlXTsKICAg
ICAgICAgcmV0dXJuIG5pbDsKICAgICB9CkBAIC00MDE5LDE5ICs0MDIyLDE5IEBAIEFMTE9XX0RF
UFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVh
bFRvU3RyaW5nOkAiQVhMaW5lRm9yVGV4dE1hcmtlciJdKSB7CiAgICAgICAgIFZpc2libGVQb3Np
dGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4
dE1hcmtlcildOwotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZElu
dDptX29iamVjdC0+bGluZUZvclBvc2l0aW9uKHZpc2libGVQb3MpXTsKKyAgICAgICAgcmV0dXJu
IFtOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnQ6c2VsZi5heEJhY2tpbmdPYmplY3QtPmxp
bmVGb3JQb3NpdGlvbih2aXNpYmxlUG9zKV07CiAgICAgfQogICAgIAogICAgIGlmIChbYXR0cmli
dXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYVGV4dE1hcmtlclJhbmdlRm9yTGluZSJdKSB7CiAgICAg
ICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZwUmFuZ2U7CiAgICAgICAgIGlmIChbbnVtYmVyIHVu
c2lnbmVkSW50ZWdlclZhbHVlXSAhPSBOU05vdEZvdW5kKQotICAgICAgICAgICAgdnBSYW5nZSA9
IG1fb2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZUZvckxpbmUoW251bWJlciB1bnNpZ25lZElu
dFZhbHVlXSk7CisgICAgICAgICAgICB2cFJhbmdlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnZp
c2libGVQb3NpdGlvblJhbmdlRm9yTGluZShbbnVtYmVyIHVuc2lnbmVkSW50VmFsdWVdKTsKICAg
ICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zOnZw
UmFuZ2Uuc3RhcnQgZW5kUG9zaXRpb246dnBSYW5nZS5lbmRdOwogICAgIH0KICAgICAKICAgICBp
ZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFN0cmluZ0ZvclRleHRNYXJrZXJSYW5n
ZSJdKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBbc2VsZiByYW5nZUZvclRleHRN
YXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOwotICAgICAgICByZXR1cm4gbV9vYmplY3QtPnN0
cmluZ0ZvclJhbmdlKHJhbmdlKTsKKyAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5zdHJpbmdGb3JSYW5nZShyYW5nZSk7CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNF
cXVhbFRvU3RyaW5nOkAiQVhUZXh0TWFya2VyRm9yUG9zaXRpb24iXSkgewpAQCAtNDA0MCw1OCAr
NDA0Myw1OCBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAg
ICAgIHJldHVybiBuaWw7CiAKICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZl
VmFsdWVGcm9tTWFpblRocmVhZDxpZD4oWyZ3ZWJDb3JlUG9pbnQsIHByb3RlY3RlZFNlbGYgPSBS
ZXRhaW5QdHI8V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+KHNlbGYpXSAoKSAtPiBpZCB7
Ci0gICAgICAgICAgICBhdXRvKiBjYWNoZSA9IHByb3RlY3RlZFNlbGYtPm1fb2JqZWN0LT5heE9i
amVjdENhY2hlKCk7CisgICAgICAgICAgICBhdXRvKiBjYWNoZSA9IHByb3RlY3RlZFNlbGYuZ2V0
KCkuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7CiAgICAgICAgICAgICBpZiAoIWNh
Y2hlKQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICAgICAgICAgIENoYXJhY3Rl
ck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBjYWNoZS0+Y2hhcmFjdGVyT2Zmc2V0Rm9yUG9pbnQo
d2ViQ29yZVBvaW50LCBwcm90ZWN0ZWRTZWxmLT5tX29iamVjdCk7CisgICAgICAgICAgICBDaGFy
YWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gY2FjaGUtPmNoYXJhY3Rlck9mZnNldEZvclBv
aW50KHdlYkNvcmVQb2ludCwgcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3QpOwog
ICAgICAgICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRTZWxmIHRleHRNYXJrZXJGb3JDaGFyYWN0ZXJP
ZmZzZXQ6Y2hhcmFjdGVyT2Zmc2V0XTsKICAgICAgICAgfSk7CiAgICAgfQogCiAgICAgaWYgKFth
dHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhCb3VuZHNGb3JUZXh0TWFya2VyUmFuZ2UiXSkg
ewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gW3NlbGYgcmFuZ2VGb3JUZXh0TWFya2Vy
UmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKLSAgICAgICAgYXV0byBib3VuZHMgPSBGbG9hdFJlY3Qo
bV9vYmplY3QtPmJvdW5kc0ZvclJhbmdlKHJhbmdlKSk7CisgICAgICAgIGF1dG8gYm91bmRzID0g
RmxvYXRSZWN0KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5ib3VuZHNGb3JSYW5nZShyYW5nZSkpOwog
ICAgICAgICBOU1JlY3QgcmVjdCA9IFtzZWxmIGNvbnZlcnRSZWN0VG9TcGFjZTpib3VuZHMgc3Bh
Y2U6QWNjZXNzaWJpbGl0eUNvbnZlcnNpb25TcGFjZTo6U2NyZWVuXTsKICAgICAgICAgcmV0dXJu
IFtOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6cmVjdF07CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1
dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUJvdW5kc0ZvclJhbmdlUGFyYW1ldGVy
aXplZEF0dHJpYnV0ZV0pIHsKICAgICAgICAgTlNSZWN0IHJlY3QgPSBBY2Nlc3NpYmlsaXR5Ojpy
ZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8TlNSZWN0PihbJnJhbmdlLCBwcm90ZWN0ZWRTZWxm
ID0gUmV0YWluUHRyPFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPihzZWxmKV0gKCkgLT4g
TlNSZWN0IHsKLSAgICAgICAgICAgIGF1dG8qIGNhY2hlID0gcHJvdGVjdGVkU2VsZi0+bV9vYmpl
Y3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICAgICAgICAgIGF1dG8qIGNhY2hlID0gcHJvdGVjdGVk
U2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKICAgICAgICAgICAg
IGlmICghY2FjaGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIENHUmVjdFplcm87CiAKLSAgICAg
ICAgICAgIENoYXJhY3Rlck9mZnNldCBzdGFydCA9IGNhY2hlLT5jaGFyYWN0ZXJPZmZzZXRGb3JJ
bmRleChyYW5nZS5sb2NhdGlvbiwgcHJvdGVjdGVkU2VsZi0+bV9vYmplY3QpOwotICAgICAgICAg
ICAgQ2hhcmFjdGVyT2Zmc2V0IGVuZCA9IGNhY2hlLT5jaGFyYWN0ZXJPZmZzZXRGb3JJbmRleChy
YW5nZS5sb2NhdGlvbityYW5nZS5sZW5ndGgsIHByb3RlY3RlZFNlbGYtPm1fb2JqZWN0KTsKKyAg
ICAgICAgICAgIENoYXJhY3Rlck9mZnNldCBzdGFydCA9IGNhY2hlLT5jaGFyYWN0ZXJPZmZzZXRG
b3JJbmRleChyYW5nZS5sb2NhdGlvbiwgcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmpl
Y3QpOworICAgICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGVuZCA9IGNhY2hlLT5jaGFyYWN0ZXJP
ZmZzZXRGb3JJbmRleChyYW5nZS5sb2NhdGlvbityYW5nZS5sZW5ndGgsIHByb3RlY3RlZFNlbGYu
Z2V0KCkuYXhCYWNraW5nT2JqZWN0KTsKICAgICAgICAgICAgIGlmIChzdGFydC5pc051bGwoKSB8
fCBlbmQuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIENHUmVjdFplcm87CiAKICAg
ICAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBjYWNoZS0+cmFuZ2VGb3JVbm9yZGVyZWRD
aGFyYWN0ZXJPZmZzZXRzKHN0YXJ0LCBlbmQpOwotICAgICAgICAgICAgYXV0byBib3VuZHMgPSBG
bG9hdFJlY3QocHJvdGVjdGVkU2VsZi0+bV9vYmplY3QtPmJvdW5kc0ZvclJhbmdlKHJhbmdlKSk7
CisgICAgICAgICAgICBhdXRvIGJvdW5kcyA9IEZsb2F0UmVjdChwcm90ZWN0ZWRTZWxmLmdldCgp
LmF4QmFja2luZ09iamVjdC0+Ym91bmRzRm9yUmFuZ2UocmFuZ2UpKTsKICAgICAgICAgICAgIHJl
dHVybiBbcHJvdGVjdGVkU2VsZiBjb252ZXJ0UmVjdFRvU3BhY2U6Ym91bmRzIHNwYWNlOkFjY2Vz
c2liaWxpdHlDb252ZXJzaW9uU3BhY2U6OlNjcmVlbl07CiAgICAgICAgIH0pOwogICAgICAgICBy
ZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpyZWN0XTsKICAgICB9CiAKICAgICBpZiAoW2F0
dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U3RyaW5nRm9yUmFuZ2VQYXJh
bWV0ZXJpemVkQXR0cmlidXRlXSkgewotICAgICAgICBpZiAobV9vYmplY3QtPmlzVGV4dENvbnRy
b2woKSkgeworICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVGV4dENvbnRyb2wo
KSkgewogICAgICAgICAgICAgUGxhaW5UZXh0UmFuZ2UgcGxhaW5UZXh0UmFuZ2UgPSBQbGFpblRl
eHRSYW5nZShyYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoKTsKLSAgICAgICAgICAgIHJldHVy
biBtX29iamVjdC0+ZG9BWFN0cmluZ0ZvclJhbmdlKHBsYWluVGV4dFJhbmdlKTsKKyAgICAgICAg
ICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9BWFN0cmluZ0ZvclJhbmdlKHBsYWlu
VGV4dFJhbmdlKTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5Ojpy
ZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8TlNTdHJpbmcgKj4oWyZyYW5nZSwgcHJvdGVjdGVk
U2VsZiA9IFJldGFpblB0cjxXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4oc2VsZildICgp
IC0+IE5TU3RyaW5nICogewotICAgICAgICAgICAgYXV0byogY2FjaGUgPSBwcm90ZWN0ZWRTZWxm
LT5tX29iamVjdC0+YXhPYmplY3RDYWNoZSgpOworICAgICAgICAgICAgYXV0byogY2FjaGUgPSBw
cm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpOwogICAg
ICAgICAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwogCi0gICAg
ICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnQgPSBjYWNoZS0+Y2hhcmFjdGVyT2Zmc2V0Rm9y
SW5kZXgocmFuZ2UubG9jYXRpb24sIHByb3RlY3RlZFNlbGYtPm1fb2JqZWN0KTsKLSAgICAgICAg
ICAgIENoYXJhY3Rlck9mZnNldCBlbmQgPSBjYWNoZS0+Y2hhcmFjdGVyT2Zmc2V0Rm9ySW5kZXgo
cmFuZ2UubG9jYXRpb24gKyByYW5nZS5sZW5ndGgsIHByb3RlY3RlZFNlbGYtPm1fb2JqZWN0KTsK
KyAgICAgICAgICAgIENoYXJhY3Rlck9mZnNldCBzdGFydCA9IGNhY2hlLT5jaGFyYWN0ZXJPZmZz
ZXRGb3JJbmRleChyYW5nZS5sb2NhdGlvbiwgcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdP
YmplY3QpOworICAgICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGVuZCA9IGNhY2hlLT5jaGFyYWN0
ZXJPZmZzZXRGb3JJbmRleChyYW5nZS5sb2NhdGlvbiArIHJhbmdlLmxlbmd0aCwgcHJvdGVjdGVk
U2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3QpOwogICAgICAgICAgICAgaWYgKHN0YXJ0LmlzTnVs
bCgpIHx8IGVuZC5pc051bGwoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwogCiAgICAg
ICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gY2FjaGUtPnJhbmdlRm9yVW5vcmRlcmVkQ2hh
cmFjdGVyT2Zmc2V0cyhzdGFydCwgZW5kKTsKLSAgICAgICAgICAgIHJldHVybiBwcm90ZWN0ZWRT
ZWxmLT5tX29iamVjdC0+c3RyaW5nRm9yUmFuZ2UocmFuZ2UpOworICAgICAgICAgICAgcmV0dXJu
IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0LT5zdHJpbmdGb3JSYW5nZShyYW5n
ZSk7CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtNDEyNSw3ICs0MTI4LDcgQEAgQUxMT1dfREVQ
UkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAgICByZXR1cm4gbmlsOwogCiAg
ICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8
aWQ+KFt0ZXh0TWFya2VyMSwgdGV4dE1hcmtlcjIsIHByb3RlY3RlZFNlbGYgPSBSZXRhaW5QdHI8
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+KHNlbGYpXSAoKSAtPiBpZCB7Ci0gICAgICAg
ICAgICBhdXRvKiBjYWNoZSA9IHByb3RlY3RlZFNlbGYtPm1fb2JqZWN0LT5heE9iamVjdENhY2hl
KCk7CisgICAgICAgICAgICBhdXRvKiBjYWNoZSA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNr
aW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7CiAgICAgICAgICAgICBpZiAoIWNhY2hlKQogICAg
ICAgICAgICAgICAgIHJldHVybiBuaWw7CiAKQEAgLTQxNDgsNyArNDE1MSw3IEBAIEFMTE9XX0RF
UFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVh
bFRvU3RyaW5nOkAiQVhMZWZ0V29yZFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiXSkgewog
ICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFk
PGlkPihbdGV4dE1hcmtlciwgcHJvdGVjdGVkU2VsZiA9IFJldGFpblB0cjxXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlcj4oc2VsZildICgpIC0+IGlkIHsKLSAgICAgICAgICAgIGF1dG8qIGNh
Y2hlID0gcHJvdGVjdGVkU2VsZi0+bV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICAgICAg
ICAgIGF1dG8qIGNhY2hlID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3QtPmF4
T2JqZWN0Q2FjaGUoKTsKICAgICAgICAgICAgIGlmICghY2FjaGUpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIG5pbDsKIApAQCAtNDE2MCw3ICs0MTYzLDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBM
RU1FTlRBVElPTlNfRU5ECiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJB
WFJpZ2h0V29yZFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiXSkgewogICAgICAgICByZXR1
cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbdGV4dE1h
cmtlciwgcHJvdGVjdGVkU2VsZiA9IFJldGFpblB0cjxXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlcj4oc2VsZildICgpIC0+IGlkIHsKLSAgICAgICAgICAgIGF1dG8qIGNhY2hlID0gcHJvdGVj
dGVkU2VsZi0+bV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICAgICAgICAgIGF1dG8qIGNh
Y2hlID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUo
KTsKICAgICAgICAgICAgIGlmICghY2FjaGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsK
IApAQCAtNDE3MiwxOSArNDE3NSwxOSBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9O
U19FTkQKIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYTGVmdExpbmVU
ZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIl0pIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9u
IHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFy
a2VyKV07Ci0gICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZwUmFuZ2UgPSBtX29iamVjdC0+
bGVmdExpbmVWaXNpYmxlUG9zaXRpb25SYW5nZSh2aXNpYmxlUG9zKTsKKyAgICAgICAgVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5sZWZ0TGluZVZp
c2libGVQb3NpdGlvblJhbmdlKHZpc2libGVQb3MpOwogICAgICAgICByZXR1cm4gW3NlbGYgdGV4
dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6dnBSYW5nZS5zdGFydCBlbmRQb3NpdGlv
bjp2cFJhbmdlLmVuZF07CiAgICAgfQogICAgIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxU
b1N0cmluZzpAIkFYUmlnaHRMaW5lVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciJdKSB7CiAg
ICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9u
Rm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOwotICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5n
ZSB2cFJhbmdlID0gbV9vYmplY3QtPnJpZ2h0TGluZVZpc2libGVQb3NpdGlvblJhbmdlKHZpc2li
bGVQb3MpOworICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlID0gc2VsZi5heEJh
Y2tpbmdPYmplY3QtPnJpZ2h0TGluZVZpc2libGVQb3NpdGlvblJhbmdlKHZpc2libGVQb3MpOwog
ICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6
dnBSYW5nZS5zdGFydCBlbmRQb3NpdGlvbjp2cFJhbmdlLmVuZF07CiAgICAgfQogCiAgICAgaWYg
KFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhTZW50ZW5jZVRleHRNYXJrZXJSYW5nZUZv
clRleHRNYXJrZXIiXSkgewogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVW
YWx1ZUZyb21NYWluVGhyZWFkPGlkPihbdGV4dE1hcmtlciwgcHJvdGVjdGVkU2VsZiA9IFJldGFp
blB0cjxXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4oc2VsZildICgpIC0+IGlkIHsKLSAg
ICAgICAgICAgIGF1dG8qIGNhY2hlID0gcHJvdGVjdGVkU2VsZi0+bV9vYmplY3QtPmF4T2JqZWN0
Q2FjaGUoKTsKKyAgICAgICAgICAgIGF1dG8qIGNhY2hlID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5h
eEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKICAgICAgICAgICAgIGlmICghY2FjaGUp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKIApAQCAtNDE5Niw3ICs0MTk5LDcgQEAgQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAKICAgICBpZiAoW2F0dHJpYnV0ZSBp
c0VxdWFsVG9TdHJpbmc6QCJBWFBhcmFncmFwaFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIi
XSkgewogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWlu
VGhyZWFkPGlkPihbdGV4dE1hcmtlciwgcHJvdGVjdGVkU2VsZiA9IFJldGFpblB0cjxXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4oc2VsZildICgpIC0+IGlkIHsKLSAgICAgICAgICAgIGF1
dG8qIGNhY2hlID0gcHJvdGVjdGVkU2VsZi0+bV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAg
ICAgICAgICAgIGF1dG8qIGNhY2hlID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmpl
Y3QtPmF4T2JqZWN0Q2FjaGUoKTsKICAgICAgICAgICAgIGlmICghY2FjaGUpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5pbDsKIApAQCAtNDIwOCw3ICs0MjExLDcgQEAgQUxMT1dfREVQUkVDQVRF
RF9JTVBMRU1FTlRBVElPTlNfRU5ECiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJp
bmc6QCJBWE5leHRXb3JkRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgewogICAgICAgICBy
ZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbdGV4
dE1hcmtlciwgcHJvdGVjdGVkU2VsZiA9IFJldGFpblB0cjxXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlcj4oc2VsZildICgpIC0+IGlkIHsKLSAgICAgICAgICAgIGF1dG8qIGNhY2hlID0gcHJv
dGVjdGVkU2VsZi0+bV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICAgICAgICAgIGF1dG8q
IGNhY2hlID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2Fj
aGUoKTsKICAgICAgICAgICAgIGlmICghY2FjaGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5p
bDsKIApAQCAtNDIyMCw3ICs0MjIzLDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElP
TlNfRU5ECiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFByZXZpb3Vz
V29yZFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgewogICAgICAgICByZXR1cm4gQWNj
ZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbdGV4dE1hcmtlciwg
cHJvdGVjdGVkU2VsZiA9IFJldGFpblB0cjxXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4o
c2VsZildICgpIC0+IGlkIHsKLSAgICAgICAgICAgIGF1dG8qIGNhY2hlID0gcHJvdGVjdGVkU2Vs
Zi0+bV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICAgICAgICAgIGF1dG8qIGNhY2hlID0g
cHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKICAg
ICAgICAgICAgIGlmICghY2FjaGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKIApAQCAt
NDIzMiwxNyArNDIzNSwxNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQK
IAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYTmV4dExpbmVFbmRUZXh0
TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxl
UG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOwot
ICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjptX29iamVj
dC0+bmV4dExpbmVFbmRQb3NpdGlvbih2aXNpYmxlUG9zKV07CisgICAgICAgIHJldHVybiBbc2Vs
ZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5uZXh0
TGluZUVuZFBvc2l0aW9uKHZpc2libGVQb3MpXTsKICAgICB9CiAgICAgCiAgICAgaWYgKFthdHRy
aWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhQcmV2aW91c0xpbmVTdGFydFRleHRNYXJrZXJGb3JU
ZXh0TWFya2VyIl0pIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2Vs
ZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07Ci0gICAgICAgIHJl
dHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0LT5wcmV2aW91
c0xpbmVTdGFydFBvc2l0aW9uKHZpc2libGVQb3MpXTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRl
eHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246c2VsZi5heEJhY2tpbmdPYmplY3QtPnByZXZpb3Vz
TGluZVN0YXJ0UG9zaXRpb24odmlzaWJsZVBvcyldOwogICAgIH0KICAgICAKICAgICBpZiAoW2F0
dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWE5leHRTZW50ZW5jZUVuZFRleHRNYXJrZXJGb3JU
ZXh0TWFya2VyIl0pIHsKICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFs
dWVGcm9tTWFpblRocmVhZDxpZD4oW3RleHRNYXJrZXIsIHByb3RlY3RlZFNlbGYgPSBSZXRhaW5Q
dHI8V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+KHNlbGYpXSAoKSAtPiBpZCB7Ci0gICAg
ICAgICAgICBhdXRvKiBjYWNoZSA9IHByb3RlY3RlZFNlbGYtPm1fb2JqZWN0LT5heE9iamVjdENh
Y2hlKCk7CisgICAgICAgICAgICBhdXRvKiBjYWNoZSA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhC
YWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7CiAgICAgICAgICAgICBpZiAoIWNhY2hlKQog
ICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgICAgICAKQEAgLTQyNTQsNyArNDI1
Nyw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogCiAgICAgaWYgKFth
dHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhQcmV2aW91c1NlbnRlbmNlU3RhcnRUZXh0TWFy
a2VyRm9yVGV4dE1hcmtlciJdKSB7CiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRy
aWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFt0ZXh0TWFya2VyLCBwcm90ZWN0ZWRTZWxmID0g
UmV0YWluUHRyPFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPihzZWxmKV0gKCkgLT4gaWQg
ewotICAgICAgICAgICAgYXV0byogY2FjaGUgPSBwcm90ZWN0ZWRTZWxmLT5tX29iamVjdC0+YXhP
YmplY3RDYWNoZSgpOworICAgICAgICAgICAgYXV0byogY2FjaGUgPSBwcm90ZWN0ZWRTZWxmLmdl
dCgpLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpOwogICAgICAgICAgICAgaWYgKCFj
YWNoZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwogCkBAIC00MjY2LDcgKzQyNjksNyBA
QCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIAogICAgIGlmIChbYXR0cmli
dXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYTmV4dFBhcmFncmFwaEVuZFRleHRNYXJrZXJGb3JUZXh0
TWFya2VyIl0pIHsKICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVG
cm9tTWFpblRocmVhZDxpZD4oW3RleHRNYXJrZXIsIHByb3RlY3RlZFNlbGYgPSBSZXRhaW5QdHI8
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+KHNlbGYpXSAoKSAtPiBpZCB7Ci0gICAgICAg
ICAgICBhdXRvKiBjYWNoZSA9IHByb3RlY3RlZFNlbGYtPm1fb2JqZWN0LT5heE9iamVjdENhY2hl
KCk7CisgICAgICAgICAgICBhdXRvKiBjYWNoZSA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNr
aW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7CiAgICAgICAgICAgICBpZiAoIWNhY2hlKQogICAg
ICAgICAgICAgICAgIHJldHVybiBuaWw7CiAKQEAgLTQyNzgsNyArNDI4MSw3IEBAIEFMTE9XX0RF
UFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVh
bFRvU3RyaW5nOkAiQVhQcmV2aW91c1BhcmFncmFwaFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJr
ZXIiXSkgewogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21N
YWluVGhyZWFkPGlkPihbdGV4dE1hcmtlciwgcHJvdGVjdGVkU2VsZiA9IFJldGFpblB0cjxXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4oc2VsZildICgpIC0+IGlkIHsKLSAgICAgICAgICAg
IGF1dG8qIGNhY2hlID0gcHJvdGVjdGVkU2VsZi0+bV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsK
KyAgICAgICAgICAgIGF1dG8qIGNhY2hlID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdP
YmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKICAgICAgICAgICAgIGlmICghY2FjaGUpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG5pbDsKIApAQCAtNDI5MCw3ICs0MjkzLDcgQEAgQUxMT1dfREVQUkVD
QVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9T
dHJpbmc6QCJBWFN0eWxlVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciJdKSB7CiAgICAgICAg
IFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4
dE1hcmtlcjoodGV4dE1hcmtlcildOwotICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJh
bmdlID0gbV9vYmplY3QtPnN0eWxlUmFuZ2VGb3JQb3NpdGlvbih2aXNpYmxlUG9zKTsKKyAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5z
dHlsZVJhbmdlRm9yUG9zaXRpb24odmlzaWJsZVBvcyk7CiAgICAgICAgIHJldHVybiBbc2VsZiB0
ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2cFJhbmdlLnN0YXJ0IGVuZFBvc2l0
aW9uOnZwUmFuZ2UuZW5kXTsKICAgICB9CiAgICAgCkBAIC00MzMxLDExICs0MzM0LDExIEBAIEFM
TE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgIH0KICNlbmRpZgogCi0gICAg
aWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKm1fb2JqZWN0KSAmJiBkb3duY2FzdDxBY2Nlc3Np
YmlsaXR5VGFibGU+KCptX29iamVjdCkuaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgp
KSB7CisgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKnNlbGYuYXhCYWNraW5nT2JqZWN0
KSAmJiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpzZWxmLmF4QmFja2luZ09iamVjdCku
aXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpKSB7CiAgICAgICAgIGlmIChbYXR0cmli
dXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDZWxsRm9yQ29sdW1uQW5kUm93UGFy
YW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKICAgICAgICAgICAgIGlmIChhcnJheSA9PSBuaWwgfHwg
W2FycmF5IGNvdW50XSAhPSAyKQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAg
ICAgICBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBjZWxsID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0
eVRhYmxlPigqbV9vYmplY3QpLmNlbGxGb3JDb2x1bW5BbmRSb3coW1thcnJheSBvYmplY3RBdElu
ZGV4OjBdIHVuc2lnbmVkSW50VmFsdWVdLCBbW2FycmF5IG9iamVjdEF0SW5kZXg6MV0gdW5zaWdu
ZWRJbnRWYWx1ZV0pOworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogY2VsbCA9
IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KS5jZWxs
Rm9yQ29sdW1uQW5kUm93KFtbYXJyYXkgb2JqZWN0QXRJbmRleDowXSB1bnNpZ25lZEludFZhbHVl
XSwgW1thcnJheSBvYmplY3RBdEluZGV4OjFdIHVuc2lnbmVkSW50VmFsdWVdKTsKICAgICAgICAg
ICAgIGlmICghY2VsbCkKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICAgICAg
CkBAIC00MzQzLDM0ICs0MzQ2LDM0IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05T
X0VORAogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGlmIChtX29iamVjdC0+aXNUZXh0Q29u
dHJvbCgpKSB7CisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1RleHRDb250cm9sKCkp
IHsKICAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOiAoTlNTdHJpbmcgKilr
QVhMaW5lRm9ySW5kZXhQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewotICAgICAgICAgICAgaW50
IGxpbmVOdW1iZXIgPSBtX29iamVjdC0+ZG9BWExpbmVGb3JJbmRleChbbnVtYmVyIGludFZhbHVl
XSk7CisgICAgICAgICAgICBpbnQgbGluZU51bWJlciA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5k
b0FYTGluZUZvckluZGV4KFtudW1iZXIgaW50VmFsdWVdKTsKICAgICAgICAgICAgIGlmIChsaW5l
TnVtYmVyIDwgMCkKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICAgICAgcmV0
dXJuIFtOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnQ6bGluZU51bWJlcl07CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzogKE5T
U3RyaW5nICopa0FYUmFuZ2VGb3JMaW5lUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKLSAgICAg
ICAgICAgIFBsYWluVGV4dFJhbmdlIHRleHRSYW5nZSA9IG1fb2JqZWN0LT5kb0FYUmFuZ2VGb3JM
aW5lKFtudW1iZXIgaW50VmFsdWVdKTsKKyAgICAgICAgICAgIFBsYWluVGV4dFJhbmdlIHRleHRS
YW5nZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5kb0FYUmFuZ2VGb3JMaW5lKFtudW1iZXIgaW50
VmFsdWVdKTsKICAgICAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTogTlNN
YWtlUmFuZ2UodGV4dFJhbmdlLnN0YXJ0LCB0ZXh0UmFuZ2UubGVuZ3RoKV07CiAgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzogKE5TU3Ry
aW5nKilrQVhTdHJpbmdGb3JSYW5nZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7CiAgICAgICAg
ICAgICBQbGFpblRleHRSYW5nZSBwbGFpblRleHRSYW5nZSA9IFBsYWluVGV4dFJhbmdlKHJhbmdl
LmxvY2F0aW9uLCByYW5nZS5sZW5ndGgpOwotICAgICAgICAgICAgcmV0dXJuIHJhbmdlU2V0ID8g
KGlkKShtX29iamVjdC0+ZG9BWFN0cmluZ0ZvclJhbmdlKHBsYWluVGV4dFJhbmdlKSkgOiBuaWw7
CisgICAgICAgICAgICByZXR1cm4gcmFuZ2VTZXQgPyAoaWQpKHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5kb0FYU3RyaW5nRm9yUmFuZ2UocGxhaW5UZXh0UmFuZ2UpKSA6IG5pbDsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOiAoTlNTdHJp
bmcqKWtBWFJhbmdlRm9yUG9zaXRpb25QYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewogICAgICAg
ICAgICAgaWYgKCFwb2ludFNldCkKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAg
ICAgICAgSW50UG9pbnQgd2ViQ29yZVBvaW50ID0gSW50UG9pbnQocG9pbnQpOwotICAgICAgICAg
ICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlID0gbV9vYmplY3QtPmRvQVhSYW5nZUZvclBvc2l0
aW9uKHdlYkNvcmVQb2ludCk7CisgICAgICAgICAgICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2Ug
PSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9BWFJhbmdlRm9yUG9zaXRpb24od2ViQ29yZVBvaW50
KTsKICAgICAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTogTlNNYWtlUmFu
Z2UodGV4dFJhbmdlLnN0YXJ0LCB0ZXh0UmFuZ2UubGVuZ3RoKV07CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzogKE5TU3RyaW5nKilr
QVhSYW5nZUZvckluZGV4UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIFBs
YWluVGV4dFJhbmdlIHRleHRSYW5nZSA9IG1fb2JqZWN0LT5kb0FYUmFuZ2VGb3JJbmRleChbbnVt
YmVyIGludFZhbHVlXSk7CisgICAgICAgICAgICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2UgPSBz
ZWxmLmF4QmFja2luZ09iamVjdC0+ZG9BWFJhbmdlRm9ySW5kZXgoW251bWJlciBpbnRWYWx1ZV0p
OwogICAgICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOiBOU01ha2VSYW5n
ZSh0ZXh0UmFuZ2Uuc3RhcnQsIHRleHRSYW5nZS5sZW5ndGgpXTsKICAgICAgICAgfQogICAgICAg
ICAKQEAgLTQzNzgsNyArNDM4MSw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05T
X0VORAogICAgICAgICAgICAgaWYgKCFyYW5nZVNldCkKICAgICAgICAgICAgICAgICByZXR1cm4g
bmlsOwogICAgICAgICAgICAgUGxhaW5UZXh0UmFuZ2UgcGxhaW5UZXh0UmFuZ2UgPSBQbGFpblRl
eHRSYW5nZShyYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoKTsKLSAgICAgICAgICAgIGF1dG8g
Ym91bmRzID0gRmxvYXRSZWN0KG1fb2JqZWN0LT5kb0FYQm91bmRzRm9yUmFuZ2VVc2luZ0NoYXJh
Y3Rlck9mZnNldChwbGFpblRleHRSYW5nZSkpOworICAgICAgICAgICAgYXV0byBib3VuZHMgPSBG
bG9hdFJlY3Qoc2VsZi5heEJhY2tpbmdPYmplY3QtPmRvQVhCb3VuZHNGb3JSYW5nZVVzaW5nQ2hh
cmFjdGVyT2Zmc2V0KHBsYWluVGV4dFJhbmdlKSk7CiAgICAgICAgICAgICBOU1JlY3QgcmVjdCA9
IFtzZWxmIGNvbnZlcnRSZWN0VG9TcGFjZTpib3VuZHMgc3BhY2U6QWNjZXNzaWJpbGl0eUNvbnZl
cnNpb25TcGFjZTo6U2NyZWVuXTsKICAgICAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdp
dGhSZWN0OnJlY3RdOwogICAgICAgICB9CkBAIC00MzkwLDcgKzQzOTMsNyBAQCBBTExPV19ERVBS
RUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgICAgIHJldHVybiByYW5nZVNldCA/
IFtzZWxmIGRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2U6cmFuZ2VdIDogbmlsOwogICAgICAg
ICAKICAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOiAoTlNTdHJpbmcqKWtB
WFN0eWxlUmFuZ2VGb3JJbmRleFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7Ci0gICAgICAgICAg
ICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2UgPSBtX29iamVjdC0+ZG9BWFN0eWxlUmFuZ2VGb3JJ
bmRleChbbnVtYmVyIGludFZhbHVlXSk7CisgICAgICAgICAgICBQbGFpblRleHRSYW5nZSB0ZXh0
UmFuZ2UgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9BWFN0eWxlUmFuZ2VGb3JJbmRleChbbnVt
YmVyIGludFZhbHVlXSk7CiAgICAgICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmFu
Z2U6IE5TTWFrZVJhbmdlKHRleHRSYW5nZS5zdGFydCwgdGV4dFJhbmdlLmxlbmd0aCldOwogICAg
ICAgICB9CiAgICAgfQpAQCAtNDQxOSw3ICs0NDIyLDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBM
RU1FTlRBVElPTlNfRU5ECiAgICAgCiAgICAgLy8gVHJlZSBvYmplY3RzIHJldHVybiB0aGVpciBy
b3dzIGFzIHRoZWlyIGNoaWxkcmVuLiBXZSBjYW4gdXNlIHRoZSBvcmlnaW5hbCBtZXRob2QKICAg
ICAvLyBoZXJlLCBiZWNhdXNlIHdlIHdvbid0IGdhaW4gYW55IHNwZWVkIHVwLgotICAgIGlmICht
X29iamVjdC0+aXNUcmVlKCkpCisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1RyZWUo
KSkKICAgICAgICAgcmV0dXJuIFtzdXBlciBhY2Nlc3NpYmlsaXR5SW5kZXhPZkNoaWxkOmNoaWxk
XTsKICAgICAKICAgICBOU0FycmF5ICpjaGlsZHJlbiA9IHNlbGYuY2hpbGRyZW5WZWN0b3JBcnJh
eTsKQEAgLTQ0NDksNyArNDQ1Miw3IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JF
R0lOCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUNo
aWxkcmVuQXR0cmlidXRlXSkgewogICAgICAgICAvLyBUcmVlIGl0ZW1zIG9iamVjdCByZXR1cm5z
IGEgZGlmZmVyZW50IHNldCBvZiBjaGlsZHJlbiB0aGFuIHRob3NlIHRoYXQgYXJlIGluIGNoaWxk
cmVuKCkKICAgICAgICAgLy8gYmVjYXVzZSBhbiBBWE91dGxpbmUgKHRoZSBtYWMgcm9sZSBpcyBi
ZWNvbWVzKSBoYXMgc29tZSBvZGQgc3RpcHVsYXRpb25zLgotICAgICAgICBpZiAobV9vYmplY3Qt
PmlzVHJlZSgpIHx8IG1fb2JqZWN0LT5pc1RyZWVJdGVtKCkpCisgICAgICAgIGlmIChzZWxmLmF4
QmFja2luZ09iamVjdC0+aXNUcmVlKCkgfHwgc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVHJlZUl0
ZW0oKSkKICAgICAgICAgICAgIHJldHVybiBbW3NlbGYgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZh
bHVlOk5TQWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXSBjb3VudF07CiAgICAgICAgIAog
ICAgICAgICBhdXRvIGNoaWxkcmVuU2l6ZSA9IHNlbGYuY2hpbGRyZW5WZWN0b3JTaXplOwpAQCAt
NDQ4Miw3ICs0NDg1LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAgICAg
ICAgICAgICByZXR1cm4gW2NoaWxkcmVuIHN1YmFycmF5V2l0aFJhbmdlOk5TTWFrZVJhbmdlKGlu
ZGV4LCBhcnJheUxlbmd0aCldOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKF9heEJhY2tpbmdP
YmplY3QtPmlzVHJlZSgpIHx8IF9heEJhY2tpbmdPYmplY3QtPmlzVHJlZUl0ZW0oKSkgeworICAg
ICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVHJlZSgpIHx8IHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5pc1RyZWVJdGVtKCkpIHsKICAgICAgICAgICAgIC8vIFRyZWUgb2JqZWN0cyByZXR1
cm4gdGhlaXIgcm93cyBhcyB0aGVpciBjaGlsZHJlbiAmIHRyZWUgaXRlbXMgcmV0dXJuIHRoZWly
IGNvbnRlbnRzIHNhbnMgcm93cy4KICAgICAgICAgICAgIC8vIFdlIGNhbiB1c2UgdGhlIG9yaWdp
bmFsIG1ldGhvZCBpbiB0aGlzIGNhc2UuCiAgICAgICAgICAgICByZXR1cm4gW3N1cGVyIGFjY2Vz
c2liaWxpdHlBcnJheUF0dHJpYnV0ZVZhbHVlczphdHRyaWJ1dGUgaW5kZXg6aW5kZXggbWF4Q291
bnQ6bWF4Q291bnRdOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388571</attachid>
            <date>2020-01-23 11:55:56 -0800</date>
            <delta_ts>2020-01-23 16:58:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206384-20200123145555.patch</filename>
            <type>text/plain</type>
            <size>224665</size>
            <attacher name="Andres Gonzalez">andresg_22</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0Nzk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWI0YzhlZmEyOWViZGYx
N2VjMTEyNjM3MWZjMTE4MDQwNmY4ZTk5Zi4uODZkYjBlNjM3ZDhiYTNjYTY0N2M5MTkxNTRkNDQ0
ZGUwNWYzYmYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0NCBAQAorMjAyMC0wMS0yMyAgQW5k
cmVzIEdvbnphbGV6ICA8YW5kcmVzZ18yMkBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIHRoZSBz
YW1lIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGZvciBhc3NvY2lhdGVkIEFYT2JqZWN0IGFu
ZCBBWElzb2xhdGVkT2JqZWN0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA2Mzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQXNzb2NpYXRlZCBBWE9iamVjdCBhbmQgQVhJc29sYXRlZE9iamVjdCBuZWVk
IHRvIHNoYXJlIHRoZSBzYW1lCisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGlu
IG9yZGVyIGZvciBhY2Nlc3NpYmlsaXR5IGNsaWVudHMgdG8gd29yaworICAgICAgICBwcm9wZXJs
eS4gVGhpcyBjaGFuZ2UgaW1wbGVtZW50cyBDaHJpcyBGbGVpemFjaCdzIG9yaWdpbmFsIGFwcHJv
YWNoIHRvCisgICAgICAgIGhhdmUgYm90aCB0aGUgQVhPYmplY3QgYW5kIElzb2xhdGVkT2JqZWN0
IGluIHRoZSBzYW1lIHdyYXBwZXIuIFRoaXMKKyAgICAgICAgYXBwcm9hY2ggYWxsb3dzIHRoZSBl
dmVudCBub3RpZmljYXRpb24gY29kZSB0byByZW1haW4gdGhlIHNhbWUgaW4KKyAgICAgICAgaXNv
bGF0ZWQgdHJlZSBtb2RlLCBhbmQgbWluaW1pemVzIGxvY2sgY29udGVudGlvbiBiZXR3ZWVuIHRo
ZSBtYWluIGFuZAorICAgICAgICBBWCB0aHJlYWRzLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmNh
Y2hlQW5kSW5pdGlhbGl6ZVdyYXBwZXIpOiBVdGlsaXR5IG1ldGhvZCB0aGF0IGVuY2Fwc3VsYXRl
cyB0aGVzZSBvcGVyYXRpb25zIHBlcmZvcm1lZCBpbiB0aGUgZ2V0T3JDcmVhdGUgbWV0aG9kcy4K
KyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmNyZWF0ZUlzb2xhdGVkVHJlZUhpZXJhcmNoeSk6IEF0
dGFjaGVzIHRvIHRoZSBJc29sYXRlZE9iamVjdCB0aGUgc2FtZSB3cmFwcGVyIGFzIGl0cyBhc3Nv
Y2lhdGVkIEFYT2JqZWN0LgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5o
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVySU9TLm1tOiBJbnN0ZWFkIG9mIGFjY2Vzc2luZyB0aGUgYmFja2luZyBvYmplY3QgZGlyZWN0
bHkgKG1fb2JqZWN0KSBvciB0aHJvdWdoIHRoZSBtYWNybyBfYXhCYWNraW5nT2JqZWN0LCB1c2Vz
IHNlbGYuYXhCYWNraW5nT2JqZWN0LgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFu
Y2VzdG9yKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgaW5pdFdpdGhE
YXRhOmFjY2Vzc2liaWxpdHlPYmplY3Q6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGRldGFjaF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBkZWFsbG9jXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUNhbkZ1enp5SGl0VGVzdF0pOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5SGl0VGVzdDpd
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgZW5hYmxlQXR0cmli
dXRlQ2FjaGluZ10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBk
aXNhYmxlQXR0cmlidXRlQ2FjaGluZ10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5RWxlbWVudENvdW50XSk6CisgICAgICAgICgtW1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlFbGVtZW50QXRJbmRleDpdKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgaW5kZXhPZkFjY2Vzc2li
aWxpdHlFbGVtZW50Ol0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBfYWNjZXNzaWJpbGl0eVBhdGhdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgYWNjZXNzaWJpbGl0eUhhc1BvcHVwXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlQb3B1cFZhbHVlXSk6CisgICAgICAgICgt
W1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlMYW5ndWFnZV0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5SXNE
aWFsb2ddKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vz
c2liaWxpdHlUcmVlQW5jZXN0b3JdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlMaXN0QW5jZXN0b3JdKToKKyAgICAgICAgKC1bV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlBcnRpY2xlQW5jZXN0b3JdKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlM
YW5kbWFya0FuY2VzdG9yXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyIF9hY2Nlc3NpYmlsaXR5VGFibGVBbmNlc3Rvcl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eUlzSW5UYWJsZUNlbGxdKToKKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlGaWVsZHNl
dEFuY2VzdG9yXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9h
Y2Nlc3NpYmlsaXR5RnJhbWVBbmNlc3Rvcl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eVRyYWl0c0Zyb21BbmNlc3RvcnNdKToKKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUlzV2ViSW50
ZXJhY3RpdmVWaWRlb10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBpbnRlcmFjdGl2ZVZpZGVvRGVzY3JpcHRpb25dKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUlzTWVkaWFQbGF5aW5nXSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlJc01lZGlhTXV0
ZWRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJp
bGl0eVRvZ2dsZU11dGVGb3JNZWRpYV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5VmlkZW9FbnRlckZ1bGxzY3JlZW5dKToKKyAgICAgICAg
KC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlUZXh0RW50cnlU
cmFpdHNdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNz
aWJpbGl0eVRyYWl0c10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBpc1NWR0dyb3VwRWxlbWVudF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBkZXRlcm1pbmVJc0FjY2Vzc2liaWxpdHlFbGVtZW50XSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHN0cmluZ1ZhbHVlU2hvdWxkQmVVc2VkSW5MYWJl
bF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJp
bGl0eUhhc1RvdWNoRXZlbnRMaXN0ZW5lcl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eVZhbHVlSXNBdXRvZmlsbGVkXSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5SXNTdHJvbmdQ
YXNzd29yZEZpZWxkXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
IF9hY2Nlc3NpYmlsaXR5TWluVmFsdWVdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlNYXhWYWx1ZV0pOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0aW9uXSk6Cisg
ICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlMYWJl
bF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0YWJsZUNlbGxQ
YXJlbnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGFibGVQ
YXJlbnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNz
aWJpbGl0eVRpdGxlRWxlbWVudF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBhY2Nlc3NpYmlsaXR5Um93UmFuZ2VdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUJsb2NrcXVvdGVMZXZlbF0pOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5RGF0ZXRpbWVW
YWx1ZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3Np
YmlsaXR5UGxhY2Vob2xkZXJWYWx1ZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5Q29sb3JTdHJpbmdWYWx1ZV0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5VmFsdWVdKToKKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUlzQXR0YWNo
bWVudEVsZW1lbnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
YWNjZXNzaWJpbGl0eUlzQ29tYm9Cb3hdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUhpbnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eVVSTF0pOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eVNjcm9sbFRvVmlzaWJsZV0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5U2Ny
b2xsOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNz
aWJpbGl0eVJlbGF0aXZlRnJhbWVdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgYWNjZXNzaWJpbGl0eUVsZW1lbnRSZWN0XSk6CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlWaXNpYmxlQ29udGVudFJlY3RdKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUFj
dGl2YXRpb25Qb2ludF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBhY2Nlc3NpYmlsaXR5RnJhbWVdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgY29udGFpbnNVbm5hdHVyYWxseVNlZ21lbnRlZENoaWxkcmVuXSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlDb250YWluZXJd
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0
eUZvY3VzZWRVSUVsZW1lbnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgX2FjY2Vzc2liaWxpdHlXZWJEb2N1bWVudFZpZXddKToKKyAgICAgICAgKC1bV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUNhblNldFZhbHVlXSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlMaW5rUmVs
YXRpb25zaGlwVHlwZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBhY2Nlc3NpYmlsaXR5UmVxdWlyZWRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUZsb3dUb0VsZW1lbnRzXSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlMaW5rZWRFbGVtZW50XSk6
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGlzQXR0YWNobWVudF0p
OgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5
VGV4dHVhbENvbnRleHRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgX2FjY2Vzc2liaWxpdHlBY3RpdmF0ZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciBhdHRhY2htZW50Vmlld10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eVNjcm9sbFBvc2l0aW9uXSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5U2Nyb2xsU2l6
ZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJp
bGl0eVNjcm9sbFZpc2libGVSZWN0XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlGaW5kTWF0Y2hpbmdPYmplY3RzOl0pOgorICAgICAgICAo
LVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5TW9kaWZ5U2VsZWN0
aW9uOmluY3JlYXNlOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBhY2Nlc3NpYmlsaXR5TW92ZVNlbGVjdGlvblRvTWFya2VyOl0pOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5SW5jcmVtZW50XSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlEZWNyZW1l
bnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2li
aWxpdHlTZXRWYWx1ZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgc3RyaW5nRm9yVGV4dE1hcmtlcnM6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGFycmF5T2ZUZXh0Rm9yVGV4dE1hcmtlcnM6YXR0cmlidXRlZDpdKToKKyAg
ICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2NvbnZlcnRUb05TUmFuZ2U6
XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9jb252ZXJ0VG9E
T01SYW5nZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgcG9z
aXRpb25Gb3JUZXh0TWFya2VyOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciB0ZXh0TWFya2VyUmFuZ2VdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgdGV4dE1hcmtlclJhbmdlRm9yU2VsZWN0aW9uXSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRleHRNYXJrZXJGb3JQb3NpdGlvbjpdKToKKyAg
ICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgc3RyaW5nRm9yUmFuZ2U6XSk6
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5
U2VsZWN0ZWRUZXh0UmFuZ2VdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgX2FjY2Vzc2liaWxpdHlTZXRTZWxlY3RlZFRleHRSYW5nZTpdKToKKyAgICAgICAgKC1b
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eVJlcGxhY2VSYW5nZTp3
aXRoVGV4dDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNj
ZXNzaWJpbGl0eUluc2VydFRleHQ6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIHNlbGVjdGVkVGV4dE1hcmtlcl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciBsaW5lRW5kTWFya2VyRm9yTWFya2VyOl0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBsaW5lU3RhcnRNYXJrZXJGb3JNYXJrZXI6XSk6
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIG1pc3NwZWxsaW5nVGV4
dE1hcmtlclJhbmdlOmZvcndhcmQ6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIGZyYW1lRm9yVGV4dE1hcmtlcnM6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIHJhbmdlRnJvbU1hcmtlcnM6d2l0aFRleHQ6XSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRleHRNYXJrZXJGb3JQb2ludDpdKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgbmV4dE1hcmtlckZvckNo
YXJhY3Rlck9mZnNldDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgcHJldmlvdXNNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6XSk6CisgICAgICAgICgtW1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHJhbmdlRm9yVGV4dE1hcmtlcnM6XSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHN0YXJ0T3JFbmRUZXh0TWFya2VyRm9y
VGV4dE1hcmtlcnM6aXNTdGFydDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgdGV4dE1hcmtlcnNGb3JSYW5nZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUV4cGFuZGVkVGV4dFZhbHVlXSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlJZGVudGlm
aWVyXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2li
aWxpdHlBUklBSXNCdXN5XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyIGFjY2Vzc2liaWxpdHlBUklBTGl2ZVJlZ2lvblN0YXR1c10pOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QVJJQVJlbGV2YW50U3RhdHVz
XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxp
dHlBUklBTGl2ZVJlZ2lvbklzQXRvbWljXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlTdXBwb3J0c0FSSUFQcmVzc2VkXSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlJc1ByZXNzZWRd
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0
eVN1cHBvcnRzQVJJQUV4cGFuZGVkXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlJc0V4cGFuZGVkXSk6CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlJc1Nob3dpbmdWYWxpZGF0aW9uTWVz
c2FnZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3Np
YmlsaXR5SW52YWxpZFN0YXR1c10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBhY2Nlc3NpYmlsaXR5QVJJQUN1cnJlbnRTdGF0dXNdKToKKyAgICAgICAgKC1bV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb25dKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eU1h
dGhSb290SW5kZXhPYmplY3RdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgYWNjZXNzaWJpbGl0eU1hdGhSYWRpY2FuZE9iamVjdF0pOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5TWF0aE51bWVyYXRvck9iamVj
dF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmls
aXR5TWF0aERlbm9taW5hdG9yT2JqZWN0XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlNYXRoQmFzZU9iamVjdF0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5TWF0aFN1YnNjcmlwdE9i
amVjdF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3Np
YmlsaXR5TWF0aFN1cGVyc2NyaXB0T2JqZWN0XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlNYXRoVW5kZXJPYmplY3RdKToKKyAgICAgICAg
KC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eU1hdGhPdmVyT2Jq
ZWN0XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2li
aWxpdHlNYXRoRmVuY2VkT3BlblN0cmluZ10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5TWF0aEZlbmNlZENsb3NlU3RyaW5nXSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlJc01hdGhU
b3BPYmplY3RdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNj
ZXNzaWJpbGl0eU1hdGhMaW5lVGhpY2tuZXNzXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlNYXRoVHlwZV0pOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5Q2xpY2tQb2ludF0pOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW06CisgICAgICAgIChX
ZWJDb3JlOjpBWE9iamVjdENhY2hlOjphdHRhY2hXcmFwcGVyKTogQXR0YWNoZXMgdGhlIGdpdmVu
IElzb2xhdGVkT2JqZWN0IGFuZCB3cmFwcGVyLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFj
L1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5oOgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbToKKyAgICAgICAg
KC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlIGluaXRXaXRoQWNjZXNzaWJpbGl0
eU9iamVjdDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNl
IGF0dGFjaEFYT2JqZWN0Ol0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlckJhc2UgYXR0YWNoSXNvbGF0ZWRPYmplY3Q6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyQmFzZSBkZXRhY2hdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJCYXNlIHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9yZV0pOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UgYmFzZUFjY2Vzc2liaWxpdHlU
aXRsZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UgYXhC
YWNraW5nT2JqZWN0XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
QmFzZSBiYXNlQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uXSk6CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZSBiYXNlQWNjZXNzaWJpbGl0eVNwZWVjaEhpbnRdKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlIGJhc2VBY2Nlc3Np
YmlsaXR5SGVscFRleHRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJCYXNlIGNvbnZlcnRSZWN0VG9TcGFjZTpzcGFjZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlIGFyaWFMYW5kbWFya1JvbGVEZXNjcmlwdGlvbl0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UgYmFzZUFjY2Vzc2li
aWxpdHlTZXRGb2N1czpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJCYXNlIGFjY2Vzc2liaWxpdHlNYXRoUG9zdHNjcmlwdFBhaXJzXSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZSBhY2Nlc3NpYmlsaXR5TWF0aFByZXNjcmlw
dFBhaXJzXSk6CisgICAgICAgIChhY2Nlc3NpYmlsaXR5U2VhcmNoQ3JpdGVyaWFGb3JTZWFyY2hQ
cmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJCYXNlIGFjY2Vzc2liaWxpdHlPYmplY3RdKTogRGVsZXRlZCwgYXhC
YWNraW5nT2JqZWN0IHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06IEluc3RlYWQgb2Yg
YWNjZXNzaW5nIHRoZSBiYWNraW5nIG9iamVjdCBkaXJlY3RseSAobV9vYmplY3QpIG9yIHRocm91
Z2ggdGhlIG1hY3JvIF9heEJhY2tpbmdPYmplY3QsIHVzZXMgc2VsZi5heEJhY2tpbmdPYmplY3Qu
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGF0dGFjaG1lbnRWaWV3
XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHNjcmVlblRvQ29u
dGVudHM6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vz
c2liaWxpdHlPYmplY3RGb3JUZXh0TWFya2VyOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6XSk6CisgICAgICAgICgt
W1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHN0YXJ0T3JFbmRUZXh0TWFya2VyRm9yUmFu
Z2U6aXNTdGFydDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
bmV4dFRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6XSk6CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIHByZXZpb3VzVGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNl
dDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGV4dE1hcmtl
ckZvckNoYXJhY3Rlck9mZnNldDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6XSk6CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6XSk6Cisg
ICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRleHRNYXJrZXJGb3JWaXNp
YmxlUG9zaXRpb246XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
IHRleHRNYXJrZXJGb3JGaXJzdFBvc2l0aW9uSW5UZXh0Q29udHJvbDpdKToKKyAgICAgICAgKC1b
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtl
cjpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgZG9BWEF0dHJp
YnV0ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2U6c3BlbGxDaGVjazpdKToKKyAgICAgICAgKC1b
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQ
b3NpdGlvbnM6ZW5kUG9zaXRpb246XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORF0pOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhZGRpdGlvbmFsQWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZU5hbWVzXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyIHZpc2libGVQb3NpdGlvblJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOl0pOgorICAgICAgICAo
LVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciByZW5kZXJXaWRnZXRDaGlsZHJlbl0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciByZW1vdGVBY2Nlc3NpYmls
aXR5UGFyZW50T2JqZWN0XSk6CisgICAgICAgIChjb252ZXJ0VG9WZWN0b3IpOgorICAgICAgICAo
LVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0ZXh0TWFya2VyUmFuZ2VGb3JTZWxlY3Rp
b25dKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYXNzb2NpYXRl
ZFBsdWdpblBhcmVudF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBwYXRoXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGNoaWxk
cmVuVmVjdG9yU2l6ZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBjaGlsZHJlblZlY3RvckFycmF5XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIHBvc2l0aW9uXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyIHJvbGVdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
c3Vicm9sZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciByb2xl
RGVzY3JpcHRpb25dKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
Y29tcHV0ZWRSb2xlU3RyaW5nXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyIHNjcm9sbFZpZXdQYXJlbnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgdmFsdWVEZXNjcmlwdGlvbkZvck1ldGVyXSk6CisgICAgICAgICgtW1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHdpbmRvd0VsZW1lbnQ6XSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpd
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0
eUZvY3VzZWRVSUVsZW1lbnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgYWNjZXNzaWJpbGl0eUhpdFRlc3Q6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlJc0F0dHJpYnV0ZVNldHRhYmxlOl0pOgorICAg
ICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eVBlcmZv
cm1QcmVzc0FjdGlvbl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBfYWNjZXNzaWJpbGl0eVBlcmZvcm1JbmNyZW1lbnRBY3Rpb25dKToKKyAgICAgICAgKC1bV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlQZXJmb3JtRGVjcmVtZW50
QWN0aW9uXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vz
c2liaWxpdHlQZXJmb3JtU2hvd01lbnVBY3Rpb25dKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlTaG93Q29udGV4dE1lbnVdKToKKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eVNjcm9sbFRv
VmlzaWJsZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNj
ZXNzaWJpbGl0eVNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXM6XSk6CisgICAgICAgICgt
W1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5U2Nyb2xsVG9HbG9i
YWxQb2ludDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNj
ZXNzaWJpbGl0eVJlcGxhY2VSYW5nZTp3aXRoVGV4dDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUluc2VydFRleHQ6XSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5U2V0VmFsdWU6
Zm9yQXR0cmlidXRlOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclJhbmdlOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlciBfY29udmVydFRvTlNSYW5nZTpdKToKKyAgICAgICAgKC1bV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2luZGV4Rm9yVGV4dE1hcmtlcjpdKToKKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX3RleHRNYXJrZXJGb3JJbmRleDpd
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZVZhbHVlOmZvclBhcmFtZXRlcjpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUluZGV4T2ZDaGlsZDpdKToKKyAgICAgICAg
KC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUFycmF5QXR0cmli
dXRlQ291bnQ6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFj
Y2Vzc2liaWxpdHlBcnJheUF0dHJpYnV0ZVZhbHVlczppbmRleDptYXhDb3VudDpdKToKKwogMjAy
MC0wMS0xOCAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0xG
Q10gTGF5b3V0U3RhdGUgY29uc3RydWN0b3Igc2hvdWxkbid0IHRha2UgTGF5b3V0VHJlZUNvbnRl
bnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCmlu
ZGV4IDZmMzdjMGIzZjI4OTYzNTA1Mjg0NDA0ZDQyYzYxZjdlYjA0ODk2YjIuLjliNzVlYWQ1ZDA3
Nzc1ODhjZjZlZTkwMjhhY2JjNTg1ZjI1ZDE4M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAtNjAzLDYgKzYwMywyMSBAQCBzdGF0aWMg
UmVmPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGNyZWF0ZUZyb21Ob2RlKE5vZGUqIG5vZGUpCiAgICAg
cmV0dXJuIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjcmVhdGUobm9kZSk7CiB9CiAKK3ZvaWQg
QVhPYmplY3RDYWNoZTo6Y2FjaGVBbmRJbml0aWFsaXplV3JhcHBlcihBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBuZXdPYmplY3QsIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIE5vZGUqIG5vZGUsIFdpZGdl
dCogd2lkZ2V0KQoreworICAgIEFTU0VSVChuZXdPYmplY3QpOworICAgIEFYSUQgYXhJRCA9IGdl
dEFYSUQobmV3T2JqZWN0KTsKKyAgICBpZiAocmVuZGVyZXIpCisgICAgICAgIG1fcmVuZGVyT2Jq
ZWN0TWFwcGluZy5zZXQocmVuZGVyZXIsIGF4SUQpOworICAgIGlmIChub2RlKQorICAgICAgICBt
X25vZGVPYmplY3RNYXBwaW5nLnNldChub2RlLCBheElEKTsKKyAgICBpZiAod2lkZ2V0KQorICAg
ICAgICBtX3dpZGdldE9iamVjdE1hcHBpbmcuc2V0KHdpZGdldCwgYXhJRCk7CisgICAgbV9vYmpl
Y3RzLnNldChheElELCBuZXdPYmplY3QpOworICAgIG5ld09iamVjdC0+aW5pdCgpOworICAgIGF0
dGFjaFdyYXBwZXIobmV3T2JqZWN0KTsKK30KKwogQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmpl
Y3RDYWNoZTo6Z2V0T3JDcmVhdGUoV2lkZ2V0KiB3aWRnZXQpCiB7CiAgICAgaWYgKCF3aWRnZXQp
CkBAIC02MjUsMTIgKzY0MCw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6
OmdldE9yQ3JlYXRlKFdpZGdldCogd2lkZ2V0KQogICAgIGlmICghbmV3T2JqKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgIGdldEFYSUQobmV3T2JqLmdldCgpKTsKLSAgICAKLSAgICBt
X3dpZGdldE9iamVjdE1hcHBpbmcuc2V0KHdpZGdldCwgbmV3T2JqLT5vYmplY3RJRCgpKTsKLSAg
ICBtX29iamVjdHMuc2V0KG5ld09iai0+b2JqZWN0SUQoKSwgbmV3T2JqKTsKLSAgICBuZXdPYmot
PmluaXQoKTsKLSAgICBhdHRhY2hXcmFwcGVyKG5ld09iai5nZXQoKSk7CisgICAgY2FjaGVBbmRJ
bml0aWFsaXplV3JhcHBlcihuZXdPYmouZ2V0KCksIG51bGxwdHIsIG51bGxwdHIsIHdpZGdldCk7
CiAgICAgcmV0dXJuIG5ld09iai5nZXQoKTsKIH0KIApAQCAtNjczLDEyICs2ODMsNyBAQCBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZShOb2RlKiBub2RlKQog
ICAgIC8vIFdpbGwgY3Jhc2ggbGF0ZXIgaWYgd2UgaGF2ZSB0d28gb2JqZWN0cyBmb3IgdGhlIHNh
bWUgbm9kZS4KICAgICBBU1NFUlQoIWdldChub2RlKSk7CiAKLSAgICBnZXRBWElEKG5ld09iai5n
ZXQoKSk7Ci0KLSAgICBtX25vZGVPYmplY3RNYXBwaW5nLnNldChub2RlLCBuZXdPYmotPm9iamVj
dElEKCkpOwotICAgIG1fb2JqZWN0cy5zZXQobmV3T2JqLT5vYmplY3RJRCgpLCBuZXdPYmopOwot
ICAgIG5ld09iai0+aW5pdCgpOwotICAgIGF0dGFjaFdyYXBwZXIobmV3T2JqLmdldCgpKTsKKyAg
ICBjYWNoZUFuZEluaXRpYWxpemVXcmFwcGVyKG5ld09iai5nZXQoKSwgbnVsbHB0ciwgbm9kZSk7
CiAgICAgbmV3T2JqLT5zZXRMYXN0S25vd25Jc0lnbm9yZWRWYWx1ZShuZXdPYmotPmFjY2Vzc2li
aWxpdHlJc0lnbm9yZWQoKSk7CiAgICAgLy8gU29tZXRpbWVzIGFza2luZyBhY2Nlc3NpYmlsaXR5
SXNJZ25vcmVkKCkgd2lsbCBjYXVzZSB0aGUgbmV3T2JqZWN0IHRvIGJlIGRlYWxsb2NhdGVkLCBh
bmQgdGhlbgogICAgIC8vIGl0IHdpbGwgZGlzYXBwZWFyIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBm
aW5pc2hlZCwgbGVhZGluZyB0byBhIHVzZS1hZnRlci1mcmVlLgpAQCAtNzAxLDEyICs3MDYsNyBA
QCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZShSZW5kZXJP
YmplY3QqIHJlbmRlcmVyKQogICAgIC8vIFdpbGwgY3Jhc2ggbGF0ZXIgaWYgd2UgaGF2ZSB0d28g
b2JqZWN0cyBmb3IgdGhlIHNhbWUgcmVuZGVyZXIuCiAgICAgQVNTRVJUKCFnZXQocmVuZGVyZXIp
KTsKIAotICAgIGdldEFYSUQobmV3T2JqLmdldCgpKTsKLQotICAgIG1fcmVuZGVyT2JqZWN0TWFw
cGluZy5zZXQocmVuZGVyZXIsIG5ld09iai0+b2JqZWN0SUQoKSk7Ci0gICAgbV9vYmplY3RzLnNl
dChuZXdPYmotPm9iamVjdElEKCksIG5ld09iaik7Ci0gICAgbmV3T2JqLT5pbml0KCk7Ci0gICAg
YXR0YWNoV3JhcHBlcihuZXdPYmouZ2V0KCkpOworICAgIGNhY2hlQW5kSW5pdGlhbGl6ZVdyYXBw
ZXIobmV3T2JqLmdldCgpLCByZW5kZXJlcik7CiAgICAgbmV3T2JqLT5zZXRMYXN0S25vd25Jc0ln
bm9yZWRWYWx1ZShuZXdPYmotPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSk7CiAgICAgLy8gU29t
ZXRpbWVzIGFza2luZyBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgd2lsbCBjYXVzZSB0aGUgbmV3
T2JqZWN0IHRvIGJlIGRlYWxsb2NhdGVkLCBhbmQgdGhlbgogICAgIC8vIGl0IHdpbGwgZGlzYXBw
ZWFyIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBmaW5pc2hlZCwgbGVhZGluZyB0byBhIHVzZS1hZnRl
ci1mcmVlLgpAQCAtNzk1LDggKzc5NSw4IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0
Q2FjaGU6OnJvb3RPYmplY3RGb3JGcmFtZShGcmFtZSogZnJhbWUpCiAgICAgCiBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZShBY2Nlc3NpYmlsaXR5Um9sZSBy
b2xlKQogewotICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBvYmogPSBudWxscHRyOwot
ICAgIAorICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBvYmo7CisKICAgICAvLyB3aWxs
IGJlIGZpbGxlZCBpbi4uLgogICAgIHN3aXRjaCAocm9sZSkgewogICAgIGNhc2UgQWNjZXNzaWJp
bGl0eVJvbGU6Okxpc3RCb3hPcHRpb246CkBAIC04MjksMTUgKzgyOSwxMSBAQCBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZShBY2Nlc3NpYmlsaXR5Um9sZSBy
b2xlKQogICAgIGRlZmF1bHQ6CiAgICAgICAgIG9iaiA9IG51bGxwdHI7CiAgICAgfQotICAgIAot
ICAgIGlmIChvYmopCi0gICAgICAgIGdldEFYSUQob2JqLmdldCgpKTsKLSAgICBlbHNlCisKKyAg
ICBpZiAoIW9iaikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBtX29iamVjdHMuc2V0
KG9iai0+b2JqZWN0SUQoKSwgb2JqKTsKLSAgICBvYmotPmluaXQoKTsKLSAgICBhdHRhY2hXcmFw
cGVyKG9iai5nZXQoKSk7CisgICAgY2FjaGVBbmRJbml0aWFsaXplV3JhcHBlcihvYmouZ2V0KCkp
OwogICAgIHJldHVybiBvYmouZ2V0KCk7CiB9CiAKQEAgLTMwODAsOCArMzA3Niw3IEBAIFJlZjxB
WElzb2xhdGVkT2JqZWN0PiBBWE9iamVjdENhY2hlOjpjcmVhdGVJc29sYXRlZFRyZWVIaWVyYXJj
aHkoQVhDb3JlT2JqZWN0JiBvCiAKICAgICBpc29sYXRlZFRyZWVOb2RlLT5zZXRUcmVlSWRlbnRp
Zmllcih0cmVlLnRyZWVJZGVudGlmaWVyKCkpOwogICAgIGlzb2xhdGVkVHJlZU5vZGUtPnNldFBh
cmVudChwYXJlbnRJRCk7Ci0gICAgYXhPYmplY3RDYWNoZS0+ZGV0YWNoV3JhcHBlcigmb2JqZWN0
LCBBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGU6OkVsZW1lbnRDaGFuZ2UpOwotICAgIGF4T2Jq
ZWN0Q2FjaGUtPmF0dGFjaFdyYXBwZXIoJmlzb2xhdGVkVHJlZU5vZGUuZ2V0KCkpOworICAgIGF4
T2JqZWN0Q2FjaGUtPmF0dGFjaFdyYXBwZXIoJmlzb2xhdGVkVHJlZU5vZGUuZ2V0KCksIG9iamVj
dC53cmFwcGVyKCkpOwogCiAgICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZCA6IG9iamVjdC5jaGls
ZHJlbigpKSB7CiAgICAgICAgIGF1dG8gc3RhdGljQ2hpbGQgPSBjcmVhdGVJc29sYXRlZFRyZWVI
aWVyYXJjaHkoKmNoaWxkLCBpc29sYXRlZFRyZWVOb2RlLT5vYmplY3RJRCgpLCBheE9iamVjdENh
Y2hlLCB0cmVlLCBub2RlQ2hhbmdlcywgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAppbmRleCBkM2Q0NWYzM2M4MDk4ZDk3M2U5NTkyMzc5MmQx
MmE2YTc4OTgwZGFmLi4zODA0ZWIyODJlNjA4YzQzZDcxODE5ZDY3ZGY1MGJlY2U4ZjZiNGY1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaApAQCAtMTcy
LDcgKzE3MiwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmUoQVhJRCk7CiAKICAgICB2b2lk
IGRldGFjaFdyYXBwZXIoQVhDb3JlT2JqZWN0KiwgQWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBl
KTsKK3ByaXZhdGU6CisgICAgdm9pZCBjYWNoZUFuZEluaXRpYWxpemVXcmFwcGVyKEFjY2Vzc2li
aWxpdHlPYmplY3QqLCBSZW5kZXJPYmplY3QqID0gbnVsbHB0ciwgTm9kZSogPSBudWxscHRyLCBX
aWRnZXQqID0gbnVsbHB0cik7CiAgICAgdm9pZCBhdHRhY2hXcmFwcGVyKEFYQ29yZU9iamVjdCop
OworI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCisgICAgdm9pZCBhdHRh
Y2hXcmFwcGVyKEFYSXNvbGF0ZWRPYmplY3QqLCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciopOworI2VuZGlmCisKK3B1YmxpYzoKICAgICB2b2lkIGNoaWxkcmVuQ2hhbmdlZChOb2RlKiwg
Tm9kZSogbmV3Q2hpbGQgPSBudWxscHRyKTsKICAgICB2b2lkIGNoaWxkcmVuQ2hhbmdlZChSZW5k
ZXJPYmplY3QqLCBSZW5kZXJPYmplY3QqIG5ld0NoaWxkID0gbnVsbHB0cik7CiAgICAgdm9pZCBj
aGlsZHJlbkNoYW5nZWQoQVhDb3JlT2JqZWN0Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbSBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVySU9TLm1tCmluZGV4IDI2ZGNiMGVhYjYzNTkwNDA5MTFkZGFjZTVkYjlmNjhjMGQ0MTM1
ZjEuLjQ3NGU4NTNlNzE2YWM1NGI1OWMzNDRjMjFkMDhmYzVmZmRhNTNhZDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCkBAIC0xMjMsNyArMTIzLDcgQEAgc3RhdGlj
IE5TU3RyaW5nICogY29uc3QgVUlBY2Nlc3NpYmlsaXR5VGV4dHVhbENvbnRleHRTb3VyY2VDb2Rl
ID0gQCJVSUFjY2Vzc2liaWwKIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciogQWNj
ZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyICp3
cmFwcGVyKQogewogICAgIHdoaWxlICh3cmFwcGVyICYmICFbd3JhcHBlciBpc0FjY2Vzc2liaWxp
dHlFbGVtZW50XSkgewotICAgICAgICBBWENvcmVPYmplY3QqIG9iamVjdCA9IFt3cmFwcGVyIGFj
Y2Vzc2liaWxpdHlPYmplY3RdOworICAgICAgICBBWENvcmVPYmplY3QqIG9iamVjdCA9IHdyYXBw
ZXIuYXhCYWNraW5nT2JqZWN0OwogICAgICAgICBpZiAoIW9iamVjdCkKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAKQEAgLTE3OSw3ICsxNzksNyBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5
TwogLy8gVGhpcyBpcyBuZWVkZWQgZm9yIGV4dGVybmFsIGNsaWVudHMgdG8gYmUgYWJsZSB0byBj
cmVhdGUgYSB0ZXh0IG1hcmtlciB3aXRob3V0IGhhdmluZyBhIHBvaW50ZXIgdG8gdGhlIGNhY2hl
LgogLSAoaWQpaW5pdFdpdGhEYXRhOihOU0RhdGEgKilkYXRhIGFjY2Vzc2liaWxpdHlPYmplY3Q6
KEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyICopd3JhcHBlcgogewotICAgIFdlYkNvcmU6OkFY
Q29yZU9iamVjdCogYXhPYmplY3QgPSBbd3JhcHBlciBhY2Nlc3NpYmlsaXR5T2JqZWN0XTsKKyAg
ICBXZWJDb3JlOjpBWENvcmVPYmplY3QqIGF4T2JqZWN0ID0gd3JhcHBlci5heEJhY2tpbmdPYmpl
Y3Q7CiAgICAgaWYgKCFheE9iamVjdCkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKQEAgLTI3
NCw3ICsyNzQsNyBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2li
aWxpdHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5TwogewogICAgIC8vIHJkYXI6Ly84
Nzk4OTYwIE1ha2Ugc3VyZSB0aGUgb2JqZWN0IGlzIGdvbmUgZWFybHksIHNvIHRoYXQgYW55dGhp
bmcgX2FjY2Vzc2liaWxpdHlVbnJlZ2lzdGVyIAogICAgIC8vIGRvZXMgY2FuJ3QgY2FsbCBiYWNr
IGludG8gdGhlIHJlbmRlciB0cmVlLgotICAgIG1fb2JqZWN0ID0gbnVsbHB0cjsKKyAgICBbc3Vw
ZXIgZGV0YWNoXTsKIAogICAgIGlmIChbc2VsZiByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KF9hY2Nlc3NpYmlsaXR5VW5yZWdpc3RlcildKQogICAgICAgICBbc2VsZiBfYWNjZXNzaWJpbGl0
eVVucmVnaXN0ZXJdOwpAQCAtMjgzLDcgKzI4Myw3IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciogQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKEFjY2Vzc2liaWxpdHlP
CiAtICh2b2lkKWRlYWxsb2MKIHsKICAgICAvLyBXZSBzaG91bGQgaGF2ZSBiZWVuIGRldGFjaGVk
IGJlZm9yZSBkZWFsbG9jYXRlZC4KLSAgICBBU1NFUlQoIW1fb2JqZWN0KTsKKyAgICBBU1NFUlQo
IXNlbGYuYXhCYWNraW5nT2JqZWN0KTsKICAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKQEAgLTI5
NSwxMiArMjk1LDEyIEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciogQWNjZXNz
aWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKEFjY2Vzc2liaWxpdHlPCiAKICAgICBXZWJUaHJlYWRM
b2NrKCk7CiAgICAgCi0gICAgLy8gSWYgd2UgY2FtZSBiYWNrIGZyb20gb3VyIHRocmVhZCBsb2Nr
IGFuZCB3ZSB3ZXJlIGRldGFjaGVkLCB3ZSB3aWxsIG5vIGxvbmdlciBoYXZlIGFuIG1fb2JqZWN0
LgotICAgIGlmICghbV9vYmplY3QpCisgICAgLy8gSWYgd2UgY2FtZSBiYWNrIGZyb20gb3VyIHRo
cmVhZCBsb2NrIGFuZCB3ZSB3ZXJlIGRldGFjaGVkLCB3ZSB3aWxsIG5vIGxvbmdlciBoYXZlIGFu
IHNlbGYuYXhCYWNraW5nT2JqZWN0LgorICAgIGlmICghc2VsZi5heEJhY2tpbmdPYmplY3QpCiAg
ICAgICAgIHJldHVybiBOTzsKICAgICAKLSAgICBtX29iamVjdC0+dXBkYXRlQmFja2luZ1N0b3Jl
KCk7Ci0gICAgaWYgKCFtX29iamVjdCkKKyAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+dXBkYXRl
QmFja2luZ1N0b3JlKCk7CisgICAgaWYgKCFzZWxmLmF4QmFja2luZ09iamVjdCkKICAgICAgICAg
cmV0dXJuIE5POwogICAgIAogICAgIHJldHVybiBZRVM7CkBAIC0zNDEsNyArMzQxLDcgQEAgc3Rh
dGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5j
ZXN0b3IoQWNjZXNzaWJpbGl0eU8KICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0
eUNhbGxdKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgQWNjZXNzaWJpbGl0eVJv
bGUgcm9sZSA9IG1fb2JqZWN0LT5yb2xlVmFsdWUoKTsKKyAgICBBY2Nlc3NpYmlsaXR5Um9sZSBy
b2xlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnJvbGVWYWx1ZSgpOwogICAgIC8vIEVsZW1lbnRz
IHRoYXQgY2FuIGJlIHJldHVybmVkIHdoZW4gcGVyZm9ybWluZyBmdXp6eSBoaXQgdGVzdGluZy4K
ICAgICBzd2l0Y2ggKHJvbGUpIHsKICAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpCdXR0b246
CkBAIC0zNjksNyArMzY5LDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBB
Y2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KICAgICBjYXNlIEFj
Y2Vzc2liaWxpdHlSb2xlOjpUYWI6CiAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6VGV4dEZp
ZWxkOgogICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlRvZ2dsZUJ1dHRvbjoKLSAgICAgICAg
cmV0dXJuICFtX29iamVjdC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpOworICAgICAgICByZXR1
cm4gIXNlbGYuYXhCYWNraW5nT2JqZWN0LT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCk7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTM5MCw4ICszOTAsOCBA
QCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9y
ZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5TwogICAgIC8vIFRyeSBhIGZ1enp5IGhpdCB0ZXN0IGZp
cnN0IHRvIGZpbmQgYW4gYWNjZXNzaWJsZSBlbGVtZW50LgogICAgIEFYQ29yZU9iamVjdCAqYXhP
YmplY3QgPSBudWxscHRyOwogICAgIHsKLSAgICAgICAgQVhBdHRyaWJ1dGVDYWNoZUVuYWJsZXIg
ZW5hYmxlQ2FjaGUobV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSk7Ci0gICAgICAgIGF4T2JqZWN0
ID0gbV9vYmplY3QtPmFjY2Vzc2liaWxpdHlIaXRUZXN0KEludFBvaW50KHBvaW50KSk7CisgICAg
ICAgIEFYQXR0cmlidXRlQ2FjaGVFbmFibGVyIGVuYWJsZUNhY2hlKHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5heE9iamVjdENhY2hlKCkpOworICAgICAgICBheE9iamVjdCA9IHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5hY2Nlc3NpYmlsaXR5SGl0VGVzdChJbnRQb2ludChwb2ludCkpOwogICAgIH0KIAog
ICAgIGlmICghYXhPYmplY3QpCkBAIC00MTIsMTMgKzQxMiwxMyBAQCBzdGF0aWMgQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nlc3Np
YmlsaXR5TwogCiAtICh2b2lkKWVuYWJsZUF0dHJpYnV0ZUNhY2hpbmcKIHsKLSAgICBpZiAoQVhP
YmplY3RDYWNoZSogY2FjaGUgPSBtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpKQorICAgIGlmIChh
dXRvKiBjYWNoZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCkpCiAgICAg
ICAgIGNhY2hlLT5zdGFydENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXNVbnRpbFRyZWVN
dXRhdGVzKCk7CiB9CiAKIC0gKHZvaWQpZGlzYWJsZUF0dHJpYnV0ZUNhY2hpbmcKIHsKLSAgICBp
ZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpKQorICAg
IGlmIChhdXRvKiBjYWNoZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCkp
CiAgICAgICAgIGNhY2hlLT5zdG9wQ2FjaGluZ0NvbXB1dGVkT2JqZWN0QXR0cmlidXRlcygpOwog
fQogCkBAIC00MzIsNyArNDMyLDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
KiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KICAgICAgICAg
ICAgIHJldHVybiBbYXR0YWNobWVudFZpZXcgYWNjZXNzaWJpbGl0eUVsZW1lbnRDb3VudF07CiAg
ICAgfQogICAgIAotICAgIHJldHVybiBtX29iamVjdC0+Y2hpbGRyZW4oKS5zaXplKCk7CisgICAg
cmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5jaGlsZHJlbigpLnNpemUoKTsKIH0KIAogLSAo
aWQpYWNjZXNzaWJpbGl0eUVsZW1lbnRBdEluZGV4OihOU0ludGVnZXIpaW5kZXgKQEAgLTQ0NSw3
ICs0NDUsNyBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxp
dHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5TwogICAgICAgICAgICAgcmV0dXJuIFth
dHRhY2htZW50VmlldyBhY2Nlc3NpYmlsaXR5RWxlbWVudEF0SW5kZXg6aW5kZXhdOwogICAgIH0K
ICAgICAKLSAgICBjb25zdCBhdXRvJiBjaGlsZHJlbiA9IG1fb2JqZWN0LT5jaGlsZHJlbigpOwor
ICAgIGNvbnN0IGF1dG8mIGNoaWxkcmVuID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmNoaWxkcmVu
KCk7CiAgICAgc2l6ZV90IGVsZW1lbnRJbmRleCA9IHN0YXRpY19jYXN0PHNpemVfdD4oaW5kZXgp
OwogICAgIGlmIChlbGVtZW50SW5kZXggPj0gY2hpbGRyZW4uc2l6ZSgpKQogICAgICAgICByZXR1
cm4gbmlsOwpAQCAtNDY5LDcgKzQ2OSw3IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciogQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKEFjY2Vzc2liaWxpdHlPCiAgICAg
ICAgICAgICByZXR1cm4gW2F0dGFjaG1lbnRWaWV3IGluZGV4T2ZBY2Nlc3NpYmlsaXR5RWxlbWVu
dDplbGVtZW50XTsKICAgICB9CiAgICAgCi0gICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSBtX29i
amVjdC0+Y2hpbGRyZW4oKTsKKyAgICBjb25zdCBhdXRvJiBjaGlsZHJlbiA9IHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5jaGlsZHJlbigpOwogICAgIHVuc2lnbmVkIGNvdW50ID0gY2hpbGRyZW4uc2l6
ZSgpOwogICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBjb3VudDsgKytrKSB7CiAgICAgICAg
IEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiB3cmFwcGVyID0gY2hpbGRyZW5ba10tPndyYXBw
ZXIoKTsKQEAgLTQ4NSwxMCArNDg1LDEwIEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciogQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKEFjY2Vzc2liaWxpdHlPCiAgICAg
aWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIE5V
TEw7CiAKLSAgICBpZiAoIW1fb2JqZWN0LT5zdXBwb3J0c1BhdGgoKSkKKyAgICBpZiAoIXNlbGYu
YXhCYWNraW5nT2JqZWN0LT5zdXBwb3J0c1BhdGgoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAg
ICAgCi0gICAgUGF0aCBwYXRoID0gbV9vYmplY3QtPmVsZW1lbnRQYXRoKCk7CisgICAgUGF0aCBw
YXRoID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmVsZW1lbnRQYXRoKCk7CiAgICAgaWYgKHBhdGgu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICAKQEAgLTUwMCw3ICs1MDAsNyBA
QCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9y
ZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5TwogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3Np
YmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBOTzsKICAgICAKLSAgICByZXR1cm4gbV9vYmpl
Y3QtPmhhc1BvcHVwKCk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5oYXNQb3B1
cCgpOwogfQogCiAtIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlQb3B1cFZhbHVlCkBAIC01MDgs
NyArNTA4LDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nlc3NpYmls
aXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KICAgICBpZiAoIVtzZWxmIF9wcmVw
YXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgcmV0dXJu
IG1fb2JqZWN0LT5wb3B1cFZhbHVlKCk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5wb3B1cFZhbHVlKCk7CiB9CiAKIC0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eUxhbmd1YWdl
CkBAIC01MTYsNyArNTE2LDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBB
Y2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KICAgICBpZiAoIVtz
ZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gbmlsOwogICAg
IAotICAgIHJldHVybiBtX29iamVjdC0+bGFuZ3VhZ2UoKTsKKyAgICByZXR1cm4gc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmxhbmd1YWdlKCk7CiB9CiAKIC0gKEJPT0wpYWNjZXNzaWJpbGl0eUlzRGlh
bG9nCkBAIC01MjQsNyArNTI0LDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
KiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KICAgICBpZiAo
IVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gTk87CiAK
LSAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlVmFsdWUgPSBtX29iamVjdC0+cm9sZVZhbHVlKCk7
CisgICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZVZhbHVlID0gc2VsZi5heEJhY2tpbmdPYmplY3Qt
PnJvbGVWYWx1ZSgpOwogICAgIHJldHVybiByb2xlVmFsdWUgPT0gQWNjZXNzaWJpbGl0eVJvbGU6
OkFwcGxpY2F0aW9uRGlhbG9nIHx8IHJvbGVWYWx1ZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6QXBw
bGljYXRpb25BbGVydERpYWxvZzsKIH0KIApAQCAtNTU1LDcgKzU1NSw3IEBAIHN0YXRpYyBBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciogQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKEFj
Y2Vzc2liaWxpdHlPCiAgICAgICAgIHJldHVybiByb2xlID09IEFjY2Vzc2liaWxpdHlSb2xlOjpU
cmVlOwogICAgIH07CiAKLSAgICBpZiAoY29uc3QgQVhDb3JlT2JqZWN0KiBwYXJlbnQgPSBBY2Nl
c3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QVhDb3JlT2JqZWN0PigqbV9vYmplY3QsIGZhbHNlLCBX
VEZNb3ZlKG1hdGNoRnVuYykpKQorICAgIGlmIChjb25zdCBBWENvcmVPYmplY3QqIHBhcmVudCA9
IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCpzZWxmLmF4QmFja2lu
Z09iamVjdCwgZmFsc2UsIFdURk1vdmUobWF0Y2hGdW5jKSkpCiAgICAgICAgIHJldHVybiBwYXJl
bnQtPndyYXBwZXIoKTsKICAgICByZXR1cm4gbmlsOwogfQpAQCAtNTY3LDE0ICs1NjcsMTQgQEAg
c3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVk
QW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KICAgICAgICAgcmV0dXJuIHJvbGUgPT0gQWNjZXNzaWJp
bGl0eVJvbGU6Okxpc3QgfHwgcm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6TGlzdEJveDsKICAg
ICB9OwogICAgIAotICAgIGlmIChjb25zdCBBWENvcmVPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2li
aWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCptX29iamVjdCwgZmFsc2UsIFdURk1v
dmUobWF0Y2hGdW5jKSkpCisgICAgaWYgKGNvbnN0IEFYQ29yZU9iamVjdCogcGFyZW50ID0gQWNj
ZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yPEFYQ29yZU9iamVjdD4oKnNlbGYuYXhCYWNraW5nT2Jq
ZWN0LCBmYWxzZSwgV1RGTW92ZShtYXRjaEZ1bmMpKSkKICAgICAgICAgcmV0dXJuIHBhcmVudC0+
d3JhcHBlcigpOwogICAgIHJldHVybiBuaWw7CiB9CiAKIC0gKEFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyKilfYWNjZXNzaWJpbGl0eUFydGljbGVBbmNlc3RvcgogewotICAgIGlmIChjb25zdCBB
WENvcmVPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVP
YmplY3Q+KCptX29iamVjdCwgZmFsc2UsIFtdIChjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkg
eworICAgIGlmIChjb25zdCBBWENvcmVPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZp
bmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCpzZWxmLmF4QmFja2luZ09iamVjdCwgZmFsc2UsIFtd
IChjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkgewogICAgICAgICByZXR1cm4gb2JqZWN0LnJv
bGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpEb2N1bWVudEFydGljbGU7CiAgICAgfSkp
CiAgICAgICAgIHJldHVybiBwYXJlbnQtPndyYXBwZXIoKTsKQEAgLTU4Myw3ICs1ODMsNyBAQCBz
dGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRB
bmNlc3RvcihBY2Nlc3NpYmlsaXR5TwogCiAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciop
X2FjY2Vzc2liaWxpdHlMYW5kbWFya0FuY2VzdG9yCiB7Ci0gICAgaWYgKGNvbnN0IEFYQ29yZU9i
amVjdCogcGFyZW50ID0gQWNjZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yPEFYQ29yZU9iamVjdD4o
Km1fb2JqZWN0LCBmYWxzZSwgW3NlbGZdIChjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkgewor
ICAgIGlmIChjb25zdCBBWENvcmVPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRB
bmNlc3RvcjxBWENvcmVPYmplY3Q+KCpzZWxmLmF4QmFja2luZ09iamVjdCwgZmFsc2UsIFtzZWxm
XSAoY29uc3QgQVhDb3JlT2JqZWN0JiBvYmplY3QpIHsKICAgICAgICAgcmV0dXJuIFtzZWxmIF9h
Y2Nlc3NpYmlsaXR5SXNMYW5kbWFya1JvbGU6b2JqZWN0LnJvbGVWYWx1ZSgpXTsKICAgICB9KSkK
ICAgICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOwpAQCAtNTkyLDcgKzU5Miw3IEBAIHN0
YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciogQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFu
Y2VzdG9yKEFjY2Vzc2liaWxpdHlPCiAKIC0gKEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKilf
YWNjZXNzaWJpbGl0eVRhYmxlQW5jZXN0b3IKIHsKLSAgICBpZiAoY29uc3QgQVhDb3JlT2JqZWN0
KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QVhDb3JlT2JqZWN0PigqbV9v
YmplY3QsIGZhbHNlLCBbXSAoY29uc3QgQVhDb3JlT2JqZWN0JiBvYmplY3QpIHsKKyAgICBpZiAo
Y29uc3QgQVhDb3JlT2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8
QVhDb3JlT2JqZWN0Pigqc2VsZi5heEJhY2tpbmdPYmplY3QsIGZhbHNlLCBbXSAoY29uc3QgQVhD
b3JlT2JqZWN0JiBvYmplY3QpIHsKICAgICAgICAgcmV0dXJuIG9iamVjdC5yb2xlVmFsdWUoKSA9
PSBBY2Nlc3NpYmlsaXR5Um9sZTo6VGFibGU7CiAgICAgfSkpCiAgICAgICAgIHJldHVybiBwYXJl
bnQtPndyYXBwZXIoKTsKQEAgLTYwMSwxNCArNjAxLDE0IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciogQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKEFjY2Vzc2liaWxp
dHlPCiAKIC0gKEJPT0wpX2FjY2Vzc2liaWxpdHlJc0luVGFibGVDZWxsCiB7Ci0gICAgcmV0dXJu
IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCptX29iamVjdCwgZmFs
c2UsIFtdIChjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkgeworICAgIHJldHVybiBBY2Nlc3Np
YmlsaXR5OjpmaW5kQW5jZXN0b3I8QVhDb3JlT2JqZWN0Pigqc2VsZi5heEJhY2tpbmdPYmplY3Qs
IGZhbHNlLCBbXSAoY29uc3QgQVhDb3JlT2JqZWN0JiBvYmplY3QpIHsKICAgICAgICAgcmV0dXJu
IG9iamVjdC5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6Q2VsbDsKICAgICB9KSAh
PSBudWxscHRyOwogfQogCiAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciopX2FjY2Vzc2li
aWxpdHlGaWVsZHNldEFuY2VzdG9yCiB7Ci0gICAgaWYgKGNvbnN0IEFYQ29yZU9iamVjdCogcGFy
ZW50ID0gQWNjZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yPEFYQ29yZU9iamVjdD4oKm1fb2JqZWN0
LCBmYWxzZSwgW10gKGNvbnN0IEFYQ29yZU9iamVjdCYgb2JqZWN0KSB7CisgICAgaWYgKGNvbnN0
IEFYQ29yZU9iamVjdCogcGFyZW50ID0gQWNjZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yPEFYQ29y
ZU9iamVjdD4oKnNlbGYuYXhCYWNraW5nT2JqZWN0LCBmYWxzZSwgW10gKGNvbnN0IEFYQ29yZU9i
amVjdCYgb2JqZWN0KSB7CiAgICAgICAgIHJldHVybiBvYmplY3QuaXNGaWVsZHNldCgpOwogICAg
IH0pKQogICAgICAgICByZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7CkBAIC02MTcsNyArNjE3LDcg
QEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nlc3NpYmlsaXR5VW5pZ25v
cmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KIAogLSAoQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIqKV9hY2Nlc3NpYmlsaXR5RnJhbWVBbmNlc3RvcgogewotICAgIGF1dG8qIHBhcmVudCA9IEFj
Y2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCptX29iamVjdCwgZmFsc2Us
IFtdIChjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkgeworICAgIGF1dG8qIHBhcmVudCA9IEFj
Y2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCpzZWxmLmF4QmFja2luZ09i
amVjdCwgZmFsc2UsIFtdIChjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkgewogICAgICAgICBy
ZXR1cm4gb2JqZWN0LmlzV2ViQXJlYSgpOwogICAgIH0pOwogICAgIGlmICghcGFyZW50KQpAQCAt
NjI4LDExICs2MjgsMTEgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nl
c3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KIC0gKHVpbnQ2NF90KV9h
Y2Nlc3NpYmlsaXR5VHJhaXRzRnJvbUFuY2VzdG9ycwogewogICAgIHVpbnQ2NF90IHRyYWl0cyA9
IDA7Ci0gICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSA9IG1fb2JqZWN0LT5yb2xlVmFsdWUoKTsK
KyAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnJvbGVW
YWx1ZSgpOwogICAgIAogICAgIC8vIFRyYWl0IGluZm9ybWF0aW9uIGFsc28gbmVlZHMgdG8gYmUg
Z2F0aGVyZWQgZnJvbSB0aGUgcGFyZW50cyBhYm92ZSB0aGUgb2JqZWN0LgogICAgIC8vIFRoZSBw
YXJlbnRPYmplY3QgaXMgbmVlZGVkIGluc3RlYWQgb2YgdGhlIHVuaWdub3JlZFBhcmVudE9iamVj
dCwgYmVjYXVzZSBhIHRhYmxlIG1pZ2h0IGJlIGlnbm9yZWQsIGJ1dCBpbmZvcm1hdGlvbiBzdGls
bCBuZWVkcyB0byBiZSBnYXRoZXJlZCBmcm9tIGl0LiAgICAKLSAgICBmb3IgKGF1dG8qIHBhcmVu
dCA9IG1fb2JqZWN0LT5wYXJlbnRPYmplY3QoKTsgcGFyZW50ICE9IG5pbDsgcGFyZW50ID0gcGFy
ZW50LT5wYXJlbnRPYmplY3QoKSkgeworICAgIGZvciAoYXV0byogcGFyZW50ID0gc2VsZi5heEJh
Y2tpbmdPYmplY3QtPnBhcmVudE9iamVjdCgpOyBwYXJlbnQgIT0gbmlsOyBwYXJlbnQgPSBwYXJl
bnQtPnBhcmVudE9iamVjdCgpKSB7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlSb2xlIHBhcmVudFJv
bGUgPSBwYXJlbnQtPnJvbGVWYWx1ZSgpOwogICAgICAgICBpZiAocGFyZW50Um9sZSA9PSBBY2Nl
c3NpYmlsaXR5Um9sZTo6V2ViQXJlYSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjU1LDcgKzY1
NSw3IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciogQWNjZXNzaWJpbGl0eVVu
aWdub3JlZEFuY2VzdG9yKEFjY2Vzc2liaWxpdHlPCiAgICAgICAgICAgICAgICAgLy8gYWx0ZXJu
YXRlIHRleHQgb24gdGhlIGhlYWRpbmcgcGFyZW50LgogICAgICAgICAgICAgICAgIE5TU3RyaW5n
ICpoZWFkaW5nTGFiZWwgPSBbd3JhcHBlciBiYXNlQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uXTsK
ICAgICAgICAgICAgICAgICBpZiAoIVtoZWFkaW5nTGFiZWwgbGVuZ3RoXSkKLSAgICAgICAgICAg
ICAgICAgICAgW3NlbGYgc2V0QWNjZXNzaWJpbGl0eUxhYmVsOm1fb2JqZWN0LT5zdHJpbmdWYWx1
ZSgpXTsKKyAgICAgICAgICAgICAgICAgICAgW3NlbGYgc2V0QWNjZXNzaWJpbGl0eUxhYmVsOnNl
bGYuYXhCYWNraW5nT2JqZWN0LT5zdHJpbmdWYWx1ZSgpXTsKICAgICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgICAgIFtzZWxmIHNldEFjY2Vzc2liaWxpdHlMYWJlbDpoZWFkaW5n
TGFiZWxdOwogICAgICAgICAgICAgfQpAQCAtNjkwLDE4ICs2OTAsMTggQEAgc3RhdGljIEFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNj
ZXNzaWJpbGl0eU8KICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQog
ICAgICAgICByZXR1cm4gTk87CiAKLSAgICBpZiAobV9vYmplY3QtPnJvbGVWYWx1ZSgpICE9IEFj
Y2Vzc2liaWxpdHlSb2xlOjpWaWRlbyB8fCAhaXM8QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0Piht
X29iamVjdCkpCisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5yb2xlVmFsdWUoKSAhPSBB
Y2Nlc3NpYmlsaXR5Um9sZTo6VmlkZW8gfHwgIWlzPEFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdD4o
c2VsZi5heEJhY2tpbmdPYmplY3QpKQogICAgICAgICByZXR1cm4gTk87CiAKICAgICAvLyBDb252
ZXkgdGhlIHZpZGVvIG9iamVjdCBhcyBpbnRlcmFjdGl2ZSBpZiBhdXRvLXBsYXkgaXMgbm90IGVu
YWJsZWQuCi0gICAgcmV0dXJuICFkb3duY2FzdDxBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q+KCpt
X29iamVjdCkuaXNBdXRvcGxheUVuYWJsZWQoKTsKKyAgICByZXR1cm4gIWRvd25jYXN0PEFjY2Vz
c2liaWxpdHlNZWRpYU9iamVjdD4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KS5pc0F1dG9wbGF5RW5h
YmxlZCgpOwogfQogCiAtIChOU1N0cmluZyAqKWludGVyYWN0aXZlVmlkZW9EZXNjcmlwdGlvbgog
ewotICAgIGlmICghaXM8QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0PihtX29iamVjdCkpCisgICAg
aWYgKCFpczxBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q+KHNlbGYuYXhCYWNraW5nT2JqZWN0KSkK
ICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eU1l
ZGlhT2JqZWN0PihtX29iamVjdCktPmludGVyYWN0aXZlVmlkZW9EdXJhdGlvbigpOworICAgIHJl
dHVybiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q+KHNlbGYuYXhCYWNraW5nT2Jq
ZWN0KS0+aW50ZXJhY3RpdmVWaWRlb0R1cmF0aW9uKCk7CiB9CiAKIC0gKEJPT0wpYWNjZXNzaWJp
bGl0eUlzTWVkaWFQbGF5aW5nCkBAIC03MDksMTAgKzcwOSwxMCBAQCBzdGF0aWMgQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nlc3Np
YmlsaXR5TwogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAg
ICAgIHJldHVybiBOTzsKICAgICAKLSAgICBpZiAoIWlzPEFjY2Vzc2liaWxpdHlNZWRpYU9iamVj
dD4obV9vYmplY3QpKQorICAgIGlmICghaXM8QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0PihzZWxm
LmF4QmFja2luZ09iamVjdCkpCiAgICAgICAgIHJldHVybiBOTzsKICAgICAKLSAgICByZXR1cm4g
ZG93bmNhc3Q8QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0PihtX29iamVjdCktPmlzUGxheWluZygp
OworICAgIHJldHVybiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q+KHNlbGYuYXhC
YWNraW5nT2JqZWN0KS0+aXNQbGF5aW5nKCk7CiB9CiAKIC0gKEJPT0wpYWNjZXNzaWJpbGl0eUlz
TWVkaWFNdXRlZApAQCAtNzIwLDEwICs3MjAsMTAgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyKiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8K
ICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1
cm4gTk87CiAgICAgCi0gICAgaWYgKCFpczxBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q+KG1fb2Jq
ZWN0KSkKKyAgICBpZiAoIWlzPEFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdD4oc2VsZi5heEJhY2tp
bmdPYmplY3QpKQogICAgICAgICByZXR1cm4gTk87CiAgICAgCi0gICAgcmV0dXJuIGRvd25jYXN0
PEFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdD4obV9vYmplY3QpLT5pc011dGVkKCk7CisgICAgcmV0
dXJuIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdD4oc2VsZi5heEJhY2tpbmdPYmpl
Y3QpLT5pc011dGVkKCk7CiB9CiAKIC0gKHZvaWQpYWNjZXNzaWJpbGl0eVRvZ2dsZU11dGVGb3JN
ZWRpYQpAQCAtNzMxLDEwICs3MzEsMTAgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyKiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KICAgICBp
ZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm47CiAg
ICAgCi0gICAgaWYgKCFpczxBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q+KG1fb2JqZWN0KSkKKyAg
ICBpZiAoIWlzPEFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdD4oc2VsZi5heEJhY2tpbmdPYmplY3Qp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5TWVkaWFPYmpl
Y3Q+KG1fb2JqZWN0KS0+dG9nZ2xlTXV0ZSgpOworICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlN
ZWRpYU9iamVjdD4oc2VsZi5heEJhY2tpbmdPYmplY3QpLT50b2dnbGVNdXRlKCk7CiB9CiAKIC0g
KHZvaWQpYWNjZXNzaWJpbGl0eVZpZGVvRW50ZXJGdWxsc2NyZWVuCkBAIC03NDIsMjIgKzc0Miwy
MiBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmln
bm9yZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5TwogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nl
c3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoIWlzPEFjY2Vz
c2liaWxpdHlNZWRpYU9iamVjdD4obV9vYmplY3QpKQorICAgIGlmICghaXM8QWNjZXNzaWJpbGl0
eU1lZGlhT2JqZWN0PihzZWxmLmF4QmFja2luZ09iamVjdCkpCiAgICAgICAgIHJldHVybjsKICAg
ICAKLSAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q+KG1fb2JqZWN0KS0+ZW50
ZXJGdWxsc2NyZWVuKCk7CisgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0Pihz
ZWxmLmF4QmFja2luZ09iamVjdCktPmVudGVyRnVsbHNjcmVlbigpOwogfQogCiAtICh1aW50NjRf
dClfYWNjZXNzaWJpbGl0eVRleHRFbnRyeVRyYWl0cwogewogICAgIHVpbnQ2NF90IHRyYWl0cyA9
IFtzZWxmIF9heFRleHRFbnRyeVRyYWl0XTsKLSAgICBpZiAobV9vYmplY3QtPmlzRm9jdXNlZCgp
KQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNGb2N1c2VkKCkpCiAgICAgICAgIHRy
YWl0cyB8PSAoW3NlbGYgX2F4SGFzVGV4dEN1cnNvclRyYWl0XSB8IFtzZWxmIF9heFRleHRPcGVy
YXRpb25zQXZhaWxhYmxlVHJhaXRdKTsKLSAgICBpZiAobV9vYmplY3QtPmlzUGFzc3dvcmRGaWVs
ZCgpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNQYXNzd29yZEZpZWxkKCkpCiAg
ICAgICAgIHRyYWl0cyB8PSBbc2VsZiBfYXhTZWN1cmVUZXh0RmllbGRUcmFpdF07Ci0gICAgaWYg
KG1fb2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6U2VhcmNoRmllbGQp
CisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmls
aXR5Um9sZTo6U2VhcmNoRmllbGQpCiAgICAgICAgIHRyYWl0cyB8PSBbc2VsZiBfYXhTZWFyY2hG
aWVsZFRyYWl0XTsKLSAgICBpZiAobV9vYmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxp
dHlSb2xlOjpUZXh0QXJlYSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnJvbGVWYWx1
ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpUZXh0QXJlYSkKICAgICAgICAgdHJhaXRzIHw9IFtz
ZWxmIF9heFRleHRBcmVhVHJhaXRdOwogICAgIHJldHVybiB0cmFpdHM7CiB9CkBAIC03NjcsMTMg
Kzc2NywxMyBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxp
dHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5TwogICAgIGlmICghW3NlbGYgX3ByZXBh
cmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIEFjY2Vz
c2liaWxpdHlSb2xlIHJvbGUgPSBtX29iamVjdC0+cm9sZVZhbHVlKCk7CisgICAgQWNjZXNzaWJp
bGl0eVJvbGUgcm9sZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5yb2xlVmFsdWUoKTsKICAgICB1
aW50NjRfdCB0cmFpdHMgPSBbc2VsZiBfYXhXZWJDb250ZW50VHJhaXRdOwogICAgIHN3aXRjaCAo
cm9sZSkgewogICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6Okxpbms6CiAgICAgY2FzZSBBY2Nl
c3NpYmlsaXR5Um9sZTo6V2ViQ29yZUxpbms6CiAgICAgICAgIHRyYWl0cyB8PSBbc2VsZiBfYXhM
aW5rVHJhaXRdOwotICAgICAgICBpZiAobV9vYmplY3QtPmlzVmlzaXRlZCgpKQorICAgICAgICBp
ZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVmlzaXRlZCgpKQogICAgICAgICAgICAgdHJhaXRz
IHw9IFtzZWxmIF9heFZpc2l0ZWRUcmFpdF07CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNj
ZXNzaWJpbGl0eVJvbGU6OlRleHRGaWVsZDoKQEAgLTc4OSw3ICs3ODksNyBAQCBzdGF0aWMgQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihB
Y2Nlc3NpYmlsaXR5TwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xl
OjpCdXR0b246CiAgICAgICAgIHRyYWl0cyB8PSBbc2VsZiBfYXhCdXR0b25UcmFpdF07Ci0gICAg
ICAgIGlmIChtX29iamVjdC0+aXNQcmVzc2VkKCkpCisgICAgICAgIGlmIChzZWxmLmF4QmFja2lu
Z09iamVjdC0+aXNQcmVzc2VkKCkpCiAgICAgICAgICAgICB0cmFpdHMgfD0gW3NlbGYgX2F4VG9n
Z2xlVHJhaXRdOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpQ
b3BVcEJ1dHRvbjoKQEAgLTgyNCwxMyArODI0LDEzIEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciogQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKEFjY2Vzc2liaWxpdHlP
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGlmIChtX29iamVjdC0+aXNBdHRhY2htZW50
RWxlbWVudCgpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNBdHRhY2htZW50RWxl
bWVudCgpKQogICAgICAgICB0cmFpdHMgfD0gW3NlbGYgX2F4VXBkYXRlc0ZyZXF1ZW50bHlUcmFp
dF07CiAgICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc1NlbGVjdGVkKCkpCisgICAgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc1NlbGVjdGVkKCkpCiAgICAgICAgIHRyYWl0cyB8PSBbc2VsZiBf
YXhTZWxlY3RlZFRyYWl0XTsKIAotICAgIGlmICghbV9vYmplY3QtPmlzRW5hYmxlZCgpKQorICAg
IGlmICghc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzRW5hYmxlZCgpKQogICAgICAgICB0cmFpdHMg
fD0gW3NlbGYgX2F4Tm90RW5hYmxlZFRyYWl0XTsKICAgICAKICAgICBpZiAobV9hY2Nlc3NpYmls
aXR5VHJhaXRzRnJvbUFuY2VzdG9yID09IFVMTE9OR19NQVgpCkBAIC04NDQsNyArODQ0LDcgQEAg
c3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVk
QW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KIC0gKEJPT0wpaXNTVkdHcm91cEVsZW1lbnQKIHsKICAg
ICAvLyBJZiBhbiBTVkcgZ3JvdXAgZWxlbWVudCBoYXMgYSB0aXRsZSwgaXQgc2hvdWxkIGJlIGFu
IGFjY2Vzc2libGUgZWxlbWVudCBvbiBpT1MuCi0gICAgTm9kZSogbm9kZSA9IG1fb2JqZWN0LT5u
b2RlKCk7CisgICAgTm9kZSogbm9kZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5ub2RlKCk7CiAg
ICAgaWYgKG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6Z1RhZykgJiYgW1tzZWxm
IGFjY2Vzc2liaWxpdHlMYWJlbF0gbGVuZ3RoXSA+IDApCiAgICAgICAgIHJldHVybiBZRVM7CiAg
ICAgCkBAIC04NTMsMTYgKzg1MywxNiBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5TwogCiAtIChC
T09MKWRldGVybWluZUlzQWNjZXNzaWJpbGl0eUVsZW1lbnQKIHsKLSAgICBpZiAoIW1fb2JqZWN0
KQorICAgIGlmICghc2VsZi5heEJhY2tpbmdPYmplY3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKICAgICAvLyBIb25vciB3aGVuIHNvbWV0aGluZyBleHBsaWNpdGx5IG1ha2VzIHRoaXMg
YW4gZWxlbWVudCAoc3VwZXIgd2lsbCBjb250YWluIHRoYXQgbG9naWMpIAogICAgIGlmIChbc3Vw
ZXIgaXNBY2Nlc3NpYmlsaXR5RWxlbWVudF0pCiAgICAgICAgIHJldHVybiBZRVM7CiAgICAgCi0g
ICAgbV9vYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworICAgIHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKICAgICAKLSAgICBzd2l0Y2ggKG1fb2JqZWN0LT5y
b2xlVmFsdWUoKSkgeworICAgIHN3aXRjaCAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnJvbGVWYWx1
ZSgpKSB7CiAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6VGV4dEZpZWxkOgogICAgIGNhc2Ug
QWNjZXNzaWJpbGl0eVJvbGU6OlRleHRBcmVhOgogICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6
OkJ1dHRvbjoKQEAgLTEwNjEsMTEgKzEwNjEsMTEgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyKiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8K
IAogLSAoQk9PTClzdHJpbmdWYWx1ZVNob3VsZEJlVXNlZEluTGFiZWwKIHsKLSAgICBpZiAobV9v
YmplY3QtPmlzVGV4dENvbnRyb2woKSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlz
VGV4dENvbnRyb2woKSkKICAgICAgICAgcmV0dXJuIE5POwotICAgIGlmIChtX29iamVjdC0+cm9s
ZVZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OlBvcFVwQnV0dG9uKQorICAgIGlmIChzZWxm
LmF4QmFja2luZ09iamVjdC0+cm9sZVZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OlBvcFVw
QnV0dG9uKQogICAgICAgICByZXR1cm4gTk87Ci0gICAgaWYgKG1fb2JqZWN0LT5pc0ZpbGVVcGxv
YWRCdXR0b24oKSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzRmlsZVVwbG9hZEJ1
dHRvbigpKQogICAgICAgICByZXR1cm4gTk87CiAgICAgaWYgKFtzZWxmIGFjY2Vzc2liaWxpdHlJ
c1dlYkludGVyYWN0aXZlVmlkZW9dKQogICAgICAgICByZXR1cm4gTk87CkBAIC0xMDg4LDcgKzEw
ODgsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcg
KnJlc3VsdCwgTlNTdHJpbmcgKnN0cmluZykKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNz
aWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gTk87CiAgICAgCi0gICAgcmV0dXJuIG1fb2Jq
ZWN0LT5oYXNUb3VjaEV2ZW50TGlzdGVuZXIoKTsKKyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdP
YmplY3QtPmhhc1RvdWNoRXZlbnRMaXN0ZW5lcigpOwogfQogCiAtIChCT09MKV9hY2Nlc3NpYmls
aXR5VmFsdWVJc0F1dG9maWxsZWQKQEAgLTEwOTYsNyArMTA5Niw3IEBAIHN0YXRpYyB2b2lkIGFw
cGVuZFN0cmluZ1RvUmVzdWx0KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3Ry
aW5nKQogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAg
IHJldHVybiBOTzsKIAotICAgIHJldHVybiBtX29iamVjdC0+aXNWYWx1ZUF1dG9maWxsZWQoKTsK
KyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVmFsdWVBdXRvZmlsbGVkKCk7CiB9
CiAKIC0gKEJPT0wpX2FjY2Vzc2liaWxpdHlJc1N0cm9uZ1Bhc3N3b3JkRmllbGQKQEAgLTExMDQs
MTAgKzExMDQsMTAgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQoTlNNdXRhYmxl
U3RyaW5nICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFy
ZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIE5POwogICAgIAotICAgIGlmICgh
bV9vYmplY3QtPmlzUGFzc3dvcmRGaWVsZCgpKQorICAgIGlmICghc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmlzUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gTk87CiAgICAgCi0gICAgcmV0
dXJuIG1fb2JqZWN0LT52YWx1ZUF1dG9maWxsQnV0dG9uVHlwZSgpID09IEF1dG9GaWxsQnV0dG9u
VHlwZTo6U3Ryb25nUGFzc3dvcmQ7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT52
YWx1ZUF1dG9maWxsQnV0dG9uVHlwZSgpID09IEF1dG9GaWxsQnV0dG9uVHlwZTo6U3Ryb25nUGFz
c3dvcmQ7CiB9CiAKIC0gKENHRmxvYXQpX2FjY2Vzc2liaWxpdHlNaW5WYWx1ZQpAQCAtMTExNSw3
ICsxMTE1LDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQoTlNNdXRhYmxlU3Ry
aW5nICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFj
Y2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgcmV0dXJuIG1f
b2JqZWN0LT5taW5WYWx1ZUZvclJhbmdlKCk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5taW5WYWx1ZUZvclJhbmdlKCk7CiB9CiAKIC0gKENHRmxvYXQpX2FjY2Vzc2liaWxpdHlN
YXhWYWx1ZQpAQCAtMTEyMyw3ICsxMTIzLDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9S
ZXN1bHQoTlNNdXRhYmxlU3RyaW5nICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgaWYg
KCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgCi0gICAgcmV0dXJuIG1fb2JqZWN0LT5tYXhWYWx1ZUZvclJhbmdlKCk7CisgICAgcmV0dXJu
IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXhWYWx1ZUZvclJhbmdlKCk7CiB9CiAKIC0gKE5TU3Ry
aW5nICopYWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlvbgpAQCAtMTEzMSwxMCArMTEzMSwxMCBA
QCBzdGF0aWMgdm9pZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3Vs
dCwgTlNTdHJpbmcgKnN0cmluZykKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0
eUNhbGxdKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgaWYgKG1fb2JqZWN0LT5pc0NvbG9y
V2VsbCgpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNDb2xvcldlbGwoKSkKICAg
ICAgICAgcmV0dXJuIEFYQ29sb3JXZWxsVGV4dCgpOwogCi0gICAgcmV0dXJuIG1fb2JqZWN0LT5y
b2xlRGVzY3JpcHRpb24oKTsKKyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPnJvbGVE
ZXNjcmlwdGlvbigpOwogfQogCiAtIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlMYWJlbApAQCAt
MTE1NSwyMSArMTE1NSwyMSBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011
dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJpbmcgKnN0cmluZykKICAgICBOU1N0cmluZyAqaW50
ZXJhY3RpdmVWaWRlb0Rlc2NyaXB0aW9uID0gW3NlbGYgaW50ZXJhY3RpdmVWaWRlb0Rlc2NyaXB0
aW9uXTsKICAgICAKICAgICAvLyBXZSBzaG91bGQgZXhwb3NlIHRoZSB2YWx1ZSBvZiB0aGUgaW5w
dXQgdHlwZSBkYXRlIG9yIHRpbWUgdGhyb3VnaCBBWFZhbHVlIGluc3RlYWQgb2YgQVhUaXRsZS4K
LSAgICBpZiAobV9vYmplY3QtPmlzSW5wdXRUeXBlUG9wdXBCdXR0b24oKSAmJiBbYXhUaXRsZSBp
c0VxdWFsVG9TdHJpbmc6W3NlbGYgYWNjZXNzaWJpbGl0eVZhbHVlXV0pCisgICAgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc0lucHV0VHlwZVBvcHVwQnV0dG9uKCkgJiYgW2F4VGl0bGUgaXNF
cXVhbFRvU3RyaW5nOltzZWxmIGFjY2Vzc2liaWxpdHlWYWx1ZV1dKQogICAgICAgICBheFRpdGxl
ID0gbmlsOwogCiAgICAgLy8gRm9vdGVyIGlzIG5vdCBjb25zaWRlcmVkIGEgbGFuZG1hcmssIGJ1
dCB3ZSB3YW50IHRoZSByb2xlIGRlc2NyaXB0aW9uLgotICAgIGlmIChtX29iamVjdC0+cm9sZVZh
bHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OkZvb3RlcikKKyAgICBpZiAoc2VsZi5heEJhY2tp
bmdPYmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpGb290ZXIpCiAgICAg
ICAgIGxhbmRtYXJrRGVzY3JpcHRpb24gPSBBWEZvb3RlclJvbGVEZXNjcmlwdGlvblRleHQoKTsK
IAogICAgIE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0ID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmdd
OwotICAgIGlmIChtX29iamVjdC0+cm9sZVZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6Okhv
cml6b250YWxSdWxlKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+cm9sZVZhbHVlKCkg
PT0gQWNjZXNzaWJpbGl0eVJvbGU6Okhvcml6b250YWxSdWxlKQogICAgICAgICBhcHBlbmRTdHJp
bmdUb1Jlc3VsdChyZXN1bHQsIEFYSG9yaXpvbnRhbFJ1bGVEZXNjcmlwdGlvblRleHQoKSk7CiAK
ICAgICBhcHBlbmRTdHJpbmdUb1Jlc3VsdChyZXN1bHQsIGF4VGl0bGUpOwogICAgIGFwcGVuZFN0
cmluZ1RvUmVzdWx0KHJlc3VsdCwgYXhEZXNjcmlwdGlvbik7CiAgICAgaWYgKFtzZWxmIHN0cmlu
Z1ZhbHVlU2hvdWxkQmVVc2VkSW5MYWJlbF0pIHsKLSAgICAgICAgTlNTdHJpbmcgKnZhbHVlTGFi
ZWwgPSBtX29iamVjdC0+c3RyaW5nVmFsdWUoKTsKKyAgICAgICAgTlNTdHJpbmcgKnZhbHVlTGFi
ZWwgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+c3RyaW5nVmFsdWUoKTsKICAgICAgICAgdmFsdWVM
YWJlbCA9IFt2YWx1ZUxhYmVsIHN0cmluZ0J5VHJpbW1pbmdDaGFyYWN0ZXJzSW5TZXQ6W05TQ2hh
cmFjdGVyU2V0IHdoaXRlc3BhY2VDaGFyYWN0ZXJTZXRdXTsKICAgICAgICAgYXBwZW5kU3RyaW5n
VG9SZXN1bHQocmVzdWx0LCB2YWx1ZUxhYmVsKTsKICAgICB9CkBAIC0xMTgyLDcgKzExODIsNyBA
QCBzdGF0aWMgdm9pZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3Vs
dCwgTlNTdHJpbmcgKnN0cmluZykKIC0gKEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqKXRhYmxlQ2Vs
bFBhcmVudAogewogICAgIC8vIEZpbmQgaWYgdGhpcyBlbGVtZW50IGlzIGluIGEgdGFibGUgY2Vs
bC4KLSAgICBpZiAoQVhDb3JlT2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5j
ZXN0b3I8QVhDb3JlT2JqZWN0PigqbV9vYmplY3QsIHRydWUsIFtdIChjb25zdCBBWENvcmVPYmpl
Y3QmIG9iamVjdCkgeworICAgIGlmIChBWENvcmVPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxp
dHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCpzZWxmLmF4QmFja2luZ09iamVjdCwgdHJ1
ZSwgW10gKGNvbnN0IEFYQ29yZU9iamVjdCYgb2JqZWN0KSB7CiAgICAgICAgIHJldHVybiBvYmpl
Y3QuaXNUYWJsZUNlbGwoKTsKICAgICB9KSkKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFj
Y2Vzc2liaWxpdHlUYWJsZUNlbGwqPihwYXJlbnQpOwpAQCAtMTE5Miw3ICsxMTkyLDcgQEAgc3Rh
dGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQoTlNNdXRhYmxlU3RyaW5nICpyZXN1bHQsIE5T
U3RyaW5nICpzdHJpbmcpCiAtIChBY2Nlc3NpYmlsaXR5VGFibGUqKXRhYmxlUGFyZW50CiB7CiAg
ICAgLy8gRmluZCBpZiB0aGUgcGFyZW50IHRhYmxlIGZvciB0aGUgdGFibGUgY2VsbC4KLSAgICBp
ZiAoQVhDb3JlT2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QVhD
b3JlT2JqZWN0PigqbV9vYmplY3QsIHRydWUsIFtdIChjb25zdCBBWENvcmVPYmplY3QmIG9iamVj
dCkgeworICAgIGlmIChBWENvcmVPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRB
bmNlc3RvcjxBWENvcmVPYmplY3Q+KCpzZWxmLmF4QmFja2luZ09iamVjdCwgdHJ1ZSwgW10gKGNv
bnN0IEFYQ29yZU9iamVjdCYgb2JqZWN0KSB7CiAgICAgICAgIHJldHVybiBpczxBY2Nlc3NpYmls
aXR5VGFibGU+KG9iamVjdCkgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPihvYmplY3Qp
LmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKTsKICAgICB9KSkKICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZSo+KHBhcmVudCk7CkBAIC0xMjA0LDcg
KzEyMDQsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJp
bmcgKnJlc3VsdCwgTlNTdHJpbmcgKnN0cmluZykKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNj
ZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgQVhDb3JlT2JqZWN0
KiB0aXRsZUVsZW1lbnQgPSBtX29iamVjdC0+dGl0bGVVSUVsZW1lbnQoKTsKKyAgICBBWENvcmVP
YmplY3QqIHRpdGxlRWxlbWVudCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT50aXRsZVVJRWxlbWVu
dCgpOwogICAgIGlmICh0aXRsZUVsZW1lbnQpCiAgICAgICAgIHJldHVybiB0aXRsZUVsZW1lbnQt
PndyYXBwZXIoKTsKIApAQCAtMTM1NCwxMyArMTM1NCwxMyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRT
dHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJpbmcgKnN0cmluZykK
ICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1
cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CiAKLSAgICBpZiAobV9vYmplY3QtPmlzUmFk
aW9CdXR0b24oKSkgeworICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNSYWRpb0J1dHRv
bigpKSB7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJl
blZlY3RvciByYWRpb0J1dHRvblNpYmxpbmdzOwotICAgICAgICBtX29iamVjdC0+bGlua2VkVUlF
bGVtZW50cyhyYWRpb0J1dHRvblNpYmxpbmdzKTsKKyAgICAgICAgc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmxpbmtlZFVJRWxlbWVudHMocmFkaW9CdXR0b25TaWJsaW5ncyk7CiAgICAgICAgIGlmIChy
YWRpb0J1dHRvblNpYmxpbmdzLnNpemUoKSA8PSAxKQogICAgICAgICAgICAgcmV0dXJuIE5TTWFr
ZVJhbmdlKE5TTm90Rm91bmQsIDApOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJh
bmdlKHJhZGlvQnV0dG9uU2libGluZ3MuZmluZChtX29iamVjdCksIHJhZGlvQnV0dG9uU2libGlu
Z3Muc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKHJhZGlvQnV0dG9uU2libGlu
Z3MuZmluZChzZWxmLmF4QmFja2luZ09iamVjdCksIHJhZGlvQnV0dG9uU2libGluZ3Muc2l6ZSgp
KTsKICAgICB9CiAgICAgCiAgICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogdGFibGVDZWxsID0g
W3NlbGYgdGFibGVDZWxsUGFyZW50XTsKQEAgLTEzOTAsNyArMTM5MCw3IEBAIHN0YXRpYyB2b2lk
IGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAq
c3RyaW5nKQogewogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAg
ICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX29iamVjdC0+YmxvY2txdW90ZUxldmVsKCk7
CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5ibG9ja3F1b3RlTGV2ZWwoKTsKIH0K
IAogLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5RGF0ZXRpbWVWYWx1ZQpAQCAtMTM5OCw3ICsx
Mzk4LDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQoTlNNdXRhYmxlU3RyaW5n
ICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vz
c2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIGlmIChhdXRvKiBwYXJl
bnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QVhDb3JlT2JqZWN0PigqbV9vYmplY3Qs
IHRydWUsIFtdIChjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkgeworICAgIGlmIChhdXRvKiBw
YXJlbnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QVhDb3JlT2JqZWN0Pigqc2VsZi5h
eEJhY2tpbmdPYmplY3QsIHRydWUsIFtdIChjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkgewog
ICAgICAgICByZXR1cm4gb2JqZWN0LnN1cHBvcnRzRGF0ZXRpbWVBdHRyaWJ1dGUoKTsKICAgICB9
KSkKICAgICAgICAgcmV0dXJuIHBhcmVudC0+ZGF0ZXRpbWVBdHRyaWJ1dGVWYWx1ZSgpOwpAQCAt
MTQxMSw3ICsxNDExLDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQoTlNNdXRh
YmxlU3RyaW5nICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgaWYgKCFbc2VsZiBfcHJl
cGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIHJldHVy
biBtX29iamVjdC0+cGxhY2Vob2xkZXJWYWx1ZSgpOworICAgIHJldHVybiBzZWxmLmF4QmFja2lu
Z09iamVjdC0+cGxhY2Vob2xkZXJWYWx1ZSgpOwogfQogCiAtIChOU1N0cmluZyAqKWFjY2Vzc2li
aWxpdHlDb2xvclN0cmluZ1ZhbHVlCkBAIC0xNDE5LDkgKzE0MTksOSBAQCBzdGF0aWMgdm9pZCBh
cHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJpbmcgKnN0
cmluZykKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAg
ICByZXR1cm4gbmlsOwogCi0gICAgaWYgKG1fb2JqZWN0LT5pc0NvbG9yV2VsbCgpKSB7CisgICAg
aWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0NvbG9yV2VsbCgpKSB7CiAgICAgICAgIGludCBy
LCBnLCBiOwotICAgICAgICBtX29iamVjdC0+Y29sb3JWYWx1ZShyLCBnLCBiKTsKKyAgICAgICAg
c2VsZi5heEJhY2tpbmdPYmplY3QtPmNvbG9yVmFsdWUociwgZywgYik7CiAgICAgICAgIHJldHVy
biBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInJnYiAlNy41ZiAlNy41ZiAlNy41ZiAxIiwg
ciAvIDI1NS4sIGcgLyAyNTUuLCBiIC8gMjU1Ll07CiAgICAgfQogCkBAIC0xNDM4LDkgKzE0Mzgs
OSBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJl
c3VsdCwgTlNTdHJpbmcgKnN0cmluZykKICAgICBpZiAodmFsdWUpCiAgICAgICAgIHJldHVybiB2
YWx1ZTsKICAgICAKLSAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gbV9vYmplY3QtPnJvbGVW
YWx1ZSgpOwotICAgIGlmIChtX29iamVjdC0+aXNDaGVja2JveE9yUmFkaW8oKSB8fCByb2xlID09
IEFjY2Vzc2liaWxpdHlSb2xlOjpNZW51SXRlbUNoZWNrYm94IHx8IHJvbGUgPT0gQWNjZXNzaWJp
bGl0eVJvbGU6Ok1lbnVJdGVtUmFkaW8gfHwgcm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6U3dp
dGNoKSB7Ci0gICAgICAgIHN3aXRjaCAobV9vYmplY3QtPmNoZWNrYm94T3JSYWRpb1ZhbHVlKCkp
IHsKKyAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnJv
bGVWYWx1ZSgpOworICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNDaGVja2JveE9yUmFk
aW8oKSB8fCByb2xlID09IEFjY2Vzc2liaWxpdHlSb2xlOjpNZW51SXRlbUNoZWNrYm94IHx8IHJv
bGUgPT0gQWNjZXNzaWJpbGl0eVJvbGU6Ok1lbnVJdGVtUmFkaW8gfHwgcm9sZSA9PSBBY2Nlc3Np
YmlsaXR5Um9sZTo6U3dpdGNoKSB7CisgICAgICAgIHN3aXRjaCAoc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmNoZWNrYm94T3JSYWRpb1ZhbHVlKCkpIHsKICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5
QnV0dG9uU3RhdGU6Ok9mZjoKICAgICAgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0
aEZvcm1hdDpAIiVkIiwgMF07CiAgICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRl
OjpPbjoKQEAgLTE0NTIsMTIgKzE0NTIsMTIgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9S
ZXN1bHQoTlNNdXRhYmxlU3RyaW5nICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgICAg
IHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVkIiwgMF07CiAgICAgfQogICAg
IAotICAgIGlmIChtX29iamVjdC0+aXNCdXR0b24oKSAmJiBtX29iamVjdC0+aXNQcmVzc2VkKCkp
CisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0J1dHRvbigpICYmIHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5pc1ByZXNzZWQoKSkKICAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdX
aXRoRm9ybWF0OkAiJWQiLCAxXTsKIAogICAgIC8vIHJkYXI6Ly84MTMxMzg4IFdlYktpdCBzaG91
bGQgZXhwb3NlIHRoZSBzYW1lIGluZm8gYXMgVUlLaXQgZm9yIGl0cyBwYXNzd29yZCBmaWVsZHMu
Ci0gICAgaWYgKG1fb2JqZWN0LT5pc1Bhc3N3b3JkRmllbGQoKSAmJiAhW3NlbGYgX2FjY2Vzc2li
aWxpdHlJc1N0cm9uZ1Bhc3N3b3JkRmllbGRdKSB7Ci0gICAgICAgIGludCBwYXNzd29yZExlbmd0
aCA9IG1fb2JqZWN0LT5hY2Nlc3NpYmlsaXR5UGFzc3dvcmRGaWVsZExlbmd0aCgpOworICAgIGlm
IChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNQYXNzd29yZEZpZWxkKCkgJiYgIVtzZWxmIF9hY2Nl
c3NpYmlsaXR5SXNTdHJvbmdQYXNzd29yZEZpZWxkXSkgeworICAgICAgICBpbnQgcGFzc3dvcmRM
ZW5ndGggPSBzZWxmLmF4QmFja2luZ09iamVjdC0+YWNjZXNzaWJpbGl0eVBhc3N3b3JkRmllbGRM
ZW5ndGgoKTsKICAgICAgICAgTlNNdXRhYmxlU3RyaW5nKiBzdHJpbmcgPSBbTlNNdXRhYmxlU3Ry
aW5nIHN0cmluZ107CiAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgcGFzc3dvcmRMZW5ndGg7
ICsraykKICAgICAgICAgICAgIFtzdHJpbmcgYXBwZW5kU3RyaW5nOkAi4oCiIl07CkBAIC0xNDY2
LDIyICsxNDY2LDIyIEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5TTXV0YWJs
ZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3RyaW5nKQogICAgIAogICAgIC8vIEEgdGV4dCBj
b250cm9sIHNob3VsZCByZXR1cm4gaXRzIHRleHQgZGF0YSBhcyB0aGUgYXhWYWx1ZSAocGVyIGlQ
aG9uZSBBWCBBUEkpLgogICAgIGlmICghW3NlbGYgc3RyaW5nVmFsdWVTaG91bGRCZVVzZWRJbkxh
YmVsXSkKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5zdHJpbmdWYWx1ZSgpOworICAgICAgICBy
ZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPnN0cmluZ1ZhbHVlKCk7CiAgICAgCi0gICAgaWYg
KG1fb2JqZWN0LT5pc1JhbmdlQ29udHJvbCgpKSB7CisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5pc1JhbmdlQ29udHJvbCgpKSB7CiAgICAgICAgIC8vIFByZWZlciBhIHZhbHVlRGVzY3Jp
cHRpb24gaWYgcHJvdmlkZWQgYnkgdGhlIGF1dGhvciAodGhyb3VnaCBhcmlhLXZhbHVldGV4dCku
Ci0gICAgICAgIFN0cmluZyB2YWx1ZURlc2NyaXB0aW9uID0gbV9vYmplY3QtPnZhbHVlRGVzY3Jp
cHRpb24oKTsKKyAgICAgICAgU3RyaW5nIHZhbHVlRGVzY3JpcHRpb24gPSBzZWxmLmF4QmFja2lu
Z09iamVjdC0+dmFsdWVEZXNjcmlwdGlvbigpOwogICAgICAgICBpZiAoIXZhbHVlRGVzY3JpcHRp
b24uaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIHZhbHVlRGVzY3JpcHRpb247CiAKLSAg
ICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJS4yZiIsIG1fb2JqZWN0
LT52YWx1ZUZvclJhbmdlKCldOworICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6QCIlLjJmIiwgc2VsZi5heEJhY2tpbmdPYmplY3QtPnZhbHVlRm9yUmFuZ2UoKV07CiAg
ICAgfQogCi0gICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlBdHRhY2htZW50PihtX29iamVjdCkgJiYg
ZG93bmNhc3Q8QWNjZXNzaWJpbGl0eUF0dGFjaG1lbnQ+KG1fb2JqZWN0KS0+aGFzUHJvZ3Jlc3Mo
KSkKLSAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJS4yZiIsIG1f
b2JqZWN0LT52YWx1ZUZvclJhbmdlKCldOworICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5QXR0YWNo
bWVudD4oc2VsZi5heEJhY2tpbmdPYmplY3QpICYmIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlBdHRh
Y2htZW50PihzZWxmLmF4QmFja2luZ09iamVjdCktPmhhc1Byb2dyZXNzKCkpCisgICAgICAgIHJl
dHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiUuMmYiLCBzZWxmLmF4QmFja2luZ09i
amVjdC0+dmFsdWVGb3JSYW5nZSgpXTsKICAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzSGVhZGlu
ZygpKQotICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlZCIsIG1f
b2JqZWN0LT5oZWFkaW5nTGV2ZWwoKV07CisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5p
c0hlYWRpbmcoKSkKKyAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAi
JWQiLCBzZWxmLmF4QmFja2luZ09iamVjdC0+aGVhZGluZ0xldmVsKCldOwogICAgIAogICAgIHJl
dHVybiBuaWw7CiB9CkBAIC0xNDkxLDcgKzE0OTEsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTdHJp
bmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJpbmcgKnN0cmluZykKICAg
ICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4g
Tk87CiAKLSAgICByZXR1cm4gaXM8QWNjZXNzaWJpbGl0eUF0dGFjaG1lbnQ+KG1fb2JqZWN0KTsK
KyAgICByZXR1cm4gaXM8QWNjZXNzaWJpbGl0eUF0dGFjaG1lbnQ+KHNlbGYuYXhCYWNraW5nT2Jq
ZWN0KTsKIH0KIAogLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNDb21ib0JveApAQCAtMTQ5OSw3ICsx
NDk5LDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQoTlNNdXRhYmxlU3RyaW5n
ICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vz
c2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIE5POwogCi0gICAgcmV0dXJuIG1fb2JqZWN0
LT5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6Q29tYm9Cb3g7CisgICAgcmV0dXJu
IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6
Q29tYm9Cb3g7CiB9CiAKIC0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eUhpbnQKQEAgLTE1MTEs
NyArMTUxMSw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5TTXV0YWJsZVN0
cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3RyaW5nKQogICAgIGFwcGVuZFN0cmluZ1RvUmVzdWx0
KHJlc3VsdCwgW3NlbGYgYmFzZUFjY2Vzc2liaWxpdHlIZWxwVGV4dF0pOwogICAgIAogICAgIGlm
IChbc2VsZiBhY2Nlc3NpYmlsaXR5SXNTaG93aW5nVmFsaWRhdGlvbk1lc3NhZ2VdKQotICAgICAg
ICBhcHBlbmRTdHJpbmdUb1Jlc3VsdChyZXN1bHQsIG1fb2JqZWN0LT52YWxpZGF0aW9uTWVzc2Fn
ZSgpKTsKKyAgICAgICAgYXBwZW5kU3RyaW5nVG9SZXN1bHQocmVzdWx0LCBzZWxmLmF4QmFja2lu
Z09iamVjdC0+dmFsaWRhdGlvbk1lc3NhZ2UoKSk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KQEAgLTE1MjEsNyArMTUyMSw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0
KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3RyaW5nKQogICAgIGlmICghW3Nl
bGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAg
Ci0gICAgVVJMIHVybCA9IG1fb2JqZWN0LT51cmwoKTsKKyAgICBVUkwgdXJsID0gc2VsZi5heEJh
Y2tpbmdPYmplY3QtPnVybCgpOwogICAgIGlmICh1cmwuaXNOdWxsKCkpCiAgICAgICAgIHJldHVy
biBuaWw7CiAgICAgcmV0dXJuIChOU1VSTCopdXJsOwpAQCAtMTU0Miw3ICsxNTQyLDcgQEAgc3Rh
dGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQoTlNNdXRhYmxlU3RyaW5nICpyZXN1bHQsIE5T
U3RyaW5nICpzdHJpbmcpCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxs
XSkKICAgICAgICAgcmV0dXJuIE5POwogICAgIAotICAgIG1fb2JqZWN0LT5zY3JvbGxUb01ha2VW
aXNpYmxlKCk7CisgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPnNjcm9sbFRvTWFrZVZpc2libGUo
KTsKICAgICByZXR1cm4gWUVTOwogfQogCkBAIC0xNTcwLDcgKzE1NzAsNyBAQCBzdGF0aWMgdm9p
ZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJpbmcg
KnN0cmluZykKICAgICAgICAgcmV0dXJuIE5POwogICAgIH0KIAotICAgIEJPT0wgcmVzdWx0ID0g
bV9vYmplY3QtPnNjcm9sbEJ5UGFnZShzY3JvbGxEaXJlY3Rpb24pOworICAgIEJPT0wgcmVzdWx0
ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnNjcm9sbEJ5UGFnZShzY3JvbGxEaXJlY3Rpb24pOwog
ICAgIAogICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAgW3NlbGYgcG9zdFNjcm9sbFN0YXR1c0No
YW5nZU5vdGlmaWNhdGlvbl07CkBAIC0xNTg2LDcgKzE1ODYsNyBAQCBzdGF0aWMgdm9pZCBhcHBl
bmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJpbmcgKnN0cmlu
ZykKIAogLSAoQ0dSZWN0KV9hY2Nlc3NpYmlsaXR5UmVsYXRpdmVGcmFtZQogewotICAgIGF1dG8g
cmVjdCA9IEZsb2F0UmVjdChzbmFwcGVkSW50UmVjdChtX29iamVjdC0+ZWxlbWVudFJlY3QoKSkp
OworICAgIGF1dG8gcmVjdCA9IEZsb2F0UmVjdChzbmFwcGVkSW50UmVjdChzZWxmLmF4QmFja2lu
Z09iamVjdC0+ZWxlbWVudFJlY3QoKSkpOwogICAgIHJldHVybiBbc2VsZiBjb252ZXJ0UmVjdFRv
U3BhY2U6cmVjdCBzcGFjZTpBY2Nlc3NpYmlsaXR5Q29udmVyc2lvblNwYWNlOjpQYWdlXTsKIH0K
IApAQCAtMTU5Niw3ICsxNTk2LDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQo
TlNNdXRhYmxlU3RyaW5nICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgaWYgKCFbc2Vs
ZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIENHUmVjdFplcm87
CiAgICAgCi0gICAgTGF5b3V0UmVjdCByZWN0ID0gbV9vYmplY3QtPmVsZW1lbnRSZWN0KCk7Cisg
ICAgTGF5b3V0UmVjdCByZWN0ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmVsZW1lbnRSZWN0KCk7
CiAgICAgcmV0dXJuIENHUmVjdE1ha2UocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCks
IHJlY3QuaGVpZ2h0KCkpOwogfQogCkBAIC0xNjA1LDcgKzE2MDUsNyBAQCBzdGF0aWMgdm9pZCBh
cHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJpbmcgKnN0
cmluZykKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAg
ICByZXR1cm4gQ0dSZWN0WmVybzsKICAgICAKLSAgICBhdXRvIGRvY3VtZW50ID0gbV9vYmplY3Qt
PmRvY3VtZW50KCk7CisgICAgYXV0byBkb2N1bWVudCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5k
b2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT52aWV3KCkpCiAgICAg
ICAgIHJldHVybiBDR1JlY3RaZXJvOwogICAgIGF1dG8gcmVjdCA9IEZsb2F0UmVjdChzbmFwcGVk
SW50UmVjdChkb2N1bWVudC0+dmlldygpLT51bm9ic2N1cmVkQ29udGVudFJlY3QoKSkpOwpAQCAt
MTYxOSw3ICsxNjE5LDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQoTlNNdXRh
YmxlU3RyaW5nICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgaWYgKCFbc2VsZiBfcHJl
cGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIENHUG9pbnRaZXJvOwogCi0g
ICAgSW50UG9pbnQgcG9pbnQgPSBtX29iamVjdC0+Y2xpY2tQb2ludCgpOworICAgIEludFBvaW50
IHBvaW50ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmNsaWNrUG9pbnQoKTsKICAgICByZXR1cm4g
W3NlbGYgX2FjY2Vzc2liaWxpdHlDb252ZXJ0UG9pbnRUb1ZpZXdTcGFjZTpwb2ludF07CiB9CiAK
QEAgLTE2MjgsMjEgKzE2MjgsMjEgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQo
TlNNdXRhYmxlU3RyaW5nICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgaWYgKCFbc2Vs
ZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIENHUmVjdFplcm87
CiAgICAgCi0gICAgYXV0byByZWN0ID0gRmxvYXRSZWN0KHNuYXBwZWRJbnRSZWN0KG1fb2JqZWN0
LT5lbGVtZW50UmVjdCgpKSk7CisgICAgYXV0byByZWN0ID0gRmxvYXRSZWN0KHNuYXBwZWRJbnRS
ZWN0KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5lbGVtZW50UmVjdCgpKSk7CiAgICAgcmV0dXJuIFtz
ZWxmIGNvbnZlcnRSZWN0VG9TcGFjZTpyZWN0IHNwYWNlOkFjY2Vzc2liaWxpdHlDb252ZXJzaW9u
U3BhY2U6OlNjcmVlbl07CiB9CiAKIC8vIENoZWNrcyB3aGV0aGVyIGEgbGluayBjb250YWlucyBv
bmx5IHN0YXRpYyB0ZXh0IGFuZCBpbWFnZXMgKGFuZCBoYXMgYmVlbiBkaXZpZGVkIHVubmF0dXJh
bGx5IGJ5IDxzcGFucz4gYW5kIG90aGVyIG5lZmFyaW91cyBtZWNoYW5pc21zKS4KIC0gKEJPT0wp
Y29udGFpbnNVbm5hdHVyYWxseVNlZ21lbnRlZENoaWxkcmVuCiB7Ci0gICAgaWYgKCFtX29iamVj
dCkKKyAgICBpZiAoIXNlbGYuYXhCYWNraW5nT2JqZWN0KQogICAgICAgICByZXR1cm4gTk87CiAg
ICAgCi0gICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSA9IG1fb2JqZWN0LT5yb2xlVmFsdWUoKTsK
KyAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnJvbGVW
YWx1ZSgpOwogICAgIGlmIChyb2xlICE9IEFjY2Vzc2liaWxpdHlSb2xlOjpMaW5rICYmIHJvbGUg
IT0gQWNjZXNzaWJpbGl0eVJvbGU6OldlYkNvcmVMaW5rKQogICAgICAgICByZXR1cm4gTk87CiAg
ICAgCi0gICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSBtX29iamVjdC0+Y2hpbGRyZW4oKTsKKyAg
ICBjb25zdCBhdXRvJiBjaGlsZHJlbiA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5jaGlsZHJlbigp
OwogICAgIHVuc2lnbmVkIGNoaWxkcmVuU2l6ZSA9IGNoaWxkcmVuLnNpemUoKTsKIAogICAgIC8v
IElmIHRoZXJlJ3Mgb25seSBvbmUgY2hpbGQsIHRoZW4gaXQgZG9lc24ndCBoYXZlIHNlZ21lbnRl
ZCBjaGlsZHJlbi4gCkBAIC0xNjYzLDIzICsxNjYzLDIzIEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0
cmluZ1RvUmVzdWx0KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3RyaW5nKQog
ICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVy
biBuaWw7CiAKLSAgICBBWEF0dHJpYnV0ZUNhY2hlRW5hYmxlciBlbmFibGVDYWNoZShtX29iamVj
dC0+YXhPYmplY3RDYWNoZSgpKTsKKyAgICBBWEF0dHJpYnV0ZUNhY2hlRW5hYmxlciBlbmFibGVD
YWNoZShzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpKTsKICAgICAKICAgICAv
LyBBcyBsb25nIGFzIHRoZXJlJ3MgYSBwYXJlbnQgd3JhcHBlciwgdGhhdCdzIHRoZSBjb3JyZWN0
IGNoYWluIHRvIGNsaW1iLgotICAgIEFYQ29yZU9iamVjdCogcGFyZW50ID0gbV9vYmplY3QtPnBh
cmVudE9iamVjdFVuaWdub3JlZCgpOworICAgIEFYQ29yZU9iamVjdCogcGFyZW50ID0gc2VsZi5h
eEJhY2tpbmdPYmplY3QtPnBhcmVudE9iamVjdFVuaWdub3JlZCgpOwogICAgIGlmIChwYXJlbnQp
CiAgICAgICAgIHJldHVybiBwYXJlbnQtPndyYXBwZXIoKTsKIAogICAgIC8vIE1vY2sgb2JqZWN0
cyBjYW4gaGF2ZSB0aGVpciBwYXJlbnRzIGRldGFjaGVkIGJ1dCBzdGlsbCBleGlzdCBpbiB0aGUg
Y2FjaGUuCi0gICAgaWYgKG1fb2JqZWN0LT5pc0RldGFjaGVkRnJvbVBhcmVudCgpKQorICAgIGlm
IChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNEZXRhY2hlZEZyb21QYXJlbnQoKSkKICAgICAgICAg
cmV0dXJuIG5pbDsKICAgICAKICAgICAvLyBUaGUgb25seSBvYmplY3Qgd2l0aG91dCBhIHBhcmVu
dCB3cmFwcGVyIGF0IHRoaXMgcG9pbnQgc2hvdWxkIGJlIGEgc2Nyb2xsIHZpZXcuCi0gICAgQVNT
RVJUKG1fb2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KCkpOworICAgIEFTU0VSVChz
ZWxmLmF4QmFja2luZ09iamVjdC0+aXNBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldygpKTsKICAgICAK
ICAgICAvLyBWZXJpZnkgdGhpcyBpcyB0aGUgdG9wIGRvY3VtZW50LiBJZiBub3QsIHdlIG1pZ2h0
IG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgcGxhdGZvcm0gd2lkZ2V0LgotICAgIEZyYW1lVmlldyog
ZnJhbWVWaWV3ID0gbV9vYmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCk7Ci0gICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gbV9vYmplY3QtPmRvY3VtZW50KCk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZp
ZXcgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnRGcmFtZVZpZXcoKTsKKyAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKTsKICAgICBp
ZiAoZG9jdW1lbnQgJiYgZnJhbWVWaWV3ICYmIGRvY3VtZW50ICE9ICZkb2N1bWVudC0+dG9wRG9j
dW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZyYW1lVmlldy0+cGxhdGZvcm1XaWRnZXQoKTsKICAg
ICAKQEAgLTE2OTIsNyArMTY5Miw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0
KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3RyaW5nKQogICAgIGlmICghW3Nl
bGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAg
Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogZm9jdXNlZE9iaiA9IGRvd25jYXN0PEFjY2Vzc2li
aWxpdHlPYmplY3Q+KG1fb2JqZWN0LT5mb2N1c2VkVUlFbGVtZW50KCkpOworICAgIEFjY2Vzc2li
aWxpdHlPYmplY3QqIGZvY3VzZWRPYmogPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5T2JqZWN0Pihz
ZWxmLmF4QmFja2luZ09iamVjdC0+Zm9jdXNlZFVJRWxlbWVudCgpKTsKICAgICAKICAgICBpZiAo
IWZvY3VzZWRPYmopCiAgICAgICAgIHJldHVybiBuaWw7CkBAIC0xNzE0LDcgKzE3MTQsNyBAQCBz
dGF0aWMgdm9pZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwg
TlNTdHJpbmcgKnN0cmluZykKICAgICBpZiAoIXdlYlZpZXdDbGFzcykKICAgICAgICAgcmV0dXJu
IG5pbDsKICAgICAKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fb2JqZWN0LT5kb2N1bWVu
dEZyYW1lVmlldygpOworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc2VsZi5heEJhY2tpbmdP
YmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCk7CiAKICAgICBpZiAoIWZyYW1lVmlldykKICAgICAg
ICAgcmV0dXJuIG5pbDsKQEAgLTE3NTMsNyArMTc1Myw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0
cmluZ1RvUmVzdWx0KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3RyaW5nKQog
ICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVy
biBOTzsKICAgICAKLSAgICByZXR1cm4gbV9vYmplY3QtPmNhblNldFZhbHVlQXR0cmlidXRlKCk7
CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5jYW5TZXRWYWx1ZUF0dHJpYnV0ZSgp
OwogfQogCiAtIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlMaW5rUmVsYXRpb25zaGlwVHlwZQpA
QCAtMTc2MSw3ICsxNzYxLDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQoTlNN
dXRhYmxlU3RyaW5nICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgaWYgKCFbc2VsZiBf
cHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAg
ICByZXR1cm4gbV9vYmplY3QtPmxpbmtSZWxWYWx1ZSgpOworICAgIHJldHVybiBzZWxmLmF4QmFj
a2luZ09iamVjdC0+bGlua1JlbFZhbHVlKCk7CiB9CiAKIC0gKEJPT0wpYWNjZXNzaWJpbGl0eVJl
cXVpcmVkCkBAIC0xNzY5LDcgKzE3NjksNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTdHJpbmdUb1Jl
c3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJpbmcgKnN0cmluZykKICAgICBpZiAo
IVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gTk87CiAK
LSAgICByZXR1cm4gbV9vYmplY3QtPmlzUmVxdWlyZWQoKTsKKyAgICByZXR1cm4gc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmlzUmVxdWlyZWQoKTsKIH0KIAogLSAoTlNBcnJheSAqKWFjY2Vzc2liaWxp
dHlGbG93VG9FbGVtZW50cwpAQCAtMTc3OCw3ICsxNzc4LDcgQEAgc3RhdGljIHZvaWQgYXBwZW5k
U3RyaW5nVG9SZXN1bHQoTlNNdXRhYmxlU3RyaW5nICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcp
CiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuOwotICAgIG1fb2JqZWN0LT5hcmlhRmxv
d1RvRWxlbWVudHMoY2hpbGRyZW4pOworICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5hcmlhRmxv
d1RvRWxlbWVudHMoY2hpbGRyZW4pOwogICAgIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGNoaWxk
cmVuLnNpemUoKTsKICAgICBOU011dGFibGVBcnJheSogYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkg
YXJyYXlXaXRoQ2FwYWNpdHk6bGVuZ3RoXTsKQEAgLTE4MDIsOSArMTgwMiw5IEBAIHN0YXRpYyB2
b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmlu
ZyAqc3RyaW5nKQogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgLy8gSWYgdGhpcyBzdGF0aWMg
dGV4dCBpbnNpZGUgb2YgYSBsaW5rLCBpdCBzaG91bGQgdXNlIGl0cyBwYXJlbnQncyBsaW5rZWQg
ZWxlbWVudC4KLSAgICBBWENvcmVPYmplY3QqIGVsZW1lbnQgPSBtX29iamVjdDsKLSAgICBpZiAo
bV9vYmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpTdGF0aWNUZXh0ICYm
IG1fb2JqZWN0LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKS0+aXNMaW5rKCkpCi0gICAgICAgIGVs
ZW1lbnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7CisgICAgQVhDb3JlT2Jq
ZWN0KiBlbGVtZW50ID0gc2VsZi5heEJhY2tpbmdPYmplY3Q7CisgICAgaWYgKHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6U3RhdGljVGV4dCAm
JiBzZWxmLmF4QmFja2luZ09iamVjdC0+cGFyZW50T2JqZWN0VW5pZ25vcmVkKCktPmlzTGluaygp
KQorICAgICAgICBlbGVtZW50ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnBhcmVudE9iamVjdFVu
aWdub3JlZCgpOwogCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yIGxpbmtlZEVsZW1lbnRzOwogICAgIGVsZW1lbnQtPmxpbmtlZFVJRWxlbWVudHMo
bGlua2VkRWxlbWVudHMpOwpAQCAtMTgyMywxMCArMTgyMywxMCBAQCBzdGF0aWMgdm9pZCBhcHBl
bmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJpbmcgKnN0cmlu
ZykKIAogLSAoQk9PTClpc0F0dGFjaG1lbnQKIHsKLSAgICBpZiAoIW1fb2JqZWN0KQorICAgIGlm
ICghc2VsZi5heEJhY2tpbmdPYmplY3QpCiAgICAgICAgIHJldHVybiBOTzsKICAgICAKLSAgICBy
ZXR1cm4gbV9vYmplY3QtPmlzQXR0YWNobWVudCgpOworICAgIHJldHVybiBzZWxmLmF4QmFja2lu
Z09iamVjdC0+aXNBdHRhY2htZW50KCk7CiB9CiAKIC0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0
eVRleHR1YWxDb250ZXh0CkBAIC0xODM0LDcgKzE4MzQsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRT
dHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJpbmcgKnN0cmluZykK
ICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1
cm4gbmlsOwogCi0gICAgaWYgKG1fb2JqZWN0LT5ub2RlKCkgJiYgbV9vYmplY3QtPm5vZGUoKS0+
aGFzVGFnTmFtZShjb2RlVGFnKSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPm5vZGUo
KSAmJiBzZWxmLmF4QmFja2luZ09iamVjdC0+bm9kZSgpLT5oYXNUYWdOYW1lKGNvZGVUYWcpKQog
ICAgICAgICByZXR1cm4gVUlBY2Nlc3NpYmlsaXR5VGV4dHVhbENvbnRleHRTb3VyY2VDb2RlOwog
ICAgIAogICAgIHJldHVybiBuaWw7CkBAIC0xODQ1LDcgKzE4NDUsNyBAQCBzdGF0aWMgdm9pZCBh
cHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJpbmcgKnN0
cmluZykKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAg
ICByZXR1cm4gTk87CiAKLSAgICByZXR1cm4gbV9vYmplY3QtPnByZXNzKCk7CisgICAgcmV0dXJu
IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5wcmVzcygpOwogfQogCiAtIChpZClhdHRhY2htZW50Vmll
dwpAQCAtMTg1NCw3ICsxODU0LDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQo
TlNNdXRhYmxlU3RyaW5nICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgICAgIHJldHVy
biBuaWw7CiAKICAgICBBU1NFUlQoW3NlbGYgaXNBdHRhY2htZW50XSk7Ci0gICAgV2lkZ2V0KiB3
aWRnZXQgPSBtX29iamVjdC0+d2lkZ2V0Rm9yQXR0YWNobWVudFZpZXcoKTsKKyAgICBXaWRnZXQq
IHdpZGdldCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT53aWRnZXRGb3JBdHRhY2htZW50Vmlldygp
OwogICAgIGlmICghd2lkZ2V0KQogICAgICAgICByZXR1cm4gbmlsOwogICAgIHJldHVybiB3aWRn
ZXQtPnBsYXRmb3JtV2lkZ2V0KCk7ICAgIApAQCAtMTk1MCw3ICsxOTUwLDcgQEAgc3RhdGljIFJl
bmRlck9iamVjdCogcmVuZGVyZXJGb3JWaWV3KFdBS1ZpZXcqIHZpZXcpCiAgICAgaWYgKCFbc2Vs
ZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIENHUG9pbnRaZXJv
OwogICAgIAotICAgIHJldHVybiBtX29iamVjdC0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICByZXR1
cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPnNjcm9sbFBvc2l0aW9uKCk7CiB9CiAKIC0gKENHU2l6
ZSlfYWNjZXNzaWJpbGl0eVNjcm9sbFNpemUKQEAgLTE5NTgsNyArMTk1OCw3IEBAIHN0YXRpYyBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyRm9yVmlldyhXQUtWaWV3KiB2aWV3KQogICAgIGlmICghW3Nl
bGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBDR1NpemVaZXJv
OwogICAgIAotICAgIHJldHVybiBtX29iamVjdC0+c2Nyb2xsQ29udGVudHNTaXplKCk7CisgICAg
cmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zY3JvbGxDb250ZW50c1NpemUoKTsKIH0KIAog
LSAoQ0dSZWN0KV9hY2Nlc3NpYmlsaXR5U2Nyb2xsVmlzaWJsZVJlY3QKQEAgLTE5NjYsNyArMTk2
Niw3IEBAIHN0YXRpYyBSZW5kZXJPYmplY3QqIHJlbmRlcmVyRm9yVmlldyhXQUtWaWV3KiB2aWV3
KQogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJl
dHVybiBDR1JlY3RaZXJvOwogICAgIAotICAgIHJldHVybiBtX29iamVjdC0+c2Nyb2xsVmlzaWJs
ZUNvbnRlbnRSZWN0KCk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zY3JvbGxW
aXNpYmxlQ29udGVudFJlY3QoKTsKIH0KIAogLSAoQVhDb3JlT2JqZWN0KilkZXRhaWxQYXJlbnRG
b3JTdW1tYXJ5T2JqZWN0OihBWENvcmVPYmplY3QqKW9iamVjdApAQCAtMjAwNCw3ICsyMDA0LDcg
QEAgc3RhdGljIFJlbmRlck9iamVjdCogcmVuZGVyZXJGb3JWaWV3KFdBS1ZpZXcqIHZpZXcpCiB7
CiAgICAgQWNjZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhIGNyaXRlcmlhID0gYWNjZXNzaWJpbGl0
eVNlYXJjaENyaXRlcmlhRm9yU2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZShw
YXJhbWV0ZXJzKTsKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW5WZWN0b3IgcmVzdWx0czsKLSAgICBtX29iamVjdC0+ZmluZE1hdGNoaW5nT2JqZWN0cygmY3Jp
dGVyaWEsIHJlc3VsdHMpOworICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5maW5kTWF0Y2hpbmdP
YmplY3RzKCZjcml0ZXJpYSwgcmVzdWx0cyk7CiAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXko
cmVzdWx0cyk7CiB9CiAKQEAgLTIwMTMsOSArMjAxMyw5IEBAIHN0YXRpYyBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyRm9yVmlldyhXQUtWaWV3KiB2aWV3KQogICAgIGlmICghW3NlbGYgX3ByZXBhcmVB
Y2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBGcmFtZVNlbGVj
dGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBtX29iamVjdC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2Vs
ZWN0aW9uKCk7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX29iamVjdC0+c2Vs
ZWN0aW9uKCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcmFuZ2UgPSBtX29iamVjdC0+dmlz
aWJsZVBvc2l0aW9uUmFuZ2UoKTsKKyAgICBGcmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24g
PSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCk7
CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBzZWxmLmF4QmFja2luZ09iamVjdC0+
c2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcmFuZ2UgPSBzZWxmLmF4QmFj
a2luZ09iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsKICAgICAKICAgICAvLyBCZWZvcmUg
YSBzZWxlY3Rpb24gd2l0aCBsZW5ndGggZXhpc3RzLCB0aGUgY3Vyc29yIHBvc2l0aW9uIG5lZWRz
IHRvIG1vdmUgdG8gdGhlIHJpZ2h0IHN0YXJ0aW5nIHBsYWNlLgogICAgIC8vIFRoYXQgc2hvdWxk
IGJlIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBlbGVtZW50IChyYW5nZS5zdGFydCkuIEhvd2V2ZXIs
IGlmIHRoZSBjdXJzb3IgaXMgYWxyZWFkeSB3aXRoaW4gdGhlIApAQCAtMjA1MCw3ICsyMDUwLDcg
QEAgc3RhdGljIFJlbmRlck9iamVjdCogcmVuZGVyZXJGb3JWaWV3KFdBS1ZpZXcqIHZpZXcpCiAg
ICAgaWYgKHZpc2libGVQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
RnJhbWVTZWxlY3Rpb24mIGZyYW1lU2VsZWN0aW9uID0gbV9vYmplY3QtPmRvY3VtZW50KCktPmZy
YW1lKCktPnNlbGVjdGlvbigpOworICAgIEZyYW1lU2VsZWN0aW9uJiBmcmFtZVNlbGVjdGlvbiA9
IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5kb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKTsK
ICAgICBmcmFtZVNlbGVjdGlvbi5tb3ZlVG8odmlzaWJsZVBvc2l0aW9uLCBVc2VyVHJpZ2dlcmVk
KTsKIH0KIApAQCAtMjA1OSw3ICsyMDU5LDcgQEAgc3RhdGljIFJlbmRlck9iamVjdCogcmVuZGVy
ZXJGb3JWaWV3KFdBS1ZpZXcqIHZpZXcpCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2li
aWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9vYmplY3QtPmluY3JlbWVudCgp
OworICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pbmNyZW1lbnQoKTsKIH0KIAogLSAodm9pZClh
Y2Nlc3NpYmlsaXR5RGVjcmVtZW50CkBAIC0yMDY3LDcgKzIwNjcsNyBAQCBzdGF0aWMgUmVuZGVy
T2JqZWN0KiByZW5kZXJlckZvclZpZXcoV0FLVmlldyogdmlldykKICAgICBpZiAoIVtzZWxmIF9w
cmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX29iamVj
dC0+ZGVjcmVtZW50KCk7CisgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPmRlY3JlbWVudCgpOwog
fQogCiAjcHJhZ21hIG1hcmsgQWNjZXNzaWJpbGl0eSBUZXh0IE1hcmtlciBIYW5kbGVycwpAQCAt
MjA5Niw3ICsyMDk2LDcgQEAgc3RhdGljIFJlbmRlck9iamVjdCogcmVuZGVyZXJGb3JWaWV3KFdB
S1ZpZXcqIHZpZXcpCiB7CiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxs
XSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fb2JqZWN0LT5zZXRWYWx1ZShzdHJpbmcpOworICAg
IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZXRWYWx1ZShzdHJpbmcpOwogfQogCiAtIChOU1N0cmlu
ZyAqKXN0cmluZ0ZvclRleHRNYXJrZXJzOihOU0FycmF5ICopbWFya2VycwpAQCAtMjEwOCw3ICsy
MTA4LDcgQEAgc3RhdGljIFJlbmRlck9iamVjdCogcmVuZGVyZXJGb3JWaWV3KFdBS1ZpZXcqIHZp
ZXcpCiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICByZXR1
cm4gbV9vYmplY3QtPnN0cmluZ0ZvclJhbmdlKHJhbmdlKTsKKyAgICByZXR1cm4gc2VsZi5heEJh
Y2tpbmdPYmplY3QtPnN0cmluZ0ZvclJhbmdlKHJhbmdlKTsKIH0KIAogc3RhdGljIGludCBibG9j
a3F1b3RlTGV2ZWwoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKQEAgLTIzMDgsNyArMjMwOCw3IEBA
IHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmli
dXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIE5v
ZGUqIHJlcGxhY2VkTm9kZSA9IG5vZGUudHJhdmVyc2VUb0NoaWxkQXQob2Zmc2V0KTsKICAgICAg
ICAgICAgIGlmIChyZXBsYWNlZE5vZGUpIHsKLSAgICAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBvYmogPSBtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShyZXBs
YWNlZE5vZGUtPnJlbmRlcmVyKCkpOworICAgICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIG9iaiA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCktPmdldE9yQ3Jl
YXRlKHJlcGxhY2VkTm9kZS0+cmVuZGVyZXIoKSk7CiAgICAgICAgICAgICAgICAgaWYgKG9iaiAm
JiAhb2JqLT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpCiAgICAgICAgICAgICAgICAgICAgIFtz
ZWxmIF9hZGRBY2Nlc3NpYmlsaXR5T2JqZWN0Om9iaiB0b1RleHRNYXJrZXJBcnJheTphcnJheV07
CiAgICAgICAgICAgICB9CkBAIC0yMzIzLDcgKzIzMjMsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJp
YnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJp
bmcsCiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91
bmQsIDApOwogCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9vYmplY3QtPmRvY3VtZW50KCk7
CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmRvY3VtZW50
KCk7CiAgICAgRWxlbWVudCogc2VsZWN0aW9uUm9vdCA9IGRvY3VtZW50LT5mcmFtZSgpLT5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgRWxlbWVudCog
c2NvcGUgPSBzZWxlY3Rpb25Sb290ID8gc2VsZWN0aW9uUm9vdCA6IGRvY3VtZW50LT5kb2N1bWVu
dEVsZW1lbnQoKTsKIApAQCAtMjM1Nyw3ICsyMzU3LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1
dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5n
LAogICAgIC8vIGRpcmVjdGx5IGluIHRoZSBkb2N1bWVudCBET00sIHNvIHNlcmlhbGl6YXRpb24g
aXMgcHJvYmxlbWF0aWMuIE91ciBzb2x1dGlvbiBpcwogICAgIC8vIHRvIHVzZSB0aGUgcm9vdCBl
ZGl0YWJsZSBlbGVtZW50IG9mIHRoZSBzZWxlY3Rpb24gc3RhcnQgYXMgdGhlIHBvc2l0aW9uYWwg
YmFzZS4KICAgICAvLyBUaGF0IGZpdHMgd2l0aCBBcHBLaXQncyBpZGVhIG9mIGFuIGlucHV0IGNv
bnRleHQuCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9vYmplY3QtPmRvY3VtZW50KCk7Cisg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmRvY3VtZW50KCk7
CiAgICAgRWxlbWVudCogc2VsZWN0aW9uUm9vdCA9IGRvY3VtZW50LT5mcmFtZSgpLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgRWxlbWVudCogc2Nv
cGUgPSBzZWxlY3Rpb25Sb290ID8gc2VsZWN0aW9uUm9vdCA6IGRvY3VtZW50LT5kb2N1bWVudEVs
ZW1lbnQoKTsKICAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExl
bmd0aChzY29wZSwgbnNyYW5nZS5sb2NhdGlvbiwgbnNyYW5nZS5sZW5ndGgpOwpAQCAtMjM3Myw3
ICsyMzczLDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChOU011
dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAgIGlmICghbWFya2VyKQogICAg
ICAgICByZXR1cm4gTlNOb3RGb3VuZDsgICAgCiAKLSAgICBpZiAoQVhPYmplY3RDYWNoZSogY2Fj
aGUgPSBtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpKSB7CisgICAgaWYgKEFYT2JqZWN0Q2FjaGUq
IGNhY2hlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSkgewogICAgICAg
ICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gW21hcmtlciBjaGFyYWN0ZXJPZmZz
ZXRdOwogICAgICAgICAvLyBDcmVhdGUgYSBjb2xsYXBzZWQgcmFuZ2UgZnJvbSB0aGUgQ2hhcmFj
dGVyT2Zmc2V0IG9iamVjdC4KICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGNhY2hlLT5y
YW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoY2hhcmFjdGVyT2Zmc2V0LCBjaGFyYWN0
ZXJPZmZzZXQpOwpAQCAtMjM4OCw3ICsyMzg4LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVk
U3RyaW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAog
ICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVy
biBuaWw7CiAgICAgCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1fb2JqZWN0LT5lbGVtZW50
UmFuZ2UoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZi5heEJhY2tpbmdPYmplY3Qt
PmVsZW1lbnRSYW5nZSgpOwogICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2Vyc0ZvclJhbmdlOnJh
bmdlXTsKIH0KIApAQCAtMjQzMSwxMSArMjQzMSwxMSBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0
ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcs
CiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0
dXJuIG5pbDsKICAgICAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fb2JqZWN0
LT5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5zZWxlY3Rpb24oKTsKICAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKQog
ICAgICAgICByZXR1cm4gbmlsOwogICAgIAotICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9v
YmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7CiAgICAgaWYgKCFjYWNoZSkKICAgICAg
ICAgcmV0dXJuIG5pbDsKICAgICAKQEAgLTI0NjMsNyArMjQ2Myw3IEBAIHN0YXRpYyB2b2lkIEFY
QXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0
clN0cmluZywKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgQVhP
YmplY3RDYWNoZSogY2FjaGUgPSBtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpOworICAgIEFYT2Jq
ZWN0Q2FjaGUqIGNhY2hlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsK
ICAgICBpZiAoIWNhY2hlKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIApAQCAtMjUyOCw3ICsy
NTI4LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFi
bGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAgIGlmICghW3NlbGYgX3ByZXBhcmVB
Y2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICByZXR1cm4gbV9v
YmplY3QtPnN0cmluZ0ZvclJhbmdlKFtzZWxmIF9jb252ZXJ0VG9ET01SYW5nZTpyYW5nZV0pOwor
ICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+c3RyaW5nRm9yUmFuZ2UoW3NlbGYgX2Nv
bnZlcnRUb0RPTVJhbmdlOnJhbmdlXSk7CiB9CiAKIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0
dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZTooTlNSYW5nZSlyYW5nZQpAQCAtMjU1MCwxMCArMjU1MCwx
MCBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0
dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAKIC0gKE5TUmFuZ2UpX2FjY2Vzc2liaWxpdHlT
ZWxlY3RlZFRleHRSYW5nZQogewotICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5
Q2FsbF0gfHwgIW1fb2JqZWN0LT5pc1RleHRDb250cm9sKCkpCisgICAgaWYgKCFbc2VsZiBfcHJl
cGFyZUFjY2Vzc2liaWxpdHlDYWxsXSB8fCAhc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVGV4dENv
bnRyb2woKSkKICAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwogCi0g
ICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlID0gbV9vYmplY3QtPnNlbGVjdGVkVGV4dFJhbmdl
KCk7CisgICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlID0gc2VsZi5heEJhY2tpbmdPYmplY3Qt
PnNlbGVjdGVkVGV4dFJhbmdlKCk7CiAgICAgaWYgKHRleHRSYW5nZS5pc051bGwoKSkKICAgICAg
ICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwogICAgIHJldHVybiBOU01ha2VS
YW5nZSh0ZXh0UmFuZ2Uuc3RhcnQsIHRleHRSYW5nZS5sZW5ndGgpOwpAQCAtMjU2MSwxMCArMjU2
MSwxMCBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJs
ZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAKIC0gKHZvaWQpX2FjY2Vzc2liaWxpdHlT
ZXRTZWxlY3RlZFRleHRSYW5nZTooTlNSYW5nZSlyYW5nZQogewotICAgIGlmICghW3NlbGYgX3By
ZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0gfHwgIW1fb2JqZWN0LT5pc1RleHRDb250cm9sKCkpCisg
ICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSB8fCAhc2VsZi5heEJhY2tp
bmdPYmplY3QtPmlzVGV4dENvbnRyb2woKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG1f
b2JqZWN0LT5zZXRTZWxlY3RlZFRleHRSYW5nZShQbGFpblRleHRSYW5nZShyYW5nZS5sb2NhdGlv
biwgcmFuZ2UubGVuZ3RoKSk7CisgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPnNldFNlbGVjdGVk
VGV4dFJhbmdlKFBsYWluVGV4dFJhbmdlKHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgpKTsK
IH0KIAogLSAoQk9PTClhY2Nlc3NpYmlsaXR5UmVwbGFjZVJhbmdlOihOU1JhbmdlKXJhbmdlIHdp
dGhUZXh0OihOU1N0cmluZyAqKXN0cmluZwpAQCAtMjU3Miw3ICsyNTcyLDcgQEAgc3RhdGljIHZv
aWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5n
KiBhdHRyU3RyaW5nLAogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0p
CiAgICAgICAgIHJldHVybiBOTzsKIAotICAgIHJldHVybiBtX29iamVjdC0+cmVwbGFjZVRleHRJ
blJhbmdlKHN0cmluZywgUGxhaW5UZXh0UmFuZ2UocmFuZ2UpKTsKKyAgICByZXR1cm4gc2VsZi5h
eEJhY2tpbmdPYmplY3QtPnJlcGxhY2VUZXh0SW5SYW5nZShzdHJpbmcsIFBsYWluVGV4dFJhbmdl
KHJhbmdlKSk7CiB9CiAKIC0gKEJPT0wpYWNjZXNzaWJpbGl0eUluc2VydFRleHQ6KE5TU3RyaW5n
ICopdGV4dApAQCAtMjU4MCw3ICsyNTgwLDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3Ry
aW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAg
IGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBO
TzsKIAotICAgIHJldHVybiBtX29iamVjdC0+aW5zZXJ0VGV4dCh0ZXh0KTsKKyAgICByZXR1cm4g
c2VsZi5heEJhY2tpbmdPYmplY3QtPmluc2VydFRleHQodGV4dCk7CiB9CiAKIC8vIEEgY29udmVu
aWVuY2UgbWV0aG9kIGZvciBnZXR0aW5nIHRoZSBhY2Nlc3NpYmlsaXR5IG9iamVjdHMgb2YgYSBO
U1JhbmdlLiBDdXJyZW50bHkgdXNlZCBvbmx5IGJ5IERSVC4KQEAgLTI2MTUsMTQgKzI2MTUsMTQg
QEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRy
aWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3Np
YmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0gICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3Rpb24gPSBtX29iamVjdC0+c2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3Rpb24gPSBzZWxmLmF4QmFja2luZ09iamVjdC0+c2VsZWN0aW9uKCk7CiAgICAg
VmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwogICAg
IAogICAgIC8vIGlmIHRoZXJlJ3Mgbm8gc2VsZWN0aW9uLCBzdGFydCBhdCB0aGUgdG9wIG9mIHRo
ZSBkb2N1bWVudAogICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKLSAgICAgICAgcG9zaXRpb24g
PSBzdGFydE9mRG9jdW1lbnQobV9vYmplY3QtPmRvY3VtZW50KCkpOworICAgICAgICBwb3NpdGlv
biA9IHN0YXJ0T2ZEb2N1bWVudChzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKSk7CiAg
ICAgCi0gICAgcmV0dXJuIFtXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFya2VyV2l0
aFZpc2libGVQb3NpdGlvbjpwb3NpdGlvbiBjYWNoZTptX29iamVjdC0+YXhPYmplY3RDYWNoZSgp
XTsKKyAgICByZXR1cm4gW1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHRleHRNYXJrZXJXaXRo
VmlzaWJsZVBvc2l0aW9uOnBvc2l0aW9uIGNhY2hlOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9i
amVjdENhY2hlKCldOwogfQogCiAvLyBUaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCB0byByZXR1cm4g
dGhlIG1hcmtlciBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIHN0YXJ0aW5nIGF0CkBAIC0yNjM2LDkg
KzI2MzYsOSBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0
YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAgICAgIHJldHVybiBuaWw7CiAg
ICAgCiAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0ID0gW21hcmtlciB2aXNpYmxlUG9zaXRpb25d
OwotICAgIFZpc2libGVQb3NpdGlvbiBsaW5lRW5kID0gbV9vYmplY3QtPm5leHRMaW5lRW5kUG9z
aXRpb24oc3RhcnQpOworICAgIFZpc2libGVQb3NpdGlvbiBsaW5lRW5kID0gc2VsZi5heEJhY2tp
bmdPYmplY3QtPm5leHRMaW5lRW5kUG9zaXRpb24oc3RhcnQpOwogICAgIAotICAgIHJldHVybiBb
V2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgdGV4dE1hcmtlcldpdGhWaXNpYmxlUG9zaXRpb246
bGluZUVuZCBjYWNoZTptX29iamVjdC0+YXhPYmplY3RDYWNoZSgpXTsKKyAgICByZXR1cm4gW1dl
YkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHRleHRNYXJrZXJXaXRoVmlzaWJsZVBvc2l0aW9uOmxp
bmVFbmQgY2FjaGU6c2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKV07CiB9CiAK
IC8vIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIHRvIHJldHVybiB0aGUgbWFya2VyIGF0IHRoZSBz
dGFydCBvZiB0aGUgbGluZSBzdGFydGluZyBhdApAQCAtMjY1Miw5ICsyNjUyLDkgQEAgc3RhdGlj
IHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3Ry
aW5nKiBhdHRyU3RyaW5nLAogICAgICAgICByZXR1cm4gbmlsOwogICAgIAogICAgIFZpc2libGVQ
b3NpdGlvbiBzdGFydCA9IFttYXJrZXIgdmlzaWJsZVBvc2l0aW9uXTsKLSAgICBWaXNpYmxlUG9z
aXRpb24gbGluZVN0YXJ0ID0gbV9vYmplY3QtPnByZXZpb3VzTGluZVN0YXJ0UG9zaXRpb24oc3Rh
cnQpOworICAgIFZpc2libGVQb3NpdGlvbiBsaW5lU3RhcnQgPSBzZWxmLmF4QmFja2luZ09iamVj
dC0+cHJldmlvdXNMaW5lU3RhcnRQb3NpdGlvbihzdGFydCk7CiAgICAgCi0gICAgcmV0dXJuIFtX
ZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFya2VyV2l0aFZpc2libGVQb3NpdGlvbjps
aW5lU3RhcnQgY2FjaGU6bV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKV07CisgICAgcmV0dXJuIFtX
ZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFya2VyV2l0aFZpc2libGVQb3NpdGlvbjps
aW5lU3RhcnQgY2FjaGU6c2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKV07CiB9
CiAKIC0gKE5TQXJyYXkgKiltaXNzcGVsbGluZ1RleHRNYXJrZXJSYW5nZTooTlNBcnJheSAqKXN0
YXJ0VGV4dE1hcmtlclJhbmdlIGZvcndhcmQ6KEJPT0wpZm9yd2FyZApAQCAtMjY2Niw3ICsyNjY2
LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFibGVB
dHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAgIGlmICghc3RhcnRSYW5nZSkKICAgICAg
ICAgcmV0dXJuIG5pbDsKIAotICAgIFJlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZSA9IG1f
b2JqZWN0LT5nZXRNaXNzcGVsbGluZ1JhbmdlKHN0YXJ0UmFuZ2UsCisgICAgUmVmUHRyPFJhbmdl
PiBtaXNzcGVsbGluZ1JhbmdlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmdldE1pc3NwZWxsaW5n
UmFuZ2Uoc3RhcnRSYW5nZSwKICAgICAgICAgZm9yd2FyZCA/IEFjY2Vzc2liaWxpdHlTZWFyY2hE
aXJlY3Rpb246Ok5leHQgOiBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uOjpQcmV2aW91cyk7
CiAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJzRm9yUmFuZ2U6bWlzc3BlbGxpbmdSYW5nZV07
CiB9CkBAIC0yNzAxLDE0ICsyNzAxLDE0IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmlu
Z0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICBp
ZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gQ0dS
ZWN0WmVybzsKIAotICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9vYmplY3QtPmF4T2JqZWN0
Q2FjaGUoKTsKKyAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5heE9iamVjdENhY2hlKCk7CiAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgcmV0dXJuIENHUmVj
dFplcm87CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFtzZWxmIHJhbmdlRm9yVGV4dE1hcmtl
cnM6YXJyYXldOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBDR1JlY3RaZXJvOwog
ICAgIAotICAgIGF1dG8gcmVjdCA9IEZsb2F0UmVjdChtX29iamVjdC0+Ym91bmRzRm9yUmFuZ2Uo
cmFuZ2UpKTsKKyAgICBhdXRvIHJlY3QgPSBGbG9hdFJlY3Qoc2VsZi5heEJhY2tpbmdPYmplY3Qt
PmJvdW5kc0ZvclJhbmdlKHJhbmdlKSk7CiAgICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRSZWN0VG9T
cGFjZTpyZWN0IHNwYWNlOkFjY2Vzc2liaWxpdHlDb252ZXJzaW9uU3BhY2U6OlNjcmVlbl07CiB9
CiAKQEAgLTI3MTgsNyArMjcxOCw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0Fw
cGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICBpZiAo
IW9yaWdpbmFsUmFuZ2UpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0gICAgQVhPYmplY3RD
YWNoZSogY2FjaGUgPSBtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpOworICAgIEFYT2JqZWN0Q2Fj
aGUqIGNhY2hlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKICAgICBp
ZiAoIWNhY2hlKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIApAQCAtMjc2NywxNiArMjc2Nywx
NiBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0
dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vz
c2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBBWE9iamVjdENh
Y2hlKiBjYWNoZSA9IG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCk7CisgICAgQVhPYmplY3RDYWNo
ZSogY2FjaGUgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpOwogICAgIGlm
ICghY2FjaGUpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJh
Y3Rlck9mZnNldCA9IGNhY2hlLT5jaGFyYWN0ZXJPZmZzZXRGb3JQb2ludChJbnRQb2ludChwb2lu
dCksIG1fb2JqZWN0KTsKKyAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gY2Fj
aGUtPmNoYXJhY3Rlck9mZnNldEZvclBvaW50KEludFBvaW50KHBvaW50KSwgc2VsZi5heEJhY2tp
bmdPYmplY3QpOwogICAgIHJldHVybiBbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgdGV4dE1h
cmtlcldpdGhDaGFyYWN0ZXJPZmZzZXQ6Y2hhcmFjdGVyT2Zmc2V0IGNhY2hlOmNhY2hlXTsKIH0K
IAogLSAoV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKiluZXh0TWFya2VyRm9yQ2hhcmFjdGVy
T2Zmc2V0OihDaGFyYWN0ZXJPZmZzZXQmKWNoYXJhY3Rlck9mZnNldAogewotICAgIEFYT2JqZWN0
Q2FjaGUqIGNhY2hlID0gbV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICBBWE9iamVjdENh
Y2hlKiBjYWNoZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7CiAgICAg
aWYgKCFjYWNoZSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKQEAgLTI3ODksNyArMjc4OSw3
IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0
cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKIAogLSAoV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXIgKilwcmV2aW91c01hcmtlckZvckNoYXJhY3Rlck9mZnNldDooQ2hhcmFjdGVyT2Zmc2V0Jilj
aGFyYWN0ZXJPZmZzZXQKIHsKLSAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fb2JqZWN0LT5h
eE9iamVjdENhY2hlKCk7CisgICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBzZWxmLmF4QmFja2lu
Z09iamVjdC0+YXhPYmplY3RDYWNoZSgpOwogICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVy
biBuaWw7CiAgICAgCkBAIC0yODExLDcgKzI4MTEsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0
ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcs
CiAgICAgaWYgKCFbc3RhcnRNYXJrZXIgaXNLaW5kT2ZDbGFzczpbV2ViQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXIgY2xhc3NdXSB8fCAhW2VuZE1hcmtlciBpc0tpbmRPZkNsYXNzOltXZWJBY2Nlc3Np
YmlsaXR5VGV4dE1hcmtlciBjbGFzc11dKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAK
LSAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCk7Cisg
ICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RD
YWNoZSgpOwogICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIApA
QCAtMjgzOSw3ICsyODM5LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5k
VGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAgIGlmICghcmFu
Z2UpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0gICAgcmV0dXJuIFtXZWJBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlciBzdGFydE9yRW5kVGV4dE1hcmtlckZvclJhbmdlOnJhbmdlIGlzU3RhcnQ6
aXNTdGFydCBjYWNoZTptX29iamVjdC0+YXhPYmplY3RDYWNoZSgpXTsKKyAgICByZXR1cm4gW1dl
YkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHN0YXJ0T3JFbmRUZXh0TWFya2VyRm9yUmFuZ2U6cmFu
Z2UgaXNTdGFydDppc1N0YXJ0IGNhY2hlOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENh
Y2hlKCldOwogfQogCiAtIChOU0FycmF5ICopdGV4dE1hcmtlclJhbmdlRm9yTWFya2VyczooTlNB
cnJheSAqKXRleHRNYXJrZXJzCkBAIC0yODU2LDggKzI4NTYsOCBAQCBzdGF0aWMgdm9pZCBBWEF0
dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJT
dHJpbmcsCiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBX
ZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogc3RhcnQgPSBbV2ViQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXIgc3RhcnRPckVuZFRleHRNYXJrZXJGb3JSYW5nZTpyYW5nZSBpc1N0YXJ0OllFUyBjYWNo
ZTptX29iamVjdC0+YXhPYmplY3RDYWNoZSgpXTsKLSAgICBXZWJBY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlciogZW5kID0gW1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHN0YXJ0T3JFbmRUZXh0TWFy
a2VyRm9yUmFuZ2U6cmFuZ2UgaXNTdGFydDpOTyBjYWNoZTptX29iamVjdC0+YXhPYmplY3RDYWNo
ZSgpXTsKKyAgICBXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogc3RhcnQgPSBbV2ViQWNjZXNz
aWJpbGl0eVRleHRNYXJrZXIgc3RhcnRPckVuZFRleHRNYXJrZXJGb3JSYW5nZTpyYW5nZSBpc1N0
YXJ0OllFUyBjYWNoZTpzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpXTsKKyAg
ICBXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogZW5kID0gW1dlYkFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyIHN0YXJ0T3JFbmRUZXh0TWFya2VyRm9yUmFuZ2U6cmFuZ2UgaXNTdGFydDpOTyBjYWNo
ZTpzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpXTsKICAgICBpZiAoIXN0YXJ0
IHx8ICFlbmQpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5
V2l0aE9iamVjdHM6c3RhcnQsIGVuZCwgbmlsXTsKQEAgLTI4NjcsNyArMjg2Nyw3IEBAIHN0YXRp
YyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0
cmluZyogYXR0clN0cmluZywKIHsKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0
eUNhbGxdKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBtX29iamVjdC0+ZXhwYW5k
ZWRUZXh0VmFsdWUoKTsKKyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPmV4cGFuZGVk
VGV4dFZhbHVlKCk7CiB9CiAKIC0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eUlkZW50aWZpZXIK
QEAgLTI4NzUsNyArMjg3NSw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVu
ZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICBpZiAoIVtz
ZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gbmlsOwogICAg
IAotICAgIHJldHVybiBtX29iamVjdC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyKTsK
KyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6
OmlkQXR0cik7CiB9CiAKIC0gKE5TQXJyYXk8TlNTdHJpbmcgKj4gKilhY2Nlc3NpYmlsaXR5U3Bl
ZWNoSGludApAQCAtMjg5MSw3ICsyODkxLDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3Ry
aW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAg
IGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBO
TzsKIAotICAgIHJldHVybiBtX29iamVjdC0+aXNCdXN5KCk7CisgICAgcmV0dXJuIHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5pc0J1c3koKTsKIH0KIAogLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5
QVJJQUxpdmVSZWdpb25TdGF0dXMKQEAgLTI4OTksNyArMjg5OSw3IEBAIHN0YXRpYyB2b2lkIEFY
QXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0
clN0cmluZywKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAg
ICAgICByZXR1cm4gbmlsOwogCi0gICAgcmV0dXJuIG1fb2JqZWN0LT5saXZlUmVnaW9uU3RhdHVz
KCk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5saXZlUmVnaW9uU3RhdHVzKCk7
CiB9CiAKIC0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eUFSSUFSZWxldmFudFN0YXR1cwpAQCAt
MjkwNyw3ICsyOTA3LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4
dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAgIGlmICghW3NlbGYg
X3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0g
ICAgcmV0dXJuIG1fb2JqZWN0LT5saXZlUmVnaW9uUmVsZXZhbnQoKTsKKyAgICByZXR1cm4gc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmxpdmVSZWdpb25SZWxldmFudCgpOwogfQogCiAtIChCT09MKWFj
Y2Vzc2liaWxpdHlBUklBTGl2ZVJlZ2lvbklzQXRvbWljCkBAIC0yOTE1LDcgKzI5MTUsNyBAQCBz
dGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0
ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxp
dHlDYWxsXSkKICAgICAgICAgcmV0dXJuIE5POwogICAgIAotICAgIHJldHVybiBtX29iamVjdC0+
bGl2ZVJlZ2lvbkF0b21pYygpOworICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+bGl2
ZVJlZ2lvbkF0b21pYygpOwogfQogCiAtIChCT09MKWFjY2Vzc2liaWxpdHlTdXBwb3J0c0FSSUFQ
cmVzc2VkCkBAIC0yOTIzLDcgKzI5MjMsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJp
bmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAg
aWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIE5P
OwogICAgIAotICAgIHJldHVybiBtX29iamVjdC0+c3VwcG9ydHNQcmVzc2VkKCk7CisgICAgcmV0
dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zdXBwb3J0c1ByZXNzZWQoKTsKIH0KIAogLSAoQk9P
TClhY2Nlc3NpYmlsaXR5SXNQcmVzc2VkCkBAIC0yOTMxLDcgKzI5MzEsNyBAQCBzdGF0aWMgdm9p
ZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcq
IGF0dHJTdHJpbmcsCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkK
ICAgICAgICAgcmV0dXJuIE5POwogICAgIAotICAgIHJldHVybiBtX29iamVjdC0+aXNQcmVzc2Vk
KCk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1ByZXNzZWQoKTsKIH0KIAog
LSAoQk9PTClhY2Nlc3NpYmlsaXR5U3VwcG9ydHNBUklBRXhwYW5kZWQKQEAgLTI5NDEsMTMgKzI5
NDEsMTMgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFi
bGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAgIAogICAgIC8vIFNpbmNlIGRldGFp
bHMgZWxlbWVudCBpcyBpZ25vcmVkIG9uIGlPUywgd2Ugc2hvdWxkIGV4cG9zZSB0aGUgZXhwYW5k
ZWQgc3RhdHVzIG9uIGl0cwogICAgIC8vIHN1bW1hcnkncyBhY2Nlc3NpYmxlIGNoaWxkcmVuLgot
ICAgIGlmIChBWENvcmVPYmplY3QqIGRldGFpbFBhcmVudCA9IFtzZWxmIGRldGFpbFBhcmVudEZv
clN1bW1hcnlPYmplY3Q6bV9vYmplY3RdKQorICAgIGlmIChBWENvcmVPYmplY3QqIGRldGFpbFBh
cmVudCA9IFtzZWxmIGRldGFpbFBhcmVudEZvclN1bW1hcnlPYmplY3Q6c2VsZi5heEJhY2tpbmdP
YmplY3RdKQogICAgICAgICByZXR1cm4gZGV0YWlsUGFyZW50LT5zdXBwb3J0c0V4cGFuZGVkKCk7
CiAgICAgCi0gICAgaWYgKEFYQ29yZU9iamVjdCogdHJlZUl0ZW1QYXJlbnQgPSBbc2VsZiB0cmVl
SXRlbVBhcmVudEZvck9iamVjdDptX29iamVjdF0pCisgICAgaWYgKEFYQ29yZU9iamVjdCogdHJl
ZUl0ZW1QYXJlbnQgPSBbc2VsZiB0cmVlSXRlbVBhcmVudEZvck9iamVjdDpzZWxmLmF4QmFja2lu
Z09iamVjdF0pCiAgICAgICAgIHJldHVybiB0cmVlSXRlbVBhcmVudC0+c3VwcG9ydHNFeHBhbmRl
ZCgpOwogICAgIAotICAgIHJldHVybiBtX29iamVjdC0+c3VwcG9ydHNFeHBhbmRlZCgpOworICAg
IHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+c3VwcG9ydHNFeHBhbmRlZCgpOwogfQogCiAt
IChCT09MKWFjY2Vzc2liaWxpdHlJc0V4cGFuZGVkCkBAIC0yOTU3LDEzICsyOTU3LDEzIEBAIHN0
YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRl
ZFN0cmluZyogYXR0clN0cmluZywKIAogICAgIC8vIFNpbmNlIGRldGFpbHMgZWxlbWVudCBpcyBp
Z25vcmVkIG9uIGlPUywgd2Ugc2hvdWxkIGV4cG9zZSB0aGUgZXhwYW5kZWQgc3RhdHVzIG9uIGl0
cwogICAgIC8vIHN1bW1hcnkncyBhY2Nlc3NpYmxlIGNoaWxkcmVuLgotICAgIGlmIChBWENvcmVP
YmplY3QqIGRldGFpbFBhcmVudCA9IFtzZWxmIGRldGFpbFBhcmVudEZvclN1bW1hcnlPYmplY3Q6
bV9vYmplY3RdKQorICAgIGlmIChBWENvcmVPYmplY3QqIGRldGFpbFBhcmVudCA9IFtzZWxmIGRl
dGFpbFBhcmVudEZvclN1bW1hcnlPYmplY3Q6c2VsZi5heEJhY2tpbmdPYmplY3RdKQogICAgICAg
ICByZXR1cm4gZGV0YWlsUGFyZW50LT5pc0V4cGFuZGVkKCk7CiAgICAgCi0gICAgaWYgKEFYQ29y
ZU9iamVjdCogdHJlZUl0ZW1QYXJlbnQgPSBbc2VsZiB0cmVlSXRlbVBhcmVudEZvck9iamVjdDpt
X29iamVjdF0pCisgICAgaWYgKEFYQ29yZU9iamVjdCogdHJlZUl0ZW1QYXJlbnQgPSBbc2VsZiB0
cmVlSXRlbVBhcmVudEZvck9iamVjdDpzZWxmLmF4QmFja2luZ09iamVjdF0pCiAgICAgICAgIHJl
dHVybiB0cmVlSXRlbVBhcmVudC0+aXNFeHBhbmRlZCgpOwogICAgIAotICAgIHJldHVybiBtX29i
amVjdC0+aXNFeHBhbmRlZCgpOworICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+aXNF
eHBhbmRlZCgpOwogfQogCiAtIChCT09MKWFjY2Vzc2liaWxpdHlJc1Nob3dpbmdWYWxpZGF0aW9u
TWVzc2FnZQpAQCAtMjk3MSw3ICsyOTcxLDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3Ry
aW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAg
IGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBO
TzsKICAgICAKLSAgICByZXR1cm4gbV9vYmplY3QtPmlzU2hvd2luZ1ZhbGlkYXRpb25NZXNzYWdl
KCk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1Nob3dpbmdWYWxpZGF0aW9u
TWVzc2FnZSgpOwogfQogCiAtIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlJbnZhbGlkU3RhdHVz
CkBAIC0yOTc5LDcgKzI5NzksNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBl
bmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAgaWYgKCFb
c2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAg
ICAKLSAgICByZXR1cm4gbV9vYmplY3QtPmludmFsaWRTdGF0dXMoKTsKKyAgICByZXR1cm4gc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmludmFsaWRTdGF0dXMoKTsKIH0KIAogLSAoTlNTdHJpbmcgKilh
Y2Nlc3NpYmlsaXR5QVJJQUN1cnJlbnRTdGF0dXMKQEAgLTI5ODcsNyArMjk4Nyw3IEBAIHN0YXRp
YyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0
cmluZyogYXR0clN0cmluZywKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNh
bGxdKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIAotICAgIHN3aXRjaCAobV9vYmplY3QtPmN1
cnJlbnRTdGF0ZSgpKSB7CisgICAgc3dpdGNoIChzZWxmLmF4QmFja2luZ09iamVjdC0+Y3VycmVu
dFN0YXRlKCkpIHsKICAgICBjYXNlIEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGU6OkZhbHNlOgog
ICAgICAgICByZXR1cm4gQCJmYWxzZSI7CiAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Q3VycmVudFN0
YXRlOjpQYWdlOgpAQCAtMzAxMCw3ICszMDEwLDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVk
U3RyaW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAog
ICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVy
biBuaWw7CiAgICAgCi0gICAgc3dpdGNoIChtX29iamVjdC0+c29ydERpcmVjdGlvbigpKSB7Cisg
ICAgc3dpdGNoIChzZWxmLmF4QmFja2luZ09iamVjdC0+c29ydERpcmVjdGlvbigpKSB7CiAgICAg
Y2FzZSBBY2Nlc3NpYmlsaXR5U29ydERpcmVjdGlvbjo6QXNjZW5kaW5nOgogICAgICAgICByZXR1
cm4gQCJhc2NlbmRpbmciOwogICAgIGNhc2UgQWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb246OkRl
c2NlbmRpbmc6CkBAIC0zMDI4LDcgKzMwMjgsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRT
dHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAg
ICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJu
IG5pbDsKIAotICAgIHJldHVybiBtX29iamVjdC0+bWF0aFJvb3RJbmRleE9iamVjdCgpID8gbV9v
YmplY3QtPm1hdGhSb290SW5kZXhPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKKyAgICByZXR1cm4g
c2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhSb290SW5kZXhPYmplY3QoKSA/IHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5tYXRoUm9vdEluZGV4T2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CiB9CiAKIC0g
KFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyICopYWNjZXNzaWJpbGl0eU1hdGhSYWRpY2Fu
ZE9iamVjdApAQCAtMzAzNiw3ICszMDM2LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3Ry
aW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAg
IGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBu
aWw7CiAKLSAgICByZXR1cm4gbV9vYmplY3QtPm1hdGhSYWRpY2FuZE9iamVjdCgpID8gbV9vYmpl
Y3QtPm1hdGhSYWRpY2FuZE9iamVjdCgpLT53cmFwcGVyKCkgOiAwOworICAgIHJldHVybiBzZWxm
LmF4QmFja2luZ09iamVjdC0+bWF0aFJhZGljYW5kT2JqZWN0KCkgPyBzZWxmLmF4QmFja2luZ09i
amVjdC0+bWF0aFJhZGljYW5kT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CiB9CiAKIC0gKFdlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyICopYWNjZXNzaWJpbGl0eU1hdGhOdW1lcmF0b3JPYmpl
Y3QKQEAgLTMwNDQsNyArMzA0NCw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0Fw
cGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICBpZiAo
IVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gbmlsOwog
Ci0gICAgcmV0dXJuIG1fb2JqZWN0LT5tYXRoTnVtZXJhdG9yT2JqZWN0KCkgPyBtX29iamVjdC0+
bWF0aE51bWVyYXRvck9iamVjdCgpLT53cmFwcGVyKCkgOiAwOworICAgIHJldHVybiBzZWxmLmF4
QmFja2luZ09iamVjdC0+bWF0aE51bWVyYXRvck9iamVjdCgpID8gc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPm1hdGhOdW1lcmF0b3JPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKIH0KIAogLSAoV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgKilhY2Nlc3NpYmlsaXR5TWF0aERlbm9taW5hdG9yT2Jq
ZWN0CkBAIC0zMDUyLDcgKzMwNTIsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdB
cHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAgaWYg
KCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIG5pbDsK
IAotICAgIHJldHVybiBtX29iamVjdC0+bWF0aERlbm9taW5hdG9yT2JqZWN0KCkgPyBtX29iamVj
dC0+bWF0aERlbm9taW5hdG9yT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CisgICAgcmV0dXJuIHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoRGVub21pbmF0b3JPYmplY3QoKSA/IHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5tYXRoRGVub21pbmF0b3JPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKIH0KIAog
LSAoV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgKilhY2Nlc3NpYmlsaXR5TWF0aEJhc2VP
YmplY3QKQEAgLTMwNjAsNyArMzA2MCw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmlu
Z0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICBp
ZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gbmls
OwogCi0gICAgcmV0dXJuIG1fb2JqZWN0LT5tYXRoQmFzZU9iamVjdCgpID8gbV9vYmplY3QtPm1h
dGhCYXNlT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5tYXRoQmFzZU9iamVjdCgpID8gc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhCYXNl
T2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CiB9CiAKIC0gKFdlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyICopYWNjZXNzaWJpbGl0eU1hdGhTdWJzY3JpcHRPYmplY3QKQEAgLTMwNjgsNyArMzA2
OCw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxl
QXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNj
ZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgcmV0dXJuIG1fb2Jq
ZWN0LT5tYXRoU3Vic2NyaXB0T2JqZWN0KCkgPyBtX29iamVjdC0+bWF0aFN1YnNjcmlwdE9iamVj
dCgpLT53cmFwcGVyKCkgOiAwOworICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+bWF0
aFN1YnNjcmlwdE9iamVjdCgpID8gc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhTdWJzY3JpcHRP
YmplY3QoKS0+d3JhcHBlcigpIDogMDsKIH0KIAogLSAoV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgKilhY2Nlc3NpYmlsaXR5TWF0aFN1cGVyc2NyaXB0T2JqZWN0CkBAIC0zMDc2LDcgKzMw
NzYsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJs
ZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFj
Y2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIHJldHVybiBtX29i
amVjdC0+bWF0aFN1cGVyc2NyaXB0T2JqZWN0KCkgPyBtX29iamVjdC0+bWF0aFN1cGVyc2NyaXB0
T2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5tYXRoU3VwZXJzY3JpcHRPYmplY3QoKSA/IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoU3Vw
ZXJzY3JpcHRPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKIH0KIAogLSAoV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIgKilhY2Nlc3NpYmlsaXR5TWF0aFVuZGVyT2JqZWN0CkBAIC0zMDg0LDcg
KzMwODQsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0
YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFy
ZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIHJldHVybiBt
X29iamVjdC0+bWF0aFVuZGVyT2JqZWN0KCkgPyBtX29iamVjdC0+bWF0aFVuZGVyT2JqZWN0KCkt
PndyYXBwZXIoKSA6IDA7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoVW5k
ZXJPYmplY3QoKSA/IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoVW5kZXJPYmplY3QoKS0+d3Jh
cHBlcigpIDogMDsKIH0KIAogLSAoV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgKilhY2Nl
c3NpYmlsaXR5TWF0aE92ZXJPYmplY3QKQEAgLTMwOTIsNyArMzA5Miw3IEBAIHN0YXRpYyB2b2lk
IEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyog
YXR0clN0cmluZywKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQog
ICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgcmV0dXJuIG1fb2JqZWN0LT5tYXRoT3Zlck9iamVj
dCgpID8gbV9vYmplY3QtPm1hdGhPdmVyT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CisgICAgcmV0
dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoT3Zlck9iamVjdCgpID8gc2VsZi5heEJhY2tp
bmdPYmplY3QtPm1hdGhPdmVyT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CiB9CiAKIC0gKE5TU3Ry
aW5nICopYWNjZXNzaWJpbGl0eVBsYXRmb3JtTWF0aFN1YnNjcmlwdEtleQpAQCAtMzEyNiw3ICsz
MTI2LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFi
bGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAgIGlmICghW3NlbGYgX3ByZXBhcmVB
Y2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICByZXR1cm4gbV9v
YmplY3QtPm1hdGhGZW5jZWRPcGVuU3RyaW5nKCk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5tYXRoRmVuY2VkT3BlblN0cmluZygpOwogfQogCiAtIChOU1N0cmluZyAqKWFjY2Vz
c2liaWxpdHlNYXRoRmVuY2VkQ2xvc2VTdHJpbmcKQEAgLTMxMzQsNyArMzEzNCw3IEBAIHN0YXRp
YyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0
cmluZyogYXR0clN0cmluZywKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNh
bGxdKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgcmV0dXJuIG1fb2JqZWN0LT5tYXRoRmVu
Y2VkQ2xvc2VTdHJpbmcoKTsKKyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhG
ZW5jZWRDbG9zZVN0cmluZygpOwogfQogCiAtIChCT09MKWFjY2Vzc2liaWxpdHlJc01hdGhUb3BP
YmplY3QKQEAgLTMxNDIsNyArMzE0Miw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmlu
Z0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICBp
ZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gTk87
CiAKLSAgICByZXR1cm4gbV9vYmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xl
OjpEb2N1bWVudE1hdGg7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5yb2xlVmFs
dWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6RG9jdW1lbnRNYXRoOwogfQogCiAtIChOU0ludGVn
ZXIpYWNjZXNzaWJpbGl0eU1hdGhMaW5lVGhpY2tuZXNzCkBAIC0zMTUwLDcgKzMxNTAsNyBAQCBz
dGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0
ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxp
dHlDYWxsXSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gbV9vYmplY3QtPm1hdGhM
aW5lVGhpY2tuZXNzKCk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoTGlu
ZVRoaWNrbmVzcygpOwogfQogCiAtIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlNYXRoVHlwZQpA
QCAtMzE1OCw0MCArMzE1OCw0MCBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBl
bmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAgaWYgKCFb
c2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAot
ICAgIGlmIChtX29iamVjdC0+cm9sZVZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6Ok1hdGhF
bGVtZW50KSB7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoRnJhY3Rpb24oKSkKKyAgICBp
ZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xl
OjpNYXRoRWxlbWVudCkgeworICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWF0
aEZyYWN0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhGcmFjdGlvbiI7Ci0gICAg
ICAgIGlmIChtX29iamVjdC0+aXNNYXRoRmVuY2VkKCkpCisgICAgICAgIGlmIChzZWxmLmF4QmFj
a2luZ09iamVjdC0+aXNNYXRoRmVuY2VkKCkpCiAgICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhG
ZW5jZWQiOwotICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0
KCkpCisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRoU3Vic2NyaXB0U3Vw
ZXJzY3JpcHQoKSkKICAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aFN1YnNjcmlwdFN1cGVyc2Ny
aXB0IjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhSb3coKSkKKyAgICAgICAgaWYgKHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5pc01hdGhSb3coKSkKICAgICAgICAgICAgIHJldHVybiBAIkFY
TWF0aFJvdyI7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoVW5kZXJPdmVyKCkpCisgICAg
ICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRoVW5kZXJPdmVyKCkpCiAgICAgICAg
ICAgICByZXR1cm4gQCJBWE1hdGhVbmRlck92ZXIiOwotICAgICAgICBpZiAobV9vYmplY3QtPmlz
TWF0aFNxdWFyZVJvb3QoKSkKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01h
dGhTcXVhcmVSb290KCkpCiAgICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhTcXVhcmVSb290IjsK
LSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhSb290KCkpCisgICAgICAgIGlmIChzZWxmLmF4
QmFja2luZ09iamVjdC0+aXNNYXRoUm9vdCgpKQogICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRo
Um9vdCI7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoVGV4dCgpKQorICAgICAgICBpZiAo
c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWF0aFRleHQoKSkKICAgICAgICAgICAgIHJldHVybiBA
IkFYTWF0aFRleHQiOwotICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aE51bWJlcigpKQorICAg
ICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWF0aE51bWJlcigpKQogICAgICAgICAg
ICAgcmV0dXJuIEAiQVhNYXRoTnVtYmVyIjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhJ
ZGVudGlmaWVyKCkpCisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRoSWRl
bnRpZmllcigpKQogICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoSWRlbnRpZmllciI7Ci0gICAg
ICAgIGlmIChtX29iamVjdC0+aXNNYXRoVGFibGUoKSkKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5pc01hdGhUYWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoVGFi
bGUiOwotICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFRhYmxlUm93KCkpCisgICAgICAgIGlm
IChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRoVGFibGVSb3coKSkKICAgICAgICAgICAgIHJl
dHVybiBAIkFYTWF0aFRhYmxlUm93IjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhUYWJs
ZUNlbGwoKSkKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01hdGhUYWJsZUNl
bGwoKSkKICAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aFRhYmxlQ2VsbCI7Ci0gICAgICAgIGlm
IChtX29iamVjdC0+aXNNYXRoRmVuY2VPcGVyYXRvcigpKQorICAgICAgICBpZiAoc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmlzTWF0aEZlbmNlT3BlcmF0b3IoKSkKICAgICAgICAgICAgIHJldHVybiBA
IkFYTWF0aEZlbmNlT3BlcmF0b3IiOwotICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFNlcGFy
YXRvck9wZXJhdG9yKCkpCisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRo
U2VwYXJhdG9yT3BlcmF0b3IoKSkKICAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aFNlcGFyYXRv
ck9wZXJhdG9yIjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhPcGVyYXRvcigpKQorICAg
ICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWF0aE9wZXJhdG9yKCkpCiAgICAgICAg
ICAgICByZXR1cm4gQCJBWE1hdGhPcGVyYXRvciI7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNN
YXRoTXVsdGlzY3JpcHQoKSkKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01h
dGhNdWx0aXNjcmlwdCgpKQogICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoTXVsdGlzY3JpcHQi
OwogICAgIH0KICAgICAKQEAgLTMyMDAsNyArMzIwMCw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmli
dXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmlu
ZywKIAogLSAoQ0dQb2ludClhY2Nlc3NpYmlsaXR5Q2xpY2tQb2ludAogewotICAgIHJldHVybiBt
X29iamVjdC0+Y2xpY2tQb2ludCgpOworICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+
Y2xpY2tQb2ludCgpOwogfQogCiAtIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbQppbmRl
eCBmNWRhMTZhMGQ2ZDZmMzg2ZjE1ODNjOGQ5Mzk1MmNiZjA3MThlNjY1Li40MmM2NDc5Y2Q2Mjk1
Y2Q5OWNiMWYxZTQ2MTgzMjNiNGMwNjRhNzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW0KQEAgLTI0NCw2ICsyNDQsMTQg
QEAgdm9pZCBBWE9iamVjdENhY2hlOjphdHRhY2hXcmFwcGVyKEFYQ29yZU9iamVjdCogb2JqKQog
ICAgIG9iai0+c2V0V3JhcHBlcih3cmFwcGVyLmdldCgpKTsKIH0KIAorI2lmIEVOQUJMRShBQ0NF
U1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCit2b2lkIEFYT2JqZWN0Q2FjaGU6OmF0dGFjaFdyYXBw
ZXIoQVhJc29sYXRlZE9iamVjdCogaXNvbGF0ZWRPYmplY3QsIFdlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyKiB3cmFwcGVyKQoreworICAgIFt3cmFwcGVyIGF0dGFjaElzb2xhdGVkT2JqZWN0
OihBWENvcmVPYmplY3QqKWlzb2xhdGVkT2JqZWN0XTsKKyAgICBpc29sYXRlZE9iamVjdC0+c2V0
V3JhcHBlcih3cmFwcGVyKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgQk9PTCBheFNob3VsZFJlcG9z
dE5vdGlmaWNhdGlvbnNGb3JUZXN0cyA9IGZhbHNlOwogCiB2b2lkIEFYT2JqZWN0Q2FjaGU6OnNl
dFNob3VsZFJlcG9zdE5vdGlmaWNhdGlvbnNGb3JUZXN0cyhib29sIHZhbHVlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaAppbmRleCBiNjRkMGU3NmM0ZDM5NmRlYzE4ZmI2
OGY2MGM5NTgxMTA4NWJmZjVkLi40YTRlM2RiMGQzZWM3NGNlZjdmZDgyNzBjYzUxYjJhZmE0ZThj
MDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaApAQCAtNDUsMTcg
KzQ1LDIyIEBAIGNsYXNzIFZpc2libGVQb3NpdGlvbjsKIH0KIAogQGludGVyZmFjZSBXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UgOiBOU09iamVjdCB7Ci0gICAgV2ViQ29yZTo6QVhD
b3JlT2JqZWN0KiBtX29iamVjdDsKKyAgICBXZWJDb3JlOjpBWENvcmVPYmplY3QqIG1fYXhPYmpl
Y3Q7CisjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKKyAgICBXZWJDb3Jl
OjpBWENvcmVPYmplY3QqIG1faXNvbGF0ZWRPYmplY3Q7CisjZW5kaWYKICAgICBXZWJDb3JlOjpB
WElEIF9pZGVudGlmaWVyOwogfQogCiAtIChpZClpbml0V2l0aEFjY2Vzc2liaWxpdHlPYmplY3Q6
KFdlYkNvcmU6OkFYQ29yZU9iamVjdCopYXhPYmplY3Q7CisjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJ
VFlfSVNPTEFURURfVFJFRSkKKy0gKHZvaWQpYXR0YWNoSXNvbGF0ZWRPYmplY3Q6KFdlYkNvcmU6
OkFYQ29yZU9iamVjdCopaXNvbGF0ZWRPYmplY3Q7CisjZW5kaWYKIAogLSAodm9pZClkZXRhY2g7
CiAKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIFdlYkNvcmU6OkFYSUQgaWRlbnRpZmll
cjsKIAotLSAoV2ViQ29yZTo6QVhDb3JlT2JqZWN0KilhY2Nlc3NpYmlsaXR5T2JqZWN0OwogLSAo
Qk9PTCl1cGRhdGVPYmplY3RCYWNraW5nU3RvcmU7CiAKIC8vIFRoaXMgY2FuIGJlIGVpdGhlciBh
biBBY2Nlc3NpYmlsaXR5T2JqZWN0IG9yIGFuIEFYSXNvbGF0ZWRPYmplY3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyQmFzZS5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbQppbmRleCA3MjQ2OTA2YTg3YjA4MjA5NjgzYTE1
NzNmN2JiYzAzMGZlODllZTA4Li5iNDIzNzM2ODA0ZGFmYmYwNTZmODA4NDk0MWI2ODdiNmQzMzcx
NDgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCkBAIC0yNDYs
OCArMjQ2LDYgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKICNkZWZpbmUgTlNBY2Nlc3Np
YmlsaXR5SW1tZWRpYXRlRGVzY2VuZGFudHNPbmx5IEAiQVhJbW1lZGlhdGVEZXNjZW5kYW50c09u
bHkiCiAjZW5kaWYKIAotI2RlZmluZSBfYXhCYWNraW5nT2JqZWN0IHNlbGYuYXhCYWNraW5nT2Jq
ZWN0Ci0KIHN0YXRpYyBOU0FycmF5ICpjb252ZXJ0TWF0aFBhaXJzVG9OU0FycmF5KGNvbnN0IEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlNYXRoTXVsdGlzY3JpcHRQYWlycyYgcGFp
cnMsIE5TU3RyaW5nICpzdWJzY3JpcHRLZXksIE5TU3RyaW5nICpzdXBlcnNjcmlwdEtleSkKIHsK
ICAgICBOU011dGFibGVBcnJheSAqYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2Fw
YWNpdHk6cGFpcnMuc2l6ZSgpXTsKQEAgLTI5MCwzMCArMjg4LDQ5IEBAIE5TQXJyYXkgKmNvbnZl
cnRUb05TQXJyYXkoY29uc3QgV2ViQ29yZTo6QVhDb3JlT2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0CiAgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCiAgICAgICAgIHJldHVy
biBuaWw7CiAKLSAgICBtX29iamVjdCA9IGF4T2JqZWN0OwotICAgIF9pZGVudGlmaWVyID0gbV9v
YmplY3QtPm9iamVjdElEKCk7Ci0KKyAgICBbc2VsZiBhdHRhY2hBWE9iamVjdDpheE9iamVjdF07
CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKKy0gKHZvaWQpYXR0YWNoQVhPYmplY3Q6KEFYQ29yZU9i
amVjdCopYXhPYmplY3QKK3sKKyAgICBBU1NFUlQoYXhPYmplY3QgJiYgKF9pZGVudGlmaWVyID09
IEludmFsaWRBWElEIHx8IF9pZGVudGlmaWVyID09IGF4T2JqZWN0LT5vYmplY3RJRCgpKSk7Cisg
ICAgbV9heE9iamVjdCA9IGF4T2JqZWN0OworICAgIGlmIChfaWRlbnRpZmllciA9PSBJbnZhbGlk
QVhJRCkKKyAgICAgICAgX2lkZW50aWZpZXIgPSBtX2F4T2JqZWN0LT5vYmplY3RJRCgpOworfQor
CisjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKKy0gKHZvaWQpYXR0YWNo
SXNvbGF0ZWRPYmplY3Q6KEFYQ29yZU9iamVjdCopaXNvbGF0ZWRPYmplY3QKK3sKKyAgICBBU1NF
UlQoaXNvbGF0ZWRPYmplY3QgJiYgKF9pZGVudGlmaWVyID09IEludmFsaWRBWElEIHx8IF9pZGVu
dGlmaWVyID09IGlzb2xhdGVkT2JqZWN0LT5vYmplY3RJRCgpKSk7CisgICAgbV9pc29sYXRlZE9i
amVjdCA9IGlzb2xhdGVkT2JqZWN0OworICAgIGlmIChfaWRlbnRpZmllciA9PSBJbnZhbGlkQVhJ
RCkKKyAgICAgICAgX2lkZW50aWZpZXIgPSBtX2lzb2xhdGVkT2JqZWN0LT5vYmplY3RJRCgpOwor
fQorI2VuZGlmCisKIC0gKHZvaWQpZGV0YWNoCiB7Ci0gICAgbV9vYmplY3QgPSBudWxscHRyOwot
ICAgIF9pZGVudGlmaWVyID0gMDsKKyAgICBtX2F4T2JqZWN0ID0gbnVsbHB0cjsKKyNpZiBFTkFC
TEUoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQorICAgIG1faXNvbGF0ZWRPYmplY3QgPSBu
dWxscHRyOworI2VuZGlmCisgICAgX2lkZW50aWZpZXIgPSBJbnZhbGlkQVhJRDsKIH0KIAogLSAo
Qk9PTCl1cGRhdGVPYmplY3RCYWNraW5nU3RvcmUKIHsKICAgICAvLyBDYWxsaW5nIHVwZGF0ZUJh
Y2tpbmdTdG9yZSgpIGNhbiBpbnZhbGlkYXRlIHRoaXMgZWxlbWVudCBzbyBzZWxmIG11c3QgYmUg
cmV0YWluZWQuCi0gICAgLy8gSWYgaXQgZG9lcyBiZWNvbWUgaW52YWxpZGF0ZWQsIG1fb2JqZWN0
IHdpbGwgYmUgbmlsLgorICAgIC8vIElmIGl0IGRvZXMgYmVjb21lIGludmFsaWRhdGVkLCBzZWxm
LmF4QmFja2luZ09iamVjdCB3aWxsIGJlIG5pbC4KICAgICBDRlJldGFpbigoX19icmlkZ2UgQ0ZU
eXBlUmVmKXNlbGYpOwogICAgIENGQXV0b3JlbGVhc2UoKF9fYnJpZGdlIENGVHlwZVJlZilzZWxm
KTsKIAotICAgIGlmICghbV9vYmplY3QpCisgICAgaWYgKCFzZWxmLmF4QmFja2luZ09iamVjdCkK
ICAgICAgICAgcmV0dXJuIE5POwogICAgIAotICAgIG1fb2JqZWN0LT51cGRhdGVCYWNraW5nU3Rv
cmUoKTsKLSAgICBpZiAoIW1fb2JqZWN0KQorICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT51cGRh
dGVCYWNraW5nU3RvcmUoKTsKKyAgICBpZiAoIXNlbGYuYXhCYWNraW5nT2JqZWN0KQogICAgICAg
ICByZXR1cm4gTk87CiAgICAgCiAgICAgcmV0dXJuIFlFUzsKQEAgLTMyNCwzNiArMzQxLDM3IEBA
IE5TQXJyYXkgKmNvbnZlcnRUb05TQXJyYXkoY29uc3QgV2ViQ29yZTo6QVhDb3JlT2JqZWN0OjpB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0CiAgICAgcmV0dXJuIG5pbDsKIH0KIAotLSAoQVhDb3Jl
T2JqZWN0KilhY2Nlc3NpYmlsaXR5T2JqZWN0Ci17Ci0gICAgcmV0dXJuIG1fb2JqZWN0OwotfQot
CiAvLyBUaGlzIHNob3VsZCBiZSB0aGUgInZpc2libGUiIHRleHQgdGhhdCdzIGFjdHVhbGx5IG9u
IHRoZSBzY3JlZW4gaWYgcG9zc2libGUuCiAvLyBJZiB0aGVyZSdzIGFsdGVybmF0aXZlIHRleHQs
IHRoYXQgY2FuIG92ZXJyaWRlIHRoZSB0aXRsZS4KIC0gKE5TU3RyaW5nICopYmFzZUFjY2Vzc2li
aWxpdHlUaXRsZQogewotICAgIHJldHVybiBfYXhCYWNraW5nT2JqZWN0LT50aXRsZUF0dHJpYnV0
ZVZhbHVlKCk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT50aXRsZUF0dHJpYnV0
ZVZhbHVlKCk7CiB9CiAKIC0gKFdlYkNvcmU6OkFYQ29yZU9iamVjdCopYXhCYWNraW5nT2JqZWN0
CiB7Ci0gICAgcmV0dXJuIG1fb2JqZWN0OworI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xB
VEVEX1RSRUUpCisgICAgaWYgKCFpc01haW5UaHJlYWQoKSkgeworICAgICAgICBBU1NFUlQoQVhP
YmplY3RDYWNoZTo6Y2xpZW50U3VwcG9ydHNJc29sYXRlZFRyZWUoKSk7CisgICAgICAgIHJldHVy
biBtX2lzb2xhdGVkT2JqZWN0OworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBtX2F4T2JqZWN0
OwogfQogCiAtIChOU1N0cmluZyAqKWJhc2VBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24KIHsKLSAg
ICByZXR1cm4gX2F4QmFja2luZ09iamVjdC0+ZGVzY3JpcHRpb25BdHRyaWJ1dGVWYWx1ZSgpOwor
ICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+ZGVzY3JpcHRpb25BdHRyaWJ1dGVWYWx1
ZSgpOwogfQogCiAtIChOU0FycmF5PE5TU3RyaW5nICo+ICopYmFzZUFjY2Vzc2liaWxpdHlTcGVl
Y2hIaW50CiB7Ci0gICAgcmV0dXJuIFsoTlNTdHJpbmcgKilfYXhCYWNraW5nT2JqZWN0LT5zcGVl
Y2hIaW50QXR0cmlidXRlVmFsdWUoKSBjb21wb25lbnRzU2VwYXJhdGVkQnlTdHJpbmc6QCIgIl07
CisgICAgcmV0dXJuIFsoTlNTdHJpbmcgKilzZWxmLmF4QmFja2luZ09iamVjdC0+c3BlZWNoSGlu
dEF0dHJpYnV0ZVZhbHVlKCkgY29tcG9uZW50c1NlcGFyYXRlZEJ5U3RyaW5nOkAiICJdOwogfQog
CiAtIChOU1N0cmluZyAqKWJhc2VBY2Nlc3NpYmlsaXR5SGVscFRleHQKIHsKLSAgICByZXR1cm4g
X2F4QmFja2luZ09iamVjdC0+aGVscFRleHRBdHRyaWJ1dGVWYWx1ZSgpOworICAgIHJldHVybiBz
ZWxmLmF4QmFja2luZ09iamVjdC0+aGVscFRleHRBdHRyaWJ1dGVWYWx1ZSgpOwogfQogCiBzdHJ1
Y3QgUGF0aENvbnZlcnNpb25JbmZvIHsKQEAgLTQzMSw3ICs0NDksNyBAQCBzdGF0aWMgdm9pZCBj
b252ZXJ0UGF0aFRvU2NyZWVuU3BhY2VGdW5jdGlvbihQYXRoQ29udmVyc2lvbkluZm8mIGNvbnZl
cnNpb24sIGNvbgogCiAtIChDR1JlY3QpY29udmVydFJlY3RUb1NwYWNlOihXZWJDb3JlOjpGbG9h
dFJlY3QgJilyZWN0IHNwYWNlOihBY2Nlc3NpYmlsaXR5Q29udmVyc2lvblNwYWNlKXNwYWNlCiB7
Ci0gICAgaWYgKCFtX29iamVjdCkKKyAgICBpZiAoIXNlbGYuYXhCYWNraW5nT2JqZWN0KQogICAg
ICAgICByZXR1cm4gQ0dSZWN0WmVybzsKICAgICAKICAgICBDR1NpemUgc2l6ZSA9IENHU2l6ZU1h
a2UocmVjdC5zaXplKCkud2lkdGgoKSwgcmVjdC5zaXplKCkuaGVpZ2h0KCkpOwpAQCAtNDQwLDcg
KzQ1OCw3IEBAIHN0YXRpYyB2b2lkIGNvbnZlcnRQYXRoVG9TY3JlZW5TcGFjZUZ1bmN0aW9uKFBh
dGhDb252ZXJzaW9uSW5mbyYgY29udmVyc2lvbiwgY29uCiAgICAgQ0dSZWN0IGNnUmVjdCA9IENH
UmVjdE1ha2UocG9pbnQueCwgcG9pbnQueSwgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpOwogCiAg
ICAgLy8gV2ViS2l0MSBjb2RlIHBhdGguLi4gcGxhdGZvcm1XaWRnZXQoKSBleGlzdHMuCi0gICAg
RnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX29iamVjdC0+ZG9jdW1lbnRGcmFtZVZpZXcoKTsKKyAg
ICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5kb2N1bWVudEZy
YW1lVmlldygpOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgV0FLVmlldyogZG9jdW1l
bnRWaWV3ID0gZnJhbWVWaWV3ID8gZnJhbWVWaWV3LT5kb2N1bWVudFZpZXcoKSA6IG51bGxwdHI7
CiAgICAgaWYgKGRvY3VtZW50VmlldykgewpAQCAtNDY0LDIwICs0ODIsMjAgQEAgc3RhdGljIHZv
aWQgY29udmVydFBhdGhUb1NjcmVlblNwYWNlRnVuY3Rpb24oUGF0aENvbnZlcnNpb25JbmZvJiBj
b252ZXJzaW9uLCBjb24KICAgICB9CiAjZW5kaWYKICAgICBlbHNlCi0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxDR1JlY3Q+KG1fb2JqZWN0LT5jb252ZXJ0RnJhbWVUb1NwYWNlKHJlY3QsIHNw
YWNlKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDR1JlY3Q+KHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5jb252ZXJ0RnJhbWVUb1NwYWNlKHJlY3QsIHNwYWNlKSk7CiB9CiAKIC0gKE5TU3Ry
aW5nICopYXJpYUxhbmRtYXJrUm9sZURlc2NyaXB0aW9uCiB7Ci0gICAgcmV0dXJuIG1fb2JqZWN0
LT5hcmlhTGFuZG1hcmtSb2xlRGVzY3JpcHRpb24oKTsKKyAgICByZXR1cm4gc2VsZi5heEJhY2tp
bmdPYmplY3QtPmFyaWFMYW5kbWFya1JvbGVEZXNjcmlwdGlvbigpOwogfQogCiAtICh2b2lkKWJh
c2VBY2Nlc3NpYmlsaXR5U2V0Rm9jdXM6KEJPT0wpZm9jdXMKIHsKICAgICAvLyBJZiBmb2N1cyBp
cyBqdXN0IHNldCB3aXRob3V0IG1ha2luZyB0aGUgdmlldyB0aGUgZmlyc3QgcmVzcG9uZGVyLCB0
aGVuIGtleWJvYXJkIGZvY3VzIHdvbid0IG1vdmUgdG8gdGhlIHJpZ2h0IHBsYWNlLgotICAgIGlm
IChmb2N1cyAmJiAhbV9vYmplY3QtPmRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLmlz
Rm9jdXNlZEFuZEFjdGl2ZSgpKSB7Ci0gICAgICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9v
YmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCk7Ci0gICAgICAgIFBhZ2UqIHBhZ2UgPSBtX29iamVj
dC0+cGFnZSgpOworICAgIGlmIChmb2N1cyAmJiAhc2VsZi5heEJhY2tpbmdPYmplY3QtPmRvY3Vt
ZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLmlzRm9jdXNlZEFuZEFjdGl2ZSgpKSB7CisgICAg
ICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmRvY3VtZW50
RnJhbWVWaWV3KCk7CisgICAgICAgIFBhZ2UqIHBhZ2UgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+
cGFnZSgpOwogICAgICAgICBpZiAocGFnZSAmJiBmcmFtZVZpZXcpIHsKICAgICAgICAgICAgIENo
cm9tZUNsaWVudCYgY2hyb21lQ2xpZW50ID0gcGFnZS0+Y2hyb21lKCkuY2xpZW50KCk7CiAgICAg
ICAgICAgICBjaHJvbWVDbGllbnQuZm9jdXMoKTsKQEAgLTQ5MCw3ICs1MDgsNyBAQCBzdGF0aWMg
dm9pZCBjb252ZXJ0UGF0aFRvU2NyZWVuU3BhY2VGdW5jdGlvbihQYXRoQ29udmVyc2lvbkluZm8m
IGNvbnZlcnNpb24sIGNvbgogICAgICAgICB9CiAgICAgfQogCi0gICAgbV9vYmplY3QtPnNldEZv
Y3VzZWQoZm9jdXMpOworICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZXRGb2N1c2VkKGZvY3Vz
KTsKIH0KIAogLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5UGxhdGZvcm1NYXRoU3Vic2NyaXB0
S2V5CkBAIC01MDgsMTQgKzUyNiwxNCBAQCBzdGF0aWMgdm9pZCBjb252ZXJ0UGF0aFRvU2NyZWVu
U3BhY2VGdW5jdGlvbihQYXRoQ29udmVyc2lvbkluZm8mIGNvbnZlcnNpb24sIGNvbgogLSAoTlNB
cnJheSAqKWFjY2Vzc2liaWxpdHlNYXRoUG9zdHNjcmlwdFBhaXJzCiB7CiAgICAgQWNjZXNzaWJp
bGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlwdFBhaXJzIHBhaXJzOwotICAg
IG1fb2JqZWN0LT5tYXRoUG9zdHNjcmlwdHMocGFpcnMpOworICAgIHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5tYXRoUG9zdHNjcmlwdHMocGFpcnMpOwogICAgIHJldHVybiBjb252ZXJ0TWF0aFBhaXJz
VG9OU0FycmF5KHBhaXJzLCBbc2VsZiBhY2Nlc3NpYmlsaXR5UGxhdGZvcm1NYXRoU3Vic2NyaXB0
S2V5XSwgW3NlbGYgYWNjZXNzaWJpbGl0eVBsYXRmb3JtTWF0aFN1cGVyc2NyaXB0S2V5XSk7CiB9
CiAKIC0gKE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5TWF0aFByZXNjcmlwdFBhaXJzCiB7CiAgICAg
QWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlwdFBhaXJzIHBh
aXJzOwotICAgIG1fb2JqZWN0LT5tYXRoUHJlc2NyaXB0cyhwYWlycyk7CisgICAgc2VsZi5heEJh
Y2tpbmdPYmplY3QtPm1hdGhQcmVzY3JpcHRzKHBhaXJzKTsKICAgICByZXR1cm4gY29udmVydE1h
dGhQYWlyc1RvTlNBcnJheShwYWlycywgW3NlbGYgYWNjZXNzaWJpbGl0eVBsYXRmb3JtTWF0aFN1
YnNjcmlwdEtleV0sIFtzZWxmIGFjY2Vzc2liaWxpdHlQbGF0Zm9ybU1hdGhTdXBlcnNjcmlwdEtl
eV0pOwogfQogCkBAIC02ODcsOCArNzA1LDggQEAgQWNjZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlh
IGFjY2Vzc2liaWxpdHlTZWFyY2hDcml0ZXJpYUZvclNlYXJjaFByZWRpY2F0ZVBhcmFtZXQKICAg
ICAKICAgICBBWENvcmVPYmplY3QqIHN0YXJ0RWxlbWVudCA9IG51bGxwdHI7CiAgICAgaWYgKFtz
dGFydEVsZW1lbnRQYXJhbWV0ZXIgaXNLaW5kT2ZDbGFzczpbV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJCYXNlIGNsYXNzXV0pCi0gICAgICAgIHN0YXJ0RWxlbWVudCA9IFtzdGFydEVsZW1l
bnRQYXJhbWV0ZXIgYWNjZXNzaWJpbGl0eU9iamVjdF07Ci0gICAgCisgICAgICAgIHN0YXJ0RWxl
bWVudCA9IFtzdGFydEVsZW1lbnRQYXJhbWV0ZXIgYXhCYWNraW5nT2JqZWN0XTsKKwogICAgIGJv
b2wgdmlzaWJsZU9ubHkgPSBmYWxzZTsKICAgICBpZiAoW3Zpc2libGVPbmx5UGFyYW1ldGVyIGlz
S2luZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNzXV0pCiAgICAgICAgIHZpc2libGVPbmx5ID0gW3Zp
c2libGVPbmx5UGFyYW1ldGVyIGJvb2xWYWx1ZV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbSBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyTWFjLm1tCmluZGV4IDkyMzQ5NDZjOTM4ZjEyZTUzNTMyYzY1ZDQ2MTFhZGQ0MjE0NGMw
YjguLmFmOWZkYjkxZTc1MTk3MzY1Y2JiYTI0Nzk5OTBmOTcwNzhmNjIyY2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCkBAIC01MzQsOCArNTM0LDYgQEAgdXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKICNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5UmVsYXRpdmVGcmFt
ZUF0dHJpYnV0ZSBAIkFYUmVsYXRpdmVGcmFtZSIKICNlbmRpZgogCi0jZGVmaW5lIF9heEJhY2tp
bmdPYmplY3Qgc2VsZi5heEJhY2tpbmdPYmplY3QKLQogZXh0ZXJuICJDIiBBWFVJRWxlbWVudFJl
ZiBOU0FjY2Vzc2liaWxpdHlDcmVhdGVBWFVJRWxlbWVudFJlZihpZCBlbGVtZW50KTsKIAogQGlt
cGxlbWVudGF0aW9uIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyCkBAIC01NTcsMTAgKzU1
NSwxMCBAQCBleHRlcm4gIkMiIEFYVUlFbGVtZW50UmVmIE5TQWNjZXNzaWJpbGl0eUNyZWF0ZUFY
VUlFbGVtZW50UmVmKGlkIGVsZW1lbnQpOwogCiAtIChpZClhdHRhY2htZW50VmlldwogewotICAg
IEFTU0VSVChtX29iamVjdC0+aXNBdHRhY2htZW50KCkpOworICAgIEFTU0VSVChzZWxmLmF4QmFj
a2luZ09iamVjdC0+aXNBdHRhY2htZW50KCkpOwogCiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6
OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxpZD4oW3Byb3RlY3RlZFNlbGYgPSBSZXRhaW5Q
dHI8V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+KHNlbGYpXSAoKSAtPiBpZCB7Ci0gICAg
ICAgIGF1dG8qIHdpZGdldCA9IHByb3RlY3RlZFNlbGYtPm1fb2JqZWN0LT53aWRnZXRGb3JBdHRh
Y2htZW50VmlldygpOworICAgICAgICBhdXRvKiB3aWRnZXQgPSBwcm90ZWN0ZWRTZWxmLmdldCgp
LmF4QmFja2luZ09iamVjdC0+d2lkZ2V0Rm9yQXR0YWNobWVudFZpZXcoKTsKICAgICAgICAgaWYg
KCF3aWRnZXQpCiAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICByZXR1cm4gTlNBY2Nl
c3NpYmlsaXR5VW5pZ25vcmVkRGVzY2VuZGFudCh3aWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkpOwpA
QCAtNjA4LDcgKzYwNiw3IEBAIHN0YXRpYyBpZCBBWFRleHRNYXJrZXJSYW5nZUVuZChpZCByYW5n
ZSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gX2F4QmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKTsKKyAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50
KQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogICAgIApAQCAtNzg1LDcgKzc4Myw3IEBAIHN0
YXRpYyBib29sIGlzVGV4dE1hcmtlcklnbm9yZWQoaWQgdGV4dE1hcmtlcikKIAogLSAoQWNjZXNz
aWJpbGl0eU9iamVjdCopYWNjZXNzaWJpbGl0eU9iamVjdEZvclRleHRNYXJrZXI6KGlkKXRleHRN
YXJrZXIKIHsKLSAgICByZXR1cm4gYWNjZXNzaWJpbGl0eU9iamVjdEZvclRleHRNYXJrZXIobV9v
YmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgdGV4dE1hcmtlcik7CisgICAgcmV0dXJuIGFjY2Vzc2li
aWxpdHlPYmplY3RGb3JUZXh0TWFya2VyKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENh
Y2hlKCksIHRleHRNYXJrZXIpOwogfQogCiBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNj
ZXNzaWJpbGl0eU9iamVjdEZvclRleHRNYXJrZXIoQVhPYmplY3RDYWNoZSogY2FjaGUsIGlkIHRl
eHRNYXJrZXIpCkBAIC04MDEsNyArNzk5LDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGFjY2Vzc2liaWxpdHlPYmplY3RGb3JUZXh0TWFya2VyKEFYT2JqZWN0Q2FjaGUqIGNhY2gKIAog
LSAoaWQpdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlOihjb25zdCBSZWZQdHI8UmFuZ2U+KXJhbmdl
CiB7Ci0gICAgcmV0dXJuIHRleHRNYXJrZXJSYW5nZUZyb21SYW5nZShtX29iamVjdC0+YXhPYmpl
Y3RDYWNoZSgpLCByYW5nZSk7CisgICAgcmV0dXJuIHRleHRNYXJrZXJSYW5nZUZyb21SYW5nZShz
ZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpLCByYW5nZSk7CiB9CiAKIHN0YXRp
YyBpZCB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2UoQVhPYmplY3RDYWNoZSogY2FjaGUsIGNvbnN0
IFJlZlB0cjxSYW5nZT4gcmFuZ2UpCkBAIC04MTMsNyArODExLDcgQEAgc3RhdGljIGlkIHRleHRN
YXJrZXJSYW5nZUZyb21SYW5nZShBWE9iamVjdENhY2hlKiBjYWNoZSwgY29uc3QgUmVmUHRyPFJh
bmdlPiByYW4KIAogLSAoaWQpc3RhcnRPckVuZFRleHRNYXJrZXJGb3JSYW5nZTooY29uc3QgUmVm
UHRyPFJhbmdlPilyYW5nZSBpc1N0YXJ0OihCT09MKWlzU3RhcnQKIHsKLSAgICByZXR1cm4gc3Rh
cnRPckVuZFRleHRtYXJrZXJGb3JSYW5nZShtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpLCByYW5n
ZSwgaXNTdGFydCk7CisgICAgcmV0dXJuIHN0YXJ0T3JFbmRUZXh0bWFya2VyRm9yUmFuZ2Uoc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgcmFuZ2UsIGlzU3RhcnQpOwogfQog
CiBzdGF0aWMgaWQgc3RhcnRPckVuZFRleHRtYXJrZXJGb3JSYW5nZShBWE9iamVjdENhY2hlKiBj
YWNoZSwgUmVmUHRyPFJhbmdlPiByYW5nZSwgYm9vbCBpc1N0YXJ0KQpAQCAtODU1LDE3ICs4NTMs
MTcgQEAgc3RhdGljIGlkIHByZXZpb3VzVGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldChBWE9i
amVjdENhY2hlKiBjYWNoZSwgQ2hhcmFjdGVyT2YKIAogLSAoaWQpbmV4dFRleHRNYXJrZXJGb3JD
aGFyYWN0ZXJPZmZzZXQ6KENoYXJhY3Rlck9mZnNldCYpY2hhcmFjdGVyT2Zmc2V0CiB7Ci0gICAg
cmV0dXJuIG5leHRUZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0KG1fb2JqZWN0LT5heE9iamVj
dENhY2hlKCksIGNoYXJhY3Rlck9mZnNldCk7CisgICAgcmV0dXJuIG5leHRUZXh0TWFya2VyRm9y
Q2hhcmFjdGVyT2Zmc2V0KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCksIGNo
YXJhY3Rlck9mZnNldCk7CiB9CiAKIC0gKGlkKXByZXZpb3VzVGV4dE1hcmtlckZvckNoYXJhY3Rl
ck9mZnNldDooQ2hhcmFjdGVyT2Zmc2V0JiljaGFyYWN0ZXJPZmZzZXQKIHsKLSAgICByZXR1cm4g
cHJldmlvdXNUZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0KG1fb2JqZWN0LT5heE9iamVjdENh
Y2hlKCksIGNoYXJhY3Rlck9mZnNldCk7CisgICAgcmV0dXJuIHByZXZpb3VzVGV4dE1hcmtlckZv
ckNoYXJhY3Rlck9mZnNldChzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpLCBj
aGFyYWN0ZXJPZmZzZXQpOwogfQogCiAtIChpZCl0ZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0
OihDaGFyYWN0ZXJPZmZzZXQmKWNoYXJhY3Rlck9mZnNldAogewotICAgIHJldHVybiB0ZXh0TWFy
a2VyRm9yQ2hhcmFjdGVyT2Zmc2V0KG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCksIGNoYXJhY3Rl
ck9mZnNldCk7CisgICAgcmV0dXJuIHRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQoc2VsZi5h
eEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgY2hhcmFjdGVyT2Zmc2V0KTsKIH0KIAog
c3RhdGljIGlkIHRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQoQVhPYmplY3RDYWNoZSogY2Fj
aGUsIGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0KQpAQCAtODkyLDcgKzg5
MCw3IEBAIHN0YXRpYyBpZCB0ZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0KEFYT2JqZWN0Q2Fj
aGUqIGNhY2hlLCBjb25zdCBDaGFyYWN0ZXJPZmZzCiAgICAgaWYgKCFzdGFydFRleHRNYXJrZXIg
fHwgIWVuZFRleHRNYXJrZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAotICAgIEFY
T2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICBBWE9i
amVjdENhY2hlKiBjYWNoZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7
CiAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCkBAIC05MTUs
NyArOTEzLDcgQEAgc3RhdGljIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0
TWFya2VyKEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBDRlR5cGUKIAogLSAoQ2hhcmFjdGVyT2Zmc2V0
KWNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6KGlkKXRleHRNYXJrZXIKIHsKLSAgICByZXR1
cm4gY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcihtX29iamVjdC0+YXhPYmplY3RDYWNoZSgp
LCAoX19icmlkZ2UgQ0ZUeXBlUmVmKXRleHRNYXJrZXIpOworICAgIHJldHVybiBjaGFyYWN0ZXJP
ZmZzZXRGb3JUZXh0TWFya2VyKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCks
IChfX2JyaWRnZSBDRlR5cGVSZWYpdGV4dE1hcmtlcik7CiB9CiAKIHN0YXRpYyBpZCB0ZXh0TWFy
a2VyRm9yVmlzaWJsZVBvc2l0aW9uKEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBjb25zdCBWaXNpYmxl
UG9zaXRpb24mIHZpc2libGVQb3MpCkBAIC05MzMsMTIgKzkzMSwxMiBAQCBzdGF0aWMgaWQgdGV4
dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihBWE9iamVjdENhY2hlKiBjYWNoZSwgY29uc3QgVmlz
aWJsZVBvc2l0aQogCiAtIChpZCl0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOihjb25zdCBW
aXNpYmxlUG9zaXRpb24gJil2aXNpYmxlUG9zCiB7Ci0gICAgcmV0dXJuIHRleHRNYXJrZXJGb3JW
aXNpYmxlUG9zaXRpb24obV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgdmlzaWJsZVBvcyk7Cisg
ICAgcmV0dXJuIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24oc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmF4T2JqZWN0Q2FjaGUoKSwgdmlzaWJsZVBvcyk7CiB9CiAKIC0gKGlkKXRleHRNYXJrZXJG
b3JGaXJzdFBvc2l0aW9uSW5UZXh0Q29udHJvbDooSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQg
Jil0ZXh0Q29udHJvbAogewotICAgIGF1dG8gKmNhY2hlID0gbV9vYmplY3QtPmF4T2JqZWN0Q2Fj
aGUoKTsKKyAgICBhdXRvICpjYWNoZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENh
Y2hlKCk7CiAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgcmV0dXJuIG5pbDsKIApAQCAtOTY0LDcg
Kzk2Miw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1h
cmtlcihBWE9iamVjdENhY2hlKiBjYWNoZSwgQ0ZUeXBlCiAKIC0gKFZpc2libGVQb3NpdGlvbil2
aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOihpZCl0ZXh0TWFya2VyCiB7Ci0gICAgcmV0dXJu
IHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIobV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwg
KF9fYnJpZGdlIENGVHlwZVJlZil0ZXh0TWFya2VyKTsKKyAgICByZXR1cm4gdmlzaWJsZVBvc2l0
aW9uRm9yVGV4dE1hcmtlcihzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpLCAo
X19icmlkZ2UgQ0ZUeXBlUmVmKXRleHRNYXJrZXIpOwogfQogCiBzdGF0aWMgVmlzaWJsZVBvc2l0
aW9uIHZpc2libGVQb3NpdGlvbkZvclN0YXJ0T2ZUZXh0TWFya2VyUmFuZ2UoQVhPYmplY3RDYWNo
ZSogY2FjaGUsIGlkIHRleHRNYXJrZXJSYW5nZSkKQEAgLTEyNzcsNyArMTI3NSw3IEBAIHN0YXRp
YyBOU1N0cmluZyogbnNTdHJpbmdGb3JSZXBsYWNlZE5vZGUoTm9kZSogcmVwbGFjZWROb2RlKQog
CiAtIChOU0F0dHJpYnV0ZWRTdHJpbmcqKWRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yVGV4dE1hcmtl
clJhbmdlOihpZCl0ZXh0TWFya2VyUmFuZ2Ugc3BlbGxDaGVjazooQk9PTClzcGVsbENoZWNrCiB7
Ci0gICAgaWYgKCFtX29iamVjdCkKKyAgICBpZiAoIXNlbGYuYXhCYWNraW5nT2JqZWN0KQogICAg
ICAgICByZXR1cm4gbmlsOwogICAgIAogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBbc2VsZiBy
YW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOwpAQCAtMTMzMSw3ICsxMzI5
LDcgQEAgc3RhdGljIGlkIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zKEFYT2Jq
ZWN0Q2FjaGUqIGNhY2hlLCBjb25zdCBWaXNpYmwKIAogLSAoaWQpdGV4dE1hcmtlclJhbmdlRnJv
bVZpc2libGVQb3NpdGlvbnM6KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpc3RhcnRQb3NpdGlvbiBl
bmRQb3NpdGlvbjooY29uc3QgVmlzaWJsZVBvc2l0aW9uJillbmRQb3NpdGlvbgogewotICAgIHJl
dHVybiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9ucyhtX29iamVjdC0+YXhPYmpl
Y3RDYWNoZSgpLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CisgICAgcmV0dXJuIHRleHRN
YXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9i
amVjdENhY2hlKCksIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKIH0KIAogQUxMT1dfREVQ
UkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfQkVHSU4KQEAgLTEzNTYsMTMgKzEzNTQsMTMgQEAgQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgc3RhdGljIE5TQXJyYXkgKnNs
aWRlckFjdGlvbnMgPSBbW2RlZmF1bHRFbGVtZW50QWN0aW9ucyBhcnJheUJ5QWRkaW5nT2JqZWN0
c0Zyb21BcnJheTpbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOk5TQWNjZXNzaWJpbGl0eUluY3Jl
bWVudEFjdGlvbiwgTlNBY2Nlc3NpYmlsaXR5RGVjcmVtZW50QWN0aW9uLCBuaWxdXSByZXRhaW5d
OwogICAgIAogICAgIE5TQXJyYXkgKmFjdGlvbnM7Ci0gICAgaWYgKG1fb2JqZWN0LT5zdXBwb3J0
c1ByZXNzQWN0aW9uKCkpCisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zdXBwb3J0c1By
ZXNzQWN0aW9uKCkpCiAgICAgICAgIGFjdGlvbnMgPSBhY3Rpb25FbGVtZW50QWN0aW9uczsKLSAg
ICBlbHNlIGlmIChtX29iamVjdC0+aXNNZW51UmVsYXRlZCgpKQorICAgIGVsc2UgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc01lbnVSZWxhdGVkKCkpCiAgICAgICAgIGFjdGlvbnMgPSBtZW51
RWxlbWVudEFjdGlvbnM7Ci0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzU2xpZGVyKCkpCisgICAg
ZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzU2xpZGVyKCkpCiAgICAgICAgIGFjdGlv
bnMgPSBzbGlkZXJBY3Rpb25zOwotICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc0F0dGFjaG1lbnQo
KSkKKyAgICBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNBdHRhY2htZW50KCkpCiAg
ICAgICAgIGFjdGlvbnMgPSBbW3NlbGYgYXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlBY3Rp
b25OYW1lc107CiAgICAgZWxzZQogICAgICAgICBhY3Rpb25zID0gZGVmYXVsdEVsZW1lbnRBY3Rp
b25zOwpAQCAtMTM3Miw5OSArMTM3MCw5OSBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFU
SU9OU19FTkQKIAogLSAoTlNBcnJheSopYWRkaXRpb25hbEFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVO
YW1lcwogewotICAgIGlmICghbV9vYmplY3QpCisgICAgaWYgKCFzZWxmLmF4QmFja2luZ09iamVj
dCkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKICAgICBOU011dGFibGVBcnJheSAqYWRkaXRp
b25hbCA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0gICAgaWYgKG1fb2JqZWN0LT5zdXBwb3J0
c0FSSUFPd25zKCkpCisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zdXBwb3J0c0FSSUFP
d25zKCkpCiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlPd25z
QXR0cmlidXRlXTsKICAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzVG9nZ2xlQnV0dG9uKCkpCisg
ICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1RvZ2dsZUJ1dHRvbigpKQogICAgICAgICBb
YWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGVdOwogICAg
IAotICAgIGlmIChtX29iamVjdC0+c3VwcG9ydHNFeHBhbmRlZCgpIHx8IG1fb2JqZWN0LT5pc1N1
bW1hcnkoKSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnN1cHBvcnRzRXhwYW5kZWQo
KSB8fCBzZWxmLmF4QmFja2luZ09iamVjdC0+aXNTdW1tYXJ5KCkpCiAgICAgICAgIFthZGRpdGlv
bmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlFeHBhbmRlZEF0dHJpYnV0ZV07CiAgICAgCi0g
ICAgaWYgKG1fb2JqZWN0LT5pc1Njcm9sbGJhcigpCi0gICAgICAgIHx8IG1fb2JqZWN0LT5pc1Jh
ZGlvR3JvdXAoKQotICAgICAgICB8fCBtX29iamVjdC0+aXNTcGxpdHRlcigpCi0gICAgICAgIHx8
IG1fb2JqZWN0LT5pc1Rvb2xiYXIoKSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlz
U2Nyb2xsYmFyKCkKKyAgICAgICAgfHwgc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzUmFkaW9Hcm91
cCgpCisgICAgICAgIHx8IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1NwbGl0dGVyKCkKKyAgICAg
ICAgfHwgc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVG9vbGJhcigpKQogICAgICAgICBbYWRkaXRp
b25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb25BdHRyaWJ1dGVdOwogICAg
IAotICAgIGlmIChtX29iamVjdC0+c3VwcG9ydHNBUklBRHJhZ2dpbmcoKSkKKyAgICBpZiAoc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPnN1cHBvcnRzQVJJQURyYWdnaW5nKCkpCiAgICAgICAgIFthZGRp
dGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlHcmFiYmVkQXR0cmlidXRlXTsKICAgICAK
LSAgICBpZiAobV9vYmplY3QtPnN1cHBvcnRzQVJJQURyb3BwaW5nKCkpCisgICAgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5zdXBwb3J0c0FSSUFEcm9wcGluZygpKQogICAgICAgICBbYWRkaXRp
b25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5RHJvcEVmZmVjdHNBdHRyaWJ1dGVdOwogICAg
IAotICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCptX29iamVjdCkgJiYgZG93bmNhc3Q8
QWNjZXNzaWJpbGl0eVRhYmxlPigqbV9vYmplY3QpLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2li
aWxpdHkoKSAmJiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCptX29iamVjdCkuc3VwcG9y
dHNTZWxlY3RlZFJvd3MoKSkKKyAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxlPigqc2VsZi5h
eEJhY2tpbmdPYmplY3QpICYmIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKnNlbGYuYXhC
YWNraW5nT2JqZWN0KS5pc0V4cG9zYWJsZVRocm91Z2hBY2Nlc3NpYmlsaXR5KCkgJiYgZG93bmNh
c3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqc2VsZi5heEJhY2tpbmdPYmplY3QpLnN1cHBvcnRzU2Vs
ZWN0ZWRSb3dzKCkpCiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxp
dHlTZWxlY3RlZFJvd3NBdHRyaWJ1dGVdOwogICAgIAotICAgIGlmIChtX29iamVjdC0+c3VwcG9y
dHNMaXZlUmVnaW9uKCkpIHsKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnN1cHBvcnRz
TGl2ZVJlZ2lvbigpKSB7CiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2li
aWxpdHlBUklBTGl2ZUF0dHJpYnV0ZV07CiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpO
U0FjY2Vzc2liaWxpdHlBUklBUmVsZXZhbnRBdHRyaWJ1dGVdOwogICAgIH0KICAgICAKLSAgICBp
ZiAobV9vYmplY3QtPnN1cHBvcnRzU2V0U2l6ZSgpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09i
amVjdC0+c3VwcG9ydHNTZXRTaXplKCkpCiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpO
U0FjY2Vzc2liaWxpdHlBUklBU2V0U2l6ZUF0dHJpYnV0ZV07Ci0gICAgaWYgKG1fb2JqZWN0LT5z
dXBwb3J0c1Bvc0luU2V0KCkpCisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zdXBwb3J0
c1Bvc0luU2V0KCkpCiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxp
dHlBUklBUG9zSW5TZXRBdHRyaWJ1dGVdOwogICAgIAotICAgIEFjY2Vzc2liaWxpdHlTb3J0RGly
ZWN0aW9uIHNvcnREaXJlY3Rpb24gPSBtX29iamVjdC0+c29ydERpcmVjdGlvbigpOworICAgIEFj
Y2Vzc2liaWxpdHlTb3J0RGlyZWN0aW9uIHNvcnREaXJlY3Rpb24gPSBzZWxmLmF4QmFja2luZ09i
amVjdC0+c29ydERpcmVjdGlvbigpOwogICAgIGlmIChzb3J0RGlyZWN0aW9uICE9IEFjY2Vzc2li
aWxpdHlTb3J0RGlyZWN0aW9uOjpOb25lICYmIHNvcnREaXJlY3Rpb24gIT0gQWNjZXNzaWJpbGl0
eVNvcnREaXJlY3Rpb246OkludmFsaWQpCiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpO
U0FjY2Vzc2liaWxpdHlTb3J0RGlyZWN0aW9uQXR0cmlidXRlXTsKICAgICAKICAgICAvLyBJZiBh
biBvYmplY3QgaXMgYSBjaGlsZCBvZiBhIGxpdmUgcmVnaW9uLCB0aGVuIGFkZCB0aGVzZQotICAg
IGlmIChtX29iamVjdC0+aXNJbnNpZGVMaXZlUmVnaW9uKCkpCisgICAgaWYgKHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5pc0luc2lkZUxpdmVSZWdpb24oKSkKICAgICAgICAgW2FkZGl0aW9uYWwgYWRk
T2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUFSSUFBdG9taWNBdHRyaWJ1dGVdOwogICAgIC8vIEFsbCBv
YmplY3RzIHNob3VsZCBleHBvc2UgdGhlIEFSSUEgYnVzeSBhdHRyaWJ1dGUgKEFSSUEgMS4xIHdp
dGggSVNTVUUtNTM4KS4KICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5
RWxlbWVudEJ1c3lBdHRyaWJ1dGVdOwogICAgIAogICAgIC8vIFBvcHVwIGJ1dHRvbnMgb24gdGhl
IE1hYyBleHBvc2UgdGhlIHZhbHVlIGF0dHJpYnV0ZS4KLSAgICBpZiAobV9vYmplY3QtPmlzUG9w
VXBCdXR0b24oKSkgeworICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNQb3BVcEJ1dHRv
bigpKSB7CiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlWYWx1
ZUF0dHJpYnV0ZV07CiAgICAgfQogCi0gICAgaWYgKG1fb2JqZWN0LT5zdXBwb3J0c0RhdGV0aW1l
QXR0cmlidXRlKCkpCisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zdXBwb3J0c0RhdGV0
aW1lQXR0cmlidXRlKCkpCiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2li
aWxpdHlEYXRldGltZVZhbHVlQXR0cmlidXRlXTsKICAgICAKLSAgICBpZiAobV9vYmplY3QtPnN1
cHBvcnRzUmVxdWlyZWRBdHRyaWJ1dGUoKSkgeworICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVj
dC0+c3VwcG9ydHNSZXF1aXJlZEF0dHJpYnV0ZSgpKSB7CiAgICAgICAgIFthZGRpdGlvbmFsIGFk
ZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlSZXF1aXJlZEF0dHJpYnV0ZV07CiAgICAgfQogICAgIAot
ICAgIGlmIChtX29iamVjdC0+aGFzUG9wdXAoKSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmhhc1BvcHVwKCkpCiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2li
aWxpdHlIYXNQb3B1cEF0dHJpYnV0ZV07CiAgICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc01hdGhS
b290KCkpIHsKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWF0aFJvb3QoKSkgewog
ICAgICAgICAvLyBUaGUgaW5kZXggb2YgYSBzcXVhcmUgcm9vdCBpcyBhbHdheXMga25vd24sIHNv
IHRoZXJlJ3Mgbm8gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCBpdC4KLSAgICAgICAgaWYgKCFtX29i
amVjdC0+aXNNYXRoU3F1YXJlUm9vdCgpKQorICAgICAgICBpZiAoIXNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5pc01hdGhTcXVhcmVSb290KCkpCiAgICAgICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmpl
Y3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aFJvb3RJbmRleEF0dHJpYnV0ZV07CiAgICAgICAgIFthZGRp
dGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoUm9vdFJhZGljYW5kQXR0cmlidXRl
XTsKLSAgICB9IGVsc2UgaWYgKG1fb2JqZWN0LT5pc01hdGhGcmFjdGlvbigpKSB7CisgICAgfSBl
bHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRoRnJhY3Rpb24oKSkgewogICAgICAg
ICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aEZyYWN0aW9uTnVtZXJh
dG9yQXR0cmlidXRlXTsKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJp
bGl0eU1hdGhGcmFjdGlvbkRlbm9taW5hdG9yQXR0cmlidXRlXTsKICAgICAgICAgW2FkZGl0aW9u
YWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhMaW5lVGhpY2tuZXNzQXR0cmlidXRlXTsK
LSAgICB9IGVsc2UgaWYgKG1fb2JqZWN0LT5pc01hdGhTdWJzY3JpcHRTdXBlcnNjcmlwdCgpKSB7
CisgICAgfSBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRoU3Vic2NyaXB0U3Vw
ZXJzY3JpcHQoKSkgewogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmls
aXR5TWF0aEJhc2VBdHRyaWJ1dGVdOwogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNB
Y2Nlc3NpYmlsaXR5TWF0aFN1YnNjcmlwdEF0dHJpYnV0ZV07CiAgICAgICAgIFthZGRpdGlvbmFs
IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoU3VwZXJzY3JpcHRBdHRyaWJ1dGVdOwotICAg
IH0gZWxzZSBpZiAobV9vYmplY3QtPmlzTWF0aFVuZGVyT3ZlcigpKSB7CisgICAgfSBlbHNlIGlm
IChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRoVW5kZXJPdmVyKCkpIHsKICAgICAgICAgW2Fk
ZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhCYXNlQXR0cmlidXRlXTsKICAg
ICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhVbmRlckF0dHJp
YnV0ZV07CiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRo
T3ZlckF0dHJpYnV0ZV07Ci0gICAgfSBlbHNlIGlmIChtX29iamVjdC0+aXNNYXRoRmVuY2VkKCkp
IHsKKyAgICB9IGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01hdGhGZW5jZWQoKSkg
ewogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aEZlbmNl
ZE9wZW5BdHRyaWJ1dGVdOwogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3Np
YmlsaXR5TWF0aEZlbmNlZENsb3NlQXR0cmlidXRlXTsKLSAgICB9IGVsc2UgaWYgKG1fb2JqZWN0
LT5pc01hdGhNdWx0aXNjcmlwdCgpKSB7CisgICAgfSBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09i
amVjdC0+aXNNYXRoTXVsdGlzY3JpcHQoKSkgewogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmpl
Y3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aEJhc2VBdHRyaWJ1dGVdOwogICAgICAgICBbYWRkaXRpb25h
bCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aFByZXNjcmlwdHNBdHRyaWJ1dGVdOwogICAg
ICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aFBvc3RzY3JpcHRz
QXR0cmlidXRlXTsKICAgICB9CiAgICAgCi0gICAgaWYgKG1fb2JqZWN0LT5zdXBwb3J0c1BhdGgo
KSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnN1cHBvcnRzUGF0aCgpKQogICAgICAg
ICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5UGF0aEF0dHJpYnV0ZV07CiAg
ICAgCi0gICAgaWYgKG1fb2JqZWN0LT5zdXBwb3J0c0V4cGFuZGVkVGV4dFZhbHVlKCkpCisgICAg
aWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zdXBwb3J0c0V4cGFuZGVkVGV4dFZhbHVlKCkpCiAg
ICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlFeHBhbmRlZFRleHRW
YWx1ZUF0dHJpYnV0ZV07CiAgICAgCiAgICAgcmV0dXJuIGFkZGl0aW9uYWw7CkBAIC0xNDc3LDcg
KzE0NzUsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICBpZiAo
IVtzZWxmIHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9yZV0pCiAgICAgICAgIHJldHVybiBuaWw7CiAg
ICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkKKyAgICBpZiAoc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmlzQXR0YWNobWVudCgpKQogICAgICAgICByZXR1cm4gW1tzZWxmIGF0dGFj
aG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXNdOwogICAgIAogICAgIHN0YXRp
YyBOU0FycmF5KiBhdHRyaWJ1dGVzID0gbmlsOwpAQCAtMTgwNiw3MiArMTgwNCw3MCBAQCBBTExP
V19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAKICAgICBOU0FycmF5ICpvYmpl
Y3RBdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKICAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzUGFz
c3dvcmRGaWVsZCgpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNQYXNzd29yZEZp
ZWxkKCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBwYXNzd29yZEZpZWxkQXR0cnM7CiAg
ICAgCi0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzV2ViQXJlYSgpKQorICAgIGVsc2UgaWYgKHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5pc1dlYkFyZWEoKSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRl
cyA9IHdlYkFyZWFBdHRyczsKICAgICAKLSAgICBlbHNlIGlmIChtX29iamVjdC0+aXNUZXh0Q29u
dHJvbCgpKQorICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1RleHRDb250cm9s
KCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSB0ZXh0QXR0cnM7CiAgICAgCi0gICAgZWxz
ZSBpZiAoX2F4QmFja2luZ09iamVjdC0+aXNMaW5rKCkgfHwgX2F4QmFja2luZ09iamVjdC0+aXNJ
bWFnZSgpKQorICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0xpbmsoKSB8fCBz
ZWxmLmF4QmFja2luZ09iamVjdC0+aXNJbWFnZSgpKQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVz
ID0gYW5jaG9yQXR0cnM7CiAgICAgCi0gICAgZWxzZSBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxl
PigqbV9vYmplY3QpICYmIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKm1fb2JqZWN0KS5p
c0V4cG9zYWJsZVRocm91Z2hBY2Nlc3NpYmlsaXR5KCkpCisgICAgZWxzZSBpZiAoaXM8QWNjZXNz
aWJpbGl0eVRhYmxlPigqc2VsZi5heEJhY2tpbmdPYmplY3QpICYmIGRvd25jYXN0PEFjY2Vzc2li
aWxpdHlUYWJsZT4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KS5pc0V4cG9zYWJsZVRocm91Z2hBY2Nl
c3NpYmlsaXR5KCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSB0YWJsZUF0dHJzOwotICAg
IGVsc2UgaWYgKG1fb2JqZWN0LT5pc1RhYmxlQ29sdW1uKCkpCisgICAgZWxzZSBpZiAoc2VsZi5h
eEJhY2tpbmdPYmplY3QtPmlzVGFibGVDb2x1bW4oKSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRl
cyA9IHRhYmxlQ29sQXR0cnM7Ci0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzVGFibGVDZWxsKCkp
CisgICAgZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVGFibGVDZWxsKCkpCiAgICAg
ICAgIG9iamVjdEF0dHJpYnV0ZXMgPSB0YWJsZUNlbGxBdHRyczsKLSAgICBlbHNlIGlmIChtX29i
amVjdC0+aXNUYWJsZVJvdygpKSB7CisgICAgZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3Qt
PmlzVGFibGVSb3coKSkgewogICAgICAgICAvLyBBbiBBUklBIHRhYmxlIHJvdyBjYW4gYmUgY29s
bGFwc2VkIGFuZCBleHBhbmRlZCwgc28gaXQgbmVlZHMgdGhlIGV4dHJhIGF0dHJpYnV0ZXMuCi0g
ICAgICAgIGlmIChtX29iamVjdC0+aXNBUklBVHJlZUdyaWRSb3coKSkKKyAgICAgICAgaWYgKHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5pc0FSSUFUcmVlR3JpZFJvdygpKQogICAgICAgICAgICAgb2Jq
ZWN0QXR0cmlidXRlcyA9IG91dGxpbmVSb3dBdHRyczsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgb2JqZWN0QXR0cmlidXRlcyA9IHRhYmxlUm93QXR0cnM7Ci0gICAgfQotICAgIAotICAgIGVs
c2UgaWYgKG1fb2JqZWN0LT5pc1RyZWUoKSkKKyAgICB9IGVsc2UgaWYgKHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5pc1RyZWUoKSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IG91dGxpbmVBdHRy
czsKLSAgICBlbHNlIGlmIChtX29iamVjdC0+aXNUcmVlSXRlbSgpKQorICAgIGVsc2UgaWYgKHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5pc1RyZWVJdGVtKCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0
ZXMgPSBvdXRsaW5lUm93QXR0cnM7CiAgICAgCi0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzTGlz
dEJveCgpKQorICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0xpc3RCb3goKSkK
ICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IGxpc3RCb3hBdHRyczsKLSAgICBlbHNlIGlmICht
X29iamVjdC0+aXNMaXN0KCkpCisgICAgZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlz
TGlzdCgpKQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gbGlzdEF0dHJzOwogICAgIAotICAg
IGVsc2UgaWYgKG1fb2JqZWN0LT5pc0NvbWJvQm94KCkpCisgICAgZWxzZSBpZiAoc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmlzQ29tYm9Cb3goKSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IGNv
bWJvQm94QXR0cnM7CiAgICAgCi0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzUHJvZ3Jlc3NJbmRp
Y2F0b3IoKSB8fCBtX29iamVjdC0+aXNTbGlkZXIoKSkKKyAgICBlbHNlIGlmIChzZWxmLmF4QmFj
a2luZ09iamVjdC0+aXNQcm9ncmVzc0luZGljYXRvcigpIHx8IHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5pc1NsaWRlcigpKQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gcmFuZ2VBdHRyczsKICAg
ICAKICAgICAvLyBUaGVzZSBhcmUgcHJvY2Vzc2VkIGluIG9yZGVyIGJlY2F1c2UgYW4gaW5wdXQg
aW1hZ2UgaXMgYSBidXR0b24sIGFuZCBhIGJ1dHRvbiBpcyBhIGNvbnRyb2wuCi0gICAgZWxzZSBp
ZiAobV9vYmplY3QtPmlzSW5wdXRJbWFnZSgpKQorICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5pc0lucHV0SW1hZ2UoKSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IGlucHV0
SW1hZ2VBdHRyczsKLSAgICBlbHNlIGlmIChtX29iamVjdC0+aXNCdXR0b24oKSkKKyAgICBlbHNl
IGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNCdXR0b24oKSkKICAgICAgICAgb2JqZWN0QXR0
cmlidXRlcyA9IGJ1dHRvbkF0dHJzOwotICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc0NvbnRyb2wo
KSkKKyAgICBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNDb250cm9sKCkpCiAgICAg
ICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBjb250cm9sQXR0cnM7CiAgICAgCi0gICAgZWxzZSBpZiAo
bV9vYmplY3QtPmlzR3JvdXAoKSB8fCBtX29iamVjdC0+aXNMaXN0SXRlbSgpKQorICAgIGVsc2Ug
aWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0dyb3VwKCkgfHwgc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmlzTGlzdEl0ZW0oKSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IGdyb3VwQXR0cnM7
Ci0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzVGFiTGlzdCgpKQorICAgIGVsc2UgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc1RhYkxpc3QoKSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9
IHRhYkxpc3RBdHRyczsKLSAgICBlbHNlIGlmIChtX29iamVjdC0+aXNTY3JvbGxWaWV3KCkpCisg
ICAgZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzU2Nyb2xsVmlldygpKQogICAgICAg
ICBvYmplY3RBdHRyaWJ1dGVzID0gc2Nyb2xsVmlld0F0dHJzOwotICAgIGVsc2UgaWYgKG1fb2Jq
ZWN0LT5pc1NwaW5CdXR0b24oKSkKKyAgICBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+
aXNTcGluQnV0dG9uKCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBpbmNyZW1lbnRvckF0
dHJzOwogICAgIAotICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc01lbnUoKSkKKyAgICBlbHNlIGlm
IChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNZW51KCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0
ZXMgPSBtZW51QXR0cnM7Ci0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzTWVudUJhcigpKQorICAg
IGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01lbnVCYXIoKSkKICAgICAgICAgb2Jq
ZWN0QXR0cmlidXRlcyA9IG1lbnVCYXJBdHRyczsKLSAgICBlbHNlIGlmIChtX29iamVjdC0+aXNN
ZW51QnV0dG9uKCkpCisgICAgZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWVudUJ1
dHRvbigpKQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gbWVudUJ1dHRvbkF0dHJzOwotICAg
IGVsc2UgaWYgKG1fb2JqZWN0LT5pc01lbnVJdGVtKCkpCisgICAgZWxzZSBpZiAoc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmlzTWVudUl0ZW0oKSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IG1l
bnVJdGVtQXR0cnM7CiAgICAgCiAgICAgTlNBcnJheSAqYWRkaXRpb25hbEF0dHJpYnV0ZXMgPSBb
c2VsZiBhZGRpdGlvbmFsQWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzXTsKQEAgLTE4NzksNyAr
MTg3NSw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICBv
YmplY3RBdHRyaWJ1dGVzID0gW29iamVjdEF0dHJpYnV0ZXMgYXJyYXlCeUFkZGluZ09iamVjdHNG
cm9tQXJyYXk6YWRkaXRpb25hbEF0dHJpYnV0ZXNdOwogICAgIAogICAgIC8vIE9ubHkgZXhwb3Nl
IEFYQVJJQUN1cnJlbnQgYXR0cmlidXRlIHdoZW4gdGhlIGVsZW1lbnQgaXMgc2V0IHRvIGJlIGN1
cnJlbnQgaXRlbS4KLSAgICBpZiAobV9vYmplY3QtPmN1cnJlbnRTdGF0ZSgpICE9IEFjY2Vzc2li
aWxpdHlDdXJyZW50U3RhdGU6OkZhbHNlKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+
Y3VycmVudFN0YXRlKCkgIT0gQWNjZXNzaWJpbGl0eUN1cnJlbnRTdGF0ZTo6RmFsc2UpCiAgICAg
ICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBbb2JqZWN0QXR0cmlidXRlcyBhcnJheUJ5QWRkaW5nT2Jq
ZWN0c0Zyb21BcnJheTpAWyBOU0FjY2Vzc2liaWxpdHlBUklBQ3VycmVudEF0dHJpYnV0ZSBdXTsK
ICAgICAKICAgICAvLyBBcHBLaXQgbmVlZHMgdG8ga25vdyB0aGUgc2NyZWVuIGhlaWdodCBpbiBv
cmRlciB0byBkbyB0aGUgY29vcmRpbmF0ZSBjb252ZXJzaW9uLgpAQCAtMTg5MiwxNCArMTg4OCwx
NCBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIHsKICAgICBpZiAoIXRl
eHRNYXJrZXJSYW5nZSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7Ci0g
ICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpOworICAg
IEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2Fj
aGUoKTsKICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UodmlzaWJsZVBvc2l0aW9uRm9y
U3RhcnRPZlRleHRNYXJrZXJSYW5nZShjYWNoZSwgdGV4dE1hcmtlclJhbmdlKSwgdmlzaWJsZVBv
c2l0aW9uRm9yRW5kT2ZUZXh0TWFya2VyUmFuZ2UoY2FjaGUsIHRleHRNYXJrZXJSYW5nZSkpOwog
fQogCiAtIChOU0FycmF5KilyZW5kZXJXaWRnZXRDaGlsZHJlbgogewogICAgIHJldHVybiBBY2Nl
c3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8TlNBcnJheSAqPihbcHJvdGVj
dGVkU2VsZiA9IFJldGFpblB0cjxXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4oc2VsZild
ICgpIC0+IE5TQXJyYXkgKiB7Ci0gICAgICAgIFdpZGdldCogd2lkZ2V0ID0gcHJvdGVjdGVkU2Vs
Zi0+bV9vYmplY3QtPndpZGdldCgpOworICAgICAgICBXaWRnZXQqIHdpZGdldCA9IHByb3RlY3Rl
ZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0LT53aWRnZXQoKTsKICAgICAgICAgaWYgKCF3aWRn
ZXQpCiAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RF
Q0xBUkFUSU9OU19CRUdJTgpAQCAtMTkxMSwxMCArMTkwNywxMCBAQCBBTExPV19ERVBSRUNBVEVE
X0lNUExFTUVOVEFUSU9OU19FTkQKIC0gKGlkKXJlbW90ZUFjY2Vzc2liaWxpdHlQYXJlbnRPYmpl
Y3QKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmICghbV9vYmplY3QpCisg
ICAgaWYgKCFzZWxmLmF4QmFja2luZ09iamVjdCkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAg
IGlmIChhdXRvKiBkb2N1bWVudCA9IF9heEJhY2tpbmdPYmplY3QtPmRvY3VtZW50KCkpIHsKKyAg
ICBpZiAoYXV0byogZG9jdW1lbnQgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKSkg
ewogICAgICAgICBpZiAoYXV0byogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKSkKICAgICAgICAg
ICAgIHJldHVybiBmcmFtZS0+bG9hZGVyKCkuY2xpZW50KCkuYWNjZXNzaWJpbGl0eVJlbW90ZU9i
amVjdCgpOwogICAgIH0KQEAgLTE5MjcsNyArMTkyMyw3IEBAIHN0YXRpYyB2b2lkIGNvbnZlcnRU
b1ZlY3RvcihOU0FycmF5KiBhcnJheSwgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0
eUNoCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gW2FycmF5IGNvdW50XTsKICAgICB2ZWN0b3IucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewotICAgICAgICBBWENvcmVPYmplY3QqIG9iaiA9IFtbYXJyYXkgb2Jq
ZWN0QXRJbmRleDppXSBhY2Nlc3NpYmlsaXR5T2JqZWN0XTsKKyAgICAgICAgQVhDb3JlT2JqZWN0
KiBvYmogPSBbW2FycmF5IG9iamVjdEF0SW5kZXg6aV0gYXhCYWNraW5nT2JqZWN0XTsKICAgICAg
ICAgaWYgKG9iaikKICAgICAgICAgICAgIHZlY3Rvci5hcHBlbmQob2JqKTsKICAgICB9CkBAIC0x
OTQzLDcgKzE5MzksNyBAQCBzdGF0aWMgTlNNdXRhYmxlQXJyYXkgKmNvbnZlcnRTdHJpbmdzVG9O
U0FycmF5KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2ZWN0b3IpCiAKIC0gKGlkKXRleHRNYXJrZXJS
YW5nZUZvclNlbGVjdGlvbgogewotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9v
YmplY3QtPnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNOb25l
KCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5n
ZUZyb21WaXNpYmxlUG9zaXRpb25zOnNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSBlbmRQb3NpdGlv
bjpzZWxlY3Rpb24udmlzaWJsZUVuZCgpXTsKQEAgLTE5NTIsMTcgKzE5NDgsMTcgQEAgc3RhdGlj
IE5TTXV0YWJsZUFycmF5ICpjb252ZXJ0U3RyaW5nc1RvTlNBcnJheShjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgdmVjdG9yKQogLSAoaWQpYXNzb2NpYXRlZFBsdWdpblBhcmVudAogewogICAgIHJldHVy
biBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFtwcm90ZWN0
ZWRTZWxmID0gUmV0YWluUHRyPFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPihzZWxmKV0g
KCkgLT4gaWQgewotICAgICAgICBpZiAoIXByb3RlY3RlZFNlbGYtPm1fb2JqZWN0IHx8ICFwcm90
ZWN0ZWRTZWxmLT5tX29iamVjdC0+aGFzQXBwbGVQREZBbm5vdGF0aW9uQXR0cmlidXRlKCkpCisg
ICAgICAgIGlmICghcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3QgfHwgIXByb3Rl
Y3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0LT5oYXNBcHBsZVBERkFubm90YXRpb25BdHRy
aWJ1dGUoKSkKICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0gICAgICAgIGlmICghcHJv
dGVjdGVkU2VsZi0+bV9vYmplY3QtPmRvY3VtZW50KCktPmlzUGx1Z2luRG9jdW1lbnQoKSkKKyAg
ICAgICAgaWYgKCFwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnQo
KS0+aXNQbHVnaW5Eb2N1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAg
Ci0gICAgICAgIFdpZGdldCogcGx1Z2luV2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UGx1Z2luRG9jdW1l
bnQqPihwcm90ZWN0ZWRTZWxmLT5tX29iamVjdC0+ZG9jdW1lbnQoKSktPnBsdWdpbldpZGdldCgp
OworICAgICAgICBXaWRnZXQqIHBsdWdpbldpZGdldCA9IHN0YXRpY19jYXN0PFBsdWdpbkRvY3Vt
ZW50Kj4ocHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3QtPmRvY3VtZW50KCkpLT5w
bHVnaW5XaWRnZXQoKTsKICAgICAgICAgaWYgKCFwbHVnaW5XaWRnZXQgfHwgIXBsdWdpbldpZGdl
dC0+aXNQbHVnaW5WaWV3QmFzZSgpKQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAg
Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3QmFzZSo+KHBsdWdpbldpZGdl
dCktPmFjY2Vzc2liaWxpdHlBc3NvY2lhdGVkUGx1Z2luUGFyZW50Rm9yRWxlbWVudChwcm90ZWN0
ZWRTZWxmLT5tX29iamVjdC0+ZWxlbWVudCgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFBsdWdpblZpZXdCYXNlKj4ocGx1Z2luV2lkZ2V0KS0+YWNjZXNzaWJpbGl0eUFzc29jaWF0ZWRQ
bHVnaW5QYXJlbnRGb3JFbGVtZW50KHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0
LT5lbGVtZW50KCkpOwogICAgIH0pOwogfQogCkBAIC0xOTk2LDcgKzE5OTIsNyBAQCBzdGF0aWMg
dm9pZCBXZWJUcmFuc2Zvcm1DR1BhdGhUb05TQmV6aWVyUGF0aCh2b2lkKiBpbmZvLCBjb25zdCBD
R1BhdGhFbGVtZW50ICplbAogCiAtIChOU0JlemllclBhdGggKilwYXRoCiB7Ci0gICAgUGF0aCBw
YXRoID0gbV9vYmplY3QtPmVsZW1lbnRQYXRoKCk7CisgICAgUGF0aCBwYXRoID0gc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmVsZW1lbnRQYXRoKCk7CiAgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gTlVMTDsKICAgICAKQEAgLTIwMTIsMjIgKzIwMDgsMjIgQEAgc3RhdGljIHZv
aWQgV2ViVHJhbnNmb3JtQ0dQYXRoVG9OU0JlemllclBhdGgodm9pZCogaW5mbywgY29uc3QgQ0dQ
YXRoRWxlbWVudCAqZWwKIAogLSAoc2l6ZV90KWNoaWxkcmVuVmVjdG9yU2l6ZQogewotICAgIHJl
dHVybiBtX29iamVjdC0+Y2hpbGRyZW4oKS5zaXplKCk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5jaGlsZHJlbigpLnNpemUoKTsKIH0KIAogLSAoTlNBcnJheTxXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlciAqPiAqKWNoaWxkcmVuVmVjdG9yQXJyYXkKIHsKLSAgICByZXR1
cm4gY29udmVydFRvTlNBcnJheShtX29iamVjdC0+Y2hpbGRyZW4oKSk7CisgICAgcmV0dXJuIGNv
bnZlcnRUb05TQXJyYXkoc2VsZi5heEJhY2tpbmdPYmplY3QtPmNoaWxkcmVuKCkpOwogfQogCiAt
IChOU1ZhbHVlICopcG9zaXRpb24KIHsKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09MQVRF
RF9UUkVFKQogICAgIGlmIChfQVhVSUVsZW1lbnRSZXF1ZXN0U2VydmljZWRCeVNlY29uZGFyeUFY
VGhyZWFkKCkpCi0gICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhQb2ludDooTlNQb2lu
dClfYXhCYWNraW5nT2JqZWN0LT5yZWxhdGl2ZUZyYW1lKCkubG9jYXRpb24oKV07CisgICAgICAg
IHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhQb2ludDooTlNQb2ludClzZWxmLmF4QmFja2luZ09i
amVjdC0+cmVsYXRpdmVGcmFtZSgpLmxvY2F0aW9uKCldOwogI2VuZGlmCiAgICAgICAgIAotICAg
IGF1dG8gcmVjdCA9IHNuYXBwZWRJbnRSZWN0KG1fb2JqZWN0LT5lbGVtZW50UmVjdCgpKTsKKyAg
ICBhdXRvIHJlY3QgPSBzbmFwcGVkSW50UmVjdChzZWxmLmF4QmFja2luZ09iamVjdC0+ZWxlbWVu
dFJlY3QoKSk7CiAgICAgCiAgICAgLy8gVGhlIENvY29hIGFjY2Vzc2liaWxpdHkgQVBJIHdhbnRz
IHRoZSBsb3dlci1sZWZ0IGNvcm5lci4KICAgICBhdXRvIGZsb2F0UG9pbnQgPSBGbG9hdFBvaW50
KHJlY3QueCgpLCByZWN0Lm1heFkoKSk7CkBAIC0yMDQwLDExICsyMDM2LDExIEBAIHN0YXRpYyB2
b2lkIFdlYlRyYW5zZm9ybUNHUGF0aFRvTlNCZXppZXJQYXRoKHZvaWQqIGluZm8sIGNvbnN0IENH
UGF0aEVsZW1lbnQgKmVsCiAtIChOU1N0cmluZyopcm9sZQogewogICAgIEFMTE9XX0RFUFJFQ0FU
RURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgaWYgKF9heEJhY2tpbmdPYmplY3QtPmlzQXR0YWNo
bWVudCgpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNBdHRhY2htZW50KCkpCiAg
ICAgICAgIHJldHVybiBbW3NlbGYgYXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlSb2xlQXR0cmlidXRlXTsKICAgICBBTExPV19ERVBSRUNB
VEVEX0RFQ0xBUkFUSU9OU19FTkQKIAotICAgIE5TU3RyaW5nICpzdHJpbmcgPSBtX29iamVjdC0+
cm9sZVBsYXRmb3JtU3RyaW5nKCk7CisgICAgTlNTdHJpbmcgKnN0cmluZyA9IHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5yb2xlUGxhdGZvcm1TdHJpbmcoKTsKICAgICBpZiAoc3RyaW5nLmxlbmd0aCkK
ICAgICAgICAgcmV0dXJuIHN0cmluZzsKICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5VW5rbm93
blJvbGU7CkBAIC0yMDUzLDIxICsyMDQ5LDIxIEBAIHN0YXRpYyB2b2lkIFdlYlRyYW5zZm9ybUNH
UGF0aFRvTlNCZXppZXJQYXRoKHZvaWQqIGluZm8sIGNvbnN0IENHUGF0aEVsZW1lbnQgKmVsCiBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgogLSAoTlNTdHJpbmcqKXN1YnJvbGUK
IHsKLSAgICBpZiAobV9vYmplY3QtPmlzUGFzc3dvcmRGaWVsZCgpKQorICAgIGlmIChzZWxmLmF4
QmFja2luZ09iamVjdC0+aXNQYXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHJldHVybiBOU0FjY2Vz
c2liaWxpdHlTZWN1cmVUZXh0RmllbGRTdWJyb2xlOwotICAgIGlmIChtX29iamVjdC0+aXNTZWFy
Y2hGaWVsZCgpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNTZWFyY2hGaWVsZCgp
KQogICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5U2VhcmNoRmllbGRTdWJyb2xlOwogICAg
IAotICAgIGlmIChfYXhCYWNraW5nT2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkgeworICAgIGlmIChz
ZWxmLmF4QmFja2luZ09iamVjdC0+aXNBdHRhY2htZW50KCkpIHsKICAgICAgICAgTlNWaWV3KiBh
dHRhY2hWaWV3ID0gW3NlbGYgYXR0YWNobWVudFZpZXddOwogICAgICAgICBpZiAoW1thdHRhY2hW
aWV3IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lc10gY29udGFpbnNPYmplY3Q6TlNBY2Nlc3Np
YmlsaXR5U3Vicm9sZUF0dHJpYnV0ZV0pCiAgICAgICAgICAgICByZXR1cm4gW2F0dGFjaFZpZXcg
YWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eVN1YnJvbGVBdHRyaWJ1
dGVdOwogICAgIH0KICAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzTWV0ZXIoKSkKKyAgICBpZiAo
c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWV0ZXIoKSkKICAgICAgICAgcmV0dXJuIEAiQVhNZXRl
ciI7CiAgICAgCi0gICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSA9IG1fb2JqZWN0LT5yb2xlVmFs
dWUoKTsKKyAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gc2VsZi5heEJhY2tpbmdPYmplY3Qt
PnJvbGVWYWx1ZSgpOwogICAgIGlmIChyb2xlID09IEFjY2Vzc2liaWxpdHlSb2xlOjpIb3Jpem9u
dGFsUnVsZSkKICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eUNvbnRlbnRTZXBhcmF0b3JT
dWJyb2xlOwogICAgIGlmIChyb2xlID09IEFjY2Vzc2liaWxpdHlSb2xlOjpUb2dnbGVCdXR0b24p
CkBAIC0yMDc1LDI1ICsyMDcxLDI1IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JF
R0lOCiAgICAgaWYgKHJvbGUgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OkZvb3RlcikKICAgICAgICAg
cmV0dXJuIEAiQVhGb290ZXIiOwogCi0gICAgaWYgKG1fb2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBB
Y2Nlc3NpYmlsaXR5Um9sZTo6U3BpbkJ1dHRvblBhcnQpIHsKLSAgICAgICAgaWYgKG1fb2JqZWN0
LT5pc0luY3JlbWVudG9yKCkpCisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5yb2xlVmFs
dWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6U3BpbkJ1dHRvblBhcnQpIHsKKyAgICAgICAgaWYg
KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0luY3JlbWVudG9yKCkpCiAgICAgICAgICAgICByZXR1
cm4gTlNBY2Nlc3NpYmlsaXR5SW5jcmVtZW50QXJyb3dTdWJyb2xlOwogICAgICAgICByZXR1cm4g
TlNBY2Nlc3NpYmlsaXR5RGVjcmVtZW50QXJyb3dTdWJyb2xlOwogICAgIH0KICAgICAKLSAgICBp
ZiAoX2F4QmFja2luZ09iamVjdC0+aXNGaWxlVXBsb2FkQnV0dG9uKCkpCisgICAgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc0ZpbGVVcGxvYWRCdXR0b24oKSkKICAgICAgICAgcmV0dXJuIEAi
QVhGaWxlVXBsb2FkQnV0dG9uIjsKICAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzVHJlZUl0ZW0o
KSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVHJlZUl0ZW0oKSkKICAgICAgICAg
cmV0dXJuIE5TQWNjZXNzaWJpbGl0eU91dGxpbmVSb3dTdWJyb2xlOwogICAgIAotICAgIGlmICht
X29iamVjdC0+aXNGaWVsZHNldCgpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNG
aWVsZHNldCgpKQogICAgICAgICByZXR1cm4gQCJBWEZpZWxkc2V0IjsKIAotICAgIGlmIChtX29i
amVjdC0+aXNMaXN0KCkpIHsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1Vub3JkZXJlZExpc3Qo
KSB8fCBtX29iamVjdC0+aXNPcmRlcmVkTGlzdCgpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09i
amVjdC0+aXNMaXN0KCkpIHsKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1Vu
b3JkZXJlZExpc3QoKSB8fCBzZWxmLmF4QmFja2luZ09iamVjdC0+aXNPcmRlcmVkTGlzdCgpKQog
ICAgICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eUNvbnRlbnRMaXN0U3Vicm9sZTsKLSAg
ICAgICAgaWYgKG1fb2JqZWN0LT5pc0Rlc2NyaXB0aW9uTGlzdCgpKSB7CisgICAgICAgIGlmIChz
ZWxmLmF4QmFja2luZ09iamVjdC0+aXNEZXNjcmlwdGlvbkxpc3QoKSkgewogICAgICAgICAgICAg
cmV0dXJuIE5TQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uTGlzdFN1YnJvbGU7CiAgICAgICAgIH0K
ICAgICB9CkBAIC0yMTYyLDM5ICsyMTU4LDM5IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJ
T05TX0JFR0lOCiAgICAgfQogICAgIAogICAgIGlmIChyb2xlID09IEFjY2Vzc2liaWxpdHlSb2xl
OjpNYXRoRWxlbWVudCkgewotICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aEZyYWN0aW9uKCkp
CisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRoRnJhY3Rpb24oKSkKICAg
ICAgICAgICAgIHJldHVybiBAIkFYTWF0aEZyYWN0aW9uIjsKLSAgICAgICAgaWYgKG1fb2JqZWN0
LT5pc01hdGhGZW5jZWQoKSkKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01h
dGhGZW5jZWQoKSkKICAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aEZlbmNlZCI7Ci0gICAgICAg
IGlmIChtX29iamVjdC0+aXNNYXRoU3Vic2NyaXB0U3VwZXJzY3JpcHQoKSkKKyAgICAgICAgaWYg
KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01hdGhTdWJzY3JpcHRTdXBlcnNjcmlwdCgpKQogICAg
ICAgICAgICAgcmV0dXJuIEAiQVhNYXRoU3Vic2NyaXB0U3VwZXJzY3JpcHQiOwotICAgICAgICBp
ZiAobV9vYmplY3QtPmlzTWF0aFJvdygpKQorICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmlzTWF0aFJvdygpKQogICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoUm93IjsKLSAgICAg
ICAgaWYgKG1fb2JqZWN0LT5pc01hdGhVbmRlck92ZXIoKSkKKyAgICAgICAgaWYgKHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5pc01hdGhVbmRlck92ZXIoKSkKICAgICAgICAgICAgIHJldHVybiBAIkFY
TWF0aFVuZGVyT3ZlciI7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoU3F1YXJlUm9vdCgp
KQorICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWF0aFNxdWFyZVJvb3QoKSkK
ICAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aFNxdWFyZVJvb3QiOwotICAgICAgICBpZiAobV9v
YmplY3QtPmlzTWF0aFJvb3QoKSkKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5p
c01hdGhSb290KCkpCiAgICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhSb290IjsKLSAgICAgICAg
aWYgKG1fb2JqZWN0LT5pc01hdGhUZXh0KCkpCisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09i
amVjdC0+aXNNYXRoVGV4dCgpKQogICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoVGV4dCI7Ci0g
ICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoTnVtYmVyKCkpCisgICAgICAgIGlmIChzZWxmLmF4
QmFja2luZ09iamVjdC0+aXNNYXRoTnVtYmVyKCkpCiAgICAgICAgICAgICByZXR1cm4gQCJBWE1h
dGhOdW1iZXIiOwotICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aElkZW50aWZpZXIoKSkKKyAg
ICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01hdGhJZGVudGlmaWVyKCkpCiAgICAg
ICAgICAgICByZXR1cm4gQCJBWE1hdGhJZGVudGlmaWVyIjsKLSAgICAgICAgaWYgKG1fb2JqZWN0
LT5pc01hdGhUYWJsZSgpKQorICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWF0
aFRhYmxlKCkpCiAgICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhUYWJsZSI7Ci0gICAgICAgIGlm
IChtX29iamVjdC0+aXNNYXRoVGFibGVSb3coKSkKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5pc01hdGhUYWJsZVJvdygpKQogICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoVGFi
bGVSb3ciOwotICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFRhYmxlQ2VsbCgpKQorICAgICAg
ICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWF0aFRhYmxlQ2VsbCgpKQogICAgICAgICAg
ICAgcmV0dXJuIEAiQVhNYXRoVGFibGVDZWxsIjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01h
dGhGZW5jZU9wZXJhdG9yKCkpCisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNN
YXRoRmVuY2VPcGVyYXRvcigpKQogICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoRmVuY2VPcGVy
YXRvciI7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoU2VwYXJhdG9yT3BlcmF0b3IoKSkK
KyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01hdGhTZXBhcmF0b3JPcGVyYXRv
cigpKQogICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoU2VwYXJhdG9yT3BlcmF0b3IiOwotICAg
ICAgICBpZiAobV9vYmplY3QtPmlzTWF0aE9wZXJhdG9yKCkpCisgICAgICAgIGlmIChzZWxmLmF4
QmFja2luZ09iamVjdC0+aXNNYXRoT3BlcmF0b3IoKSkKICAgICAgICAgICAgIHJldHVybiBAIkFY
TWF0aE9wZXJhdG9yIjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhNdWx0aXNjcmlwdCgp
KQorICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWF0aE11bHRpc2NyaXB0KCkp
CiAgICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhNdWx0aXNjcmlwdCI7CiAgICAgfQogICAgIApA
QCAtMjIwOSwxMCArMjIwNSwxMCBAQCBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJ
TgogICAgIGlmIChyb2xlID09IEFjY2Vzc2liaWxpdHlSb2xlOjpUaW1lKQogICAgICAgICByZXR1
cm4gQCJBWFRpbWVHcm91cCI7CiAKLSAgICBpZiAobV9vYmplY3QtPmlzTWVkaWFUaW1lbGluZSgp
KQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNZWRpYVRpbWVsaW5lKCkpCiAgICAg
ICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlUaW1lbGluZVN1YnJvbGU7CiAKLSAgICBpZiAobV9v
YmplY3QtPmlzU3dpdGNoKCkpCisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1N3aXRj
aCgpKQogICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5U3dpdGNoU3Vicm9sZTsKIAogICAg
IGlmIChyb2xlID09IEFjY2Vzc2liaWxpdHlSb2xlOjpJbnNlcnRpb24pCkBAIC0yMjI0LDggKzIy
MjAsOCBAQCBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgogICAgIGlmIChyb2xl
ID09IEFjY2Vzc2liaWxpdHlSb2xlOjpTdWJzY3JpcHQpCiAgICAgICAgIHJldHVybiBAIkFYU3Vi
c2NyaXB0U3R5bGVHcm91cCI7CiAKLSAgICBpZiAobV9vYmplY3QtPmlzU3R5bGVGb3JtYXRHcm91
cCgpKSB7Ci0gICAgICAgIGF1dG8gdGFnTmFtZSA9IG1fb2JqZWN0LT50YWdOYW1lKCk7CisgICAg
aWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1N0eWxlRm9ybWF0R3JvdXAoKSkgeworICAgICAg
ICBhdXRvIHRhZ05hbWUgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+dGFnTmFtZSgpOwogICAgICAg
ICBpZiAodGFnTmFtZSA9PSBrYmRUYWcpCiAgICAgICAgICAgICByZXR1cm4gQCJBWEtleWJvYXJk
SW5wdXRTdHlsZUdyb3VwIjsKICAgICAgICAgaWYgKHRhZ05hbWUgPT0gY29kZVRhZykKQEAgLTIy
NjMsMjAgKzIyNTksMjAgQEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAKIC0g
KE5TU3RyaW5nKilyb2xlRGVzY3JpcHRpb24KIHsKLSAgICBpZiAoIW1fb2JqZWN0KQorICAgIGlm
ICghc2VsZi5heEJhY2tpbmdPYmplY3QpCiAgICAgICAgIHJldHVybiBuaWw7CiAKICAgICBBTExP
V19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgogICAgIC8vIGF0dGFjaG1lbnRzIGhhdmUg
dGhlIEFYSW1hZ2Ugcm9sZSwgYnV0IGEgZGlmZmVyZW50IHN1YnJvbGUKLSAgICBpZiAoX2F4QmFj
a2luZ09iamVjdC0+aXNBdHRhY2htZW50KCkpCisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5pc0F0dGFjaG1lbnQoKSkKICAgICAgICAgcmV0dXJuIFtbc2VsZiBhdHRhY2htZW50Vmlld10g
YWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlv
bkF0dHJpYnV0ZV07CiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAKLSAg
ICBTdHJpbmcgcm9sZURlc2NyaXB0aW9uID0gbV9vYmplY3QtPnJvbGVEZXNjcmlwdGlvbigpOwor
ICAgIFN0cmluZyByb2xlRGVzY3JpcHRpb24gPSBzZWxmLmF4QmFja2luZ09iamVjdC0+cm9sZURl
c2NyaXB0aW9uKCk7CiAgICAgaWYgKCFyb2xlRGVzY3JpcHRpb24uaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gcm9sZURlc2NyaXB0aW9uOwogCi0gICAgTlNTdHJpbmcgKmF4Um9sZSA9IG1fb2Jq
ZWN0LT5yb2xlUGxhdGZvcm1TdHJpbmcoKTsKKyAgICBOU1N0cmluZyAqYXhSb2xlID0gc2VsZi5h
eEJhY2tpbmdPYmplY3QtPnJvbGVQbGF0Zm9ybVN0cmluZygpOwogICAgIC8vIEZhbGxiYWNrIHRv
IHRoZSBzeXN0ZW0gZGVmYXVsdCByb2xlIGRlc2NyaXB0aW9uLgogICAgIC8vIElmIHdlIGdldCB0
aGUgc2FtZSBzdHJpbmcgYmFjaywgdGhlbiBhcyBhIGxhc3QgcmVzb3J0LCByZXR1cm4gdW5rbm93
bi4KICAgICBOU1N0cmluZyAqZGVmYXVsdFJvbGVEZXNjcmlwdGlvbiA9IE5TQWNjZXNzaWJpbGl0
eVJvbGVEZXNjcmlwdGlvbihheFJvbGUsIFtzZWxmIHN1YnJvbGVdKTsKQEAgLTIyOTUsMjMgKzIy
OTEsMjMgQEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAKIC0gKE5TU3RyaW5n
ICopY29tcHV0ZWRSb2xlU3RyaW5nCiB7Ci0gICAgaWYgKCFtX29iamVjdCkKKyAgICBpZiAoIXNl
bGYuYXhCYWNraW5nT2JqZWN0KQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBtX29i
amVjdC0+Y29tcHV0ZWRSb2xlU3RyaW5nKCk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5jb21wdXRlZFJvbGVTdHJpbmcoKTsKIH0KIAogLSAoaWQpc2Nyb2xsVmlld1BhcmVudAog
ewogICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8
aWQ+KFtwcm90ZWN0ZWRTZWxmID0gUmV0YWluUHRyPFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyPihzZWxmKV0gKCkgLT4gaWQgewotICAgICAgICBpZiAoIWlzPEFjY2Vzc2liaWxpdHlTY3Jv
bGxWaWV3Pihwcm90ZWN0ZWRTZWxmLT5tX29iamVjdCkpCisgICAgICAgIGlmICghaXM8QWNjZXNz
aWJpbGl0eVNjcm9sbFZpZXc+KHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0KSkK
ICAgICAgICAgICAgIHJldHVybiBuaWw7CiAKICAgICAgICAgLy8gSWYgdGhpcyBzY3JvbGwgdmll
dyBwcm92aWRlcyBpdCdzIHBhcmVudCBvYmplY3QgKGJlY2F1c2UgaXQncyBhIHN1Yi1mcmFtZSks
IHRoZW4KICAgICAgICAgLy8gd2Ugc2hvdWxkIG5vdCBmaW5kIHRoZSByZW1vdGVBY2Nlc3NpYmls
aXR5UGFyZW50LgotICAgICAgICBpZiAocHJvdGVjdGVkU2VsZi0+bV9vYmplY3QtPnBhcmVudE9i
amVjdCgpKQorICAgICAgICBpZiAocHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3Qt
PnBhcmVudE9iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgICAgICBTY3Jv
bGxWaWV3KiBzY3JvbGwgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldz4oKnByb3Rl
Y3RlZFNlbGYtPm1fb2JqZWN0KS5zY3JvbGxWaWV3KCk7CisgICAgICAgIFNjcm9sbFZpZXcqIHNj
cm9sbCA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3PigqcHJvdGVjdGVkU2VsZi5n
ZXQoKS5heEJhY2tpbmdPYmplY3QpLnNjcm9sbFZpZXcoKTsKICAgICAgICAgaWYgKCFzY3JvbGwp
CiAgICAgICAgICAgICByZXR1cm4gbmlsOwogCkBAIC0yMzI0LDE0ICsyMzIwLDE0IEBAIEFMTE9X
X0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogCiAtIChOU1N0cmluZyAqKXZhbHVlRGVzY3Jp
cHRpb25Gb3JNZXRlcgogewotICAgIGlmICghbV9vYmplY3QpCisgICAgaWYgKCFzZWxmLmF4QmFj
a2luZ09iamVjdCkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBTdHJpbmcgdmFsdWVE
ZXNjcmlwdGlvbiA9IG1fb2JqZWN0LT52YWx1ZURlc2NyaXB0aW9uKCk7CisgICAgU3RyaW5nIHZh
bHVlRGVzY3JpcHRpb24gPSBzZWxmLmF4QmFja2luZ09iamVjdC0+dmFsdWVEZXNjcmlwdGlvbigp
OwogI2lmIEVOQUJMRShNRVRFUl9FTEVNRU5UKQotICAgIGlmICghaXM8QWNjZXNzaWJpbGl0eVBy
b2dyZXNzSW5kaWNhdG9yPihtX29iamVjdCkpCisgICAgaWYgKCFpczxBY2Nlc3NpYmlsaXR5UHJv
Z3Jlc3NJbmRpY2F0b3I+KHNlbGYuYXhCYWNraW5nT2JqZWN0KSkKICAgICAgICAgcmV0dXJuIHZh
bHVlRGVzY3JpcHRpb247Ci0gICAgYXV0byAmbWV0ZXIgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5
UHJvZ3Jlc3NJbmRpY2F0b3I+KCptX29iamVjdCk7CisgICAgYXV0byAmbWV0ZXIgPSBkb3duY2Fz
dDxBY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3I+KCpzZWxmLmF4QmFja2luZ09iamVjdCk7
CiAgICAgU3RyaW5nIGdhdWdlUmVnaW9uVmFsdWUgPSBtZXRlci5nYXVnZVJlZ2lvblZhbHVlRGVz
Y3JpcHRpb24oKTsKICAgICBpZiAoIWdhdWdlUmVnaW9uVmFsdWUuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKQEAgLTIzNTUsNyArMjM1MSw3IEBAIEFMTE9XX0RF
UFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9E
RUNMQVJBVElPTlNfRU5ECiAgICAgICAgIH0KIAotICAgICAgICBpZiAoYXV0byogZnYgPSBwcm90
ZWN0ZWRTZWxmLT5tX29iamVjdC0+ZG9jdW1lbnRGcmFtZVZpZXcoKSkKKyAgICAgICAgaWYgKGF1
dG8qIGZ2ID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3QtPmRvY3VtZW50RnJh
bWVWaWV3KCkpCiAgICAgICAgICAgICByZXR1cm4gW2Z2LT5wbGF0Zm9ybVdpZGdldCgpIHdpbmRv
d107CiAKICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTIzNzIsNyArMjM2OCw3IEBAIEFMTE9XX0RF
UFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgIGlmICghW3NlbGYgdXBkYXRlT2JqZWN0
QmFja2luZ1N0b3JlXSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBpZiAobV9vYmpl
Y3QtPmlzRGV0YWNoZWRGcm9tUGFyZW50KCkpCisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5pc0RldGFjaGVkRnJvbVBhcmVudCgpKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIAogICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVJvbGVB
dHRyaWJ1dGVdKQpAQCAtMjM5Niw4ICsyMzkyLDggQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1F
TlRBVElPTlNfRU5ECiAgICAgICAgICAgICByZXR1cm4gc2Nyb2xsVmlld1BhcmVudDsKICAgICAg
ICAgCiAgICAgICAgIC8vIFRyZWUgaXRlbSAoY2hhbmdlZCB0byBBWFJvd3MpIGNhbiBvbmx5IHJl
cG9ydCB0aGUgdHJlZSAoQVhPdXRsaW5lKSBhcyBpdHMgcGFyZW50LgotICAgICAgICBpZiAoX2F4
QmFja2luZ09iamVjdC0+aXNUcmVlSXRlbSgpKSB7Ci0gICAgICAgICAgICBhdXRvIHBhcmVudCA9
IF9heEJhY2tpbmdPYmplY3QtPnBhcmVudE9iamVjdFVuaWdub3JlZCgpOworICAgICAgICBpZiAo
c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVHJlZUl0ZW0oKSkgeworICAgICAgICAgICAgYXV0byBw
YXJlbnQgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+cGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7CiAg
ICAgICAgICAgICB3aGlsZSAocGFyZW50KSB7CiAgICAgICAgICAgICAgICAgaWYgKHBhcmVudC0+
aXNUcmVlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnQtPndyYXBwZXIoKTsK
QEAgLTI0MDUsMTMgKzI0MDEsMTMgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNf
RU5ECiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGF1dG8gcGFy
ZW50ID0gX2F4QmFja2luZ09iamVjdC0+cGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7CisgICAgICAg
IGF1dG8gcGFyZW50ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnBhcmVudE9iamVjdFVuaWdub3Jl
ZCgpOwogICAgICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAg
ICAgIAogICAgICAgICAvLyBJbiBXZWJLaXQxLCB0aGUgc2Nyb2xsIHZpZXcgaXMgcHJvdmlkZWQg
YnkgdGhlIHN5c3RlbSAodGhlIGF0dGFjaG1lbnQgdmlldyksIHNvIHRoZSBwYXJlbnQKICAgICAg
ICAgLy8gc2hvdWxkIGJlIHJlcG9ydGVkIGRpcmVjdGx5IGFzIHN1Y2guCi0gICAgICAgIGlmICht
X29iamVjdC0+aXNXZWJBcmVhKCkgJiYgcGFyZW50LT5pc0F0dGFjaG1lbnQoKSkKKyAgICAgICAg
aWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1dlYkFyZWEoKSAmJiBwYXJlbnQtPmlzQXR0YWNo
bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIFtwYXJlbnQtPndyYXBwZXIoKSBhdHRhY2htZW50
Vmlld107CiAgICAgICAgIAogICAgICAgICByZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7CkBAIC0y
NDI2LDEzICsyNDIyLDEzIEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAog
ICAgICAgICAKICAgICAgICAgLy8gVGhlIHRyZWUncyAoQVhPdXRsaW5lKSBjaGlsZHJlbiBhcmUg
c3VwcG9zZWQgdG8gYmUgaXRzIHJvd3MgYW5kIGNvbHVtbnMuCiAgICAgICAgIC8vIFRoZSBBUklB
IHNwZWMgZG9lc24ndCBoYXZlIGNvbHVtbnMsIHNvIHdlIGp1c3QgbmVlZCByb3dzLgotICAgICAg
ICBpZiAobV9vYmplY3QtPmlzVHJlZSgpKQorICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmlzVHJlZSgpKQogICAgICAgICAgICAgcmV0dXJuIFtzZWxmIGFjY2Vzc2liaWxpdHlBdHRy
aWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlSb3dzQXR0cmlidXRlXTsKICAgICAgICAgCiAgICAg
ICAgIC8vIEEgdHJlZSBpdGVtIHNob3VsZCBvbmx5IGV4cG9zZSBpdHMgY29udGVudCBhcyBpdHMg
Y2hpbGRyZW4gKG5vdCBpdHMgcm93cykKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1RyZWVJdGVt
KCkpIHsKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1RyZWVJdGVtKCkpIHsK
ICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciBjb250ZW50Q29weTsKLSAgICAgICAgICAgIG1fb2JqZWN0LT5hcmlhVHJlZUl0ZW1Db250
ZW50KGNvbnRlbnRDb3B5KTsKKyAgICAgICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5hcmlh
VHJlZUl0ZW1Db250ZW50KGNvbnRlbnRDb3B5KTsKICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0
VG9OU0FycmF5KGNvbnRlbnRDb3B5KTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTI0NDAsNzgg
KzI0MzYsNzkgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgfQog
ICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJp
bGl0eVNlbGVjdGVkQ2hpbGRyZW5BdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlmIChtX29iamVjdC0+
Y2FuSGF2ZVNlbGVjdGVkQ2hpbGRyZW4oKSkgeworICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdP
YmplY3QtPmNhbkhhdmVTZWxlY3RlZENoaWxkcmVuKCkpIHsKICAgICAgICAgICAgIEFjY2Vzc2li
aWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBzZWxlY3RlZENoaWxkcmVu
Q29weTsKLSAgICAgICAgICAgIG1fb2JqZWN0LT5zZWxlY3RlZENoaWxkcmVuKHNlbGVjdGVkQ2hp
bGRyZW5Db3B5KTsKKyAgICAgICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZWxlY3RlZENo
aWxkcmVuKHNlbGVjdGVkQ2hpbGRyZW5Db3B5KTsKICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0
VG9OU0FycmF5KHNlbGVjdGVkQ2hpbGRyZW5Db3B5KTsKICAgICAgICAgfQogICAgICAgICByZXR1
cm4gbmlsOwogICAgIH0KICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOiBOU0FjY2Vzc2liaWxpdHlWaXNpYmxlQ2hpbGRyZW5BdHRyaWJ1dGVdKSB7Ci0gICAgICAg
IGlmIChtX29iamVjdC0+aXNMaXN0Qm94KCkpIHsKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5pc0xpc3RCb3goKSkgewogICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6
QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHZpc2libGVDaGlsZHJlbkNvcHk7Ci0gICAgICAg
ICAgICBtX29iamVjdC0+dmlzaWJsZUNoaWxkcmVuKHZpc2libGVDaGlsZHJlbkNvcHkpOworICAg
ICAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPnZpc2libGVDaGlsZHJlbih2aXNpYmxlQ2hp
bGRyZW5Db3B5KTsKICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KHZpc2libGVD
aGlsZHJlbkNvcHkpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc0xp
c3QoKSkKKworICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTGlzdCgpKQogICAg
ICAgICAgICAgcmV0dXJuIFtzZWxmIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vz
c2liaWxpdHlDaGlsZHJlbkF0dHJpYnV0ZV07Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBu
aWw7CiAgICAgfQogICAgIAogICAgIAotICAgIGlmIChtX29iamVjdC0+aXNXZWJBcmVhKCkpIHsK
KyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzV2ViQXJlYSgpKSB7CiAgICAgICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWExpbmtVSUVsZW1lbnRzIl0pIHsK
ICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciBsaW5rczsKLSAgICAgICAgICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q+KCptX29iamVjdCkuZ2V0RG9jdW1lbnRMaW5rcyhsaW5rcyk7CisgICAgICAgICAgICBkb3du
Y2FzdDxBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Pigqc2VsZi5heEJhY2tpbmdPYmplY3QpLmdl
dERvY3VtZW50TGlua3MobGlua3MpOwogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJy
YXkobGlua3MpOwogICAgICAgICB9CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6QCJBWExvYWRlZCJdKQotICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1i
ZXJXaXRoQm9vbDptX29iamVjdC0+aXNMb2FkZWQoKV07CisgICAgICAgICAgICByZXR1cm4gW05T
TnVtYmVyIG51bWJlcldpdGhCb29sOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0xvYWRlZCgpXTsK
ICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpAIkFYTGF5b3V0Q291
bnQiXSkKLSAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDptX29iamVj
dC0+bGF5b3V0Q291bnQoKV07CisgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldp
dGhJbnQ6c2VsZi5heEJhY2tpbmdPYmplY3QtPmxheW91dENvdW50KCldOwogICAgICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUxvYWRpbmdQcm9n
cmVzc0F0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhE
b3VibGU6bV9vYmplY3QtPmVzdGltYXRlZExvYWRpbmdQcm9ncmVzcygpXTsKKyAgICAgICAgICAg
IHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTpzZWxmLmF4QmFja2luZ09iamVjdC0+
ZXN0aW1hdGVkTG9hZGluZ1Byb2dyZXNzKCldOwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVByZXZlbnRLZXlib2FyZERPTUV2ZW50RGlz
cGF0Y2hBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRo
Qm9vbDptX29iamVjdC0+cHJldmVudEtleWJvYXJkRE9NRXZlbnREaXNwYXRjaCgpXTsKKyAgICAg
ICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6c2VsZi5heEJhY2tpbmdPYmpl
Y3QtPnByZXZlbnRLZXlib2FyZERPTUV2ZW50RGlzcGF0Y2goKV07CiAgICAgICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q2FyZXRCcm93c2luZ0Vu
YWJsZWRBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRo
Qm9vbDptX29iamVjdC0+Y2FyZXRCcm93c2luZ0VuYWJsZWQoKV07CisgICAgICAgICAgICByZXR1
cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5jYXJldEJy
b3dzaW5nRW5hYmxlZCgpXTsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlXZWJTZXNzaW9uSURBdHRyaWJ1dGVdKQotICAgICAgICAgICAg
cmV0dXJuIEAobV9vYmplY3QtPnNlc3Npb25JRCgpKTsKKyAgICAgICAgICAgIHJldHVybiBAKHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5zZXNzaW9uSUQoKSk7CiAgICAgfQogICAgIAotICAgIGlmICht
X29iamVjdC0+aXNUZXh0Q29udHJvbCgpKSB7CisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5pc1RleHRDb250cm9sKCkpIHsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5TnVtYmVyT2ZDaGFyYWN0ZXJzQXR0cmlidXRlXSkgewot
ICAgICAgICAgICAgaW50IGxlbmd0aCA9IG1fb2JqZWN0LT50ZXh0TGVuZ3RoKCk7CisgICAgICAg
ICAgICBpbnQgbGVuZ3RoID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnRleHRMZW5ndGgoKTsKICAg
ICAgICAgICAgIGlmIChsZW5ndGggPCAwKQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAg
ICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZEludDpsZW5ndGhd
OwogICAgICAgICB9CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
IE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkVGV4dEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIFN0
cmluZyBzZWxlY3RlZFRleHQgPSBtX29iamVjdC0+c2VsZWN0ZWRUZXh0KCk7CisgICAgICAgICAg
ICBTdHJpbmcgc2VsZWN0ZWRUZXh0ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnNlbGVjdGVkVGV4
dCgpOwogICAgICAgICAgICAgaWYgKHNlbGVjdGVkVGV4dC5pc051bGwoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gbmlsOwogICAgICAgICAgICAgcmV0dXJuIChOU1N0cmluZyopc2VsZWN0ZWRU
ZXh0OwogICAgICAgICB9CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJp
bmc6IE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkVGV4dFJhbmdlQXR0cmlidXRlXSkgewotICAgICAg
ICAgICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlID0gbV9vYmplY3QtPnNlbGVjdGVkVGV4dFJh
bmdlKCk7CisgICAgICAgICAgICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2UgPSBzZWxmLmF4QmFj
a2luZ09iamVjdC0+c2VsZWN0ZWRUZXh0UmFuZ2UoKTsKICAgICAgICAgICAgIHJldHVybiBbTlNW
YWx1ZSB2YWx1ZVdpdGhSYW5nZTpOU01ha2VSYW5nZSh0ZXh0UmFuZ2Uuc3RhcnQsIHRleHRSYW5n
ZS5sZW5ndGgpXTsKICAgICAgICAgfQogICAgICAgICAvLyBUT0RPOiBHZXQgYWN0dWFsIHZpc2li
bGUgcmFuZ2UuIDxyZGFyOi8vcHJvYmxlbS80NzEyMTAxPgogICAgICAgICBpZiAoW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlWaXNpYmxlQ2hhcmFjdGVyUmFu
Z2VBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5pc1Bhc3N3b3JkRmll
bGQoKSA/IG5pbCA6IFtOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOiBOU01ha2VSYW5nZSgwLCBtX29i
amVjdC0+dGV4dExlbmd0aCgpKV07CisgICAgICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdP
YmplY3QtPmlzUGFzc3dvcmRGaWVsZCgpID8gbmlsIDogW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6
IE5TTWFrZVJhbmdlKDAsIHNlbGYuYXhCYWNraW5nT2JqZWN0LT50ZXh0TGVuZ3RoKCkpXTsKICAg
ICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5
SW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyQXR0cmlidXRlXSkgewogICAgICAgICAgICAgLy8gaWYg
c2VsZWN0aW9uRW5kID4gMCwgdGhlbiB0aGVyZSBpcyBzZWxlY3RlZCB0ZXh0IGFuZCB0aGlzIHF1
ZXN0aW9uIHNob3VsZCBub3QgYmUgYW5zd2VyZWQKLSAgICAgICAgICAgIGlmIChtX29iamVjdC0+
aXNQYXNzd29yZEZpZWxkKCkgfHwgbV9vYmplY3QtPnNlbGVjdGlvbkVuZCgpID4gMCkKKyAgICAg
ICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNQYXNzd29yZEZpZWxkKCkgfHwgc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPnNlbGVjdGlvbkVuZCgpID4gMCkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gbmlsOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBhdXRvIGZvY3VzZWRPYmplY3Qg
PSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5T2JqZWN0PihtX29iamVjdC0+Zm9jdXNlZFVJRWxlbWVu
dCgpKTsKLSAgICAgICAgICAgIGlmIChmb2N1c2VkT2JqZWN0ICE9IG1fb2JqZWN0KQorICAgICAg
ICAgICAgYXV0byBmb2N1c2VkT2JqZWN0ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eU9iamVjdD4o
c2VsZi5heEJhY2tpbmdPYmplY3QtPmZvY3VzZWRVSUVsZW1lbnQoKSk7CisgICAgICAgICAgICBp
ZiAoZm9jdXNlZE9iamVjdCAhPSBzZWxmLmF4QmFja2luZ09iamVjdCkKICAgICAgICAgICAgICAg
ICByZXR1cm4gbmlsOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24g
Zm9jdXNlZFBvc2l0aW9uID0gZm9jdXNlZE9iamVjdC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgo
Zm9jdXNlZE9iamVjdC0+c2VsZWN0aW9uU3RhcnQoKSwgdHJ1ZSk7Ci0gICAgICAgICAgICBpbnQg
bGluZU51bWJlciA9IG1fb2JqZWN0LT5saW5lRm9yUG9zaXRpb24oZm9jdXNlZFBvc2l0aW9uKTsK
KyAgICAgICAgICAgIGludCBsaW5lTnVtYmVyID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmxpbmVG
b3JQb3NpdGlvbihmb2N1c2VkUG9zaXRpb24pOwogICAgICAgICAgICAgaWYgKGxpbmVOdW1iZXIg
PCAwKQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgICAgICAKQEAgLTI1MjAs
NDQgKzI1MTcsNDQgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAg
fQogICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNz
aWJpbGl0eVVSTEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgVVJMIHVybCA9IG1fb2JqZWN0LT51cmwo
KTsKKyAgICAgICAgVVJMIHVybCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT51cmwoKTsKICAgICAg
ICAgaWYgKHVybC5pc051bGwoKSkKICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgIHJl
dHVybiAoTlNVUkwqKXVybDsKICAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUluY3JlbWVudEJ1dHRvbkF0dHJpYnV0ZV0pIHsKLSAg
ICAgICAgYXV0byBpbmNyZW1lbnRCdXR0b24gPSBtX29iamVjdC0+aW5jcmVtZW50QnV0dG9uKCk7
CisgICAgICAgIGF1dG8gaW5jcmVtZW50QnV0dG9uID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmlu
Y3JlbWVudEJ1dHRvbigpOwogICAgICAgICByZXR1cm4gaW5jcmVtZW50QnV0dG9uID8gaW5jcmVt
ZW50QnV0dG9uLT53cmFwcGVyKCkgOiBuaWw7CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlEZWNyZW1lbnRCdXR0b25BdHRyaWJ1
dGVdKSB7Ci0gICAgICAgIGF1dG8gZGVjcmVtZW50QnV0dG9uID0gbV9vYmplY3QtPmRlY3JlbWVu
dEJ1dHRvbigpOworICAgICAgICBhdXRvIGRlY3JlbWVudEJ1dHRvbiA9IHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5kZWNyZW1lbnRCdXR0b24oKTsKICAgICAgICAgcmV0dXJuIGRlY3JlbWVudEJ1dHRv
biA/IGRlY3JlbWVudEJ1dHRvbi0+d3JhcHBlcigpIDogbmlsOwogICAgIH0KIAogICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IEAiQVhWaXNpdGVkIl0pCi0gICAgICAgIHJl
dHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6IG1fb2JqZWN0LT5pc1Zpc2l0ZWQoKV07Cisg
ICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6IHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5pc1Zpc2l0ZWQoKV07CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5VGl0bGVBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlmIChf
YXhCYWNraW5nT2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkgeworICAgICAgICBpZiAoc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmlzQXR0YWNobWVudCgpKSB7CiAgICAgICAgICAgICBpZiAoW1tbc2VsZiBh
dHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzXSBjb250YWluc09iamVj
dDpOU0FjY2Vzc2liaWxpdHlUaXRsZUF0dHJpYnV0ZV0pCiAgICAgICAgICAgICAgICAgcmV0dXJu
IFtbc2VsZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNj
ZXNzaWJpbGl0eVRpdGxlQXR0cmlidXRlXTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
Ly8gTWV0ZXIgZWxlbWVudHMgc2hvdWxkIGNvbW11bmljYXRlIHRoZWlyIGNvbnRlbnQgdmlhIEFY
VmFsdWVEZXNjcmlwdGlvbi4KLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01ldGVyKCkpCisgICAg
ICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNZXRlcigpKQogICAgICAgICAgICAgcmV0
dXJuIFtOU1N0cmluZyBzdHJpbmddOwogICAgICAgICAKICAgICAgICAgLy8gU3VtbWFyeSBlbGVt
ZW50IHNob3VsZCB1c2UgaXRzIHRleHQgbm9kZSBhcyBBWFRpdGxlLgotICAgICAgICBpZiAobV9v
YmplY3QtPmlzU3VtbWFyeSgpKQotICAgICAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT50ZXh0VW5k
ZXJFbGVtZW50KCk7CisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNTdW1tYXJ5
KCkpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPnRleHRVbmRlckVs
ZW1lbnQoKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBbc2VsZiBiYXNlQWNjZXNzaWJpbGl0
eVRpdGxlXTsKICAgICB9CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzogTlNBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25BdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlm
IChfYXhCYWNraW5nT2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkgeworICAgICAgICBpZiAoc2VsZi5h
eEJhY2tpbmdPYmplY3QtPmlzQXR0YWNobWVudCgpKSB7CiAgICAgICAgICAgICBpZiAoW1tbc2Vs
ZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzXSBjb250YWluc09i
amVjdDpOU0FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkF0dHJpYnV0ZV0pCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIFtbc2VsZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZh
bHVlOk5TQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uQXR0cmlidXRlXTsKICAgICAgICAgfQpAQCAt
MjU2NSwxOSArMjU2MiwxOSBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQK
ICAgICB9CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNB
Y2Nlc3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlmIChfYXhCYWNraW5nT2Jq
ZWN0LT5pc0F0dGFjaG1lbnQoKSkgeworICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3Qt
PmlzQXR0YWNobWVudCgpKSB7CiAgICAgICAgICAgICBpZiAoW1tbc2VsZiBhdHRhY2htZW50Vmll
d10gYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzXSBjb250YWluc09iamVjdDpOU0FjY2Vzc2li
aWxpdHlWYWx1ZUF0dHJpYnV0ZV0pCiAgICAgICAgICAgICAgICAgcmV0dXJuIFtbc2VsZiBhdHRh
Y2htZW50Vmlld10gYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eVZh
bHVlQXR0cmlidXRlXTsKICAgICAgICAgfQotICAgICAgICBpZiAobV9vYmplY3QtPnN1cHBvcnRz
UmFuZ2VWYWx1ZSgpKQotICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoRmxv
YXQ6bV9vYmplY3QtPnZhbHVlRm9yUmFuZ2UoKV07Ci0gICAgICAgIGlmIChtX29iamVjdC0+cm9s
ZVZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OlNsaWRlclRodW1iKQotICAgICAgICAgICAg
cmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6bV9vYmplY3QtPnBhcmVudE9iamVjdCgp
LT52YWx1ZUZvclJhbmdlKCldOwotICAgICAgICBpZiAobV9vYmplY3QtPmlzSGVhZGluZygpKQot
ICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50Om1fb2JqZWN0LT5oZWFk
aW5nTGV2ZWwoKV07CisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+c3VwcG9ydHNS
YW5nZVZhbHVlKCkpCisgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhGbG9h
dDpzZWxmLmF4QmFja2luZ09iamVjdC0+dmFsdWVGb3JSYW5nZSgpXTsKKyAgICAgICAgaWYgKHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6U2xp
ZGVyVGh1bWIpCisgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpz
ZWxmLmF4QmFja2luZ09iamVjdC0+cGFyZW50T2JqZWN0KCktPnZhbHVlRm9yUmFuZ2UoKV07Cisg
ICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNIZWFkaW5nKCkpCisgICAgICAgICAg
ICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6c2VsZi5heEJhY2tpbmdPYmplY3QtPmhl
YWRpbmdMZXZlbCgpXTsKICAgICAgICAgCi0gICAgICAgIGlmIChtX29iamVjdC0+aXNDaGVja2Jv
eE9yUmFkaW8oKSB8fCBtX29iamVjdC0+aXNNZW51SXRlbSgpIHx8IG1fb2JqZWN0LT5pc1N3aXRj
aCgpIHx8IG1fb2JqZWN0LT5pc1RvZ2dsZUJ1dHRvbigpKSB7Ci0gICAgICAgICAgICBzd2l0Y2gg
KG1fb2JqZWN0LT5jaGVja2JveE9yUmFkaW9WYWx1ZSgpKSB7CisgICAgICAgIGlmIChzZWxmLmF4
QmFja2luZ09iamVjdC0+aXNDaGVja2JveE9yUmFkaW8oKSB8fCBzZWxmLmF4QmFja2luZ09iamVj
dC0+aXNNZW51SXRlbSgpIHx8IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1N3aXRjaCgpIHx8IHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5pc1RvZ2dsZUJ1dHRvbigpKSB7CisgICAgICAgICAgICBzd2l0
Y2ggKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5jaGVja2JveE9yUmFkaW9WYWx1ZSgpKSB7CiAgICAg
ICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlCdXR0b25TdGF0ZTo6T2ZmOgogICAgICAgICAgICAg
ICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDowXTsKICAgICAgICAgICAgIGNhc2Ug
QWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlOjpPbjoKQEAgLTI1ODgsNjIgKzI1ODUsNjIgQEAgQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIC8vIHJhZGlvIGdyb3VwcyByZXR1cm4gdGhlIHNlbGVjdGVkIHJhZGlvIGJ1dHRvbiBh
cyB0aGUgQVhWYWx1ZQotICAgICAgICBpZiAobV9vYmplY3QtPmlzUmFkaW9Hcm91cCgpKSB7Ci0g
ICAgICAgICAgICBBWENvcmVPYmplY3QqIHJhZGlvQnV0dG9uID0gbV9vYmplY3QtPnNlbGVjdGVk
UmFkaW9CdXR0b24oKTsKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1JhZGlv
R3JvdXAoKSkgeworICAgICAgICAgICAgQVhDb3JlT2JqZWN0KiByYWRpb0J1dHRvbiA9IHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5zZWxlY3RlZFJhZGlvQnV0dG9uKCk7CiAgICAgICAgICAgICBpZiAo
IXJhZGlvQnV0dG9uKQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgICAgICBy
ZXR1cm4gcmFkaW9CdXR0b24tPndyYXBwZXIoKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgaWYgKG1fb2JqZWN0LT5pc1RhYkxpc3QoKSkgewotICAgICAgICAgICAgQVhDb3JlT2JqZWN0
KiB0YWJJdGVtID0gbV9vYmplY3QtPnNlbGVjdGVkVGFiSXRlbSgpOworICAgICAgICBpZiAoc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmlzVGFiTGlzdCgpKSB7CisgICAgICAgICAgICBBWENvcmVPYmpl
Y3QqIHRhYkl0ZW0gPSBzZWxmLmF4QmFja2luZ09iamVjdC0+c2VsZWN0ZWRUYWJJdGVtKCk7CiAg
ICAgICAgICAgICBpZiAoIXRhYkl0ZW0pCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAg
ICAgICAgICAgIHJldHVybiB0YWJJdGVtLT53cmFwcGVyKCk7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNUYWJJdGVtKCkpCi0gICAgICAgICAgICByZXR1cm4g
W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bV9vYmplY3QtPmlzU2VsZWN0ZWQoKV07CisgICAgICAg
IGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUYWJJdGVtKCkpCisgICAgICAgICAgICByZXR1
cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzU2VsZWN0
ZWQoKV07CiAgICAgICAgIAotICAgICAgICBpZiAobV9vYmplY3QtPmlzQ29sb3JXZWxsKCkpIHsK
KyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0NvbG9yV2VsbCgpKSB7CiAgICAg
ICAgICAgICBpbnQgciwgZywgYjsKLSAgICAgICAgICAgIG1fb2JqZWN0LT5jb2xvclZhbHVlKHIs
IGcsIGIpOworICAgICAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPmNvbG9yVmFsdWUociwg
ZywgYik7CiAgICAgICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJy
Z2IgJTcuNWYgJTcuNWYgJTcuNWYgMSIsIHIgLyAyNTUuLCBnIC8gMjU1LiwgYiAvIDI1NS5dOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbV9vYmplY3QtPnN0cmluZ1ZhbHVl
KCk7CisgICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+c3RyaW5nVmFsdWUoKTsK
ICAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOihOU1N0cmlu
ZyAqKWtBWE1lbnVJdGVtTWFya0NoYXJBdHRyaWJ1dGVdKSB7CiAgICAgICAgIGNvbnN0IHVuaWNo
YXIgY2ggPSAweDI3MTM7IC8vIOKckyB1c2VkIG9uIE1hYyBmb3Igc2VsZWN0ZWQgbWVudSBpdGVt
cy4KLSAgICAgICAgcmV0dXJuIChtX29iamVjdC0+aXNDaGVja2VkKCkpID8gW05TU3RyaW5nIHN0
cmluZ1dpdGhDaGFyYWN0ZXJzOiZjaCBsZW5ndGg6MV0gOiBuaWw7CisgICAgICAgIHJldHVybiAo
c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzQ2hlY2tlZCgpKSA/IFtOU1N0cmluZyBzdHJpbmdXaXRo
Q2hhcmFjdGVyczomY2ggbGVuZ3RoOjFdIDogbmlsOwogICAgIH0KICAgICAKICAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlNaW5WYWx1ZUF0dHJp
YnV0ZV0pIHsKICAgICAgICAgLy8gSW5kZXRlcm1pbmF0ZSBwcm9ncmVzcyBpbmRpY2F0b3Igc2hv
dWxkIHJldHVybiAwLgotICAgICAgICBpZiAobV9vYmplY3QtPmFyaWFSb2xlQXR0cmlidXRlKCkg
PT0gQWNjZXNzaWJpbGl0eVJvbGU6OlByb2dyZXNzSW5kaWNhdG9yICYmICFtX29iamVjdC0+aGFz
QVJJQVZhbHVlTm93KCkpCisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+YXJpYVJv
bGVBdHRyaWJ1dGUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6UHJvZ3Jlc3NJbmRpY2F0b3IgJiYg
IXNlbGYuYXhCYWNraW5nT2JqZWN0LT5oYXNBUklBVmFsdWVOb3coKSkKICAgICAgICAgICAgIHJl
dHVybiBAMDsKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6bV9vYmpl
Y3QtPm1pblZhbHVlRm9yUmFuZ2UoKV07CisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVy
V2l0aEZsb2F0OnNlbGYuYXhCYWNraW5nT2JqZWN0LT5taW5WYWx1ZUZvclJhbmdlKCldOwogICAg
IH0KICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vz
c2liaWxpdHlNYXhWYWx1ZUF0dHJpYnV0ZV0pIHsKICAgICAgICAgLy8gSW5kZXRlcm1pbmF0ZSBw
cm9ncmVzcyBpbmRpY2F0b3Igc2hvdWxkIHJldHVybiAwLgotICAgICAgICBpZiAobV9vYmplY3Qt
PmFyaWFSb2xlQXR0cmlidXRlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OlByb2dyZXNzSW5kaWNh
dG9yICYmICFtX29iamVjdC0+aGFzQVJJQVZhbHVlTm93KCkpCisgICAgICAgIGlmIChzZWxmLmF4
QmFja2luZ09iamVjdC0+YXJpYVJvbGVBdHRyaWJ1dGUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6
UHJvZ3Jlc3NJbmRpY2F0b3IgJiYgIXNlbGYuYXhCYWNraW5nT2JqZWN0LT5oYXNBUklBVmFsdWVO
b3coKSkKICAgICAgICAgICAgIHJldHVybiBAMDsKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBu
dW1iZXJXaXRoRmxvYXQ6bV9vYmplY3QtPm1heFZhbHVlRm9yUmFuZ2UoKV07CisgICAgICAgIHJl
dHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXhW
YWx1ZUZvclJhbmdlKCldOwogICAgIH0KICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlIZWxwQXR0cmlidXRlXSkKICAgICAgICAgcmV0
dXJuIFtzZWxmIGJhc2VBY2Nlc3NpYmlsaXR5SGVscFRleHRdOwogICAgIAogICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eUZvY3VzZWRBdHRyaWJ1
dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOiBtX29iamVjdC0+
aXNGb2N1c2VkKCldOworICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOiBz
ZWxmLmF4QmFja2luZ09iamVjdC0+aXNGb2N1c2VkKCldOwogICAgIAogICAgIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eUVuYWJsZWRBdHRyaWJ1dGVd
KQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOiBtX29iamVjdC0+aXNF
bmFibGVkKCldOworICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOiBzZWxm
LmF4QmFja2luZ09iamVjdC0+aXNFbmFibGVkKCldOwogICAgIAogICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVNpemVBdHRyaWJ1dGVdKSB7Ci0g
ICAgICAgIEludFNpemUgcyA9IHNuYXBwZWRJbnRSZWN0KG1fb2JqZWN0LT5lbGVtZW50UmVjdCgp
KS5zaXplKCk7CisgICAgICAgIEludFNpemUgcyA9IHNuYXBwZWRJbnRSZWN0KHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5lbGVtZW50UmVjdCgpKS5zaXplKCk7CiAgICAgICAgIHJldHVybiBbTlNWYWx1
ZSB2YWx1ZVdpdGhTaXplOiBOU01ha2VTaXplKHMud2lkdGgoKSwgcy5oZWlnaHQoKSldOwogICAg
IH0KICAgICAKQEAgLTI2NTksMjkgKzI2NTYsMjkgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1F
TlRBVElPTlNfRU5ECiAgICAgICAgIHJldHVybiBbc2VsZiB3aW5kb3dFbGVtZW50OmF0dHJpYnV0
ZU5hbWVdOwogCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vz
c2liaWxpdHlBY2Nlc3NLZXlBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIEF0b21TdHJpbmcgYWNjZXNz
S2V5ID0gbV9vYmplY3QtPmFjY2Vzc0tleSgpOworICAgICAgICBBdG9tU3RyaW5nIGFjY2Vzc0tl
eSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5hY2Nlc3NLZXkoKTsKICAgICAgICAgaWYgKGFjY2Vz
c0tleS5pc051bGwoKSkKICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgIHJldHVybiBh
Y2Nlc3NLZXk7CiAgICAgfQogICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5TGlua1JlbGF0aW9uc2hpcFR5cGVBdHRyaWJ1dGVdKQotICAg
ICAgICByZXR1cm4gbV9vYmplY3QtPmxpbmtSZWxWYWx1ZSgpOworICAgICAgICByZXR1cm4gc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmxpbmtSZWxWYWx1ZSgpOwogICAgIAogICAgIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VGFic0F0dHJpYnV0ZV0pIHsK
LSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1RhYkxpc3QoKSkgeworICAgICAgICBpZiAoc2VsZi5h
eEJhY2tpbmdPYmplY3QtPmlzVGFiTGlzdCgpKSB7CiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgdGFic0NoaWxkcmVuOwotICAgICAg
ICAgICAgbV9vYmplY3QtPnRhYkNoaWxkcmVuKHRhYnNDaGlsZHJlbik7CisgICAgICAgICAgICBz
ZWxmLmF4QmFja2luZ09iamVjdC0+dGFiQ2hpbGRyZW4odGFic0NoaWxkcmVuKTsKICAgICAgICAg
ICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KHRhYnNDaGlsZHJlbik7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vz
c2liaWxpdHlDb250ZW50c0F0dHJpYnV0ZV0pIHsKICAgICAgICAgLy8gVGhlIGNvbnRlbnRzIG9m
IGEgdGFiIGxpc3QgYXJlIGFsbCB0aGUgY2hpbGRyZW4gZXhjZXB0IHRoZSB0YWJzLgotICAgICAg
ICBpZiAobV9vYmplY3QtPmlzVGFiTGlzdCgpKSB7CisgICAgICAgIGlmIChzZWxmLmF4QmFja2lu
Z09iamVjdC0+aXNUYWJMaXN0KCkpIHsKICAgICAgICAgICAgIGF1dG8gY2hpbGRyZW4gPSBzZWxm
LmNoaWxkcmVuVmVjdG9yQXJyYXk7CiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgdGFiczsKLSAgICAgICAgICAgIG1fb2JqZWN0LT50
YWJDaGlsZHJlbih0YWJzKTsKKyAgICAgICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT50YWJD
aGlsZHJlbih0YWJzKTsKICAgICAgICAgICAgIGF1dG8gdGFic0NoaWxkcmVuID0gY29udmVydFRv
TlNBcnJheSh0YWJzKTsKIAogICAgICAgICAgICAgTlNNdXRhYmxlQXJyYXkgKmNvbnRlbnRzID0g
W05TTXV0YWJsZUFycmF5IGFycmF5XTsKQEAgLTI2OTAsNyArMjY4Nyw5IEBAIEFMTE9XX0RFUFJF
Q0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgICAgICAgICBbY29udGVudHMg
YWRkT2JqZWN0OmNoaWxkV3JhcHBlcl07CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1
cm4gY29udGVudHM7Ci0gICAgICAgIH0gZWxzZSBpZiAobV9vYmplY3QtPmlzU2Nyb2xsVmlldygp
KSB7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzU2Ny
b2xsVmlldygpKSB7CiAgICAgICAgICAgICAvLyBBIHNjcm9sbFZpZXcncyBjb250ZW50cyBhcmUg
ZXZlcnl0aGluZyBleGNlcHQgdGhlIHNjcm9sbCBiYXJzLgogICAgICAgICAgICAgYXV0byBjaGls
ZHJlbiA9IHNlbGYuY2hpbGRyZW5WZWN0b3JBcnJheTsKICAgICAgICAgICAgIE5TTXV0YWJsZUFy
cmF5ICpjb250ZW50cyA9IFtOU011dGFibGVBcnJheSBhcnJheV07CkBAIC0yNzA1LDggKzI3MDQs
OCBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgfQogICAg
IH0KICAgICAKLSAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxlPigqbV9vYmplY3QpICYmIGRv
d25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKm1fb2JqZWN0KS5pc0V4cG9zYWJsZVRocm91Z2hB
Y2Nlc3NpYmlsaXR5KCkpIHsKLSAgICAgICAgYXV0byYgdGFibGUgPSBkb3duY2FzdDxBY2Nlc3Np
YmlsaXR5VGFibGU+KCptX29iamVjdCk7CisgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4o
KnNlbGYuYXhCYWNraW5nT2JqZWN0KSAmJiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpz
ZWxmLmF4QmFja2luZ09iamVjdCkuaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpKSB7
CisgICAgICAgIGF1dG8mIHRhYmxlID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqc2Vs
Zi5heEJhY2tpbmdPYmplY3QpOwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJvd3NBdHRyaWJ1dGVdKQogICAgICAgICAgICAgcmV0dXJu
IGNvbnZlcnRUb05TQXJyYXkodGFibGUucm93cygpKTsKICAgICAgICAgCkBAIC0yNzI0LDcgKzI3
MjMsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgCiAg
ICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5
U2VsZWN0ZWRSb3dzQXR0cmlidXRlXSkgewogICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVj
dDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHNlbGVjdGVkQ2hpbGRyZW5Db3B5OwotICAg
ICAgICAgICAgbV9vYmplY3QtPnNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRDaGlsZHJlbkNvcHkp
OworICAgICAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPnNlbGVjdGVkQ2hpbGRyZW4oc2Vs
ZWN0ZWRDaGlsZHJlbkNvcHkpOwogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXko
c2VsZWN0ZWRDaGlsZHJlbkNvcHkpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjc3MSw4ICsy
NzcwLDggQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAg
ICByZXR1cm4gQCh0YWJsZS5heFJvd0NvdW50KCkpOwogICAgIH0KICAgICAKLSAgICBpZiAoaXM8
QWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uPigqbV9vYmplY3QpKSB7Ci0gICAgICAgIGF1dG8mIGNv
bHVtbiA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbj4oKm1fb2JqZWN0KTsKKyAg
ICBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uPigqc2VsZi5heEJhY2tpbmdPYmplY3Qp
KSB7CisgICAgICAgIGF1dG8mIGNvbHVtbiA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNv
bHVtbj4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KTsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlJbmRleEF0dHJpYnV0ZV0pCiAgICAgICAg
ICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6Y29sdW1uLmNvbHVtbkluZGV4KCld
OwogICAgICAgICAKQEAgLTI3ODksOCArMjc4OCw4IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVN
RU5UQVRJT05TX0VORAogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGlmIChpczxBY2Nlc3Np
YmlsaXR5VGFibGVDZWxsPigqbV9vYmplY3QpKSB7Ci0gICAgICAgIGF1dG8mIGNlbGwgPSBkb3du
Y2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqbV9vYmplY3QpOworICAgIGlmIChpczxBY2Nl
c3NpYmlsaXR5VGFibGVDZWxsPigqc2VsZi5heEJhY2tpbmdPYmplY3QpKSB7CisgICAgICAgIGF1
dG8mIGNlbGwgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqc2VsZi5heEJhY2tp
bmdPYmplY3QpOwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eVJvd0luZGV4UmFuZ2VBdHRyaWJ1dGVdKSB7CiAgICAgICAgICAgICBzdGQ6
OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiByb3dSYW5nZTsKICAgICAgICAgICAgIGNlbGwucm93
SW5kZXhSYW5nZShyb3dSYW5nZSk7CkBAIC0yODE4LDE1ICsyODE3LDE1IEBAIEFMTE9XX0RFUFJF
Q0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgcmV0dXJuIEAoY2VsbC5heFJv
d0luZGV4KCkpOwogICAgIH0KICAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzVHJlZSgpKSB7Cisg
ICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1RyZWUoKSkgewogICAgICAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkUm93c0F0
dHJpYnV0ZV0pIHsKICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciBzZWxlY3RlZENoaWxkcmVuQ29weTsKLSAgICAgICAgICAgIG1fb2Jq
ZWN0LT5zZWxlY3RlZENoaWxkcmVuKHNlbGVjdGVkQ2hpbGRyZW5Db3B5KTsKKyAgICAgICAgICAg
IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZWxlY3RlZENoaWxkcmVuKHNlbGVjdGVkQ2hpbGRyZW5D
b3B5KTsKICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KHNlbGVjdGVkQ2hpbGRy
ZW5Db3B5KTsKICAgICAgICAgfQogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJvd3NBdHRyaWJ1dGVdKSB7CiAgICAgICAgICAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93c0NvcHk7Ci0g
ICAgICAgICAgICBtX29iamVjdC0+YXJpYVRyZWVSb3dzKHJvd3NDb3B5KTsKKyAgICAgICAgICAg
IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5hcmlhVHJlZVJvd3Mocm93c0NvcHkpOwogICAgICAgICAg
ICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkocm93c0NvcHkpOwogICAgICAgICB9CiAgICAgICAg
IApAQCAtMjgzNiw4ICsyODM1LDggQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNf
RU5ECiAgICAgfQogICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
TlNBY2Nlc3NpYmlsaXR5SW5kZXhBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlmIChtX29iamVjdC0+
aXNUcmVlSXRlbSgpKSB7Ci0gICAgICAgICAgICBBWENvcmVPYmplY3QqIHBhcmVudCA9IG1fb2Jq
ZWN0LT5wYXJlbnRPYmplY3QoKTsKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5p
c1RyZWVJdGVtKCkpIHsKKyAgICAgICAgICAgIEFYQ29yZU9iamVjdCogcGFyZW50ID0gc2VsZi5h
eEJhY2tpbmdPYmplY3QtPnBhcmVudE9iamVjdCgpOwogICAgICAgICAgICAgZm9yICg7IHBhcmVu
dCAmJiAhcGFyZW50LT5pc1RyZWUoKTsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkK
ICAgICAgICAgICAgIHsgfQogICAgICAgICAgICAgCkBAIC0yODU0LDI5ICsyODUzLDMxIEBAIEFM
TE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgCiAgICAgICAg
ICAgICByZXR1cm4gbmlsOwogICAgICAgICB9Ci0gICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5
VGFibGVSb3c+KCptX29iamVjdCkpIHsKKyAgICAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJs
ZVJvdz4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KSkgewogICAgICAgICAgICAgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlJbmRleEF0dHJpYnV0ZV0pCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50OmRvd25jYXN0PEFj
Y2Vzc2liaWxpdHlUYWJsZVJvdz4oKm1fb2JqZWN0KS5yb3dJbmRleCgpXTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6ZG93bmNhc3Q8QWNjZXNzaWJpbGl0
eVRhYmxlUm93Pigqc2VsZi5heEJhY2tpbmdPYmplY3QpLnJvd0luZGV4KCldOwogICAgICAgICB9
CiAgICAgfQogICAgIAogICAgIC8vIFRoZSByb3dzIHRoYXQgYXJlIGNvbnNpZGVyZWQgaW5zaWRl
IHRoaXMgcm93LgogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5RGlzY2xvc2VkUm93c0F0dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYgKG1fb2JqZWN0
LT5pc1RyZWVJdGVtKCkpIHsKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1Ry
ZWVJdGVtKCkpIHsKICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciByb3dzQ29weTsKLSAgICAgICAgICAgIG1fb2JqZWN0LT5hcmlhVHJl
ZUl0ZW1EaXNjbG9zZWRSb3dzKHJvd3NDb3B5KTsKKyAgICAgICAgICAgIHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5hcmlhVHJlZUl0ZW1EaXNjbG9zZWRSb3dzKHJvd3NDb3B5KTsKICAgICAgICAgICAg
IHJldHVybiBjb252ZXJ0VG9OU0FycmF5KHJvd3NDb3B5KTsKLSAgICAgICAgfSBlbHNlIGlmIChp
czxBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c+KCptX29iamVjdCkpIHsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c+KCpzZWxmLmF4QmFja2luZ09i
amVjdCkpIHsKICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlD
aGlsZHJlblZlY3RvciByb3dzQ29weTsKLSAgICAgICAgICAgIGRvd25jYXN0PEFjY2Vzc2liaWxp
dHlBUklBR3JpZFJvdz4oKm1fb2JqZWN0KS5kaXNjbG9zZWRSb3dzKHJvd3NDb3B5KTsKKyAgICAg
ICAgICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdz4oKnNlbGYuYXhCYWNraW5n
T2JqZWN0KS5kaXNjbG9zZWRSb3dzKHJvd3NDb3B5KTsKICAgICAgICAgICAgIHJldHVybiBjb252
ZXJ0VG9OU0FycmF5KHJvd3NDb3B5KTsKICAgICAgICAgfQogICAgIH0KICAgICAKICAgICAvLyBU
aGUgcm93IHRoYXQgY29udGFpbnMgdGhpcyByb3cuIEl0IHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0
aGUgZmlyc3QgcGFyZW50IHRoYXQgaXMgYSB0cmVlaXRlbS4KICAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eURpc2Nsb3NlZEJ5Um93QXR0cmlidXRl
XSkgewotICAgICAgICBpZiAobV9vYmplY3QtPmlzVHJlZUl0ZW0oKSkgewotICAgICAgICAgICAg
QVhDb3JlT2JqZWN0KiBwYXJlbnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0KCk7CisgICAgICAg
IGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUcmVlSXRlbSgpKSB7CisgICAgICAgICAgICBB
WENvcmVPYmplY3QqIHBhcmVudCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5wYXJlbnRPYmplY3Qo
KTsKICAgICAgICAgICAgIHdoaWxlIChwYXJlbnQpIHsKICAgICAgICAgICAgICAgICBpZiAocGFy
ZW50LT5pc1RyZWVJdGVtKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnQtPndy
YXBwZXIoKTsKQEAgLTI4ODYsOCArMjg4NywxMCBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVO
VEFUSU9OU19FTkQKICAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVj
dCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgfSBl
bHNlIGlmIChpczxBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c+KCptX29iamVjdCkpIHsKLSAgICAg
ICAgICAgIEFYQ29yZU9iamVjdCogcm93ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eUFSSUFHcmlk
Um93PigqbV9vYmplY3QpLmRpc2Nsb3NlZEJ5Um93KCk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoaXM8QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93Pigqc2VsZi5heEJhY2tpbmdPYmplY3QpKSB7
CisgICAgICAgICAgICBBWENvcmVPYmplY3QqIHJvdyA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlB
UklBR3JpZFJvdz4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KS5kaXNjbG9zZWRCeVJvdygpOwogICAg
ICAgICAgICAgaWYgKCFyb3cpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAg
ICAgIHJldHVybiByb3ctPndyYXBwZXIoKTsKQEAgLTI4OTYsNjYgKzI4OTksNjYgQEAgQUxMT1df
REVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlEaXNjbG9zdXJlTGV2ZWxBdHRyaWJ1
dGVdKSB7CiAgICAgICAgIC8vIENvbnZlcnQgZnJvbSAxLWJhc2VkIGxldmVsIChmcm9tIGFyaWEt
bGV2ZWwgc3BlYykgdG8gMC1iYXNlZCBsZXZlbCAoTWFjKQotICAgICAgICBpbnQgbGV2ZWwgPSBt
X29iamVjdC0+aGllcmFyY2hpY2FsTGV2ZWwoKTsKKyAgICAgICAgaW50IGxldmVsID0gc2VsZi5h
eEJhY2tpbmdPYmplY3QtPmhpZXJhcmNoaWNhbExldmVsKCk7CiAgICAgICAgIGlmIChsZXZlbCA+
IDApCiAgICAgICAgICAgICBsZXZlbCAtPSAxOwogICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51
bWJlcldpdGhJbnQ6bGV2ZWxdOwogICAgIH0KICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eURpc2Nsb3NpbmdBdHRyaWJ1dGVdKQotICAgICAgICBy
ZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOm1fb2JqZWN0LT5pc0V4cGFuZGVkKCldOwor
ICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOnNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5pc0V4cGFuZGVkKCldOwogICAgIAotICAgIGlmIChtX29iamVjdC0+aXNMaXN0KCkgJiYg
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9u
QXR0cmlidXRlXSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTGlzdCgpICYmIFth
dHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlPcmllbnRhdGlvbkF0
dHJpYnV0ZV0pCiAgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlWZXJ0aWNhbE9yaWVudGF0
aW9uVmFsdWU7CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzog
QCJBWFNlbGVjdGVkVGV4dE1hcmtlclJhbmdlIl0pCiAgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0
TWFya2VyUmFuZ2VGb3JTZWxlY3Rpb25dOwogICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBp
c0VxdWFsVG9TdHJpbmc6IEAiQVhTdGFydFRleHRNYXJrZXIiXSkKLSAgICAgICAgcmV0dXJuIFtz
ZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246c3RhcnRPZkRvY3VtZW50KF9heEJhY2tp
bmdPYmplY3QtPmRvY3VtZW50KCkpXTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJG
b3JWaXNpYmxlUG9zaXRpb246c3RhcnRPZkRvY3VtZW50KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5k
b2N1bWVudCgpKV07CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogQCJB
WEVuZFRleHRNYXJrZXIiXSkKLSAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNp
YmxlUG9zaXRpb246ZW5kT2ZEb2N1bWVudChfYXhCYWNraW5nT2JqZWN0LT5kb2N1bWVudCgpKV07
CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOmVuZE9m
RG9jdW1lbnQoc2VsZi5heEJhY2tpbmdPYmplY3QtPmRvY3VtZW50KCkpXTsKICAgICAKICAgICBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUJsb2NrUXVv
dGVMZXZlbEF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aFVu
c2lnbmVkSW50Om1fb2JqZWN0LT5ibG9ja3F1b3RlTGV2ZWwoKV07CisgICAgICAgIHJldHVybiBb
TlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50OnNlbGYuYXhCYWNraW5nT2JqZWN0LT5ibG9j
a3F1b3RlTGV2ZWwoKV07CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpA
IkFYVGFibGVMZXZlbCJdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6
bV9vYmplY3QtPnRhYmxlTGV2ZWwoKV07CisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVy
V2l0aEludDpzZWxmLmF4QmFja2luZ09iamVjdC0+dGFibGVMZXZlbCgpXTsKICAgICAKICAgICBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlMaW5rZWRV
SUVsZW1lbnRzQXR0cmlidXRlXSkgewogICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgbGlua2VkVUlFbGVtZW50czsKLSAgICAgICAgbV9vYmpl
Y3QtPmxpbmtlZFVJRWxlbWVudHMobGlua2VkVUlFbGVtZW50cyk7CisgICAgICAgIHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5saW5rZWRVSUVsZW1lbnRzKGxpbmtlZFVJRWxlbWVudHMpOwogICAgICAg
ICByZXR1cm4gY29udmVydFRvTlNBcnJheShsaW5rZWRVSUVsZW1lbnRzKTsKICAgICB9CiAgICAg
CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5
U2VsZWN0ZWRBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhC
b29sOm1fb2JqZWN0LT5pc1NlbGVjdGVkKCldOworICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51
bWJlcldpdGhCb29sOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1NlbGVjdGVkKCldOwogICAgIAog
ICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eUFS
SUFDdXJyZW50QXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5jdXJyZW50VmFs
dWUoKTsKKyAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5jdXJyZW50VmFsdWUo
KTsKICAgICAKLSAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vz
c2liaWxpdHlTZXJ2ZXNBc1RpdGxlRm9yVUlFbGVtZW50c0F0dHJpYnV0ZV0gJiYgbV9vYmplY3Qt
PmlzTWVudUJ1dHRvbigpKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHVpRWxlbWVu
dCA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q+KCptX29iamVjdCkubWVudUZv
ck1lbnVCdXR0b24oKTsKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBO
U0FjY2Vzc2liaWxpdHlTZXJ2ZXNBc1RpdGxlRm9yVUlFbGVtZW50c0F0dHJpYnV0ZV0gJiYgc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmlzTWVudUJ1dHRvbigpKSB7CisgICAgICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIHVpRWxlbWVudCA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q+
KCpzZWxmLmF4QmFja2luZ09iamVjdCkubWVudUZvck1lbnVCdXR0b24oKTsKICAgICAgICAgaWYg
KHVpRWxlbWVudCkKICAgICAgICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6
dWlFbGVtZW50LT53cmFwcGVyKCldOwogICAgIH0KICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVRpdGxlVUlFbGVtZW50QXR0cmlidXRl
XSkgewotICAgICAgICBpZiAoIW1fb2JqZWN0LT5leHBvc2VzVGl0bGVVSUVsZW1lbnQoKSkKKyAg
ICAgICAgaWYgKCFzZWxmLmF4QmFja2luZ09iamVjdC0+ZXhwb3Nlc1RpdGxlVUlFbGVtZW50KCkp
CiAgICAgICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgICAgIEFYQ29yZU9iamVjdCogb2JqID0g
bV9vYmplY3QtPnRpdGxlVUlFbGVtZW50KCk7CisgICAgICAgIEFYQ29yZU9iamVjdCogb2JqID0g
c2VsZi5heEJhY2tpbmdPYmplY3QtPnRpdGxlVUlFbGVtZW50KCk7CiAgICAgICAgIGlmIChvYmop
CiAgICAgICAgICAgICByZXR1cm4gb2JqLT53cmFwcGVyKCk7CiAgICAgICAgIHJldHVybiBuaWw7
CiAgICAgfQogICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5VmFsdWVEZXNjcmlwdGlvbkF0dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYgKG1f
b2JqZWN0LT5pc01ldGVyKCkpCisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNN
ZXRlcigpKQogICAgICAgICAgICAgcmV0dXJuIFtzZWxmIHZhbHVlRGVzY3JpcHRpb25Gb3JNZXRl
cl07Ci0gICAgICAgIHJldHVybiBtX29iamVjdC0+dmFsdWVEZXNjcmlwdGlvbigpOworICAgICAg
ICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPnZhbHVlRGVzY3JpcHRpb24oKTsKICAgICB9
CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2li
aWxpdHlPcmllbnRhdGlvbkF0dHJpYnV0ZV0pIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9yaWVu
dGF0aW9uIGVsZW1lbnRPcmllbnRhdGlvbiA9IG1fb2JqZWN0LT5vcmllbnRhdGlvbigpOworICAg
ICAgICBBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb24gZWxlbWVudE9yaWVudGF0aW9uID0gc2VsZi5h
eEJhY2tpbmdPYmplY3QtPm9yaWVudGF0aW9uKCk7CiAgICAgICAgIGlmIChlbGVtZW50T3JpZW50
YXRpb24gPT0gQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uOjpWZXJ0aWNhbCkKICAgICAgICAgICAg
IHJldHVybiBOU0FjY2Vzc2liaWxpdHlWZXJ0aWNhbE9yaWVudGF0aW9uVmFsdWU7CiAgICAgICAg
IGlmIChlbGVtZW50T3JpZW50YXRpb24gPT0gQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uOjpIb3Jp
em9udGFsKQpAQCAtMjk2NiwyMCArMjk2OSwyMCBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVO
VEFUSU9OU19FTkQKICAgICB9CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzpOU0FjY2Vzc2liaWxpdHlIb3Jpem9udGFsU2Nyb2xsQmFyQXR0cmlidXRlXSkgewot
ICAgICAgICBBWENvcmVPYmplY3QqIHNjcm9sbEJhciA9IG1fb2JqZWN0LT5zY3JvbGxCYXIoQWNj
ZXNzaWJpbGl0eU9yaWVudGF0aW9uOjpIb3Jpem9udGFsKTsKKyAgICAgICAgQVhDb3JlT2JqZWN0
KiBzY3JvbGxCYXIgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+c2Nyb2xsQmFyKEFjY2Vzc2liaWxp
dHlPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCk7CiAgICAgICAgIGlmIChzY3JvbGxCYXIpCiAgICAg
ICAgICAgICByZXR1cm4gc2Nyb2xsQmFyLT53cmFwcGVyKCk7CiAgICAgICAgIHJldHVybiBuaWw7
CiAgICAgfQogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3Np
YmlsaXR5VmVydGljYWxTY3JvbGxCYXJBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIEFYQ29yZU9iamVj
dCogc2Nyb2xsQmFyID0gbV9vYmplY3QtPnNjcm9sbEJhcihBY2Nlc3NpYmlsaXR5T3JpZW50YXRp
b246OlZlcnRpY2FsKTsKKyAgICAgICAgQVhDb3JlT2JqZWN0KiBzY3JvbGxCYXIgPSBzZWxmLmF4
QmFja2luZ09iamVjdC0+c2Nyb2xsQmFyKEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbjo6VmVydGlj
YWwpOwogICAgICAgICBpZiAoc2Nyb2xsQmFyKQogICAgICAgICAgICAgcmV0dXJuIHNjcm9sbEJh
ci0+d3JhcHBlcigpOwogICAgICAgICByZXR1cm4gbmlsOwogICAgIH0KICAgICAKICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rp
b25BdHRyaWJ1dGVdKSB7Ci0gICAgICAgIHN3aXRjaCAobV9vYmplY3QtPnNvcnREaXJlY3Rpb24o
KSkgeworICAgICAgICBzd2l0Y2ggKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zb3J0RGlyZWN0aW9u
KCkpIHsKICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5U29ydERpcmVjdGlvbjo6QXNjZW5kaW5n
OgogICAgICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eUFzY2VuZGluZ1NvcnREaXJlY3Rp
b25WYWx1ZTsKICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5U29ydERpcmVjdGlvbjo6RGVzY2Vu
ZGluZzoKQEAgLTI5OTAsNDQgKzI5OTMsNDQgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRB
VElPTlNfRU5ECiAgICAgfQogICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5TGFuZ3VhZ2VBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4g
bV9vYmplY3QtPmxhbmd1YWdlKCk7CisgICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVj
dC0+bGFuZ3VhZ2UoKTsKICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eUV4cGFuZGVkQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIFtO
U051bWJlciBudW1iZXJXaXRoQm9vbDptX29iamVjdC0+aXNFeHBhbmRlZCgpXTsKKyAgICAgICAg
cmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpzZWxmLmF4QmFja2luZ09iamVjdC0+aXNF
eHBhbmRlZCgpXTsKICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
Ok5TQWNjZXNzaWJpbGl0eVJlcXVpcmVkQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIFtOU051
bWJlciBudW1iZXJXaXRoQm9vbDptX29iamVjdC0+aXNSZXF1aXJlZCgpXTsKKyAgICAgICAgcmV0
dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpzZWxmLmF4QmFja2luZ09iamVjdC0+aXNSZXF1
aXJlZCgpXTsKICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eUludmFsaWRBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gbV9vYmplY3Qt
PmludmFsaWRTdGF0dXMoKTsKKyAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5p
bnZhbGlkU3RhdHVzKCk7CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlPd25zQXR0cmlidXRlXSkgewogICAgICAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgYXJpYU93bnM7Ci0gICAgICAg
IG1fb2JqZWN0LT5hcmlhT3duc0VsZW1lbnRzKGFyaWFPd25zKTsKKyAgICAgICAgc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmFyaWFPd25zRWxlbWVudHMoYXJpYU93bnMpOwogICAgICAgICByZXR1cm4g
Y29udmVydFRvTlNBcnJheShhcmlhT3ducyk7CiAgICAgfQogICAgIAogICAgIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5QVJJQVBvc0luU2V0QXR0cmli
dXRlXSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50Om1fb2JqZWN0LT5w
b3NJblNldCgpXTsKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50OnNlbGYu
YXhCYWNraW5nT2JqZWN0LT5wb3NJblNldCgpXTsKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUFSSUFTZXRTaXplQXR0cmlidXRlXSkKLSAgICAg
ICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50Om1fb2JqZWN0LT5zZXRTaXplKCldOwor
ICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6c2VsZi5heEJhY2tpbmdPYmpl
Y3QtPnNldFNpemUoKV07CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlHcmFiYmVkQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIFtO
U051bWJlciBudW1iZXJXaXRoQm9vbDptX29iamVjdC0+aXNBUklBR3JhYmJlZCgpXTsKKyAgICAg
ICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpzZWxmLmF4QmFja2luZ09iamVjdC0+
aXNBUklBR3JhYmJlZCgpXTsKICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOk5TQWNjZXNzaWJpbGl0eURyb3BFZmZlY3RzQXR0cmlidXRlXSkgewotICAgICAgICBW
ZWN0b3I8U3RyaW5nPiBkcm9wRWZmZWN0cyA9IG1fb2JqZWN0LT5kZXRlcm1pbmVBUklBRHJvcEVm
ZmVjdHMoKTsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gZHJvcEVmZmVjdHMgPSBzZWxmLmF4QmFj
a2luZ09iamVjdC0+ZGV0ZXJtaW5lQVJJQURyb3BFZmZlY3RzKCk7CiAgICAgICAgIHJldHVybiBj
b252ZXJ0U3RyaW5nc1RvTlNBcnJheShkcm9wRWZmZWN0cyk7CiAgICAgfQogICAgIAogICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5UGxhY2Vob2xk
ZXJWYWx1ZUF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBtX29iamVjdC0+cGxhY2Vob2xkZXJW
YWx1ZSgpOworICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPnBsYWNlaG9sZGVy
VmFsdWUoKTsKIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5VmFsdWVBdXRvZmlsbEF2YWlsYWJsZUF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVy
biBAKG1fb2JqZWN0LT5pc1ZhbHVlQXV0b2ZpbGxBdmFpbGFibGUoKSk7CisgICAgICAgIHJldHVy
biBAKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1ZhbHVlQXV0b2ZpbGxBdmFpbGFibGUoKSk7CiAg
ICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxp
dHlWYWx1ZUF1dG9maWxsVHlwZUF0dHJpYnV0ZV0pIHsKLSAgICAgICAgc3dpdGNoIChtX29iamVj
dC0+dmFsdWVBdXRvZmlsbEJ1dHRvblR5cGUoKSkgeworICAgICAgICBzd2l0Y2ggKHNlbGYuYXhC
YWNraW5nT2JqZWN0LT52YWx1ZUF1dG9maWxsQnV0dG9uVHlwZSgpKSB7CiAgICAgICAgIGNhc2Ug
QXV0b0ZpbGxCdXR0b25UeXBlOjpOb25lOgogICAgICAgICAgICAgcmV0dXJuIEAibm9uZSI7CiAg
ICAgICAgIGNhc2UgQXV0b0ZpbGxCdXR0b25UeXBlOjpDcmVkZW50aWFsczoKQEAgLTMwNDIsNTMg
KzMwNDUsNTMgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgfQog
ICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5VmFsdWVBdXRvZmlsbGVkQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIEAobV9vYmplY3Qt
PmlzVmFsdWVBdXRvZmlsbGVkKCkpOworICAgICAgICByZXR1cm4gQChzZWxmLmF4QmFja2luZ09i
amVjdC0+aXNWYWx1ZUF1dG9maWxsZWQoKSk7CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUhhc1BvcHVwQXR0cmlidXRlXSkKLSAgICAgICAg
cmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDptX29iamVjdC0+aGFzUG9wdXAoKV07Cisg
ICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6c2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmhhc1BvcHVwKCldOwogCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzpOU0FjY2Vzc2liaWxpdHlEYXRldGltZVZhbHVlQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJu
IG1fb2JqZWN0LT5kYXRldGltZUF0dHJpYnV0ZVZhbHVlKCk7CisgICAgICAgIHJldHVybiBzZWxm
LmF4QmFja2luZ09iamVjdC0+ZGF0ZXRpbWVBdHRyaWJ1dGVWYWx1ZSgpOwogICAgIAogICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW5saW5lVGV4
dEF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBAKF9heEJhY2tpbmdPYmplY3QtPmlzSW5saW5l
VGV4dCgpKTsKKyAgICAgICAgcmV0dXJuIEAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzSW5saW5l
VGV4dCgpKTsKICAgICAKICAgICAvLyBBUklBIExpdmUgcmVnaW9uIGF0dHJpYnV0ZXMuCiAgICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlBUklBTGl2
ZUF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBtX29iamVjdC0+bGl2ZVJlZ2lvblN0YXR1cygp
OworICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPmxpdmVSZWdpb25TdGF0dXMo
KTsKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0
eUFSSUFSZWxldmFudEF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBtX29iamVjdC0+bGl2ZVJl
Z2lvblJlbGV2YW50KCk7CisgICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+bGl2
ZVJlZ2lvblJlbGV2YW50KCk7CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzpOU0FjY2Vzc2liaWxpdHlBUklBQXRvbWljQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIFtO
U051bWJlciBudW1iZXJXaXRoQm9vbDptX29iamVjdC0+bGl2ZVJlZ2lvbkF0b21pYygpXTsKKyAg
ICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpzZWxmLmF4QmFja2luZ09iamVj
dC0+bGl2ZVJlZ2lvbkF0b21pYygpXTsKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOk5TQWNjZXNzaWJpbGl0eUVsZW1lbnRCdXN5QXR0cmlidXRlXSkKLSAgICAgICAgcmV0
dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDptX29iamVjdC0+aXNCdXN5KCldOworICAgICAg
ICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5p
c0J1c3koKV07CiAgICAgCiAgICAgLy8gTWF0aE1MIEF0dHJpYnV0ZXMuCi0gICAgaWYgKG1fb2Jq
ZWN0LT5pc01hdGhFbGVtZW50KCkpIHsKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlz
TWF0aEVsZW1lbnQoKSkgewogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eU1hdGhSb290SW5kZXhBdHRyaWJ1dGVdKQotICAgICAgICAgICAg
cmV0dXJuIChtX29iamVjdC0+bWF0aFJvb3RJbmRleE9iamVjdCgpKSA/IG1fb2JqZWN0LT5tYXRo
Um9vdEluZGV4T2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CisgICAgICAgICAgICByZXR1cm4gKHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoUm9vdEluZGV4T2JqZWN0KCkpID8gc2VsZi5heEJhY2tp
bmdPYmplY3QtPm1hdGhSb290SW5kZXhPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKICAgICAgICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoUm9v
dFJhZGljYW5kQXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiAobV9vYmplY3QtPm1hdGhS
YWRpY2FuZE9iamVjdCgpKSA/IG1fb2JqZWN0LT5tYXRoUmFkaWNhbmRPYmplY3QoKS0+d3JhcHBl
cigpIDogMDsKKyAgICAgICAgICAgIHJldHVybiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhS
YWRpY2FuZE9iamVjdCgpKSA/IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoUmFkaWNhbmRPYmpl
Y3QoKS0+d3JhcHBlcigpIDogMDsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoRnJhY3Rpb25OdW1lcmF0b3JBdHRyaWJ1dGVdKQot
ICAgICAgICAgICAgcmV0dXJuIChtX29iamVjdC0+bWF0aE51bWVyYXRvck9iamVjdCgpKSA/IG1f
b2JqZWN0LT5tYXRoTnVtZXJhdG9yT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CisgICAgICAgICAg
ICByZXR1cm4gKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoTnVtZXJhdG9yT2JqZWN0KCkpID8g
c2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhOdW1lcmF0b3JPYmplY3QoKS0+d3JhcHBlcigpIDog
MDsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2li
aWxpdHlNYXRoRnJhY3Rpb25EZW5vbWluYXRvckF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1
cm4gKG1fb2JqZWN0LT5tYXRoRGVub21pbmF0b3JPYmplY3QoKSkgPyBtX29iamVjdC0+bWF0aERl
bm9taW5hdG9yT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CisgICAgICAgICAgICByZXR1cm4gKHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoRGVub21pbmF0b3JPYmplY3QoKSkgPyBzZWxmLmF4QmFj
a2luZ09iamVjdC0+bWF0aERlbm9taW5hdG9yT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7CiAgICAg
ICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWF0
aEJhc2VBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIChtX29iamVjdC0+bWF0aEJhc2VP
YmplY3QoKSkgPyBtX29iamVjdC0+bWF0aEJhc2VPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKKyAg
ICAgICAgICAgIHJldHVybiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhCYXNlT2JqZWN0KCkp
ID8gc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhCYXNlT2JqZWN0KCktPndyYXBwZXIoKSA6IDA7
CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5TWF0aFN1YnNjcmlwdEF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gKG1fb2JqZWN0
LT5tYXRoU3Vic2NyaXB0T2JqZWN0KCkpID8gbV9vYmplY3QtPm1hdGhTdWJzY3JpcHRPYmplY3Qo
KS0+d3JhcHBlcigpIDogMDsKKyAgICAgICAgICAgIHJldHVybiAoc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPm1hdGhTdWJzY3JpcHRPYmplY3QoKSkgPyBzZWxmLmF4QmFja2luZ09iamVjdC0+bWF0aFN1
YnNjcmlwdE9iamVjdCgpLT53cmFwcGVyKCkgOiAwOwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU1hdGhTdXBlcnNjcmlwdEF0dHJpYnV0
ZV0pCi0gICAgICAgICAgICByZXR1cm4gKG1fb2JqZWN0LT5tYXRoU3VwZXJzY3JpcHRPYmplY3Qo
KSkgPyBtX29iamVjdC0+bWF0aFN1cGVyc2NyaXB0T2JqZWN0KCktPndyYXBwZXIoKSA6IDA7Cisg
ICAgICAgICAgICByZXR1cm4gKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoU3VwZXJzY3JpcHRP
YmplY3QoKSkgPyBzZWxmLmF4QmFja2luZ09iamVjdC0+bWF0aFN1cGVyc2NyaXB0T2JqZWN0KCkt
PndyYXBwZXIoKSA6IDA7CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJp
bmc6TlNBY2Nlc3NpYmlsaXR5TWF0aFVuZGVyQXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVy
biAobV9vYmplY3QtPm1hdGhVbmRlck9iamVjdCgpKSA/IG1fb2JqZWN0LT5tYXRoVW5kZXJPYmpl
Y3QoKS0+d3JhcHBlcigpIDogMDsKKyAgICAgICAgICAgIHJldHVybiAoc2VsZi5heEJhY2tpbmdP
YmplY3QtPm1hdGhVbmRlck9iamVjdCgpKSA/IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoVW5k
ZXJPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoT3ZlckF0dHJpYnV0ZV0pCi0gICAgICAg
ICAgICByZXR1cm4gKG1fb2JqZWN0LT5tYXRoT3Zlck9iamVjdCgpKSA/IG1fb2JqZWN0LT5tYXRo
T3Zlck9iamVjdCgpLT53cmFwcGVyKCkgOiAwOworICAgICAgICAgICAgcmV0dXJuIChzZWxmLmF4
QmFja2luZ09iamVjdC0+bWF0aE92ZXJPYmplY3QoKSkgPyBzZWxmLmF4QmFja2luZ09iamVjdC0+
bWF0aE92ZXJPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoRmVuY2VkT3BlbkF0dHJpYnV0
ZV0pCi0gICAgICAgICAgICByZXR1cm4gbV9vYmplY3QtPm1hdGhGZW5jZWRPcGVuU3RyaW5nKCk7
CisgICAgICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhGZW5jZWRPcGVu
U3RyaW5nKCk7CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5TWF0aEZlbmNlZENsb3NlQXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVy
biBtX29iamVjdC0+bWF0aEZlbmNlZENsb3NlU3RyaW5nKCk7CisgICAgICAgICAgICByZXR1cm4g
c2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhGZW5jZWRDbG9zZVN0cmluZygpOwogICAgICAgICBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU1hdGhMaW5l
VGhpY2tuZXNzQXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVy
V2l0aEludGVnZXI6bV9vYmplY3QtPm1hdGhMaW5lVGhpY2tuZXNzKCldOworICAgICAgICAgICAg
cmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50ZWdlcjpzZWxmLmF4QmFja2luZ09iamVjdC0+
bWF0aExpbmVUaGlja25lc3MoKV07CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWF0aFBvc3RzY3JpcHRzQXR0cmlidXRlXSkKICAgICAg
ICAgICAgIHJldHVybiBbc2VsZiBhY2Nlc3NpYmlsaXR5TWF0aFBvc3RzY3JpcHRQYWlyc107CiAg
ICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5
TWF0aFByZXNjcmlwdHNBdHRyaWJ1dGVdKQpAQCAtMzA5NiwxMyArMzA5OSwxMyBAQCBBTExPV19E
RVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICB9CiAgICAgCiAgICAgaWYgKFthdHRy
aWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlFeHBhbmRlZFRleHRWYWx1
ZUF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBtX29iamVjdC0+ZXhwYW5kZWRUZXh0VmFsdWUo
KTsKKyAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5leHBhbmRlZFRleHRWYWx1
ZSgpOwogICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5RE9NSWRlbnRpZmllckF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBtX29iamVj
dC0+aWRlbnRpZmllckF0dHJpYnV0ZSgpOworICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdP
YmplY3QtPmlkZW50aWZpZXJBdHRyaWJ1dGUoKTsKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eURPTUNsYXNzTGlzdEF0dHJpYnV0ZV0pIHsKICAg
ICAgICAgVmVjdG9yPFN0cmluZz4gY2xhc3NMaXN0OwotICAgICAgICBtX29iamVjdC0+Y2xhc3NM
aXN0KGNsYXNzTGlzdCk7CisgICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5jbGFzc0xpc3Qo
Y2xhc3NMaXN0KTsKICAgICAgICAgcmV0dXJuIGNvbnZlcnRTdHJpbmdzVG9OU0FycmF5KGNsYXNz
TGlzdCk7CiAgICAgfQogICAgIApAQCAtMzExMiw3ICszMTE1LDcgQEAgQUxMT1dfREVQUkVDQVRF
RF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgCiAgICAgLy8gdGhpcyBpcyB1c2VkIG9ubHkgYnkg
RHVtcFJlbmRlclRyZWUgZm9yIHRlc3RpbmcKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOkAiQVhDbGlja1BvaW50Il0pCi0gICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1
ZVdpdGhQb2ludDptX29iamVjdC0+Y2xpY2tQb2ludCgpXTsKKyAgICAgICAgcmV0dXJuIFtOU1Zh
bHVlIHZhbHVlV2l0aFBvaW50OnNlbGYuYXhCYWNraW5nT2JqZWN0LT5jbGlja1BvaW50KCldOwog
ICAgIAogICAgIC8vIFRoaXMgaXMgdXNlZCBieSBEUlQgdG8gdmVyaWZ5IENTUzMgc3BlZWNoIHdv
cmtzLgogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWERSVFNwZWVj
aEF0dHJpYnV0ZSJdKQpAQCAtMzEyMCw3NCArMzEyMyw3NCBAQCBBTExPV19ERVBSRUNBVEVEX0lN
UExFTUVOVEFUSU9OU19FTkQKICAgICAKICAgICAvLyBVc2VkIGJ5IERSVCB0byBmaW5kIGFuIGFj
Y2Vzc2libGUgbm9kZSBieSBpdHMgZWxlbWVudCBpZC4KICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOkAiQVhEUlRFbGVtZW50SWRBdHRyaWJ1dGUiXSkKLSAgICAgICAgcmV0
dXJuIG1fb2JqZWN0LT5pZGVudGlmaWVyQXR0cmlidXRlKCk7CisgICAgICAgIHJldHVybiBzZWxm
LmF4QmFja2luZ09iamVjdC0+aWRlbnRpZmllckF0dHJpYnV0ZSgpOwogICAgIAogICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWEF1dG9jb21wbGV0ZVZhbHVlIl0pCi0g
ICAgICAgIHJldHVybiBtX29iamVjdC0+YXV0b0NvbXBsZXRlVmFsdWUoKTsKKyAgICAgICAgcmV0
dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5hdXRvQ29tcGxldGVWYWx1ZSgpOwogCiAgICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlQb3B1cFZhbHVl
QXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5wb3B1cFZhbHVlKCk7CisgICAg
ICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+cG9wdXBWYWx1ZSgpOwogCiAgICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpAIkFYS2V5U2hvcnRjdXRzVmFsdWUiXSkK
LSAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5rZXlTaG9ydGN1dHNWYWx1ZSgpOworICAgICAgICBy
ZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPmtleVNob3J0Y3V0c1ZhbHVlKCk7CiAgICAgCiAg
ICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpAIkFYQVJJQVByZXNzZWRJc1By
ZXNlbnQiXSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDptX29iamVj
dC0+cHJlc3NlZElzUHJlc2VudCgpXTsKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJX
aXRoQm9vbDpzZWxmLmF4QmFja2luZ09iamVjdC0+cHJlc3NlZElzUHJlc2VudCgpXTsKICAgICAK
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhJc011bHRpbGluZSJd
KQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOm1fb2JqZWN0LT5hcmlh
SXNNdWx0aWxpbmUoKV07CisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6
c2VsZi5heEJhY2tpbmdPYmplY3QtPmFyaWFJc011bHRpbGluZSgpXTsKICAgICAKICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhSZWFkT25seVZhbHVlIl0pCi0gICAg
ICAgIHJldHVybiBtX29iamVjdC0+cmVhZE9ubHlWYWx1ZSgpOworICAgICAgICByZXR1cm4gc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPnJlYWRPbmx5VmFsdWUoKTsKIAogICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWElzQWN0aXZlRGVzY2VuZGFudE9mRm9jdXNlZENvbnRh
aW5lciJdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOm1fb2JqZWN0
LT5pc0FjdGl2ZURlc2NlbmRhbnRPZkZvY3VzZWRDb250YWluZXIoKV07CisgICAgICAgIHJldHVy
biBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzQWN0aXZl
RGVzY2VuZGFudE9mRm9jdXNlZENvbnRhaW5lcigpXTsKIAogICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWERldGFpbHNFbGVtZW50cyJdKSB7CiAgICAgICAgIEFjY2Vz
c2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBkZXRhaWxzOwotICAg
ICAgICBtX29iamVjdC0+YXJpYURldGFpbHNFbGVtZW50cyhkZXRhaWxzKTsKKyAgICAgICAgc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmFyaWFEZXRhaWxzRWxlbWVudHMoZGV0YWlscyk7CiAgICAgICAg
IHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGRldGFpbHMpOwogICAgIH0KIAogICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5UmVsYXRpdmVGcmFtZUF0
dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0Ok5TUmVjdEZy
b21DR1JlY3QoX2F4QmFja2luZ09iamVjdC0+cmVsYXRpdmVGcmFtZSgpKV07CisgICAgICAgIHJl
dHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0Ok5TUmVjdEZyb21DR1JlY3Qoc2VsZi5heEJhY2tp
bmdPYmplY3QtPnJlbGF0aXZlRnJhbWUoKSldOwogCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzpAIkFYRXJyb3JNZXNzYWdlRWxlbWVudHMiXSkgewogICAgICAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgZXJyb3JNZXNzYWdl
czsKLSAgICAgICAgbV9vYmplY3QtPmFyaWFFcnJvck1lc3NhZ2VFbGVtZW50cyhlcnJvck1lc3Nh
Z2VzKTsKKyAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPmFyaWFFcnJvck1lc3NhZ2VFbGVt
ZW50cyhlcnJvck1lc3NhZ2VzKTsKICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoZXJy
b3JNZXNzYWdlcyk7CiAgICAgfQogCiAgICAgLy8gTXVsdGktc2VsZWN0YWJsZQogICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SXNNdWx0aVNlbGVj
dGFibGVBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29s
Om1fb2JqZWN0LT5pc011bHRpU2VsZWN0YWJsZSgpXTsKKyAgICAgICAgcmV0dXJuIFtOU051bWJl
ciBudW1iZXJXaXRoQm9vbDpzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNdWx0aVNlbGVjdGFibGUo
KV07CiAgICAgCiAgICAgLy8gRG9jdW1lbnQgYXR0cmlidXRlcwogICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RG9jdW1lbnRVUklBdHRyaWJ1dGVd
KQotICAgICAgICByZXR1cm4gbV9vYmplY3QtPmRvY3VtZW50VVJJKCk7CisgICAgICAgIHJldHVy
biBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnRVUkkoKTsKICAgICAKICAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eURvY3VtZW50RW5jb2Rp
bmdBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gbV9vYmplY3QtPmRvY3VtZW50RW5jb2Rpbmco
KTsKKyAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5kb2N1bWVudEVuY29kaW5n
KCk7CiAgICAgCiAgICAgLy8gQXJpYSBjb250cm9scyBlbGVtZW50CiAgICAgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlBcmlhQ29udHJvbHNBdHRyaWJ1
dGVdKSB7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJl
blZlY3RvciBhcmlhQ29udHJvbHM7Ci0gICAgICAgIG1fb2JqZWN0LT5hcmlhQ29udHJvbHNFbGVt
ZW50cyhhcmlhQ29udHJvbHMpOworICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+YXJpYUNv
bnRyb2xzRWxlbWVudHMoYXJpYUNvbnRyb2xzKTsKICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05T
QXJyYXkoYXJpYUNvbnRyb2xzKTsKICAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUZvY3VzYWJsZUFuY2VzdG9yQXR0cmlidXRlXSkg
ewotICAgICAgICBBWENvcmVPYmplY3QqIG9iamVjdCA9IG1fb2JqZWN0LT5mb2N1c2FibGVBbmNl
c3RvcigpOworICAgICAgICBBWENvcmVPYmplY3QqIG9iamVjdCA9IHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5mb2N1c2FibGVBbmNlc3RvcigpOwogICAgICAgICByZXR1cm4gb2JqZWN0ID8gb2JqZWN0
LT53cmFwcGVyKCkgOiBuaWw7CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlFZGl0YWJsZUFuY2VzdG9yQXR0cmlidXRlXSkgewot
ICAgICAgICBBWENvcmVPYmplY3QqIG9iamVjdCA9IG1fb2JqZWN0LT5lZGl0YWJsZUFuY2VzdG9y
KCk7CisgICAgICAgIEFYQ29yZU9iamVjdCogb2JqZWN0ID0gc2VsZi5heEJhY2tpbmdPYmplY3Qt
PmVkaXRhYmxlQW5jZXN0b3IoKTsKICAgICAgICAgcmV0dXJuIG9iamVjdCA/IG9iamVjdC0+d3Jh
cHBlcigpIDogbmlsOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5SGlnaGVzdEVkaXRhYmxlQW5jZXN0b3JBdHRyaWJ1dGVdKSB7
Ci0gICAgICAgIEFYQ29yZU9iamVjdCogb2JqZWN0ID0gbV9vYmplY3QtPmhpZ2hlc3RFZGl0YWJs
ZUFuY2VzdG9yKCk7CisgICAgICAgIEFYQ29yZU9iamVjdCogb2JqZWN0ID0gc2VsZi5heEJhY2tp
bmdPYmplY3QtPmhpZ2hlc3RFZGl0YWJsZUFuY2VzdG9yKCk7CiAgICAgICAgIHJldHVybiBvYmpl
Y3QgPyBvYmplY3QtPndyYXBwZXIoKSA6IG5pbDsKICAgICB9CiAKQEAgLTMyMDksNyArMzIxMiw3
IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgIGlmICghW3NlbGYg
dXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAg
ICBhdXRvIGZvY3VzZWRPYmplY3QgPSBfYXhCYWNraW5nT2JqZWN0LT5mb2N1c2VkVUlFbGVtZW50
KCk7CisgICAgYXV0byBmb2N1c2VkT2JqZWN0ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmZvY3Vz
ZWRVSUVsZW1lbnQoKTsKICAgICBpZiAoIWZvY3VzZWRPYmplY3QpCiAgICAgICAgIHJldHVybiBu
aWw7CiAgICAgCkBAIC0zMjIxLDggKzMyMjQsOCBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVO
VEFUSU9OU19FTkQKICAgICBpZiAoIVtzZWxmIHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9yZV0pCiAg
ICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0gICAgX2F4QmFja2luZ09iamVjdC0+dXBkYXRlQ2hp
bGRyZW5JZk5lY2Vzc2FyeSgpOwotICAgIEFYQ29yZU9iamVjdCogYXhPYmplY3QgPSBfYXhCYWNr
aW5nT2JqZWN0LT5hY2Nlc3NpYmlsaXR5SGl0VGVzdChJbnRQb2ludChwb2ludCkpOworICAgIHNl
bGYuYXhCYWNraW5nT2JqZWN0LT51cGRhdGVDaGlsZHJlbklmTmVjZXNzYXJ5KCk7CisgICAgQVhD
b3JlT2JqZWN0KiBheE9iamVjdCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5hY2Nlc3NpYmlsaXR5
SGl0VGVzdChJbnRQb2ludChwb2ludCkpOwogICAgIGlmIChheE9iamVjdCkgewogICAgICAgICBp
ZiAoYXhPYmplY3QtPmlzQXR0YWNobWVudCgpICYmIFtheE9iamVjdC0+d3JhcHBlcigpIGF0dGFj
aG1lbnRWaWV3XSkKICAgICAgICAgICAgIHJldHVybiBbYXhPYmplY3QtPndyYXBwZXIoKSBhdHRh
Y2htZW50Vmlld107CkBAIC0zMjQyLDIwICszMjQ1LDIwIEBAIEFMTE9XX0RFUFJFQ0FURURfSU1Q
TEVNRU5UQVRJT05TX0VORAogICAgICAgICByZXR1cm4gWUVTOwogICAgIAogICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eUZvY3VzZWRBdHRyaWJ1
dGVdKQotICAgICAgICByZXR1cm4gbV9vYmplY3QtPmNhblNldEZvY3VzQXR0cmlidXRlKCk7Cisg
ICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+Y2FuU2V0Rm9jdXNBdHRyaWJ1dGUo
KTsKICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vz
c2liaWxpdHlWYWx1ZUF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBtX29iamVjdC0+Y2FuU2V0
VmFsdWVBdHRyaWJ1dGUoKTsKKyAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5j
YW5TZXRWYWx1ZUF0dHJpYnV0ZSgpOwogICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkQXR0cmlidXRlXSkKLSAgICAgICAg
cmV0dXJuIG1fb2JqZWN0LT5jYW5TZXRTZWxlY3RlZEF0dHJpYnV0ZSgpOworICAgICAgICByZXR1
cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPmNhblNldFNlbGVjdGVkQXR0cmlidXRlKCk7CiAgICAg
CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5
U2VsZWN0ZWRDaGlsZHJlbkF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBtX29iamVjdC0+Y2Fu
U2V0U2VsZWN0ZWRDaGlsZHJlbkF0dHJpYnV0ZSgpOworICAgICAgICByZXR1cm4gc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmNhblNldFNlbGVjdGVkQ2hpbGRyZW5BdHRyaWJ1dGUoKTsKICAgICAKICAg
ICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eURpc2Ns
b3NpbmdBdHRyaWJ1dGVdCiAgICAgICAgIHx8IFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzpOU0FjY2Vzc2liaWxpdHlFeHBhbmRlZEF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBtX29i
amVjdC0+Y2FuU2V0RXhwYW5kZWRBdHRyaWJ1dGUoKTsKKyAgICAgICAgcmV0dXJuIHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5jYW5TZXRFeHBhbmRlZEF0dHJpYnV0ZSgpOwogICAgIAogICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRSb3dz
QXR0cmlidXRlXSkKICAgICAgICAgcmV0dXJuIFlFUzsKQEAgLTMyNjMsMTUgKzMyNjYsMTUgQEAg
QUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0QXR0cmlidXRl
XSB8fAogICAgICAgICBbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJp
bGl0eVNlbGVjdGVkVGV4dFJhbmdlQXR0cmlidXRlXSB8fAogICAgICAgICBbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVZpc2libGVDaGFyYWN0ZXJSYW5nZUF0
dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBtX29iamVjdC0+Y2FuU2V0VGV4dFJhbmdlQXR0cmli
dXRlcygpOworICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPmNhblNldFRleHRS
YW5nZUF0dHJpYnV0ZXMoKTsKICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOk5TQWNjZXNzaWJpbGl0eUdyYWJiZWRBdHRyaWJ1dGVdKQogICAgICAgICByZXR1cm4g
WUVTOwogICAgIAotICAgIGlmIChtX29iamVjdC0+aXNXZWJBcmVhKCkgJiYgW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVByZXZlbnRLZXlib2FyZERPTUV2ZW50
RGlzcGF0Y2hBdHRyaWJ1dGVdKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNXZWJB
cmVhKCkgJiYgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVBy
ZXZlbnRLZXlib2FyZERPTUV2ZW50RGlzcGF0Y2hBdHRyaWJ1dGVdKQogICAgICAgICByZXR1cm4g
WUVTOwogICAgIAotICAgIGlmIChtX29iamVjdC0+aXNXZWJBcmVhKCkgJiYgW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUNhcmV0QnJvd3NpbmdFbmFibGVkQXR0
cmlidXRlXSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzV2ViQXJlYSgpICYmIFth
dHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDYXJldEJyb3dzaW5n
RW5hYmxlZEF0dHJpYnV0ZV0pCiAgICAgICAgIHJldHVybiBZRVM7CiAgICAgCiAgICAgcmV0dXJu
IE5POwpAQCAtMzI5Myw5ICszMjk2LDkgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElP
TlNfRU5ECiAgICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQogICAgICAg
ICByZXR1cm4gWUVTOwogICAgIAotICAgIGlmIChfYXhCYWNraW5nT2JqZWN0LT5pc0F0dGFjaG1l
bnQoKSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzQXR0YWNobWVudCgpKQogICAg
ICAgICByZXR1cm4gW1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVk
XTsKLSAgICByZXR1cm4gX2F4QmFja2luZ09iamVjdC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgp
OworICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+YWNjZXNzaWJpbGl0eUlzSWdub3Jl
ZCgpOwogfQogCiBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19CRUdJTgpAQCAtMzMw
NSw3ICszMzA4LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAg
aWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQogICAgICAgICByZXR1cm4gbmls
OwogICAgIAotICAgIGlmIChtX29iamVjdC0+aXNBdHRhY2htZW50KCkpCisgICAgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAg
ICAKICAgICBzdGF0aWMgTlNBcnJheSogcGFyYW1BdHRycyA9IG5pbDsKQEAgLTMzODQsMTkgKzMz
ODcsMTkgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgIFt0
ZW1wQXJyYXkgcmVsZWFzZV07CiAgICAgfQogICAgIAotICAgIGlmIChtX29iamVjdC0+aXNQYXNz
d29yZEZpZWxkKCkpCisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1Bhc3N3b3JkRmll
bGQoKSkKICAgICAgICAgcmV0dXJuIEBbIE5TQWNjZXNzaWJpbGl0eVVJRWxlbWVudHNGb3JTZWFy
Y2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlIF07CiAgICAgCi0gICAgaWYgKG1fb2Jq
ZWN0LT5pc1RleHRDb250cm9sKCkpCisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1Rl
eHRDb250cm9sKCkpCiAgICAgICAgIHJldHVybiB0ZXh0UGFyYW1BdHRyczsKICAgICAKLSAgICBp
ZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxlPigqbV9vYmplY3QpICYmIGRvd25jYXN0PEFjY2Vzc2li
aWxpdHlUYWJsZT4oKm1fb2JqZWN0KS5pc0V4cG9zYWJsZVRocm91Z2hBY2Nlc3NpYmlsaXR5KCkp
CisgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KSAm
JiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpzZWxmLmF4QmFja2luZ09iamVjdCkuaXNF
eHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpKQogICAgICAgICByZXR1cm4gdGFibGVQYXJh
bUF0dHJzOwogICAgIAotICAgIGlmIChtX29iamVjdC0+aXNNZW51UmVsYXRlZCgpKQorICAgIGlm
IChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNZW51UmVsYXRlZCgpKQogICAgICAgICByZXR1cm4g
bmlsOwogICAgIAotICAgIGlmIChtX29iamVjdC0+aXNXZWJBcmVhKCkpCisgICAgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc1dlYkFyZWEoKSkKICAgICAgICAgcmV0dXJuIHdlYkFyZWFQYXJh
bUF0dHJzOwogICAgIAogICAgIHJldHVybiBwYXJhbUF0dHJzOwpAQCAtMzQxOCwxMCArMzQyMSwx
MCBAQCBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgogICAgIGlmICghW3NlbGYg
dXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGlm
IChtX29iamVjdC0+aXNBdHRhY2htZW50KCkpCisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5pc0F0dGFjaG1lbnQoKSkKICAgICAgICAgW1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3Np
YmlsaXR5UGVyZm9ybUFjdGlvbjpOU0FjY2Vzc2liaWxpdHlQcmVzc0FjdGlvbl07CiAgICAgZWxz
ZQotICAgICAgICBtX29iamVjdC0+cHJlc3MoKTsKKyAgICAgICAgc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPnByZXNzKCk7CiB9CiAKIC0gKHZvaWQpYWNjZXNzaWJpbGl0eVBlcmZvcm1JbmNyZW1lbnRB
Y3Rpb24KQEAgLTM0MzYsMTAgKzM0MzksMTAgQEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElP
TlNfQkVHSU4KICAgICBpZiAoIVtzZWxmIHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9yZV0pCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzQXR0YWNobWVudCgpKQorICAg
IGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNBdHRhY2htZW50KCkpCiAgICAgICAgIFtbc2Vs
ZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0eVBlcmZvcm1BY3Rpb246TlNBY2Nlc3NpYmls
aXR5SW5jcmVtZW50QWN0aW9uXTsKICAgICBlbHNlCi0gICAgICAgIG1fb2JqZWN0LT5pbmNyZW1l
bnQoKTsKKyAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPmluY3JlbWVudCgpOwogfQogCiAt
ICh2b2lkKWFjY2Vzc2liaWxpdHlQZXJmb3JtRGVjcmVtZW50QWN0aW9uCkBAIC0zNDU0LDE4ICsz
NDU3LDE4IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCiAgICAgaWYgKCFb
c2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgaWYgKG1fb2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdP
YmplY3QtPmlzQXR0YWNobWVudCgpKQogICAgICAgICBbW3NlbGYgYXR0YWNobWVudFZpZXddIGFj
Y2Vzc2liaWxpdHlQZXJmb3JtQWN0aW9uOk5TQWNjZXNzaWJpbGl0eURlY3JlbWVudEFjdGlvbl07
CiAgICAgZWxzZQotICAgICAgICBtX29iamVjdC0+ZGVjcmVtZW50KCk7CisgICAgICAgIHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5kZWNyZW1lbnQoKTsKIH0KIAogQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfRU5ECiAKIC0gKHZvaWQpYWNjZXNzaWJpbGl0eVBlcmZvcm1TaG93TWVudUFjdGlv
bgogewotICAgIGlmIChtX29iamVjdC0+cm9sZVZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6
OkNvbWJvQm94KQotICAgICAgICBtX29iamVjdC0+c2V0SXNFeHBhbmRlZCh0cnVlKTsKKyAgICBp
ZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xl
OjpDb21ib0JveCkKKyAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPnNldElzRXhwYW5kZWQo
dHJ1ZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgcGVyZm9ybWVk
IGluIGFuIGl0ZXJhdGlvbiBvZiB0aGUgcnVuIGxvb3AgdGhhdCBkaWQgbm90IHN0YXJ0IGZyb20g
YW4gQVggY2FsbC4KICAgICAgICAgLy8gSWYgaXQncyB0aGUgc2FtZSBydW4gbG9vcCBpdGVyYXRp
b24sIHRoZSBtZW51IG9wZW4gbm90aWZpY2F0aW9uIHdvbid0IGJlIHNlbnQKQEAgLTM0ODQsMjEg
KzM0ODcsMjEgQEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiB7CiAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKICAgICAKLSAgICBpZiAoIV9heEJhY2tpbmdPYmplY3QpCisg
ICAgaWYgKCFzZWxmLmF4QmFja2luZ09iamVjdCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAg
IFBhZ2UqIHBhZ2UgPSBfYXhCYWNraW5nT2JqZWN0LT5wYWdlKCk7CisgICAgUGFnZSogcGFnZSA9
IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBy
ZXR1cm47CiAgICAgCi0gICAgSW50UmVjdCByZWN0ID0gc25hcHBlZEludFJlY3QoX2F4QmFja2lu
Z09iamVjdC0+ZWxlbWVudFJlY3QoKSk7Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBfYXhC
YWNraW5nT2JqZWN0LT5kb2N1bWVudEZyYW1lVmlldygpOworICAgIEludFJlY3QgcmVjdCA9IHNu
YXBwZWRJbnRSZWN0KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5lbGVtZW50UmVjdCgpKTsKKyAgICBG
cmFtZVZpZXcqIGZyYW1lVmlldyA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5kb2N1bWVudEZyYW1l
VmlldygpOwogICAgIAogICAgIC8vIE9uIFdLMiwgd2UgbmVlZCB0byBhY2NvdW50IGZvciB0aGUg
c2Nyb2xsIHBvc2l0aW9uIHdpdGggcmVnYXJkcyB0byByb290IHZpZXcuCiAgICAgLy8gT24gV0sx
LCB3ZSBuZWVkIHRvIGNvbnZlcnQgcmVjdCB0byB3aW5kb3cgc3BhY2UgdG8gbWF0Y2ggbW91c2Ug
Y2xpY2tpbmcuCiAgICAgaWYgKGZyYW1lVmlldykgewogICAgICAgICAvLyBGaW5kIHRoZSBhcHBy
b3ByaWF0ZSBzY3JvbGwgdmlldyB0byB1c2UgdG8gY29udmVydCB0aGUgY29udGVudHMgdG8gdGhl
IHdpbmRvdy4KLSAgICAgICAgZm9yIChhdXRvKiBwYXJlbnQgPSBfYXhCYWNraW5nT2JqZWN0LT5w
YXJlbnRPYmplY3QoKTsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpKSB7
CisgICAgICAgIGZvciAoYXV0byogcGFyZW50ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnBhcmVu
dE9iamVjdCgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkpIHsKICAg
ICAgICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldz4oKnBhcmVudCkpIHsKICAg
ICAgICAgICAgICAgICBpZiAoYXV0byBzY3JvbGxWaWV3ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0
eVNjcm9sbFZpZXc+KCpwYXJlbnQpLnNjcm9sbFZpZXcoKSkgewogICAgICAgICAgICAgICAgICAg
ICBpZiAoIWZyYW1lVmlldy0+cGxhdGZvcm1XaWRnZXQoKSkKQEAgLTM1MTYsMTcgKzM1MTksMTcg
QEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAKIC0gKHZvaWQpYWNjZXNzaWJp
bGl0eVNjcm9sbFRvVmlzaWJsZQogewotICAgIG1fb2JqZWN0LT5zY3JvbGxUb01ha2VWaXNpYmxl
KCk7CisgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPnNjcm9sbFRvTWFrZVZpc2libGUoKTsKIH0K
IAogLSAodm9pZClfYWNjZXNzaWJpbGl0eVNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXM6
KE5TUmVjdClyZWN0CiB7Ci0gICAgbV9vYmplY3QtPnNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3Vi
Rm9jdXMoSW50UmVjdChyZWN0KSk7CisgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPnNjcm9sbFRv
TWFrZVZpc2libGVXaXRoU3ViRm9jdXMoSW50UmVjdChyZWN0KSk7CiB9CiAKIC0gKHZvaWQpX2Fj
Y2Vzc2liaWxpdHlTY3JvbGxUb0dsb2JhbFBvaW50OihOU1BvaW50KXBvaW50CiB7Ci0gICAgbV9v
YmplY3QtPnNjcm9sbFRvR2xvYmFsUG9pbnQoSW50UG9pbnQocG9pbnQpKTsKKyAgICBzZWxmLmF4
QmFja2luZ09iamVjdC0+c2Nyb2xsVG9HbG9iYWxQb2ludChJbnRQb2ludChwb2ludCkpOwogfQog
CiBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19CRUdJTgpAQCAtMzU2Nyw3ICszNTcw
LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgaWYgKCFbc2Vs
ZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQogICAgICAgICByZXR1cm4gTk87CiAgICAgCi0g
ICAgcmV0dXJuIG1fb2JqZWN0LT5yZXBsYWNlVGV4dEluUmFuZ2Uoc3RyaW5nLCBQbGFpblRleHRS
YW5nZShyYW5nZSkpOworICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+cmVwbGFjZVRl
eHRJblJhbmdlKHN0cmluZywgUGxhaW5UZXh0UmFuZ2UocmFuZ2UpKTsKIH0KIAogLSAoQk9PTClh
Y2Nlc3NpYmlsaXR5SW5zZXJ0VGV4dDooTlNTdHJpbmcgKil0ZXh0CkBAIC0zNTc1LDcgKzM1Nzgs
NyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICBpZiAoIVtzZWxm
IHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9yZV0pCiAgICAgICAgIHJldHVybiBOTzsKIAotICAgIHJl
dHVybiBtX29iamVjdC0+aW5zZXJ0VGV4dCh0ZXh0KTsKKyAgICByZXR1cm4gc2VsZi5heEJhY2tp
bmdPYmplY3QtPmluc2VydFRleHQodGV4dCk7CiB9CiAKIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVN
RU5UQVRJT05TX0JFR0lOCkBAIC0zNjI0LDQ3ICszNjI3LDQ3IEBAIEFMTE9XX0RFUFJFQ0FURURf
SU1QTEVNRU5UQVRJT05TX0VORAogICAgIC8vIGhhbmRsZSB0aGUgY29tbWFuZAogICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IEAiQVhTZWxlY3RlZFRleHRNYXJrZXJSYW5n
ZSJdKSB7CiAgICAgICAgIEFTU0VSVCh0ZXh0TWFya2VyUmFuZ2UpOwotICAgICAgICBtX29iamVj
dC0+c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZShbc2VsZiB2aXNpYmxlUG9zaXRpb25S
YW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdKTsKKyAgICAgICAgc2VsZi5h
eEJhY2tpbmdPYmplY3QtPnNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UoW3NlbGYgdmlz
aWJsZVBvc2l0aW9uUmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXSk7CiAg
ICAgfSBlbHNlIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJp
bGl0eUZvY3VzZWRBdHRyaWJ1dGVdKSB7CiAgICAgICAgIFtzZWxmIGJhc2VBY2Nlc3NpYmlsaXR5
U2V0Rm9jdXM6W251bWJlciBib29sVmFsdWVdXTsKICAgICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGVdKSB7Ci0g
ICAgICAgIGlmIChudW1iZXIgJiYgbV9vYmplY3QtPmNhblNldE51bWVyaWNWYWx1ZSgpKQotICAg
ICAgICAgICAgbV9vYmplY3QtPnNldFZhbHVlKFtudW1iZXIgZmxvYXRWYWx1ZV0pOworICAgICAg
ICBpZiAobnVtYmVyICYmIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5jYW5TZXROdW1lcmljVmFsdWUo
KSkKKyAgICAgICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZXRWYWx1ZShbbnVtYmVyIGZs
b2F0VmFsdWVdKTsKICAgICAgICAgZWxzZSBpZiAoc3RyaW5nKQotICAgICAgICAgICAgbV9vYmpl
Y3QtPnNldFZhbHVlKHN0cmluZyk7CisgICAgICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+
c2V0VmFsdWUoc3RyaW5nKTsKICAgICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRBdHRyaWJ1dGVdKSB7CiAgICAgICAgIGlm
ICghbnVtYmVyKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX29iamVjdC0+c2V0U2Vs
ZWN0ZWQoW251bWJlciBib29sVmFsdWVdKTsKKyAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3Qt
PnNldFNlbGVjdGVkKFtudW1iZXIgYm9vbFZhbHVlXSk7CiAgICAgfSBlbHNlIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkQ2hpbGRyZW5B
dHRyaWJ1dGVdKSB7CiAgICAgICAgIGlmICghYXJyYXkpCiAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGlmIChtX29iamVjdC0+cm9sZVZhbHVlKCkgIT0gQWNjZXNzaWJpbGl0eVJvbGU6Okxp
c3RCb3gpCisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+cm9sZVZhbHVlKCkgIT0g
QWNjZXNzaWJpbGl0eVJvbGU6Okxpc3RCb3gpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBzZWxlY3Rl
ZENoaWxkcmVuOwogICAgICAgICBjb252ZXJ0VG9WZWN0b3IoYXJyYXksIHNlbGVjdGVkQ2hpbGRy
ZW4pOwotICAgICAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5TGlzdEJveD4oKm1fb2JqZWN0KS5z
ZXRTZWxlY3RlZENoaWxkcmVuKHNlbGVjdGVkQ2hpbGRyZW4pOwotICAgIH0gZWxzZSBpZiAobV9v
YmplY3QtPmlzVGV4dENvbnRyb2woKSkgeworICAgICAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5
TGlzdEJveD4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KS5zZXRTZWxlY3RlZENoaWxkcmVuKHNlbGVj
dGVkQ2hpbGRyZW4pOworICAgIH0gZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVGV4
dENvbnRyb2woKSkgewogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
OiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRBdHRyaWJ1dGVdKSB7Ci0gICAgICAgICAgICBt
X29iamVjdC0+c2V0U2VsZWN0ZWRUZXh0KHN0cmluZyk7CisgICAgICAgICAgICBzZWxmLmF4QmFj
a2luZ09iamVjdC0+c2V0U2VsZWN0ZWRUZXh0KHN0cmluZyk7CiAgICAgICAgIH0gZWxzZSBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRl
eHRSYW5nZUF0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIG1fb2JqZWN0LT5zZXRTZWxlY3RlZFRl
eHRSYW5nZShQbGFpblRleHRSYW5nZShyYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoKSk7Cisg
ICAgICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+c2V0U2VsZWN0ZWRUZXh0UmFuZ2UoUGxh
aW5UZXh0UmFuZ2UocmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCkpOwogICAgICAgICB9IGVs
c2UgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5Vmlz
aWJsZUNoYXJhY3RlclJhbmdlQXR0cmlidXRlXSkgewotICAgICAgICAgICAgbV9vYmplY3QtPm1h
a2VSYW5nZVZpc2libGUoUGxhaW5UZXh0UmFuZ2UocmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0
aCkpOworICAgICAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPm1ha2VSYW5nZVZpc2libGUo
UGxhaW5UZXh0UmFuZ2UocmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCkpOwogICAgICAgICB9
CiAgICAgfSBlbHNlIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3Np
YmlsaXR5RGlzY2xvc2luZ0F0dHJpYnV0ZV0gfHwgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eUV4cGFuZGVkQXR0cmlidXRlXSkKLSAgICAgICAgbV9vYmplY3Qt
PnNldElzRXhwYW5kZWQoW251bWJlciBib29sVmFsdWVdKTsKKyAgICAgICAgc2VsZi5heEJhY2tp
bmdPYmplY3QtPnNldElzRXhwYW5kZWQoW251bWJlciBib29sVmFsdWVdKTsKICAgICBlbHNlIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRS
b3dzQXR0cmlidXRlXSkgewogICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3Igc2VsZWN0ZWRSb3dzOwogICAgICAgICBjb252ZXJ0VG9WZWN0b3Io
YXJyYXksIHNlbGVjdGVkUm93cyk7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNUcmVlKCkgfHwg
KGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKm1fb2JqZWN0KSAmJiBkb3duY2FzdDxBY2Nlc3NpYmls
aXR5VGFibGU+KCptX29iamVjdCkuaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpKSkK
LSAgICAgICAgICAgIG1fb2JqZWN0LT5zZXRTZWxlY3RlZFJvd3Moc2VsZWN0ZWRSb3dzKTsKKyAg
ICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1RyZWUoKSB8fCAoaXM8QWNjZXNzaWJp
bGl0eVRhYmxlPigqc2VsZi5heEJhY2tpbmdPYmplY3QpICYmIGRvd25jYXN0PEFjY2Vzc2liaWxp
dHlUYWJsZT4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KS5pc0V4cG9zYWJsZVRocm91Z2hBY2Nlc3Np
YmlsaXR5KCkpKQorICAgICAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPnNldFNlbGVjdGVk
Um93cyhzZWxlY3RlZFJvd3MpOwogICAgIH0gZWxzZSBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUdyYWJiZWRBdHRyaWJ1dGVdKQotICAgICAgICBtX29i
amVjdC0+c2V0QVJJQUdyYWJiZWQoW251bWJlciBib29sVmFsdWVdKTsKLSAgICBlbHNlIGlmICht
X29iamVjdC0+aXNXZWJBcmVhKCkgJiYgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eVByZXZlbnRLZXlib2FyZERPTUV2ZW50RGlzcGF0Y2hBdHRyaWJ1dGVdKQot
ICAgICAgICBtX29iamVjdC0+c2V0UHJldmVudEtleWJvYXJkRE9NRXZlbnREaXNwYXRjaChbbnVt
YmVyIGJvb2xWYWx1ZV0pOwotICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc1dlYkFyZWEoKSAmJiBb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q2FyZXRCcm93c2lu
Z0VuYWJsZWRBdHRyaWJ1dGVdKQotICAgICAgICBtX29iamVjdC0+c2V0Q2FyZXRCcm93c2luZ0Vu
YWJsZWQoW251bWJlciBib29sVmFsdWVdKTsKKyAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3Qt
PnNldEFSSUFHcmFiYmVkKFtudW1iZXIgYm9vbFZhbHVlXSk7CisgICAgZWxzZSBpZiAoc2VsZi5h
eEJhY2tpbmdPYmplY3QtPmlzV2ViQXJlYSgpICYmIFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlQcmV2ZW50S2V5Ym9hcmRET01FdmVudERpc3BhdGNoQXR0cmli
dXRlXSkKKyAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPnNldFByZXZlbnRLZXlib2FyZERP
TUV2ZW50RGlzcGF0Y2goW251bWJlciBib29sVmFsdWVdKTsKKyAgICBlbHNlIGlmIChzZWxmLmF4
QmFja2luZ09iamVjdC0+aXNXZWJBcmVhKCkgJiYgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eUNhcmV0QnJvd3NpbmdFbmFibGVkQXR0cmlidXRlXSkKKyAgICAg
ICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPnNldENhcmV0QnJvd3NpbmdFbmFibGVkKFtudW1iZXIg
Ym9vbFZhbHVlXSk7CiB9CiAKIC8vIFVzZWQgdG8gc2V0IGF0dHJpYnV0ZXMgc3luY2hyb25vdXNs
eSBvbiBhY2Nlc3NpYmlsaXR5IGVsZW1lbnRzIHdpdGhpbiB0ZXN0cy4KQEAgLTM3MTYsNyArMzcx
OSw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogLSAoTlNBdHRyaWJ1
dGVkU3RyaW5nKilkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclJhbmdlOihOU1JhbmdlKXJhbmdlCiB7
CiAgICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlID0gUGxhaW5UZXh0UmFuZ2UocmFuZ2UubG9j
YXRpb24sIHJhbmdlLmxlbmd0aCk7Ci0gICAgUmVmUHRyPFJhbmdlPiB3ZWJSYW5nZSA9IG1fb2Jq
ZWN0LT5yYW5nZUZvclBsYWluVGV4dFJhbmdlKHRleHRSYW5nZSk7CisgICAgUmVmUHRyPFJhbmdl
PiB3ZWJSYW5nZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5yYW5nZUZvclBsYWluVGV4dFJhbmdl
KHRleHRSYW5nZSk7CiAgICAgcmV0dXJuIFtzZWxmIGRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yVGV4
dE1hcmtlclJhbmdlOltzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21SYW5nZTp3ZWJSYW5nZV0gc3Bl
bGxDaGVjazpZRVNdOwogfQogCkBAIC0zNzI4LDcgKzM3MzEsNyBAQCBBTExPV19ERVBSRUNBVEVE
X0lNUExFTUVOVEFUSU9OU19FTkQKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIAotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IF9heEJhY2tpbmdPYmplY3QtPmRv
Y3VtZW50KCk7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc2VsZi5heEJhY2tpbmdPYmplY3Qt
PmRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAKQEAgLTM3NDYsNyArMzc0OSw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJ
T05TX0VORAogICAgIGlmICghbWFya2VyKQogICAgICAgICByZXR1cm4gTlNOb3RGb3VuZDsKICAg
ICAKLSAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX29iamVjdC0+YXhPYmplY3RDYWNo
ZSgpKSB7CisgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmF4T2JqZWN0Q2FjaGUoKSkgewogICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVy
T2Zmc2V0ID0gW3NlbGYgY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcjptYXJrZXJdOwogICAg
ICAgICAvLyBDcmVhdGUgYSBjb2xsYXBzZWQgcmFuZ2UgZnJvbSB0aGUgQ2hhcmFjdGVyT2Zmc2V0
IG9iamVjdC4KICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGNhY2hlLT5yYW5nZUZvclVu
b3JkZXJlZENoYXJhY3Rlck9mZnNldHMoY2hhcmFjdGVyT2Zmc2V0LCBjaGFyYWN0ZXJPZmZzZXQp
OwpAQCAtMzc1OSw3ICszNzYyLDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNf
RU5ECiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IF9heEJhY2tpbmdPYmplY3QtPmRvY3VtZW50KCk7CisgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVu
dCkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKQEAgLTM3NjcsNyArMzc3MCw3IEBAIEFMTE9X
X0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgIGlmICghdGV4dFJhbmdlIHx8ICF0
ZXh0UmFuZ2UtPmJvdW5kYXJ5UG9pbnRzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAg
ICAKLSAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX29iamVjdC0+YXhPYmplY3RDYWNo
ZSgpKSB7CisgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmF4T2JqZWN0Q2FjaGUoKSkgewogICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVy
T2Zmc2V0ID0gY2FjaGUtPnN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZSh0ZXh0UmFu
Z2UsIHRydWUpOwogICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvckNoYXJhY3Rlck9m
ZnNldDpjaGFyYWN0ZXJPZmZzZXRdOwogICAgIH0KQEAgLTM4NTUsNyArMzg1OCw3IEBAIEFMTE9X
X0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgIE5TUmVjdCByZWN0ID0gTlNaZXJv
UmVjdDsKICAgICAKICAgICAvLyBiYXNpYyBwYXJhbWV0ZXIgdmFsaWRhdGlvbgotICAgIGlmICgh
bV9vYmplY3QgfHwgIWF0dHJpYnV0ZSB8fCAhcGFyYW1ldGVyKQorICAgIGlmICghc2VsZi5heEJh
Y2tpbmdPYmplY3QgfHwgIWF0dHJpYnV0ZSB8fCAhcGFyYW1ldGVyKQogICAgICAgICByZXR1cm4g
bmlsOwogICAgIAogICAgIGlmICghW3NlbGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKQEAg
LTM4NzEsOCArMzg3NCw4IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAog
ICAgICAgICB0ZXh0TWFya2VyUmFuZ2UgPSBwYXJhbWV0ZXI7CiAgICAgCiAgICAgZWxzZSBpZiAo
W3BhcmFtZXRlciBpc0tpbmRPZkNsYXNzOltXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBz
ZWxmXV0pCi0gICAgICAgIHVpRWxlbWVudCA9IFsoV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIqKXBhcmFtZXRlciBhY2Nlc3NpYmlsaXR5T2JqZWN0XTsKLSAgICAKKyAgICAgICAgdWlFbGVt
ZW50ID0gWyhXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciopcGFyYW1ldGVyIGF4QmFja2lu
Z09iamVjdF07CisKICAgICBlbHNlIGlmIChbcGFyYW1ldGVyIGlzS2luZE9mQ2xhc3M6W05TTnVt
YmVyIHNlbGZdXSkKICAgICAgICAgbnVtYmVyID0gcGFyYW1ldGVyOwogICAgIApAQCAtMzkwMSw5
ICszOTA0LDkgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAg
IC8vIFRvIGJlIGRlcHJlY2F0ZWQuCiAgICAgICAgIGF1dG8gcmVzdWx0ID0gQWNjZXNzaWJpbGl0
eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPFZlY3RvcjxTdHJpbmc+PihbZGljdGlvbmFy
eSwgc2VsZl0gKCkgLT4gVmVjdG9yPFN0cmluZz4gewogICAgICAgICAgICAgYXV0byBjcml0ZXJp
YSA9IGFjY2Vzc2liaWxpdHlUZXh0Q3JpdGVyaWFGb3JQYXJhbWV0ZXJpemVkQXR0cmlidXRlKGRp
Y3Rpb25hcnkpOwotICAgICAgICAgICAgY3JpdGVyaWEuc2Vjb25kLnRleHRSYW5nZXMgPSBtX29i
amVjdC0+ZmluZFRleHRSYW5nZXMoY3JpdGVyaWEuZmlyc3QpOworICAgICAgICAgICAgY3JpdGVy
aWEuc2Vjb25kLnRleHRSYW5nZXMgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZmluZFRleHRSYW5n
ZXMoY3JpdGVyaWEuZmlyc3QpOwogICAgICAgICAgICAgQVNTRVJUKGNyaXRlcmlhLnNlY29uZC50
ZXh0UmFuZ2VzLnNpemUoKSA8PSAxKTsKLSAgICAgICAgICAgIHJldHVybiBtX29iamVjdC0+cGVy
Zm9ybVRleHRPcGVyYXRpb24oY3JpdGVyaWEuc2Vjb25kKTsKKyAgICAgICAgICAgIHJldHVybiBz
ZWxmLmF4QmFja2luZ09iamVjdC0+cGVyZm9ybVRleHRPcGVyYXRpb24oY3JpdGVyaWEuc2Vjb25k
KTsKICAgICAgICAgfSk7CiAgICAgICAgIEFTU0VSVChyZXN1bHQuc2l6ZSgpIDw9IDEpOwogICAg
ICAgICBpZiAocmVzdWx0LnNpemUoKSA+IDApCkBAIC0zOTE0LDcgKzM5MTcsNyBAQCBBTExPV19E
RVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dFdpdGhDcml0ZXJpYVBhcmFtZXRlcml6
ZWRBdHRyaWJ1dGVdKSB7CiAgICAgICAgIGF1dG8gY3JpdGVyaWEgPSBhY2Nlc3NpYmlsaXR5U2Vh
cmNoVGV4dENyaXRlcmlhRm9yUGFyYW1ldGVyaXplZEF0dHJpYnV0ZShkaWN0aW9uYXJ5KTsKICAg
ICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxO
U0FycmF5ICo+KFsmY3JpdGVyaWEsIHNlbGZdICgpIC0+IE5TQXJyYXkgKiB7Ci0gICAgICAgICAg
ICBhdXRvIHJhbmdlcyA9IG1fb2JqZWN0LT5maW5kVGV4dFJhbmdlcyhjcml0ZXJpYSk7CisgICAg
ICAgICAgICBhdXRvIHJhbmdlcyA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5maW5kVGV4dFJhbmdl
cyhjcml0ZXJpYSk7CiAgICAgICAgICAgICBpZiAocmFuZ2VzLmlzRW1wdHkoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICAgICAgTlNNdXRhYmxlQXJyYXkgKm1hcmtlcnMg
PSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6cmFuZ2VzLnNpemUoKV07CkBAIC0z
OTI5LDcgKzM5MzIsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAg
ICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VGV4dE9wZXJh
dGlvblBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7CiAgICAgICAgIGF1dG8gb3BlcmF0aW9uUmVz
dWx0ID0gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPFZlY3RvcjxT
dHJpbmc+PihbZGljdGlvbmFyeSwgc2VsZl0gKCkgLT4gVmVjdG9yPFN0cmluZz4gewogICAgICAg
ICAgICAgYXV0byB0ZXh0T3BlcmF0aW9uID0gYWNjZXNzaWJpbGl0eVRleHRPcGVyYXRpb25Gb3JQ
YXJhbWV0ZXJpemVkQXR0cmlidXRlKHNlbGYsIGRpY3Rpb25hcnkpOwotICAgICAgICAgICAgcmV0
dXJuIG1fb2JqZWN0LT5wZXJmb3JtVGV4dE9wZXJhdGlvbih0ZXh0T3BlcmF0aW9uKTsKKyAgICAg
ICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+cGVyZm9ybVRleHRPcGVyYXRpb24o
dGV4dE9wZXJhdGlvbik7CiAgICAgICAgIH0pOwogICAgICAgICBpZiAob3BlcmF0aW9uUmVzdWx0
LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiBuaWw7CkBAIC0zOTQyLDIwICszOTQ1LDIw
IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgIGlmIChbYXR0cmli
dXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRDb3VudEZvclNlYXJj
aFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7CiAgICAgICAgIEFjY2Vzc2liaWxp
dHlTZWFyY2hDcml0ZXJpYSBjcml0ZXJpYSA9IGFjY2Vzc2liaWxpdHlTZWFyY2hDcml0ZXJpYUZv
clNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUoZGljdGlvbmFyeSk7CiAgICAg
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciByZXN1
bHRzOwotICAgICAgICBtX29iamVjdC0+ZmluZE1hdGNoaW5nT2JqZWN0cygmY3JpdGVyaWEsIHJl
c3VsdHMpOworICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+ZmluZE1hdGNoaW5nT2JqZWN0
cygmY3JpdGVyaWEsIHJlc3VsdHMpOwogICAgICAgICByZXR1cm4gQChyZXN1bHRzLnNpemUoKSk7
CiAgICAgfQogICAgIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnRzRm9yU2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0
ZV0pIHsKICAgICAgICAgQWNjZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhIGNyaXRlcmlhID0gYWNj
ZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhRm9yU2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0
dHJpYnV0ZShkaWN0aW9uYXJ5KTsKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJlc3VsdHM7Ci0gICAgICAgIG1fb2JqZWN0LT5maW5kTWF0
Y2hpbmdPYmplY3RzKCZjcml0ZXJpYSwgcmVzdWx0cyk7CisgICAgICAgIHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5maW5kTWF0Y2hpbmdPYmplY3RzKCZjcml0ZXJpYSwgcmVzdWx0cyk7CiAgICAgICAg
IHJldHVybiBjb252ZXJ0VG9OU0FycmF5KHJlc3VsdHMpOwogICAgIH0KIAogICAgIGlmIChbYXR0
cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlFbmRUZXh0TWFya2VyRm9yQm91
bmRzUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxp
dHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxpZD4oWyZyZWN0LCBwcm90ZWN0ZWRTZWxm
ID0gUmV0YWluUHRyPFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPihzZWxmKV0gKCkgLT4g
aWQgewotICAgICAgICAgICAgYXV0byogY2FjaGUgPSBwcm90ZWN0ZWRTZWxmLT5tX29iamVjdC0+
YXhPYmplY3RDYWNoZSgpOworICAgICAgICAgICAgYXV0byogY2FjaGUgPSBwcm90ZWN0ZWRTZWxm
LmdldCgpLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpOwogICAgICAgICAgICAgaWYg
KCFjYWNoZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwogCkBAIC0zOTY3LDcgKzM5NzAs
NyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIAogICAgIGlmIChbYXR0
cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTdGFydFRleHRNYXJrZXJGb3JC
b3VuZHNQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewogICAgICAgICByZXR1cm4gQWNjZXNzaWJp
bGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbJnJlY3QsIHByb3RlY3RlZFNl
bGYgPSBSZXRhaW5QdHI8V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+KHNlbGYpXSAoKSAt
PiBpZCB7Ci0gICAgICAgICAgICBhdXRvKiBjYWNoZSA9IHByb3RlY3RlZFNlbGYtPm1fb2JqZWN0
LT5heE9iamVjdENhY2hlKCk7CisgICAgICAgICAgICBhdXRvKiBjYWNoZSA9IHByb3RlY3RlZFNl
bGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7CiAgICAgICAgICAgICBp
ZiAoIWNhY2hlKQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAKQEAgLTM5NzksMTMgKzM5
ODIsMTMgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAKICAgICBpZiAo
W2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TGluZVRleHRNYXJrZXJS
YW5nZUZvclRleHRNYXJrZXJQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewogICAgICAgICBWaXNp
YmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4
dE1hcmtlcjp0ZXh0TWFya2VyXTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJs
ZVBvc2l0aW9uUmFuZ2UgPSBtX29iamVjdC0+bGluZVJhbmdlRm9yUG9zaXRpb24odmlzaWJsZVBv
c2l0aW9uKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFu
Z2UgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+bGluZVJhbmdlRm9yUG9zaXRpb24odmlzaWJsZVBv
c2l0aW9uKTsKICAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxl
UG9zaXRpb25zOnZpc2libGVQb3NpdGlvblJhbmdlLnN0YXJ0IGVuZFBvc2l0aW9uOnZpc2libGVQ
b3NpdGlvblJhbmdlLmVuZF07CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRv
U3RyaW5nOk5TQWNjZXNzaWJpbGl0eU1pc3NwZWxsaW5nVGV4dE1hcmtlclJhbmdlUGFyYW1ldGVy
aXplZEF0dHJpYnV0ZV0pIHsKICAgICAgICAgYXV0byBjcml0ZXJpYSA9IGFjY2Vzc2liaWxpdHlN
aXNzcGVsbGluZ1NlYXJjaENyaXRlcmlhRm9yUGFyYW1ldGVyaXplZEF0dHJpYnV0ZShzZWxmLCBk
aWN0aW9uYXJ5KTsKLSAgICAgICAgaWYgKGF1dG8gbWlzc3BlbGxpbmdSYW5nZSA9IG1fb2JqZWN0
LT5nZXRNaXNzcGVsbGluZ1JhbmdlKGNyaXRlcmlhLmZpcnN0LCBjcml0ZXJpYS5zZWNvbmQpKQor
ICAgICAgICBpZiAoYXV0byBtaXNzcGVsbGluZ1JhbmdlID0gc2VsZi5heEJhY2tpbmdPYmplY3Qt
PmdldE1pc3NwZWxsaW5nUmFuZ2UoY3JpdGVyaWEuZmlyc3QsIGNyaXRlcmlhLnNlY29uZCkpCiAg
ICAgICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlOm1pc3NwZWxs
aW5nUmFuZ2VdOwogICAgICAgICByZXR1cm4gbmlsOwogICAgIH0KQEAgLTQwMTksMTkgKzQwMjIs
MTkgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAKICAgICBpZiAoW2F0
dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWExpbmVGb3JUZXh0TWFya2VyIl0pIHsKICAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JU
ZXh0TWFya2VyOih0ZXh0TWFya2VyKV07Ci0gICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVy
V2l0aFVuc2lnbmVkSW50Om1fb2JqZWN0LT5saW5lRm9yUG9zaXRpb24odmlzaWJsZVBvcyldOwor
ICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZEludDpzZWxmLmF4QmFj
a2luZ09iamVjdC0+bGluZUZvclBvc2l0aW9uKHZpc2libGVQb3MpXTsKICAgICB9CiAgICAgCiAg
ICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhUZXh0TWFya2VyUmFuZ2VGb3JM
aW5lIl0pIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZTsKICAgICAgICAg
aWYgKFtudW1iZXIgdW5zaWduZWRJbnRlZ2VyVmFsdWVdICE9IE5TTm90Rm91bmQpCi0gICAgICAg
ICAgICB2cFJhbmdlID0gbV9vYmplY3QtPnZpc2libGVQb3NpdGlvblJhbmdlRm9yTGluZShbbnVt
YmVyIHVuc2lnbmVkSW50VmFsdWVdKTsKKyAgICAgICAgICAgIHZwUmFuZ2UgPSBzZWxmLmF4QmFj
a2luZ09iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JMaW5lKFtudW1iZXIgdW5zaWduZWRJ
bnRWYWx1ZV0pOwogICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2li
bGVQb3NpdGlvbnM6dnBSYW5nZS5zdGFydCBlbmRQb3NpdGlvbjp2cFJhbmdlLmVuZF07CiAgICAg
fQogICAgIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYU3RyaW5nRm9y
VGV4dE1hcmtlclJhbmdlIl0pIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFtzZWxm
IHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07Ci0gICAgICAgIHJldHVy
biBtX29iamVjdC0+c3RyaW5nRm9yUmFuZ2UocmFuZ2UpOworICAgICAgICByZXR1cm4gc2VsZi5h
eEJhY2tpbmdPYmplY3QtPnN0cmluZ0ZvclJhbmdlKHJhbmdlKTsKICAgICB9CiAKICAgICBpZiAo
W2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFRleHRNYXJrZXJGb3JQb3NpdGlvbiJdKSB7
CkBAIC00MDQwLDU4ICs0MDQzLDU4IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05T
X0VORAogICAgICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgICAgICByZXR1cm4gQWNjZXNzaWJp
bGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbJndlYkNvcmVQb2ludCwgcHJv
dGVjdGVkU2VsZiA9IFJldGFpblB0cjxXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4oc2Vs
ZildICgpIC0+IGlkIHsKLSAgICAgICAgICAgIGF1dG8qIGNhY2hlID0gcHJvdGVjdGVkU2VsZi0+
bV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICAgICAgICAgIGF1dG8qIGNhY2hlID0gcHJv
dGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKICAgICAg
ICAgICAgIGlmICghY2FjaGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgICAg
ICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldCA9IGNhY2hlLT5jaGFyYWN0ZXJP
ZmZzZXRGb3JQb2ludCh3ZWJDb3JlUG9pbnQsIHByb3RlY3RlZFNlbGYtPm1fb2JqZWN0KTsKKyAg
ICAgICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBjYWNoZS0+Y2hhcmFj
dGVyT2Zmc2V0Rm9yUG9pbnQod2ViQ29yZVBvaW50LCBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFj
a2luZ09iamVjdCk7CiAgICAgICAgICAgICByZXR1cm4gW3Byb3RlY3RlZFNlbGYgdGV4dE1hcmtl
ckZvckNoYXJhY3Rlck9mZnNldDpjaGFyYWN0ZXJPZmZzZXRdOwogICAgICAgICB9KTsKICAgICB9
CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWEJvdW5kc0ZvclRleHRN
YXJrZXJSYW5nZSJdKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBbc2VsZiByYW5n
ZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOwotICAgICAgICBhdXRvIGJvdW5k
cyA9IEZsb2F0UmVjdChtX29iamVjdC0+Ym91bmRzRm9yUmFuZ2UocmFuZ2UpKTsKKyAgICAgICAg
YXV0byBib3VuZHMgPSBGbG9hdFJlY3Qoc2VsZi5heEJhY2tpbmdPYmplY3QtPmJvdW5kc0ZvclJh
bmdlKHJhbmdlKSk7CiAgICAgICAgIE5TUmVjdCByZWN0ID0gW3NlbGYgY29udmVydFJlY3RUb1Nw
YWNlOmJvdW5kcyBzcGFjZTpBY2Nlc3NpYmlsaXR5Q29udmVyc2lvblNwYWNlOjpTY3JlZW5dOwog
ICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpyZWN0XTsKICAgICB9CiAKICAg
ICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Qm91bmRzRm9y
UmFuZ2VQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewogICAgICAgICBOU1JlY3QgcmVjdCA9IEFj
Y2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxOU1JlY3Q+KFsmcmFuZ2Us
IHByb3RlY3RlZFNlbGYgPSBSZXRhaW5QdHI8V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+
KHNlbGYpXSAoKSAtPiBOU1JlY3QgewotICAgICAgICAgICAgYXV0byogY2FjaGUgPSBwcm90ZWN0
ZWRTZWxmLT5tX29iamVjdC0+YXhPYmplY3RDYWNoZSgpOworICAgICAgICAgICAgYXV0byogY2Fj
aGUgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgp
OwogICAgICAgICAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgICAgICAgICByZXR1cm4gQ0dSZWN0
WmVybzsKIAotICAgICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0ID0gY2FjaGUtPmNoYXJh
Y3Rlck9mZnNldEZvckluZGV4KHJhbmdlLmxvY2F0aW9uLCBwcm90ZWN0ZWRTZWxmLT5tX29iamVj
dCk7Ci0gICAgICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgZW5kID0gY2FjaGUtPmNoYXJhY3Rlck9m
ZnNldEZvckluZGV4KHJhbmdlLmxvY2F0aW9uK3JhbmdlLmxlbmd0aCwgcHJvdGVjdGVkU2VsZi0+
bV9vYmplY3QpOworICAgICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0ID0gY2FjaGUtPmNo
YXJhY3Rlck9mZnNldEZvckluZGV4KHJhbmdlLmxvY2F0aW9uLCBwcm90ZWN0ZWRTZWxmLmdldCgp
LmF4QmFja2luZ09iamVjdCk7CisgICAgICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgZW5kID0gY2Fj
aGUtPmNoYXJhY3Rlck9mZnNldEZvckluZGV4KHJhbmdlLmxvY2F0aW9uK3JhbmdlLmxlbmd0aCwg
cHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3QpOwogICAgICAgICAgICAgaWYgKHN0
YXJ0LmlzTnVsbCgpIHx8IGVuZC5pc051bGwoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gQ0dS
ZWN0WmVybzsKIAogICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGNhY2hlLT5yYW5n
ZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoc3RhcnQsIGVuZCk7Ci0gICAgICAgICAgICBh
dXRvIGJvdW5kcyA9IEZsb2F0UmVjdChwcm90ZWN0ZWRTZWxmLT5tX29iamVjdC0+Ym91bmRzRm9y
UmFuZ2UocmFuZ2UpKTsKKyAgICAgICAgICAgIGF1dG8gYm91bmRzID0gRmxvYXRSZWN0KHByb3Rl
Y3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0LT5ib3VuZHNGb3JSYW5nZShyYW5nZSkpOwog
ICAgICAgICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRTZWxmIGNvbnZlcnRSZWN0VG9TcGFjZTpib3Vu
ZHMgc3BhY2U6QWNjZXNzaWJpbGl0eUNvbnZlcnNpb25TcGFjZTo6U2NyZWVuXTsKICAgICAgICAg
fSk7CiAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0OnJlY3RdOwogICAgIH0K
IAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTdHJp
bmdGb3JSYW5nZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlmIChtX29iamVj
dC0+aXNUZXh0Q29udHJvbCgpKSB7CisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+
aXNUZXh0Q29udHJvbCgpKSB7CiAgICAgICAgICAgICBQbGFpblRleHRSYW5nZSBwbGFpblRleHRS
YW5nZSA9IFBsYWluVGV4dFJhbmdlKHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgpOwotICAg
ICAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5kb0FYU3RyaW5nRm9yUmFuZ2UocGxhaW5UZXh0UmFu
Z2UpOworICAgICAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5kb0FYU3RyaW5n
Rm9yUmFuZ2UocGxhaW5UZXh0UmFuZ2UpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIEFj
Y2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxOU1N0cmluZyAqPihbJnJh
bmdlLCBwcm90ZWN0ZWRTZWxmID0gUmV0YWluUHRyPFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyPihzZWxmKV0gKCkgLT4gTlNTdHJpbmcgKiB7Ci0gICAgICAgICAgICBhdXRvKiBjYWNoZSA9
IHByb3RlY3RlZFNlbGYtPm1fb2JqZWN0LT5heE9iamVjdENhY2hlKCk7CisgICAgICAgICAgICBh
dXRvKiBjYWNoZSA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0LT5heE9iamVj
dENhY2hlKCk7CiAgICAgICAgICAgICBpZiAoIWNhY2hlKQogICAgICAgICAgICAgICAgIHJldHVy
biBuaWw7CiAKLSAgICAgICAgICAgIENoYXJhY3Rlck9mZnNldCBzdGFydCA9IGNhY2hlLT5jaGFy
YWN0ZXJPZmZzZXRGb3JJbmRleChyYW5nZS5sb2NhdGlvbiwgcHJvdGVjdGVkU2VsZi0+bV9vYmpl
Y3QpOwotICAgICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGVuZCA9IGNhY2hlLT5jaGFyYWN0ZXJP
ZmZzZXRGb3JJbmRleChyYW5nZS5sb2NhdGlvbiArIHJhbmdlLmxlbmd0aCwgcHJvdGVjdGVkU2Vs
Zi0+bV9vYmplY3QpOworICAgICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0ID0gY2FjaGUt
PmNoYXJhY3Rlck9mZnNldEZvckluZGV4KHJhbmdlLmxvY2F0aW9uLCBwcm90ZWN0ZWRTZWxmLmdl
dCgpLmF4QmFja2luZ09iamVjdCk7CisgICAgICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgZW5kID0g
Y2FjaGUtPmNoYXJhY3Rlck9mZnNldEZvckluZGV4KHJhbmdlLmxvY2F0aW9uICsgcmFuZ2UubGVu
Z3RoLCBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdCk7CiAgICAgICAgICAgICBp
ZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIHJldHVy
biBuaWw7CiAKICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBjYWNoZS0+cmFuZ2VG
b3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKHN0YXJ0LCBlbmQpOwotICAgICAgICAgICAgcmV0
dXJuIHByb3RlY3RlZFNlbGYtPm1fb2JqZWN0LT5zdHJpbmdGb3JSYW5nZShyYW5nZSk7CisgICAg
ICAgICAgICByZXR1cm4gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3QtPnN0cmlu
Z0ZvclJhbmdlKHJhbmdlKTsKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC00MTI1LDcgKzQxMjgs
NyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgICAgIHJl
dHVybiBuaWw7CiAKICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVG
cm9tTWFpblRocmVhZDxpZD4oW3RleHRNYXJrZXIxLCB0ZXh0TWFya2VyMiwgcHJvdGVjdGVkU2Vs
ZiA9IFJldGFpblB0cjxXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4oc2VsZildICgpIC0+
IGlkIHsKLSAgICAgICAgICAgIGF1dG8qIGNhY2hlID0gcHJvdGVjdGVkU2VsZi0+bV9vYmplY3Qt
PmF4T2JqZWN0Q2FjaGUoKTsKKyAgICAgICAgICAgIGF1dG8qIGNhY2hlID0gcHJvdGVjdGVkU2Vs
Zi5nZXQoKS5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKICAgICAgICAgICAgIGlm
ICghY2FjaGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKIApAQCAtNDE0OCw3ICs0MTUx
LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAKICAgICBpZiAoW2F0
dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWExlZnRXb3JkVGV4dE1hcmtlclJhbmdlRm9yVGV4
dE1hcmtlciJdKSB7CiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVl
RnJvbU1haW5UaHJlYWQ8aWQ+KFt0ZXh0TWFya2VyLCBwcm90ZWN0ZWRTZWxmID0gUmV0YWluUHRy
PFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPihzZWxmKV0gKCkgLT4gaWQgewotICAgICAg
ICAgICAgYXV0byogY2FjaGUgPSBwcm90ZWN0ZWRTZWxmLT5tX29iamVjdC0+YXhPYmplY3RDYWNo
ZSgpOworICAgICAgICAgICAgYXV0byogY2FjaGUgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFj
a2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpOwogICAgICAgICAgICAgaWYgKCFjYWNoZSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gbmlsOwogCkBAIC00MTYwLDcgKzQxNjMsNyBAQCBBTExPV19E
RVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1
YWxUb1N0cmluZzpAIkFYUmlnaHRXb3JkVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciJdKSB7
CiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJl
YWQ8aWQ+KFt0ZXh0TWFya2VyLCBwcm90ZWN0ZWRTZWxmID0gUmV0YWluUHRyPFdlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyPihzZWxmKV0gKCkgLT4gaWQgewotICAgICAgICAgICAgYXV0byog
Y2FjaGUgPSBwcm90ZWN0ZWRTZWxmLT5tX29iamVjdC0+YXhPYmplY3RDYWNoZSgpOworICAgICAg
ICAgICAgYXV0byogY2FjaGUgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdC0+
YXhPYmplY3RDYWNoZSgpOwogICAgICAgICAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gbmlsOwogCkBAIC00MTcyLDE5ICs0MTc1LDE5IEBAIEFMTE9XX0RFUFJFQ0FURURf
SU1QTEVNRU5UQVRJT05TX0VORAogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5n
OkAiQVhMZWZ0TGluZVRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiXSkgewogICAgICAgICBW
aXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRN
YXJrZXI6KHRleHRNYXJrZXIpXTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5n
ZSA9IG1fb2JqZWN0LT5sZWZ0TGluZVZpc2libGVQb3NpdGlvblJhbmdlKHZpc2libGVQb3MpOwor
ICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlID0gc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmxlZnRMaW5lVmlzaWJsZVBvc2l0aW9uUmFuZ2UodmlzaWJsZVBvcyk7CiAgICAgICAgIHJl
dHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2cFJhbmdlLnN0
YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKICAgICB9CiAgICAgCiAgICAgaWYgKFthdHRy
aWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhSaWdodExpbmVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0
TWFya2VyIl0pIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2
aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07Ci0gICAgICAgIFZpc2li
bGVQb3NpdGlvblJhbmdlIHZwUmFuZ2UgPSBtX29iamVjdC0+cmlnaHRMaW5lVmlzaWJsZVBvc2l0
aW9uUmFuZ2UodmlzaWJsZVBvcyk7CisgICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZwUmFu
Z2UgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+cmlnaHRMaW5lVmlzaWJsZVBvc2l0aW9uUmFuZ2Uo
dmlzaWJsZVBvcyk7CiAgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlz
aWJsZVBvc2l0aW9uczp2cFJhbmdlLnN0YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKICAg
ICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFNlbnRlbmNlVGV4
dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciJdKSB7CiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmls
aXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFt0ZXh0TWFya2VyLCBwcm90ZWN0
ZWRTZWxmID0gUmV0YWluUHRyPFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPihzZWxmKV0g
KCkgLT4gaWQgewotICAgICAgICAgICAgYXV0byogY2FjaGUgPSBwcm90ZWN0ZWRTZWxmLT5tX29i
amVjdC0+YXhPYmplY3RDYWNoZSgpOworICAgICAgICAgICAgYXV0byogY2FjaGUgPSBwcm90ZWN0
ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpOwogICAgICAgICAg
ICAgaWYgKCFjYWNoZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwogCkBAIC00MTk2LDcg
KzQxOTksNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIAogICAgIGlm
IChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYUGFyYWdyYXBoVGV4dE1hcmtlclJhbmdl
Rm9yVGV4dE1hcmtlciJdKSB7CiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2
ZVZhbHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFt0ZXh0TWFya2VyLCBwcm90ZWN0ZWRTZWxmID0gUmV0
YWluUHRyPFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPihzZWxmKV0gKCkgLT4gaWQgewot
ICAgICAgICAgICAgYXV0byogY2FjaGUgPSBwcm90ZWN0ZWRTZWxmLT5tX29iamVjdC0+YXhPYmpl
Y3RDYWNoZSgpOworICAgICAgICAgICAgYXV0byogY2FjaGUgPSBwcm90ZWN0ZWRTZWxmLmdldCgp
LmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpOwogICAgICAgICAgICAgaWYgKCFjYWNo
ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwogCkBAIC00MjA4LDcgKzQyMTEsNyBAQCBB
TExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIAogICAgIGlmIChbYXR0cmlidXRl
IGlzRXF1YWxUb1N0cmluZzpAIkFYTmV4dFdvcmRFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJd
KSB7CiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5U
aHJlYWQ8aWQ+KFt0ZXh0TWFya2VyLCBwcm90ZWN0ZWRTZWxmID0gUmV0YWluUHRyPFdlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyPihzZWxmKV0gKCkgLT4gaWQgewotICAgICAgICAgICAgYXV0
byogY2FjaGUgPSBwcm90ZWN0ZWRTZWxmLT5tX29iamVjdC0+YXhPYmplY3RDYWNoZSgpOworICAg
ICAgICAgICAgYXV0byogY2FjaGUgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVj
dC0+YXhPYmplY3RDYWNoZSgpOwogICAgICAgICAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gbmlsOwogCkBAIC00MjIwLDcgKzQyMjMsNyBAQCBBTExPV19ERVBSRUNBVEVE
X0lNUExFTUVOVEFUSU9OU19FTkQKIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmlu
ZzpAIkFYUHJldmlvdXNXb3JkU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7CiAgICAg
ICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8aWQ+
KFt0ZXh0TWFya2VyLCBwcm90ZWN0ZWRTZWxmID0gUmV0YWluUHRyPFdlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyPihzZWxmKV0gKCkgLT4gaWQgewotICAgICAgICAgICAgYXV0byogY2FjaGUg
PSBwcm90ZWN0ZWRTZWxmLT5tX29iamVjdC0+YXhPYmplY3RDYWNoZSgpOworICAgICAgICAgICAg
YXV0byogY2FjaGUgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdC0+YXhPYmpl
Y3RDYWNoZSgpOwogICAgICAgICAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgICAgICAgICByZXR1
cm4gbmlsOwogCkBAIC00MjMyLDE3ICs0MjM1LDE3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVN
RU5UQVRJT05TX0VORAogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhO
ZXh0TGluZUVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pIHsKICAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0
ZXh0TWFya2VyKV07Ci0gICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBv
c2l0aW9uOm1fb2JqZWN0LT5uZXh0TGluZUVuZFBvc2l0aW9uKHZpc2libGVQb3MpXTsKKyAgICAg
ICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246c2VsZi5heEJhY2tp
bmdPYmplY3QtPm5leHRMaW5lRW5kUG9zaXRpb24odmlzaWJsZVBvcyldOwogICAgIH0KICAgICAK
ICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFByZXZpb3VzTGluZVN0YXJ0
VGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgewogICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlz
aWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIp
XTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246bV9v
YmplY3QtPnByZXZpb3VzTGluZVN0YXJ0UG9zaXRpb24odmlzaWJsZVBvcyldOworICAgICAgICBy
ZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjpzZWxmLmF4QmFja2luZ09i
amVjdC0+cHJldmlvdXNMaW5lU3RhcnRQb3NpdGlvbih2aXNpYmxlUG9zKV07CiAgICAgfQogICAg
IAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYTmV4dFNlbnRlbmNlRW5k
VGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgewogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0
eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbdGV4dE1hcmtlciwgcHJvdGVjdGVk
U2VsZiA9IFJldGFpblB0cjxXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4oc2VsZildICgp
IC0+IGlkIHsKLSAgICAgICAgICAgIGF1dG8qIGNhY2hlID0gcHJvdGVjdGVkU2VsZi0+bV9vYmpl
Y3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICAgICAgICAgIGF1dG8qIGNhY2hlID0gcHJvdGVjdGVk
U2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKICAgICAgICAgICAg
IGlmICghY2FjaGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgICAgIApA
QCAtNDI1NCw3ICs0MjU3LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5E
CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFByZXZpb3VzU2VudGVu
Y2VTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pIHsKICAgICAgICAgcmV0dXJuIEFjY2Vz
c2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxpZD4oW3RleHRNYXJrZXIsIHBy
b3RlY3RlZFNlbGYgPSBSZXRhaW5QdHI8V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+KHNl
bGYpXSAoKSAtPiBpZCB7Ci0gICAgICAgICAgICBhdXRvKiBjYWNoZSA9IHByb3RlY3RlZFNlbGYt
Pm1fb2JqZWN0LT5heE9iamVjdENhY2hlKCk7CisgICAgICAgICAgICBhdXRvKiBjYWNoZSA9IHBy
b3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7CiAgICAg
ICAgICAgICBpZiAoIWNhY2hlKQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAKQEAgLTQy
NjYsNyArNDI2OSw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogCiAg
ICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhOZXh0UGFyYWdyYXBoRW5kVGV4
dE1hcmtlckZvclRleHRNYXJrZXIiXSkgewogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6
cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbdGV4dE1hcmtlciwgcHJvdGVjdGVkU2Vs
ZiA9IFJldGFpblB0cjxXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4oc2VsZildICgpIC0+
IGlkIHsKLSAgICAgICAgICAgIGF1dG8qIGNhY2hlID0gcHJvdGVjdGVkU2VsZi0+bV9vYmplY3Qt
PmF4T2JqZWN0Q2FjaGUoKTsKKyAgICAgICAgICAgIGF1dG8qIGNhY2hlID0gcHJvdGVjdGVkU2Vs
Zi5nZXQoKS5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKICAgICAgICAgICAgIGlm
ICghY2FjaGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKIApAQCAtNDI3OCw3ICs0Mjgx
LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAKICAgICBpZiAoW2F0
dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFByZXZpb3VzUGFyYWdyYXBoU3RhcnRUZXh0TWFy
a2VyRm9yVGV4dE1hcmtlciJdKSB7CiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRy
aWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFt0ZXh0TWFya2VyLCBwcm90ZWN0ZWRTZWxmID0g
UmV0YWluUHRyPFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPihzZWxmKV0gKCkgLT4gaWQg
ewotICAgICAgICAgICAgYXV0byogY2FjaGUgPSBwcm90ZWN0ZWRTZWxmLT5tX29iamVjdC0+YXhP
YmplY3RDYWNoZSgpOworICAgICAgICAgICAgYXV0byogY2FjaGUgPSBwcm90ZWN0ZWRTZWxmLmdl
dCgpLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpOwogICAgICAgICAgICAgaWYgKCFj
YWNoZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwogCkBAIC00MjkwLDcgKzQyOTMsNyBA
QCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIAogICAgIGlmIChbYXR0cmli
dXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYU3R5bGVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2Vy
Il0pIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxl
UG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07Ci0gICAgICAgIFZpc2libGVQb3Np
dGlvblJhbmdlIHZwUmFuZ2UgPSBtX29iamVjdC0+c3R5bGVSYW5nZUZvclBvc2l0aW9uKHZpc2li
bGVQb3MpOworICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlID0gc2VsZi5heEJh
Y2tpbmdPYmplY3QtPnN0eWxlUmFuZ2VGb3JQb3NpdGlvbih2aXNpYmxlUG9zKTsKICAgICAgICAg
cmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zOnZwUmFuZ2Uu
c3RhcnQgZW5kUG9zaXRpb246dnBSYW5nZS5lbmRdOwogICAgIH0KICAgICAKQEAgLTQzMzEsMTEg
KzQzMzQsMTEgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgfQog
I2VuZGlmCiAKLSAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxlPigqbV9vYmplY3QpICYmIGRv
d25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKm1fb2JqZWN0KS5pc0V4cG9zYWJsZVRocm91Z2hB
Y2Nlc3NpYmlsaXR5KCkpIHsKKyAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxlPigqc2VsZi5h
eEJhY2tpbmdPYmplY3QpICYmIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKnNlbGYuYXhC
YWNraW5nT2JqZWN0KS5pc0V4cG9zYWJsZVRocm91Z2hBY2Nlc3NpYmlsaXR5KCkpIHsKICAgICAg
ICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUNlbGxGb3JD
b2x1bW5BbmRSb3dQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewogICAgICAgICAgICAgaWYgKGFy
cmF5ID09IG5pbCB8fCBbYXJyYXkgY291bnRdICE9IDIpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IG5pbDsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqIGNlbGwgPSBkb3duY2Fz
dDxBY2Nlc3NpYmlsaXR5VGFibGU+KCptX29iamVjdCkuY2VsbEZvckNvbHVtbkFuZFJvdyhbW2Fy
cmF5IG9iamVjdEF0SW5kZXg6MF0gdW5zaWduZWRJbnRWYWx1ZV0sIFtbYXJyYXkgb2JqZWN0QXRJ
bmRleDoxXSB1bnNpZ25lZEludFZhbHVlXSk7CisgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5VGFi
bGVDZWxsKiBjZWxsID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqc2VsZi5heEJhY2tp
bmdPYmplY3QpLmNlbGxGb3JDb2x1bW5BbmRSb3coW1thcnJheSBvYmplY3RBdEluZGV4OjBdIHVu
c2lnbmVkSW50VmFsdWVdLCBbW2FycmF5IG9iamVjdEF0SW5kZXg6MV0gdW5zaWduZWRJbnRWYWx1
ZV0pOwogICAgICAgICAgICAgaWYgKCFjZWxsKQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7
CiAgICAgICAgICAgICAKQEAgLTQzNDMsMzQgKzQzNDYsMzQgQEAgQUxMT1dfREVQUkVDQVRFRF9J
TVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgaWYgKG1fb2Jq
ZWN0LT5pc1RleHRDb250cm9sKCkpIHsKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlz
VGV4dENvbnRyb2woKSkgewogICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6
IChOU1N0cmluZyAqKWtBWExpbmVGb3JJbmRleFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7Ci0g
ICAgICAgICAgICBpbnQgbGluZU51bWJlciA9IG1fb2JqZWN0LT5kb0FYTGluZUZvckluZGV4KFtu
dW1iZXIgaW50VmFsdWVdKTsKKyAgICAgICAgICAgIGludCBsaW5lTnVtYmVyID0gc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmRvQVhMaW5lRm9ySW5kZXgoW251bWJlciBpbnRWYWx1ZV0pOwogICAgICAg
ICAgICAgaWYgKGxpbmVOdW1iZXIgPCAwKQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAg
ICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZEludDpsaW5lTnVt
YmVyXTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVh
bFRvU3RyaW5nOiAoTlNTdHJpbmcgKilrQVhSYW5nZUZvckxpbmVQYXJhbWV0ZXJpemVkQXR0cmli
dXRlXSkgewotICAgICAgICAgICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlID0gbV9vYmplY3Qt
PmRvQVhSYW5nZUZvckxpbmUoW251bWJlciBpbnRWYWx1ZV0pOworICAgICAgICAgICAgUGxhaW5U
ZXh0UmFuZ2UgdGV4dFJhbmdlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmRvQVhSYW5nZUZvckxp
bmUoW251bWJlciBpbnRWYWx1ZV0pOwogICAgICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVl
V2l0aFJhbmdlOiBOU01ha2VSYW5nZSh0ZXh0UmFuZ2Uuc3RhcnQsIHRleHRSYW5nZS5sZW5ndGgp
XTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRv
U3RyaW5nOiAoTlNTdHJpbmcqKWtBWFN0cmluZ0ZvclJhbmdlUGFyYW1ldGVyaXplZEF0dHJpYnV0
ZV0pIHsKICAgICAgICAgICAgIFBsYWluVGV4dFJhbmdlIHBsYWluVGV4dFJhbmdlID0gUGxhaW5U
ZXh0UmFuZ2UocmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCk7Ci0gICAgICAgICAgICByZXR1
cm4gcmFuZ2VTZXQgPyAoaWQpKG1fb2JqZWN0LT5kb0FYU3RyaW5nRm9yUmFuZ2UocGxhaW5UZXh0
UmFuZ2UpKSA6IG5pbDsKKyAgICAgICAgICAgIHJldHVybiByYW5nZVNldCA/IChpZCkoc2VsZi5h
eEJhY2tpbmdPYmplY3QtPmRvQVhTdHJpbmdGb3JSYW5nZShwbGFpblRleHRSYW5nZSkpIDogbmls
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9T
dHJpbmc6IChOU1N0cmluZyopa0FYUmFuZ2VGb3JQb3NpdGlvblBhcmFtZXRlcml6ZWRBdHRyaWJ1
dGVdKSB7CiAgICAgICAgICAgICBpZiAoIXBvaW50U2V0KQogICAgICAgICAgICAgICAgIHJldHVy
biBuaWw7CiAgICAgICAgICAgICBJbnRQb2ludCB3ZWJDb3JlUG9pbnQgPSBJbnRQb2ludChwb2lu
dCk7Ci0gICAgICAgICAgICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2UgPSBtX29iamVjdC0+ZG9B
WFJhbmdlRm9yUG9zaXRpb24od2ViQ29yZVBvaW50KTsKKyAgICAgICAgICAgIFBsYWluVGV4dFJh
bmdlIHRleHRSYW5nZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5kb0FYUmFuZ2VGb3JQb3NpdGlv
bih3ZWJDb3JlUG9pbnQpOwogICAgICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFJh
bmdlOiBOU01ha2VSYW5nZSh0ZXh0UmFuZ2Uuc3RhcnQsIHRleHRSYW5nZS5sZW5ndGgpXTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5n
OiAoTlNTdHJpbmcqKWtBWFJhbmdlRm9ySW5kZXhQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewot
ICAgICAgICAgICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlID0gbV9vYmplY3QtPmRvQVhSYW5n
ZUZvckluZGV4KFtudW1iZXIgaW50VmFsdWVdKTsKKyAgICAgICAgICAgIFBsYWluVGV4dFJhbmdl
IHRleHRSYW5nZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5kb0FYUmFuZ2VGb3JJbmRleChbbnVt
YmVyIGludFZhbHVlXSk7CiAgICAgICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmFu
Z2U6IE5TTWFrZVJhbmdlKHRleHRSYW5nZS5zdGFydCwgdGV4dFJhbmdlLmxlbmd0aCldOwogICAg
ICAgICB9CiAgICAgICAgIApAQCAtNDM3OCw3ICs0MzgxLDcgQEAgQUxMT1dfREVQUkVDQVRFRF9J
TVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAgICBpZiAoIXJhbmdlU2V0KQogICAgICAgICAg
ICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgICAgICBQbGFpblRleHRSYW5nZSBwbGFpblRleHRS
YW5nZSA9IFBsYWluVGV4dFJhbmdlKHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgpOwotICAg
ICAgICAgICAgYXV0byBib3VuZHMgPSBGbG9hdFJlY3QobV9vYmplY3QtPmRvQVhCb3VuZHNGb3JS
YW5nZVVzaW5nQ2hhcmFjdGVyT2Zmc2V0KHBsYWluVGV4dFJhbmdlKSk7CisgICAgICAgICAgICBh
dXRvIGJvdW5kcyA9IEZsb2F0UmVjdChzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9BWEJvdW5kc0Zv
clJhbmdlVXNpbmdDaGFyYWN0ZXJPZmZzZXQocGxhaW5UZXh0UmFuZ2UpKTsKICAgICAgICAgICAg
IE5TUmVjdCByZWN0ID0gW3NlbGYgY29udmVydFJlY3RUb1NwYWNlOmJvdW5kcyBzcGFjZTpBY2Nl
c3NpYmlsaXR5Q29udmVyc2lvblNwYWNlOjpTY3JlZW5dOwogICAgICAgICAgICAgcmV0dXJuIFtO
U1ZhbHVlIHZhbHVlV2l0aFJlY3Q6cmVjdF07CiAgICAgICAgIH0KQEAgLTQzOTAsNyArNDM5Myw3
IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgcmV0
dXJuIHJhbmdlU2V0ID8gW3NlbGYgZG9BWEF0dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZTpyYW5nZV0g
OiBuaWw7CiAgICAgICAgIAogICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6
IChOU1N0cmluZyopa0FYU3R5bGVSYW5nZUZvckluZGV4UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0p
IHsKLSAgICAgICAgICAgIFBsYWluVGV4dFJhbmdlIHRleHRSYW5nZSA9IG1fb2JqZWN0LT5kb0FY
U3R5bGVSYW5nZUZvckluZGV4KFtudW1iZXIgaW50VmFsdWVdKTsKKyAgICAgICAgICAgIFBsYWlu
VGV4dFJhbmdlIHRleHRSYW5nZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5kb0FYU3R5bGVSYW5n
ZUZvckluZGV4KFtudW1iZXIgaW50VmFsdWVdKTsKICAgICAgICAgICAgIHJldHVybiBbTlNWYWx1
ZSB2YWx1ZVdpdGhSYW5nZTogTlNNYWtlUmFuZ2UodGV4dFJhbmdlLnN0YXJ0LCB0ZXh0UmFuZ2Uu
bGVuZ3RoKV07CiAgICAgICAgIH0KICAgICB9CkBAIC00NDE5LDcgKzQ0MjIsNyBAQCBBTExPV19E
RVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAKICAgICAvLyBUcmVlIG9iamVjdHMg
cmV0dXJuIHRoZWlyIHJvd3MgYXMgdGhlaXIgY2hpbGRyZW4uIFdlIGNhbiB1c2UgdGhlIG9yaWdp
bmFsIG1ldGhvZAogICAgIC8vIGhlcmUsIGJlY2F1c2Ugd2Ugd29uJ3QgZ2FpbiBhbnkgc3BlZWQg
dXAuCi0gICAgaWYgKG1fb2JqZWN0LT5pc1RyZWUoKSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdP
YmplY3QtPmlzVHJlZSgpKQogICAgICAgICByZXR1cm4gW3N1cGVyIGFjY2Vzc2liaWxpdHlJbmRl
eE9mQ2hpbGQ6Y2hpbGRdOwogICAgIAogICAgIE5TQXJyYXkgKmNoaWxkcmVuID0gc2VsZi5jaGls
ZHJlblZlY3RvckFycmF5OwpAQCAtNDQ0OSw3ICs0NDUyLDcgQEAgQUxMT1dfREVQUkVDQVRFRF9E
RUNMQVJBVElPTlNfQkVHSU4KICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRyaWJ1dGVdKSB7CiAgICAgICAgIC8vIFRyZWUgaXRlbXMg
b2JqZWN0IHJldHVybnMgYSBkaWZmZXJlbnQgc2V0IG9mIGNoaWxkcmVuIHRoYW4gdGhvc2UgdGhh
dCBhcmUgaW4gY2hpbGRyZW4oKQogICAgICAgICAvLyBiZWNhdXNlIGFuIEFYT3V0bGluZSAodGhl
IG1hYyByb2xlIGlzIGJlY29tZXMpIGhhcyBzb21lIG9kZCBzdGlwdWxhdGlvbnMuCi0gICAgICAg
IGlmIChtX29iamVjdC0+aXNUcmVlKCkgfHwgbV9vYmplY3QtPmlzVHJlZUl0ZW0oKSkKKyAgICAg
ICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1RyZWUoKSB8fCBzZWxmLmF4QmFja2luZ09i
amVjdC0+aXNUcmVlSXRlbSgpKQogICAgICAgICAgICAgcmV0dXJuIFtbc2VsZiBhY2Nlc3NpYmls
aXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRyaWJ1dGVdIGNvdW50
XTsKICAgICAgICAgCiAgICAgICAgIGF1dG8gY2hpbGRyZW5TaXplID0gc2VsZi5jaGlsZHJlblZl
Y3RvclNpemU7CkBAIC00NDgyLDcgKzQ0ODUsNyBAQCBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFU
SU9OU19FTkQKICAgICAgICAgICAgIHJldHVybiBbY2hpbGRyZW4gc3ViYXJyYXlXaXRoUmFuZ2U6
TlNNYWtlUmFuZ2UoaW5kZXgsIGFycmF5TGVuZ3RoKV07CiAgICAgICAgIH0KIAotICAgICAgICBp
ZiAoX2F4QmFja2luZ09iamVjdC0+aXNUcmVlKCkgfHwgX2F4QmFja2luZ09iamVjdC0+aXNUcmVl
SXRlbSgpKSB7CisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUcmVlKCkgfHwg
c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVHJlZUl0ZW0oKSkgewogICAgICAgICAgICAgLy8gVHJl
ZSBvYmplY3RzIHJldHVybiB0aGVpciByb3dzIGFzIHRoZWlyIGNoaWxkcmVuICYgdHJlZSBpdGVt
cyByZXR1cm4gdGhlaXIgY29udGVudHMgc2FucyByb3dzLgogICAgICAgICAgICAgLy8gV2UgY2Fu
IHVzZSB0aGUgb3JpZ2luYWwgbWV0aG9kIGluIHRoaXMgY2FzZS4KICAgICAgICAgICAgIHJldHVy
biBbc3VwZXIgYWNjZXNzaWJpbGl0eUFycmF5QXR0cmlidXRlVmFsdWVzOmF0dHJpYnV0ZSBpbmRl
eDppbmRleCBtYXhDb3VudDptYXhDb3VudF07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388620</attachid>
            <date>2020-01-23 16:58:35 -0800</date>
            <delta_ts>2020-01-23 17:48:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206384-20200123195834.patch</filename>
            <type>text/plain</type>
            <size>224814</size>
            <attacher name="Andres Gonzalez">andresg_22</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0Nzk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWI0YzhlZmEyOWViZGYx
N2VjMTEyNjM3MWZjMTE4MDQwNmY4ZTk5Zi4uODZkYjBlNjM3ZDhiYTNjYTY0N2M5MTkxNTRkNDQ0
ZGUwNWYzYmYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0NCBAQAorMjAyMC0wMS0yMyAgQW5k
cmVzIEdvbnphbGV6ICA8YW5kcmVzZ18yMkBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIHRoZSBz
YW1lIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGZvciBhc3NvY2lhdGVkIEFYT2JqZWN0IGFu
ZCBBWElzb2xhdGVkT2JqZWN0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA2Mzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQXNzb2NpYXRlZCBBWE9iamVjdCBhbmQgQVhJc29sYXRlZE9iamVjdCBuZWVk
IHRvIHNoYXJlIHRoZSBzYW1lCisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGlu
IG9yZGVyIGZvciBhY2Nlc3NpYmlsaXR5IGNsaWVudHMgdG8gd29yaworICAgICAgICBwcm9wZXJs
eS4gVGhpcyBjaGFuZ2UgaW1wbGVtZW50cyBDaHJpcyBGbGVpemFjaCdzIG9yaWdpbmFsIGFwcHJv
YWNoIHRvCisgICAgICAgIGhhdmUgYm90aCB0aGUgQVhPYmplY3QgYW5kIElzb2xhdGVkT2JqZWN0
IGluIHRoZSBzYW1lIHdyYXBwZXIuIFRoaXMKKyAgICAgICAgYXBwcm9hY2ggYWxsb3dzIHRoZSBl
dmVudCBub3RpZmljYXRpb24gY29kZSB0byByZW1haW4gdGhlIHNhbWUgaW4KKyAgICAgICAgaXNv
bGF0ZWQgdHJlZSBtb2RlLCBhbmQgbWluaW1pemVzIGxvY2sgY29udGVudGlvbiBiZXR3ZWVuIHRo
ZSBtYWluIGFuZAorICAgICAgICBBWCB0aHJlYWRzLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmNh
Y2hlQW5kSW5pdGlhbGl6ZVdyYXBwZXIpOiBVdGlsaXR5IG1ldGhvZCB0aGF0IGVuY2Fwc3VsYXRl
cyB0aGVzZSBvcGVyYXRpb25zIHBlcmZvcm1lZCBpbiB0aGUgZ2V0T3JDcmVhdGUgbWV0aG9kcy4K
KyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmNyZWF0ZUlzb2xhdGVkVHJlZUhpZXJhcmNoeSk6IEF0
dGFjaGVzIHRvIHRoZSBJc29sYXRlZE9iamVjdCB0aGUgc2FtZSB3cmFwcGVyIGFzIGl0cyBhc3Nv
Y2lhdGVkIEFYT2JqZWN0LgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5o
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVySU9TLm1tOiBJbnN0ZWFkIG9mIGFjY2Vzc2luZyB0aGUgYmFja2luZyBvYmplY3QgZGlyZWN0
bHkgKG1fb2JqZWN0KSBvciB0aHJvdWdoIHRoZSBtYWNybyBfYXhCYWNraW5nT2JqZWN0LCB1c2Vz
IHNlbGYuYXhCYWNraW5nT2JqZWN0LgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFu
Y2VzdG9yKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgaW5pdFdpdGhE
YXRhOmFjY2Vzc2liaWxpdHlPYmplY3Q6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGRldGFjaF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBkZWFsbG9jXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUNhbkZ1enp5SGl0VGVzdF0pOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5SGl0VGVzdDpd
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgZW5hYmxlQXR0cmli
dXRlQ2FjaGluZ10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBk
aXNhYmxlQXR0cmlidXRlQ2FjaGluZ10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5RWxlbWVudENvdW50XSk6CisgICAgICAgICgtW1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlFbGVtZW50QXRJbmRleDpdKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgaW5kZXhPZkFjY2Vzc2li
aWxpdHlFbGVtZW50Ol0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBfYWNjZXNzaWJpbGl0eVBhdGhdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgYWNjZXNzaWJpbGl0eUhhc1BvcHVwXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlQb3B1cFZhbHVlXSk6CisgICAgICAgICgt
W1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlMYW5ndWFnZV0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5SXNE
aWFsb2ddKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vz
c2liaWxpdHlUcmVlQW5jZXN0b3JdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlMaXN0QW5jZXN0b3JdKToKKyAgICAgICAgKC1bV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlBcnRpY2xlQW5jZXN0b3JdKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlM
YW5kbWFya0FuY2VzdG9yXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyIF9hY2Nlc3NpYmlsaXR5VGFibGVBbmNlc3Rvcl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eUlzSW5UYWJsZUNlbGxdKToKKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlGaWVsZHNl
dEFuY2VzdG9yXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9h
Y2Nlc3NpYmlsaXR5RnJhbWVBbmNlc3Rvcl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eVRyYWl0c0Zyb21BbmNlc3RvcnNdKToKKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUlzV2ViSW50
ZXJhY3RpdmVWaWRlb10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBpbnRlcmFjdGl2ZVZpZGVvRGVzY3JpcHRpb25dKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUlzTWVkaWFQbGF5aW5nXSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlJc01lZGlhTXV0
ZWRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJp
bGl0eVRvZ2dsZU11dGVGb3JNZWRpYV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5VmlkZW9FbnRlckZ1bGxzY3JlZW5dKToKKyAgICAgICAg
KC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlUZXh0RW50cnlU
cmFpdHNdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNz
aWJpbGl0eVRyYWl0c10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBpc1NWR0dyb3VwRWxlbWVudF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBkZXRlcm1pbmVJc0FjY2Vzc2liaWxpdHlFbGVtZW50XSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHN0cmluZ1ZhbHVlU2hvdWxkQmVVc2VkSW5MYWJl
bF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJp
bGl0eUhhc1RvdWNoRXZlbnRMaXN0ZW5lcl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eVZhbHVlSXNBdXRvZmlsbGVkXSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5SXNTdHJvbmdQ
YXNzd29yZEZpZWxkXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
IF9hY2Nlc3NpYmlsaXR5TWluVmFsdWVdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlNYXhWYWx1ZV0pOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0aW9uXSk6Cisg
ICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlMYWJl
bF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0YWJsZUNlbGxQ
YXJlbnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGFibGVQ
YXJlbnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNz
aWJpbGl0eVRpdGxlRWxlbWVudF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBhY2Nlc3NpYmlsaXR5Um93UmFuZ2VdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUJsb2NrcXVvdGVMZXZlbF0pOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5RGF0ZXRpbWVW
YWx1ZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3Np
YmlsaXR5UGxhY2Vob2xkZXJWYWx1ZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5Q29sb3JTdHJpbmdWYWx1ZV0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5VmFsdWVdKToKKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUlzQXR0YWNo
bWVudEVsZW1lbnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
YWNjZXNzaWJpbGl0eUlzQ29tYm9Cb3hdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUhpbnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eVVSTF0pOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eVNjcm9sbFRvVmlzaWJsZV0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5U2Ny
b2xsOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNz
aWJpbGl0eVJlbGF0aXZlRnJhbWVdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgYWNjZXNzaWJpbGl0eUVsZW1lbnRSZWN0XSk6CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlWaXNpYmxlQ29udGVudFJlY3RdKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUFj
dGl2YXRpb25Qb2ludF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBhY2Nlc3NpYmlsaXR5RnJhbWVdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgY29udGFpbnNVbm5hdHVyYWxseVNlZ21lbnRlZENoaWxkcmVuXSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlDb250YWluZXJd
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0
eUZvY3VzZWRVSUVsZW1lbnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgX2FjY2Vzc2liaWxpdHlXZWJEb2N1bWVudFZpZXddKToKKyAgICAgICAgKC1bV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUNhblNldFZhbHVlXSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlMaW5rUmVs
YXRpb25zaGlwVHlwZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBhY2Nlc3NpYmlsaXR5UmVxdWlyZWRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUZsb3dUb0VsZW1lbnRzXSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlMaW5rZWRFbGVtZW50XSk6
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGlzQXR0YWNobWVudF0p
OgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5
VGV4dHVhbENvbnRleHRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgX2FjY2Vzc2liaWxpdHlBY3RpdmF0ZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciBhdHRhY2htZW50Vmlld10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eVNjcm9sbFBvc2l0aW9uXSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5U2Nyb2xsU2l6
ZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJp
bGl0eVNjcm9sbFZpc2libGVSZWN0XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlGaW5kTWF0Y2hpbmdPYmplY3RzOl0pOgorICAgICAgICAo
LVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5TW9kaWZ5U2VsZWN0
aW9uOmluY3JlYXNlOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBhY2Nlc3NpYmlsaXR5TW92ZVNlbGVjdGlvblRvTWFya2VyOl0pOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5SW5jcmVtZW50XSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlEZWNyZW1l
bnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2li
aWxpdHlTZXRWYWx1ZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgc3RyaW5nRm9yVGV4dE1hcmtlcnM6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGFycmF5T2ZUZXh0Rm9yVGV4dE1hcmtlcnM6YXR0cmlidXRlZDpdKToKKyAg
ICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2NvbnZlcnRUb05TUmFuZ2U6
XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9jb252ZXJ0VG9E
T01SYW5nZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgcG9z
aXRpb25Gb3JUZXh0TWFya2VyOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciB0ZXh0TWFya2VyUmFuZ2VdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgdGV4dE1hcmtlclJhbmdlRm9yU2VsZWN0aW9uXSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRleHRNYXJrZXJGb3JQb3NpdGlvbjpdKToKKyAg
ICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgc3RyaW5nRm9yUmFuZ2U6XSk6
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5
U2VsZWN0ZWRUZXh0UmFuZ2VdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgX2FjY2Vzc2liaWxpdHlTZXRTZWxlY3RlZFRleHRSYW5nZTpdKToKKyAgICAgICAgKC1b
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eVJlcGxhY2VSYW5nZTp3
aXRoVGV4dDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNj
ZXNzaWJpbGl0eUluc2VydFRleHQ6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIHNlbGVjdGVkVGV4dE1hcmtlcl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciBsaW5lRW5kTWFya2VyRm9yTWFya2VyOl0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBsaW5lU3RhcnRNYXJrZXJGb3JNYXJrZXI6XSk6
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIG1pc3NwZWxsaW5nVGV4
dE1hcmtlclJhbmdlOmZvcndhcmQ6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIGZyYW1lRm9yVGV4dE1hcmtlcnM6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIHJhbmdlRnJvbU1hcmtlcnM6d2l0aFRleHQ6XSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRleHRNYXJrZXJGb3JQb2ludDpdKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgbmV4dE1hcmtlckZvckNo
YXJhY3Rlck9mZnNldDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgcHJldmlvdXNNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6XSk6CisgICAgICAgICgtW1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHJhbmdlRm9yVGV4dE1hcmtlcnM6XSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHN0YXJ0T3JFbmRUZXh0TWFya2VyRm9y
VGV4dE1hcmtlcnM6aXNTdGFydDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgdGV4dE1hcmtlcnNGb3JSYW5nZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUV4cGFuZGVkVGV4dFZhbHVlXSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlJZGVudGlm
aWVyXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2li
aWxpdHlBUklBSXNCdXN5XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyIGFjY2Vzc2liaWxpdHlBUklBTGl2ZVJlZ2lvblN0YXR1c10pOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QVJJQVJlbGV2YW50U3RhdHVz
XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxp
dHlBUklBTGl2ZVJlZ2lvbklzQXRvbWljXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlTdXBwb3J0c0FSSUFQcmVzc2VkXSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlJc1ByZXNzZWRd
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0
eVN1cHBvcnRzQVJJQUV4cGFuZGVkXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlJc0V4cGFuZGVkXSk6CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlJc1Nob3dpbmdWYWxpZGF0aW9uTWVz
c2FnZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3Np
YmlsaXR5SW52YWxpZFN0YXR1c10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBhY2Nlc3NpYmlsaXR5QVJJQUN1cnJlbnRTdGF0dXNdKToKKyAgICAgICAgKC1bV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb25dKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eU1h
dGhSb290SW5kZXhPYmplY3RdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgYWNjZXNzaWJpbGl0eU1hdGhSYWRpY2FuZE9iamVjdF0pOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5TWF0aE51bWVyYXRvck9iamVj
dF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmls
aXR5TWF0aERlbm9taW5hdG9yT2JqZWN0XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlNYXRoQmFzZU9iamVjdF0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5TWF0aFN1YnNjcmlwdE9i
amVjdF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3Np
YmlsaXR5TWF0aFN1cGVyc2NyaXB0T2JqZWN0XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlNYXRoVW5kZXJPYmplY3RdKToKKyAgICAgICAg
KC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eU1hdGhPdmVyT2Jq
ZWN0XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2li
aWxpdHlNYXRoRmVuY2VkT3BlblN0cmluZ10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5TWF0aEZlbmNlZENsb3NlU3RyaW5nXSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlJc01hdGhU
b3BPYmplY3RdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNj
ZXNzaWJpbGl0eU1hdGhMaW5lVGhpY2tuZXNzXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlNYXRoVHlwZV0pOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5Q2xpY2tQb2ludF0pOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW06CisgICAgICAgIChX
ZWJDb3JlOjpBWE9iamVjdENhY2hlOjphdHRhY2hXcmFwcGVyKTogQXR0YWNoZXMgdGhlIGdpdmVu
IElzb2xhdGVkT2JqZWN0IGFuZCB3cmFwcGVyLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFj
L1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5oOgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbToKKyAgICAgICAg
KC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlIGluaXRXaXRoQWNjZXNzaWJpbGl0
eU9iamVjdDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNl
IGF0dGFjaEFYT2JqZWN0Ol0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlckJhc2UgYXR0YWNoSXNvbGF0ZWRPYmplY3Q6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyQmFzZSBkZXRhY2hdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJCYXNlIHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9yZV0pOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UgYmFzZUFjY2Vzc2liaWxpdHlU
aXRsZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UgYXhC
YWNraW5nT2JqZWN0XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
QmFzZSBiYXNlQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uXSk6CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZSBiYXNlQWNjZXNzaWJpbGl0eVNwZWVjaEhpbnRdKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlIGJhc2VBY2Nlc3Np
YmlsaXR5SGVscFRleHRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJCYXNlIGNvbnZlcnRSZWN0VG9TcGFjZTpzcGFjZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlIGFyaWFMYW5kbWFya1JvbGVEZXNjcmlwdGlvbl0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UgYmFzZUFjY2Vzc2li
aWxpdHlTZXRGb2N1czpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJCYXNlIGFjY2Vzc2liaWxpdHlNYXRoUG9zdHNjcmlwdFBhaXJzXSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZSBhY2Nlc3NpYmlsaXR5TWF0aFByZXNjcmlw
dFBhaXJzXSk6CisgICAgICAgIChhY2Nlc3NpYmlsaXR5U2VhcmNoQ3JpdGVyaWFGb3JTZWFyY2hQ
cmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJCYXNlIGFjY2Vzc2liaWxpdHlPYmplY3RdKTogRGVsZXRlZCwgYXhC
YWNraW5nT2JqZWN0IHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06IEluc3RlYWQgb2Yg
YWNjZXNzaW5nIHRoZSBiYWNraW5nIG9iamVjdCBkaXJlY3RseSAobV9vYmplY3QpIG9yIHRocm91
Z2ggdGhlIG1hY3JvIF9heEJhY2tpbmdPYmplY3QsIHVzZXMgc2VsZi5heEJhY2tpbmdPYmplY3Qu
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGF0dGFjaG1lbnRWaWV3
XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHNjcmVlblRvQ29u
dGVudHM6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vz
c2liaWxpdHlPYmplY3RGb3JUZXh0TWFya2VyOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6XSk6CisgICAgICAgICgt
W1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHN0YXJ0T3JFbmRUZXh0TWFya2VyRm9yUmFu
Z2U6aXNTdGFydDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
bmV4dFRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6XSk6CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIHByZXZpb3VzVGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNl
dDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGV4dE1hcmtl
ckZvckNoYXJhY3Rlck9mZnNldDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6XSk6CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6XSk6Cisg
ICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRleHRNYXJrZXJGb3JWaXNp
YmxlUG9zaXRpb246XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
IHRleHRNYXJrZXJGb3JGaXJzdFBvc2l0aW9uSW5UZXh0Q29udHJvbDpdKToKKyAgICAgICAgKC1b
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtl
cjpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgZG9BWEF0dHJp
YnV0ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2U6c3BlbGxDaGVjazpdKToKKyAgICAgICAgKC1b
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQ
b3NpdGlvbnM6ZW5kUG9zaXRpb246XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORF0pOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhZGRpdGlvbmFsQWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZU5hbWVzXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyIHZpc2libGVQb3NpdGlvblJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOl0pOgorICAgICAgICAo
LVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciByZW5kZXJXaWRnZXRDaGlsZHJlbl0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciByZW1vdGVBY2Nlc3NpYmls
aXR5UGFyZW50T2JqZWN0XSk6CisgICAgICAgIChjb252ZXJ0VG9WZWN0b3IpOgorICAgICAgICAo
LVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0ZXh0TWFya2VyUmFuZ2VGb3JTZWxlY3Rp
b25dKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYXNzb2NpYXRl
ZFBsdWdpblBhcmVudF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBwYXRoXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGNoaWxk
cmVuVmVjdG9yU2l6ZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBjaGlsZHJlblZlY3RvckFycmF5XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIHBvc2l0aW9uXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyIHJvbGVdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
c3Vicm9sZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciByb2xl
RGVzY3JpcHRpb25dKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
Y29tcHV0ZWRSb2xlU3RyaW5nXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyIHNjcm9sbFZpZXdQYXJlbnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgdmFsdWVEZXNjcmlwdGlvbkZvck1ldGVyXSk6CisgICAgICAgICgtW1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHdpbmRvd0VsZW1lbnQ6XSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpd
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0
eUZvY3VzZWRVSUVsZW1lbnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgYWNjZXNzaWJpbGl0eUhpdFRlc3Q6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlJc0F0dHJpYnV0ZVNldHRhYmxlOl0pOgorICAg
ICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eVBlcmZv
cm1QcmVzc0FjdGlvbl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBfYWNjZXNzaWJpbGl0eVBlcmZvcm1JbmNyZW1lbnRBY3Rpb25dKToKKyAgICAgICAgKC1bV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlQZXJmb3JtRGVjcmVtZW50
QWN0aW9uXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vz
c2liaWxpdHlQZXJmb3JtU2hvd01lbnVBY3Rpb25dKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlTaG93Q29udGV4dE1lbnVdKToKKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eVNjcm9sbFRv
VmlzaWJsZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNj
ZXNzaWJpbGl0eVNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXM6XSk6CisgICAgICAgICgt
W1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5U2Nyb2xsVG9HbG9i
YWxQb2ludDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNj
ZXNzaWJpbGl0eVJlcGxhY2VSYW5nZTp3aXRoVGV4dDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUluc2VydFRleHQ6XSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5U2V0VmFsdWU6
Zm9yQXR0cmlidXRlOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclJhbmdlOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlciBfY29udmVydFRvTlNSYW5nZTpdKToKKyAgICAgICAgKC1bV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2luZGV4Rm9yVGV4dE1hcmtlcjpdKToKKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX3RleHRNYXJrZXJGb3JJbmRleDpd
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZVZhbHVlOmZvclBhcmFtZXRlcjpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUluZGV4T2ZDaGlsZDpdKToKKyAgICAgICAg
KC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUFycmF5QXR0cmli
dXRlQ291bnQ6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFj
Y2Vzc2liaWxpdHlBcnJheUF0dHJpYnV0ZVZhbHVlczppbmRleDptYXhDb3VudDpdKToKKwogMjAy
MC0wMS0xOCAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0xG
Q10gTGF5b3V0U3RhdGUgY29uc3RydWN0b3Igc2hvdWxkbid0IHRha2UgTGF5b3V0VHJlZUNvbnRl
bnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCmlu
ZGV4IDZmMzdjMGIzZjI4OTYzNTA1Mjg0NDA0ZDQyYzYxZjdlYjA0ODk2YjIuLmUzNDZjNjFmYWU1
NzA2YjExZDBkMmMwYmIxNmQ4MmJiYWFmMzI4Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAtNjAzLDYgKzYwMywyMSBAQCBzdGF0aWMg
UmVmPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGNyZWF0ZUZyb21Ob2RlKE5vZGUqIG5vZGUpCiAgICAg
cmV0dXJuIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjcmVhdGUobm9kZSk7CiB9CiAKK3ZvaWQg
QVhPYmplY3RDYWNoZTo6Y2FjaGVBbmRJbml0aWFsaXplV3JhcHBlcihBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBuZXdPYmplY3QsIERPTU9iamVjdFZhcmlhbnQgZG9tT2JqZWN0KQoreworICAgIEFTU0VS
VChuZXdPYmplY3QpOworICAgIEFYSUQgYXhJRCA9IGdldEFYSUQobmV3T2JqZWN0KTsKKyAgICBX
VEY6OnN3aXRjaE9uKGRvbU9iamVjdCwKKyAgICAgICAgWyZheElELCB0aGlzXSAoUmVuZGVyT2Jq
ZWN0KiB0eXBlZFZhbHVlKSB7IG1fcmVuZGVyT2JqZWN0TWFwcGluZy5zZXQodHlwZWRWYWx1ZSwg
YXhJRCk7IH0sCisgICAgICAgIFsmYXhJRCwgdGhpc10gKE5vZGUqIHR5cGVkVmFsdWUpIHsgbV9u
b2RlT2JqZWN0TWFwcGluZy5zZXQodHlwZWRWYWx1ZSwgYXhJRCk7IH0sCisgICAgICAgIFsmYXhJ
RCwgdGhpc10gKFdpZGdldCogdHlwZWRWYWx1ZSkgeyBtX3dpZGdldE9iamVjdE1hcHBpbmcuc2V0
KHR5cGVkVmFsdWUsIGF4SUQpOyB9LAorICAgICAgICBbXSAoYXV0byYpIHsgfQorICAgICk7Cisg
ICAgbV9vYmplY3RzLnNldChheElELCBuZXdPYmplY3QpOworICAgIG5ld09iamVjdC0+aW5pdCgp
OworICAgIGF0dGFjaFdyYXBwZXIobmV3T2JqZWN0KTsKK30KKwogQWNjZXNzaWJpbGl0eU9iamVj
dCogQVhPYmplY3RDYWNoZTo6Z2V0T3JDcmVhdGUoV2lkZ2V0KiB3aWRnZXQpCiB7CiAgICAgaWYg
KCF3aWRnZXQpCkBAIC02MjUsMTIgKzY0MCw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2Jq
ZWN0Q2FjaGU6OmdldE9yQ3JlYXRlKFdpZGdldCogd2lkZ2V0KQogICAgIGlmICghbmV3T2JqKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGdldEFYSUQobmV3T2JqLmdldCgpKTsKLSAg
ICAKLSAgICBtX3dpZGdldE9iamVjdE1hcHBpbmcuc2V0KHdpZGdldCwgbmV3T2JqLT5vYmplY3RJ
RCgpKTsKLSAgICBtX29iamVjdHMuc2V0KG5ld09iai0+b2JqZWN0SUQoKSwgbmV3T2JqKTsKLSAg
ICBuZXdPYmotPmluaXQoKTsKLSAgICBhdHRhY2hXcmFwcGVyKG5ld09iai5nZXQoKSk7CisgICAg
Y2FjaGVBbmRJbml0aWFsaXplV3JhcHBlcihuZXdPYmouZ2V0KCksIHdpZGdldCk7CiAgICAgcmV0
dXJuIG5ld09iai5nZXQoKTsKIH0KIApAQCAtNjczLDEyICs2ODMsNyBAQCBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZShOb2RlKiBub2RlKQogICAgIC8vIFdp
bGwgY3Jhc2ggbGF0ZXIgaWYgd2UgaGF2ZSB0d28gb2JqZWN0cyBmb3IgdGhlIHNhbWUgbm9kZS4K
ICAgICBBU1NFUlQoIWdldChub2RlKSk7CiAKLSAgICBnZXRBWElEKG5ld09iai5nZXQoKSk7Ci0K
LSAgICBtX25vZGVPYmplY3RNYXBwaW5nLnNldChub2RlLCBuZXdPYmotPm9iamVjdElEKCkpOwot
ICAgIG1fb2JqZWN0cy5zZXQobmV3T2JqLT5vYmplY3RJRCgpLCBuZXdPYmopOwotICAgIG5ld09i
ai0+aW5pdCgpOwotICAgIGF0dGFjaFdyYXBwZXIobmV3T2JqLmdldCgpKTsKKyAgICBjYWNoZUFu
ZEluaXRpYWxpemVXcmFwcGVyKG5ld09iai5nZXQoKSwgbm9kZSk7CiAgICAgbmV3T2JqLT5zZXRM
YXN0S25vd25Jc0lnbm9yZWRWYWx1ZShuZXdPYmotPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSk7
CiAgICAgLy8gU29tZXRpbWVzIGFza2luZyBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgd2lsbCBj
YXVzZSB0aGUgbmV3T2JqZWN0IHRvIGJlIGRlYWxsb2NhdGVkLCBhbmQgdGhlbgogICAgIC8vIGl0
IHdpbGwgZGlzYXBwZWFyIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBmaW5pc2hlZCwgbGVhZGluZyB0
byBhIHVzZS1hZnRlci1mcmVlLgpAQCAtNzAxLDEyICs3MDYsNyBAQCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQog
ICAgIC8vIFdpbGwgY3Jhc2ggbGF0ZXIgaWYgd2UgaGF2ZSB0d28gb2JqZWN0cyBmb3IgdGhlIHNh
bWUgcmVuZGVyZXIuCiAgICAgQVNTRVJUKCFnZXQocmVuZGVyZXIpKTsKIAotICAgIGdldEFYSUQo
bmV3T2JqLmdldCgpKTsKLQotICAgIG1fcmVuZGVyT2JqZWN0TWFwcGluZy5zZXQocmVuZGVyZXIs
IG5ld09iai0+b2JqZWN0SUQoKSk7Ci0gICAgbV9vYmplY3RzLnNldChuZXdPYmotPm9iamVjdElE
KCksIG5ld09iaik7Ci0gICAgbmV3T2JqLT5pbml0KCk7Ci0gICAgYXR0YWNoV3JhcHBlcihuZXdP
YmouZ2V0KCkpOworICAgIGNhY2hlQW5kSW5pdGlhbGl6ZVdyYXBwZXIobmV3T2JqLmdldCgpLCBy
ZW5kZXJlcik7CiAgICAgbmV3T2JqLT5zZXRMYXN0S25vd25Jc0lnbm9yZWRWYWx1ZShuZXdPYmot
PmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSk7CiAgICAgLy8gU29tZXRpbWVzIGFza2luZyBhY2Nl
c3NpYmlsaXR5SXNJZ25vcmVkKCkgd2lsbCBjYXVzZSB0aGUgbmV3T2JqZWN0IHRvIGJlIGRlYWxs
b2NhdGVkLCBhbmQgdGhlbgogICAgIC8vIGl0IHdpbGwgZGlzYXBwZWFyIHdoZW4gdGhpcyBmdW5j
dGlvbiBpcyBmaW5pc2hlZCwgbGVhZGluZyB0byBhIHVzZS1hZnRlci1mcmVlLgpAQCAtNzk1LDgg
Kzc5NSw4IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OnJvb3RPYmplY3RG
b3JGcmFtZShGcmFtZSogZnJhbWUpCiAgICAgCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVj
dENhY2hlOjpnZXRPckNyZWF0ZShBY2Nlc3NpYmlsaXR5Um9sZSByb2xlKQogewotICAgIFJlZlB0
cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBvYmogPSBudWxscHRyOwotICAgIAorICAgIFJlZlB0cjxB
Y2Nlc3NpYmlsaXR5T2JqZWN0PiBvYmo7CisKICAgICAvLyB3aWxsIGJlIGZpbGxlZCBpbi4uLgog
ICAgIHN3aXRjaCAocm9sZSkgewogICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6Okxpc3RCb3hP
cHRpb246CkBAIC04MjksMTUgKzgyOSwxMSBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVj
dENhY2hlOjpnZXRPckNyZWF0ZShBY2Nlc3NpYmlsaXR5Um9sZSByb2xlKQogICAgIGRlZmF1bHQ6
CiAgICAgICAgIG9iaiA9IG51bGxwdHI7CiAgICAgfQotICAgIAotICAgIGlmIChvYmopCi0gICAg
ICAgIGdldEFYSUQob2JqLmdldCgpKTsKLSAgICBlbHNlCisKKyAgICBpZiAoIW9iaikKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBtX29iamVjdHMuc2V0KG9iai0+b2JqZWN0SUQoKSwg
b2JqKTsKLSAgICBvYmotPmluaXQoKTsKLSAgICBhdHRhY2hXcmFwcGVyKG9iai5nZXQoKSk7Cisg
ICAgY2FjaGVBbmRJbml0aWFsaXplV3JhcHBlcihvYmouZ2V0KCkpOwogICAgIHJldHVybiBvYmou
Z2V0KCk7CiB9CiAKQEAgLTMwODAsOCArMzA3Niw3IEBAIFJlZjxBWElzb2xhdGVkT2JqZWN0PiBB
WE9iamVjdENhY2hlOjpjcmVhdGVJc29sYXRlZFRyZWVIaWVyYXJjaHkoQVhDb3JlT2JqZWN0JiBv
CiAKICAgICBpc29sYXRlZFRyZWVOb2RlLT5zZXRUcmVlSWRlbnRpZmllcih0cmVlLnRyZWVJZGVu
dGlmaWVyKCkpOwogICAgIGlzb2xhdGVkVHJlZU5vZGUtPnNldFBhcmVudChwYXJlbnRJRCk7Ci0g
ICAgYXhPYmplY3RDYWNoZS0+ZGV0YWNoV3JhcHBlcigmb2JqZWN0LCBBY2Nlc3NpYmlsaXR5RGV0
YWNobWVudFR5cGU6OkVsZW1lbnRDaGFuZ2UpOwotICAgIGF4T2JqZWN0Q2FjaGUtPmF0dGFjaFdy
YXBwZXIoJmlzb2xhdGVkVHJlZU5vZGUuZ2V0KCkpOworICAgIGF4T2JqZWN0Q2FjaGUtPmF0dGFj
aFdyYXBwZXIoJmlzb2xhdGVkVHJlZU5vZGUuZ2V0KCksIG9iamVjdC53cmFwcGVyKCkpOwogCiAg
ICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZCA6IG9iamVjdC5jaGlsZHJlbigpKSB7CiAgICAgICAg
IGF1dG8gc3RhdGljQ2hpbGQgPSBjcmVhdGVJc29sYXRlZFRyZWVIaWVyYXJjaHkoKmNoaWxkLCBp
c29sYXRlZFRyZWVOb2RlLT5vYmplY3RJRCgpLCBheE9iamVjdENhY2hlLCB0cmVlLCBub2RlQ2hh
bmdlcywgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
WE9iamVjdENhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2Fj
aGUuaAppbmRleCBkM2Q0NWYzM2M4MDk4ZDk3M2U5NTkyMzc5MmQxMmE2YTc4OTgwZGFmLi4yMTM5
NDA2ODBmOGUzNDJmN2UyNzZlMTQ2MzZkNjk2M2UxOWY1YzllIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaApAQCAtMTcyLDcgKzE3MiwxNSBAQCBwdWJs
aWM6CiAgICAgdm9pZCByZW1vdmUoQVhJRCk7CiAKICAgICB2b2lkIGRldGFjaFdyYXBwZXIoQVhD
b3JlT2JqZWN0KiwgQWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBlKTsKK3ByaXZhdGU6CisgICAg
dXNpbmcgRE9NT2JqZWN0VmFyaWFudCA9IFZhcmlhbnQ8c3RkOjpudWxscHRyX3QsIFJlbmRlck9i
amVjdCosIE5vZGUqLCBXaWRnZXQqPjsKKyAgICB2b2lkIGNhY2hlQW5kSW5pdGlhbGl6ZVdyYXBw
ZXIoQWNjZXNzaWJpbGl0eU9iamVjdCosIERPTU9iamVjdFZhcmlhbnQgPSBudWxscHRyKTsKICAg
ICB2b2lkIGF0dGFjaFdyYXBwZXIoQVhDb3JlT2JqZWN0Kik7CisjaWYgRU5BQkxFKEFDQ0VTU0lC
SUxJVFlfSVNPTEFURURfVFJFRSkKKyAgICB2b2lkIGF0dGFjaFdyYXBwZXIoQVhJc29sYXRlZE9i
amVjdCosIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKik7CisjZW5kaWYKKworcHVibGlj
OgogICAgIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKE5vZGUqLCBOb2RlKiBuZXdDaGlsZCA9IG51bGxw
dHIpOwogICAgIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKFJlbmRlck9iamVjdCosIFJlbmRlck9iamVj
dCogbmV3Q2hpbGQgPSBudWxscHRyKTsKICAgICB2b2lkIGNoaWxkcmVuQ2hhbmdlZChBWENvcmVP
YmplY3QqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0KaW5kZXggMjZk
Y2IwZWFiNjM1OTA0MDkxMWRkYWNlNWRiOWY2OGMwZDQxMzVmMS4uNDc0ZTg1M2U3MTZhYzU0YjU5
YzM0NGMyMWQwOGZjNWZmZGE1M2FkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJJT1MubW0KQEAgLTEyMyw3ICsxMjMsNyBAQCBzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBVSUFj
Y2Vzc2liaWxpdHlUZXh0dWFsQ29udGV4dFNvdXJjZUNvZGUgPSBAIlVJQWNjZXNzaWJpbAogc3Rh
dGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5j
ZXN0b3IoQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgKndyYXBwZXIpCiB7CiAgICAgd2hpbGUg
KHdyYXBwZXIgJiYgIVt3cmFwcGVyIGlzQWNjZXNzaWJpbGl0eUVsZW1lbnRdKSB7Ci0gICAgICAg
IEFYQ29yZU9iamVjdCogb2JqZWN0ID0gW3dyYXBwZXIgYWNjZXNzaWJpbGl0eU9iamVjdF07Cisg
ICAgICAgIEFYQ29yZU9iamVjdCogb2JqZWN0ID0gd3JhcHBlci5heEJhY2tpbmdPYmplY3Q7CiAg
ICAgICAgIGlmICghb2JqZWN0KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIApAQCAtMTc5
LDcgKzE3OSw3IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciogQWNjZXNzaWJp
bGl0eVVuaWdub3JlZEFuY2VzdG9yKEFjY2Vzc2liaWxpdHlPCiAvLyBUaGlzIGlzIG5lZWRlZCBm
b3IgZXh0ZXJuYWwgY2xpZW50cyB0byBiZSBhYmxlIHRvIGNyZWF0ZSBhIHRleHQgbWFya2VyIHdp
dGhvdXQgaGF2aW5nIGEgcG9pbnRlciB0byB0aGUgY2FjaGUuCiAtIChpZClpbml0V2l0aERhdGE6
KE5TRGF0YSAqKWRhdGEgYWNjZXNzaWJpbGl0eU9iamVjdDooQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgKil3cmFwcGVyCiB7Ci0gICAgV2ViQ29yZTo6QVhDb3JlT2JqZWN0KiBheE9iamVjdCA9
IFt3cmFwcGVyIGFjY2Vzc2liaWxpdHlPYmplY3RdOworICAgIFdlYkNvcmU6OkFYQ29yZU9iamVj
dCogYXhPYmplY3QgPSB3cmFwcGVyLmF4QmFja2luZ09iamVjdDsKICAgICBpZiAoIWF4T2JqZWN0
KQogICAgICAgICByZXR1cm4gbmlsOwogICAgIApAQCAtMjc0LDcgKzI3NCw3IEBAIHN0YXRpYyBB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciogQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9y
KEFjY2Vzc2liaWxpdHlPCiB7CiAgICAgLy8gcmRhcjovLzg3OTg5NjAgTWFrZSBzdXJlIHRoZSBv
YmplY3QgaXMgZ29uZSBlYXJseSwgc28gdGhhdCBhbnl0aGluZyBfYWNjZXNzaWJpbGl0eVVucmVn
aXN0ZXIgCiAgICAgLy8gZG9lcyBjYW4ndCBjYWxsIGJhY2sgaW50byB0aGUgcmVuZGVyIHRyZWUu
Ci0gICAgbV9vYmplY3QgPSBudWxscHRyOworICAgIFtzdXBlciBkZXRhY2hdOwogCiAgICAgaWYg
KFtzZWxmIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX2FjY2Vzc2liaWxpdHlVbnJlZ2lz
dGVyKV0pCiAgICAgICAgIFtzZWxmIF9hY2Nlc3NpYmlsaXR5VW5yZWdpc3Rlcl07CkBAIC0yODMs
NyArMjgzLDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nlc3NpYmls
aXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KIC0gKHZvaWQpZGVhbGxvYwogewog
ICAgIC8vIFdlIHNob3VsZCBoYXZlIGJlZW4gZGV0YWNoZWQgYmVmb3JlIGRlYWxsb2NhdGVkLgot
ICAgIEFTU0VSVCghbV9vYmplY3QpOworICAgIEFTU0VSVCghc2VsZi5heEJhY2tpbmdPYmplY3Qp
OwogICAgIFtzdXBlciBkZWFsbG9jXTsKIH0KIApAQCAtMjk1LDEyICsyOTUsMTIgQEAgc3RhdGlj
IEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0
b3IoQWNjZXNzaWJpbGl0eU8KIAogICAgIFdlYlRocmVhZExvY2soKTsKICAgICAKLSAgICAvLyBJ
ZiB3ZSBjYW1lIGJhY2sgZnJvbSBvdXIgdGhyZWFkIGxvY2sgYW5kIHdlIHdlcmUgZGV0YWNoZWQs
IHdlIHdpbGwgbm8gbG9uZ2VyIGhhdmUgYW4gbV9vYmplY3QuCi0gICAgaWYgKCFtX29iamVjdCkK
KyAgICAvLyBJZiB3ZSBjYW1lIGJhY2sgZnJvbSBvdXIgdGhyZWFkIGxvY2sgYW5kIHdlIHdlcmUg
ZGV0YWNoZWQsIHdlIHdpbGwgbm8gbG9uZ2VyIGhhdmUgYW4gc2VsZi5heEJhY2tpbmdPYmplY3Qu
CisgICAgaWYgKCFzZWxmLmF4QmFja2luZ09iamVjdCkKICAgICAgICAgcmV0dXJuIE5POwogICAg
IAotICAgIG1fb2JqZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKLSAgICBpZiAoIW1fb2JqZWN0
KQorICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICBp
ZiAoIXNlbGYuYXhCYWNraW5nT2JqZWN0KQogICAgICAgICByZXR1cm4gTk87CiAgICAgCiAgICAg
cmV0dXJuIFlFUzsKQEAgLTM0MSw3ICszNDEsNyBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5Twog
ICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKLSAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gbV9vYmplY3QtPnJv
bGVWYWx1ZSgpOworICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGUgPSBzZWxmLmF4QmFja2luZ09i
amVjdC0+cm9sZVZhbHVlKCk7CiAgICAgLy8gRWxlbWVudHMgdGhhdCBjYW4gYmUgcmV0dXJuZWQg
d2hlbiBwZXJmb3JtaW5nIGZ1enp5IGhpdCB0ZXN0aW5nLgogICAgIHN3aXRjaCAocm9sZSkgewog
ICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkJ1dHRvbjoKQEAgLTM2OSw3ICszNjksNyBAQCBz
dGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRB
bmNlc3RvcihBY2Nlc3NpYmlsaXR5TwogICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlRhYjoK
ICAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpUZXh0RmllbGQ6CiAgICAgY2FzZSBBY2Nlc3Np
YmlsaXR5Um9sZTo6VG9nZ2xlQnV0dG9uOgotICAgICAgICByZXR1cm4gIW1fb2JqZWN0LT5hY2Nl
c3NpYmlsaXR5SXNJZ25vcmVkKCk7CisgICAgICAgIHJldHVybiAhc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQpAQCAtMzkwLDggKzM5MCw4IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciogQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKEFjY2Vzc2liaWxp
dHlPCiAgICAgLy8gVHJ5IGEgZnV6enkgaGl0IHRlc3QgZmlyc3QgdG8gZmluZCBhbiBhY2Nlc3Np
YmxlIGVsZW1lbnQuCiAgICAgQVhDb3JlT2JqZWN0ICpheE9iamVjdCA9IG51bGxwdHI7CiAgICAg
ewotICAgICAgICBBWEF0dHJpYnV0ZUNhY2hlRW5hYmxlciBlbmFibGVDYWNoZShtX29iamVjdC0+
YXhPYmplY3RDYWNoZSgpKTsKLSAgICAgICAgYXhPYmplY3QgPSBtX29iamVjdC0+YWNjZXNzaWJp
bGl0eUhpdFRlc3QoSW50UG9pbnQocG9pbnQpKTsKKyAgICAgICAgQVhBdHRyaWJ1dGVDYWNoZUVu
YWJsZXIgZW5hYmxlQ2FjaGUoc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSk7
CisgICAgICAgIGF4T2JqZWN0ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmFjY2Vzc2liaWxpdHlI
aXRUZXN0KEludFBvaW50KHBvaW50KSk7CiAgICAgfQogCiAgICAgaWYgKCFheE9iamVjdCkKQEAg
LTQxMiwxMyArNDEyLDEzIEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciogQWNj
ZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKEFjY2Vzc2liaWxpdHlPCiAKIC0gKHZvaWQpZW5h
YmxlQXR0cmlidXRlQ2FjaGluZwogewotICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1f
b2JqZWN0LT5heE9iamVjdENhY2hlKCkpCisgICAgaWYgKGF1dG8qIGNhY2hlID0gc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSkKICAgICAgICAgY2FjaGUtPnN0YXJ0Q2FjaGlu
Z0NvbXB1dGVkT2JqZWN0QXR0cmlidXRlc1VudGlsVHJlZU11dGF0ZXMoKTsKIH0KIAogLSAodm9p
ZClkaXNhYmxlQXR0cmlidXRlQ2FjaGluZwogewotICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNo
ZSA9IG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCkpCisgICAgaWYgKGF1dG8qIGNhY2hlID0gc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSkKICAgICAgICAgY2FjaGUtPnN0b3BD
YWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzKCk7CiB9CiAKQEAgLTQzMiw3ICs0MzIsNyBA
QCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9y
ZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5TwogICAgICAgICAgICAgcmV0dXJuIFthdHRhY2htZW50
VmlldyBhY2Nlc3NpYmlsaXR5RWxlbWVudENvdW50XTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJu
IG1fb2JqZWN0LT5jaGlsZHJlbigpLnNpemUoKTsKKyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdP
YmplY3QtPmNoaWxkcmVuKCkuc2l6ZSgpOwogfQogCiAtIChpZClhY2Nlc3NpYmlsaXR5RWxlbWVu
dEF0SW5kZXg6KE5TSW50ZWdlcilpbmRleApAQCAtNDQ1LDcgKzQ0NSw3IEBAIHN0YXRpYyBBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciogQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKEFj
Y2Vzc2liaWxpdHlPCiAgICAgICAgICAgICByZXR1cm4gW2F0dGFjaG1lbnRWaWV3IGFjY2Vzc2li
aWxpdHlFbGVtZW50QXRJbmRleDppbmRleF07CiAgICAgfQogICAgIAotICAgIGNvbnN0IGF1dG8m
IGNoaWxkcmVuID0gbV9vYmplY3QtPmNoaWxkcmVuKCk7CisgICAgY29uc3QgYXV0byYgY2hpbGRy
ZW4gPSBzZWxmLmF4QmFja2luZ09iamVjdC0+Y2hpbGRyZW4oKTsKICAgICBzaXplX3QgZWxlbWVu
dEluZGV4ID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCk7CiAgICAgaWYgKGVsZW1lbnRJbmRl
eCA+PSBjaGlsZHJlbi5zaXplKCkpCiAgICAgICAgIHJldHVybiBuaWw7CkBAIC00NjksNyArNDY5
LDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nlc3NpYmlsaXR5VW5p
Z25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KICAgICAgICAgICAgIHJldHVybiBbYXR0YWNo
bWVudFZpZXcgaW5kZXhPZkFjY2Vzc2liaWxpdHlFbGVtZW50OmVsZW1lbnRdOwogICAgIH0KICAg
ICAKLSAgICBjb25zdCBhdXRvJiBjaGlsZHJlbiA9IG1fb2JqZWN0LT5jaGlsZHJlbigpOworICAg
IGNvbnN0IGF1dG8mIGNoaWxkcmVuID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmNoaWxkcmVuKCk7
CiAgICAgdW5zaWduZWQgY291bnQgPSBjaGlsZHJlbi5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25l
ZCBrID0gMDsgayA8IGNvdW50OyArK2spIHsKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIqIHdyYXBwZXIgPSBjaGlsZHJlbltrXS0+d3JhcHBlcigpOwpAQCAtNDg1LDEwICs0ODUs
MTAgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nlc3NpYmlsaXR5VW5p
Z25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNj
ZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmICghbV9vYmpl
Y3QtPnN1cHBvcnRzUGF0aCgpKQorICAgIGlmICghc2VsZi5heEJhY2tpbmdPYmplY3QtPnN1cHBv
cnRzUGF0aCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICAKLSAgICBQYXRoIHBhdGggPSBt
X29iamVjdC0+ZWxlbWVudFBhdGgoKTsKKyAgICBQYXRoIHBhdGggPSBzZWxmLmF4QmFja2luZ09i
amVjdC0+ZWxlbWVudFBhdGgoKTsKICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBOVUxMOwogICAgIApAQCAtNTAwLDcgKzUwMCw3IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciogQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKEFjY2Vzc2liaWxp
dHlPCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAg
cmV0dXJuIE5POwogICAgIAotICAgIHJldHVybiBtX29iamVjdC0+aGFzUG9wdXAoKTsKKyAgICBy
ZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPmhhc1BvcHVwKCk7CiB9CiAKIC0gKE5TU3RyaW5n
ICopYWNjZXNzaWJpbGl0eVBvcHVwVmFsdWUKQEAgLTUwOCw3ICs1MDgsNyBAQCBzdGF0aWMgQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihB
Y2Nlc3NpYmlsaXR5TwogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0p
CiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICByZXR1cm4gbV9vYmplY3QtPnBvcHVwVmFsdWUo
KTsKKyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPnBvcHVwVmFsdWUoKTsKIH0KIAog
LSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5TGFuZ3VhZ2UKQEAgLTUxNiw3ICs1MTYsNyBAQCBz
dGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRB
bmNlc3RvcihBY2Nlc3NpYmlsaXR5TwogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmls
aXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0gICAgcmV0dXJuIG1fb2JqZWN0
LT5sYW5ndWFnZSgpOworICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+bGFuZ3VhZ2Uo
KTsKIH0KIAogLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNEaWFsb2cKQEAgLTUyNCw3ICs1MjQsNyBA
QCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9y
ZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5TwogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3Np
YmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBOTzsKIAotICAgIEFjY2Vzc2liaWxpdHlSb2xl
IHJvbGVWYWx1ZSA9IG1fb2JqZWN0LT5yb2xlVmFsdWUoKTsKKyAgICBBY2Nlc3NpYmlsaXR5Um9s
ZSByb2xlVmFsdWUgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+cm9sZVZhbHVlKCk7CiAgICAgcmV0
dXJuIHJvbGVWYWx1ZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6QXBwbGljYXRpb25EaWFsb2cgfHwg
cm9sZVZhbHVlID09IEFjY2Vzc2liaWxpdHlSb2xlOjpBcHBsaWNhdGlvbkFsZXJ0RGlhbG9nOwog
fQogCkBAIC01NTUsNyArNTU1LDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
KiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KICAgICAgICAg
cmV0dXJuIHJvbGUgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OlRyZWU7CiAgICAgfTsKIAotICAgIGlm
IChjb25zdCBBWENvcmVPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3Rv
cjxBWENvcmVPYmplY3Q+KCptX29iamVjdCwgZmFsc2UsIFdURk1vdmUobWF0Y2hGdW5jKSkpCisg
ICAgaWYgKGNvbnN0IEFYQ29yZU9iamVjdCogcGFyZW50ID0gQWNjZXNzaWJpbGl0eTo6ZmluZEFu
Y2VzdG9yPEFYQ29yZU9iamVjdD4oKnNlbGYuYXhCYWNraW5nT2JqZWN0LCBmYWxzZSwgV1RGTW92
ZShtYXRjaEZ1bmMpKSkKICAgICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOwogICAgIHJl
dHVybiBuaWw7CiB9CkBAIC01NjcsMTQgKzU2NywxNCBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5
TwogICAgICAgICByZXR1cm4gcm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6TGlzdCB8fCByb2xl
ID09IEFjY2Vzc2liaWxpdHlSb2xlOjpMaXN0Qm94OwogICAgIH07CiAgICAgCi0gICAgaWYgKGNv
bnN0IEFYQ29yZU9iamVjdCogcGFyZW50ID0gQWNjZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yPEFY
Q29yZU9iamVjdD4oKm1fb2JqZWN0LCBmYWxzZSwgV1RGTW92ZShtYXRjaEZ1bmMpKSkKKyAgICBp
ZiAoY29uc3QgQVhDb3JlT2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0
b3I8QVhDb3JlT2JqZWN0Pigqc2VsZi5heEJhY2tpbmdPYmplY3QsIGZhbHNlLCBXVEZNb3ZlKG1h
dGNoRnVuYykpKQogICAgICAgICByZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7CiAgICAgcmV0dXJu
IG5pbDsKIH0KIAogLSAoQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqKV9hY2Nlc3NpYmlsaXR5
QXJ0aWNsZUFuY2VzdG9yCiB7Ci0gICAgaWYgKGNvbnN0IEFYQ29yZU9iamVjdCogcGFyZW50ID0g
QWNjZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yPEFYQ29yZU9iamVjdD4oKm1fb2JqZWN0LCBmYWxz
ZSwgW10gKGNvbnN0IEFYQ29yZU9iamVjdCYgb2JqZWN0KSB7CisgICAgaWYgKGNvbnN0IEFYQ29y
ZU9iamVjdCogcGFyZW50ID0gQWNjZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yPEFYQ29yZU9iamVj
dD4oKnNlbGYuYXhCYWNraW5nT2JqZWN0LCBmYWxzZSwgW10gKGNvbnN0IEFYQ29yZU9iamVjdCYg
b2JqZWN0KSB7CiAgICAgICAgIHJldHVybiBvYmplY3Qucm9sZVZhbHVlKCkgPT0gQWNjZXNzaWJp
bGl0eVJvbGU6OkRvY3VtZW50QXJ0aWNsZTsKICAgICB9KSkKICAgICAgICAgcmV0dXJuIHBhcmVu
dC0+d3JhcHBlcigpOwpAQCAtNTgzLDcgKzU4Myw3IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciogQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKEFjY2Vzc2liaWxpdHlP
CiAKIC0gKEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKilfYWNjZXNzaWJpbGl0eUxhbmRtYXJr
QW5jZXN0b3IKIHsKLSAgICBpZiAoY29uc3QgQVhDb3JlT2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3Np
YmlsaXR5OjpmaW5kQW5jZXN0b3I8QVhDb3JlT2JqZWN0PigqbV9vYmplY3QsIGZhbHNlLCBbc2Vs
Zl0gKGNvbnN0IEFYQ29yZU9iamVjdCYgb2JqZWN0KSB7CisgICAgaWYgKGNvbnN0IEFYQ29yZU9i
amVjdCogcGFyZW50ID0gQWNjZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yPEFYQ29yZU9iamVjdD4o
KnNlbGYuYXhCYWNraW5nT2JqZWN0LCBmYWxzZSwgW3NlbGZdIChjb25zdCBBWENvcmVPYmplY3Qm
IG9iamVjdCkgewogICAgICAgICByZXR1cm4gW3NlbGYgX2FjY2Vzc2liaWxpdHlJc0xhbmRtYXJr
Um9sZTpvYmplY3Qucm9sZVZhbHVlKCldOwogICAgIH0pKQogICAgICAgICByZXR1cm4gcGFyZW50
LT53cmFwcGVyKCk7CkBAIC01OTIsNyArNTkyLDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyKiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8K
IAogLSAoQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqKV9hY2Nlc3NpYmlsaXR5VGFibGVBbmNl
c3RvcgogewotICAgIGlmIChjb25zdCBBWENvcmVPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxp
dHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCptX29iamVjdCwgZmFsc2UsIFtdIChjb25z
dCBBWENvcmVPYmplY3QmIG9iamVjdCkgeworICAgIGlmIChjb25zdCBBWENvcmVPYmplY3QqIHBh
cmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCpzZWxmLmF4
QmFja2luZ09iamVjdCwgZmFsc2UsIFtdIChjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkgewog
ICAgICAgICByZXR1cm4gb2JqZWN0LnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpU
YWJsZTsKICAgICB9KSkKICAgICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOwpAQCAtNjAx
LDE0ICs2MDEsMTQgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nlc3Np
YmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KIAogLSAoQk9PTClfYWNjZXNz
aWJpbGl0eUlzSW5UYWJsZUNlbGwKIHsKLSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6ZmluZEFu
Y2VzdG9yPEFYQ29yZU9iamVjdD4oKm1fb2JqZWN0LCBmYWxzZSwgW10gKGNvbnN0IEFYQ29yZU9i
amVjdCYgb2JqZWN0KSB7CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxB
WENvcmVPYmplY3Q+KCpzZWxmLmF4QmFja2luZ09iamVjdCwgZmFsc2UsIFtdIChjb25zdCBBWENv
cmVPYmplY3QmIG9iamVjdCkgewogICAgICAgICByZXR1cm4gb2JqZWN0LnJvbGVWYWx1ZSgpID09
IEFjY2Vzc2liaWxpdHlSb2xlOjpDZWxsOwogICAgIH0pICE9IG51bGxwdHI7CiB9CiAKIC0gKEFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKilfYWNjZXNzaWJpbGl0eUZpZWxkc2V0QW5jZXN0b3IK
IHsKLSAgICBpZiAoY29uc3QgQVhDb3JlT2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5Ojpm
aW5kQW5jZXN0b3I8QVhDb3JlT2JqZWN0PigqbV9vYmplY3QsIGZhbHNlLCBbXSAoY29uc3QgQVhD
b3JlT2JqZWN0JiBvYmplY3QpIHsKKyAgICBpZiAoY29uc3QgQVhDb3JlT2JqZWN0KiBwYXJlbnQg
PSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QVhDb3JlT2JqZWN0Pigqc2VsZi5heEJhY2tp
bmdPYmplY3QsIGZhbHNlLCBbXSAoY29uc3QgQVhDb3JlT2JqZWN0JiBvYmplY3QpIHsKICAgICAg
ICAgcmV0dXJuIG9iamVjdC5pc0ZpZWxkc2V0KCk7CiAgICAgfSkpCiAgICAgICAgIHJldHVybiBw
YXJlbnQtPndyYXBwZXIoKTsKQEAgLTYxNyw3ICs2MTcsNyBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nlc3NpYmls
aXR5TwogCiAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciopX2FjY2Vzc2liaWxpdHlGcmFt
ZUFuY2VzdG9yCiB7Ci0gICAgYXV0byogcGFyZW50ID0gQWNjZXNzaWJpbGl0eTo6ZmluZEFuY2Vz
dG9yPEFYQ29yZU9iamVjdD4oKm1fb2JqZWN0LCBmYWxzZSwgW10gKGNvbnN0IEFYQ29yZU9iamVj
dCYgb2JqZWN0KSB7CisgICAgYXV0byogcGFyZW50ID0gQWNjZXNzaWJpbGl0eTo6ZmluZEFuY2Vz
dG9yPEFYQ29yZU9iamVjdD4oKnNlbGYuYXhCYWNraW5nT2JqZWN0LCBmYWxzZSwgW10gKGNvbnN0
IEFYQ29yZU9iamVjdCYgb2JqZWN0KSB7CiAgICAgICAgIHJldHVybiBvYmplY3QuaXNXZWJBcmVh
KCk7CiAgICAgfSk7CiAgICAgaWYgKCFwYXJlbnQpCkBAIC02MjgsMTEgKzYyOCwxMSBAQCBzdGF0
aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNl
c3RvcihBY2Nlc3NpYmlsaXR5TwogLSAodWludDY0X3QpX2FjY2Vzc2liaWxpdHlUcmFpdHNGcm9t
QW5jZXN0b3JzCiB7CiAgICAgdWludDY0X3QgdHJhaXRzID0gMDsKLSAgICBBY2Nlc3NpYmlsaXR5
Um9sZSByb2xlID0gbV9vYmplY3QtPnJvbGVWYWx1ZSgpOworICAgIEFjY2Vzc2liaWxpdHlSb2xl
IHJvbGUgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+cm9sZVZhbHVlKCk7CiAgICAgCiAgICAgLy8g
VHJhaXQgaW5mb3JtYXRpb24gYWxzbyBuZWVkcyB0byBiZSBnYXRoZXJlZCBmcm9tIHRoZSBwYXJl
bnRzIGFib3ZlIHRoZSBvYmplY3QuCiAgICAgLy8gVGhlIHBhcmVudE9iamVjdCBpcyBuZWVkZWQg
aW5zdGVhZCBvZiB0aGUgdW5pZ25vcmVkUGFyZW50T2JqZWN0LCBiZWNhdXNlIGEgdGFibGUgbWln
aHQgYmUgaWdub3JlZCwgYnV0IGluZm9ybWF0aW9uIHN0aWxsIG5lZWRzIHRvIGJlIGdhdGhlcmVk
IGZyb20gaXQuICAgIAotICAgIGZvciAoYXV0byogcGFyZW50ID0gbV9vYmplY3QtPnBhcmVudE9i
amVjdCgpOyBwYXJlbnQgIT0gbmlsOyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpKSB7
CisgICAgZm9yIChhdXRvKiBwYXJlbnQgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+cGFyZW50T2Jq
ZWN0KCk7IHBhcmVudCAhPSBuaWw7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkpIHsK
ICAgICAgICAgQWNjZXNzaWJpbGl0eVJvbGUgcGFyZW50Um9sZSA9IHBhcmVudC0+cm9sZVZhbHVl
KCk7CiAgICAgICAgIGlmIChwYXJlbnRSb2xlID09IEFjY2Vzc2liaWxpdHlSb2xlOjpXZWJBcmVh
KQogICAgICAgICAgICAgYnJlYWs7CkBAIC02NTUsNyArNjU1LDcgQEAgc3RhdGljIEFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNz
aWJpbGl0eU8KICAgICAgICAgICAgICAgICAvLyBhbHRlcm5hdGUgdGV4dCBvbiB0aGUgaGVhZGlu
ZyBwYXJlbnQuCiAgICAgICAgICAgICAgICAgTlNTdHJpbmcgKmhlYWRpbmdMYWJlbCA9IFt3cmFw
cGVyIGJhc2VBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25dOwogICAgICAgICAgICAgICAgIGlmICgh
W2hlYWRpbmdMYWJlbCBsZW5ndGhdKQotICAgICAgICAgICAgICAgICAgICBbc2VsZiBzZXRBY2Nl
c3NpYmlsaXR5TGFiZWw6bV9vYmplY3QtPnN0cmluZ1ZhbHVlKCldOworICAgICAgICAgICAgICAg
ICAgICBbc2VsZiBzZXRBY2Nlc3NpYmlsaXR5TGFiZWw6c2VsZi5heEJhY2tpbmdPYmplY3QtPnN0
cmluZ1ZhbHVlKCldOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAg
W3NlbGYgc2V0QWNjZXNzaWJpbGl0eUxhYmVsOmhlYWRpbmdMYWJlbF07CiAgICAgICAgICAgICB9
CkBAIC02OTAsMTggKzY5MCwxOCBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIq
IEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5TwogICAgIGlmICgh
W3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBOTzsKIAot
ICAgIGlmIChtX29iamVjdC0+cm9sZVZhbHVlKCkgIT0gQWNjZXNzaWJpbGl0eVJvbGU6OlZpZGVv
IHx8ICFpczxBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q+KG1fb2JqZWN0KSkKKyAgICBpZiAoc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPnJvbGVWYWx1ZSgpICE9IEFjY2Vzc2liaWxpdHlSb2xlOjpWaWRl
byB8fCAhaXM8QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0PihzZWxmLmF4QmFja2luZ09iamVjdCkp
CiAgICAgICAgIHJldHVybiBOTzsKIAogICAgIC8vIENvbnZleSB0aGUgdmlkZW8gb2JqZWN0IGFz
IGludGVyYWN0aXZlIGlmIGF1dG8tcGxheSBpcyBub3QgZW5hYmxlZC4KLSAgICByZXR1cm4gIWRv
d25jYXN0PEFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdD4oKm1fb2JqZWN0KS5pc0F1dG9wbGF5RW5h
YmxlZCgpOworICAgIHJldHVybiAhZG93bmNhc3Q8QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0Pigq
c2VsZi5heEJhY2tpbmdPYmplY3QpLmlzQXV0b3BsYXlFbmFibGVkKCk7CiB9CiAKIC0gKE5TU3Ry
aW5nICopaW50ZXJhY3RpdmVWaWRlb0Rlc2NyaXB0aW9uCiB7Ci0gICAgaWYgKCFpczxBY2Nlc3Np
YmlsaXR5TWVkaWFPYmplY3Q+KG1fb2JqZWN0KSkKKyAgICBpZiAoIWlzPEFjY2Vzc2liaWxpdHlN
ZWRpYU9iamVjdD4oc2VsZi5heEJhY2tpbmdPYmplY3QpKQogICAgICAgICByZXR1cm4gbmlsOwot
ICAgIHJldHVybiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q+KG1fb2JqZWN0KS0+
aW50ZXJhY3RpdmVWaWRlb0R1cmF0aW9uKCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEFjY2Vzc2li
aWxpdHlNZWRpYU9iamVjdD4oc2VsZi5heEJhY2tpbmdPYmplY3QpLT5pbnRlcmFjdGl2ZVZpZGVv
RHVyYXRpb24oKTsKIH0KIAogLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNNZWRpYVBsYXlpbmcKQEAg
LTcwOSwxMCArNzA5LDEwIEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciogQWNj
ZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKEFjY2Vzc2liaWxpdHlPCiAgICAgaWYgKCFbc2Vs
ZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIE5POwogICAgIAot
ICAgIGlmICghaXM8QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0PihtX29iamVjdCkpCisgICAgaWYg
KCFpczxBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q+KHNlbGYuYXhCYWNraW5nT2JqZWN0KSkKICAg
ICAgICAgcmV0dXJuIE5POwogICAgIAotICAgIHJldHVybiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5
TWVkaWFPYmplY3Q+KG1fb2JqZWN0KS0+aXNQbGF5aW5nKCk7CisgICAgcmV0dXJuIGRvd25jYXN0
PEFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdD4oc2VsZi5heEJhY2tpbmdPYmplY3QpLT5pc1BsYXlp
bmcoKTsKIH0KIAogLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNNZWRpYU11dGVkCkBAIC03MjAsMTAg
KzcyMCwxMCBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxp
dHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5TwogICAgIGlmICghW3NlbGYgX3ByZXBh
cmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBOTzsKICAgICAKLSAgICBpZiAo
IWlzPEFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdD4obV9vYmplY3QpKQorICAgIGlmICghaXM8QWNj
ZXNzaWJpbGl0eU1lZGlhT2JqZWN0PihzZWxmLmF4QmFja2luZ09iamVjdCkpCiAgICAgICAgIHJl
dHVybiBOTzsKICAgICAKLSAgICByZXR1cm4gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eU1lZGlhT2Jq
ZWN0PihtX29iamVjdCktPmlzTXV0ZWQoKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8QWNjZXNzaWJp
bGl0eU1lZGlhT2JqZWN0PihzZWxmLmF4QmFja2luZ09iamVjdCktPmlzTXV0ZWQoKTsKIH0KIAog
LSAodm9pZClhY2Nlc3NpYmlsaXR5VG9nZ2xlTXV0ZUZvck1lZGlhCkBAIC03MzEsMTAgKzczMSwx
MCBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmln
bm9yZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5TwogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nl
c3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoIWlzPEFjY2Vz
c2liaWxpdHlNZWRpYU9iamVjdD4obV9vYmplY3QpKQorICAgIGlmICghaXM8QWNjZXNzaWJpbGl0
eU1lZGlhT2JqZWN0PihzZWxmLmF4QmFja2luZ09iamVjdCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdD4obV9vYmplY3QpLT50b2dnbGVN
dXRlKCk7CisgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0PihzZWxmLmF4QmFj
a2luZ09iamVjdCktPnRvZ2dsZU11dGUoKTsKIH0KIAogLSAodm9pZClhY2Nlc3NpYmlsaXR5Vmlk
ZW9FbnRlckZ1bGxzY3JlZW4KQEAgLTc0MiwyMiArNzQyLDIyIEBAIHN0YXRpYyBBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciogQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKEFjY2Vzc2li
aWxpdHlPCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAg
ICAgcmV0dXJuOwogICAgIAotICAgIGlmICghaXM8QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0Piht
X29iamVjdCkpCisgICAgaWYgKCFpczxBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q+KHNlbGYuYXhC
YWNraW5nT2JqZWN0KSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGRvd25jYXN0PEFjY2Vz
c2liaWxpdHlNZWRpYU9iamVjdD4obV9vYmplY3QpLT5lbnRlckZ1bGxzY3JlZW4oKTsKKyAgICBk
b3duY2FzdDxBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q+KHNlbGYuYXhCYWNraW5nT2JqZWN0KS0+
ZW50ZXJGdWxsc2NyZWVuKCk7CiB9CiAKIC0gKHVpbnQ2NF90KV9hY2Nlc3NpYmlsaXR5VGV4dEVu
dHJ5VHJhaXRzCiB7CiAgICAgdWludDY0X3QgdHJhaXRzID0gW3NlbGYgX2F4VGV4dEVudHJ5VHJh
aXRdOwotICAgIGlmIChtX29iamVjdC0+aXNGb2N1c2VkKCkpCisgICAgaWYgKHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5pc0ZvY3VzZWQoKSkKICAgICAgICAgdHJhaXRzIHw9IChbc2VsZiBfYXhIYXNU
ZXh0Q3Vyc29yVHJhaXRdIHwgW3NlbGYgX2F4VGV4dE9wZXJhdGlvbnNBdmFpbGFibGVUcmFpdF0p
OwotICAgIGlmIChtX29iamVjdC0+aXNQYXNzd29yZEZpZWxkKCkpCisgICAgaWYgKHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5pc1Bhc3N3b3JkRmllbGQoKSkKICAgICAgICAgdHJhaXRzIHw9IFtzZWxm
IF9heFNlY3VyZVRleHRGaWVsZFRyYWl0XTsKLSAgICBpZiAobV9vYmplY3QtPnJvbGVWYWx1ZSgp
ID09IEFjY2Vzc2liaWxpdHlSb2xlOjpTZWFyY2hGaWVsZCkKKyAgICBpZiAoc2VsZi5heEJhY2tp
bmdPYmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpTZWFyY2hGaWVsZCkK
ICAgICAgICAgdHJhaXRzIHw9IFtzZWxmIF9heFNlYXJjaEZpZWxkVHJhaXRdOwotICAgIGlmICht
X29iamVjdC0+cm9sZVZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OlRleHRBcmVhKQorICAg
IGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+cm9sZVZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJv
bGU6OlRleHRBcmVhKQogICAgICAgICB0cmFpdHMgfD0gW3NlbGYgX2F4VGV4dEFyZWFUcmFpdF07
CiAgICAgcmV0dXJuIHRyYWl0czsKIH0KQEAgLTc2NywxMyArNzY3LDEzIEBAIHN0YXRpYyBBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciogQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKEFj
Y2Vzc2liaWxpdHlPCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSA9IG1f
b2JqZWN0LT5yb2xlVmFsdWUoKTsKKyAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gc2VsZi5h
eEJhY2tpbmdPYmplY3QtPnJvbGVWYWx1ZSgpOwogICAgIHVpbnQ2NF90IHRyYWl0cyA9IFtzZWxm
IF9heFdlYkNvbnRlbnRUcmFpdF07CiAgICAgc3dpdGNoIChyb2xlKSB7CiAgICAgY2FzZSBBY2Nl
c3NpYmlsaXR5Um9sZTo6TGluazoKICAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpXZWJDb3Jl
TGluazoKICAgICAgICAgdHJhaXRzIHw9IFtzZWxmIF9heExpbmtUcmFpdF07Ci0gICAgICAgIGlm
IChtX29iamVjdC0+aXNWaXNpdGVkKCkpCisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVj
dC0+aXNWaXNpdGVkKCkpCiAgICAgICAgICAgICB0cmFpdHMgfD0gW3NlbGYgX2F4VmlzaXRlZFRy
YWl0XTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6VGV4dEZp
ZWxkOgpAQCAtNzg5LDcgKzc4OSw3IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciogQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKEFjY2Vzc2liaWxpdHlPCiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkJ1dHRvbjoKICAgICAgICAgdHJh
aXRzIHw9IFtzZWxmIF9heEJ1dHRvblRyYWl0XTsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1By
ZXNzZWQoKSkKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1ByZXNzZWQoKSkK
ICAgICAgICAgICAgIHRyYWl0cyB8PSBbc2VsZiBfYXhUb2dnbGVUcmFpdF07CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlBvcFVwQnV0dG9uOgpAQCAtODI0LDEz
ICs4MjQsMTMgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nlc3NpYmls
aXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KICAgICAgICAgYnJlYWs7CiAgICAg
fQogCi0gICAgaWYgKG1fb2JqZWN0LT5pc0F0dGFjaG1lbnRFbGVtZW50KCkpCisgICAgaWYgKHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5pc0F0dGFjaG1lbnRFbGVtZW50KCkpCiAgICAgICAgIHRyYWl0
cyB8PSBbc2VsZiBfYXhVcGRhdGVzRnJlcXVlbnRseVRyYWl0XTsKICAgICAKLSAgICBpZiAobV9v
YmplY3QtPmlzU2VsZWN0ZWQoKSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzU2Vs
ZWN0ZWQoKSkKICAgICAgICAgdHJhaXRzIHw9IFtzZWxmIF9heFNlbGVjdGVkVHJhaXRdOwogCi0g
ICAgaWYgKCFtX29iamVjdC0+aXNFbmFibGVkKCkpCisgICAgaWYgKCFzZWxmLmF4QmFja2luZ09i
amVjdC0+aXNFbmFibGVkKCkpCiAgICAgICAgIHRyYWl0cyB8PSBbc2VsZiBfYXhOb3RFbmFibGVk
VHJhaXRdOwogICAgIAogICAgIGlmIChtX2FjY2Vzc2liaWxpdHlUcmFpdHNGcm9tQW5jZXN0b3Ig
PT0gVUxMT05HX01BWCkKQEAgLTg0NCw3ICs4NDQsNyBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5
TwogLSAoQk9PTClpc1NWR0dyb3VwRWxlbWVudAogewogICAgIC8vIElmIGFuIFNWRyBncm91cCBl
bGVtZW50IGhhcyBhIHRpdGxlLCBpdCBzaG91bGQgYmUgYW4gYWNjZXNzaWJsZSBlbGVtZW50IG9u
IGlPUy4KLSAgICBOb2RlKiBub2RlID0gbV9vYmplY3QtPm5vZGUoKTsKKyAgICBOb2RlKiBub2Rl
ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPm5vZGUoKTsKICAgICBpZiAobm9kZSAmJiBub2RlLT5o
YXNUYWdOYW1lKFNWR05hbWVzOjpnVGFnKSAmJiBbW3NlbGYgYWNjZXNzaWJpbGl0eUxhYmVsXSBs
ZW5ndGhdID4gMCkKICAgICAgICAgcmV0dXJuIFlFUzsKICAgICAKQEAgLTg1MywxNiArODUzLDE2
IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciogQWNjZXNzaWJpbGl0eVVuaWdu
b3JlZEFuY2VzdG9yKEFjY2Vzc2liaWxpdHlPCiAKIC0gKEJPT0wpZGV0ZXJtaW5lSXNBY2Nlc3Np
YmlsaXR5RWxlbWVudAogewotICAgIGlmICghbV9vYmplY3QpCisgICAgaWYgKCFzZWxmLmF4QmFj
a2luZ09iamVjdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIEhvbm9yIHdo
ZW4gc29tZXRoaW5nIGV4cGxpY2l0bHkgbWFrZXMgdGhpcyBhbiBlbGVtZW50IChzdXBlciB3aWxs
IGNvbnRhaW4gdGhhdCBsb2dpYykgCiAgICAgaWYgKFtzdXBlciBpc0FjY2Vzc2liaWxpdHlFbGVt
ZW50XSkKICAgICAgICAgcmV0dXJuIFlFUzsKICAgICAKLSAgICBtX29iamVjdC0+dXBkYXRlQmFj
a2luZ1N0b3JlKCk7CisgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9y
ZSgpOwogICAgIAotICAgIHN3aXRjaCAobV9vYmplY3QtPnJvbGVWYWx1ZSgpKSB7CisgICAgc3dp
dGNoIChzZWxmLmF4QmFja2luZ09iamVjdC0+cm9sZVZhbHVlKCkpIHsKICAgICBjYXNlIEFjY2Vz
c2liaWxpdHlSb2xlOjpUZXh0RmllbGQ6CiAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6VGV4
dEFyZWE6CiAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6QnV0dG9uOgpAQCAtMTA2MSwxMSAr
MTA2MSwxMSBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxp
dHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5TwogCiAtIChCT09MKXN0cmluZ1ZhbHVl
U2hvdWxkQmVVc2VkSW5MYWJlbAogewotICAgIGlmIChtX29iamVjdC0+aXNUZXh0Q29udHJvbCgp
KQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUZXh0Q29udHJvbCgpKQogICAgICAg
ICByZXR1cm4gTk87Ci0gICAgaWYgKG1fb2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmls
aXR5Um9sZTo6UG9wVXBCdXR0b24pCisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5yb2xl
VmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6UG9wVXBCdXR0b24pCiAgICAgICAgIHJldHVy
biBOTzsKLSAgICBpZiAobV9vYmplY3QtPmlzRmlsZVVwbG9hZEJ1dHRvbigpKQorICAgIGlmIChz
ZWxmLmF4QmFja2luZ09iamVjdC0+aXNGaWxlVXBsb2FkQnV0dG9uKCkpCiAgICAgICAgIHJldHVy
biBOTzsKICAgICBpZiAoW3NlbGYgYWNjZXNzaWJpbGl0eUlzV2ViSW50ZXJhY3RpdmVWaWRlb10p
CiAgICAgICAgIHJldHVybiBOTzsKQEAgLTEwODgsNyArMTA4OCw3IEBAIHN0YXRpYyB2b2lkIGFw
cGVuZFN0cmluZ1RvUmVzdWx0KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3Ry
aW5nKQogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAg
IHJldHVybiBOTzsKICAgICAKLSAgICByZXR1cm4gbV9vYmplY3QtPmhhc1RvdWNoRXZlbnRMaXN0
ZW5lcigpOworICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+aGFzVG91Y2hFdmVudExp
c3RlbmVyKCk7CiB9CiAKIC0gKEJPT0wpX2FjY2Vzc2liaWxpdHlWYWx1ZUlzQXV0b2ZpbGxlZApA
QCAtMTA5Niw3ICsxMDk2LDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQoTlNN
dXRhYmxlU3RyaW5nICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgaWYgKCFbc2VsZiBf
cHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIE5POwogCi0gICAgcmV0
dXJuIG1fb2JqZWN0LT5pc1ZhbHVlQXV0b2ZpbGxlZCgpOworICAgIHJldHVybiBzZWxmLmF4QmFj
a2luZ09iamVjdC0+aXNWYWx1ZUF1dG9maWxsZWQoKTsKIH0KIAogLSAoQk9PTClfYWNjZXNzaWJp
bGl0eUlzU3Ryb25nUGFzc3dvcmRGaWVsZApAQCAtMTEwNCwxMCArMTEwNCwxMCBAQCBzdGF0aWMg
dm9pZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJp
bmcgKnN0cmluZykKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQog
ICAgICAgICByZXR1cm4gTk87CiAgICAgCi0gICAgaWYgKCFtX29iamVjdC0+aXNQYXNzd29yZEZp
ZWxkKCkpCisgICAgaWYgKCFzZWxmLmF4QmFja2luZ09iamVjdC0+aXNQYXNzd29yZEZpZWxkKCkp
CiAgICAgICAgIHJldHVybiBOTzsKICAgICAKLSAgICByZXR1cm4gbV9vYmplY3QtPnZhbHVlQXV0
b2ZpbGxCdXR0b25UeXBlKCkgPT0gQXV0b0ZpbGxCdXR0b25UeXBlOjpTdHJvbmdQYXNzd29yZDsK
KyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPnZhbHVlQXV0b2ZpbGxCdXR0b25UeXBl
KCkgPT0gQXV0b0ZpbGxCdXR0b25UeXBlOjpTdHJvbmdQYXNzd29yZDsKIH0KIAogLSAoQ0dGbG9h
dClfYWNjZXNzaWJpbGl0eU1pblZhbHVlCkBAIC0xMTE1LDcgKzExMTUsNyBAQCBzdGF0aWMgdm9p
ZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJpbmcg
KnN0cmluZykKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAg
ICAgICByZXR1cm4gMDsKICAgICAKLSAgICByZXR1cm4gbV9vYmplY3QtPm1pblZhbHVlRm9yUmFu
Z2UoKTsKKyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPm1pblZhbHVlRm9yUmFuZ2Uo
KTsKIH0KIAogLSAoQ0dGbG9hdClfYWNjZXNzaWJpbGl0eU1heFZhbHVlCkBAIC0xMTIzLDcgKzEx
MjMsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcg
KnJlc3VsdCwgTlNTdHJpbmcgKnN0cmluZykKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNz
aWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICByZXR1cm4gbV9vYmpl
Y3QtPm1heFZhbHVlRm9yUmFuZ2UoKTsKKyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3Qt
Pm1heFZhbHVlRm9yUmFuZ2UoKTsKIH0KIAogLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5Um9s
ZURlc2NyaXB0aW9uCkBAIC0xMTMxLDEwICsxMTMxLDEwIEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0
cmluZ1RvUmVzdWx0KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3RyaW5nKQog
ICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVy
biBuaWw7CiAKLSAgICBpZiAobV9vYmplY3QtPmlzQ29sb3JXZWxsKCkpCisgICAgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc0NvbG9yV2VsbCgpKQogICAgICAgICByZXR1cm4gQVhDb2xvcldl
bGxUZXh0KCk7CiAKLSAgICByZXR1cm4gbV9vYmplY3QtPnJvbGVEZXNjcmlwdGlvbigpOworICAg
IHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+cm9sZURlc2NyaXB0aW9uKCk7CiB9CiAKIC0g
KE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eUxhYmVsCkBAIC0xMTU1LDIxICsxMTU1LDIxIEBAIHN0
YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBO
U1N0cmluZyAqc3RyaW5nKQogICAgIE5TU3RyaW5nICppbnRlcmFjdGl2ZVZpZGVvRGVzY3JpcHRp
b24gPSBbc2VsZiBpbnRlcmFjdGl2ZVZpZGVvRGVzY3JpcHRpb25dOwogICAgIAogICAgIC8vIFdl
IHNob3VsZCBleHBvc2UgdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCB0eXBlIGRhdGUgb3IgdGltZSB0
aHJvdWdoIEFYVmFsdWUgaW5zdGVhZCBvZiBBWFRpdGxlLgotICAgIGlmIChtX29iamVjdC0+aXNJ
bnB1dFR5cGVQb3B1cEJ1dHRvbigpICYmIFtheFRpdGxlIGlzRXF1YWxUb1N0cmluZzpbc2VsZiBh
Y2Nlc3NpYmlsaXR5VmFsdWVdXSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzSW5w
dXRUeXBlUG9wdXBCdXR0b24oKSAmJiBbYXhUaXRsZSBpc0VxdWFsVG9TdHJpbmc6W3NlbGYgYWNj
ZXNzaWJpbGl0eVZhbHVlXV0pCiAgICAgICAgIGF4VGl0bGUgPSBuaWw7CiAKICAgICAvLyBGb290
ZXIgaXMgbm90IGNvbnNpZGVyZWQgYSBsYW5kbWFyaywgYnV0IHdlIHdhbnQgdGhlIHJvbGUgZGVz
Y3JpcHRpb24uCi0gICAgaWYgKG1fb2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5
Um9sZTo6Rm9vdGVyKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+cm9sZVZhbHVlKCkg
PT0gQWNjZXNzaWJpbGl0eVJvbGU6OkZvb3RlcikKICAgICAgICAgbGFuZG1hcmtEZXNjcmlwdGlv
biA9IEFYRm9vdGVyUm9sZURlc2NyaXB0aW9uVGV4dCgpOwogCiAgICAgTlNNdXRhYmxlU3RyaW5n
ICpyZXN1bHQgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ107Ci0gICAgaWYgKG1fb2JqZWN0LT5y
b2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6SG9yaXpvbnRhbFJ1bGUpCisgICAgaWYg
KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6
SG9yaXpvbnRhbFJ1bGUpCiAgICAgICAgIGFwcGVuZFN0cmluZ1RvUmVzdWx0KHJlc3VsdCwgQVhI
b3Jpem9udGFsUnVsZURlc2NyaXB0aW9uVGV4dCgpKTsKIAogICAgIGFwcGVuZFN0cmluZ1RvUmVz
dWx0KHJlc3VsdCwgYXhUaXRsZSk7CiAgICAgYXBwZW5kU3RyaW5nVG9SZXN1bHQocmVzdWx0LCBh
eERlc2NyaXB0aW9uKTsKICAgICBpZiAoW3NlbGYgc3RyaW5nVmFsdWVTaG91bGRCZVVzZWRJbkxh
YmVsXSkgewotICAgICAgICBOU1N0cmluZyAqdmFsdWVMYWJlbCA9IG1fb2JqZWN0LT5zdHJpbmdW
YWx1ZSgpOworICAgICAgICBOU1N0cmluZyAqdmFsdWVMYWJlbCA9IHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5zdHJpbmdWYWx1ZSgpOwogICAgICAgICB2YWx1ZUxhYmVsID0gW3ZhbHVlTGFiZWwgc3Ry
aW5nQnlUcmltbWluZ0NoYXJhY3RlcnNJblNldDpbTlNDaGFyYWN0ZXJTZXQgd2hpdGVzcGFjZUNo
YXJhY3RlclNldF1dOwogICAgICAgICBhcHBlbmRTdHJpbmdUb1Jlc3VsdChyZXN1bHQsIHZhbHVl
TGFiZWwpOwogICAgIH0KQEAgLTExODIsNyArMTE4Miw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0
cmluZ1RvUmVzdWx0KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3RyaW5nKQog
LSAoQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCopdGFibGVDZWxsUGFyZW50CiB7CiAgICAgLy8gRmlu
ZCBpZiB0aGlzIGVsZW1lbnQgaXMgaW4gYSB0YWJsZSBjZWxsLgotICAgIGlmIChBWENvcmVPYmpl
Y3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCpt
X29iamVjdCwgdHJ1ZSwgW10gKGNvbnN0IEFYQ29yZU9iamVjdCYgb2JqZWN0KSB7CisgICAgaWYg
KEFYQ29yZU9iamVjdCogcGFyZW50ID0gQWNjZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yPEFYQ29y
ZU9iamVjdD4oKnNlbGYuYXhCYWNraW5nT2JqZWN0LCB0cnVlLCBbXSAoY29uc3QgQVhDb3JlT2Jq
ZWN0JiBvYmplY3QpIHsKICAgICAgICAgcmV0dXJuIG9iamVjdC5pc1RhYmxlQ2VsbCgpOwogICAg
IH0pKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCo+
KHBhcmVudCk7CkBAIC0xMTkyLDcgKzExOTIsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTdHJpbmdU
b1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJpbmcgKnN0cmluZykKIC0gKEFj
Y2Vzc2liaWxpdHlUYWJsZSopdGFibGVQYXJlbnQKIHsKICAgICAvLyBGaW5kIGlmIHRoZSBwYXJl
bnQgdGFibGUgZm9yIHRoZSB0YWJsZSBjZWxsLgotICAgIGlmIChBWENvcmVPYmplY3QqIHBhcmVu
dCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCptX29iamVjdCwg
dHJ1ZSwgW10gKGNvbnN0IEFYQ29yZU9iamVjdCYgb2JqZWN0KSB7CisgICAgaWYgKEFYQ29yZU9i
amVjdCogcGFyZW50ID0gQWNjZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yPEFYQ29yZU9iamVjdD4o
KnNlbGYuYXhCYWNraW5nT2JqZWN0LCB0cnVlLCBbXSAoY29uc3QgQVhDb3JlT2JqZWN0JiBvYmpl
Y3QpIHsKICAgICAgICAgcmV0dXJuIGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4ob2JqZWN0KSAmJiBk
b3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KG9iamVjdCkuaXNFeHBvc2FibGVUaHJvdWdoQWNj
ZXNzaWJpbGl0eSgpOwogICAgIH0pKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNz
aWJpbGl0eVRhYmxlKj4ocGFyZW50KTsKQEAgLTEyMDQsNyArMTIwNCw3IEBAIHN0YXRpYyB2b2lk
IGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAq
c3RyaW5nKQogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAg
ICAgIHJldHVybiBuaWw7CiAKLSAgICBBWENvcmVPYmplY3QqIHRpdGxlRWxlbWVudCA9IG1fb2Jq
ZWN0LT50aXRsZVVJRWxlbWVudCgpOworICAgIEFYQ29yZU9iamVjdCogdGl0bGVFbGVtZW50ID0g
c2VsZi5heEJhY2tpbmdPYmplY3QtPnRpdGxlVUlFbGVtZW50KCk7CiAgICAgaWYgKHRpdGxlRWxl
bWVudCkKICAgICAgICAgcmV0dXJuIHRpdGxlRWxlbWVudC0+d3JhcHBlcigpOwogCkBAIC0xMzU0
LDEzICsxMzU0LDEzIEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5TTXV0YWJs
ZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3RyaW5nKQogICAgIGlmICghW3NlbGYgX3ByZXBh
cmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZv
dW5kLCAwKTsKIAotICAgIGlmIChtX29iamVjdC0+aXNSYWRpb0J1dHRvbigpKSB7CisgICAgaWYg
KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1JhZGlvQnV0dG9uKCkpIHsKICAgICAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJhZGlvQnV0dG9uU2li
bGluZ3M7Ci0gICAgICAgIG1fb2JqZWN0LT5saW5rZWRVSUVsZW1lbnRzKHJhZGlvQnV0dG9uU2li
bGluZ3MpOworICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+bGlua2VkVUlFbGVtZW50cyhy
YWRpb0J1dHRvblNpYmxpbmdzKTsKICAgICAgICAgaWYgKHJhZGlvQnV0dG9uU2libGluZ3Muc2l6
ZSgpIDw9IDEpCiAgICAgICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7
CiAgICAgICAgIAotICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UocmFkaW9CdXR0b25TaWJsaW5n
cy5maW5kKG1fb2JqZWN0KSwgcmFkaW9CdXR0b25TaWJsaW5ncy5zaXplKCkpOworICAgICAgICBy
ZXR1cm4gTlNNYWtlUmFuZ2UocmFkaW9CdXR0b25TaWJsaW5ncy5maW5kKHNlbGYuYXhCYWNraW5n
T2JqZWN0KSwgcmFkaW9CdXR0b25TaWJsaW5ncy5zaXplKCkpOwogICAgIH0KICAgICAKICAgICBB
Y2Nlc3NpYmlsaXR5VGFibGVDZWxsKiB0YWJsZUNlbGwgPSBbc2VsZiB0YWJsZUNlbGxQYXJlbnRd
OwpAQCAtMTM5MCw3ICsxMzkwLDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQo
TlNNdXRhYmxlU3RyaW5nICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiB7CiAgICAgaWYgKCFb
c2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
cmV0dXJuIG1fb2JqZWN0LT5ibG9ja3F1b3RlTGV2ZWwoKTsKKyAgICByZXR1cm4gc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmJsb2NrcXVvdGVMZXZlbCgpOwogfQogCiAtIChOU1N0cmluZyAqKWFjY2Vz
c2liaWxpdHlEYXRldGltZVZhbHVlCkBAIC0xMzk4LDcgKzEzOTgsNyBAQCBzdGF0aWMgdm9pZCBh
cHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJpbmcgKnN0
cmluZykKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAg
ICByZXR1cm4gbmlsOwogCi0gICAgaWYgKGF1dG8qIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZp
bmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCptX29iamVjdCwgdHJ1ZSwgW10gKGNvbnN0IEFYQ29y
ZU9iamVjdCYgb2JqZWN0KSB7CisgICAgaWYgKGF1dG8qIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6
OmZpbmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCpzZWxmLmF4QmFja2luZ09iamVjdCwgdHJ1ZSwg
W10gKGNvbnN0IEFYQ29yZU9iamVjdCYgb2JqZWN0KSB7CiAgICAgICAgIHJldHVybiBvYmplY3Qu
c3VwcG9ydHNEYXRldGltZUF0dHJpYnV0ZSgpOwogICAgIH0pKQogICAgICAgICByZXR1cm4gcGFy
ZW50LT5kYXRldGltZUF0dHJpYnV0ZVZhbHVlKCk7CkBAIC0xNDExLDcgKzE0MTEsNyBAQCBzdGF0
aWMgdm9pZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNT
dHJpbmcgKnN0cmluZykKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxd
KQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgcmV0dXJuIG1fb2JqZWN0LT5wbGFjZWhvbGRl
clZhbHVlKCk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5wbGFjZWhvbGRlclZh
bHVlKCk7CiB9CiAKIC0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eUNvbG9yU3RyaW5nVmFsdWUK
QEAgLTE0MTksOSArMTQxOSw5IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5T
TXV0YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3RyaW5nKQogICAgIGlmICghW3NlbGYg
X3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBp
ZiAobV9vYmplY3QtPmlzQ29sb3JXZWxsKCkpIHsKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmlzQ29sb3JXZWxsKCkpIHsKICAgICAgICAgaW50IHIsIGcsIGI7Ci0gICAgICAgIG1fb2Jq
ZWN0LT5jb2xvclZhbHVlKHIsIGcsIGIpOworICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+
Y29sb3JWYWx1ZShyLCBnLCBiKTsKICAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRo
Rm9ybWF0OkAicmdiICU3LjVmICU3LjVmICU3LjVmIDEiLCByIC8gMjU1LiwgZyAvIDI1NS4sIGIg
LyAyNTUuXTsKICAgICB9CiAKQEAgLTE0MzgsOSArMTQzOCw5IEBAIHN0YXRpYyB2b2lkIGFwcGVu
ZFN0cmluZ1RvUmVzdWx0KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3RyaW5n
KQogICAgIGlmICh2YWx1ZSkKICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIAotICAgIEFjY2Vz
c2liaWxpdHlSb2xlIHJvbGUgPSBtX29iamVjdC0+cm9sZVZhbHVlKCk7Ci0gICAgaWYgKG1fb2Jq
ZWN0LT5pc0NoZWNrYm94T3JSYWRpbygpIHx8IHJvbGUgPT0gQWNjZXNzaWJpbGl0eVJvbGU6Ok1l
bnVJdGVtQ2hlY2tib3ggfHwgcm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6TWVudUl0ZW1SYWRp
byB8fCByb2xlID09IEFjY2Vzc2liaWxpdHlSb2xlOjpTd2l0Y2gpIHsKLSAgICAgICAgc3dpdGNo
IChtX29iamVjdC0+Y2hlY2tib3hPclJhZGlvVmFsdWUoKSkgeworICAgIEFjY2Vzc2liaWxpdHlS
b2xlIHJvbGUgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+cm9sZVZhbHVlKCk7CisgICAgaWYgKHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5pc0NoZWNrYm94T3JSYWRpbygpIHx8IHJvbGUgPT0gQWNjZXNz
aWJpbGl0eVJvbGU6Ok1lbnVJdGVtQ2hlY2tib3ggfHwgcm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9s
ZTo6TWVudUl0ZW1SYWRpbyB8fCByb2xlID09IEFjY2Vzc2liaWxpdHlSb2xlOjpTd2l0Y2gpIHsK
KyAgICAgICAgc3dpdGNoIChzZWxmLmF4QmFja2luZ09iamVjdC0+Y2hlY2tib3hPclJhZGlvVmFs
dWUoKSkgewogICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlCdXR0b25TdGF0ZTo6T2ZmOgogICAg
ICAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWQiLCAwXTsKICAg
ICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5QnV0dG9uU3RhdGU6Ok9uOgpAQCAtMTQ1MiwxMiArMTQ1
MiwxMiBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcg
KnJlc3VsdCwgTlNTdHJpbmcgKnN0cmluZykKICAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJp
bmdXaXRoRm9ybWF0OkAiJWQiLCAwXTsKICAgICB9CiAgICAgCi0gICAgaWYgKG1fb2JqZWN0LT5p
c0J1dHRvbigpICYmIG1fb2JqZWN0LT5pc1ByZXNzZWQoKSkKKyAgICBpZiAoc2VsZi5heEJhY2tp
bmdPYmplY3QtPmlzQnV0dG9uKCkgJiYgc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzUHJlc3NlZCgp
KQogICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlZCIsIDFdOwog
CiAgICAgLy8gcmRhcjovLzgxMzEzODggV2ViS2l0IHNob3VsZCBleHBvc2UgdGhlIHNhbWUgaW5m
byBhcyBVSUtpdCBmb3IgaXRzIHBhc3N3b3JkIGZpZWxkcy4KLSAgICBpZiAobV9vYmplY3QtPmlz
UGFzc3dvcmRGaWVsZCgpICYmICFbc2VsZiBfYWNjZXNzaWJpbGl0eUlzU3Ryb25nUGFzc3dvcmRG
aWVsZF0pIHsKLSAgICAgICAgaW50IHBhc3N3b3JkTGVuZ3RoID0gbV9vYmplY3QtPmFjY2Vzc2li
aWxpdHlQYXNzd29yZEZpZWxkTGVuZ3RoKCk7CisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5pc1Bhc3N3b3JkRmllbGQoKSAmJiAhW3NlbGYgX2FjY2Vzc2liaWxpdHlJc1N0cm9uZ1Bhc3N3
b3JkRmllbGRdKSB7CisgICAgICAgIGludCBwYXNzd29yZExlbmd0aCA9IHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5hY2Nlc3NpYmlsaXR5UGFzc3dvcmRGaWVsZExlbmd0aCgpOwogICAgICAgICBOU011
dGFibGVTdHJpbmcqIHN0cmluZyA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nXTsKICAgICAgICAg
Zm9yIChpbnQgayA9IDA7IGsgPCBwYXNzd29yZExlbmd0aDsgKytrKQogICAgICAgICAgICAgW3N0
cmluZyBhcHBlbmRTdHJpbmc6QCLigKIiXTsKQEAgLTE0NjYsMjIgKzE0NjYsMjIgQEAgc3RhdGlj
IHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQoTlNNdXRhYmxlU3RyaW5nICpyZXN1bHQsIE5TU3Ry
aW5nICpzdHJpbmcpCiAgICAgCiAgICAgLy8gQSB0ZXh0IGNvbnRyb2wgc2hvdWxkIHJldHVybiBp
dHMgdGV4dCBkYXRhIGFzIHRoZSBheFZhbHVlIChwZXIgaVBob25lIEFYIEFQSSkuCiAgICAgaWYg
KCFbc2VsZiBzdHJpbmdWYWx1ZVNob3VsZEJlVXNlZEluTGFiZWxdKQotICAgICAgICByZXR1cm4g
bV9vYmplY3QtPnN0cmluZ1ZhbHVlKCk7CisgICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09i
amVjdC0+c3RyaW5nVmFsdWUoKTsKICAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzUmFuZ2VDb250
cm9sKCkpIHsKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzUmFuZ2VDb250cm9sKCkp
IHsKICAgICAgICAgLy8gUHJlZmVyIGEgdmFsdWVEZXNjcmlwdGlvbiBpZiBwcm92aWRlZCBieSB0
aGUgYXV0aG9yICh0aHJvdWdoIGFyaWEtdmFsdWV0ZXh0KS4KLSAgICAgICAgU3RyaW5nIHZhbHVl
RGVzY3JpcHRpb24gPSBtX29iamVjdC0+dmFsdWVEZXNjcmlwdGlvbigpOworICAgICAgICBTdHJp
bmcgdmFsdWVEZXNjcmlwdGlvbiA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT52YWx1ZURlc2NyaXB0
aW9uKCk7CiAgICAgICAgIGlmICghdmFsdWVEZXNjcmlwdGlvbi5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICByZXR1cm4gdmFsdWVEZXNjcmlwdGlvbjsKIAotICAgICAgICByZXR1cm4gW05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCIlLjJmIiwgbV9vYmplY3QtPnZhbHVlRm9yUmFuZ2UoKV07Cisg
ICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiUuMmYiLCBzZWxmLmF4
QmFja2luZ09iamVjdC0+dmFsdWVGb3JSYW5nZSgpXTsKICAgICB9CiAKLSAgICBpZiAoaXM8QWNj
ZXNzaWJpbGl0eUF0dGFjaG1lbnQ+KG1fb2JqZWN0KSAmJiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5
QXR0YWNobWVudD4obV9vYmplY3QpLT5oYXNQcm9ncmVzcygpKQotICAgICAgICByZXR1cm4gW05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlLjJmIiwgbV9vYmplY3QtPnZhbHVlRm9yUmFuZ2Uo
KV07CisgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlBdHRhY2htZW50PihzZWxmLmF4QmFja2luZ09i
amVjdCkgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eUF0dGFjaG1lbnQ+KHNlbGYuYXhCYWNraW5n
T2JqZWN0KS0+aGFzUHJvZ3Jlc3MoKSkKKyAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdX
aXRoRm9ybWF0OkAiJS4yZiIsIHNlbGYuYXhCYWNraW5nT2JqZWN0LT52YWx1ZUZvclJhbmdlKCld
OwogICAgIAotICAgIGlmIChtX29iamVjdC0+aXNIZWFkaW5nKCkpCi0gICAgICAgIHJldHVybiBb
TlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVkIiwgbV9vYmplY3QtPmhlYWRpbmdMZXZlbCgp
XTsKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzSGVhZGluZygpKQorICAgICAgICBy
ZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlZCIsIHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5oZWFkaW5nTGV2ZWwoKV07CiAgICAgCiAgICAgcmV0dXJuIG5pbDsKIH0KQEAgLTE0OTEs
NyArMTQ5MSw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5TTXV0YWJsZVN0
cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3RyaW5nKQogICAgIGlmICghW3NlbGYgX3ByZXBhcmVB
Y2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBOTzsKIAotICAgIHJldHVybiBpczxB
Y2Nlc3NpYmlsaXR5QXR0YWNobWVudD4obV9vYmplY3QpOworICAgIHJldHVybiBpczxBY2Nlc3Np
YmlsaXR5QXR0YWNobWVudD4oc2VsZi5heEJhY2tpbmdPYmplY3QpOwogfQogCiAtIChCT09MKWFj
Y2Vzc2liaWxpdHlJc0NvbWJvQm94CkBAIC0xNDk5LDcgKzE0OTksNyBAQCBzdGF0aWMgdm9pZCBh
cHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJpbmcgKnN0
cmluZykKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAg
ICByZXR1cm4gTk87CiAKLSAgICByZXR1cm4gbV9vYmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vz
c2liaWxpdHlSb2xlOjpDb21ib0JveDsKKyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3Qt
PnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpDb21ib0JveDsKIH0KIAogLSAoTlNT
dHJpbmcgKilhY2Nlc3NpYmlsaXR5SGludApAQCAtMTUxMSw3ICsxNTExLDcgQEAgc3RhdGljIHZv
aWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQoTlNNdXRhYmxlU3RyaW5nICpyZXN1bHQsIE5TU3RyaW5n
ICpzdHJpbmcpCiAgICAgYXBwZW5kU3RyaW5nVG9SZXN1bHQocmVzdWx0LCBbc2VsZiBiYXNlQWNj
ZXNzaWJpbGl0eUhlbHBUZXh0XSk7CiAgICAgCiAgICAgaWYgKFtzZWxmIGFjY2Vzc2liaWxpdHlJ
c1Nob3dpbmdWYWxpZGF0aW9uTWVzc2FnZV0pCi0gICAgICAgIGFwcGVuZFN0cmluZ1RvUmVzdWx0
KHJlc3VsdCwgbV9vYmplY3QtPnZhbGlkYXRpb25NZXNzYWdlKCkpOworICAgICAgICBhcHBlbmRT
dHJpbmdUb1Jlc3VsdChyZXN1bHQsIHNlbGYuYXhCYWNraW5nT2JqZWN0LT52YWxpZGF0aW9uTWVz
c2FnZSgpKTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTUyMSw3ICsxNTIxLDcg
QEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQoTlNNdXRhYmxlU3RyaW5nICpyZXN1
bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxp
dHlDYWxsXSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBVUkwgdXJsID0gbV9vYmpl
Y3QtPnVybCgpOworICAgIFVSTCB1cmwgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+dXJsKCk7CiAg
ICAgaWYgKHVybC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICByZXR1cm4gKE5T
VVJMKil1cmw7CkBAIC0xNTQyLDcgKzE1NDIsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTdHJpbmdU
b1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJpbmcgKnN0cmluZykKICAgICBp
ZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gTk87
CiAgICAgCi0gICAgbV9vYmplY3QtPnNjcm9sbFRvTWFrZVZpc2libGUoKTsKKyAgICBzZWxmLmF4
QmFja2luZ09iamVjdC0+c2Nyb2xsVG9NYWtlVmlzaWJsZSgpOwogICAgIHJldHVybiBZRVM7CiB9
CiAKQEAgLTE1NzAsNyArMTU3MCw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0
KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3RyaW5nKQogICAgICAgICByZXR1
cm4gTk87CiAgICAgfQogCi0gICAgQk9PTCByZXN1bHQgPSBtX29iamVjdC0+c2Nyb2xsQnlQYWdl
KHNjcm9sbERpcmVjdGlvbik7CisgICAgQk9PTCByZXN1bHQgPSBzZWxmLmF4QmFja2luZ09iamVj
dC0+c2Nyb2xsQnlQYWdlKHNjcm9sbERpcmVjdGlvbik7CiAgICAgCiAgICAgaWYgKHJlc3VsdCkg
ewogICAgICAgICBbc2VsZiBwb3N0U2Nyb2xsU3RhdHVzQ2hhbmdlTm90aWZpY2F0aW9uXTsKQEAg
LTE1ODYsNyArMTU4Niw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5TTXV0
YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3RyaW5nKQogCiAtIChDR1JlY3QpX2FjY2Vz
c2liaWxpdHlSZWxhdGl2ZUZyYW1lCiB7Ci0gICAgYXV0byByZWN0ID0gRmxvYXRSZWN0KHNuYXBw
ZWRJbnRSZWN0KG1fb2JqZWN0LT5lbGVtZW50UmVjdCgpKSk7CisgICAgYXV0byByZWN0ID0gRmxv
YXRSZWN0KHNuYXBwZWRJbnRSZWN0KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5lbGVtZW50UmVjdCgp
KSk7CiAgICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRSZWN0VG9TcGFjZTpyZWN0IHNwYWNlOkFjY2Vz
c2liaWxpdHlDb252ZXJzaW9uU3BhY2U6OlBhZ2VdOwogfQogCkBAIC0xNTk2LDcgKzE1OTYsNyBA
QCBzdGF0aWMgdm9pZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3Vs
dCwgTlNTdHJpbmcgKnN0cmluZykKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0
eUNhbGxdKQogICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKICAgICAKLSAgICBMYXlvdXRSZWN0
IHJlY3QgPSBtX29iamVjdC0+ZWxlbWVudFJlY3QoKTsKKyAgICBMYXlvdXRSZWN0IHJlY3QgPSBz
ZWxmLmF4QmFja2luZ09iamVjdC0+ZWxlbWVudFJlY3QoKTsKICAgICByZXR1cm4gQ0dSZWN0TWFr
ZShyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiB9CiAK
QEAgLTE2MDUsNyArMTYwNSw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5T
TXV0YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3RyaW5nKQogICAgIGlmICghW3NlbGYg
X3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBDR1JlY3RaZXJvOwog
ICAgIAotICAgIGF1dG8gZG9jdW1lbnQgPSBtX29iamVjdC0+ZG9jdW1lbnQoKTsKKyAgICBhdXRv
IGRvY3VtZW50ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmRvY3VtZW50KCk7CiAgICAgaWYgKCFk
b2N1bWVudCB8fCAhZG9jdW1lbnQtPnZpZXcoKSkKICAgICAgICAgcmV0dXJuIENHUmVjdFplcm87
CiAgICAgYXV0byByZWN0ID0gRmxvYXRSZWN0KHNuYXBwZWRJbnRSZWN0KGRvY3VtZW50LT52aWV3
KCktPnVub2JzY3VyZWRDb250ZW50UmVjdCgpKSk7CkBAIC0xNjE5LDcgKzE2MTksNyBAQCBzdGF0
aWMgdm9pZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNT
dHJpbmcgKnN0cmluZykKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxd
KQogICAgICAgICByZXR1cm4gQ0dQb2ludFplcm87CiAKLSAgICBJbnRQb2ludCBwb2ludCA9IG1f
b2JqZWN0LT5jbGlja1BvaW50KCk7CisgICAgSW50UG9pbnQgcG9pbnQgPSBzZWxmLmF4QmFja2lu
Z09iamVjdC0+Y2xpY2tQb2ludCgpOwogICAgIHJldHVybiBbc2VsZiBfYWNjZXNzaWJpbGl0eUNv
bnZlcnRQb2ludFRvVmlld1NwYWNlOnBvaW50XTsKIH0KIApAQCAtMTYyOCwyMSArMTYyOCwyMSBA
QCBzdGF0aWMgdm9pZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3Vs
dCwgTlNTdHJpbmcgKnN0cmluZykKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0
eUNhbGxdKQogICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKICAgICAKLSAgICBhdXRvIHJlY3Qg
PSBGbG9hdFJlY3Qoc25hcHBlZEludFJlY3QobV9vYmplY3QtPmVsZW1lbnRSZWN0KCkpKTsKKyAg
ICBhdXRvIHJlY3QgPSBGbG9hdFJlY3Qoc25hcHBlZEludFJlY3Qoc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmVsZW1lbnRSZWN0KCkpKTsKICAgICByZXR1cm4gW3NlbGYgY29udmVydFJlY3RUb1NwYWNl
OnJlY3Qgc3BhY2U6QWNjZXNzaWJpbGl0eUNvbnZlcnNpb25TcGFjZTo6U2NyZWVuXTsKIH0KIAog
Ly8gQ2hlY2tzIHdoZXRoZXIgYSBsaW5rIGNvbnRhaW5zIG9ubHkgc3RhdGljIHRleHQgYW5kIGlt
YWdlcyAoYW5kIGhhcyBiZWVuIGRpdmlkZWQgdW5uYXR1cmFsbHkgYnkgPHNwYW5zPiBhbmQgb3Ro
ZXIgbmVmYXJpb3VzIG1lY2hhbmlzbXMpLgogLSAoQk9PTCljb250YWluc1VubmF0dXJhbGx5U2Vn
bWVudGVkQ2hpbGRyZW4KIHsKLSAgICBpZiAoIW1fb2JqZWN0KQorICAgIGlmICghc2VsZi5heEJh
Y2tpbmdPYmplY3QpCiAgICAgICAgIHJldHVybiBOTzsKICAgICAKLSAgICBBY2Nlc3NpYmlsaXR5
Um9sZSByb2xlID0gbV9vYmplY3QtPnJvbGVWYWx1ZSgpOworICAgIEFjY2Vzc2liaWxpdHlSb2xl
IHJvbGUgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+cm9sZVZhbHVlKCk7CiAgICAgaWYgKHJvbGUg
IT0gQWNjZXNzaWJpbGl0eVJvbGU6OkxpbmsgJiYgcm9sZSAhPSBBY2Nlc3NpYmlsaXR5Um9sZTo6
V2ViQ29yZUxpbmspCiAgICAgICAgIHJldHVybiBOTzsKICAgICAKLSAgICBjb25zdCBhdXRvJiBj
aGlsZHJlbiA9IG1fb2JqZWN0LT5jaGlsZHJlbigpOworICAgIGNvbnN0IGF1dG8mIGNoaWxkcmVu
ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmNoaWxkcmVuKCk7CiAgICAgdW5zaWduZWQgY2hpbGRy
ZW5TaXplID0gY2hpbGRyZW4uc2l6ZSgpOwogCiAgICAgLy8gSWYgdGhlcmUncyBvbmx5IG9uZSBj
aGlsZCwgdGhlbiBpdCBkb2Vzbid0IGhhdmUgc2VnbWVudGVkIGNoaWxkcmVuLiAKQEAgLTE2NjMs
MjMgKzE2NjMsMjMgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQoTlNNdXRhYmxl
U3RyaW5nICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFy
ZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIEFYQXR0cmli
dXRlQ2FjaGVFbmFibGVyIGVuYWJsZUNhY2hlKG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCkpOwor
ICAgIEFYQXR0cmlidXRlQ2FjaGVFbmFibGVyIGVuYWJsZUNhY2hlKHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5heE9iamVjdENhY2hlKCkpOwogICAgIAogICAgIC8vIEFzIGxvbmcgYXMgdGhlcmUncyBh
IHBhcmVudCB3cmFwcGVyLCB0aGF0J3MgdGhlIGNvcnJlY3QgY2hhaW4gdG8gY2xpbWIuCi0gICAg
QVhDb3JlT2JqZWN0KiBwYXJlbnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7
CisgICAgQVhDb3JlT2JqZWN0KiBwYXJlbnQgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+cGFyZW50
T2JqZWN0VW5pZ25vcmVkKCk7CiAgICAgaWYgKHBhcmVudCkKICAgICAgICAgcmV0dXJuIHBhcmVu
dC0+d3JhcHBlcigpOwogCiAgICAgLy8gTW9jayBvYmplY3RzIGNhbiBoYXZlIHRoZWlyIHBhcmVu
dHMgZGV0YWNoZWQgYnV0IHN0aWxsIGV4aXN0IGluIHRoZSBjYWNoZS4KLSAgICBpZiAobV9vYmpl
Y3QtPmlzRGV0YWNoZWRGcm9tUGFyZW50KCkpCisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5pc0RldGFjaGVkRnJvbVBhcmVudCgpKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIAogICAg
IC8vIFRoZSBvbmx5IG9iamVjdCB3aXRob3V0IGEgcGFyZW50IHdyYXBwZXIgYXQgdGhpcyBwb2lu
dCBzaG91bGQgYmUgYSBzY3JvbGwgdmlldy4KLSAgICBBU1NFUlQobV9vYmplY3QtPmlzQWNjZXNz
aWJpbGl0eVNjcm9sbFZpZXcoKSk7CisgICAgQVNTRVJUKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5p
c0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KCkpOwogICAgIAogICAgIC8vIFZlcmlmeSB0aGlzIGlz
IHRoZSB0b3AgZG9jdW1lbnQuIElmIG5vdCwgd2UgbWlnaHQgbmVlZCB0byBnbyB0aHJvdWdoIHRo
ZSBwbGF0Zm9ybSB3aWRnZXQuCi0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX29iamVjdC0+
ZG9jdW1lbnRGcmFtZVZpZXcoKTsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX29iamVjdC0+
ZG9jdW1lbnQoKTsKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5kb2N1bWVudEZyYW1lVmlldygpOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5kb2N1bWVudCgpOwogICAgIGlmIChkb2N1bWVudCAmJiBmcmFtZVZp
ZXcgJiYgZG9jdW1lbnQgIT0gJmRvY3VtZW50LT50b3BEb2N1bWVudCgpKQogICAgICAgICByZXR1
cm4gZnJhbWVWaWV3LT5wbGF0Zm9ybVdpZGdldCgpOwogICAgIApAQCAtMTY5Miw3ICsxNjkyLDcg
QEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQoTlNNdXRhYmxlU3RyaW5nICpyZXN1
bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxp
dHlDYWxsXSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBmb2N1c2VkT2JqID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eU9iamVjdD4obV9vYmplY3Qt
PmZvY3VzZWRVSUVsZW1lbnQoKSk7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogZm9jdXNlZE9i
aiA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlPYmplY3Q+KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5m
b2N1c2VkVUlFbGVtZW50KCkpOwogICAgIAogICAgIGlmICghZm9jdXNlZE9iaikKICAgICAgICAg
cmV0dXJuIG5pbDsKQEAgLTE3MTQsNyArMTcxNCw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmlu
Z1RvUmVzdWx0KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3RyaW5nKQogICAg
IGlmICghd2ViVmlld0NsYXNzKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIAotICAgIEZyYW1l
VmlldyogZnJhbWVWaWV3ID0gbV9vYmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCk7CisgICAgRnJh
bWVWaWV3KiBmcmFtZVZpZXcgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnRGcmFtZVZp
ZXcoKTsKIAogICAgIGlmICghZnJhbWVWaWV3KQogICAgICAgICByZXR1cm4gbmlsOwpAQCAtMTc1
Myw3ICsxNzUzLDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQoTlNNdXRhYmxl
U3RyaW5nICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFy
ZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIE5POwogICAgIAotICAgIHJldHVy
biBtX29iamVjdC0+Y2FuU2V0VmFsdWVBdHRyaWJ1dGUoKTsKKyAgICByZXR1cm4gc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmNhblNldFZhbHVlQXR0cmlidXRlKCk7CiB9CiAKIC0gKE5TU3RyaW5nICop
YWNjZXNzaWJpbGl0eUxpbmtSZWxhdGlvbnNoaXBUeXBlCkBAIC0xNzYxLDcgKzE3NjEsNyBAQCBz
dGF0aWMgdm9pZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwg
TlNTdHJpbmcgKnN0cmluZykKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNh
bGxdKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIAotICAgIHJldHVybiBtX29iamVjdC0+bGlu
a1JlbFZhbHVlKCk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5saW5rUmVsVmFs
dWUoKTsKIH0KIAogLSAoQk9PTClhY2Nlc3NpYmlsaXR5UmVxdWlyZWQKQEAgLTE3NjksNyArMTc2
OSw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5TTXV0YWJsZVN0cmluZyAq
cmVzdWx0LCBOU1N0cmluZyAqc3RyaW5nKQogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3Np
YmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBOTzsKIAotICAgIHJldHVybiBtX29iamVjdC0+
aXNSZXF1aXJlZCgpOworICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+aXNSZXF1aXJl
ZCgpOwogfQogCiAtIChOU0FycmF5ICopYWNjZXNzaWJpbGl0eUZsb3dUb0VsZW1lbnRzCkBAIC0x
Nzc4LDcgKzE3NzgsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFi
bGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJpbmcgKnN0cmluZykKICAgICAgICAgcmV0dXJuIG5pbDsK
ICAgICAKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3IgY2hpbGRyZW47Ci0gICAgbV9vYmplY3QtPmFyaWFGbG93VG9FbGVtZW50cyhjaGlsZHJlbik7
CisgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPmFyaWFGbG93VG9FbGVtZW50cyhjaGlsZHJlbik7
CiAgICAgCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gY2hpbGRyZW4uc2l6ZSgpOwogICAgIE5TTXV0
YWJsZUFycmF5KiBhcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpsZW5n
dGhdOwpAQCAtMTgwMiw5ICsxODAyLDkgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1
bHQoTlNNdXRhYmxlU3RyaW5nICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgICAgIHJl
dHVybiBuaWw7CiAKICAgICAvLyBJZiB0aGlzIHN0YXRpYyB0ZXh0IGluc2lkZSBvZiBhIGxpbmss
IGl0IHNob3VsZCB1c2UgaXRzIHBhcmVudCdzIGxpbmtlZCBlbGVtZW50LgotICAgIEFYQ29yZU9i
amVjdCogZWxlbWVudCA9IG1fb2JqZWN0OwotICAgIGlmIChtX29iamVjdC0+cm9sZVZhbHVlKCkg
PT0gQWNjZXNzaWJpbGl0eVJvbGU6OlN0YXRpY1RleHQgJiYgbV9vYmplY3QtPnBhcmVudE9iamVj
dFVuaWdub3JlZCgpLT5pc0xpbmsoKSkKLSAgICAgICAgZWxlbWVudCA9IG1fb2JqZWN0LT5wYXJl
bnRPYmplY3RVbmlnbm9yZWQoKTsKKyAgICBBWENvcmVPYmplY3QqIGVsZW1lbnQgPSBzZWxmLmF4
QmFja2luZ09iamVjdDsKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnJvbGVWYWx1ZSgp
ID09IEFjY2Vzc2liaWxpdHlSb2xlOjpTdGF0aWNUZXh0ICYmIHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKS0+aXNMaW5rKCkpCisgICAgICAgIGVsZW1lbnQgPSBz
ZWxmLmF4QmFja2luZ09iamVjdC0+cGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7CiAKICAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgbGlua2VkRWxlbWVu
dHM7CiAgICAgZWxlbWVudC0+bGlua2VkVUlFbGVtZW50cyhsaW5rZWRFbGVtZW50cyk7CkBAIC0x
ODIzLDEwICsxODIzLDEwIEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5TTXV0
YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3RyaW5nKQogCiAtIChCT09MKWlzQXR0YWNo
bWVudAogewotICAgIGlmICghbV9vYmplY3QpCisgICAgaWYgKCFzZWxmLmF4QmFja2luZ09iamVj
dCkKICAgICAgICAgcmV0dXJuIE5POwogICAgIAotICAgIHJldHVybiBtX29iamVjdC0+aXNBdHRh
Y2htZW50KCk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0F0dGFjaG1lbnQo
KTsKIH0KIAogLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5VGV4dHVhbENvbnRleHQKQEAgLTE4
MzQsNyArMTgzNCw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5TTXV0YWJs
ZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3RyaW5nKQogICAgIGlmICghW3NlbGYgX3ByZXBh
cmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBpZiAobV9v
YmplY3QtPm5vZGUoKSAmJiBtX29iamVjdC0+bm9kZSgpLT5oYXNUYWdOYW1lKGNvZGVUYWcpKQor
ICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+bm9kZSgpICYmIHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5ub2RlKCktPmhhc1RhZ05hbWUoY29kZVRhZykpCiAgICAgICAgIHJldHVybiBVSUFjY2Vz
c2liaWxpdHlUZXh0dWFsQ29udGV4dFNvdXJjZUNvZGU7CiAgICAgCiAgICAgcmV0dXJuIG5pbDsK
QEAgLTE4NDUsNyArMTg0NSw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5T
TXV0YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3RyaW5nKQogICAgIGlmICghW3NlbGYg
X3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBOTzsKIAotICAgIHJl
dHVybiBtX29iamVjdC0+cHJlc3MoKTsKKyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3Qt
PnByZXNzKCk7CiB9CiAKIC0gKGlkKWF0dGFjaG1lbnRWaWV3CkBAIC0xODU0LDcgKzE4NTQsNyBA
QCBzdGF0aWMgdm9pZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3Vs
dCwgTlNTdHJpbmcgKnN0cmluZykKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIEFTU0VSVChb
c2VsZiBpc0F0dGFjaG1lbnRdKTsKLSAgICBXaWRnZXQqIHdpZGdldCA9IG1fb2JqZWN0LT53aWRn
ZXRGb3JBdHRhY2htZW50VmlldygpOworICAgIFdpZGdldCogd2lkZ2V0ID0gc2VsZi5heEJhY2tp
bmdPYmplY3QtPndpZGdldEZvckF0dGFjaG1lbnRWaWV3KCk7CiAgICAgaWYgKCF3aWRnZXQpCiAg
ICAgICAgIHJldHVybiBuaWw7CiAgICAgcmV0dXJuIHdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKTsg
ICAgCkBAIC0xOTUwLDcgKzE5NTAsNyBAQCBzdGF0aWMgUmVuZGVyT2JqZWN0KiByZW5kZXJlckZv
clZpZXcoV0FLVmlldyogdmlldykKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0
eUNhbGxdKQogICAgICAgICByZXR1cm4gQ0dQb2ludFplcm87CiAgICAgCi0gICAgcmV0dXJuIG1f
b2JqZWN0LT5zY3JvbGxQb3NpdGlvbigpOworICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVj
dC0+c2Nyb2xsUG9zaXRpb24oKTsKIH0KIAogLSAoQ0dTaXplKV9hY2Nlc3NpYmlsaXR5U2Nyb2xs
U2l6ZQpAQCAtMTk1OCw3ICsxOTU4LDcgQEAgc3RhdGljIFJlbmRlck9iamVjdCogcmVuZGVyZXJG
b3JWaWV3KFdBS1ZpZXcqIHZpZXcpCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxp
dHlDYWxsXSkKICAgICAgICAgcmV0dXJuIENHU2l6ZVplcm87CiAgICAgCi0gICAgcmV0dXJuIG1f
b2JqZWN0LT5zY3JvbGxDb250ZW50c1NpemUoKTsKKyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdP
YmplY3QtPnNjcm9sbENvbnRlbnRzU2l6ZSgpOwogfQogCiAtIChDR1JlY3QpX2FjY2Vzc2liaWxp
dHlTY3JvbGxWaXNpYmxlUmVjdApAQCAtMTk2Niw3ICsxOTY2LDcgQEAgc3RhdGljIFJlbmRlck9i
amVjdCogcmVuZGVyZXJGb3JWaWV3KFdBS1ZpZXcqIHZpZXcpCiAgICAgaWYgKCFbc2VsZiBfcHJl
cGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIENHUmVjdFplcm87CiAgICAg
Ci0gICAgcmV0dXJuIG1fb2JqZWN0LT5zY3JvbGxWaXNpYmxlQ29udGVudFJlY3QoKTsKKyAgICBy
ZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPnNjcm9sbFZpc2libGVDb250ZW50UmVjdCgpOwog
fQogCiAtIChBWENvcmVPYmplY3QqKWRldGFpbFBhcmVudEZvclN1bW1hcnlPYmplY3Q6KEFYQ29y
ZU9iamVjdCopb2JqZWN0CkBAIC0yMDA0LDcgKzIwMDQsNyBAQCBzdGF0aWMgUmVuZGVyT2JqZWN0
KiByZW5kZXJlckZvclZpZXcoV0FLVmlldyogdmlldykKIHsKICAgICBBY2Nlc3NpYmlsaXR5U2Vh
cmNoQ3JpdGVyaWEgY3JpdGVyaWEgPSBhY2Nlc3NpYmlsaXR5U2VhcmNoQ3JpdGVyaWFGb3JTZWFy
Y2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlKHBhcmFtZXRlcnMpOwogICAgIEFjY2Vz
c2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciByZXN1bHRzOwotICAg
IG1fb2JqZWN0LT5maW5kTWF0Y2hpbmdPYmplY3RzKCZjcml0ZXJpYSwgcmVzdWx0cyk7CisgICAg
c2VsZi5heEJhY2tpbmdPYmplY3QtPmZpbmRNYXRjaGluZ09iamVjdHMoJmNyaXRlcmlhLCByZXN1
bHRzKTsKICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShyZXN1bHRzKTsKIH0KIApAQCAtMjAx
Myw5ICsyMDEzLDkgQEAgc3RhdGljIFJlbmRlck9iamVjdCogcmVuZGVyZXJGb3JWaWV3KFdBS1Zp
ZXcqIHZpZXcpCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAg
ICAgICAgcmV0dXJuOwogICAgIAotICAgIEZyYW1lU2VsZWN0aW9uJiBmcmFtZVNlbGVjdGlvbiA9
IG1fb2JqZWN0LT5kb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKTsKLSAgICBWaXNpYmxl
U2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fb2JqZWN0LT5zZWxlY3Rpb24oKTsKLSAgICBWaXNpYmxl
UG9zaXRpb25SYW5nZSByYW5nZSA9IG1fb2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZSgpOwor
ICAgIEZyYW1lU2VsZWN0aW9uJiBmcmFtZVNlbGVjdGlvbiA9IHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5kb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9u
IHNlbGVjdGlvbiA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZWxlY3Rpb24oKTsKKyAgICBWaXNp
YmxlUG9zaXRpb25SYW5nZSByYW5nZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT52aXNpYmxlUG9z
aXRpb25SYW5nZSgpOwogICAgIAogICAgIC8vIEJlZm9yZSBhIHNlbGVjdGlvbiB3aXRoIGxlbmd0
aCBleGlzdHMsIHRoZSBjdXJzb3IgcG9zaXRpb24gbmVlZHMgdG8gbW92ZSB0byB0aGUgcmlnaHQg
c3RhcnRpbmcgcGxhY2UuCiAgICAgLy8gVGhhdCBzaG91bGQgYmUgdGhlIGJlZ2lubmluZyBvZiB0
aGlzIGVsZW1lbnQgKHJhbmdlLnN0YXJ0KS4gSG93ZXZlciwgaWYgdGhlIGN1cnNvciBpcyBhbHJl
YWR5IHdpdGhpbiB0aGUgCkBAIC0yMDUwLDcgKzIwNTAsNyBAQCBzdGF0aWMgUmVuZGVyT2JqZWN0
KiByZW5kZXJlckZvclZpZXcoV0FLVmlldyogdmlldykKICAgICBpZiAodmlzaWJsZVBvc2l0aW9u
LmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBGcmFtZVNlbGVjdGlvbiYgZnJhbWVT
ZWxlY3Rpb24gPSBtX29iamVjdC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCk7Cisg
ICAgRnJhbWVTZWxlY3Rpb24mIGZyYW1lU2VsZWN0aW9uID0gc2VsZi5heEJhY2tpbmdPYmplY3Qt
PmRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpOwogICAgIGZyYW1lU2VsZWN0aW9uLm1v
dmVUbyh2aXNpYmxlUG9zaXRpb24sIFVzZXJUcmlnZ2VyZWQpOwogfQogCkBAIC0yMDU5LDcgKzIw
NTksNyBAQCBzdGF0aWMgUmVuZGVyT2JqZWN0KiByZW5kZXJlckZvclZpZXcoV0FLVmlldyogdmll
dykKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX29iamVjdC0+aW5jcmVtZW50KCk7CisgICAgc2VsZi5heEJhY2tpbmdP
YmplY3QtPmluY3JlbWVudCgpOwogfQogCiAtICh2b2lkKWFjY2Vzc2liaWxpdHlEZWNyZW1lbnQK
QEAgLTIwNjcsNyArMjA2Nyw3IEBAIHN0YXRpYyBSZW5kZXJPYmplY3QqIHJlbmRlcmVyRm9yVmll
dyhXQUtWaWV3KiB2aWV3KQogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2Fs
bF0pCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fb2JqZWN0LT5kZWNyZW1lbnQoKTsKKyAgICBz
ZWxmLmF4QmFja2luZ09iamVjdC0+ZGVjcmVtZW50KCk7CiB9CiAKICNwcmFnbWEgbWFyayBBY2Nl
c3NpYmlsaXR5IFRleHQgTWFya2VyIEhhbmRsZXJzCkBAIC0yMDk2LDcgKzIwOTYsNyBAQCBzdGF0
aWMgUmVuZGVyT2JqZWN0KiByZW5kZXJlckZvclZpZXcoV0FLVmlldyogdmlldykKIHsKICAgICBp
ZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm47Ci0g
ICAgbV9vYmplY3QtPnNldFZhbHVlKHN0cmluZyk7CisgICAgc2VsZi5heEJhY2tpbmdPYmplY3Qt
PnNldFZhbHVlKHN0cmluZyk7CiB9CiAKIC0gKE5TU3RyaW5nICopc3RyaW5nRm9yVGV4dE1hcmtl
cnM6KE5TQXJyYXkgKiltYXJrZXJzCkBAIC0yMTA4LDcgKzIxMDgsNyBAQCBzdGF0aWMgUmVuZGVy
T2JqZWN0KiByZW5kZXJlckZvclZpZXcoV0FLVmlldyogdmlldykKICAgICBpZiAoIXJhbmdlKQog
ICAgICAgICByZXR1cm4gbmlsOwogICAgIAotICAgIHJldHVybiBtX29iamVjdC0+c3RyaW5nRm9y
UmFuZ2UocmFuZ2UpOworICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+c3RyaW5nRm9y
UmFuZ2UocmFuZ2UpOwogfQogCiBzdGF0aWMgaW50IGJsb2NrcXVvdGVMZXZlbChSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyKQpAQCAtMjMwOCw3ICsyMzA4LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1
dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5n
LAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgTm9kZSogcmVwbGFjZWROb2RlID0gbm9k
ZS50cmF2ZXJzZVRvQ2hpbGRBdChvZmZzZXQpOwogICAgICAgICAgICAgaWYgKHJlcGxhY2VkTm9k
ZSkgewotICAgICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiA9IG1fb2JqZWN0
LT5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHJlcGxhY2VkTm9kZS0+cmVuZGVyZXIoKSk7
CisgICAgICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqID0gc2VsZi5heEJhY2tp
bmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUocmVwbGFjZWROb2RlLT5yZW5k
ZXJlcigpKTsKICAgICAgICAgICAgICAgICBpZiAob2JqICYmICFvYmotPmFjY2Vzc2liaWxpdHlJ
c0lnbm9yZWQoKSkKICAgICAgICAgICAgICAgICAgICAgW3NlbGYgX2FkZEFjY2Vzc2liaWxpdHlP
YmplY3Q6b2JqIHRvVGV4dE1hcmtlckFycmF5OmFycmF5XTsKICAgICAgICAgICAgIH0KQEAgLTIz
MjMsNyArMjMyMyw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQo
TlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICBpZiAoIXJhbmdlKQog
ICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CiAKLSAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBtX29iamVjdC0+ZG9jdW1lbnQoKTsKKyAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKTsKICAgICBFbGVtZW50KiBzZWxl
Y3Rpb25Sb290ID0gZG9jdW1lbnQtPmZyYW1lKCktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJv
b3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICBFbGVtZW50KiBzY29wZSA9IHNlbGVjdGlvblJvb3Qg
PyBzZWxlY3Rpb25Sb290IDogZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOwogCkBAIC0yMzU3
LDcgKzIzNTcsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5T
TXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAgLy8gZGlyZWN0bHkgaW4g
dGhlIGRvY3VtZW50IERPTSwgc28gc2VyaWFsaXphdGlvbiBpcyBwcm9ibGVtYXRpYy4gT3VyIHNv
bHV0aW9uIGlzCiAgICAgLy8gdG8gdXNlIHRoZSByb290IGVkaXRhYmxlIGVsZW1lbnQgb2YgdGhl
IHNlbGVjdGlvbiBzdGFydCBhcyB0aGUgcG9zaXRpb25hbCBiYXNlLgogICAgIC8vIFRoYXQgZml0
cyB3aXRoIEFwcEtpdCdzIGlkZWEgb2YgYW4gaW5wdXQgY29udGV4dC4KLSAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBtX29iamVjdC0+ZG9jdW1lbnQoKTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKTsKICAgICBFbGVtZW50KiBzZWxlY3Rp
b25Sb290ID0gZG9jdW1lbnQtPmZyYW1lKCktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RF
ZGl0YWJsZUVsZW1lbnQoKTsKICAgICBFbGVtZW50KiBzY29wZSA9IHNlbGVjdGlvblJvb3QgPyBz
ZWxlY3Rpb25Sb290IDogZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOwogICAgIHJldHVybiBU
ZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKHNjb3BlLCBuc3JhbmdlLmxv
Y2F0aW9uLCBuc3JhbmdlLmxlbmd0aCk7CkBAIC0yMzczLDcgKzIzNzMsNyBAQCBzdGF0aWMgdm9p
ZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcq
IGF0dHJTdHJpbmcsCiAgICAgaWYgKCFtYXJrZXIpCiAgICAgICAgIHJldHVybiBOU05vdEZvdW5k
OyAgICAKIAotICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fb2JqZWN0LT5heE9iamVj
dENhY2hlKCkpIHsKKyAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBzZWxmLmF4QmFja2lu
Z09iamVjdC0+YXhPYmplY3RDYWNoZSgpKSB7CiAgICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFy
YWN0ZXJPZmZzZXQgPSBbbWFya2VyIGNoYXJhY3Rlck9mZnNldF07CiAgICAgICAgIC8vIENyZWF0
ZSBhIGNvbGxhcHNlZCByYW5nZSBmcm9tIHRoZSBDaGFyYWN0ZXJPZmZzZXQgb2JqZWN0LgogICAg
ICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gY2FjaGUtPnJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFj
dGVyT2Zmc2V0cyhjaGFyYWN0ZXJPZmZzZXQsIGNoYXJhY3Rlck9mZnNldCk7CkBAIC0yMzg4LDcg
KzIzODgsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0
YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFy
ZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gbV9vYmplY3QtPmVsZW1lbnRSYW5nZSgpOworICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2UgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZWxlbWVudFJhbmdlKCk7CiAgICAg
cmV0dXJuIFtzZWxmIHRleHRNYXJrZXJzRm9yUmFuZ2U6cmFuZ2VdOwogfQogCkBAIC0yNDMxLDEx
ICsyNDMxLDExIEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNN
dXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICBpZiAoIVtzZWxmIF9wcmVw
YXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIAotICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9vYmplY3QtPnNlbGVjdGlvbigpOworICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnNlbGVjdGlv
bigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAg
ICAgCi0gICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX29iamVjdC0+YXhPYmplY3RDYWNoZSgp
OworICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2Jq
ZWN0Q2FjaGUoKTsKICAgICBpZiAoIWNhY2hlKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIApA
QCAtMjQ2Myw3ICsyNDYzLDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5k
VGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAgIGlmICghcmFu
Z2UpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1f
b2JqZWN0LT5heE9iamVjdENhY2hlKCk7CisgICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBzZWxm
LmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpOwogICAgIGlmICghY2FjaGUpCiAgICAg
ICAgIHJldHVybiBuaWw7CiAgICAgCkBAIC0yNTI4LDcgKzI1MjgsNyBAQCBzdGF0aWMgdm9pZCBB
WEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0
dHJTdHJpbmcsCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAg
ICAgICAgcmV0dXJuIG5pbDsKIAotICAgIHJldHVybiBtX29iamVjdC0+c3RyaW5nRm9yUmFuZ2Uo
W3NlbGYgX2NvbnZlcnRUb0RPTVJhbmdlOnJhbmdlXSk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5zdHJpbmdGb3JSYW5nZShbc2VsZiBfY29udmVydFRvRE9NUmFuZ2U6cmFuZ2Vd
KTsKIH0KIAogLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZ0ZvclJhbmdl
OihOU1JhbmdlKXJhbmdlCkBAIC0yNTUwLDEwICsyNTUwLDEwIEBAIHN0YXRpYyB2b2lkIEFYQXR0
cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0
cmluZywKIAogLSAoTlNSYW5nZSlfYWNjZXNzaWJpbGl0eVNlbGVjdGVkVGV4dFJhbmdlCiB7Ci0g
ICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSB8fCAhbV9vYmplY3QtPmlz
VGV4dENvbnRyb2woKSkKKyAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxd
IHx8ICFzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUZXh0Q29udHJvbCgpKQogICAgICAgICByZXR1
cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CiAKLSAgICBQbGFpblRleHRSYW5nZSB0ZXh0
UmFuZ2UgPSBtX29iamVjdC0+c2VsZWN0ZWRUZXh0UmFuZ2UoKTsKKyAgICBQbGFpblRleHRSYW5n
ZSB0ZXh0UmFuZ2UgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+c2VsZWN0ZWRUZXh0UmFuZ2UoKTsK
ICAgICBpZiAodGV4dFJhbmdlLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2Uo
TlNOb3RGb3VuZCwgMCk7CiAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKHRleHRSYW5nZS5zdGFydCwg
dGV4dFJhbmdlLmxlbmd0aCk7CkBAIC0yNTYxLDEwICsyNTYxLDEwIEBAIHN0YXRpYyB2b2lkIEFY
QXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0
clN0cmluZywKIAogLSAodm9pZClfYWNjZXNzaWJpbGl0eVNldFNlbGVjdGVkVGV4dFJhbmdlOihO
U1JhbmdlKXJhbmdlCiB7Ci0gICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxs
XSB8fCAhbV9vYmplY3QtPmlzVGV4dENvbnRyb2woKSkKKyAgICBpZiAoIVtzZWxmIF9wcmVwYXJl
QWNjZXNzaWJpbGl0eUNhbGxdIHx8ICFzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUZXh0Q29udHJv
bCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9vYmplY3QtPnNldFNlbGVjdGVkVGV4
dFJhbmdlKFBsYWluVGV4dFJhbmdlKHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgpKTsKKyAg
ICBzZWxmLmF4QmFja2luZ09iamVjdC0+c2V0U2VsZWN0ZWRUZXh0UmFuZ2UoUGxhaW5UZXh0UmFu
Z2UocmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCkpOwogfQogCiAtIChCT09MKWFjY2Vzc2li
aWxpdHlSZXBsYWNlUmFuZ2U6KE5TUmFuZ2UpcmFuZ2Ugd2l0aFRleHQ6KE5TU3RyaW5nICopc3Ry
aW5nCkBAIC0yNTcyLDcgKzI1NzIsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdB
cHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAgaWYg
KCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIE5POwog
Ci0gICAgcmV0dXJuIG1fb2JqZWN0LT5yZXBsYWNlVGV4dEluUmFuZ2Uoc3RyaW5nLCBQbGFpblRl
eHRSYW5nZShyYW5nZSkpOworICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+cmVwbGFj
ZVRleHRJblJhbmdlKHN0cmluZywgUGxhaW5UZXh0UmFuZ2UocmFuZ2UpKTsKIH0KIAogLSAoQk9P
TClhY2Nlc3NpYmlsaXR5SW5zZXJ0VGV4dDooTlNTdHJpbmcgKil0ZXh0CkBAIC0yNTgwLDcgKzI1
ODAsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJs
ZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFj
Y2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIE5POwogCi0gICAgcmV0dXJuIG1fb2Jq
ZWN0LT5pbnNlcnRUZXh0KHRleHQpOworICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+
aW5zZXJ0VGV4dCh0ZXh0KTsKIH0KIAogLy8gQSBjb252ZW5pZW5jZSBtZXRob2QgZm9yIGdldHRp
bmcgdGhlIGFjY2Vzc2liaWxpdHkgb2JqZWN0cyBvZiBhIE5TUmFuZ2UuIEN1cnJlbnRseSB1c2Vk
IG9ubHkgYnkgRFJULgpAQCAtMjYxNSwxNCArMjYxNSwxNCBAQCBzdGF0aWMgdm9pZCBBWEF0dHJp
YnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJp
bmcsCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAg
cmV0dXJuIG5pbDsKICAgICAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fb2Jq
ZWN0LT5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5zZWxlY3Rpb24oKTsKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRp
b24gPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CiAgICAgCiAgICAgLy8gaWYgdGhlcmUncyBu
byBzZWxlY3Rpb24sIHN0YXJ0IGF0IHRoZSB0b3Agb2YgdGhlIGRvY3VtZW50CiAgICAgaWYgKHBv
c2l0aW9uLmlzTnVsbCgpKQotICAgICAgICBwb3NpdGlvbiA9IHN0YXJ0T2ZEb2N1bWVudChtX29i
amVjdC0+ZG9jdW1lbnQoKSk7CisgICAgICAgIHBvc2l0aW9uID0gc3RhcnRPZkRvY3VtZW50KHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5kb2N1bWVudCgpKTsKICAgICAKLSAgICByZXR1cm4gW1dlYkFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyIHRleHRNYXJrZXJXaXRoVmlzaWJsZVBvc2l0aW9uOnBvc2l0
aW9uIGNhY2hlOm1fb2JqZWN0LT5heE9iamVjdENhY2hlKCldOworICAgIHJldHVybiBbV2ViQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXIgdGV4dE1hcmtlcldpdGhWaXNpYmxlUG9zaXRpb246cG9zaXRp
b24gY2FjaGU6c2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKV07CiB9CiAKIC8v
IFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIHRvIHJldHVybiB0aGUgbWFya2VyIGF0IHRoZSBlbmQg
b2YgdGhlIGxpbmUgc3RhcnRpbmcgYXQKQEAgLTI2MzYsOSArMjYzNiw5IEBAIHN0YXRpYyB2b2lk
IEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyog
YXR0clN0cmluZywKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKICAgICBWaXNpYmxlUG9zaXRp
b24gc3RhcnQgPSBbbWFya2VyIHZpc2libGVQb3NpdGlvbl07Ci0gICAgVmlzaWJsZVBvc2l0aW9u
IGxpbmVFbmQgPSBtX29iamVjdC0+bmV4dExpbmVFbmRQb3NpdGlvbihzdGFydCk7CisgICAgVmlz
aWJsZVBvc2l0aW9uIGxpbmVFbmQgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+bmV4dExpbmVFbmRQ
b3NpdGlvbihzdGFydCk7CiAgICAgCi0gICAgcmV0dXJuIFtXZWJBY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlciB0ZXh0TWFya2VyV2l0aFZpc2libGVQb3NpdGlvbjpsaW5lRW5kIGNhY2hlOm1fb2JqZWN0
LT5heE9iamVjdENhY2hlKCldOworICAgIHJldHVybiBbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXIgdGV4dE1hcmtlcldpdGhWaXNpYmxlUG9zaXRpb246bGluZUVuZCBjYWNoZTpzZWxmLmF4QmFj
a2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpXTsKIH0KIAogLy8gVGhpcyBtZXRob2QgaXMgaW50
ZW5kZWQgdG8gcmV0dXJuIHRoZSBtYXJrZXIgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIHN0YXJ0
aW5nIGF0CkBAIC0yNjUyLDkgKzI2NTIsOSBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJp
bmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAg
ICAgIHJldHVybiBuaWw7CiAgICAgCiAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0ID0gW21hcmtl
ciB2aXNpYmxlUG9zaXRpb25dOwotICAgIFZpc2libGVQb3NpdGlvbiBsaW5lU3RhcnQgPSBtX29i
amVjdC0+cHJldmlvdXNMaW5lU3RhcnRQb3NpdGlvbihzdGFydCk7CisgICAgVmlzaWJsZVBvc2l0
aW9uIGxpbmVTdGFydCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5wcmV2aW91c0xpbmVTdGFydFBv
c2l0aW9uKHN0YXJ0KTsKICAgICAKLSAgICByZXR1cm4gW1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyIHRleHRNYXJrZXJXaXRoVmlzaWJsZVBvc2l0aW9uOmxpbmVTdGFydCBjYWNoZTptX29iamVj
dC0+YXhPYmplY3RDYWNoZSgpXTsKKyAgICByZXR1cm4gW1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyIHRleHRNYXJrZXJXaXRoVmlzaWJsZVBvc2l0aW9uOmxpbmVTdGFydCBjYWNoZTpzZWxmLmF4
QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpXTsKIH0KIAogLSAoTlNBcnJheSAqKW1pc3Nw
ZWxsaW5nVGV4dE1hcmtlclJhbmdlOihOU0FycmF5ICopc3RhcnRUZXh0TWFya2VyUmFuZ2UgZm9y
d2FyZDooQk9PTClmb3J3YXJkCkBAIC0yNjY2LDcgKzI2NjYsNyBAQCBzdGF0aWMgdm9pZCBBWEF0
dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJT
dHJpbmcsCiAgICAgaWYgKCFzdGFydFJhbmdlKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAg
UmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlID0gbV9vYmplY3QtPmdldE1pc3NwZWxsaW5n
UmFuZ2Uoc3RhcnRSYW5nZSwKKyAgICBSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UgPSBz
ZWxmLmF4QmFja2luZ09iamVjdC0+Z2V0TWlzc3BlbGxpbmdSYW5nZShzdGFydFJhbmdlLAogICAg
ICAgICBmb3J3YXJkID8gQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbjo6TmV4dCA6IEFjY2Vz
c2liaWxpdHlTZWFyY2hEaXJlY3Rpb246OlByZXZpb3VzKTsKICAgICByZXR1cm4gW3NlbGYgdGV4
dE1hcmtlcnNGb3JSYW5nZTptaXNzcGVsbGluZ1JhbmdlXTsKIH0KQEAgLTI3MDEsMTQgKzI3MDEs
MTQgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFibGVB
dHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nl
c3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBDR1JlY3RaZXJvOwogCi0gICAgQVhPYmpl
Y3RDYWNoZSogY2FjaGUgPSBtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpOworICAgIEFYT2JqZWN0
Q2FjaGUqIGNhY2hlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKICAg
ICBpZiAoIWNhY2hlKQogICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKICAgICBSZWZQdHI8UmFu
Z2U+IHJhbmdlID0gW3NlbGYgcmFuZ2VGb3JUZXh0TWFya2VyczphcnJheV07CiAgICAgaWYgKCFy
YW5nZSkKICAgICAgICAgcmV0dXJuIENHUmVjdFplcm87CiAgICAgCi0gICAgYXV0byByZWN0ID0g
RmxvYXRSZWN0KG1fb2JqZWN0LT5ib3VuZHNGb3JSYW5nZShyYW5nZSkpOworICAgIGF1dG8gcmVj
dCA9IEZsb2F0UmVjdChzZWxmLmF4QmFja2luZ09iamVjdC0+Ym91bmRzRm9yUmFuZ2UocmFuZ2Up
KTsKICAgICByZXR1cm4gW3NlbGYgY29udmVydFJlY3RUb1NwYWNlOnJlY3Qgc3BhY2U6QWNjZXNz
aWJpbGl0eUNvbnZlcnNpb25TcGFjZTo6U2NyZWVuXTsKIH0KIApAQCAtMjcxOCw3ICsyNzE4LDcg
QEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRy
aWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAgIGlmICghb3JpZ2luYWxSYW5nZSkKICAgICAg
ICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fb2JqZWN0
LT5heE9iamVjdENhY2hlKCk7CisgICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBzZWxmLmF4QmFj
a2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpOwogICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJl
dHVybiBuaWw7CiAgICAgCkBAIC0yNzY3LDE2ICsyNzY3LDE2IEBAIHN0YXRpYyB2b2lkIEFYQXR0
cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0
cmluZywKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAg
ICByZXR1cm4gbmlsOwogICAgIAotICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9vYmplY3Qt
PmF4T2JqZWN0Q2FjaGUoKTsKKyAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7CiAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gY2FjaGUtPmNo
YXJhY3Rlck9mZnNldEZvclBvaW50KEludFBvaW50KHBvaW50KSwgbV9vYmplY3QpOworICAgIENo
YXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBjYWNoZS0+Y2hhcmFjdGVyT2Zmc2V0Rm9y
UG9pbnQoSW50UG9pbnQocG9pbnQpLCBzZWxmLmF4QmFja2luZ09iamVjdCk7CiAgICAgcmV0dXJu
IFtXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFya2VyV2l0aENoYXJhY3Rlck9mZnNl
dDpjaGFyYWN0ZXJPZmZzZXQgY2FjaGU6Y2FjaGVdOwogfQogCiAtIChXZWJBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlciAqKW5leHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6KENoYXJhY3Rlck9mZnNl
dCYpY2hhcmFjdGVyT2Zmc2V0CiB7Ci0gICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX29iamVj
dC0+YXhPYmplY3RDYWNoZSgpOworICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKICAgICBpZiAoIWNhY2hlKQogICAgICAgICBy
ZXR1cm4gbmlsOwogICAgIApAQCAtMjc4OSw3ICsyNzg5LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRy
aWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3Ry
aW5nLAogCiAtIChXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKXByZXZpb3VzTWFya2VyRm9y
Q2hhcmFjdGVyT2Zmc2V0OihDaGFyYWN0ZXJPZmZzZXQmKWNoYXJhY3Rlck9mZnNldAogewotICAg
IEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICBB
WE9iamVjdENhY2hlKiBjYWNoZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hl
KCk7CiAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKQEAgLTI4MTEs
NyArMjgxMSw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNN
dXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICBpZiAoIVtzdGFydE1hcmtl
ciBpc0tpbmRPZkNsYXNzOltXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBjbGFzc11dIHx8ICFb
ZW5kTWFya2VyIGlzS2luZE9mQ2xhc3M6W1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIGNsYXNz
XV0pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAotICAgIEFYT2JqZWN0Q2FjaGUqIGNh
Y2hlID0gbV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICBBWE9iamVjdENhY2hlKiBjYWNo
ZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7CiAgICAgaWYgKCFjYWNo
ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCkBAIC0yODM5LDcgKzI4MzksNyBAQCBz
dGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0
ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG5p
bDsKICAgICAKLSAgICByZXR1cm4gW1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHN0YXJ0T3JF
bmRUZXh0TWFya2VyRm9yUmFuZ2U6cmFuZ2UgaXNTdGFydDppc1N0YXJ0IGNhY2hlOm1fb2JqZWN0
LT5heE9iamVjdENhY2hlKCldOworICAgIHJldHVybiBbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXIgc3RhcnRPckVuZFRleHRNYXJrZXJGb3JSYW5nZTpyYW5nZSBpc1N0YXJ0OmlzU3RhcnQgY2Fj
aGU6c2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKV07CiB9CiAKIC0gKE5TQXJy
YXkgKil0ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJzOihOU0FycmF5ICopdGV4dE1hcmtlcnMKQEAg
LTI4NTYsOCArMjg1Niw4IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRl
eHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICBpZiAoIXJhbmdl
KQogICAgICAgICByZXR1cm4gbmlsOwogICAgIAotICAgIFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyKiBzdGFydCA9IFtXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBzdGFydE9yRW5kVGV4dE1h
cmtlckZvclJhbmdlOnJhbmdlIGlzU3RhcnQ6WUVTIGNhY2hlOm1fb2JqZWN0LT5heE9iamVjdENh
Y2hlKCldOwotICAgIFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKiBlbmQgPSBbV2ViQWNjZXNz
aWJpbGl0eVRleHRNYXJrZXIgc3RhcnRPckVuZFRleHRNYXJrZXJGb3JSYW5nZTpyYW5nZSBpc1N0
YXJ0Ok5PIGNhY2hlOm1fb2JqZWN0LT5heE9iamVjdENhY2hlKCldOworICAgIFdlYkFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyKiBzdGFydCA9IFtXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBzdGFy
dE9yRW5kVGV4dE1hcmtlckZvclJhbmdlOnJhbmdlIGlzU3RhcnQ6WUVTIGNhY2hlOnNlbGYuYXhC
YWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCldOworICAgIFdlYkFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyKiBlbmQgPSBbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgc3RhcnRPckVuZFRleHRN
YXJrZXJGb3JSYW5nZTpyYW5nZSBpc1N0YXJ0Ok5PIGNhY2hlOnNlbGYuYXhCYWNraW5nT2JqZWN0
LT5heE9iamVjdENhY2hlKCldOwogICAgIGlmICghc3RhcnQgfHwgIWVuZCkKICAgICAgICAgcmV0
dXJuIG5pbDsKICAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czpzdGFydCwgZW5k
LCBuaWxdOwpAQCAtMjg2Nyw3ICsyODY3LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3Ry
aW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogewog
ICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVy
biBuaWw7Ci0gICAgcmV0dXJuIG1fb2JqZWN0LT5leHBhbmRlZFRleHRWYWx1ZSgpOworICAgIHJl
dHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+ZXhwYW5kZWRUZXh0VmFsdWUoKTsKIH0KIAogLSAo
TlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5SWRlbnRpZmllcgpAQCAtMjg3NSw3ICsyODc1LDcgQEAg
c3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1
dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmls
aXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0gICAgcmV0dXJuIG1fb2JqZWN0
LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjppZEF0dHIpOworICAgIHJldHVybiBzZWxmLmF4QmFj
a2luZ09iamVjdC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyKTsKIH0KIAogLSAoTlNB
cnJheTxOU1N0cmluZyAqPiAqKWFjY2Vzc2liaWxpdHlTcGVlY2hIaW50CkBAIC0yODkxLDcgKzI4
OTEsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJs
ZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFj
Y2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIE5POwogCi0gICAgcmV0dXJuIG1fb2Jq
ZWN0LT5pc0J1c3koKTsKKyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzQnVzeSgp
OwogfQogCiAtIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlBUklBTGl2ZVJlZ2lvblN0YXR1cwpA
QCAtMjg5OSw3ICsyODk5LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5k
VGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAgIGlmICghW3Nl
bGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAg
ICByZXR1cm4gbV9vYmplY3QtPmxpdmVSZWdpb25TdGF0dXMoKTsKKyAgICByZXR1cm4gc2VsZi5h
eEJhY2tpbmdPYmplY3QtPmxpdmVSZWdpb25TdGF0dXMoKTsKIH0KIAogLSAoTlNTdHJpbmcgKilh
Y2Nlc3NpYmlsaXR5QVJJQVJlbGV2YW50U3RhdHVzCkBAIC0yOTA3LDcgKzI5MDcsNyBAQCBzdGF0
aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRT
dHJpbmcqIGF0dHJTdHJpbmcsCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlD
YWxsXSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICByZXR1cm4gbV9vYmplY3QtPmxp
dmVSZWdpb25SZWxldmFudCgpOworICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+bGl2
ZVJlZ2lvblJlbGV2YW50KCk7CiB9CiAKIC0gKEJPT0wpYWNjZXNzaWJpbGl0eUFSSUFMaXZlUmVn
aW9uSXNBdG9taWMKQEAgLTI5MTUsNyArMjkxNSw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRl
ZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywK
ICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1
cm4gTk87CiAgICAgCi0gICAgcmV0dXJuIG1fb2JqZWN0LT5saXZlUmVnaW9uQXRvbWljKCk7Cisg
ICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5saXZlUmVnaW9uQXRvbWljKCk7CiB9CiAK
IC0gKEJPT0wpYWNjZXNzaWJpbGl0eVN1cHBvcnRzQVJJQVByZXNzZWQKQEAgLTI5MjMsNyArMjky
Myw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxl
QXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNj
ZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gTk87CiAgICAgCi0gICAgcmV0dXJuIG1f
b2JqZWN0LT5zdXBwb3J0c1ByZXNzZWQoKTsKKyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPnN1cHBvcnRzUHJlc3NlZCgpOwogfQogCiAtIChCT09MKWFjY2Vzc2liaWxpdHlJc1ByZXNz
ZWQKQEAgLTI5MzEsNyArMjkzMSw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0Fw
cGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICBpZiAo
IVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gTk87CiAg
ICAgCi0gICAgcmV0dXJuIG1fb2JqZWN0LT5pc1ByZXNzZWQoKTsKKyAgICByZXR1cm4gc2VsZi5h
eEJhY2tpbmdPYmplY3QtPmlzUHJlc3NlZCgpOwogfQogCiAtIChCT09MKWFjY2Vzc2liaWxpdHlT
dXBwb3J0c0FSSUFFeHBhbmRlZApAQCAtMjk0MSwxMyArMjk0MSwxMyBAQCBzdGF0aWMgdm9pZCBB
WEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0
dHJTdHJpbmcsCiAgICAgCiAgICAgLy8gU2luY2UgZGV0YWlscyBlbGVtZW50IGlzIGlnbm9yZWQg
b24gaU9TLCB3ZSBzaG91bGQgZXhwb3NlIHRoZSBleHBhbmRlZCBzdGF0dXMgb24gaXRzCiAgICAg
Ly8gc3VtbWFyeSdzIGFjY2Vzc2libGUgY2hpbGRyZW4uCi0gICAgaWYgKEFYQ29yZU9iamVjdCog
ZGV0YWlsUGFyZW50ID0gW3NlbGYgZGV0YWlsUGFyZW50Rm9yU3VtbWFyeU9iamVjdDptX29iamVj
dF0pCisgICAgaWYgKEFYQ29yZU9iamVjdCogZGV0YWlsUGFyZW50ID0gW3NlbGYgZGV0YWlsUGFy
ZW50Rm9yU3VtbWFyeU9iamVjdDpzZWxmLmF4QmFja2luZ09iamVjdF0pCiAgICAgICAgIHJldHVy
biBkZXRhaWxQYXJlbnQtPnN1cHBvcnRzRXhwYW5kZWQoKTsKICAgICAKLSAgICBpZiAoQVhDb3Jl
T2JqZWN0KiB0cmVlSXRlbVBhcmVudCA9IFtzZWxmIHRyZWVJdGVtUGFyZW50Rm9yT2JqZWN0Om1f
b2JqZWN0XSkKKyAgICBpZiAoQVhDb3JlT2JqZWN0KiB0cmVlSXRlbVBhcmVudCA9IFtzZWxmIHRy
ZWVJdGVtUGFyZW50Rm9yT2JqZWN0OnNlbGYuYXhCYWNraW5nT2JqZWN0XSkKICAgICAgICAgcmV0
dXJuIHRyZWVJdGVtUGFyZW50LT5zdXBwb3J0c0V4cGFuZGVkKCk7CiAgICAgCi0gICAgcmV0dXJu
IG1fb2JqZWN0LT5zdXBwb3J0c0V4cGFuZGVkKCk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5zdXBwb3J0c0V4cGFuZGVkKCk7CiB9CiAKIC0gKEJPT0wpYWNjZXNzaWJpbGl0eUlz
RXhwYW5kZWQKQEAgLTI5NTcsMTMgKzI5NTcsMTMgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVk
U3RyaW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAog
CiAgICAgLy8gU2luY2UgZGV0YWlscyBlbGVtZW50IGlzIGlnbm9yZWQgb24gaU9TLCB3ZSBzaG91
bGQgZXhwb3NlIHRoZSBleHBhbmRlZCBzdGF0dXMgb24gaXRzCiAgICAgLy8gc3VtbWFyeSdzIGFj
Y2Vzc2libGUgY2hpbGRyZW4uCi0gICAgaWYgKEFYQ29yZU9iamVjdCogZGV0YWlsUGFyZW50ID0g
W3NlbGYgZGV0YWlsUGFyZW50Rm9yU3VtbWFyeU9iamVjdDptX29iamVjdF0pCisgICAgaWYgKEFY
Q29yZU9iamVjdCogZGV0YWlsUGFyZW50ID0gW3NlbGYgZGV0YWlsUGFyZW50Rm9yU3VtbWFyeU9i
amVjdDpzZWxmLmF4QmFja2luZ09iamVjdF0pCiAgICAgICAgIHJldHVybiBkZXRhaWxQYXJlbnQt
PmlzRXhwYW5kZWQoKTsKICAgICAKLSAgICBpZiAoQVhDb3JlT2JqZWN0KiB0cmVlSXRlbVBhcmVu
dCA9IFtzZWxmIHRyZWVJdGVtUGFyZW50Rm9yT2JqZWN0Om1fb2JqZWN0XSkKKyAgICBpZiAoQVhD
b3JlT2JqZWN0KiB0cmVlSXRlbVBhcmVudCA9IFtzZWxmIHRyZWVJdGVtUGFyZW50Rm9yT2JqZWN0
OnNlbGYuYXhCYWNraW5nT2JqZWN0XSkKICAgICAgICAgcmV0dXJuIHRyZWVJdGVtUGFyZW50LT5p
c0V4cGFuZGVkKCk7CiAgICAgCi0gICAgcmV0dXJuIG1fb2JqZWN0LT5pc0V4cGFuZGVkKCk7Cisg
ICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0V4cGFuZGVkKCk7CiB9CiAKIC0gKEJP
T0wpYWNjZXNzaWJpbGl0eUlzU2hvd2luZ1ZhbGlkYXRpb25NZXNzYWdlCkBAIC0yOTcxLDcgKzI5
NzEsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJs
ZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFj
Y2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIE5POwogICAgIAotICAgIHJldHVybiBt
X29iamVjdC0+aXNTaG93aW5nVmFsaWRhdGlvbk1lc3NhZ2UoKTsKKyAgICByZXR1cm4gc2VsZi5h
eEJhY2tpbmdPYmplY3QtPmlzU2hvd2luZ1ZhbGlkYXRpb25NZXNzYWdlKCk7CiB9CiAKIC0gKE5T
U3RyaW5nICopYWNjZXNzaWJpbGl0eUludmFsaWRTdGF0dXMKQEAgLTI5NzksNyArMjk3OSw3IEBA
IHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmli
dXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJp
bGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIAotICAgIHJldHVybiBtX29iamVj
dC0+aW52YWxpZFN0YXR1cygpOworICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+aW52
YWxpZFN0YXR1cygpOwogfQogCiAtIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlBUklBQ3VycmVu
dFN0YXR1cwpAQCAtMjk4Nyw3ICsyOTg3LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3Ry
aW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAg
IGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBu
aWw7CiAgICAgCi0gICAgc3dpdGNoIChtX29iamVjdC0+Y3VycmVudFN0YXRlKCkpIHsKKyAgICBz
d2l0Y2ggKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5jdXJyZW50U3RhdGUoKSkgewogICAgIGNhc2Ug
QWNjZXNzaWJpbGl0eUN1cnJlbnRTdGF0ZTo6RmFsc2U6CiAgICAgICAgIHJldHVybiBAImZhbHNl
IjsKICAgICBjYXNlIEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGU6OlBhZ2U6CkBAIC0zMDEwLDcg
KzMwMTAsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0
YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFy
ZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBzd2l0
Y2ggKG1fb2JqZWN0LT5zb3J0RGlyZWN0aW9uKCkpIHsKKyAgICBzd2l0Y2ggKHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5zb3J0RGlyZWN0aW9uKCkpIHsKICAgICBjYXNlIEFjY2Vzc2liaWxpdHlTb3J0
RGlyZWN0aW9uOjpBc2NlbmRpbmc6CiAgICAgICAgIHJldHVybiBAImFzY2VuZGluZyI7CiAgICAg
Y2FzZSBBY2Nlc3NpYmlsaXR5U29ydERpcmVjdGlvbjo6RGVzY2VuZGluZzoKQEAgLTMwMjgsNyAr
MzAyOCw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRh
YmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJl
QWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgcmV0dXJuIG1f
b2JqZWN0LT5tYXRoUm9vdEluZGV4T2JqZWN0KCkgPyBtX29iamVjdC0+bWF0aFJvb3RJbmRleE9i
amVjdCgpLT53cmFwcGVyKCkgOiAwOworICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+
bWF0aFJvb3RJbmRleE9iamVjdCgpID8gc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhSb290SW5k
ZXhPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKIH0KIAogLSAoV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgKilhY2Nlc3NpYmlsaXR5TWF0aFJhZGljYW5kT2JqZWN0CkBAIC0zMDM2LDcgKzMw
MzYsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJs
ZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFj
Y2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIHJldHVybiBtX29i
amVjdC0+bWF0aFJhZGljYW5kT2JqZWN0KCkgPyBtX29iamVjdC0+bWF0aFJhZGljYW5kT2JqZWN0
KCktPndyYXBwZXIoKSA6IDA7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRo
UmFkaWNhbmRPYmplY3QoKSA/IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoUmFkaWNhbmRPYmpl
Y3QoKS0+d3JhcHBlcigpIDogMDsKIH0KIAogLSAoV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgKilhY2Nlc3NpYmlsaXR5TWF0aE51bWVyYXRvck9iamVjdApAQCAtMzA0NCw3ICszMDQ0LDcg
QEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRy
aWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3Np
YmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICByZXR1cm4gbV9vYmplY3Qt
Pm1hdGhOdW1lcmF0b3JPYmplY3QoKSA/IG1fb2JqZWN0LT5tYXRoTnVtZXJhdG9yT2JqZWN0KCkt
PndyYXBwZXIoKSA6IDA7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoTnVt
ZXJhdG9yT2JqZWN0KCkgPyBzZWxmLmF4QmFja2luZ09iamVjdC0+bWF0aE51bWVyYXRvck9iamVj
dCgpLT53cmFwcGVyKCkgOiAwOwogfQogCiAtIChXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciAqKWFjY2Vzc2liaWxpdHlNYXRoRGVub21pbmF0b3JPYmplY3QKQEAgLTMwNTIsNyArMzA1Miw3
IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0
cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNz
aWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgcmV0dXJuIG1fb2JqZWN0
LT5tYXRoRGVub21pbmF0b3JPYmplY3QoKSA/IG1fb2JqZWN0LT5tYXRoRGVub21pbmF0b3JPYmpl
Y3QoKS0+d3JhcHBlcigpIDogMDsKKyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPm1h
dGhEZW5vbWluYXRvck9iamVjdCgpID8gc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhEZW5vbWlu
YXRvck9iamVjdCgpLT53cmFwcGVyKCkgOiAwOwogfQogCiAtIChXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciAqKWFjY2Vzc2liaWxpdHlNYXRoQmFzZU9iamVjdApAQCAtMzA2MCw3ICszMDYw
LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFibGVB
dHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nl
c3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICByZXR1cm4gbV9vYmpl
Y3QtPm1hdGhCYXNlT2JqZWN0KCkgPyBtX29iamVjdC0+bWF0aEJhc2VPYmplY3QoKS0+d3JhcHBl
cigpIDogMDsKKyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhCYXNlT2JqZWN0
KCkgPyBzZWxmLmF4QmFja2luZ09iamVjdC0+bWF0aEJhc2VPYmplY3QoKS0+d3JhcHBlcigpIDog
MDsKIH0KIAogLSAoV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgKilhY2Nlc3NpYmlsaXR5
TWF0aFN1YnNjcmlwdE9iamVjdApAQCAtMzA2OCw3ICszMDY4LDcgQEAgc3RhdGljIHZvaWQgQVhB
dHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRy
U3RyaW5nLAogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAg
ICAgIHJldHVybiBuaWw7CiAKLSAgICByZXR1cm4gbV9vYmplY3QtPm1hdGhTdWJzY3JpcHRPYmpl
Y3QoKSA/IG1fb2JqZWN0LT5tYXRoU3Vic2NyaXB0T2JqZWN0KCktPndyYXBwZXIoKSA6IDA7Cisg
ICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoU3Vic2NyaXB0T2JqZWN0KCkgPyBz
ZWxmLmF4QmFja2luZ09iamVjdC0+bWF0aFN1YnNjcmlwdE9iamVjdCgpLT53cmFwcGVyKCkgOiAw
OwogfQogCiAtIChXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciAqKWFjY2Vzc2liaWxpdHlN
YXRoU3VwZXJzY3JpcHRPYmplY3QKQEAgLTMwNzYsNyArMzA3Niw3IEBAIHN0YXRpYyB2b2lkIEFY
QXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0
clN0cmluZywKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAg
ICAgICByZXR1cm4gbmlsOwogCi0gICAgcmV0dXJuIG1fb2JqZWN0LT5tYXRoU3VwZXJzY3JpcHRP
YmplY3QoKSA/IG1fb2JqZWN0LT5tYXRoU3VwZXJzY3JpcHRPYmplY3QoKS0+d3JhcHBlcigpIDog
MDsKKyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhTdXBlcnNjcmlwdE9iamVj
dCgpID8gc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhTdXBlcnNjcmlwdE9iamVjdCgpLT53cmFw
cGVyKCkgOiAwOwogfQogCiAtIChXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciAqKWFjY2Vz
c2liaWxpdHlNYXRoVW5kZXJPYmplY3QKQEAgLTMwODQsNyArMzA4NCw3IEBAIHN0YXRpYyB2b2lk
IEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyog
YXR0clN0cmluZywKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQog
ICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgcmV0dXJuIG1fb2JqZWN0LT5tYXRoVW5kZXJPYmpl
Y3QoKSA/IG1fb2JqZWN0LT5tYXRoVW5kZXJPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKKyAgICBy
ZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhVbmRlck9iamVjdCgpID8gc2VsZi5heEJh
Y2tpbmdPYmplY3QtPm1hdGhVbmRlck9iamVjdCgpLT53cmFwcGVyKCkgOiAwOwogfQogCiAtIChX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciAqKWFjY2Vzc2liaWxpdHlNYXRoT3Zlck9iamVj
dApAQCAtMzA5Miw3ICszMDkyLDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBw
ZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAgIGlmICgh
W3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAK
LSAgICByZXR1cm4gbV9vYmplY3QtPm1hdGhPdmVyT2JqZWN0KCkgPyBtX29iamVjdC0+bWF0aE92
ZXJPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKKyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPm1hdGhPdmVyT2JqZWN0KCkgPyBzZWxmLmF4QmFja2luZ09iamVjdC0+bWF0aE92ZXJPYmpl
Y3QoKS0+d3JhcHBlcigpIDogMDsKIH0KIAogLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5UGxh
dGZvcm1NYXRoU3Vic2NyaXB0S2V5CkBAIC0zMTI2LDcgKzMxMjYsNyBAQCBzdGF0aWMgdm9pZCBB
WEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0
dHJTdHJpbmcsCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAg
ICAgICAgcmV0dXJuIG5pbDsKIAotICAgIHJldHVybiBtX29iamVjdC0+bWF0aEZlbmNlZE9wZW5T
dHJpbmcoKTsKKyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhGZW5jZWRPcGVu
U3RyaW5nKCk7CiB9CiAKIC0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eU1hdGhGZW5jZWRDbG9z
ZVN0cmluZwpAQCAtMzEzNCw3ICszMTM0LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3Ry
aW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAg
IGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBu
aWw7CiAKLSAgICByZXR1cm4gbV9vYmplY3QtPm1hdGhGZW5jZWRDbG9zZVN0cmluZygpOworICAg
IHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+bWF0aEZlbmNlZENsb3NlU3RyaW5nKCk7CiB9
CiAKIC0gKEJPT0wpYWNjZXNzaWJpbGl0eUlzTWF0aFRvcE9iamVjdApAQCAtMzE0Miw3ICszMTQy
LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFibGVB
dHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nl
c3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBOTzsKIAotICAgIHJldHVybiBtX29iamVj
dC0+cm9sZVZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OkRvY3VtZW50TWF0aDsKKyAgICBy
ZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlS
b2xlOjpEb2N1bWVudE1hdGg7CiB9CiAKIC0gKE5TSW50ZWdlcilhY2Nlc3NpYmlsaXR5TWF0aExp
bmVUaGlja25lc3MKQEAgLTMxNTAsNyArMzE1MCw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRl
ZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywK
ICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIHJldHVybiBtX29iamVjdC0+bWF0aExpbmVUaGlja25lc3MoKTsKKyAgICBy
ZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhMaW5lVGhpY2tuZXNzKCk7CiB9CiAKIC0g
KE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eU1hdGhUeXBlCkBAIC0zMTU4LDQwICszMTU4LDQwIEBA
IHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmli
dXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJp
bGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgaWYgKG1fb2JqZWN0LT5yb2xl
VmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6TWF0aEVsZW1lbnQpIHsKLSAgICAgICAgaWYg
KG1fb2JqZWN0LT5pc01hdGhGcmFjdGlvbigpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVj
dC0+cm9sZVZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6Ok1hdGhFbGVtZW50KSB7CisgICAg
ICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRoRnJhY3Rpb24oKSkKICAgICAgICAg
ICAgIHJldHVybiBAIkFYTWF0aEZyYWN0aW9uIjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01h
dGhGZW5jZWQoKSkKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01hdGhGZW5j
ZWQoKSkKICAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aEZlbmNlZCI7Ci0gICAgICAgIGlmICht
X29iamVjdC0+aXNNYXRoU3Vic2NyaXB0U3VwZXJzY3JpcHQoKSkKKyAgICAgICAgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc01hdGhTdWJzY3JpcHRTdXBlcnNjcmlwdCgpKQogICAgICAgICAg
ICAgcmV0dXJuIEAiQVhNYXRoU3Vic2NyaXB0U3VwZXJzY3JpcHQiOwotICAgICAgICBpZiAobV9v
YmplY3QtPmlzTWF0aFJvdygpKQorICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlz
TWF0aFJvdygpKQogICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoUm93IjsKLSAgICAgICAgaWYg
KG1fb2JqZWN0LT5pc01hdGhVbmRlck92ZXIoKSkKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5pc01hdGhVbmRlck92ZXIoKSkKICAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aFVu
ZGVyT3ZlciI7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoU3F1YXJlUm9vdCgpKQorICAg
ICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWF0aFNxdWFyZVJvb3QoKSkKICAgICAg
ICAgICAgIHJldHVybiBAIkFYTWF0aFNxdWFyZVJvb3QiOwotICAgICAgICBpZiAobV9vYmplY3Qt
PmlzTWF0aFJvb3QoKSkKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01hdGhS
b290KCkpCiAgICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhSb290IjsKLSAgICAgICAgaWYgKG1f
b2JqZWN0LT5pc01hdGhUZXh0KCkpCisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+
aXNNYXRoVGV4dCgpKQogICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoVGV4dCI7Ci0gICAgICAg
IGlmIChtX29iamVjdC0+aXNNYXRoTnVtYmVyKCkpCisgICAgICAgIGlmIChzZWxmLmF4QmFja2lu
Z09iamVjdC0+aXNNYXRoTnVtYmVyKCkpCiAgICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhOdW1i
ZXIiOwotICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aElkZW50aWZpZXIoKSkKKyAgICAgICAg
aWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01hdGhJZGVudGlmaWVyKCkpCiAgICAgICAgICAg
ICByZXR1cm4gQCJBWE1hdGhJZGVudGlmaWVyIjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01h
dGhUYWJsZSgpKQorICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWF0aFRhYmxl
KCkpCiAgICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhUYWJsZSI7Ci0gICAgICAgIGlmIChtX29i
amVjdC0+aXNNYXRoVGFibGVSb3coKSkKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5pc01hdGhUYWJsZVJvdygpKQogICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoVGFibGVSb3ci
OwotICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFRhYmxlQ2VsbCgpKQorICAgICAgICBpZiAo
c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWF0aFRhYmxlQ2VsbCgpKQogICAgICAgICAgICAgcmV0
dXJuIEAiQVhNYXRoVGFibGVDZWxsIjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhGZW5j
ZU9wZXJhdG9yKCkpCisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRoRmVu
Y2VPcGVyYXRvcigpKQogICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoRmVuY2VPcGVyYXRvciI7
Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoU2VwYXJhdG9yT3BlcmF0b3IoKSkKKyAgICAg
ICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01hdGhTZXBhcmF0b3JPcGVyYXRvcigpKQog
ICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoU2VwYXJhdG9yT3BlcmF0b3IiOwotICAgICAgICBp
ZiAobV9vYmplY3QtPmlzTWF0aE9wZXJhdG9yKCkpCisgICAgICAgIGlmIChzZWxmLmF4QmFja2lu
Z09iamVjdC0+aXNNYXRoT3BlcmF0b3IoKSkKICAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aE9w
ZXJhdG9yIjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhNdWx0aXNjcmlwdCgpKQorICAg
ICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWF0aE11bHRpc2NyaXB0KCkpCiAgICAg
ICAgICAgICByZXR1cm4gQCJBWE1hdGhNdWx0aXNjcmlwdCI7CiAgICAgfQogICAgIApAQCAtMzIw
MCw3ICszMjAwLDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChO
U011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLAogCiAtIChDR1BvaW50KWFjY2Vz
c2liaWxpdHlDbGlja1BvaW50CiB7Ci0gICAgcmV0dXJuIG1fb2JqZWN0LT5jbGlja1BvaW50KCk7
CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5jbGlja1BvaW50KCk7CiB9CiAKIC0g
KE5TU3RyaW5nICopZGVzY3JpcHRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tCmluZGV4IGY1ZGExNmEwZDZkNmYzODZmMTU4
M2M4ZDkzOTUyY2JmMDcxOGU2NjUuLjQyYzY0NzljZDYyOTVjZDk5Y2IxZjFlNDYxODMyM2I0YzA2
NGE3OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FYT2Jq
ZWN0Q2FjaGVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQVhP
YmplY3RDYWNoZU1hYy5tbQpAQCAtMjQ0LDYgKzI0NCwxNCBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6
OmF0dGFjaFdyYXBwZXIoQVhDb3JlT2JqZWN0KiBvYmopCiAgICAgb2JqLT5zZXRXcmFwcGVyKHdy
YXBwZXIuZ2V0KCkpOwogfQogCisjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJF
RSkKK3ZvaWQgQVhPYmplY3RDYWNoZTo6YXR0YWNoV3JhcHBlcihBWElzb2xhdGVkT2JqZWN0KiBp
c29sYXRlZE9iamVjdCwgV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIHdyYXBwZXIpCit7
CisgICAgW3dyYXBwZXIgYXR0YWNoSXNvbGF0ZWRPYmplY3Q6KEFYQ29yZU9iamVjdCopaXNvbGF0
ZWRPYmplY3RdOworICAgIGlzb2xhdGVkT2JqZWN0LT5zZXRXcmFwcGVyKHdyYXBwZXIpOworfQor
I2VuZGlmCisKIHN0YXRpYyBCT09MIGF4U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9uc0ZvclRlc3Rz
ID0gZmFsc2U7CiAKIHZvaWQgQVhPYmplY3RDYWNoZTo6c2V0U2hvdWxkUmVwb3N0Tm90aWZpY2F0
aW9uc0ZvclRlc3RzKGJvb2wgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
QmFzZS5oCmluZGV4IGI2NGQwZTc2YzRkMzk2ZGVjMThmYjY4ZjYwYzk1ODExMDg1YmZmNWQuLjRh
NGUzZGIwZDNlYzc0Y2VmN2ZkODI3MGNjNTFiMmFmYTRlOGMwN2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
QmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyQmFzZS5oCkBAIC00NSwxNyArNDUsMjIgQEAgY2xhc3MgVmlzaWJs
ZVBvc2l0aW9uOwogfQogCiBAaW50ZXJmYWNlIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
QmFzZSA6IE5TT2JqZWN0IHsKLSAgICBXZWJDb3JlOjpBWENvcmVPYmplY3QqIG1fb2JqZWN0Owor
ICAgIFdlYkNvcmU6OkFYQ29yZU9iamVjdCogbV9heE9iamVjdDsKKyNpZiBFTkFCTEUoQUNDRVNT
SUJJTElUWV9JU09MQVRFRF9UUkVFKQorICAgIFdlYkNvcmU6OkFYQ29yZU9iamVjdCogbV9pc29s
YXRlZE9iamVjdDsKKyNlbmRpZgogICAgIFdlYkNvcmU6OkFYSUQgX2lkZW50aWZpZXI7CiB9CiAK
IC0gKGlkKWluaXRXaXRoQWNjZXNzaWJpbGl0eU9iamVjdDooV2ViQ29yZTo6QVhDb3JlT2JqZWN0
KilheE9iamVjdDsKKyNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQorLSAo
dm9pZClhdHRhY2hJc29sYXRlZE9iamVjdDooV2ViQ29yZTo6QVhDb3JlT2JqZWN0Kilpc29sYXRl
ZE9iamVjdDsKKyNlbmRpZgogCiAtICh2b2lkKWRldGFjaDsKIAogQHByb3BlcnR5IChub25hdG9t
aWMsIGFzc2lnbikgV2ViQ29yZTo6QVhJRCBpZGVudGlmaWVyOwogCi0tIChXZWJDb3JlOjpBWENv
cmVPYmplY3QqKWFjY2Vzc2liaWxpdHlPYmplY3Q7CiAtIChCT09MKXVwZGF0ZU9iamVjdEJhY2tp
bmdTdG9yZTsKIAogLy8gVGhpcyBjYW4gYmUgZWl0aGVyIGFuIEFjY2Vzc2liaWxpdHlPYmplY3Qg
b3IgYW4gQVhJc29sYXRlZE9iamVjdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJC
YXNlLm1tCmluZGV4IDcyNDY5MDZhODdiMDgyMDk2ODNhMTU3M2Y3YmJjMDMwZmU4OWVlMDguLmI0
MjM3MzY4MDRkYWZiZjA1NmY4MDg0OTQxYjY4N2I2ZDMzNzE0ODAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
QmFzZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW0KQEAgLTI0Niw4ICsyNDYsNiBAQCB1c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOwogI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlJbW1lZGlhdGVEZXNjZW5k
YW50c09ubHkgQCJBWEltbWVkaWF0ZURlc2NlbmRhbnRzT25seSIKICNlbmRpZgogCi0jZGVmaW5l
IF9heEJhY2tpbmdPYmplY3Qgc2VsZi5heEJhY2tpbmdPYmplY3QKLQogc3RhdGljIE5TQXJyYXkg
KmNvbnZlcnRNYXRoUGFpcnNUb05TQXJyYXkoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNj
ZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlwdFBhaXJzJiBwYWlycywgTlNTdHJpbmcgKnN1YnNjcmlw
dEtleSwgTlNTdHJpbmcgKnN1cGVyc2NyaXB0S2V5KQogewogICAgIE5TTXV0YWJsZUFycmF5ICph
cnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpwYWlycy5zaXplKCldOwpA
QCAtMjkwLDMwICsyODgsNDkgQEAgTlNBcnJheSAqY29udmVydFRvTlNBcnJheShjb25zdCBXZWJD
b3JlOjpBWENvcmVPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3QKICAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRdKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIG1fb2JqZWN0
ID0gYXhPYmplY3Q7Ci0gICAgX2lkZW50aWZpZXIgPSBtX29iamVjdC0+b2JqZWN0SUQoKTsKLQor
ICAgIFtzZWxmIGF0dGFjaEFYT2JqZWN0OmF4T2JqZWN0XTsKICAgICByZXR1cm4gc2VsZjsKIH0K
IAorLSAodm9pZClhdHRhY2hBWE9iamVjdDooQVhDb3JlT2JqZWN0KilheE9iamVjdAoreworICAg
IEFTU0VSVChheE9iamVjdCAmJiAoX2lkZW50aWZpZXIgPT0gSW52YWxpZEFYSUQgfHwgX2lkZW50
aWZpZXIgPT0gYXhPYmplY3QtPm9iamVjdElEKCkpKTsKKyAgICBtX2F4T2JqZWN0ID0gYXhPYmpl
Y3Q7CisgICAgaWYgKF9pZGVudGlmaWVyID09IEludmFsaWRBWElEKQorICAgICAgICBfaWRlbnRp
ZmllciA9IG1fYXhPYmplY3QtPm9iamVjdElEKCk7Cit9CisKKyNpZiBFTkFCTEUoQUNDRVNTSUJJ
TElUWV9JU09MQVRFRF9UUkVFKQorLSAodm9pZClhdHRhY2hJc29sYXRlZE9iamVjdDooQVhDb3Jl
T2JqZWN0Kilpc29sYXRlZE9iamVjdAoreworICAgIEFTU0VSVChpc29sYXRlZE9iamVjdCAmJiAo
X2lkZW50aWZpZXIgPT0gSW52YWxpZEFYSUQgfHwgX2lkZW50aWZpZXIgPT0gaXNvbGF0ZWRPYmpl
Y3QtPm9iamVjdElEKCkpKTsKKyAgICBtX2lzb2xhdGVkT2JqZWN0ID0gaXNvbGF0ZWRPYmplY3Q7
CisgICAgaWYgKF9pZGVudGlmaWVyID09IEludmFsaWRBWElEKQorICAgICAgICBfaWRlbnRpZmll
ciA9IG1faXNvbGF0ZWRPYmplY3QtPm9iamVjdElEKCk7Cit9CisjZW5kaWYKKwogLSAodm9pZClk
ZXRhY2gKIHsKLSAgICBtX29iamVjdCA9IG51bGxwdHI7Ci0gICAgX2lkZW50aWZpZXIgPSAwOwor
ICAgIG1fYXhPYmplY3QgPSBudWxscHRyOworI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xB
VEVEX1RSRUUpCisgICAgbV9pc29sYXRlZE9iamVjdCA9IG51bGxwdHI7CisjZW5kaWYKKyAgICBf
aWRlbnRpZmllciA9IEludmFsaWRBWElEOwogfQogCiAtIChCT09MKXVwZGF0ZU9iamVjdEJhY2tp
bmdTdG9yZQogewogICAgIC8vIENhbGxpbmcgdXBkYXRlQmFja2luZ1N0b3JlKCkgY2FuIGludmFs
aWRhdGUgdGhpcyBlbGVtZW50IHNvIHNlbGYgbXVzdCBiZSByZXRhaW5lZC4KLSAgICAvLyBJZiBp
dCBkb2VzIGJlY29tZSBpbnZhbGlkYXRlZCwgbV9vYmplY3Qgd2lsbCBiZSBuaWwuCisgICAgLy8g
SWYgaXQgZG9lcyBiZWNvbWUgaW52YWxpZGF0ZWQsIHNlbGYuYXhCYWNraW5nT2JqZWN0IHdpbGwg
YmUgbmlsLgogICAgIENGUmV0YWluKChfX2JyaWRnZSBDRlR5cGVSZWYpc2VsZik7CiAgICAgQ0ZB
dXRvcmVsZWFzZSgoX19icmlkZ2UgQ0ZUeXBlUmVmKXNlbGYpOwogCi0gICAgaWYgKCFtX29iamVj
dCkKKyAgICBpZiAoIXNlbGYuYXhCYWNraW5nT2JqZWN0KQogICAgICAgICByZXR1cm4gTk87CiAg
ICAgCi0gICAgbV9vYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwotICAgIGlmICghbV9vYmpl
Y3QpCisgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworICAg
IGlmICghc2VsZi5heEJhY2tpbmdPYmplY3QpCiAgICAgICAgIHJldHVybiBOTzsKICAgICAKICAg
ICByZXR1cm4gWUVTOwpAQCAtMzI0LDM2ICszNDEsMzcgQEAgTlNBcnJheSAqY29udmVydFRvTlNB
cnJheShjb25zdCBXZWJDb3JlOjpBWENvcmVPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3QKICAgICByZXR1cm4gbmlsOwogfQogCi0tIChBWENvcmVPYmplY3QqKWFjY2Vzc2liaWxpdHlP
YmplY3QKLXsKLSAgICByZXR1cm4gbV9vYmplY3Q7Ci19Ci0KIC8vIFRoaXMgc2hvdWxkIGJlIHRo
ZSAidmlzaWJsZSIgdGV4dCB0aGF0J3MgYWN0dWFsbHkgb24gdGhlIHNjcmVlbiBpZiBwb3NzaWJs
ZS4KIC8vIElmIHRoZXJlJ3MgYWx0ZXJuYXRpdmUgdGV4dCwgdGhhdCBjYW4gb3ZlcnJpZGUgdGhl
IHRpdGxlLgogLSAoTlNTdHJpbmcgKiliYXNlQWNjZXNzaWJpbGl0eVRpdGxlCiB7Ci0gICAgcmV0
dXJuIF9heEJhY2tpbmdPYmplY3QtPnRpdGxlQXR0cmlidXRlVmFsdWUoKTsKKyAgICByZXR1cm4g
c2VsZi5heEJhY2tpbmdPYmplY3QtPnRpdGxlQXR0cmlidXRlVmFsdWUoKTsKIH0KIAogLSAoV2Vi
Q29yZTo6QVhDb3JlT2JqZWN0KilheEJhY2tpbmdPYmplY3QKIHsKLSAgICByZXR1cm4gbV9vYmpl
Y3Q7CisjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKKyAgICBpZiAoIWlz
TWFpblRocmVhZCgpKSB7CisgICAgICAgIEFTU0VSVChBWE9iamVjdENhY2hlOjpjbGllbnRTdXBw
b3J0c0lzb2xhdGVkVHJlZSgpKTsKKyAgICAgICAgcmV0dXJuIG1faXNvbGF0ZWRPYmplY3Q7Cisg
ICAgfQorI2VuZGlmCisgICAgcmV0dXJuIG1fYXhPYmplY3Q7CiB9CiAKIC0gKE5TU3RyaW5nICop
YmFzZUFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbgogewotICAgIHJldHVybiBfYXhCYWNraW5nT2Jq
ZWN0LT5kZXNjcmlwdGlvbkF0dHJpYnV0ZVZhbHVlKCk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5kZXNjcmlwdGlvbkF0dHJpYnV0ZVZhbHVlKCk7CiB9CiAKIC0gKE5TQXJyYXk8
TlNTdHJpbmcgKj4gKiliYXNlQWNjZXNzaWJpbGl0eVNwZWVjaEhpbnQKIHsKLSAgICByZXR1cm4g
WyhOU1N0cmluZyAqKV9heEJhY2tpbmdPYmplY3QtPnNwZWVjaEhpbnRBdHRyaWJ1dGVWYWx1ZSgp
IGNvbXBvbmVudHNTZXBhcmF0ZWRCeVN0cmluZzpAIiAiXTsKKyAgICByZXR1cm4gWyhOU1N0cmlu
ZyAqKXNlbGYuYXhCYWNraW5nT2JqZWN0LT5zcGVlY2hIaW50QXR0cmlidXRlVmFsdWUoKSBjb21w
b25lbnRzU2VwYXJhdGVkQnlTdHJpbmc6QCIgIl07CiB9CiAKIC0gKE5TU3RyaW5nICopYmFzZUFj
Y2Vzc2liaWxpdHlIZWxwVGV4dAogewotICAgIHJldHVybiBfYXhCYWNraW5nT2JqZWN0LT5oZWxw
VGV4dEF0dHJpYnV0ZVZhbHVlKCk7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5o
ZWxwVGV4dEF0dHJpYnV0ZVZhbHVlKCk7CiB9CiAKIHN0cnVjdCBQYXRoQ29udmVyc2lvbkluZm8g
ewpAQCAtNDMxLDcgKzQ0OSw3IEBAIHN0YXRpYyB2b2lkIGNvbnZlcnRQYXRoVG9TY3JlZW5TcGFj
ZUZ1bmN0aW9uKFBhdGhDb252ZXJzaW9uSW5mbyYgY29udmVyc2lvbiwgY29uCiAKIC0gKENHUmVj
dCljb252ZXJ0UmVjdFRvU3BhY2U6KFdlYkNvcmU6OkZsb2F0UmVjdCAmKXJlY3Qgc3BhY2U6KEFj
Y2Vzc2liaWxpdHlDb252ZXJzaW9uU3BhY2Upc3BhY2UKIHsKLSAgICBpZiAoIW1fb2JqZWN0KQor
ICAgIGlmICghc2VsZi5heEJhY2tpbmdPYmplY3QpCiAgICAgICAgIHJldHVybiBDR1JlY3RaZXJv
OwogICAgIAogICAgIENHU2l6ZSBzaXplID0gQ0dTaXplTWFrZShyZWN0LnNpemUoKS53aWR0aCgp
LCByZWN0LnNpemUoKS5oZWlnaHQoKSk7CkBAIC00NDAsNyArNDU4LDcgQEAgc3RhdGljIHZvaWQg
Y29udmVydFBhdGhUb1NjcmVlblNwYWNlRnVuY3Rpb24oUGF0aENvbnZlcnNpb25JbmZvJiBjb252
ZXJzaW9uLCBjb24KICAgICBDR1JlY3QgY2dSZWN0ID0gQ0dSZWN0TWFrZShwb2ludC54LCBwb2lu
dC55LCBzaXplLndpZHRoLCBzaXplLmhlaWdodCk7CiAKICAgICAvLyBXZWJLaXQxIGNvZGUgcGF0
aC4uLiBwbGF0Zm9ybVdpZGdldCgpIGV4aXN0cy4KLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9
IG1fb2JqZWN0LT5kb2N1bWVudEZyYW1lVmlldygpOworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3
ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCk7CiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKICAgICBXQUtWaWV3KiBkb2N1bWVudFZpZXcgPSBmcmFtZVZpZXcgPyBm
cmFtZVZpZXctPmRvY3VtZW50VmlldygpIDogbnVsbHB0cjsKICAgICBpZiAoZG9jdW1lbnRWaWV3
KSB7CkBAIC00NjQsMjAgKzQ4MiwyMCBAQCBzdGF0aWMgdm9pZCBjb252ZXJ0UGF0aFRvU2NyZWVu
U3BhY2VGdW5jdGlvbihQYXRoQ29udmVyc2lvbkluZm8mIGNvbnZlcnNpb24sIGNvbgogICAgIH0K
ICNlbmRpZgogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENHUmVjdD4obV9v
YmplY3QtPmNvbnZlcnRGcmFtZVRvU3BhY2UocmVjdCwgc3BhY2UpKTsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PENHUmVjdD4oc2VsZi5heEJhY2tpbmdPYmplY3QtPmNvbnZlcnRGcmFtZVRv
U3BhY2UocmVjdCwgc3BhY2UpKTsKIH0KIAogLSAoTlNTdHJpbmcgKilhcmlhTGFuZG1hcmtSb2xl
RGVzY3JpcHRpb24KIHsKLSAgICByZXR1cm4gbV9vYmplY3QtPmFyaWFMYW5kbWFya1JvbGVEZXNj
cmlwdGlvbigpOworICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+YXJpYUxhbmRtYXJr
Um9sZURlc2NyaXB0aW9uKCk7CiB9CiAKIC0gKHZvaWQpYmFzZUFjY2Vzc2liaWxpdHlTZXRGb2N1
czooQk9PTClmb2N1cwogewogICAgIC8vIElmIGZvY3VzIGlzIGp1c3Qgc2V0IHdpdGhvdXQgbWFr
aW5nIHRoZSB2aWV3IHRoZSBmaXJzdCByZXNwb25kZXIsIHRoZW4ga2V5Ym9hcmQgZm9jdXMgd29u
J3QgbW92ZSB0byB0aGUgcmlnaHQgcGxhY2UuCi0gICAgaWYgKGZvY3VzICYmICFtX29iamVjdC0+
ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCkuaXNGb2N1c2VkQW5kQWN0aXZlKCkpIHsK
LSAgICAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX29iamVjdC0+ZG9jdW1lbnRGcmFtZVZp
ZXcoKTsKLSAgICAgICAgUGFnZSogcGFnZSA9IG1fb2JqZWN0LT5wYWdlKCk7CisgICAgaWYgKGZv
Y3VzICYmICFzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0
aW9uKCkuaXNGb2N1c2VkQW5kQWN0aXZlKCkpIHsKKyAgICAgICAgRnJhbWVWaWV3KiBmcmFtZVZp
ZXcgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnRGcmFtZVZpZXcoKTsKKyAgICAgICAg
UGFnZSogcGFnZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5wYWdlKCk7CiAgICAgICAgIGlmIChw
YWdlICYmIGZyYW1lVmlldykgewogICAgICAgICAgICAgQ2hyb21lQ2xpZW50JiBjaHJvbWVDbGll
bnQgPSBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKTsKICAgICAgICAgICAgIGNocm9tZUNsaWVudC5m
b2N1cygpOwpAQCAtNDkwLDcgKzUwOCw3IEBAIHN0YXRpYyB2b2lkIGNvbnZlcnRQYXRoVG9TY3Jl
ZW5TcGFjZUZ1bmN0aW9uKFBhdGhDb252ZXJzaW9uSW5mbyYgY29udmVyc2lvbiwgY29uCiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBtX29iamVjdC0+c2V0Rm9jdXNlZChmb2N1cyk7CisgICAgc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPnNldEZvY3VzZWQoZm9jdXMpOwogfQogCiAtIChOU1N0cmluZyAq
KWFjY2Vzc2liaWxpdHlQbGF0Zm9ybU1hdGhTdWJzY3JpcHRLZXkKQEAgLTUwOCwxNCArNTI2LDE0
IEBAIHN0YXRpYyB2b2lkIGNvbnZlcnRQYXRoVG9TY3JlZW5TcGFjZUZ1bmN0aW9uKFBhdGhDb252
ZXJzaW9uSW5mbyYgY29udmVyc2lvbiwgY29uCiAtIChOU0FycmF5ICopYWNjZXNzaWJpbGl0eU1h
dGhQb3N0c2NyaXB0UGFpcnMKIHsKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmls
aXR5TWF0aE11bHRpc2NyaXB0UGFpcnMgcGFpcnM7Ci0gICAgbV9vYmplY3QtPm1hdGhQb3N0c2Ny
aXB0cyhwYWlycyk7CisgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhQb3N0c2NyaXB0cyhw
YWlycyk7CiAgICAgcmV0dXJuIGNvbnZlcnRNYXRoUGFpcnNUb05TQXJyYXkocGFpcnMsIFtzZWxm
IGFjY2Vzc2liaWxpdHlQbGF0Zm9ybU1hdGhTdWJzY3JpcHRLZXldLCBbc2VsZiBhY2Nlc3NpYmls
aXR5UGxhdGZvcm1NYXRoU3VwZXJzY3JpcHRLZXldKTsKIH0KIAogLSAoTlNBcnJheSAqKWFjY2Vz
c2liaWxpdHlNYXRoUHJlc2NyaXB0UGFpcnMKIHsKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpB
Y2Nlc3NpYmlsaXR5TWF0aE11bHRpc2NyaXB0UGFpcnMgcGFpcnM7Ci0gICAgbV9vYmplY3QtPm1h
dGhQcmVzY3JpcHRzKHBhaXJzKTsKKyAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+bWF0aFByZXNj
cmlwdHMocGFpcnMpOwogICAgIHJldHVybiBjb252ZXJ0TWF0aFBhaXJzVG9OU0FycmF5KHBhaXJz
LCBbc2VsZiBhY2Nlc3NpYmlsaXR5UGxhdGZvcm1NYXRoU3Vic2NyaXB0S2V5XSwgW3NlbGYgYWNj
ZXNzaWJpbGl0eVBsYXRmb3JtTWF0aFN1cGVyc2NyaXB0S2V5XSk7CiB9CiAKQEAgLTY4Nyw4ICs3
MDUsOCBAQCBBY2Nlc3NpYmlsaXR5U2VhcmNoQ3JpdGVyaWEgYWNjZXNzaWJpbGl0eVNlYXJjaENy
aXRlcmlhRm9yU2VhcmNoUHJlZGljYXRlUGFyYW1ldAogICAgIAogICAgIEFYQ29yZU9iamVjdCog
c3RhcnRFbGVtZW50ID0gbnVsbHB0cjsKICAgICBpZiAoW3N0YXJ0RWxlbWVudFBhcmFtZXRlciBp
c0tpbmRPZkNsYXNzOltXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UgY2xhc3NdXSkK
LSAgICAgICAgc3RhcnRFbGVtZW50ID0gW3N0YXJ0RWxlbWVudFBhcmFtZXRlciBhY2Nlc3NpYmls
aXR5T2JqZWN0XTsKLSAgICAKKyAgICAgICAgc3RhcnRFbGVtZW50ID0gW3N0YXJ0RWxlbWVudFBh
cmFtZXRlciBheEJhY2tpbmdPYmplY3RdOworCiAgICAgYm9vbCB2aXNpYmxlT25seSA9IGZhbHNl
OwogICAgIGlmIChbdmlzaWJsZU9ubHlQYXJhbWV0ZXIgaXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIg
Y2xhc3NdXSkKICAgICAgICAgdmlzaWJsZU9ubHkgPSBbdmlzaWJsZU9ubHlQYXJhbWV0ZXIgYm9v
bFZhbHVlXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KaW5kZXggOTIz
NDk0NmM5MzhmMTJlNTM1MzJjNjVkNDYxMWFkZDQyMTQ0YzBiOC4uYWY5ZmRiOTFlNzUxOTczNjVj
YmJhMjQ3OTk5MGY5NzA3OGY2MjJjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJNYWMubW0KQEAgLTUzNCw4ICs1MzQsNiBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwog
I2RlZmluZSBOU0FjY2Vzc2liaWxpdHlSZWxhdGl2ZUZyYW1lQXR0cmlidXRlIEAiQVhSZWxhdGl2
ZUZyYW1lIgogI2VuZGlmCiAKLSNkZWZpbmUgX2F4QmFja2luZ09iamVjdCBzZWxmLmF4QmFja2lu
Z09iamVjdAotCiBleHRlcm4gIkMiIEFYVUlFbGVtZW50UmVmIE5TQWNjZXNzaWJpbGl0eUNyZWF0
ZUFYVUlFbGVtZW50UmVmKGlkIGVsZW1lbnQpOwogCiBAaW1wbGVtZW50YXRpb24gV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIKQEAgLTU1NywxMCArNTU1LDEwIEBAIGV4dGVybiAiQyIgQVhV
SUVsZW1lbnRSZWYgTlNBY2Nlc3NpYmlsaXR5Q3JlYXRlQVhVSUVsZW1lbnRSZWYoaWQgZWxlbWVu
dCk7CiAKIC0gKGlkKWF0dGFjaG1lbnRWaWV3CiB7Ci0gICAgQVNTRVJUKG1fb2JqZWN0LT5pc0F0
dGFjaG1lbnQoKSk7CisgICAgQVNTRVJUKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0F0dGFjaG1l
bnQoKSk7CiAKICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWlu
VGhyZWFkPGlkPihbcHJvdGVjdGVkU2VsZiA9IFJldGFpblB0cjxXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlcj4oc2VsZildICgpIC0+IGlkIHsKLSAgICAgICAgYXV0byogd2lkZ2V0ID0gcHJv
dGVjdGVkU2VsZi0+bV9vYmplY3QtPndpZGdldEZvckF0dGFjaG1lbnRWaWV3KCk7CisgICAgICAg
IGF1dG8qIHdpZGdldCA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0LT53aWRn
ZXRGb3JBdHRhY2htZW50VmlldygpOwogICAgICAgICBpZiAoIXdpZGdldCkKICAgICAgICAgICAg
IHJldHVybiBuaWw7CiAgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlVbmlnbm9yZWREZXNj
ZW5kYW50KHdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSk7CkBAIC02MDgsNyArNjA2LDcgQEAgc3Rh
dGljIGlkIEFYVGV4dE1hcmtlclJhbmdlRW5kKGlkIHJhbmdlKQogewogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CiAKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBfYXhCYWNraW5nT2JqZWN0
LT5kb2N1bWVudCgpOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5kb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBJbnRS
ZWN0KCk7CiAgICAgCkBAIC03ODUsNyArNzgzLDcgQEAgc3RhdGljIGJvb2wgaXNUZXh0TWFya2Vy
SWdub3JlZChpZCB0ZXh0TWFya2VyKQogCiAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0KilhY2Nlc3Np
YmlsaXR5T2JqZWN0Rm9yVGV4dE1hcmtlcjooaWQpdGV4dE1hcmtlcgogewotICAgIHJldHVybiBh
Y2Nlc3NpYmlsaXR5T2JqZWN0Rm9yVGV4dE1hcmtlcihtX29iamVjdC0+YXhPYmplY3RDYWNoZSgp
LCB0ZXh0TWFya2VyKTsKKyAgICByZXR1cm4gYWNjZXNzaWJpbGl0eU9iamVjdEZvclRleHRNYXJr
ZXIoc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgdGV4dE1hcmtlcik7CiB9
CiAKIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yVGV4
dE1hcmtlcihBWE9iamVjdENhY2hlKiBjYWNoZSwgaWQgdGV4dE1hcmtlcikKQEAgLTgwMSw3ICs3
OTksNyBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjZXNzaWJpbGl0eU9iamVjdEZv
clRleHRNYXJrZXIoQVhPYmplY3RDYWNoZSogY2FjaAogCiAtIChpZCl0ZXh0TWFya2VyUmFuZ2VG
cm9tUmFuZ2U6KGNvbnN0IFJlZlB0cjxSYW5nZT4pcmFuZ2UKIHsKLSAgICByZXR1cm4gdGV4dE1h
cmtlclJhbmdlRnJvbVJhbmdlKG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCksIHJhbmdlKTsKKyAg
ICByZXR1cm4gdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5h
eE9iamVjdENhY2hlKCksIHJhbmdlKTsKIH0KIAogc3RhdGljIGlkIHRleHRNYXJrZXJSYW5nZUZy
b21SYW5nZShBWE9iamVjdENhY2hlKiBjYWNoZSwgY29uc3QgUmVmUHRyPFJhbmdlPiByYW5nZSkK
QEAgLTgxMyw3ICs4MTEsNyBAQCBzdGF0aWMgaWQgdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlKEFY
T2JqZWN0Q2FjaGUqIGNhY2hlLCBjb25zdCBSZWZQdHI8UmFuZ2U+IHJhbgogCiAtIChpZClzdGFy
dE9yRW5kVGV4dE1hcmtlckZvclJhbmdlOihjb25zdCBSZWZQdHI8UmFuZ2U+KXJhbmdlIGlzU3Rh
cnQ6KEJPT0wpaXNTdGFydAogewotICAgIHJldHVybiBzdGFydE9yRW5kVGV4dG1hcmtlckZvclJh
bmdlKG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCksIHJhbmdlLCBpc1N0YXJ0KTsKKyAgICByZXR1
cm4gc3RhcnRPckVuZFRleHRtYXJrZXJGb3JSYW5nZShzZWxmLmF4QmFja2luZ09iamVjdC0+YXhP
YmplY3RDYWNoZSgpLCByYW5nZSwgaXNTdGFydCk7CiB9CiAKIHN0YXRpYyBpZCBzdGFydE9yRW5k
VGV4dG1hcmtlckZvclJhbmdlKEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBSZWZQdHI8UmFuZ2U+IHJh
bmdlLCBib29sIGlzU3RhcnQpCkBAIC04NTUsMTcgKzg1MywxNyBAQCBzdGF0aWMgaWQgcHJldmlv
dXNUZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0KEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBDaGFy
YWN0ZXJPZgogCiAtIChpZCluZXh0VGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldDooQ2hhcmFj
dGVyT2Zmc2V0JiljaGFyYWN0ZXJPZmZzZXQKIHsKLSAgICByZXR1cm4gbmV4dFRleHRNYXJrZXJG
b3JDaGFyYWN0ZXJPZmZzZXQobV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgY2hhcmFjdGVyT2Zm
c2V0KTsKKyAgICByZXR1cm4gbmV4dFRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQoc2VsZi5h
eEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgY2hhcmFjdGVyT2Zmc2V0KTsKIH0KIAog
LSAoaWQpcHJldmlvdXNUZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0OihDaGFyYWN0ZXJPZmZz
ZXQmKWNoYXJhY3Rlck9mZnNldAogewotICAgIHJldHVybiBwcmV2aW91c1RleHRNYXJrZXJGb3JD
aGFyYWN0ZXJPZmZzZXQobV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgY2hhcmFjdGVyT2Zmc2V0
KTsKKyAgICByZXR1cm4gcHJldmlvdXNUZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0KHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCksIGNoYXJhY3Rlck9mZnNldCk7CiB9CiAK
IC0gKGlkKXRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6KENoYXJhY3Rlck9mZnNldCYpY2hh
cmFjdGVyT2Zmc2V0CiB7Ci0gICAgcmV0dXJuIHRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQo
bV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgY2hhcmFjdGVyT2Zmc2V0KTsKKyAgICByZXR1cm4g
dGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldChzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmpl
Y3RDYWNoZSgpLCBjaGFyYWN0ZXJPZmZzZXQpOwogfQogCiBzdGF0aWMgaWQgdGV4dE1hcmtlckZv
ckNoYXJhY3Rlck9mZnNldChBWE9iamVjdENhY2hlKiBjYWNoZSwgY29uc3QgQ2hhcmFjdGVyT2Zm
c2V0JiBjaGFyYWN0ZXJPZmZzZXQpCkBAIC04OTIsNyArODkwLDcgQEAgc3RhdGljIGlkIHRleHRN
YXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQoQVhPYmplY3RDYWNoZSogY2FjaGUsIGNvbnN0IENoYXJh
Y3Rlck9mZnMKICAgICBpZiAoIXN0YXJ0VGV4dE1hcmtlciB8fCAhZW5kVGV4dE1hcmtlcikKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCi0gICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBt
X29iamVjdC0+YXhPYmplY3RDYWNoZSgpOworICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKICAgICBpZiAoIWNhY2hlKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKQEAgLTkxNSw3ICs5MTMsNyBAQCBzdGF0aWMgQ2hh
cmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXIoQVhPYmplY3RDYWNoZSog
Y2FjaGUsIENGVHlwZQogCiAtIChDaGFyYWN0ZXJPZmZzZXQpY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4
dE1hcmtlcjooaWQpdGV4dE1hcmtlcgogewotICAgIHJldHVybiBjaGFyYWN0ZXJPZmZzZXRGb3JU
ZXh0TWFya2VyKG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCksIChfX2JyaWRnZSBDRlR5cGVSZWYp
dGV4dE1hcmtlcik7CisgICAgcmV0dXJuIGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXIoc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgKF9fYnJpZGdlIENGVHlwZVJlZil0
ZXh0TWFya2VyKTsKIH0KIAogc3RhdGljIGlkIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24o
QVhPYmplY3RDYWNoZSogY2FjaGUsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvcykK
QEAgLTkzMywxMiArOTMxLDEyIEBAIHN0YXRpYyBpZCB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0
aW9uKEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBjb25zdCBWaXNpYmxlUG9zaXRpCiAKIC0gKGlkKXRl
eHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmKXZpc2li
bGVQb3MKIHsKLSAgICByZXR1cm4gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihtX29iamVj
dC0+YXhPYmplY3RDYWNoZSgpLCB2aXNpYmxlUG9zKTsKKyAgICByZXR1cm4gdGV4dE1hcmtlckZv
clZpc2libGVQb3NpdGlvbihzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpLCB2
aXNpYmxlUG9zKTsKIH0KIAogLSAoaWQpdGV4dE1hcmtlckZvckZpcnN0UG9zaXRpb25JblRleHRD
b250cm9sOihIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCAmKXRleHRDb250cm9sCiB7Ci0gICAg
YXV0byAqY2FjaGUgPSBtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpOworICAgIGF1dG8gKmNhY2hl
ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKICAgICBpZiAoIWNhY2hl
KQogICAgICAgICByZXR1cm4gbmlsOwogCkBAIC05NjQsNyArOTYyLDcgQEAgc3RhdGljIFZpc2li
bGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKEFYT2JqZWN0Q2FjaGUqIGNh
Y2hlLCBDRlR5cGUKIAogLSAoVmlzaWJsZVBvc2l0aW9uKXZpc2libGVQb3NpdGlvbkZvclRleHRN
YXJrZXI6KGlkKXRleHRNYXJrZXIKIHsKLSAgICByZXR1cm4gdmlzaWJsZVBvc2l0aW9uRm9yVGV4
dE1hcmtlcihtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpLCAoX19icmlkZ2UgQ0ZUeXBlUmVmKXRl
eHRNYXJrZXIpOworICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCksIChfX2JyaWRnZSBDRlR5cGVSZWYpdGV4
dE1hcmtlcik7CiB9CiAKIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9y
U3RhcnRPZlRleHRNYXJrZXJSYW5nZShBWE9iamVjdENhY2hlKiBjYWNoZSwgaWQgdGV4dE1hcmtl
clJhbmdlKQpAQCAtMTI3Nyw3ICsxMjc1LDcgQEAgc3RhdGljIE5TU3RyaW5nKiBuc1N0cmluZ0Zv
clJlcGxhY2VkTm9kZShOb2RlKiByZXBsYWNlZE5vZGUpCiAKIC0gKE5TQXR0cmlidXRlZFN0cmlu
ZyopZG9BWEF0dHJpYnV0ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2U6KGlkKXRleHRNYXJrZXJS
YW5nZSBzcGVsbENoZWNrOihCT09MKXNwZWxsQ2hlY2sKIHsKLSAgICBpZiAoIW1fb2JqZWN0KQor
ICAgIGlmICghc2VsZi5heEJhY2tpbmdPYmplY3QpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAg
CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFtzZWxmIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdl
OnRleHRNYXJrZXJSYW5nZV07CkBAIC0xMzMxLDcgKzEzMjksNyBAQCBzdGF0aWMgaWQgdGV4dE1h
cmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnMoQVhPYmplY3RDYWNoZSogY2FjaGUsIGNvbnN0
IFZpc2libAogCiAtIChpZCl0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczooY29u
c3QgVmlzaWJsZVBvc2l0aW9uJilzdGFydFBvc2l0aW9uIGVuZFBvc2l0aW9uOihjb25zdCBWaXNp
YmxlUG9zaXRpb24mKWVuZFBvc2l0aW9uCiB7Ci0gICAgcmV0dXJuIHRleHRNYXJrZXJSYW5nZUZy
b21WaXNpYmxlUG9zaXRpb25zKG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCksIHN0YXJ0UG9zaXRp
b24sIGVuZFBvc2l0aW9uKTsKKyAgICByZXR1cm4gdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQ
b3NpdGlvbnMoc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgc3RhcnRQb3Np
dGlvbiwgZW5kUG9zaXRpb24pOwogfQogCiBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9O
U19CRUdJTgpAQCAtMTM1NiwxMyArMTM1NCwxMyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVO
VEFUSU9OU19FTkQKICAgICBzdGF0aWMgTlNBcnJheSAqc2xpZGVyQWN0aW9ucyA9IFtbZGVmYXVs
dEVsZW1lbnRBY3Rpb25zIGFycmF5QnlBZGRpbmdPYmplY3RzRnJvbUFycmF5OltOU0FycmF5IGFy
cmF5V2l0aE9iamVjdHM6TlNBY2Nlc3NpYmlsaXR5SW5jcmVtZW50QWN0aW9uLCBOU0FjY2Vzc2li
aWxpdHlEZWNyZW1lbnRBY3Rpb24sIG5pbF1dIHJldGFpbl07CiAgICAgCiAgICAgTlNBcnJheSAq
YWN0aW9uczsKLSAgICBpZiAobV9vYmplY3QtPnN1cHBvcnRzUHJlc3NBY3Rpb24oKSkKKyAgICBp
ZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnN1cHBvcnRzUHJlc3NBY3Rpb24oKSkKICAgICAgICAg
YWN0aW9ucyA9IGFjdGlvbkVsZW1lbnRBY3Rpb25zOwotICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5p
c01lbnVSZWxhdGVkKCkpCisgICAgZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWVu
dVJlbGF0ZWQoKSkKICAgICAgICAgYWN0aW9ucyA9IG1lbnVFbGVtZW50QWN0aW9uczsKLSAgICBl
bHNlIGlmIChtX29iamVjdC0+aXNTbGlkZXIoKSkKKyAgICBlbHNlIGlmIChzZWxmLmF4QmFja2lu
Z09iamVjdC0+aXNTbGlkZXIoKSkKICAgICAgICAgYWN0aW9ucyA9IHNsaWRlckFjdGlvbnM7Ci0g
ICAgZWxzZSBpZiAobV9vYmplY3QtPmlzQXR0YWNobWVudCgpKQorICAgIGVsc2UgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkKICAgICAgICAgYWN0aW9ucyA9IFtbc2Vs
ZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0eUFjdGlvbk5hbWVzXTsKICAgICBlbHNlCiAg
ICAgICAgIGFjdGlvbnMgPSBkZWZhdWx0RWxlbWVudEFjdGlvbnM7CkBAIC0xMzcyLDk5ICsxMzcw
LDk5IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogCiAtIChOU0FycmF5
KilhZGRpdGlvbmFsQWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzCiB7Ci0gICAgaWYgKCFtX29i
amVjdCkKKyAgICBpZiAoIXNlbGYuYXhCYWNraW5nT2JqZWN0KQogICAgICAgICByZXR1cm4gbmls
OwogICAgIAogICAgIE5TTXV0YWJsZUFycmF5ICphZGRpdGlvbmFsID0gW05TTXV0YWJsZUFycmF5
IGFycmF5XTsKLSAgICBpZiAobV9vYmplY3QtPnN1cHBvcnRzQVJJQU93bnMoKSkKKyAgICBpZiAo
c2VsZi5heEJhY2tpbmdPYmplY3QtPnN1cHBvcnRzQVJJQU93bnMoKSkKICAgICAgICAgW2FkZGl0
aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU93bnNBdHRyaWJ1dGVdOwogICAgIAotICAg
IGlmIChtX29iamVjdC0+aXNUb2dnbGVCdXR0b24oKSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdP
YmplY3QtPmlzVG9nZ2xlQnV0dG9uKCkpCiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpO
U0FjY2Vzc2liaWxpdHlWYWx1ZUF0dHJpYnV0ZV07CiAgICAgCi0gICAgaWYgKG1fb2JqZWN0LT5z
dXBwb3J0c0V4cGFuZGVkKCkgfHwgbV9vYmplY3QtPmlzU3VtbWFyeSgpKQorICAgIGlmIChzZWxm
LmF4QmFja2luZ09iamVjdC0+c3VwcG9ydHNFeHBhbmRlZCgpIHx8IHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5pc1N1bW1hcnkoKSkKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNz
aWJpbGl0eUV4cGFuZGVkQXR0cmlidXRlXTsKICAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzU2Ny
b2xsYmFyKCkKLSAgICAgICAgfHwgbV9vYmplY3QtPmlzUmFkaW9Hcm91cCgpCi0gICAgICAgIHx8
IG1fb2JqZWN0LT5pc1NwbGl0dGVyKCkKLSAgICAgICAgfHwgbV9vYmplY3QtPmlzVG9vbGJhcigp
KQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNTY3JvbGxiYXIoKQorICAgICAgICB8
fCBzZWxmLmF4QmFja2luZ09iamVjdC0+aXNSYWRpb0dyb3VwKCkKKyAgICAgICAgfHwgc2VsZi5h
eEJhY2tpbmdPYmplY3QtPmlzU3BsaXR0ZXIoKQorICAgICAgICB8fCBzZWxmLmF4QmFja2luZ09i
amVjdC0+aXNUb29sYmFyKCkpCiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vz
c2liaWxpdHlPcmllbnRhdGlvbkF0dHJpYnV0ZV07CiAgICAgCi0gICAgaWYgKG1fb2JqZWN0LT5z
dXBwb3J0c0FSSUFEcmFnZ2luZygpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+c3Vw
cG9ydHNBUklBRHJhZ2dpbmcoKSkKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNj
ZXNzaWJpbGl0eUdyYWJiZWRBdHRyaWJ1dGVdOwogICAgIAotICAgIGlmIChtX29iamVjdC0+c3Vw
cG9ydHNBUklBRHJvcHBpbmcoKSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnN1cHBv
cnRzQVJJQURyb3BwaW5nKCkpCiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vz
c2liaWxpdHlEcm9wRWZmZWN0c0F0dHJpYnV0ZV07CiAgICAgCi0gICAgaWYgKGlzPEFjY2Vzc2li
aWxpdHlUYWJsZT4oKm1fb2JqZWN0KSAmJiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpt
X29iamVjdCkuaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpICYmIGRvd25jYXN0PEFj
Y2Vzc2liaWxpdHlUYWJsZT4oKm1fb2JqZWN0KS5zdXBwb3J0c1NlbGVjdGVkUm93cygpKQorICAg
IGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCpzZWxmLmF4QmFja2luZ09iamVjdCkgJiYgZG93
bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqc2VsZi5heEJhY2tpbmdPYmplY3QpLmlzRXhwb3Nh
YmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSAmJiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+
KCpzZWxmLmF4QmFja2luZ09iamVjdCkuc3VwcG9ydHNTZWxlY3RlZFJvd3MoKSkKICAgICAgICAg
W2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkUm93c0F0dHJpYnV0
ZV07CiAgICAgCi0gICAgaWYgKG1fb2JqZWN0LT5zdXBwb3J0c0xpdmVSZWdpb24oKSkgeworICAg
IGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+c3VwcG9ydHNMaXZlUmVnaW9uKCkpIHsKICAgICAg
ICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUFSSUFMaXZlQXR0cmlidXRl
XTsKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUFSSUFSZWxl
dmFudEF0dHJpYnV0ZV07CiAgICAgfQogICAgIAotICAgIGlmIChtX29iamVjdC0+c3VwcG9ydHNT
ZXRTaXplKCkpCisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zdXBwb3J0c1NldFNpemUo
KSkKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUFSSUFTZXRT
aXplQXR0cmlidXRlXTsKLSAgICBpZiAobV9vYmplY3QtPnN1cHBvcnRzUG9zSW5TZXQoKSkKKyAg
ICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnN1cHBvcnRzUG9zSW5TZXQoKSkKICAgICAgICAg
W2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUFSSUFQb3NJblNldEF0dHJpYnV0
ZV07CiAgICAgCi0gICAgQWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb24gc29ydERpcmVjdGlvbiA9
IG1fb2JqZWN0LT5zb3J0RGlyZWN0aW9uKCk7CisgICAgQWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rp
b24gc29ydERpcmVjdGlvbiA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zb3J0RGlyZWN0aW9uKCk7
CiAgICAgaWYgKHNvcnREaXJlY3Rpb24gIT0gQWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb246Ok5v
bmUgJiYgc29ydERpcmVjdGlvbiAhPSBBY2Nlc3NpYmlsaXR5U29ydERpcmVjdGlvbjo6SW52YWxp
ZCkKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVNvcnREaXJl
Y3Rpb25BdHRyaWJ1dGVdOwogICAgIAogICAgIC8vIElmIGFuIG9iamVjdCBpcyBhIGNoaWxkIG9m
IGEgbGl2ZSByZWdpb24sIHRoZW4gYWRkIHRoZXNlCi0gICAgaWYgKG1fb2JqZWN0LT5pc0luc2lk
ZUxpdmVSZWdpb24oKSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzSW5zaWRlTGl2
ZVJlZ2lvbigpKQogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5
QVJJQUF0b21pY0F0dHJpYnV0ZV07CiAgICAgLy8gQWxsIG9iamVjdHMgc2hvdWxkIGV4cG9zZSB0
aGUgQVJJQSBidXN5IGF0dHJpYnV0ZSAoQVJJQSAxLjEgd2l0aCBJU1NVRS01MzgpLgogICAgIFth
ZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlFbGVtZW50QnVzeUF0dHJpYnV0ZV07
CiAgICAgCiAgICAgLy8gUG9wdXAgYnV0dG9ucyBvbiB0aGUgTWFjIGV4cG9zZSB0aGUgdmFsdWUg
YXR0cmlidXRlLgotICAgIGlmIChtX29iamVjdC0+aXNQb3BVcEJ1dHRvbigpKSB7CisgICAgaWYg
KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1BvcFVwQnV0dG9uKCkpIHsKICAgICAgICAgW2FkZGl0
aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRlXTsKICAgICB9CiAK
LSAgICBpZiAobV9vYmplY3QtPnN1cHBvcnRzRGF0ZXRpbWVBdHRyaWJ1dGUoKSkKKyAgICBpZiAo
c2VsZi5heEJhY2tpbmdPYmplY3QtPnN1cHBvcnRzRGF0ZXRpbWVBdHRyaWJ1dGUoKSkKICAgICAg
ICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eURhdGV0aW1lVmFsdWVBdHRy
aWJ1dGVdOwogICAgIAotICAgIGlmIChtX29iamVjdC0+c3VwcG9ydHNSZXF1aXJlZEF0dHJpYnV0
ZSgpKSB7CisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zdXBwb3J0c1JlcXVpcmVkQXR0
cmlidXRlKCkpIHsKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0
eVJlcXVpcmVkQXR0cmlidXRlXTsKICAgICB9CiAgICAgCi0gICAgaWYgKG1fb2JqZWN0LT5oYXNQ
b3B1cCgpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aGFzUG9wdXAoKSkKICAgICAg
ICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUhhc1BvcHVwQXR0cmlidXRl
XTsKICAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzTWF0aFJvb3QoKSkgeworICAgIGlmIChzZWxm
LmF4QmFja2luZ09iamVjdC0+aXNNYXRoUm9vdCgpKSB7CiAgICAgICAgIC8vIFRoZSBpbmRleCBv
ZiBhIHNxdWFyZSByb290IGlzIGFsd2F5cyBrbm93biwgc28gdGhlcmUncyBubyBvYmplY3QgYXNz
b2NpYXRlZCB3aXRoIGl0LgotICAgICAgICBpZiAoIW1fb2JqZWN0LT5pc01hdGhTcXVhcmVSb290
KCkpCisgICAgICAgIGlmICghc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWF0aFNxdWFyZVJvb3Qo
KSkKICAgICAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRo
Um9vdEluZGV4QXR0cmlidXRlXTsKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNj
ZXNzaWJpbGl0eU1hdGhSb290UmFkaWNhbmRBdHRyaWJ1dGVdOwotICAgIH0gZWxzZSBpZiAobV9v
YmplY3QtPmlzTWF0aEZyYWN0aW9uKCkpIHsKKyAgICB9IGVsc2UgaWYgKHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5pc01hdGhGcmFjdGlvbigpKSB7CiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVj
dDpOU0FjY2Vzc2liaWxpdHlNYXRoRnJhY3Rpb25OdW1lcmF0b3JBdHRyaWJ1dGVdOwogICAgICAg
ICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aEZyYWN0aW9uRGVub21p
bmF0b3JBdHRyaWJ1dGVdOwogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3Np
YmlsaXR5TWF0aExpbmVUaGlja25lc3NBdHRyaWJ1dGVdOwotICAgIH0gZWxzZSBpZiAobV9vYmpl
Y3QtPmlzTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0KCkpIHsKKyAgICB9IGVsc2UgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc01hdGhTdWJzY3JpcHRTdXBlcnNjcmlwdCgpKSB7CiAgICAgICAg
IFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoQmFzZUF0dHJpYnV0ZV07
CiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoU3Vic2Ny
aXB0QXR0cmlidXRlXTsKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJp
bGl0eU1hdGhTdXBlcnNjcmlwdEF0dHJpYnV0ZV07Ci0gICAgfSBlbHNlIGlmIChtX29iamVjdC0+
aXNNYXRoVW5kZXJPdmVyKCkpIHsKKyAgICB9IGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5pc01hdGhVbmRlck92ZXIoKSkgewogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNB
Y2Nlc3NpYmlsaXR5TWF0aEJhc2VBdHRyaWJ1dGVdOwogICAgICAgICBbYWRkaXRpb25hbCBhZGRP
YmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF0aFVuZGVyQXR0cmlidXRlXTsKICAgICAgICAgW2FkZGl0
aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1hdGhPdmVyQXR0cmlidXRlXTsKLSAgICB9
IGVsc2UgaWYgKG1fb2JqZWN0LT5pc01hdGhGZW5jZWQoKSkgeworICAgIH0gZWxzZSBpZiAoc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmlzTWF0aEZlbmNlZCgpKSB7CiAgICAgICAgIFthZGRpdGlvbmFs
IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoRmVuY2VkT3BlbkF0dHJpYnV0ZV07CiAgICAg
ICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoRmVuY2VkQ2xvc2VB
dHRyaWJ1dGVdOwotICAgIH0gZWxzZSBpZiAobV9vYmplY3QtPmlzTWF0aE11bHRpc2NyaXB0KCkp
IHsKKyAgICB9IGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01hdGhNdWx0aXNjcmlw
dCgpKSB7CiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlNYXRo
QmFzZUF0dHJpYnV0ZV07CiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2li
aWxpdHlNYXRoUHJlc2NyaXB0c0F0dHJpYnV0ZV07CiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9i
amVjdDpOU0FjY2Vzc2liaWxpdHlNYXRoUG9zdHNjcmlwdHNBdHRyaWJ1dGVdOwogICAgIH0KICAg
ICAKLSAgICBpZiAobV9vYmplY3QtPnN1cHBvcnRzUGF0aCgpKQorICAgIGlmIChzZWxmLmF4QmFj
a2luZ09iamVjdC0+c3VwcG9ydHNQYXRoKCkpCiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVj
dDpOU0FjY2Vzc2liaWxpdHlQYXRoQXR0cmlidXRlXTsKICAgICAKLSAgICBpZiAobV9vYmplY3Qt
PnN1cHBvcnRzRXhwYW5kZWRUZXh0VmFsdWUoKSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPnN1cHBvcnRzRXhwYW5kZWRUZXh0VmFsdWUoKSkKICAgICAgICAgW2FkZGl0aW9uYWwgYWRk
T2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUV4cGFuZGVkVGV4dFZhbHVlQXR0cmlidXRlXTsKICAgICAK
ICAgICByZXR1cm4gYWRkaXRpb25hbDsKQEAgLTE0NzcsNyArMTQ3NSw3IEBAIEFMTE9XX0RFUFJF
Q0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgIGlmICghW3NlbGYgdXBkYXRlT2JqZWN0QmFj
a2luZ1N0b3JlXSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBpZiAobV9vYmplY3Qt
PmlzQXR0YWNobWVudCgpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNBdHRhY2ht
ZW50KCkpCiAgICAgICAgIHJldHVybiBbW3NlbGYgYXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVOYW1lc107CiAgICAgCiAgICAgc3RhdGljIE5TQXJyYXkqIGF0dHJpYnV0ZXMg
PSBuaWw7CkBAIC0xODA2LDcyICsxODA0LDcwIEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5U
QVRJT05TX0VORAogICAgIAogICAgIE5TQXJyYXkgKm9iamVjdEF0dHJpYnV0ZXMgPSBhdHRyaWJ1
dGVzOwogICAgIAotICAgIGlmIChtX29iamVjdC0+aXNQYXNzd29yZEZpZWxkKCkpCisgICAgaWYg
KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1Bhc3N3b3JkRmllbGQoKSkKICAgICAgICAgb2JqZWN0
QXR0cmlidXRlcyA9IHBhc3N3b3JkRmllbGRBdHRyczsKICAgICAKLSAgICBlbHNlIGlmIChtX29i
amVjdC0+aXNXZWJBcmVhKCkpCisgICAgZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlz
V2ViQXJlYSgpKQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gd2ViQXJlYUF0dHJzOwogICAg
IAotICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc1RleHRDb250cm9sKCkpCisgICAgZWxzZSBpZiAo
c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVGV4dENvbnRyb2woKSkKICAgICAgICAgb2JqZWN0QXR0
cmlidXRlcyA9IHRleHRBdHRyczsKICAgICAKLSAgICBlbHNlIGlmIChfYXhCYWNraW5nT2JqZWN0
LT5pc0xpbmsoKSB8fCBfYXhCYWNraW5nT2JqZWN0LT5pc0ltYWdlKCkpCisgICAgZWxzZSBpZiAo
c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTGluaygpIHx8IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5p
c0ltYWdlKCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBhbmNob3JBdHRyczsKICAgICAK
LSAgICBlbHNlIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCptX29iamVjdCkgJiYgZG93bmNh
c3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqbV9vYmplY3QpLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vz
c2liaWxpdHkoKSkKKyAgICBlbHNlIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCpzZWxmLmF4
QmFja2luZ09iamVjdCkgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqc2VsZi5heEJh
Y2tpbmdPYmplY3QpLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSkKICAgICAgICAg
b2JqZWN0QXR0cmlidXRlcyA9IHRhYmxlQXR0cnM7Ci0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlz
VGFibGVDb2x1bW4oKSkKKyAgICBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUYWJs
ZUNvbHVtbigpKQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gdGFibGVDb2xBdHRyczsKLSAg
ICBlbHNlIGlmIChtX29iamVjdC0+aXNUYWJsZUNlbGwoKSkKKyAgICBlbHNlIGlmIChzZWxmLmF4
QmFja2luZ09iamVjdC0+aXNUYWJsZUNlbGwoKSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9
IHRhYmxlQ2VsbEF0dHJzOwotICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc1RhYmxlUm93KCkpIHsK
KyAgICBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUYWJsZVJvdygpKSB7CiAgICAg
ICAgIC8vIEFuIEFSSUEgdGFibGUgcm93IGNhbiBiZSBjb2xsYXBzZWQgYW5kIGV4cGFuZGVkLCBz
byBpdCBuZWVkcyB0aGUgZXh0cmEgYXR0cmlidXRlcy4KLSAgICAgICAgaWYgKG1fb2JqZWN0LT5p
c0FSSUFUcmVlR3JpZFJvdygpKQorICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlz
QVJJQVRyZWVHcmlkUm93KCkpCiAgICAgICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gb3V0bGlu
ZVJvd0F0dHJzOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0g
dGFibGVSb3dBdHRyczsKLSAgICB9Ci0gICAgCi0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzVHJl
ZSgpKQorICAgIH0gZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVHJlZSgpKQogICAg
ICAgICBvYmplY3RBdHRyaWJ1dGVzID0gb3V0bGluZUF0dHJzOwotICAgIGVsc2UgaWYgKG1fb2Jq
ZWN0LT5pc1RyZWVJdGVtKCkpCisgICAgZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlz
VHJlZUl0ZW0oKSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IG91dGxpbmVSb3dBdHRyczsK
ICAgICAKLSAgICBlbHNlIGlmIChtX29iamVjdC0+aXNMaXN0Qm94KCkpCisgICAgZWxzZSBpZiAo
c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTGlzdEJveCgpKQogICAgICAgICBvYmplY3RBdHRyaWJ1
dGVzID0gbGlzdEJveEF0dHJzOwotICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc0xpc3QoKSkKKyAg
ICBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNMaXN0KCkpCiAgICAgICAgIG9iamVj
dEF0dHJpYnV0ZXMgPSBsaXN0QXR0cnM7CiAgICAgCi0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlz
Q29tYm9Cb3goKSkKKyAgICBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNDb21ib0Jv
eCgpKQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gY29tYm9Cb3hBdHRyczsKICAgICAKLSAg
ICBlbHNlIGlmIChtX29iamVjdC0+aXNQcm9ncmVzc0luZGljYXRvcigpIHx8IG1fb2JqZWN0LT5p
c1NsaWRlcigpKQorICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1Byb2dyZXNz
SW5kaWNhdG9yKCkgfHwgc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzU2xpZGVyKCkpCiAgICAgICAg
IG9iamVjdEF0dHJpYnV0ZXMgPSByYW5nZUF0dHJzOwogICAgIAogICAgIC8vIFRoZXNlIGFyZSBw
cm9jZXNzZWQgaW4gb3JkZXIgYmVjYXVzZSBhbiBpbnB1dCBpbWFnZSBpcyBhIGJ1dHRvbiwgYW5k
IGEgYnV0dG9uIGlzIGEgY29udHJvbC4KLSAgICBlbHNlIGlmIChtX29iamVjdC0+aXNJbnB1dElt
YWdlKCkpCisgICAgZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzSW5wdXRJbWFnZSgp
KQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gaW5wdXRJbWFnZUF0dHJzOwotICAgIGVsc2Ug
aWYgKG1fb2JqZWN0LT5pc0J1dHRvbigpKQorICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5pc0J1dHRvbigpKQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gYnV0dG9uQXR0cnM7
Ci0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzQ29udHJvbCgpKQorICAgIGVsc2UgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc0NvbnRyb2woKSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9
IGNvbnRyb2xBdHRyczsKICAgICAKLSAgICBlbHNlIGlmIChtX29iamVjdC0+aXNHcm91cCgpIHx8
IG1fb2JqZWN0LT5pc0xpc3RJdGVtKCkpCisgICAgZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmlzR3JvdXAoKSB8fCBzZWxmLmF4QmFja2luZ09iamVjdC0+aXNMaXN0SXRlbSgpKQogICAg
ICAgICBvYmplY3RBdHRyaWJ1dGVzID0gZ3JvdXBBdHRyczsKLSAgICBlbHNlIGlmIChtX29iamVj
dC0+aXNUYWJMaXN0KCkpCisgICAgZWxzZSBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVGFi
TGlzdCgpKQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gdGFiTGlzdEF0dHJzOwotICAgIGVs
c2UgaWYgKG1fb2JqZWN0LT5pc1Njcm9sbFZpZXcoKSkKKyAgICBlbHNlIGlmIChzZWxmLmF4QmFj
a2luZ09iamVjdC0+aXNTY3JvbGxWaWV3KCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBz
Y3JvbGxWaWV3QXR0cnM7Ci0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlzU3BpbkJ1dHRvbigpKQor
ICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1NwaW5CdXR0b24oKSkKICAgICAg
ICAgb2JqZWN0QXR0cmlidXRlcyA9IGluY3JlbWVudG9yQXR0cnM7CiAgICAgCi0gICAgZWxzZSBp
ZiAobV9vYmplY3QtPmlzTWVudSgpKQorICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5pc01lbnUoKSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IG1lbnVBdHRyczsKLSAgICBl
bHNlIGlmIChtX29iamVjdC0+aXNNZW51QmFyKCkpCisgICAgZWxzZSBpZiAoc2VsZi5heEJhY2tp
bmdPYmplY3QtPmlzTWVudUJhcigpKQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gbWVudUJh
ckF0dHJzOwotICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc01lbnVCdXR0b24oKSkKKyAgICBlbHNl
IGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNZW51QnV0dG9uKCkpCiAgICAgICAgIG9iamVj
dEF0dHJpYnV0ZXMgPSBtZW51QnV0dG9uQXR0cnM7Ci0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlz
TWVudUl0ZW0oKSkKKyAgICBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNZW51SXRl
bSgpKQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gbWVudUl0ZW1BdHRyczsKICAgICAKICAg
ICBOU0FycmF5ICphZGRpdGlvbmFsQXR0cmlidXRlcyA9IFtzZWxmIGFkZGl0aW9uYWxBY2Nlc3Np
YmlsaXR5QXR0cmlidXRlTmFtZXNdOwpAQCAtMTg3OSw3ICsxODc1LDcgQEAgQUxMT1dfREVQUkVD
QVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBbb2Jq
ZWN0QXR0cmlidXRlcyBhcnJheUJ5QWRkaW5nT2JqZWN0c0Zyb21BcnJheTphZGRpdGlvbmFsQXR0
cmlidXRlc107CiAgICAgCiAgICAgLy8gT25seSBleHBvc2UgQVhBUklBQ3VycmVudCBhdHRyaWJ1
dGUgd2hlbiB0aGUgZWxlbWVudCBpcyBzZXQgdG8gYmUgY3VycmVudCBpdGVtLgotICAgIGlmICht
X29iamVjdC0+Y3VycmVudFN0YXRlKCkgIT0gQWNjZXNzaWJpbGl0eUN1cnJlbnRTdGF0ZTo6RmFs
c2UpCisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5jdXJyZW50U3RhdGUoKSAhPSBBY2Nl
c3NpYmlsaXR5Q3VycmVudFN0YXRlOjpGYWxzZSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9
IFtvYmplY3RBdHRyaWJ1dGVzIGFycmF5QnlBZGRpbmdPYmplY3RzRnJvbUFycmF5OkBbIE5TQWNj
ZXNzaWJpbGl0eUFSSUFDdXJyZW50QXR0cmlidXRlIF1dOwogICAgIAogICAgIC8vIEFwcEtpdCBu
ZWVkcyB0byBrbm93IHRoZSBzY3JlZW4gaGVpZ2h0IGluIG9yZGVyIHRvIGRvIHRoZSBjb29yZGlu
YXRlIGNvbnZlcnNpb24uCkBAIC0xODkyLDE0ICsxODg4LDE0IEBAIEFMTE9XX0RFUFJFQ0FURURf
SU1QTEVNRU5UQVRJT05TX0VORAogewogICAgIGlmICghdGV4dE1hcmtlclJhbmdlKQogICAgICAg
ICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsKLSAgICBBWE9iamVjdENhY2hlKiBjYWNo
ZSA9IG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCk7CisgICAgQVhPYmplY3RDYWNoZSogY2FjaGUg
PSBzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpOwogICAgIHJldHVybiBWaXNp
YmxlUG9zaXRpb25SYW5nZSh2aXNpYmxlUG9zaXRpb25Gb3JTdGFydE9mVGV4dE1hcmtlclJhbmdl
KGNhY2hlLCB0ZXh0TWFya2VyUmFuZ2UpLCB2aXNpYmxlUG9zaXRpb25Gb3JFbmRPZlRleHRNYXJr
ZXJSYW5nZShjYWNoZSwgdGV4dE1hcmtlclJhbmdlKSk7CiB9CiAKIC0gKE5TQXJyYXkqKXJlbmRl
cldpZGdldENoaWxkcmVuCiB7CiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFs
dWVGcm9tTWFpblRocmVhZDxOU0FycmF5ICo+KFtwcm90ZWN0ZWRTZWxmID0gUmV0YWluUHRyPFdl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPihzZWxmKV0gKCkgLT4gTlNBcnJheSAqIHsKLSAg
ICAgICAgV2lkZ2V0KiB3aWRnZXQgPSBwcm90ZWN0ZWRTZWxmLT5tX29iamVjdC0+d2lkZ2V0KCk7
CisgICAgICAgIFdpZGdldCogd2lkZ2V0ID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdP
YmplY3QtPndpZGdldCgpOwogICAgICAgICBpZiAoIXdpZGdldCkKICAgICAgICAgICAgIHJldHVy
biBuaWw7CiAgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCkBAIC0x
OTExLDEwICsxOTA3LDEwIEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAog
LSAoaWQpcmVtb3RlQWNjZXNzaWJpbGl0eVBhcmVudE9iamVjdAogewogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFtX29iamVjdCkKKyAgICBpZiAoIXNlbGYuYXhCYWNraW5n
T2JqZWN0KQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgaWYgKGF1dG8qIGRvY3VtZW50ID0g
X2F4QmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKSkgeworICAgIGlmIChhdXRvKiBkb2N1bWVudCA9
IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5kb2N1bWVudCgpKSB7CiAgICAgICAgIGlmIChhdXRvKiBm
cmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZyYW1lLT5sb2Fk
ZXIoKS5jbGllbnQoKS5hY2Nlc3NpYmlsaXR5UmVtb3RlT2JqZWN0KCk7CiAgICAgfQpAQCAtMTky
Nyw3ICsxOTIzLDcgQEAgc3RhdGljIHZvaWQgY29udmVydFRvVmVjdG9yKE5TQXJyYXkqIGFycmF5
LCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2gKICAgICB1bnNpZ25lZCBsZW5n
dGggPSBbYXJyYXkgY291bnRdOwogICAgIHZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxl
bmd0aCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgIEFYQ29yZU9iamVjdCogb2JqID0gW1thcnJheSBvYmplY3RBdEluZGV4OmldIGFjY2Vzc2li
aWxpdHlPYmplY3RdOworICAgICAgICBBWENvcmVPYmplY3QqIG9iaiA9IFtbYXJyYXkgb2JqZWN0
QXRJbmRleDppXSBheEJhY2tpbmdPYmplY3RdOwogICAgICAgICBpZiAob2JqKQogICAgICAgICAg
ICAgdmVjdG9yLmFwcGVuZChvYmopOwogICAgIH0KQEAgLTE5NDMsNyArMTkzOSw3IEBAIHN0YXRp
YyBOU011dGFibGVBcnJheSAqY29udmVydFN0cmluZ3NUb05TQXJyYXkoY29uc3QgVmVjdG9yPFN0
cmluZz4mIHZlY3RvcikKIAogLSAoaWQpdGV4dE1hcmtlclJhbmdlRm9yU2VsZWN0aW9uCiB7Ci0g
ICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX29iamVjdC0+c2VsZWN0aW9uKCk7Cisg
ICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBzZWxmLmF4QmFja2luZ09iamVjdC0+c2Vs
ZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIG5p
bDsKICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6
c2VsZWN0aW9uLnZpc2libGVTdGFydCgpIGVuZFBvc2l0aW9uOnNlbGVjdGlvbi52aXNpYmxlRW5k
KCldOwpAQCAtMTk1MiwxNyArMTk0OCwxNyBAQCBzdGF0aWMgTlNNdXRhYmxlQXJyYXkgKmNvbnZl
cnRTdHJpbmdzVG9OU0FycmF5KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2ZWN0b3IpCiAtIChpZClh
c3NvY2lhdGVkUGx1Z2luUGFyZW50CiB7CiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJp
ZXZlVmFsdWVGcm9tTWFpblRocmVhZDxpZD4oW3Byb3RlY3RlZFNlbGYgPSBSZXRhaW5QdHI8V2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+KHNlbGYpXSAoKSAtPiBpZCB7Ci0gICAgICAgIGlm
ICghcHJvdGVjdGVkU2VsZi0+bV9vYmplY3QgfHwgIXByb3RlY3RlZFNlbGYtPm1fb2JqZWN0LT5o
YXNBcHBsZVBERkFubm90YXRpb25BdHRyaWJ1dGUoKSkKKyAgICAgICAgaWYgKCFwcm90ZWN0ZWRT
ZWxmLmdldCgpLmF4QmFja2luZ09iamVjdCB8fCAhcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tp
bmdPYmplY3QtPmhhc0FwcGxlUERGQW5ub3RhdGlvbkF0dHJpYnV0ZSgpKQogICAgICAgICAgICAg
cmV0dXJuIG5pbDsKICAgICAKLSAgICAgICAgaWYgKCFwcm90ZWN0ZWRTZWxmLT5tX29iamVjdC0+
ZG9jdW1lbnQoKS0+aXNQbHVnaW5Eb2N1bWVudCgpKQorICAgICAgICBpZiAoIXByb3RlY3RlZFNl
bGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0LT5kb2N1bWVudCgpLT5pc1BsdWdpbkRvY3VtZW50KCkp
CiAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICAKLSAgICAgICAgV2lkZ2V0KiBwbHVn
aW5XaWRnZXQgPSBzdGF0aWNfY2FzdDxQbHVnaW5Eb2N1bWVudCo+KHByb3RlY3RlZFNlbGYtPm1f
b2JqZWN0LT5kb2N1bWVudCgpKS0+cGx1Z2luV2lkZ2V0KCk7CisgICAgICAgIFdpZGdldCogcGx1
Z2luV2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UGx1Z2luRG9jdW1lbnQqPihwcm90ZWN0ZWRTZWxmLmdl
dCgpLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKSktPnBsdWdpbldpZGdldCgpOwogICAgICAg
ICBpZiAoIXBsdWdpbldpZGdldCB8fCAhcGx1Z2luV2lkZ2V0LT5pc1BsdWdpblZpZXdCYXNlKCkp
CiAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFBsdWdpblZpZXdCYXNlKj4ocGx1Z2luV2lkZ2V0KS0+YWNjZXNzaWJpbGl0eUFzc29j
aWF0ZWRQbHVnaW5QYXJlbnRGb3JFbGVtZW50KHByb3RlY3RlZFNlbGYtPm1fb2JqZWN0LT5lbGVt
ZW50KCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlld0Jhc2UqPihwbHVn
aW5XaWRnZXQpLT5hY2Nlc3NpYmlsaXR5QXNzb2NpYXRlZFBsdWdpblBhcmVudEZvckVsZW1lbnQo
cHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3QtPmVsZW1lbnQoKSk7CiAgICAgfSk7
CiB9CiAKQEAgLTE5OTYsNyArMTk5Miw3IEBAIHN0YXRpYyB2b2lkIFdlYlRyYW5zZm9ybUNHUGF0
aFRvTlNCZXppZXJQYXRoKHZvaWQqIGluZm8sIGNvbnN0IENHUGF0aEVsZW1lbnQgKmVsCiAKIC0g
KE5TQmV6aWVyUGF0aCAqKXBhdGgKIHsKLSAgICBQYXRoIHBhdGggPSBtX29iamVjdC0+ZWxlbWVu
dFBhdGgoKTsKKyAgICBQYXRoIHBhdGggPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZWxlbWVudFBh
dGgoKTsKICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAg
IApAQCAtMjAxMiwyMiArMjAwOCwyMiBAQCBzdGF0aWMgdm9pZCBXZWJUcmFuc2Zvcm1DR1BhdGhU
b05TQmV6aWVyUGF0aCh2b2lkKiBpbmZvLCBjb25zdCBDR1BhdGhFbGVtZW50ICplbAogCiAtIChz
aXplX3QpY2hpbGRyZW5WZWN0b3JTaXplCiB7Ci0gICAgcmV0dXJuIG1fb2JqZWN0LT5jaGlsZHJl
bigpLnNpemUoKTsKKyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPmNoaWxkcmVuKCku
c2l6ZSgpOwogfQogCiAtIChOU0FycmF5PFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyICo+
ICopY2hpbGRyZW5WZWN0b3JBcnJheQogewotICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KG1f
b2JqZWN0LT5jaGlsZHJlbigpKTsKKyAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShzZWxmLmF4
QmFja2luZ09iamVjdC0+Y2hpbGRyZW4oKSk7CiB9CiAKIC0gKE5TVmFsdWUgKilwb3NpdGlvbgog
ewogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCiAgICAgaWYgKF9BWFVJ
RWxlbWVudFJlcXVlc3RTZXJ2aWNlZEJ5U2Vjb25kYXJ5QVhUaHJlYWQoKSkKLSAgICAgICAgcmV0
dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFBvaW50OihOU1BvaW50KV9heEJhY2tpbmdPYmplY3QtPnJl
bGF0aXZlRnJhbWUoKS5sb2NhdGlvbigpXTsKKyAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVl
V2l0aFBvaW50OihOU1BvaW50KXNlbGYuYXhCYWNraW5nT2JqZWN0LT5yZWxhdGl2ZUZyYW1lKCku
bG9jYXRpb24oKV07CiAjZW5kaWYKICAgICAgICAgCi0gICAgYXV0byByZWN0ID0gc25hcHBlZElu
dFJlY3QobV9vYmplY3QtPmVsZW1lbnRSZWN0KCkpOworICAgIGF1dG8gcmVjdCA9IHNuYXBwZWRJ
bnRSZWN0KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5lbGVtZW50UmVjdCgpKTsKICAgICAKICAgICAv
LyBUaGUgQ29jb2EgYWNjZXNzaWJpbGl0eSBBUEkgd2FudHMgdGhlIGxvd2VyLWxlZnQgY29ybmVy
LgogICAgIGF1dG8gZmxvYXRQb2ludCA9IEZsb2F0UG9pbnQocmVjdC54KCksIHJlY3QubWF4WSgp
KTsKQEAgLTIwNDAsMTEgKzIwMzYsMTEgQEAgc3RhdGljIHZvaWQgV2ViVHJhbnNmb3JtQ0dQYXRo
VG9OU0JlemllclBhdGgodm9pZCogaW5mbywgY29uc3QgQ0dQYXRoRWxlbWVudCAqZWwKIC0gKE5T
U3RyaW5nKilyb2xlCiB7CiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4K
LSAgICBpZiAoX2F4QmFja2luZ09iamVjdC0+aXNBdHRhY2htZW50KCkpCisgICAgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc0F0dGFjaG1lbnQoKSkKICAgICAgICAgcmV0dXJuIFtbc2VsZiBh
dHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0
eVJvbGVBdHRyaWJ1dGVdOwogICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAog
Ci0gICAgTlNTdHJpbmcgKnN0cmluZyA9IG1fb2JqZWN0LT5yb2xlUGxhdGZvcm1TdHJpbmcoKTsK
KyAgICBOU1N0cmluZyAqc3RyaW5nID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnJvbGVQbGF0Zm9y
bVN0cmluZygpOwogICAgIGlmIChzdHJpbmcubGVuZ3RoKQogICAgICAgICByZXR1cm4gc3RyaW5n
OwogICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlVbmtub3duUm9sZTsKQEAgLTIwNTMsMjEgKzIw
NDksMjEgQEAgc3RhdGljIHZvaWQgV2ViVHJhbnNmb3JtQ0dQYXRoVG9OU0JlemllclBhdGgodm9p
ZCogaW5mbywgY29uc3QgQ0dQYXRoRWxlbWVudCAqZWwKIEFMTE9XX0RFUFJFQ0FURURfREVDTEFS
QVRJT05TX0JFR0lOCiAtIChOU1N0cmluZyopc3Vicm9sZQogewotICAgIGlmIChtX29iamVjdC0+
aXNQYXNzd29yZEZpZWxkKCkpCisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1Bhc3N3
b3JkRmllbGQoKSkKICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVNlY3VyZVRleHRGaWVs
ZFN1YnJvbGU7Ci0gICAgaWYgKG1fb2JqZWN0LT5pc1NlYXJjaEZpZWxkKCkpCisgICAgaWYgKHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5pc1NlYXJjaEZpZWxkKCkpCiAgICAgICAgIHJldHVybiBOU0Fj
Y2Vzc2liaWxpdHlTZWFyY2hGaWVsZFN1YnJvbGU7CiAgICAgCi0gICAgaWYgKF9heEJhY2tpbmdP
YmplY3QtPmlzQXR0YWNobWVudCgpKSB7CisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5p
c0F0dGFjaG1lbnQoKSkgewogICAgICAgICBOU1ZpZXcqIGF0dGFjaFZpZXcgPSBbc2VsZiBhdHRh
Y2htZW50Vmlld107CiAgICAgICAgIGlmIChbW2F0dGFjaFZpZXcgYWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZU5hbWVzXSBjb250YWluc09iamVjdDpOU0FjY2Vzc2liaWxpdHlTdWJyb2xlQXR0cmlidXRl
XSkKICAgICAgICAgICAgIHJldHVybiBbYXR0YWNoVmlldyBhY2Nlc3NpYmlsaXR5QXR0cmlidXRl
VmFsdWU6TlNBY2Nlc3NpYmlsaXR5U3Vicm9sZUF0dHJpYnV0ZV07CiAgICAgfQogICAgIAotICAg
IGlmIChtX29iamVjdC0+aXNNZXRlcigpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+
aXNNZXRlcigpKQogICAgICAgICByZXR1cm4gQCJBWE1ldGVyIjsKICAgICAKLSAgICBBY2Nlc3Np
YmlsaXR5Um9sZSByb2xlID0gbV9vYmplY3QtPnJvbGVWYWx1ZSgpOworICAgIEFjY2Vzc2liaWxp
dHlSb2xlIHJvbGUgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+cm9sZVZhbHVlKCk7CiAgICAgaWYg
KHJvbGUgPT0gQWNjZXNzaWJpbGl0eVJvbGU6Okhvcml6b250YWxSdWxlKQogICAgICAgICByZXR1
cm4gTlNBY2Nlc3NpYmlsaXR5Q29udGVudFNlcGFyYXRvclN1YnJvbGU7CiAgICAgaWYgKHJvbGUg
PT0gQWNjZXNzaWJpbGl0eVJvbGU6OlRvZ2dsZUJ1dHRvbikKQEAgLTIwNzUsMjUgKzIwNzEsMjUg
QEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KICAgICBpZiAocm9sZSA9PSBB
Y2Nlc3NpYmlsaXR5Um9sZTo6Rm9vdGVyKQogICAgICAgICByZXR1cm4gQCJBWEZvb3RlciI7CiAK
LSAgICBpZiAobV9vYmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpTcGlu
QnV0dG9uUGFydCkgewotICAgICAgICBpZiAobV9vYmplY3QtPmlzSW5jcmVtZW50b3IoKSkKKyAg
ICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlS
b2xlOjpTcGluQnV0dG9uUGFydCkgeworICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3Qt
PmlzSW5jcmVtZW50b3IoKSkKICAgICAgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlJbmNy
ZW1lbnRBcnJvd1N1YnJvbGU7CiAgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlEZWNyZW1l
bnRBcnJvd1N1YnJvbGU7CiAgICAgfQogICAgIAotICAgIGlmIChfYXhCYWNraW5nT2JqZWN0LT5p
c0ZpbGVVcGxvYWRCdXR0b24oKSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzRmls
ZVVwbG9hZEJ1dHRvbigpKQogICAgICAgICByZXR1cm4gQCJBWEZpbGVVcGxvYWRCdXR0b24iOwog
ICAgIAotICAgIGlmIChtX29iamVjdC0+aXNUcmVlSXRlbSgpKQorICAgIGlmIChzZWxmLmF4QmFj
a2luZ09iamVjdC0+aXNUcmVlSXRlbSgpKQogICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5
T3V0bGluZVJvd1N1YnJvbGU7CiAgICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc0ZpZWxkc2V0KCkp
CisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0ZpZWxkc2V0KCkpCiAgICAgICAgIHJl
dHVybiBAIkFYRmllbGRzZXQiOwogCi0gICAgaWYgKG1fb2JqZWN0LT5pc0xpc3QoKSkgewotICAg
ICAgICBpZiAobV9vYmplY3QtPmlzVW5vcmRlcmVkTGlzdCgpIHx8IG1fb2JqZWN0LT5pc09yZGVy
ZWRMaXN0KCkpCisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0xpc3QoKSkgeworICAg
ICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVW5vcmRlcmVkTGlzdCgpIHx8IHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc09yZGVyZWRMaXN0KCkpCiAgICAgICAgICAgICByZXR1cm4gTlNB
Y2Nlc3NpYmlsaXR5Q29udGVudExpc3RTdWJyb2xlOwotICAgICAgICBpZiAobV9vYmplY3QtPmlz
RGVzY3JpcHRpb25MaXN0KCkpIHsKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5p
c0Rlc2NyaXB0aW9uTGlzdCgpKSB7CiAgICAgICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5
RGVzY3JpcHRpb25MaXN0U3Vicm9sZTsKICAgICAgICAgfQogICAgIH0KQEAgLTIxNjIsMzkgKzIx
NTgsMzkgQEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KICAgICB9CiAgICAg
CiAgICAgaWYgKHJvbGUgPT0gQWNjZXNzaWJpbGl0eVJvbGU6Ok1hdGhFbGVtZW50KSB7Ci0gICAg
ICAgIGlmIChtX29iamVjdC0+aXNNYXRoRnJhY3Rpb24oKSkKKyAgICAgICAgaWYgKHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5pc01hdGhGcmFjdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIEAiQVhN
YXRoRnJhY3Rpb24iOwotICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aEZlbmNlZCgpKQorICAg
ICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWF0aEZlbmNlZCgpKQogICAgICAgICAg
ICAgcmV0dXJuIEAiQVhNYXRoRmVuY2VkIjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhT
dWJzY3JpcHRTdXBlcnNjcmlwdCgpKQorICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3Qt
PmlzTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0KCkpCiAgICAgICAgICAgICByZXR1cm4gQCJBWE1h
dGhTdWJzY3JpcHRTdXBlcnNjcmlwdCI7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoUm93
KCkpCisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRoUm93KCkpCiAgICAg
ICAgICAgICByZXR1cm4gQCJBWE1hdGhSb3ciOwotICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0
aFVuZGVyT3ZlcigpKQorICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWF0aFVu
ZGVyT3ZlcigpKQogICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoVW5kZXJPdmVyIjsKLSAgICAg
ICAgaWYgKG1fb2JqZWN0LT5pc01hdGhTcXVhcmVSb290KCkpCisgICAgICAgIGlmIChzZWxmLmF4
QmFja2luZ09iamVjdC0+aXNNYXRoU3F1YXJlUm9vdCgpKQogICAgICAgICAgICAgcmV0dXJuIEAi
QVhNYXRoU3F1YXJlUm9vdCI7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoUm9vdCgpKQor
ICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWF0aFJvb3QoKSkKICAgICAgICAg
ICAgIHJldHVybiBAIkFYTWF0aFJvb3QiOwotICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFRl
eHQoKSkKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01hdGhUZXh0KCkpCiAg
ICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhUZXh0IjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5p
c01hdGhOdW1iZXIoKSkKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01hdGhO
dW1iZXIoKSkKICAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aE51bWJlciI7Ci0gICAgICAgIGlm
IChtX29iamVjdC0+aXNNYXRoSWRlbnRpZmllcigpKQorICAgICAgICBpZiAoc2VsZi5heEJhY2tp
bmdPYmplY3QtPmlzTWF0aElkZW50aWZpZXIoKSkKICAgICAgICAgICAgIHJldHVybiBAIkFYTWF0
aElkZW50aWZpZXIiOwotICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFRhYmxlKCkpCisgICAg
ICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRoVGFibGUoKSkKICAgICAgICAgICAg
IHJldHVybiBAIkFYTWF0aFRhYmxlIjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhUYWJs
ZVJvdygpKQorICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTWF0aFRhYmxlUm93
KCkpCiAgICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhUYWJsZVJvdyI7Ci0gICAgICAgIGlmICht
X29iamVjdC0+aXNNYXRoVGFibGVDZWxsKCkpCisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09i
amVjdC0+aXNNYXRoVGFibGVDZWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhUYWJs
ZUNlbGwiOwotICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aEZlbmNlT3BlcmF0b3IoKSkKKyAg
ICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01hdGhGZW5jZU9wZXJhdG9yKCkpCiAg
ICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhGZW5jZU9wZXJhdG9yIjsKLSAgICAgICAgaWYgKG1f
b2JqZWN0LT5pc01hdGhTZXBhcmF0b3JPcGVyYXRvcigpKQorICAgICAgICBpZiAoc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmlzTWF0aFNlcGFyYXRvck9wZXJhdG9yKCkpCiAgICAgICAgICAgICByZXR1
cm4gQCJBWE1hdGhTZXBhcmF0b3JPcGVyYXRvciI7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNN
YXRoT3BlcmF0b3IoKSkKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01hdGhP
cGVyYXRvcigpKQogICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoT3BlcmF0b3IiOwotICAgICAg
ICBpZiAobV9vYmplY3QtPmlzTWF0aE11bHRpc2NyaXB0KCkpCisgICAgICAgIGlmIChzZWxmLmF4
QmFja2luZ09iamVjdC0+aXNNYXRoTXVsdGlzY3JpcHQoKSkKICAgICAgICAgICAgIHJldHVybiBA
IkFYTWF0aE11bHRpc2NyaXB0IjsKICAgICB9CiAgICAgCkBAIC0yMjA5LDEwICsyMjA1LDEwIEBA
IEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCiAgICAgaWYgKHJvbGUgPT0gQWNj
ZXNzaWJpbGl0eVJvbGU6OlRpbWUpCiAgICAgICAgIHJldHVybiBAIkFYVGltZUdyb3VwIjsKIAot
ICAgIGlmIChtX29iamVjdC0+aXNNZWRpYVRpbWVsaW5lKCkpCisgICAgaWYgKHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5pc01lZGlhVGltZWxpbmUoKSkKICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJp
bGl0eVRpbWVsaW5lU3Vicm9sZTsKIAotICAgIGlmIChtX29iamVjdC0+aXNTd2l0Y2goKSkKKyAg
ICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzU3dpdGNoKCkpCiAgICAgICAgIHJldHVybiBO
U0FjY2Vzc2liaWxpdHlTd2l0Y2hTdWJyb2xlOwogCiAgICAgaWYgKHJvbGUgPT0gQWNjZXNzaWJp
bGl0eVJvbGU6Okluc2VydGlvbikKQEAgLTIyMjQsOCArMjIyMCw4IEBAIEFMTE9XX0RFUFJFQ0FU
RURfREVDTEFSQVRJT05TX0JFR0lOCiAgICAgaWYgKHJvbGUgPT0gQWNjZXNzaWJpbGl0eVJvbGU6
OlN1YnNjcmlwdCkKICAgICAgICAgcmV0dXJuIEAiQVhTdWJzY3JpcHRTdHlsZUdyb3VwIjsKIAot
ICAgIGlmIChtX29iamVjdC0+aXNTdHlsZUZvcm1hdEdyb3VwKCkpIHsKLSAgICAgICAgYXV0byB0
YWdOYW1lID0gbV9vYmplY3QtPnRhZ05hbWUoKTsKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmlzU3R5bGVGb3JtYXRHcm91cCgpKSB7CisgICAgICAgIGF1dG8gdGFnTmFtZSA9IHNlbGYu
YXhCYWNraW5nT2JqZWN0LT50YWdOYW1lKCk7CiAgICAgICAgIGlmICh0YWdOYW1lID09IGtiZFRh
ZykKICAgICAgICAgICAgIHJldHVybiBAIkFYS2V5Ym9hcmRJbnB1dFN0eWxlR3JvdXAiOwogICAg
ICAgICBpZiAodGFnTmFtZSA9PSBjb2RlVGFnKQpAQCAtMjI2MywyMCArMjI1OSwyMCBAQCBBTExP
V19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIAogLSAoTlNTdHJpbmcqKXJvbGVEZXNjcmlw
dGlvbgogewotICAgIGlmICghbV9vYmplY3QpCisgICAgaWYgKCFzZWxmLmF4QmFja2luZ09iamVj
dCkKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJ
T05TX0JFR0lOCiAgICAgLy8gYXR0YWNobWVudHMgaGF2ZSB0aGUgQVhJbWFnZSByb2xlLCBidXQg
YSBkaWZmZXJlbnQgc3Vicm9sZQotICAgIGlmIChfYXhCYWNraW5nT2JqZWN0LT5pc0F0dGFjaG1l
bnQoKSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzQXR0YWNobWVudCgpKQogICAg
ICAgICByZXR1cm4gW1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5QXR0cmlidXRl
VmFsdWU6TlNBY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0aW9uQXR0cmlidXRlXTsKICAgICBBTExP
V19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIAotICAgIFN0cmluZyByb2xlRGVzY3JpcHRp
b24gPSBtX29iamVjdC0+cm9sZURlc2NyaXB0aW9uKCk7CisgICAgU3RyaW5nIHJvbGVEZXNjcmlw
dGlvbiA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5yb2xlRGVzY3JpcHRpb24oKTsKICAgICBpZiAo
IXJvbGVEZXNjcmlwdGlvbi5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiByb2xlRGVzY3JpcHRp
b247CiAKLSAgICBOU1N0cmluZyAqYXhSb2xlID0gbV9vYmplY3QtPnJvbGVQbGF0Zm9ybVN0cmlu
ZygpOworICAgIE5TU3RyaW5nICpheFJvbGUgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+cm9sZVBs
YXRmb3JtU3RyaW5nKCk7CiAgICAgLy8gRmFsbGJhY2sgdG8gdGhlIHN5c3RlbSBkZWZhdWx0IHJv
bGUgZGVzY3JpcHRpb24uCiAgICAgLy8gSWYgd2UgZ2V0IHRoZSBzYW1lIHN0cmluZyBiYWNrLCB0
aGVuIGFzIGEgbGFzdCByZXNvcnQsIHJldHVybiB1bmtub3duLgogICAgIE5TU3RyaW5nICpkZWZh
dWx0Um9sZURlc2NyaXB0aW9uID0gTlNBY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0aW9uKGF4Um9s
ZSwgW3NlbGYgc3Vicm9sZV0pOwpAQCAtMjI5NSwyMyArMjI5MSwyMyBAQCBBTExPV19ERVBSRUNB
VEVEX0RFQ0xBUkFUSU9OU19FTkQKIAogLSAoTlNTdHJpbmcgKiljb21wdXRlZFJvbGVTdHJpbmcK
IHsKLSAgICBpZiAoIW1fb2JqZWN0KQorICAgIGlmICghc2VsZi5heEJhY2tpbmdPYmplY3QpCiAg
ICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIG1fb2JqZWN0LT5jb21wdXRlZFJvbGVTdHJp
bmcoKTsKKyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPmNvbXB1dGVkUm9sZVN0cmlu
ZygpOwogfQogCiAtIChpZClzY3JvbGxWaWV3UGFyZW50CiB7CiAgICAgcmV0dXJuIEFjY2Vzc2li
aWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxpZD4oW3Byb3RlY3RlZFNlbGYgPSBS
ZXRhaW5QdHI8V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+KHNlbGYpXSAoKSAtPiBpZCB7
Ci0gICAgICAgIGlmICghaXM8QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+KHByb3RlY3RlZFNlbGYt
Pm1fb2JqZWN0KSkKKyAgICAgICAgaWYgKCFpczxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldz4ocHJv
dGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3QpKQogICAgICAgICAgICAgcmV0dXJuIG5p
bDsKIAogICAgICAgICAvLyBJZiB0aGlzIHNjcm9sbCB2aWV3IHByb3ZpZGVzIGl0J3MgcGFyZW50
IG9iamVjdCAoYmVjYXVzZSBpdCdzIGEgc3ViLWZyYW1lKSwgdGhlbgogICAgICAgICAvLyB3ZSBz
aG91bGQgbm90IGZpbmQgdGhlIHJlbW90ZUFjY2Vzc2liaWxpdHlQYXJlbnQuCi0gICAgICAgIGlm
IChwcm90ZWN0ZWRTZWxmLT5tX29iamVjdC0+cGFyZW50T2JqZWN0KCkpCisgICAgICAgIGlmIChw
cm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdC0+cGFyZW50T2JqZWN0KCkpCiAgICAg
ICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgICAgIFNjcm9sbFZpZXcqIHNjcm9sbCA9IGRvd25j
YXN0PEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3PigqcHJvdGVjdGVkU2VsZi0+bV9vYmplY3QpLnNj
cm9sbFZpZXcoKTsKKyAgICAgICAgU2Nyb2xsVmlldyogc2Nyb2xsID0gZG93bmNhc3Q8QWNjZXNz
aWJpbGl0eVNjcm9sbFZpZXc+KCpwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdCku
c2Nyb2xsVmlldygpOwogICAgICAgICBpZiAoIXNjcm9sbCkKICAgICAgICAgICAgIHJldHVybiBu
aWw7CiAKQEAgLTIzMjQsMTQgKzIzMjAsMTQgQEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElP
TlNfRU5ECiAKIC0gKE5TU3RyaW5nICopdmFsdWVEZXNjcmlwdGlvbkZvck1ldGVyCiB7Ci0gICAg
aWYgKCFtX29iamVjdCkKKyAgICBpZiAoIXNlbGYuYXhCYWNraW5nT2JqZWN0KQogICAgICAgICBy
ZXR1cm4gbmlsOwogICAgIAotICAgIFN0cmluZyB2YWx1ZURlc2NyaXB0aW9uID0gbV9vYmplY3Qt
PnZhbHVlRGVzY3JpcHRpb24oKTsKKyAgICBTdHJpbmcgdmFsdWVEZXNjcmlwdGlvbiA9IHNlbGYu
YXhCYWNraW5nT2JqZWN0LT52YWx1ZURlc2NyaXB0aW9uKCk7CiAjaWYgRU5BQkxFKE1FVEVSX0VM
RU1FTlQpCi0gICAgaWYgKCFpczxBY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3I+KG1fb2Jq
ZWN0KSkKKyAgICBpZiAoIWlzPEFjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvcj4oc2VsZi5h
eEJhY2tpbmdPYmplY3QpKQogICAgICAgICByZXR1cm4gdmFsdWVEZXNjcmlwdGlvbjsKLSAgICBh
dXRvICZtZXRlciA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvcj4oKm1f
b2JqZWN0KTsKKyAgICBhdXRvICZtZXRlciA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlQcm9ncmVz
c0luZGljYXRvcj4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KTsKICAgICBTdHJpbmcgZ2F1Z2VSZWdp
b25WYWx1ZSA9IG1ldGVyLmdhdWdlUmVnaW9uVmFsdWVEZXNjcmlwdGlvbigpOwogICAgIGlmICgh
Z2F1Z2VSZWdpb25WYWx1ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBidWls
ZGVyOwpAQCAtMjM1NSw3ICsyMzUxLDcgQEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNf
RU5ECiAgICAgICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKICAgICAg
ICAgfQogCi0gICAgICAgIGlmIChhdXRvKiBmdiA9IHByb3RlY3RlZFNlbGYtPm1fb2JqZWN0LT5k
b2N1bWVudEZyYW1lVmlldygpKQorICAgICAgICBpZiAoYXV0byogZnYgPSBwcm90ZWN0ZWRTZWxm
LmdldCgpLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnRGcmFtZVZpZXcoKSkKICAgICAgICAgICAg
IHJldHVybiBbZnYtPnBsYXRmb3JtV2lkZ2V0KCkgd2luZG93XTsKIAogICAgICAgICByZXR1cm4g
bmlsOwpAQCAtMjM3Miw3ICsyMzY4LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElP
TlNfRU5ECiAgICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQogICAgICAg
ICByZXR1cm4gbmlsOwogICAgIAotICAgIGlmIChtX29iamVjdC0+aXNEZXRhY2hlZEZyb21QYXJl
bnQoKSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzRGV0YWNoZWRGcm9tUGFyZW50
KCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5Um9sZUF0dHJpYnV0ZV0pCkBAIC0yMzk2LDgg
KzIzOTIsOCBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAg
ICAgIHJldHVybiBzY3JvbGxWaWV3UGFyZW50OwogICAgICAgICAKICAgICAgICAgLy8gVHJlZSBp
dGVtIChjaGFuZ2VkIHRvIEFYUm93cykgY2FuIG9ubHkgcmVwb3J0IHRoZSB0cmVlIChBWE91dGxp
bmUpIGFzIGl0cyBwYXJlbnQuCi0gICAgICAgIGlmIChfYXhCYWNraW5nT2JqZWN0LT5pc1RyZWVJ
dGVtKCkpIHsKLSAgICAgICAgICAgIGF1dG8gcGFyZW50ID0gX2F4QmFja2luZ09iamVjdC0+cGFy
ZW50T2JqZWN0VW5pZ25vcmVkKCk7CisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+
aXNUcmVlSXRlbSgpKSB7CisgICAgICAgICAgICBhdXRvIHBhcmVudCA9IHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKICAgICAgICAgICAgIHdoaWxlIChwYXJl
bnQpIHsKICAgICAgICAgICAgICAgICBpZiAocGFyZW50LT5pc1RyZWUoKSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOwpAQCAtMjQwNSwxMyArMjQwMSwxMyBA
QCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgYXV0byBwYXJlbnQgPSBfYXhCYWNraW5nT2JqZWN0
LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKKyAgICAgICAgYXV0byBwYXJlbnQgPSBzZWxmLmF4
QmFja2luZ09iamVjdC0+cGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7CiAgICAgICAgIGlmICghcGFy
ZW50KQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgCiAgICAgICAgIC8vIEluIFdl
YktpdDEsIHRoZSBzY3JvbGwgdmlldyBpcyBwcm92aWRlZCBieSB0aGUgc3lzdGVtICh0aGUgYXR0
YWNobWVudCB2aWV3KSwgc28gdGhlIHBhcmVudAogICAgICAgICAvLyBzaG91bGQgYmUgcmVwb3J0
ZWQgZGlyZWN0bHkgYXMgc3VjaC4KLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1dlYkFyZWEoKSAm
JiBwYXJlbnQtPmlzQXR0YWNobWVudCgpKQorICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmlzV2ViQXJlYSgpICYmIHBhcmVudC0+aXNBdHRhY2htZW50KCkpCiAgICAgICAgICAgICBy
ZXR1cm4gW3BhcmVudC0+d3JhcHBlcigpIGF0dGFjaG1lbnRWaWV3XTsKICAgICAgICAgCiAgICAg
ICAgIHJldHVybiBwYXJlbnQtPndyYXBwZXIoKTsKQEAgLTI0MjYsMTMgKzI0MjIsMTMgQEAgQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgIAogICAgICAgICAvLyBU
aGUgdHJlZSdzIChBWE91dGxpbmUpIGNoaWxkcmVuIGFyZSBzdXBwb3NlZCB0byBiZSBpdHMgcm93
cyBhbmQgY29sdW1ucy4KICAgICAgICAgLy8gVGhlIEFSSUEgc3BlYyBkb2Vzbid0IGhhdmUgY29s
dW1ucywgc28gd2UganVzdCBuZWVkIHJvd3MuCi0gICAgICAgIGlmIChtX29iamVjdC0+aXNUcmVl
KCkpCisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUcmVlKCkpCiAgICAgICAg
ICAgICByZXR1cm4gW3NlbGYgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJp
bGl0eVJvd3NBdHRyaWJ1dGVdOwogICAgICAgICAKICAgICAgICAgLy8gQSB0cmVlIGl0ZW0gc2hv
dWxkIG9ubHkgZXhwb3NlIGl0cyBjb250ZW50IGFzIGl0cyBjaGlsZHJlbiAobm90IGl0cyByb3dz
KQotICAgICAgICBpZiAobV9vYmplY3QtPmlzVHJlZUl0ZW0oKSkgeworICAgICAgICBpZiAoc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmlzVHJlZUl0ZW0oKSkgewogICAgICAgICAgICAgQWNjZXNzaWJp
bGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNvbnRlbnRDb3B5OwotICAg
ICAgICAgICAgbV9vYmplY3QtPmFyaWFUcmVlSXRlbUNvbnRlbnQoY29udGVudENvcHkpOworICAg
ICAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPmFyaWFUcmVlSXRlbUNvbnRlbnQoY29udGVu
dENvcHkpOwogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoY29udGVudENvcHkp
OwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjQ0MCw3OCArMjQzNiw3OSBAQCBBTExPV19ERVBS
RUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICB9CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRDaGlsZHJlbkF0
dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5jYW5IYXZlU2VsZWN0ZWRDaGlsZHJl
bigpKSB7CisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+Y2FuSGF2ZVNlbGVjdGVk
Q2hpbGRyZW4oKSkgewogICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJp
bGl0eUNoaWxkcmVuVmVjdG9yIHNlbGVjdGVkQ2hpbGRyZW5Db3B5OwotICAgICAgICAgICAgbV9v
YmplY3QtPnNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRDaGlsZHJlbkNvcHkpOworICAgICAgICAg
ICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPnNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRDaGlsZHJl
bkNvcHkpOwogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkoc2VsZWN0ZWRDaGls
ZHJlbkNvcHkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgfQogICAgIAog
ICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVZp
c2libGVDaGlsZHJlbkF0dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc0xpc3RC
b3goKSkgeworICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTGlzdEJveCgpKSB7
CiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5W
ZWN0b3IgdmlzaWJsZUNoaWxkcmVuQ29weTsKLSAgICAgICAgICAgIG1fb2JqZWN0LT52aXNpYmxl
Q2hpbGRyZW4odmlzaWJsZUNoaWxkcmVuQ29weSk7CisgICAgICAgICAgICBzZWxmLmF4QmFja2lu
Z09iamVjdC0+dmlzaWJsZUNoaWxkcmVuKHZpc2libGVDaGlsZHJlbkNvcHkpOwogICAgICAgICAg
ICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkodmlzaWJsZUNoaWxkcmVuQ29weSk7CiAgICAgICAg
IH0KLSAgICAgICAgZWxzZSBpZiAobV9vYmplY3QtPmlzTGlzdCgpKQorCisgICAgICAgIGlmIChz
ZWxmLmF4QmFja2luZ09iamVjdC0+aXNMaXN0KCkpCiAgICAgICAgICAgICByZXR1cm4gW3NlbGYg
YWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmli
dXRlXTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICB9CiAgICAgCiAgICAg
Ci0gICAgaWYgKG1fb2JqZWN0LT5pc1dlYkFyZWEoKSkgeworICAgIGlmIChzZWxmLmF4QmFja2lu
Z09iamVjdC0+aXNXZWJBcmVhKCkpIHsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzpAIkFYTGlua1VJRWxlbWVudHMiXSkgewogICAgICAgICAgICAgQWNjZXNzaWJp
bGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGxpbmtzOwotICAgICAgICAg
ICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdD4oKm1fb2JqZWN0KS5nZXREb2N1
bWVudExpbmtzKGxpbmtzKTsKKyAgICAgICAgICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q+KCpzZWxmLmF4QmFja2luZ09iamVjdCkuZ2V0RG9jdW1lbnRMaW5rcyhsaW5rcyk7
CiAgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShsaW5rcyk7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpAIkFYTG9hZGVkIl0p
Ci0gICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOm1fb2JqZWN0LT5p
c0xvYWRlZCgpXTsKKyAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6
c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzTG9hZGVkKCldOwogICAgICAgICBpZiAoW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhMYXlvdXRDb3VudCJdKQotICAgICAgICAgICAgcmV0
dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50Om1fb2JqZWN0LT5sYXlvdXRDb3VudCgpXTsKKyAg
ICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpzZWxmLmF4QmFja2luZ09i
amVjdC0+bGF5b3V0Q291bnQoKV07CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TG9hZGluZ1Byb2dyZXNzQXR0cmlidXRlXSkKLSAgICAg
ICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTptX29iamVjdC0+ZXN0aW1h
dGVkTG9hZGluZ1Byb2dyZXNzKCldOworICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1i
ZXJXaXRoRG91YmxlOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5lc3RpbWF0ZWRMb2FkaW5nUHJvZ3Jl
c3MoKV07CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5UHJldmVudEtleWJvYXJkRE9NRXZlbnREaXNwYXRjaEF0dHJpYnV0ZV0pCi0gICAg
ICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOm1fb2JqZWN0LT5wcmV2ZW50
S2V5Ym9hcmRET01FdmVudERpc3BhdGNoKCldOworICAgICAgICAgICAgcmV0dXJuIFtOU051bWJl
ciBudW1iZXJXaXRoQm9vbDpzZWxmLmF4QmFja2luZ09iamVjdC0+cHJldmVudEtleWJvYXJkRE9N
RXZlbnREaXNwYXRjaCgpXTsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlDYXJldEJyb3dzaW5nRW5hYmxlZEF0dHJpYnV0ZV0pCi0gICAg
ICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOm1fb2JqZWN0LT5jYXJldEJy
b3dzaW5nRW5hYmxlZCgpXTsKKyAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0
aEJvb2w6c2VsZi5heEJhY2tpbmdPYmplY3QtPmNhcmV0QnJvd3NpbmdFbmFibGVkKCldOwogICAg
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVdl
YlNlc3Npb25JREF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gQChtX29iamVjdC0+c2Vz
c2lvbklEKCkpOworICAgICAgICAgICAgcmV0dXJuIEAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnNl
c3Npb25JRCgpKTsKICAgICB9CiAgICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc1RleHRDb250cm9s
KCkpIHsKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVGV4dENvbnRyb2woKSkgewog
ICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxp
dHlOdW1iZXJPZkNoYXJhY3RlcnNBdHRyaWJ1dGVdKSB7Ci0gICAgICAgICAgICBpbnQgbGVuZ3Ro
ID0gbV9vYmplY3QtPnRleHRMZW5ndGgoKTsKKyAgICAgICAgICAgIGludCBsZW5ndGggPSBzZWxm
LmF4QmFja2luZ09iamVjdC0+dGV4dExlbmd0aCgpOwogICAgICAgICAgICAgaWYgKGxlbmd0aCA8
IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgICAgIHJldHVybiBbTlNO
dW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50Omxlbmd0aF07CiAgICAgICAgIH0KICAgICAgICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2VsZWN0
ZWRUZXh0QXR0cmlidXRlXSkgewotICAgICAgICAgICAgU3RyaW5nIHNlbGVjdGVkVGV4dCA9IG1f
b2JqZWN0LT5zZWxlY3RlZFRleHQoKTsKKyAgICAgICAgICAgIFN0cmluZyBzZWxlY3RlZFRleHQg
PSBzZWxmLmF4QmFja2luZ09iamVjdC0+c2VsZWN0ZWRUZXh0KCk7CiAgICAgICAgICAgICBpZiAo
c2VsZWN0ZWRUZXh0LmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAg
ICAgICAgICByZXR1cm4gKE5TU3RyaW5nKilzZWxlY3RlZFRleHQ7CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2Vs
ZWN0ZWRUZXh0UmFuZ2VBdHRyaWJ1dGVdKSB7Ci0gICAgICAgICAgICBQbGFpblRleHRSYW5nZSB0
ZXh0UmFuZ2UgPSBtX29iamVjdC0+c2VsZWN0ZWRUZXh0UmFuZ2UoKTsKKyAgICAgICAgICAgIFBs
YWluVGV4dFJhbmdlIHRleHRSYW5nZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZWxlY3RlZFRl
eHRSYW5nZSgpOwogICAgICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOk5T
TWFrZVJhbmdlKHRleHRSYW5nZS5zdGFydCwgdGV4dFJhbmdlLmxlbmd0aCldOwogICAgICAgICB9
CiAgICAgICAgIC8vIFRPRE86IEdldCBhY3R1YWwgdmlzaWJsZSByYW5nZS4gPHJkYXI6Ly9wcm9i
bGVtLzQ3MTIxMDE+CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
IE5TQWNjZXNzaWJpbGl0eVZpc2libGVDaGFyYWN0ZXJSYW5nZUF0dHJpYnV0ZV0pCi0gICAgICAg
ICAgICByZXR1cm4gbV9vYmplY3QtPmlzUGFzc3dvcmRGaWVsZCgpID8gbmlsIDogW05TVmFsdWUg
dmFsdWVXaXRoUmFuZ2U6IE5TTWFrZVJhbmdlKDAsIG1fb2JqZWN0LT50ZXh0TGVuZ3RoKCkpXTsK
KyAgICAgICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+aXNQYXNzd29yZEZpZWxk
KCkgPyBuaWwgOiBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTogTlNNYWtlUmFuZ2UoMCwgc2VsZi5h
eEJhY2tpbmdPYmplY3QtPnRleHRMZW5ndGgoKSldOwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlJbnNlcnRpb25Qb2ludExpbmVOdW1i
ZXJBdHRyaWJ1dGVdKSB7CiAgICAgICAgICAgICAvLyBpZiBzZWxlY3Rpb25FbmQgPiAwLCB0aGVu
IHRoZXJlIGlzIHNlbGVjdGVkIHRleHQgYW5kIHRoaXMgcXVlc3Rpb24gc2hvdWxkIG5vdCBiZSBh
bnN3ZXJlZAotICAgICAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1Bhc3N3b3JkRmllbGQoKSB8fCBt
X29iamVjdC0+c2VsZWN0aW9uRW5kKCkgPiAwKQorICAgICAgICAgICAgaWYgKHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5pc1Bhc3N3b3JkRmllbGQoKSB8fCBzZWxmLmF4QmFja2luZ09iamVjdC0+c2Vs
ZWN0aW9uRW5kKCkgPiAwKQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGF1dG8gZm9jdXNlZE9iamVjdCA9IGRvd25jYXN0PEFjY2Vzc2liaWxp
dHlPYmplY3Q+KG1fb2JqZWN0LT5mb2N1c2VkVUlFbGVtZW50KCkpOwotICAgICAgICAgICAgaWYg
KGZvY3VzZWRPYmplY3QgIT0gbV9vYmplY3QpCisgICAgICAgICAgICBhdXRvIGZvY3VzZWRPYmpl
Y3QgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5T2JqZWN0PihzZWxmLmF4QmFja2luZ09iamVjdC0+
Zm9jdXNlZFVJRWxlbWVudCgpKTsKKyAgICAgICAgICAgIGlmIChmb2N1c2VkT2JqZWN0ICE9IHNl
bGYuYXhCYWNraW5nT2JqZWN0KQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBmb2N1c2VkUG9zaXRpb24gPSBmb2N1
c2VkT2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleChmb2N1c2VkT2JqZWN0LT5zZWxlY3Rp
b25TdGFydCgpLCB0cnVlKTsKLSAgICAgICAgICAgIGludCBsaW5lTnVtYmVyID0gbV9vYmplY3Qt
PmxpbmVGb3JQb3NpdGlvbihmb2N1c2VkUG9zaXRpb24pOworICAgICAgICAgICAgaW50IGxpbmVO
dW1iZXIgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+bGluZUZvclBvc2l0aW9uKGZvY3VzZWRQb3Np
dGlvbik7CiAgICAgICAgICAgICBpZiAobGluZU51bWJlciA8IDApCiAgICAgICAgICAgICAgICAg
cmV0dXJuIG5pbDsKICAgICAgICAgICAgIApAQCAtMjUyMCw0NCArMjUxNyw0NCBAQCBBTExPV19E
RVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICB9CiAgICAgCiAgICAgaWYgKFthdHRy
aWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5VVJMQXR0cmlidXRlXSkg
ewotICAgICAgICBVUkwgdXJsID0gbV9vYmplY3QtPnVybCgpOworICAgICAgICBVUkwgdXJsID0g
c2VsZi5heEJhY2tpbmdPYmplY3QtPnVybCgpOwogICAgICAgICBpZiAodXJsLmlzTnVsbCgpKQog
ICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgcmV0dXJuIChOU1VSTCopdXJsOwogICAg
IH0KIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5SW5jcmVtZW50QnV0dG9uQXR0cmlidXRlXSkgewotICAgICAgICBhdXRvIGluY3JlbWVudEJ1
dHRvbiA9IG1fb2JqZWN0LT5pbmNyZW1lbnRCdXR0b24oKTsKKyAgICAgICAgYXV0byBpbmNyZW1l
bnRCdXR0b24gPSBzZWxmLmF4QmFja2luZ09iamVjdC0+aW5jcmVtZW50QnV0dG9uKCk7CiAgICAg
ICAgIHJldHVybiBpbmNyZW1lbnRCdXR0b24gPyBpbmNyZW1lbnRCdXR0b24tPndyYXBwZXIoKSA6
IG5pbDsKICAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eURlY3JlbWVudEJ1dHRvbkF0dHJpYnV0ZV0pIHsKLSAgICAgICAgYXV0byBk
ZWNyZW1lbnRCdXR0b24gPSBtX29iamVjdC0+ZGVjcmVtZW50QnV0dG9uKCk7CisgICAgICAgIGF1
dG8gZGVjcmVtZW50QnV0dG9uID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmRlY3JlbWVudEJ1dHRv
bigpOwogICAgICAgICByZXR1cm4gZGVjcmVtZW50QnV0dG9uID8gZGVjcmVtZW50QnV0dG9uLT53
cmFwcGVyKCkgOiBuaWw7CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzogQCJBWFZpc2l0ZWQiXSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJX
aXRoQm9vbDogbV9vYmplY3QtPmlzVmlzaXRlZCgpXTsKKyAgICAgICAgcmV0dXJuIFtOU051bWJl
ciBudW1iZXJXaXRoQm9vbDogc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVmlzaXRlZCgpXTsKICAg
ICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxp
dHlUaXRsZUF0dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYgKF9heEJhY2tpbmdPYmplY3QtPmlzQXR0
YWNobWVudCgpKSB7CisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNBdHRhY2ht
ZW50KCkpIHsKICAgICAgICAgICAgIGlmIChbW1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3Np
YmlsaXR5QXR0cmlidXRlTmFtZXNdIGNvbnRhaW5zT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVRpdGxl
QXR0cmlidXRlXSkKICAgICAgICAgICAgICAgICByZXR1cm4gW1tzZWxmIGF0dGFjaG1lbnRWaWV3
XSBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5VGl0bGVBdHRyaWJ1
dGVdOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBNZXRlciBlbGVtZW50cyBzaG91
bGQgY29tbXVuaWNhdGUgdGhlaXIgY29udGVudCB2aWEgQVhWYWx1ZURlc2NyaXB0aW9uLgotICAg
ICAgICBpZiAobV9vYmplY3QtPmlzTWV0ZXIoKSkKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5pc01ldGVyKCkpCiAgICAgICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ107
CiAgICAgICAgIAogICAgICAgICAvLyBTdW1tYXJ5IGVsZW1lbnQgc2hvdWxkIHVzZSBpdHMgdGV4
dCBub2RlIGFzIEFYVGl0bGUuCi0gICAgICAgIGlmIChtX29iamVjdC0+aXNTdW1tYXJ5KCkpCi0g
ICAgICAgICAgICByZXR1cm4gbV9vYmplY3QtPnRleHRVbmRlckVsZW1lbnQoKTsKKyAgICAgICAg
aWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1N1bW1hcnkoKSkKKyAgICAgICAgICAgIHJldHVy
biBzZWxmLmF4QmFja2luZ09iamVjdC0+dGV4dFVuZGVyRWxlbWVudCgpOwogICAgICAgICAKICAg
ICAgICAgcmV0dXJuIFtzZWxmIGJhc2VBY2Nlc3NpYmlsaXR5VGl0bGVdOwogICAgIH0KICAgICAK
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlE
ZXNjcmlwdGlvbkF0dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYgKF9heEJhY2tpbmdPYmplY3QtPmlz
QXR0YWNobWVudCgpKSB7CisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNBdHRh
Y2htZW50KCkpIHsKICAgICAgICAgICAgIGlmIChbW1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nl
c3NpYmlsaXR5QXR0cmlidXRlTmFtZXNdIGNvbnRhaW5zT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eURl
c2NyaXB0aW9uQXR0cmlidXRlXSkKICAgICAgICAgICAgICAgICByZXR1cm4gW1tzZWxmIGF0dGFj
aG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5RGVz
Y3JpcHRpb25BdHRyaWJ1dGVdOwogICAgICAgICB9CkBAIC0yNTY1LDE5ICsyNTYyLDE5IEBAIEFM
TE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgIH0KICAgICAKICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlWYWx1ZUF0dHJp
YnV0ZV0pIHsKLSAgICAgICAgaWYgKF9heEJhY2tpbmdPYmplY3QtPmlzQXR0YWNobWVudCgpKSB7
CisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNBdHRhY2htZW50KCkpIHsKICAg
ICAgICAgICAgIGlmIChbW1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmlsaXR5QXR0cmli
dXRlTmFtZXNdIGNvbnRhaW5zT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRlXSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gW1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nlc3NpYmls
aXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGVdOwogICAgICAg
ICB9Ci0gICAgICAgIGlmIChtX29iamVjdC0+c3VwcG9ydHNSYW5nZVZhbHVlKCkpCi0gICAgICAg
ICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDptX29iamVjdC0+dmFsdWVGb3JS
YW5nZSgpXTsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmls
aXR5Um9sZTo6U2xpZGVyVGh1bWIpCi0gICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJl
cldpdGhGbG9hdDptX29iamVjdC0+cGFyZW50T2JqZWN0KCktPnZhbHVlRm9yUmFuZ2UoKV07Ci0g
ICAgICAgIGlmIChtX29iamVjdC0+aXNIZWFkaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gW05T
TnVtYmVyIG51bWJlcldpdGhJbnQ6bV9vYmplY3QtPmhlYWRpbmdMZXZlbCgpXTsKKyAgICAgICAg
aWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zdXBwb3J0c1JhbmdlVmFsdWUoKSkKKyAgICAgICAg
ICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnNlbGYuYXhCYWNraW5nT2JqZWN0
LT52YWx1ZUZvclJhbmdlKCldOworICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnJv
bGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpTbGlkZXJUaHVtYikKKyAgICAgICAgICAg
IHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnNlbGYuYXhCYWNraW5nT2JqZWN0LT5w
YXJlbnRPYmplY3QoKS0+dmFsdWVGb3JSYW5nZSgpXTsKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5pc0hlYWRpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVt
YmVyV2l0aEludDpzZWxmLmF4QmFja2luZ09iamVjdC0+aGVhZGluZ0xldmVsKCldOwogICAgICAg
ICAKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc0NoZWNrYm94T3JSYWRpbygpIHx8IG1fb2JqZWN0
LT5pc01lbnVJdGVtKCkgfHwgbV9vYmplY3QtPmlzU3dpdGNoKCkgfHwgbV9vYmplY3QtPmlzVG9n
Z2xlQnV0dG9uKCkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobV9vYmplY3QtPmNoZWNrYm94T3JS
YWRpb1ZhbHVlKCkpIHsKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0NoZWNr
Ym94T3JSYWRpbygpIHx8IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01lbnVJdGVtKCkgfHwgc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmlzU3dpdGNoKCkgfHwgc2VsZi5heEJhY2tpbmdPYmplY3QtPmlz
VG9nZ2xlQnV0dG9uKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmNoZWNrYm94T3JSYWRpb1ZhbHVlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQWNjZXNzaWJp
bGl0eUJ1dHRvblN0YXRlOjpPZmY6CiAgICAgICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBu
dW1iZXJXaXRoSW50OjBdOwogICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5QnV0dG9uU3Rh
dGU6Ok9uOgpAQCAtMjU4OCw2MiArMjU4NSw2MiBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVO
VEFUSU9OU19FTkQKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gcmFkaW8gZ3JvdXBz
IHJldHVybiB0aGUgc2VsZWN0ZWQgcmFkaW8gYnV0dG9uIGFzIHRoZSBBWFZhbHVlCi0gICAgICAg
IGlmIChtX29iamVjdC0+aXNSYWRpb0dyb3VwKCkpIHsKLSAgICAgICAgICAgIEFYQ29yZU9iamVj
dCogcmFkaW9CdXR0b24gPSBtX29iamVjdC0+c2VsZWN0ZWRSYWRpb0J1dHRvbigpOworICAgICAg
ICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzUmFkaW9Hcm91cCgpKSB7CisgICAgICAgICAg
ICBBWENvcmVPYmplY3QqIHJhZGlvQnV0dG9uID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnNlbGVj
dGVkUmFkaW9CdXR0b24oKTsKICAgICAgICAgICAgIGlmICghcmFkaW9CdXR0b24pCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgICAgIHJldHVybiByYWRpb0J1dHRvbi0+d3Jh
cHBlcigpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobV9vYmplY3QtPmlzVGFi
TGlzdCgpKSB7Ci0gICAgICAgICAgICBBWENvcmVPYmplY3QqIHRhYkl0ZW0gPSBtX29iamVjdC0+
c2VsZWN0ZWRUYWJJdGVtKCk7CisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNU
YWJMaXN0KCkpIHsKKyAgICAgICAgICAgIEFYQ29yZU9iamVjdCogdGFiSXRlbSA9IHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5zZWxlY3RlZFRhYkl0ZW0oKTsKICAgICAgICAgICAgIGlmICghdGFiSXRl
bSkKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICAgICAgcmV0dXJuIHRhYkl0
ZW0tPndyYXBwZXIoKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKG1fb2JqZWN0
LT5pc1RhYkl0ZW0oKSkKLSAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aElu
dDptX29iamVjdC0+aXNTZWxlY3RlZCgpXTsKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5pc1RhYkl0ZW0oKSkKKyAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0
aEludDpzZWxmLmF4QmFja2luZ09iamVjdC0+aXNTZWxlY3RlZCgpXTsKICAgICAgICAgCi0gICAg
ICAgIGlmIChtX29iamVjdC0+aXNDb2xvcldlbGwoKSkgeworICAgICAgICBpZiAoc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmlzQ29sb3JXZWxsKCkpIHsKICAgICAgICAgICAgIGludCByLCBnLCBiOwot
ICAgICAgICAgICAgbV9vYmplY3QtPmNvbG9yVmFsdWUociwgZywgYik7CisgICAgICAgICAgICBz
ZWxmLmF4QmFja2luZ09iamVjdC0+Y29sb3JWYWx1ZShyLCBnLCBiKTsKICAgICAgICAgICAgIHJl
dHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInJnYiAlNy41ZiAlNy41ZiAlNy41ZiAx
IiwgciAvIDI1NS4sIGcgLyAyNTUuLCBiIC8gMjU1Ll07CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIHJldHVybiBtX29iamVjdC0+c3RyaW5nVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5zdHJpbmdWYWx1ZSgpOwogICAgIH0KIAogICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nICopa0FYTWVudUl0ZW1NYXJrQ2hh
ckF0dHJpYnV0ZV0pIHsKICAgICAgICAgY29uc3QgdW5pY2hhciBjaCA9IDB4MjcxMzsgLy8g4pyT
IHVzZWQgb24gTWFjIGZvciBzZWxlY3RlZCBtZW51IGl0ZW1zLgotICAgICAgICByZXR1cm4gKG1f
b2JqZWN0LT5pc0NoZWNrZWQoKSkgPyBbTlNTdHJpbmcgc3RyaW5nV2l0aENoYXJhY3RlcnM6JmNo
IGxlbmd0aDoxXSA6IG5pbDsKKyAgICAgICAgcmV0dXJuIChzZWxmLmF4QmFja2luZ09iamVjdC0+
aXNDaGVja2VkKCkpID8gW05TU3RyaW5nIHN0cmluZ1dpdGhDaGFyYWN0ZXJzOiZjaCBsZW5ndGg6
MV0gOiBuaWw7CiAgICAgfQogICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6IE5TQWNjZXNzaWJpbGl0eU1pblZhbHVlQXR0cmlidXRlXSkgewogICAgICAgICAvLyBJ
bmRldGVybWluYXRlIHByb2dyZXNzIGluZGljYXRvciBzaG91bGQgcmV0dXJuIDAuCi0gICAgICAg
IGlmIChtX29iamVjdC0+YXJpYVJvbGVBdHRyaWJ1dGUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6
UHJvZ3Jlc3NJbmRpY2F0b3IgJiYgIW1fb2JqZWN0LT5oYXNBUklBVmFsdWVOb3coKSkKKyAgICAg
ICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5hcmlhUm9sZUF0dHJpYnV0ZSgpID09IEFjY2Vz
c2liaWxpdHlSb2xlOjpQcm9ncmVzc0luZGljYXRvciAmJiAhc2VsZi5heEJhY2tpbmdPYmplY3Qt
Pmhhc0FSSUFWYWx1ZU5vdygpKQogICAgICAgICAgICAgcmV0dXJuIEAwOwotICAgICAgICByZXR1
cm4gW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDptX29iamVjdC0+bWluVmFsdWVGb3JSYW5nZSgp
XTsKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6c2VsZi5heEJhY2tp
bmdPYmplY3QtPm1pblZhbHVlRm9yUmFuZ2UoKV07CiAgICAgfQogICAgIAogICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eU1heFZhbHVlQXR0cmli
dXRlXSkgewogICAgICAgICAvLyBJbmRldGVybWluYXRlIHByb2dyZXNzIGluZGljYXRvciBzaG91
bGQgcmV0dXJuIDAuCi0gICAgICAgIGlmIChtX29iamVjdC0+YXJpYVJvbGVBdHRyaWJ1dGUoKSA9
PSBBY2Nlc3NpYmlsaXR5Um9sZTo6UHJvZ3Jlc3NJbmRpY2F0b3IgJiYgIW1fb2JqZWN0LT5oYXNB
UklBVmFsdWVOb3coKSkKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5hcmlhUm9s
ZUF0dHJpYnV0ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpQcm9ncmVzc0luZGljYXRvciAmJiAh
c2VsZi5heEJhY2tpbmdPYmplY3QtPmhhc0FSSUFWYWx1ZU5vdygpKQogICAgICAgICAgICAgcmV0
dXJuIEAwOwotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDptX29iamVj
dC0+bWF4VmFsdWVGb3JSYW5nZSgpXTsKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJX
aXRoRmxvYXQ6c2VsZi5heEJhY2tpbmdPYmplY3QtPm1heFZhbHVlRm9yUmFuZ2UoKV07CiAgICAg
fQogICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNz
aWJpbGl0eUhlbHBBdHRyaWJ1dGVdKQogICAgICAgICByZXR1cm4gW3NlbGYgYmFzZUFjY2Vzc2li
aWxpdHlIZWxwVGV4dF07CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzogTlNBY2Nlc3NpYmlsaXR5Rm9jdXNlZEF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBb
TlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6IG1fb2JqZWN0LT5pc0ZvY3VzZWQoKV07CisgICAgICAg
IHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5p
c0ZvY3VzZWQoKV07CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzogTlNBY2Nlc3NpYmlsaXR5RW5hYmxlZEF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBbTlNO
dW1iZXIgbnVtYmVyV2l0aEJvb2w6IG1fb2JqZWN0LT5pc0VuYWJsZWQoKV07CisgICAgICAgIHJl
dHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0Vu
YWJsZWQoKV07CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzog
TlNBY2Nlc3NpYmlsaXR5U2l6ZUF0dHJpYnV0ZV0pIHsKLSAgICAgICAgSW50U2l6ZSBzID0gc25h
cHBlZEludFJlY3QobV9vYmplY3QtPmVsZW1lbnRSZWN0KCkpLnNpemUoKTsKKyAgICAgICAgSW50
U2l6ZSBzID0gc25hcHBlZEludFJlY3Qoc2VsZi5heEJhY2tpbmdPYmplY3QtPmVsZW1lbnRSZWN0
KCkpLnNpemUoKTsKICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFNpemU6IE5TTWFr
ZVNpemUocy53aWR0aCgpLCBzLmhlaWdodCgpKV07CiAgICAgfQogICAgIApAQCAtMjY1OSwyOSAr
MjY1NiwyOSBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAg
cmV0dXJuIFtzZWxmIHdpbmRvd0VsZW1lbnQ6YXR0cmlidXRlTmFtZV07CiAKICAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUFjY2Vzc0tleUF0dHJp
YnV0ZV0pIHsKLSAgICAgICAgQXRvbVN0cmluZyBhY2Nlc3NLZXkgPSBtX29iamVjdC0+YWNjZXNz
S2V5KCk7CisgICAgICAgIEF0b21TdHJpbmcgYWNjZXNzS2V5ID0gc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmFjY2Vzc0tleSgpOwogICAgICAgICBpZiAoYWNjZXNzS2V5LmlzTnVsbCgpKQogICAgICAg
ICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgcmV0dXJuIGFjY2Vzc0tleTsKICAgICB9CiAgICAg
CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlM
aW5rUmVsYXRpb25zaGlwVHlwZUF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBtX29iamVjdC0+
bGlua1JlbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+bGlu
a1JlbFZhbHVlKCk7CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzpOU0FjY2Vzc2liaWxpdHlUYWJzQXR0cmlidXRlXSkgewotICAgICAgICBpZiAobV9vYmplY3Qt
PmlzVGFiTGlzdCgpKSB7CisgICAgICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUYWJM
aXN0KCkpIHsKICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlD
aGlsZHJlblZlY3RvciB0YWJzQ2hpbGRyZW47Ci0gICAgICAgICAgICBtX29iamVjdC0+dGFiQ2hp
bGRyZW4odGFic0NoaWxkcmVuKTsKKyAgICAgICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT50
YWJDaGlsZHJlbih0YWJzQ2hpbGRyZW4pOwogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05T
QXJyYXkodGFic0NoaWxkcmVuKTsKICAgICAgICAgfQogICAgIH0KICAgICAKICAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUNvbnRlbnRzQXR0cmli
dXRlXSkgewogICAgICAgICAvLyBUaGUgY29udGVudHMgb2YgYSB0YWIgbGlzdCBhcmUgYWxsIHRo
ZSBjaGlsZHJlbiBleGNlcHQgdGhlIHRhYnMuCi0gICAgICAgIGlmIChtX29iamVjdC0+aXNUYWJM
aXN0KCkpIHsKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1RhYkxpc3QoKSkg
ewogICAgICAgICAgICAgYXV0byBjaGlsZHJlbiA9IHNlbGYuY2hpbGRyZW5WZWN0b3JBcnJheTsK
ICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciB0YWJzOwotICAgICAgICAgICAgbV9vYmplY3QtPnRhYkNoaWxkcmVuKHRhYnMpOworICAg
ICAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPnRhYkNoaWxkcmVuKHRhYnMpOwogICAgICAg
ICAgICAgYXV0byB0YWJzQ2hpbGRyZW4gPSBjb252ZXJ0VG9OU0FycmF5KHRhYnMpOwogCiAgICAg
ICAgICAgICBOU011dGFibGVBcnJheSAqY29udGVudHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXld
OwpAQCAtMjY5MCw3ICsyNjg3LDkgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNf
RU5ECiAgICAgICAgICAgICAgICAgICAgIFtjb250ZW50cyBhZGRPYmplY3Q6Y2hpbGRXcmFwcGVy
XTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBjb250ZW50czsKLSAgICAgICAg
fSBlbHNlIGlmIChtX29iamVjdC0+aXNTY3JvbGxWaWV3KCkpIHsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNTY3JvbGxWaWV3KCkpIHsKICAgICAgICAg
ICAgIC8vIEEgc2Nyb2xsVmlldydzIGNvbnRlbnRzIGFyZSBldmVyeXRoaW5nIGV4Y2VwdCB0aGUg
c2Nyb2xsIGJhcnMuCiAgICAgICAgICAgICBhdXRvIGNoaWxkcmVuID0gc2VsZi5jaGlsZHJlblZl
Y3RvckFycmF5OwogICAgICAgICAgICAgTlNNdXRhYmxlQXJyYXkgKmNvbnRlbnRzID0gW05TTXV0
YWJsZUFycmF5IGFycmF5XTsKQEAgLTI3MDUsOCArMjcwNCw4IEBAIEFMTE9XX0RFUFJFQ0FURURf
SU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGlmIChpczxB
Y2Nlc3NpYmlsaXR5VGFibGU+KCptX29iamVjdCkgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRh
YmxlPigqbV9vYmplY3QpLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSkgewotICAg
ICAgICBhdXRvJiB0YWJsZSA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKm1fb2JqZWN0
KTsKKyAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxlPigqc2VsZi5heEJhY2tpbmdPYmplY3Qp
ICYmIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KS5p
c0V4cG9zYWJsZVRocm91Z2hBY2Nlc3NpYmlsaXR5KCkpIHsKKyAgICAgICAgYXV0byYgdGFibGUg
PSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpzZWxmLmF4QmFja2luZ09iamVjdCk7CiAg
ICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5
Um93c0F0dHJpYnV0ZV0pCiAgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheSh0YWJs
ZS5yb3dzKCkpOwogICAgICAgICAKQEAgLTI3MjQsNyArMjcyMyw3IEBAIEFMTE9XX0RFUFJFQ0FU
RURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAKICAgICAgICAgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFJvd3NBdHRyaWJ1dGVd
KSB7CiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW5WZWN0b3Igc2VsZWN0ZWRDaGlsZHJlbkNvcHk7Ci0gICAgICAgICAgICBtX29iamVjdC0+c2Vs
ZWN0ZWRDaGlsZHJlbihzZWxlY3RlZENoaWxkcmVuQ29weSk7CisgICAgICAgICAgICBzZWxmLmF4
QmFja2luZ09iamVjdC0+c2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZENoaWxkcmVuQ29weSk7CiAg
ICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShzZWxlY3RlZENoaWxkcmVuQ29weSk7
CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0yNzcxLDggKzI3NzAsOCBAQCBBTExPV19ERVBSRUNB
VEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgICAgIHJldHVybiBAKHRhYmxlLmF4Um93
Q291bnQoKSk7CiAgICAgfQogICAgIAotICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGVDb2x1
bW4+KCptX29iamVjdCkpIHsKLSAgICAgICAgYXV0byYgY29sdW1uID0gZG93bmNhc3Q8QWNjZXNz
aWJpbGl0eVRhYmxlQ29sdW1uPigqbV9vYmplY3QpOworICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5
VGFibGVDb2x1bW4+KCpzZWxmLmF4QmFja2luZ09iamVjdCkpIHsKKyAgICAgICAgYXV0byYgY29s
dW1uID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uPigqc2VsZi5heEJhY2tpbmdP
YmplY3QpOwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNj
ZXNzaWJpbGl0eUluZGV4QXR0cmlidXRlXSkKICAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIg
bnVtYmVyV2l0aEludDpjb2x1bW4uY29sdW1uSW5kZXgoKV07CiAgICAgICAgIApAQCAtMjc4OSw4
ICsyNzg4LDggQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAg
IH0KICAgICB9CiAgICAgCi0gICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KCptX29i
amVjdCkpIHsKLSAgICAgICAgYXV0byYgY2VsbCA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJs
ZUNlbGw+KCptX29iamVjdCk7CisgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KCpz
ZWxmLmF4QmFja2luZ09iamVjdCkpIHsKKyAgICAgICAgYXV0byYgY2VsbCA9IGRvd25jYXN0PEFj
Y2Vzc2liaWxpdHlUYWJsZUNlbGw+KCpzZWxmLmF4QmFja2luZ09iamVjdCk7CiAgICAgICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Um93SW5kZXhS
YW5nZUF0dHJpYnV0ZV0pIHsKICAgICAgICAgICAgIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWdu
ZWQ+IHJvd1JhbmdlOwogICAgICAgICAgICAgY2VsbC5yb3dJbmRleFJhbmdlKHJvd1JhbmdlKTsK
QEAgLTI4MTgsMTUgKzI4MTcsMTUgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNf
RU5ECiAgICAgICAgICAgICByZXR1cm4gQChjZWxsLmF4Um93SW5kZXgoKSk7CiAgICAgfQogICAg
IAotICAgIGlmIChtX29iamVjdC0+aXNUcmVlKCkpIHsKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdP
YmplY3QtPmlzVHJlZSgpKSB7CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRSb3dzQXR0cmlidXRlXSkgewogICAgICAgICAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHNlbGVj
dGVkQ2hpbGRyZW5Db3B5OwotICAgICAgICAgICAgbV9vYmplY3QtPnNlbGVjdGVkQ2hpbGRyZW4o
c2VsZWN0ZWRDaGlsZHJlbkNvcHkpOworICAgICAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3Qt
PnNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRDaGlsZHJlbkNvcHkpOwogICAgICAgICAgICAgcmV0
dXJuIGNvbnZlcnRUb05TQXJyYXkoc2VsZWN0ZWRDaGlsZHJlbkNvcHkpOwogICAgICAgICB9CiAg
ICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5
Um93c0F0dHJpYnV0ZV0pIHsKICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciByb3dzQ29weTsKLSAgICAgICAgICAgIG1fb2JqZWN0LT5h
cmlhVHJlZVJvd3Mocm93c0NvcHkpOworICAgICAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3Qt
PmFyaWFUcmVlUm93cyhyb3dzQ29weSk7CiAgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNB
cnJheShyb3dzQ29weSk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0yODM2LDggKzI4MzUsOCBA
QCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICB9CiAgICAgCiAgICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlJbmRleEF0
dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1RyZWVJdGVtKCkpIHsKLSAgICAg
ICAgICAgIEFYQ29yZU9iamVjdCogcGFyZW50ID0gbV9vYmplY3QtPnBhcmVudE9iamVjdCgpOwor
ICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVHJlZUl0ZW0oKSkgeworICAgICAg
ICAgICAgQVhDb3JlT2JqZWN0KiBwYXJlbnQgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+cGFyZW50
T2JqZWN0KCk7CiAgICAgICAgICAgICBmb3IgKDsgcGFyZW50ICYmICFwYXJlbnQtPmlzVHJlZSgp
OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpKQogICAgICAgICAgICAgeyB9CiAgICAg
ICAgICAgICAKQEAgLTI4NTQsMjkgKzI4NTMsMzEgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1F
TlRBVElPTlNfRU5ECiAgICAgICAgICAgICAKICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAg
ICAgIH0KLSAgICAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZVJvdz4oKm1fb2JqZWN0KSkg
eworICAgICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxlUm93Pigqc2VsZi5heEJhY2tpbmdP
YmplY3QpKSB7CiAgICAgICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
Ok5TQWNjZXNzaWJpbGl0eUluZGV4QXR0cmlidXRlXSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6ZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlUm93Pigq
bV9vYmplY3QpLnJvd0luZGV4KCldOworICAgICAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIg
bnVtYmVyV2l0aEludDpkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVSb3c+KCpzZWxmLmF4QmFj
a2luZ09iamVjdCkucm93SW5kZXgoKV07CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgLy8g
VGhlIHJvd3MgdGhhdCBhcmUgY29uc2lkZXJlZCBpbnNpZGUgdGhpcyByb3cuCiAgICAgaWYgKFth
dHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlEaXNjbG9zZWRSb3dz
QXR0cmlidXRlXSkgewotICAgICAgICBpZiAobV9vYmplY3QtPmlzVHJlZUl0ZW0oKSkgeworICAg
ICAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVHJlZUl0ZW0oKSkgewogICAgICAgICAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd3ND
b3B5OwotICAgICAgICAgICAgbV9vYmplY3QtPmFyaWFUcmVlSXRlbURpc2Nsb3NlZFJvd3Mocm93
c0NvcHkpOworICAgICAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPmFyaWFUcmVlSXRlbURp
c2Nsb3NlZFJvd3Mocm93c0NvcHkpOwogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJy
YXkocm93c0NvcHkpOwotICAgICAgICB9IGVsc2UgaWYgKGlzPEFjY2Vzc2liaWxpdHlBUklBR3Jp
ZFJvdz4oKm1fb2JqZWN0KSkgeworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzPEFjY2Vzc2li
aWxpdHlBUklBR3JpZFJvdz4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KSkgewogICAgICAgICAgICAg
QWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd3NDb3B5
OwotICAgICAgICAgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93PigqbV9vYmpl
Y3QpLmRpc2Nsb3NlZFJvd3Mocm93c0NvcHkpOworICAgICAgICAgICAgZG93bmNhc3Q8QWNjZXNz
aWJpbGl0eUFSSUFHcmlkUm93Pigqc2VsZi5heEJhY2tpbmdPYmplY3QpLmRpc2Nsb3NlZFJvd3Mo
cm93c0NvcHkpOwogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJyYXkocm93c0NvcHkp
OwogICAgICAgICB9CiAgICAgfQogICAgIAogICAgIC8vIFRoZSByb3cgdGhhdCBjb250YWlucyB0
aGlzIHJvdy4gSXQgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBmaXJzdCBwYXJlbnQgdGhhdCBp
cyBhIHRyZWVpdGVtLgogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5RGlzY2xvc2VkQnlSb3dBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlmIChtX29i
amVjdC0+aXNUcmVlSXRlbSgpKSB7Ci0gICAgICAgICAgICBBWENvcmVPYmplY3QqIHBhcmVudCA9
IG1fb2JqZWN0LT5wYXJlbnRPYmplY3QoKTsKKyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5pc1RyZWVJdGVtKCkpIHsKKyAgICAgICAgICAgIEFYQ29yZU9iamVjdCogcGFyZW50ID0g
c2VsZi5heEJhY2tpbmdPYmplY3QtPnBhcmVudE9iamVjdCgpOwogICAgICAgICAgICAgd2hpbGUg
KHBhcmVudCkgewogICAgICAgICAgICAgICAgIGlmIChwYXJlbnQtPmlzVHJlZUl0ZW0oKSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOwpAQCAtMjg4Niw4ICsy
ODg3LDEwIEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAg
ICAgICAgIHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICB9IGVsc2UgaWYgKGlzPEFjY2Vzc2liaWxp
dHlBUklBR3JpZFJvdz4oKm1fb2JqZWN0KSkgewotICAgICAgICAgICAgQVhDb3JlT2JqZWN0KiBy
b3cgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c+KCptX29iamVjdCkuZGlzY2xv
c2VkQnlSb3coKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5QVJJ
QUdyaWRSb3c+KCpzZWxmLmF4QmFja2luZ09iamVjdCkpIHsKKyAgICAgICAgICAgIEFYQ29yZU9i
amVjdCogcm93ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93Pigqc2VsZi5heEJh
Y2tpbmdPYmplY3QpLmRpc2Nsb3NlZEJ5Um93KCk7CiAgICAgICAgICAgICBpZiAoIXJvdykKICAg
ICAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICAgICAgcmV0dXJuIHJvdy0+d3JhcHBl
cigpOwpAQCAtMjg5Niw2NiArMjg5OSw2NiBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFU
SU9OU19FTkQKICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eURpc2Nsb3N1cmVMZXZlbEF0dHJpYnV0ZV0pIHsKICAgICAgICAgLy8gQ29u
dmVydCBmcm9tIDEtYmFzZWQgbGV2ZWwgKGZyb20gYXJpYS1sZXZlbCBzcGVjKSB0byAwLWJhc2Vk
IGxldmVsIChNYWMpCi0gICAgICAgIGludCBsZXZlbCA9IG1fb2JqZWN0LT5oaWVyYXJjaGljYWxM
ZXZlbCgpOworICAgICAgICBpbnQgbGV2ZWwgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+aGllcmFy
Y2hpY2FsTGV2ZWwoKTsKICAgICAgICAgaWYgKGxldmVsID4gMCkKICAgICAgICAgICAgIGxldmVs
IC09IDE7CiAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpsZXZlbF07CiAg
ICAgfQogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5RGlzY2xvc2luZ0F0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVy
V2l0aEJvb2w6bV9vYmplY3QtPmlzRXhwYW5kZWQoKV07CisgICAgICAgIHJldHVybiBbTlNOdW1i
ZXIgbnVtYmVyV2l0aEJvb2w6c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzRXhwYW5kZWQoKV07CiAg
ICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc0xpc3QoKSAmJiBbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb25BdHRyaWJ1dGVdKQorICAgIGlmIChz
ZWxmLmF4QmFja2luZ09iamVjdC0+aXNMaXN0KCkgJiYgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOk5TQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uQXR0cmlidXRlXSkKICAgICAgICAgcmV0
dXJuIE5TQWNjZXNzaWJpbGl0eVZlcnRpY2FsT3JpZW50YXRpb25WYWx1ZTsKICAgICAKICAgICBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBAIkFYU2VsZWN0ZWRUZXh0TWFya2Vy
UmFuZ2UiXSkKICAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZvclNlbGVjdGlv
bl07CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogQCJBWFN0
YXJ0VGV4dE1hcmtlciJdKQotICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2li
bGVQb3NpdGlvbjpzdGFydE9mRG9jdW1lbnQoX2F4QmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKSld
OworICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjpzdGFy
dE9mRG9jdW1lbnQoc2VsZi5heEJhY2tpbmdPYmplY3QtPmRvY3VtZW50KCkpXTsKICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBAIkFYRW5kVGV4dE1hcmtlciJdKQotICAg
ICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjplbmRPZkRvY3Vt
ZW50KF9heEJhY2tpbmdPYmplY3QtPmRvY3VtZW50KCkpXTsKKyAgICAgICAgcmV0dXJuIFtzZWxm
IHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246ZW5kT2ZEb2N1bWVudChzZWxmLmF4QmFja2lu
Z09iamVjdC0+ZG9jdW1lbnQoKSldOwogICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5QmxvY2tRdW90ZUxldmVsQXR0cmlidXRlXSkKLSAg
ICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnQ6bV9vYmplY3QtPmJs
b2NrcXVvdGVMZXZlbCgpXTsKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoVW5z
aWduZWRJbnQ6c2VsZi5heEJhY2tpbmdPYmplY3QtPmJsb2NrcXVvdGVMZXZlbCgpXTsKICAgICBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhUYWJsZUxldmVsIl0pCi0gICAg
ICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDptX29iamVjdC0+dGFibGVMZXZlbCgp
XTsKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50OnNlbGYuYXhCYWNraW5n
T2JqZWN0LT50YWJsZUxldmVsKCldOwogICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eUxpbmtlZFVJRWxlbWVudHNBdHRyaWJ1dGVdKSB7
CiAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rv
ciBsaW5rZWRVSUVsZW1lbnRzOwotICAgICAgICBtX29iamVjdC0+bGlua2VkVUlFbGVtZW50cyhs
aW5rZWRVSUVsZW1lbnRzKTsKKyAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPmxpbmtlZFVJ
RWxlbWVudHMobGlua2VkVUlFbGVtZW50cyk7CiAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0Fy
cmF5KGxpbmtlZFVJRWxlbWVudHMpOwogICAgIH0KICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZEF0dHJpYnV0ZV0pCi0g
ICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6bV9vYmplY3QtPmlzU2VsZWN0
ZWQoKV07CisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6c2VsZi5heEJh
Y2tpbmdPYmplY3QtPmlzU2VsZWN0ZWQoKV07CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5QVJJQUN1cnJlbnRBdHRyaWJ1dGVdKQot
ICAgICAgICByZXR1cm4gbV9vYmplY3QtPmN1cnJlbnRWYWx1ZSgpOworICAgICAgICByZXR1cm4g
c2VsZi5heEJhY2tpbmdPYmplY3QtPmN1cnJlbnRWYWx1ZSgpOwogICAgIAotICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVNlcnZlc0FzVGl0bGVG
b3JVSUVsZW1lbnRzQXR0cmlidXRlXSAmJiBtX29iamVjdC0+aXNNZW51QnV0dG9uKCkpIHsKLSAg
ICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogdWlFbGVtZW50ID0gZG93bmNhc3Q8QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdD4oKm1fb2JqZWN0KS5tZW51Rm9yTWVudUJ1dHRvbigpOworICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVNlcnZlc0Fz
VGl0bGVGb3JVSUVsZW1lbnRzQXR0cmlidXRlXSAmJiBzZWxmLmF4QmFja2luZ09iamVjdC0+aXNN
ZW51QnV0dG9uKCkpIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogdWlFbGVtZW50ID0g
ZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdD4oKnNlbGYuYXhCYWNraW5nT2JqZWN0
KS5tZW51Rm9yTWVudUJ1dHRvbigpOwogICAgICAgICBpZiAodWlFbGVtZW50KQogICAgICAgICAg
ICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDp1aUVsZW1lbnQtPndyYXBwZXIoKV07
CiAgICAgfQogICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5VGl0bGVVSUVsZW1lbnRBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlmICghbV9v
YmplY3QtPmV4cG9zZXNUaXRsZVVJRWxlbWVudCgpKQorICAgICAgICBpZiAoIXNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5leHBvc2VzVGl0bGVVSUVsZW1lbnQoKSkKICAgICAgICAgICAgIHJldHVybiBu
aWw7CiAKLSAgICAgICAgQVhDb3JlT2JqZWN0KiBvYmogPSBtX29iamVjdC0+dGl0bGVVSUVsZW1l
bnQoKTsKKyAgICAgICAgQVhDb3JlT2JqZWN0KiBvYmogPSBzZWxmLmF4QmFja2luZ09iamVjdC0+
dGl0bGVVSUVsZW1lbnQoKTsKICAgICAgICAgaWYgKG9iaikKICAgICAgICAgICAgIHJldHVybiBv
YmotPndyYXBwZXIoKTsKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICB9CiAgICAgCiAgICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlWYWx1ZURlc2Ny
aXB0aW9uQXR0cmlidXRlXSkgewotICAgICAgICBpZiAobV9vYmplY3QtPmlzTWV0ZXIoKSkKKyAg
ICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc01ldGVyKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gW3NlbGYgdmFsdWVEZXNjcmlwdGlvbkZvck1ldGVyXTsKLSAgICAgICAgcmV0dXJuIG1f
b2JqZWN0LT52YWx1ZURlc2NyaXB0aW9uKCk7CisgICAgICAgIHJldHVybiBzZWxmLmF4QmFja2lu
Z09iamVjdC0+dmFsdWVEZXNjcmlwdGlvbigpOwogICAgIH0KICAgICAKICAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uQXR0cmli
dXRlXSkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb24gZWxlbWVudE9yaWVudGF0
aW9uID0gbV9vYmplY3QtPm9yaWVudGF0aW9uKCk7CisgICAgICAgIEFjY2Vzc2liaWxpdHlPcmll
bnRhdGlvbiBlbGVtZW50T3JpZW50YXRpb24gPSBzZWxmLmF4QmFja2luZ09iamVjdC0+b3JpZW50
YXRpb24oKTsKICAgICAgICAgaWYgKGVsZW1lbnRPcmllbnRhdGlvbiA9PSBBY2Nlc3NpYmlsaXR5
T3JpZW50YXRpb246OlZlcnRpY2FsKQogICAgICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0
eVZlcnRpY2FsT3JpZW50YXRpb25WYWx1ZTsKICAgICAgICAgaWYgKGVsZW1lbnRPcmllbnRhdGlv
biA9PSBBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb246Okhvcml6b250YWwpCkBAIC0yOTY2LDIwICsy
OTY5LDIwIEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgIH0KICAg
ICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0
eUhvcml6b250YWxTY3JvbGxCYXJBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIEFYQ29yZU9iamVjdCog
c2Nyb2xsQmFyID0gbV9vYmplY3QtPnNjcm9sbEJhcihBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb246
Okhvcml6b250YWwpOworICAgICAgICBBWENvcmVPYmplY3QqIHNjcm9sbEJhciA9IHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5zY3JvbGxCYXIoQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uOjpIb3Jpem9u
dGFsKTsKICAgICAgICAgaWYgKHNjcm9sbEJhcikKICAgICAgICAgICAgIHJldHVybiBzY3JvbGxC
YXItPndyYXBwZXIoKTsKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICB9CiAgICAgaWYgKFthdHRy
aWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlWZXJ0aWNhbFNjcm9sbEJh
ckF0dHJpYnV0ZV0pIHsKLSAgICAgICAgQVhDb3JlT2JqZWN0KiBzY3JvbGxCYXIgPSBtX29iamVj
dC0+c2Nyb2xsQmFyKEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbjo6VmVydGljYWwpOworICAgICAg
ICBBWENvcmVPYmplY3QqIHNjcm9sbEJhciA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zY3JvbGxC
YXIoQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uOjpWZXJ0aWNhbCk7CiAgICAgICAgIGlmIChzY3Jv
bGxCYXIpCiAgICAgICAgICAgICByZXR1cm4gc2Nyb2xsQmFyLT53cmFwcGVyKCk7CiAgICAgICAg
IHJldHVybiBuaWw7CiAgICAgfQogICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U29ydERpcmVjdGlvbkF0dHJpYnV0ZV0pIHsKLSAgICAg
ICAgc3dpdGNoIChtX29iamVjdC0+c29ydERpcmVjdGlvbigpKSB7CisgICAgICAgIHN3aXRjaCAo
c2VsZi5heEJhY2tpbmdPYmplY3QtPnNvcnREaXJlY3Rpb24oKSkgewogICAgICAgICBjYXNlIEFj
Y2Vzc2liaWxpdHlTb3J0RGlyZWN0aW9uOjpBc2NlbmRpbmc6CiAgICAgICAgICAgICByZXR1cm4g
TlNBY2Nlc3NpYmlsaXR5QXNjZW5kaW5nU29ydERpcmVjdGlvblZhbHVlOwogICAgICAgICBjYXNl
IEFjY2Vzc2liaWxpdHlTb3J0RGlyZWN0aW9uOjpEZXNjZW5kaW5nOgpAQCAtMjk5MCw0NCArMjk5
Myw0NCBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICB9CiAgICAg
CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlM
YW5ndWFnZUF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBtX29iamVjdC0+bGFuZ3VhZ2UoKTsK
KyAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5sYW5ndWFnZSgpOwogICAgIAog
ICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RXhw
YW5kZWRBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29s
Om1fb2JqZWN0LT5pc0V4cGFuZGVkKCldOworICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJl
cldpdGhCb29sOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0V4cGFuZGVkKCldOwogICAgIAogICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5UmVxdWly
ZWRBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOm1f
b2JqZWN0LT5pc1JlcXVpcmVkKCldOworICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldp
dGhCb29sOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1JlcXVpcmVkKCldOwogICAgIAogICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW52YWxpZEF0
dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBtX29iamVjdC0+aW52YWxpZFN0YXR1cygpOworICAg
ICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPmludmFsaWRTdGF0dXMoKTsKICAgICAK
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU93
bnNBdHRyaWJ1dGVdKSB7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciBhcmlhT3duczsKLSAgICAgICAgbV9vYmplY3QtPmFyaWFPd25zRWxl
bWVudHMoYXJpYU93bnMpOworICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+YXJpYU93bnNF
bGVtZW50cyhhcmlhT3ducyk7CiAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGFyaWFP
d25zKTsKICAgICB9CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzpOU0FjY2Vzc2liaWxpdHlBUklBUG9zSW5TZXRBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4g
W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bV9vYmplY3QtPnBvc0luU2V0KCldOworICAgICAgICBy
ZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6c2VsZi5heEJhY2tpbmdPYmplY3QtPnBvc0lu
U2V0KCldOwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3Np
YmlsaXR5QVJJQVNldFNpemVBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51
bWJlcldpdGhJbnQ6bV9vYmplY3QtPnNldFNpemUoKV07CisgICAgICAgIHJldHVybiBbTlNOdW1i
ZXIgbnVtYmVyV2l0aEludDpzZWxmLmF4QmFja2luZ09iamVjdC0+c2V0U2l6ZSgpXTsKICAgICAK
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUdy
YWJiZWRBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29s
Om1fb2JqZWN0LT5pc0FSSUFHcmFiYmVkKCldOworICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51
bWJlcldpdGhCb29sOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0FSSUFHcmFiYmVkKCldOwogICAg
IAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5
RHJvcEVmZmVjdHNBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IGRyb3BFZmZl
Y3RzID0gbV9vYmplY3QtPmRldGVybWluZUFSSUFEcm9wRWZmZWN0cygpOworICAgICAgICBWZWN0
b3I8U3RyaW5nPiBkcm9wRWZmZWN0cyA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5kZXRlcm1pbmVB
UklBRHJvcEVmZmVjdHMoKTsKICAgICAgICAgcmV0dXJuIGNvbnZlcnRTdHJpbmdzVG9OU0FycmF5
KGRyb3BFZmZlY3RzKTsKICAgICB9CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlQbGFjZWhvbGRlclZhbHVlQXR0cmlidXRlXSkKLSAg
ICAgICAgcmV0dXJuIG1fb2JqZWN0LT5wbGFjZWhvbGRlclZhbHVlKCk7CisgICAgICAgIHJldHVy
biBzZWxmLmF4QmFja2luZ09iamVjdC0+cGxhY2Vob2xkZXJWYWx1ZSgpOwogCiAgICAgaWYgKFth
dHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlWYWx1ZUF1dG9maWxs
QXZhaWxhYmxlQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIEAobV9vYmplY3QtPmlzVmFsdWVB
dXRvZmlsbEF2YWlsYWJsZSgpKTsKKyAgICAgICAgcmV0dXJuIEAoc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmlzVmFsdWVBdXRvZmlsbEF2YWlsYWJsZSgpKTsKICAgICAKICAgICBpZiAoW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVZhbHVlQXV0b2ZpbGxUeXBlQXR0
cmlidXRlXSkgewotICAgICAgICBzd2l0Y2ggKG1fb2JqZWN0LT52YWx1ZUF1dG9maWxsQnV0dG9u
VHlwZSgpKSB7CisgICAgICAgIHN3aXRjaCAoc2VsZi5heEJhY2tpbmdPYmplY3QtPnZhbHVlQXV0
b2ZpbGxCdXR0b25UeXBlKCkpIHsKICAgICAgICAgY2FzZSBBdXRvRmlsbEJ1dHRvblR5cGU6Ok5v
bmU6CiAgICAgICAgICAgICByZXR1cm4gQCJub25lIjsKICAgICAgICAgY2FzZSBBdXRvRmlsbEJ1
dHRvblR5cGU6OkNyZWRlbnRpYWxzOgpAQCAtMzA0Miw1MyArMzA0NSw1MyBAQCBBTExPV19ERVBS
RUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICB9CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlWYWx1ZUF1dG9maWxsZWRBdHRy
aWJ1dGVdKQotICAgICAgICByZXR1cm4gQChtX29iamVjdC0+aXNWYWx1ZUF1dG9maWxsZWQoKSk7
CisgICAgICAgIHJldHVybiBAKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1ZhbHVlQXV0b2ZpbGxl
ZCgpKTsKIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3Np
YmlsaXR5SGFzUG9wdXBBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJl
cldpdGhCb29sOm1fb2JqZWN0LT5oYXNQb3B1cCgpXTsKKyAgICAgICAgcmV0dXJuIFtOU051bWJl
ciBudW1iZXJXaXRoQm9vbDpzZWxmLmF4QmFja2luZ09iamVjdC0+aGFzUG9wdXAoKV07CiAKICAg
ICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eURhdGV0
aW1lVmFsdWVBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gbV9vYmplY3QtPmRhdGV0aW1lQXR0
cmlidXRlVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5kYXRl
dGltZUF0dHJpYnV0ZVZhbHVlKCk7CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlJbmxpbmVUZXh0QXR0cmlidXRlXSkKLSAgICAgICAg
cmV0dXJuIEAoX2F4QmFja2luZ09iamVjdC0+aXNJbmxpbmVUZXh0KCkpOworICAgICAgICByZXR1
cm4gQChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNJbmxpbmVUZXh0KCkpOwogICAgIAogICAgIC8v
IEFSSUEgTGl2ZSByZWdpb24gYXR0cmlidXRlcy4KICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUFSSUFMaXZlQXR0cmlidXRlXSkKLSAgICAgICAg
cmV0dXJuIG1fb2JqZWN0LT5saXZlUmVnaW9uU3RhdHVzKCk7CisgICAgICAgIHJldHVybiBzZWxm
LmF4QmFja2luZ09iamVjdC0+bGl2ZVJlZ2lvblN0YXR1cygpOwogICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5QVJJQVJlbGV2YW50QXR0cmlidXRl
XSkKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5saXZlUmVnaW9uUmVsZXZhbnQoKTsKKyAgICAg
ICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5saXZlUmVnaW9uUmVsZXZhbnQoKTsKICAg
ICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUFSSUFB
dG9taWNBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29s
Om1fb2JqZWN0LT5saXZlUmVnaW9uQXRvbWljKCldOworICAgICAgICByZXR1cm4gW05TTnVtYmVy
IG51bWJlcldpdGhCb29sOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5saXZlUmVnaW9uQXRvbWljKCld
OwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5
RWxlbWVudEJ1c3lBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldp
dGhCb29sOm1fb2JqZWN0LT5pc0J1c3koKV07CisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVt
YmVyV2l0aEJvb2w6c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzQnVzeSgpXTsKICAgICAKICAgICAv
LyBNYXRoTUwgQXR0cmlidXRlcy4KLSAgICBpZiAobV9vYmplY3QtPmlzTWF0aEVsZW1lbnQoKSkg
eworICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNNYXRoRWxlbWVudCgpKSB7CiAgICAg
ICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWF0
aFJvb3RJbmRleEF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gKG1fb2JqZWN0LT5tYXRo
Um9vdEluZGV4T2JqZWN0KCkpID8gbV9vYmplY3QtPm1hdGhSb290SW5kZXhPYmplY3QoKS0+d3Jh
cHBlcigpIDogMDsKKyAgICAgICAgICAgIHJldHVybiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPm1h
dGhSb290SW5kZXhPYmplY3QoKSkgPyBzZWxmLmF4QmFja2luZ09iamVjdC0+bWF0aFJvb3RJbmRl
eE9iamVjdCgpLT53cmFwcGVyKCkgOiAwOwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU1hdGhSb290UmFkaWNhbmRBdHRyaWJ1dGVdKQot
ICAgICAgICAgICAgcmV0dXJuIChtX29iamVjdC0+bWF0aFJhZGljYW5kT2JqZWN0KCkpID8gbV9v
YmplY3QtPm1hdGhSYWRpY2FuZE9iamVjdCgpLT53cmFwcGVyKCkgOiAwOworICAgICAgICAgICAg
cmV0dXJuIChzZWxmLmF4QmFja2luZ09iamVjdC0+bWF0aFJhZGljYW5kT2JqZWN0KCkpID8gc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPm1hdGhSYWRpY2FuZE9iamVjdCgpLT53cmFwcGVyKCkgOiAwOwog
ICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0
eU1hdGhGcmFjdGlvbk51bWVyYXRvckF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gKG1f
b2JqZWN0LT5tYXRoTnVtZXJhdG9yT2JqZWN0KCkpID8gbV9vYmplY3QtPm1hdGhOdW1lcmF0b3JP
YmplY3QoKS0+d3JhcHBlcigpIDogMDsKKyAgICAgICAgICAgIHJldHVybiAoc2VsZi5heEJhY2tp
bmdPYmplY3QtPm1hdGhOdW1lcmF0b3JPYmplY3QoKSkgPyBzZWxmLmF4QmFja2luZ09iamVjdC0+
bWF0aE51bWVyYXRvck9iamVjdCgpLT53cmFwcGVyKCkgOiAwOwogICAgICAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU1hdGhGcmFjdGlvbkRlbm9t
aW5hdG9yQXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiAobV9vYmplY3QtPm1hdGhEZW5v
bWluYXRvck9iamVjdCgpKSA/IG1fb2JqZWN0LT5tYXRoRGVub21pbmF0b3JPYmplY3QoKS0+d3Jh
cHBlcigpIDogMDsKKyAgICAgICAgICAgIHJldHVybiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPm1h
dGhEZW5vbWluYXRvck9iamVjdCgpKSA/IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoRGVub21p
bmF0b3JPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoQmFzZUF0dHJpYnV0ZV0pCi0gICAg
ICAgICAgICByZXR1cm4gKG1fb2JqZWN0LT5tYXRoQmFzZU9iamVjdCgpKSA/IG1fb2JqZWN0LT5t
YXRoQmFzZU9iamVjdCgpLT53cmFwcGVyKCkgOiAwOworICAgICAgICAgICAgcmV0dXJuIChzZWxm
LmF4QmFja2luZ09iamVjdC0+bWF0aEJhc2VPYmplY3QoKSkgPyBzZWxmLmF4QmFja2luZ09iamVj
dC0+bWF0aEJhc2VPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKICAgICAgICAgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoU3Vic2NyaXB0QXR0cmli
dXRlXSkKLSAgICAgICAgICAgIHJldHVybiAobV9vYmplY3QtPm1hdGhTdWJzY3JpcHRPYmplY3Qo
KSkgPyBtX29iamVjdC0+bWF0aFN1YnNjcmlwdE9iamVjdCgpLT53cmFwcGVyKCkgOiAwOworICAg
ICAgICAgICAgcmV0dXJuIChzZWxmLmF4QmFja2luZ09iamVjdC0+bWF0aFN1YnNjcmlwdE9iamVj
dCgpKSA/IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoU3Vic2NyaXB0T2JqZWN0KCktPndyYXBw
ZXIoKSA6IDA7CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5TWF0aFN1cGVyc2NyaXB0QXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVy
biAobV9vYmplY3QtPm1hdGhTdXBlcnNjcmlwdE9iamVjdCgpKSA/IG1fb2JqZWN0LT5tYXRoU3Vw
ZXJzY3JpcHRPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKKyAgICAgICAgICAgIHJldHVybiAoc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPm1hdGhTdXBlcnNjcmlwdE9iamVjdCgpKSA/IHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5tYXRoU3VwZXJzY3JpcHRPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKICAgICAg
ICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRo
VW5kZXJBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIChtX29iamVjdC0+bWF0aFVuZGVy
T2JqZWN0KCkpID8gbV9vYmplY3QtPm1hdGhVbmRlck9iamVjdCgpLT53cmFwcGVyKCkgOiAwOwor
ICAgICAgICAgICAgcmV0dXJuIChzZWxmLmF4QmFja2luZ09iamVjdC0+bWF0aFVuZGVyT2JqZWN0
KCkpID8gc2VsZi5heEJhY2tpbmdPYmplY3QtPm1hdGhVbmRlck9iamVjdCgpLT53cmFwcGVyKCkg
OiAwOwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eU1hdGhPdmVyQXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiAobV9vYmplY3Qt
Pm1hdGhPdmVyT2JqZWN0KCkpID8gbV9vYmplY3QtPm1hdGhPdmVyT2JqZWN0KCktPndyYXBwZXIo
KSA6IDA7CisgICAgICAgICAgICByZXR1cm4gKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoT3Zl
ck9iamVjdCgpKSA/IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoT3Zlck9iamVjdCgpLT53cmFw
cGVyKCkgOiAwOwogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eU1hdGhGZW5jZWRPcGVuQXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVy
biBtX29iamVjdC0+bWF0aEZlbmNlZE9wZW5TdHJpbmcoKTsKKyAgICAgICAgICAgIHJldHVybiBz
ZWxmLmF4QmFja2luZ09iamVjdC0+bWF0aEZlbmNlZE9wZW5TdHJpbmcoKTsKICAgICAgICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoRmVuY2Vk
Q2xvc2VBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5tYXRoRmVuY2Vk
Q2xvc2VTdHJpbmcoKTsKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+
bWF0aEZlbmNlZENsb3NlU3RyaW5nKCk7CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TWF0aExpbmVUaGlja25lc3NBdHRyaWJ1dGVdKQot
ICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50ZWdlcjptX29iamVjdC0+
bWF0aExpbmVUaGlja25lc3MoKV07CisgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJl
cldpdGhJbnRlZ2VyOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5tYXRoTGluZVRoaWNrbmVzcygpXTsK
ICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxp
dHlNYXRoUG9zdHNjcmlwdHNBdHRyaWJ1dGVdKQogICAgICAgICAgICAgcmV0dXJuIFtzZWxmIGFj
Y2Vzc2liaWxpdHlNYXRoUG9zdHNjcmlwdFBhaXJzXTsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNYXRoUHJlc2NyaXB0c0F0dHJpYnV0
ZV0pCkBAIC0zMDk2LDEzICszMDk5LDEzIEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJ
T05TX0VORAogICAgIH0KICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eUV4cGFuZGVkVGV4dFZhbHVlQXR0cmlidXRlXSkKLSAgICAgICAg
cmV0dXJuIG1fb2JqZWN0LT5leHBhbmRlZFRleHRWYWx1ZSgpOworICAgICAgICByZXR1cm4gc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmV4cGFuZGVkVGV4dFZhbHVlKCk7CiAgICAgCiAgICAgaWYgKFth
dHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlET01JZGVudGlmaWVy
QXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5pZGVudGlmaWVyQXR0cmlidXRl
KCk7CisgICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+aWRlbnRpZmllckF0dHJp
YnV0ZSgpOwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3Np
YmlsaXR5RE9NQ2xhc3NMaXN0QXR0cmlidXRlXSkgewogICAgICAgICBWZWN0b3I8U3RyaW5nPiBj
bGFzc0xpc3Q7Ci0gICAgICAgIG1fb2JqZWN0LT5jbGFzc0xpc3QoY2xhc3NMaXN0KTsKKyAgICAg
ICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPmNsYXNzTGlzdChjbGFzc0xpc3QpOwogICAgICAgICBy
ZXR1cm4gY29udmVydFN0cmluZ3NUb05TQXJyYXkoY2xhc3NMaXN0KTsKICAgICB9CiAgICAgCkBA
IC0zMTEyLDcgKzMxMTUsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQK
ICAgICAKICAgICAvLyB0aGlzIGlzIHVzZWQgb25seSBieSBEdW1wUmVuZGVyVHJlZSBmb3IgdGVz
dGluZwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWENsaWNrUG9p
bnQiXSkKLSAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFBvaW50Om1fb2JqZWN0LT5j
bGlja1BvaW50KCldOworICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUG9pbnQ6c2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmNsaWNrUG9pbnQoKV07CiAgICAgCiAgICAgLy8gVGhpcyBpcyB1
c2VkIGJ5IERSVCB0byB2ZXJpZnkgQ1NTMyBzcGVlY2ggd29ya3MuCiAgICAgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpAIkFYRFJUU3BlZWNoQXR0cmlidXRlIl0pCkBAIC0zMTIw
LDc0ICszMTIzLDc0IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAg
IAogICAgIC8vIFVzZWQgYnkgRFJUIHRvIGZpbmQgYW4gYWNjZXNzaWJsZSBub2RlIGJ5IGl0cyBl
bGVtZW50IGlkLgogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWERS
VEVsZW1lbnRJZEF0dHJpYnV0ZSJdKQotICAgICAgICByZXR1cm4gbV9vYmplY3QtPmlkZW50aWZp
ZXJBdHRyaWJ1dGUoKTsKKyAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pZGVu
dGlmaWVyQXR0cmlidXRlKCk7CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzpAIkFYQXV0b2NvbXBsZXRlVmFsdWUiXSkKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0
LT5hdXRvQ29tcGxldGVWYWx1ZSgpOworICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmF1dG9Db21wbGV0ZVZhbHVlKCk7CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVBvcHVwVmFsdWVBdHRyaWJ1dGVdKQotICAgICAgICBy
ZXR1cm4gbV9vYmplY3QtPnBvcHVwVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5wb3B1cFZhbHVlKCk7CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOkAiQVhLZXlTaG9ydGN1dHNWYWx1ZSJdKQotICAgICAgICByZXR1cm4gbV9vYmpl
Y3QtPmtleVNob3J0Y3V0c1ZhbHVlKCk7CisgICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09i
amVjdC0+a2V5U2hvcnRjdXRzVmFsdWUoKTsKICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOkAiQVhBUklBUHJlc3NlZElzUHJlc2VudCJdKQotICAgICAgICByZXR1
cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOm1fb2JqZWN0LT5wcmVzc2VkSXNQcmVzZW50KCld
OworICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOnNlbGYuYXhCYWNraW5n
T2JqZWN0LT5wcmVzc2VkSXNQcmVzZW50KCldOwogICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWElzTXVsdGlsaW5lIl0pCi0gICAgICAgIHJldHVybiBbTlNO
dW1iZXIgbnVtYmVyV2l0aEJvb2w6bV9vYmplY3QtPmFyaWFJc011bHRpbGluZSgpXTsKKyAgICAg
ICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpzZWxmLmF4QmFja2luZ09iamVjdC0+
YXJpYUlzTXVsdGlsaW5lKCldOwogICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6QCJBWFJlYWRPbmx5VmFsdWUiXSkKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5y
ZWFkT25seVZhbHVlKCk7CisgICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+cmVh
ZE9ubHlWYWx1ZSgpOwogCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpA
IkFYSXNBY3RpdmVEZXNjZW5kYW50T2ZGb2N1c2VkQ29udGFpbmVyIl0pCi0gICAgICAgIHJldHVy
biBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6bV9vYmplY3QtPmlzQWN0aXZlRGVzY2VuZGFudE9m
Rm9jdXNlZENvbnRhaW5lcigpXTsKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRo
Qm9vbDpzZWxmLmF4QmFja2luZ09iamVjdC0+aXNBY3RpdmVEZXNjZW5kYW50T2ZGb2N1c2VkQ29u
dGFpbmVyKCldOwogCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpAIkFY
RGV0YWlsc0VsZW1lbnRzIl0pIHsKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yIGRldGFpbHM7Ci0gICAgICAgIG1fb2JqZWN0LT5hcmlhRGV0
YWlsc0VsZW1lbnRzKGRldGFpbHMpOworICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+YXJp
YURldGFpbHNFbGVtZW50cyhkZXRhaWxzKTsKICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJy
YXkoZGV0YWlscyk7CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlSZWxhdGl2ZUZyYW1lQXR0cmlidXRlXSkKLSAgICAgICAgcmV0
dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6TlNSZWN0RnJvbUNHUmVjdChfYXhCYWNraW5nT2Jq
ZWN0LT5yZWxhdGl2ZUZyYW1lKCkpXTsKKyAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0
aFJlY3Q6TlNSZWN0RnJvbUNHUmVjdChzZWxmLmF4QmFja2luZ09iamVjdC0+cmVsYXRpdmVGcmFt
ZSgpKV07CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhFcnJv
ck1lc3NhZ2VFbGVtZW50cyJdKSB7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciBlcnJvck1lc3NhZ2VzOwotICAgICAgICBtX29iamVjdC0+
YXJpYUVycm9yTWVzc2FnZUVsZW1lbnRzKGVycm9yTWVzc2FnZXMpOworICAgICAgICBzZWxmLmF4
QmFja2luZ09iamVjdC0+YXJpYUVycm9yTWVzc2FnZUVsZW1lbnRzKGVycm9yTWVzc2FnZXMpOwog
ICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShlcnJvck1lc3NhZ2VzKTsKICAgICB9CiAK
ICAgICAvLyBNdWx0aS1zZWxlY3RhYmxlCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzpOU0FjY2Vzc2liaWxpdHlJc011bHRpU2VsZWN0YWJsZUF0dHJpYnV0ZV0pCi0gICAg
ICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6bV9vYmplY3QtPmlzTXVsdGlTZWxl
Y3RhYmxlKCldOworICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOnNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc011bHRpU2VsZWN0YWJsZSgpXTsKICAgICAKICAgICAvLyBEb2N1
bWVudCBhdHRyaWJ1dGVzCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlEb2N1bWVudFVSSUF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBtX29i
amVjdC0+ZG9jdW1lbnRVUkkoKTsKKyAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5kb2N1bWVudFVSSSgpOwogICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5RG9jdW1lbnRFbmNvZGluZ0F0dHJpYnV0ZV0pCi0gICAgICAg
IHJldHVybiBtX29iamVjdC0+ZG9jdW1lbnRFbmNvZGluZygpOworICAgICAgICByZXR1cm4gc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmRvY3VtZW50RW5jb2RpbmcoKTsKICAgICAKICAgICAvLyBBcmlh
IGNvbnRyb2xzIGVsZW1lbnQKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
Ok5TQWNjZXNzaWJpbGl0eUFyaWFDb250cm9sc0F0dHJpYnV0ZV0pIHsKICAgICAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGFyaWFDb250cm9sczsK
LSAgICAgICAgbV9vYmplY3QtPmFyaWFDb250cm9sc0VsZW1lbnRzKGFyaWFDb250cm9scyk7Cisg
ICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5hcmlhQ29udHJvbHNFbGVtZW50cyhhcmlhQ29u
dHJvbHMpOwogICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShhcmlhQ29udHJvbHMpOwog
ICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3Np
YmlsaXR5Rm9jdXNhYmxlQW5jZXN0b3JBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIEFYQ29yZU9iamVj
dCogb2JqZWN0ID0gbV9vYmplY3QtPmZvY3VzYWJsZUFuY2VzdG9yKCk7CisgICAgICAgIEFYQ29y
ZU9iamVjdCogb2JqZWN0ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmZvY3VzYWJsZUFuY2VzdG9y
KCk7CiAgICAgICAgIHJldHVybiBvYmplY3QgPyBvYmplY3QtPndyYXBwZXIoKSA6IG5pbDsKICAg
ICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJp
bGl0eUVkaXRhYmxlQW5jZXN0b3JBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIEFYQ29yZU9iamVjdCog
b2JqZWN0ID0gbV9vYmplY3QtPmVkaXRhYmxlQW5jZXN0b3IoKTsKKyAgICAgICAgQVhDb3JlT2Jq
ZWN0KiBvYmplY3QgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZWRpdGFibGVBbmNlc3RvcigpOwog
ICAgICAgICByZXR1cm4gb2JqZWN0ID8gb2JqZWN0LT53cmFwcGVyKCkgOiBuaWw7CiAgICAgfQog
CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlI
aWdoZXN0RWRpdGFibGVBbmNlc3RvckF0dHJpYnV0ZV0pIHsKLSAgICAgICAgQVhDb3JlT2JqZWN0
KiBvYmplY3QgPSBtX29iamVjdC0+aGlnaGVzdEVkaXRhYmxlQW5jZXN0b3IoKTsKKyAgICAgICAg
QVhDb3JlT2JqZWN0KiBvYmplY3QgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+aGlnaGVzdEVkaXRh
YmxlQW5jZXN0b3IoKTsKICAgICAgICAgcmV0dXJuIG9iamVjdCA/IG9iamVjdC0+d3JhcHBlcigp
IDogbmlsOwogICAgIH0KIApAQCAtMzIwOSw3ICszMjEyLDcgQEAgQUxMT1dfREVQUkVDQVRFRF9J
TVBMRU1FTlRBVElPTlNfRU5ECiAgICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3Rv
cmVdKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIAotICAgIGF1dG8gZm9jdXNlZE9iamVjdCA9
IF9heEJhY2tpbmdPYmplY3QtPmZvY3VzZWRVSUVsZW1lbnQoKTsKKyAgICBhdXRvIGZvY3VzZWRP
YmplY3QgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+Zm9jdXNlZFVJRWxlbWVudCgpOwogICAgIGlm
ICghZm9jdXNlZE9iamVjdCkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKQEAgLTMyMjEsOCAr
MzIyNCw4IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgIGlmICgh
W3NlbGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAg
ICAKLSAgICBfYXhCYWNraW5nT2JqZWN0LT51cGRhdGVDaGlsZHJlbklmTmVjZXNzYXJ5KCk7Ci0g
ICAgQVhDb3JlT2JqZWN0KiBheE9iamVjdCA9IF9heEJhY2tpbmdPYmplY3QtPmFjY2Vzc2liaWxp
dHlIaXRUZXN0KEludFBvaW50KHBvaW50KSk7CisgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPnVw
ZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKTsKKyAgICBBWENvcmVPYmplY3QqIGF4T2JqZWN0ID0g
c2VsZi5heEJhY2tpbmdPYmplY3QtPmFjY2Vzc2liaWxpdHlIaXRUZXN0KEludFBvaW50KHBvaW50
KSk7CiAgICAgaWYgKGF4T2JqZWN0KSB7CiAgICAgICAgIGlmIChheE9iamVjdC0+aXNBdHRhY2ht
ZW50KCkgJiYgW2F4T2JqZWN0LT53cmFwcGVyKCkgYXR0YWNobWVudFZpZXddKQogICAgICAgICAg
ICAgcmV0dXJuIFtheE9iamVjdC0+d3JhcHBlcigpIGF0dGFjaG1lbnRWaWV3XTsKQEAgLTMyNDIs
MjAgKzMyNDUsMjAgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAg
ICAgIHJldHVybiBZRVM7CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzogTlNBY2Nlc3NpYmlsaXR5Rm9jdXNlZEF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBt
X29iamVjdC0+Y2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKTsKKyAgICAgICAgcmV0dXJuIHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5jYW5TZXRGb2N1c0F0dHJpYnV0ZSgpOwogICAgIAogICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRl
XSkKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5jYW5TZXRWYWx1ZUF0dHJpYnV0ZSgpOworICAg
ICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPmNhblNldFZhbHVlQXR0cmlidXRlKCk7
CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3Np
YmlsaXR5U2VsZWN0ZWRBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gbV9vYmplY3QtPmNhblNl
dFNlbGVjdGVkQXR0cmlidXRlKCk7CisgICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVj
dC0+Y2FuU2V0U2VsZWN0ZWRBdHRyaWJ1dGUoKTsKICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZENoaWxkcmVuQXR0cmli
dXRlXSkKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5jYW5TZXRTZWxlY3RlZENoaWxkcmVuQXR0
cmlidXRlKCk7CisgICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+Y2FuU2V0U2Vs
ZWN0ZWRDaGlsZHJlbkF0dHJpYnV0ZSgpOwogICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBp
c0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RGlzY2xvc2luZ0F0dHJpYnV0ZV0KICAgICAg
ICAgfHwgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUV4cGFu
ZGVkQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5jYW5TZXRFeHBhbmRlZEF0
dHJpYnV0ZSgpOworICAgICAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPmNhblNldEV4
cGFuZGVkQXR0cmlidXRlKCk7CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFJvd3NBdHRyaWJ1dGVdKQogICAgICAgICBy
ZXR1cm4gWUVTOwpAQCAtMzI2MywxNSArMzI2NiwxNSBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExF
TUVOVEFUSU9OU19FTkQKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBO
U0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRBdHRyaWJ1dGVdIHx8CiAgICAgICAgIFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0UmFuZ2VB
dHRyaWJ1dGVdIHx8CiAgICAgICAgIFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNB
Y2Nlc3NpYmlsaXR5VmlzaWJsZUNoYXJhY3RlclJhbmdlQXR0cmlidXRlXSkKLSAgICAgICAgcmV0
dXJuIG1fb2JqZWN0LT5jYW5TZXRUZXh0UmFuZ2VBdHRyaWJ1dGVzKCk7CisgICAgICAgIHJldHVy
biBzZWxmLmF4QmFja2luZ09iamVjdC0+Y2FuU2V0VGV4dFJhbmdlQXR0cmlidXRlcygpOwogICAg
IAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5
R3JhYmJlZEF0dHJpYnV0ZV0pCiAgICAgICAgIHJldHVybiBZRVM7CiAgICAgCi0gICAgaWYgKG1f
b2JqZWN0LT5pc1dlYkFyZWEoKSAmJiBbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5UHJldmVudEtleWJvYXJkRE9NRXZlbnREaXNwYXRjaEF0dHJpYnV0ZV0pCisg
ICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1dlYkFyZWEoKSAmJiBbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5UHJldmVudEtleWJvYXJkRE9NRXZlbnRE
aXNwYXRjaEF0dHJpYnV0ZV0pCiAgICAgICAgIHJldHVybiBZRVM7CiAgICAgCi0gICAgaWYgKG1f
b2JqZWN0LT5pc1dlYkFyZWEoKSAmJiBbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5Q2FyZXRCcm93c2luZ0VuYWJsZWRBdHRyaWJ1dGVdKQorICAgIGlmIChzZWxm
LmF4QmFja2luZ09iamVjdC0+aXNXZWJBcmVhKCkgJiYgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOk5TQWNjZXNzaWJpbGl0eUNhcmV0QnJvd3NpbmdFbmFibGVkQXR0cmlidXRlXSkKICAg
ICAgICAgcmV0dXJuIFlFUzsKICAgICAKICAgICByZXR1cm4gTk87CkBAIC0zMjkzLDkgKzMyOTYs
OSBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICBpZiAoIVtzZWxm
IHVwZGF0ZU9iamVjdEJhY2tpbmdTdG9yZV0pCiAgICAgICAgIHJldHVybiBZRVM7CiAgICAgCi0g
ICAgaWYgKF9heEJhY2tpbmdPYmplY3QtPmlzQXR0YWNobWVudCgpKQorICAgIGlmIChzZWxmLmF4
QmFja2luZ09iamVjdC0+aXNBdHRhY2htZW50KCkpCiAgICAgICAgIHJldHVybiBbW3NlbGYgYXR0
YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlJc0lnbm9yZWRdOwotICAgIHJldHVybiBfYXhCYWNr
aW5nT2JqZWN0LT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCk7CisgICAgcmV0dXJuIHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCk7CiB9CiAKIEFMTE9XX0RFUFJF
Q0FURURfSU1QTEVNRU5UQVRJT05TX0JFR0lOCkBAIC0zMzA1LDcgKzMzMDgsNyBAQCBBTExPV19E
RVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICBpZiAoIVtzZWxmIHVwZGF0ZU9iamVj
dEJhY2tpbmdTdG9yZV0pCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0gICAgaWYgKG1fb2Jq
ZWN0LT5pc0F0dGFjaG1lbnQoKSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzQXR0
YWNobWVudCgpKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIAogICAgIHN0YXRpYyBOU0FycmF5
KiBwYXJhbUF0dHJzID0gbmlsOwpAQCAtMzM4NCwxOSArMzM4NywxOSBAQCBBTExPV19ERVBSRUNB
VEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgW3RlbXBBcnJheSByZWxlYXNlXTsKICAg
ICB9CiAgICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc1Bhc3N3b3JkRmllbGQoKSkKKyAgICBpZiAo
c2VsZi5heEJhY2tpbmdPYmplY3QtPmlzUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1cm4g
QFsgTlNBY2Nlc3NpYmlsaXR5VUlFbGVtZW50c0ZvclNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6
ZWRBdHRyaWJ1dGUgXTsKICAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzVGV4dENvbnRyb2woKSkK
KyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzVGV4dENvbnRyb2woKSkKICAgICAgICAg
cmV0dXJuIHRleHRQYXJhbUF0dHJzOwogICAgIAotICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFi
bGU+KCptX29iamVjdCkgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqbV9vYmplY3Qp
LmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSkKKyAgICBpZiAoaXM8QWNjZXNzaWJp
bGl0eVRhYmxlPigqc2VsZi5heEJhY2tpbmdPYmplY3QpICYmIGRvd25jYXN0PEFjY2Vzc2liaWxp
dHlUYWJsZT4oKnNlbGYuYXhCYWNraW5nT2JqZWN0KS5pc0V4cG9zYWJsZVRocm91Z2hBY2Nlc3Np
YmlsaXR5KCkpCiAgICAgICAgIHJldHVybiB0YWJsZVBhcmFtQXR0cnM7CiAgICAgCi0gICAgaWYg
KG1fb2JqZWN0LT5pc01lbnVSZWxhdGVkKCkpCisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5pc01lbnVSZWxhdGVkKCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0gICAgaWYgKG1f
b2JqZWN0LT5pc1dlYkFyZWEoKSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzV2Vi
QXJlYSgpKQogICAgICAgICByZXR1cm4gd2ViQXJlYVBhcmFtQXR0cnM7CiAgICAgCiAgICAgcmV0
dXJuIHBhcmFtQXR0cnM7CkBAIC0zNDE4LDEwICszNDIxLDEwIEBAIEFMTE9XX0RFUFJFQ0FURURf
REVDTEFSQVRJT05TX0JFR0lOCiAgICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3Rv
cmVdKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc0F0dGFjaG1l
bnQoKSkKKyAgICBpZiAoc2VsZi5heEJhY2tpbmdPYmplY3QtPmlzQXR0YWNobWVudCgpKQogICAg
ICAgICBbW3NlbGYgYXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlQZXJmb3JtQWN0aW9uOk5T
QWNjZXNzaWJpbGl0eVByZXNzQWN0aW9uXTsKICAgICBlbHNlCi0gICAgICAgIG1fb2JqZWN0LT5w
cmVzcygpOworICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+cHJlc3MoKTsKIH0KIAogLSAo
dm9pZClhY2Nlc3NpYmlsaXR5UGVyZm9ybUluY3JlbWVudEFjdGlvbgpAQCAtMzQzNiwxMCArMzQz
OSwxMCBAQCBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgogICAgIGlmICghW3Nl
bGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAg
IGlmIChtX29iamVjdC0+aXNBdHRhY2htZW50KCkpCisgICAgaWYgKHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5pc0F0dGFjaG1lbnQoKSkKICAgICAgICAgW1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBhY2Nl
c3NpYmlsaXR5UGVyZm9ybUFjdGlvbjpOU0FjY2Vzc2liaWxpdHlJbmNyZW1lbnRBY3Rpb25dOwog
ICAgIGVsc2UKLSAgICAgICAgbV9vYmplY3QtPmluY3JlbWVudCgpOworICAgICAgICBzZWxmLmF4
QmFja2luZ09iamVjdC0+aW5jcmVtZW50KCk7CiB9CiAKIC0gKHZvaWQpYWNjZXNzaWJpbGl0eVBl
cmZvcm1EZWNyZW1lbnRBY3Rpb24KQEAgLTM0NTQsMTggKzM0NTcsMTggQEAgQUxMT1dfREVQUkVD
QVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KICAgICBpZiAoIVtzZWxmIHVwZGF0ZU9iamVjdEJhY2tp
bmdTdG9yZV0pCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzQXR0
YWNobWVudCgpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNBdHRhY2htZW50KCkp
CiAgICAgICAgIFtbc2VsZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0eVBlcmZvcm1BY3Rp
b246TlNBY2Nlc3NpYmlsaXR5RGVjcmVtZW50QWN0aW9uXTsKICAgICBlbHNlCi0gICAgICAgIG1f
b2JqZWN0LT5kZWNyZW1lbnQoKTsKKyAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPmRlY3Jl
bWVudCgpOwogfQogCiBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIAogLSAodm9p
ZClhY2Nlc3NpYmlsaXR5UGVyZm9ybVNob3dNZW51QWN0aW9uCiB7Ci0gICAgaWYgKG1fb2JqZWN0
LT5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6Q29tYm9Cb3gpCi0gICAgICAgIG1f
b2JqZWN0LT5zZXRJc0V4cGFuZGVkKHRydWUpOworICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVj
dC0+cm9sZVZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OkNvbWJvQm94KQorICAgICAgICBz
ZWxmLmF4QmFja2luZ09iamVjdC0+c2V0SXNFeHBhbmRlZCh0cnVlKTsKICAgICBlbHNlIHsKICAg
ICAgICAgLy8gVGhpcyBuZWVkcyB0byBiZSBwZXJmb3JtZWQgaW4gYW4gaXRlcmF0aW9uIG9mIHRo
ZSBydW4gbG9vcCB0aGF0IGRpZCBub3Qgc3RhcnQgZnJvbSBhbiBBWCBjYWxsLgogICAgICAgICAv
LyBJZiBpdCdzIHRoZSBzYW1lIHJ1biBsb29wIGl0ZXJhdGlvbiwgdGhlIG1lbnUgb3BlbiBub3Rp
ZmljYXRpb24gd29uJ3QgYmUgc2VudApAQCAtMzQ4NCwyMSArMzQ4NywyMSBAQCBBTExPV19ERVBS
RUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
ICAgIAotICAgIGlmICghX2F4QmFja2luZ09iamVjdCkKKyAgICBpZiAoIXNlbGYuYXhCYWNraW5n
T2JqZWN0KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgUGFnZSogcGFnZSA9IF9heEJhY2tp
bmdPYmplY3QtPnBhZ2UoKTsKKyAgICBQYWdlKiBwYWdlID0gc2VsZi5heEJhY2tpbmdPYmplY3Qt
PnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBJbnRS
ZWN0IHJlY3QgPSBzbmFwcGVkSW50UmVjdChfYXhCYWNraW5nT2JqZWN0LT5lbGVtZW50UmVjdCgp
KTsKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IF9heEJhY2tpbmdPYmplY3QtPmRvY3VtZW50
RnJhbWVWaWV3KCk7CisgICAgSW50UmVjdCByZWN0ID0gc25hcHBlZEludFJlY3Qoc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmVsZW1lbnRSZWN0KCkpOworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0g
c2VsZi5heEJhY2tpbmdPYmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCk7CiAgICAgCiAgICAgLy8g
T24gV0syLCB3ZSBuZWVkIHRvIGFjY291bnQgZm9yIHRoZSBzY3JvbGwgcG9zaXRpb24gd2l0aCBy
ZWdhcmRzIHRvIHJvb3Qgdmlldy4KICAgICAvLyBPbiBXSzEsIHdlIG5lZWQgdG8gY29udmVydCBy
ZWN0IHRvIHdpbmRvdyBzcGFjZSB0byBtYXRjaCBtb3VzZSBjbGlja2luZy4KICAgICBpZiAoZnJh
bWVWaWV3KSB7CiAgICAgICAgIC8vIEZpbmQgdGhlIGFwcHJvcHJpYXRlIHNjcm9sbCB2aWV3IHRv
IHVzZSB0byBjb252ZXJ0IHRoZSBjb250ZW50cyB0byB0aGUgd2luZG93LgotICAgICAgICBmb3Ig
KGF1dG8qIHBhcmVudCA9IF9heEJhY2tpbmdPYmplY3QtPnBhcmVudE9iamVjdCgpOyBwYXJlbnQ7
IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkpIHsKKyAgICAgICAgZm9yIChhdXRvKiBw
YXJlbnQgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+cGFyZW50T2JqZWN0KCk7IHBhcmVudDsgcGFy
ZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkgewogICAgICAgICAgICAgaWYgKGlzPEFjY2Vz
c2liaWxpdHlTY3JvbGxWaWV3PigqcGFyZW50KSkgewogICAgICAgICAgICAgICAgIGlmIChhdXRv
IHNjcm9sbFZpZXcgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldz4oKnBhcmVudCku
c2Nyb2xsVmlldygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZnJhbWVWaWV3LT5wbGF0
Zm9ybVdpZGdldCgpKQpAQCAtMzUxNiwxNyArMzUxOSwxNyBAQCBBTExPV19ERVBSRUNBVEVEX0RF
Q0xBUkFUSU9OU19FTkQKIAogLSAodm9pZClhY2Nlc3NpYmlsaXR5U2Nyb2xsVG9WaXNpYmxlCiB7
Ci0gICAgbV9vYmplY3QtPnNjcm9sbFRvTWFrZVZpc2libGUoKTsKKyAgICBzZWxmLmF4QmFja2lu
Z09iamVjdC0+c2Nyb2xsVG9NYWtlVmlzaWJsZSgpOwogfQogCiAtICh2b2lkKV9hY2Nlc3NpYmls
aXR5U2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1czooTlNSZWN0KXJlY3QKIHsKLSAgICBt
X29iamVjdC0+c2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1cyhJbnRSZWN0KHJlY3QpKTsK
KyAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+c2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1
cyhJbnRSZWN0KHJlY3QpKTsKIH0KIAogLSAodm9pZClfYWNjZXNzaWJpbGl0eVNjcm9sbFRvR2xv
YmFsUG9pbnQ6KE5TUG9pbnQpcG9pbnQKIHsKLSAgICBtX29iamVjdC0+c2Nyb2xsVG9HbG9iYWxQ
b2ludChJbnRQb2ludChwb2ludCkpOworICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zY3JvbGxU
b0dsb2JhbFBvaW50KEludFBvaW50KHBvaW50KSk7CiB9CiAKIEFMTE9XX0RFUFJFQ0FURURfSU1Q
TEVNRU5UQVRJT05TX0JFR0lOCkBAIC0zNTY3LDcgKzM1NzAsNyBAQCBBTExPV19ERVBSRUNBVEVE
X0lNUExFTUVOVEFUSU9OU19FTkQKICAgICBpZiAoIVtzZWxmIHVwZGF0ZU9iamVjdEJhY2tpbmdT
dG9yZV0pCiAgICAgICAgIHJldHVybiBOTzsKICAgICAKLSAgICByZXR1cm4gbV9vYmplY3QtPnJl
cGxhY2VUZXh0SW5SYW5nZShzdHJpbmcsIFBsYWluVGV4dFJhbmdlKHJhbmdlKSk7CisgICAgcmV0
dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5yZXBsYWNlVGV4dEluUmFuZ2Uoc3RyaW5nLCBQbGFp
blRleHRSYW5nZShyYW5nZSkpOwogfQogCiAtIChCT09MKWFjY2Vzc2liaWxpdHlJbnNlcnRUZXh0
OihOU1N0cmluZyAqKXRleHQKQEAgLTM1NzUsNyArMzU3OCw3IEBAIEFMTE9XX0RFUFJFQ0FURURf
SU1QTEVNRU5UQVRJT05TX0VORAogICAgIGlmICghW3NlbGYgdXBkYXRlT2JqZWN0QmFja2luZ1N0
b3JlXSkKICAgICAgICAgcmV0dXJuIE5POwogCi0gICAgcmV0dXJuIG1fb2JqZWN0LT5pbnNlcnRU
ZXh0KHRleHQpOworICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+aW5zZXJ0VGV4dCh0
ZXh0KTsKIH0KIAogQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfQkVHSU4KQEAgLTM2
MjQsNDcgKzM2MjcsNDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAg
ICAgLy8gaGFuZGxlIHRoZSBjb21tYW5kCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzogQCJBWFNlbGVjdGVkVGV4dE1hcmtlclJhbmdlIl0pIHsKICAgICAgICAgQVNTRVJU
KHRleHRNYXJrZXJSYW5nZSk7Ci0gICAgICAgIG1fb2JqZWN0LT5zZXRTZWxlY3RlZFZpc2libGVQ
b3NpdGlvblJhbmdlKFtzZWxmIHZpc2libGVQb3NpdGlvblJhbmdlRm9yVGV4dE1hcmtlclJhbmdl
OnRleHRNYXJrZXJSYW5nZV0pOworICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+c2V0U2Vs
ZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZShbc2VsZiB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclRl
eHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdKTsKICAgICB9IGVsc2UgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5Rm9jdXNlZEF0dHJpYnV0ZV0p
IHsKICAgICAgICAgW3NlbGYgYmFzZUFjY2Vzc2liaWxpdHlTZXRGb2N1czpbbnVtYmVyIGJvb2xW
YWx1ZV1dOwogICAgIH0gZWxzZSBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBO
U0FjY2Vzc2liaWxpdHlWYWx1ZUF0dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYgKG51bWJlciAmJiBt
X29iamVjdC0+Y2FuU2V0TnVtZXJpY1ZhbHVlKCkpCi0gICAgICAgICAgICBtX29iamVjdC0+c2V0
VmFsdWUoW251bWJlciBmbG9hdFZhbHVlXSk7CisgICAgICAgIGlmIChudW1iZXIgJiYgc2VsZi5h
eEJhY2tpbmdPYmplY3QtPmNhblNldE51bWVyaWNWYWx1ZSgpKQorICAgICAgICAgICAgc2VsZi5h
eEJhY2tpbmdPYmplY3QtPnNldFZhbHVlKFtudW1iZXIgZmxvYXRWYWx1ZV0pOwogICAgICAgICBl
bHNlIGlmIChzdHJpbmcpCi0gICAgICAgICAgICBtX29iamVjdC0+c2V0VmFsdWUoc3RyaW5nKTsK
KyAgICAgICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZXRWYWx1ZShzdHJpbmcpOwogICAg
IH0gZWxzZSBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxp
dHlTZWxlY3RlZEF0dHJpYnV0ZV0pIHsKICAgICAgICAgaWYgKCFudW1iZXIpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIG1fb2JqZWN0LT5zZXRTZWxlY3RlZChbbnVtYmVyIGJvb2xWYWx1
ZV0pOworICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+c2V0U2VsZWN0ZWQoW251bWJlciBi
b29sVmFsdWVdKTsKICAgICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzogTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRDaGlsZHJlbkF0dHJpYnV0ZV0pIHsKICAgICAgICAg
aWYgKCFhcnJheSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5y
b2xlVmFsdWUoKSAhPSBBY2Nlc3NpYmlsaXR5Um9sZTo6TGlzdEJveCkKKyAgICAgICAgaWYgKHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5yb2xlVmFsdWUoKSAhPSBBY2Nlc3NpYmlsaXR5Um9sZTo6TGlz
dEJveCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6
QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHNlbGVjdGVkQ2hpbGRyZW47CiAgICAgICAgIGNv
bnZlcnRUb1ZlY3RvcihhcnJheSwgc2VsZWN0ZWRDaGlsZHJlbik7Ci0gICAgICAgIGRvd25jYXN0
PEFjY2Vzc2liaWxpdHlMaXN0Qm94PigqbV9vYmplY3QpLnNldFNlbGVjdGVkQ2hpbGRyZW4oc2Vs
ZWN0ZWRDaGlsZHJlbik7Ci0gICAgfSBlbHNlIGlmIChtX29iamVjdC0+aXNUZXh0Q29udHJvbCgp
KSB7CisgICAgICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlMaXN0Qm94Pigqc2VsZi5heEJhY2tp
bmdPYmplY3QpLnNldFNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRDaGlsZHJlbik7CisgICAgfSBl
bHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUZXh0Q29udHJvbCgpKSB7CiAgICAgICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVNlbGVj
dGVkVGV4dEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIG1fb2JqZWN0LT5zZXRTZWxlY3RlZFRl
eHQoc3RyaW5nKTsKKyAgICAgICAgICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zZXRTZWxlY3Rl
ZFRleHQoc3RyaW5nKTsKICAgICAgICAgfSBlbHNlIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkVGV4dFJhbmdlQXR0cmlidXRlXSkgewot
ICAgICAgICAgICAgbV9vYmplY3QtPnNldFNlbGVjdGVkVGV4dFJhbmdlKFBsYWluVGV4dFJhbmdl
KHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgpKTsKKyAgICAgICAgICAgIHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5zZXRTZWxlY3RlZFRleHRSYW5nZShQbGFpblRleHRSYW5nZShyYW5nZS5sb2Nh
dGlvbiwgcmFuZ2UubGVuZ3RoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoW2F0dHJpYnV0ZU5hbWUg
aXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlWaXNpYmxlQ2hhcmFjdGVyUmFuZ2VBdHRy
aWJ1dGVdKSB7Ci0gICAgICAgICAgICBtX29iamVjdC0+bWFrZVJhbmdlVmlzaWJsZShQbGFpblRl
eHRSYW5nZShyYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoKSk7CisgICAgICAgICAgICBzZWxm
LmF4QmFja2luZ09iamVjdC0+bWFrZVJhbmdlVmlzaWJsZShQbGFpblRleHRSYW5nZShyYW5nZS5s
b2NhdGlvbiwgcmFuZ2UubGVuZ3RoKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKFthdHRy
aWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlEaXNjbG9zaW5nQXR0cmli
dXRlXSB8fCBbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RXhw
YW5kZWRBdHRyaWJ1dGVdKQotICAgICAgICBtX29iamVjdC0+c2V0SXNFeHBhbmRlZChbbnVtYmVy
IGJvb2xWYWx1ZV0pOworICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+c2V0SXNFeHBhbmRl
ZChbbnVtYmVyIGJvb2xWYWx1ZV0pOwogICAgIGVsc2UgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFJvd3NBdHRyaWJ1dGVdKSB7CiAgICAg
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBzZWxl
Y3RlZFJvd3M7CiAgICAgICAgIGNvbnZlcnRUb1ZlY3RvcihhcnJheSwgc2VsZWN0ZWRSb3dzKTsK
LSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1RyZWUoKSB8fCAoaXM8QWNjZXNzaWJpbGl0eVRhYmxl
PigqbV9vYmplY3QpICYmIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKm1fb2JqZWN0KS5p
c0V4cG9zYWJsZVRocm91Z2hBY2Nlc3NpYmlsaXR5KCkpKQotICAgICAgICAgICAgbV9vYmplY3Qt
PnNldFNlbGVjdGVkUm93cyhzZWxlY3RlZFJvd3MpOworICAgICAgICBpZiAoc2VsZi5heEJhY2tp
bmdPYmplY3QtPmlzVHJlZSgpIHx8IChpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCpzZWxmLmF4QmFj
a2luZ09iamVjdCkgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqc2VsZi5heEJhY2tp
bmdPYmplY3QpLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSkpCisgICAgICAgICAg
ICBzZWxmLmF4QmFja2luZ09iamVjdC0+c2V0U2VsZWN0ZWRSb3dzKHNlbGVjdGVkUm93cyk7CiAg
ICAgfSBlbHNlIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5R3JhYmJlZEF0dHJpYnV0ZV0pCi0gICAgICAgIG1fb2JqZWN0LT5zZXRBUklBR3JhYmJlZChb
bnVtYmVyIGJvb2xWYWx1ZV0pOwotICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc1dlYkFyZWEoKSAm
JiBbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5UHJldmVudEtl
eWJvYXJkRE9NRXZlbnREaXNwYXRjaEF0dHJpYnV0ZV0pCi0gICAgICAgIG1fb2JqZWN0LT5zZXRQ
cmV2ZW50S2V5Ym9hcmRET01FdmVudERpc3BhdGNoKFtudW1iZXIgYm9vbFZhbHVlXSk7Ci0gICAg
ZWxzZSBpZiAobV9vYmplY3QtPmlzV2ViQXJlYSgpICYmIFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDYXJldEJyb3dzaW5nRW5hYmxlZEF0dHJpYnV0ZV0pCi0g
ICAgICAgIG1fb2JqZWN0LT5zZXRDYXJldEJyb3dzaW5nRW5hYmxlZChbbnVtYmVyIGJvb2xWYWx1
ZV0pOworICAgICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+c2V0QVJJQUdyYWJiZWQoW251bWJl
ciBib29sVmFsdWVdKTsKKyAgICBlbHNlIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNXZWJB
cmVhKCkgJiYgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVBy
ZXZlbnRLZXlib2FyZERPTUV2ZW50RGlzcGF0Y2hBdHRyaWJ1dGVdKQorICAgICAgICBzZWxmLmF4
QmFja2luZ09iamVjdC0+c2V0UHJldmVudEtleWJvYXJkRE9NRXZlbnREaXNwYXRjaChbbnVtYmVy
IGJvb2xWYWx1ZV0pOworICAgIGVsc2UgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1dlYkFy
ZWEoKSAmJiBbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q2Fy
ZXRCcm93c2luZ0VuYWJsZWRBdHRyaWJ1dGVdKQorICAgICAgICBzZWxmLmF4QmFja2luZ09iamVj
dC0+c2V0Q2FyZXRCcm93c2luZ0VuYWJsZWQoW251bWJlciBib29sVmFsdWVdKTsKIH0KIAogLy8g
VXNlZCB0byBzZXQgYXR0cmlidXRlcyBzeW5jaHJvbm91c2x5IG9uIGFjY2Vzc2liaWxpdHkgZWxl
bWVudHMgd2l0aGluIHRlc3RzLgpAQCAtMzcxNiw3ICszNzE5LDcgQEAgQUxMT1dfREVQUkVDQVRF
RF9JTVBMRU1FTlRBVElPTlNfRU5ECiAtIChOU0F0dHJpYnV0ZWRTdHJpbmcqKWRvQVhBdHRyaWJ1
dGVkU3RyaW5nRm9yUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UKIHsKICAgICBQbGFpblRleHRSYW5nZSB0
ZXh0UmFuZ2UgPSBQbGFpblRleHRSYW5nZShyYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoKTsK
LSAgICBSZWZQdHI8UmFuZ2U+IHdlYlJhbmdlID0gbV9vYmplY3QtPnJhbmdlRm9yUGxhaW5UZXh0
UmFuZ2UodGV4dFJhbmdlKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHdlYlJhbmdlID0gc2VsZi5heEJh
Y2tpbmdPYmplY3QtPnJhbmdlRm9yUGxhaW5UZXh0UmFuZ2UodGV4dFJhbmdlKTsKICAgICByZXR1
cm4gW3NlbGYgZG9BWEF0dHJpYnV0ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2U6W3NlbGYgdGV4
dE1hcmtlclJhbmdlRnJvbVJhbmdlOndlYlJhbmdlXSBzcGVsbENoZWNrOllFU107CiB9CiAKQEAg
LTM3MjgsNyArMzczMSw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAog
ICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgCi0gICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gX2F4QmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKTsKKyAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKTsKICAgICBpZiAo
IWRvY3VtZW50KQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIApAQCAtMzc0Niw3ICszNzQ5
LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgaWYgKCFtYXJr
ZXIpCiAgICAgICAgIHJldHVybiBOU05vdEZvdW5kOwogICAgIAotICAgIGlmIChBWE9iamVjdENh
Y2hlKiBjYWNoZSA9IG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCkpIHsKKyAgICBpZiAoQVhPYmpl
Y3RDYWNoZSogY2FjaGUgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpKSB7
CiAgICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBbc2VsZiBjaGFyYWN0
ZXJPZmZzZXRGb3JUZXh0TWFya2VyOm1hcmtlcl07CiAgICAgICAgIC8vIENyZWF0ZSBhIGNvbGxh
cHNlZCByYW5nZSBmcm9tIHRoZSBDaGFyYWN0ZXJPZmZzZXQgb2JqZWN0LgogICAgICAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gY2FjaGUtPnJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0
cyhjaGFyYWN0ZXJPZmZzZXQsIGNoYXJhY3Rlck9mZnNldCk7CkBAIC0zNzU5LDcgKzM3NjIsNyBA
QCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gX2F4QmFja2luZ09iamVj
dC0+ZG9jdW1lbnQoKTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzZWxmLmF4QmFja2luZ09i
amVjdC0+ZG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm4gbmls
OwogICAgIApAQCAtMzc2Nyw3ICszNzcwLDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRB
VElPTlNfRU5ECiAgICAgaWYgKCF0ZXh0UmFuZ2UgfHwgIXRleHRSYW5nZS0+Ym91bmRhcnlQb2lu
dHNWYWxpZCgpKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIAotICAgIGlmIChBWE9iamVjdENh
Y2hlKiBjYWNoZSA9IG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCkpIHsKKyAgICBpZiAoQVhPYmpl
Y3RDYWNoZSogY2FjaGUgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpKSB7
CiAgICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBjYWNoZS0+c3RhcnRP
ckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHRleHRSYW5nZSwgdHJ1ZSk7CiAgICAgICAgIHJl
dHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0OmNoYXJhY3Rlck9mZnNldF07
CiAgICAgfQpAQCAtMzg1NSw3ICszODU4LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRB
VElPTlNfRU5ECiAgICAgTlNSZWN0IHJlY3QgPSBOU1plcm9SZWN0OwogICAgIAogICAgIC8vIGJh
c2ljIHBhcmFtZXRlciB2YWxpZGF0aW9uCi0gICAgaWYgKCFtX29iamVjdCB8fCAhYXR0cmlidXRl
IHx8ICFwYXJhbWV0ZXIpCisgICAgaWYgKCFzZWxmLmF4QmFja2luZ09iamVjdCB8fCAhYXR0cmli
dXRlIHx8ICFwYXJhbWV0ZXIpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCiAgICAgaWYgKCFb
c2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQpAQCAtMzg3MSw4ICszODc0LDggQEAgQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgIHRleHRNYXJrZXJSYW5n
ZSA9IHBhcmFtZXRlcjsKICAgICAKICAgICBlbHNlIGlmIChbcGFyYW1ldGVyIGlzS2luZE9mQ2xh
c3M6W1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHNlbGZdXSkKLSAgICAgICAgdWlFbGVt
ZW50ID0gWyhXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciopcGFyYW1ldGVyIGFjY2Vzc2li
aWxpdHlPYmplY3RdOwotICAgIAorICAgICAgICB1aUVsZW1lbnQgPSBbKFdlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyKilwYXJhbWV0ZXIgYXhCYWNraW5nT2JqZWN0XTsKKwogICAgIGVsc2Ug
aWYgKFtwYXJhbWV0ZXIgaXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIgc2VsZl1dKQogICAgICAgICBu
dW1iZXIgPSBwYXJhbWV0ZXI7CiAgICAgCkBAIC0zOTAxLDkgKzM5MDQsOSBAQCBBTExPV19ERVBS
RUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgLy8gVG8gYmUgZGVwcmVjYXRlZC4K
ICAgICAgICAgYXV0byByZXN1bHQgPSBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1h
aW5UaHJlYWQ8VmVjdG9yPFN0cmluZz4+KFtkaWN0aW9uYXJ5LCBzZWxmXSAoKSAtPiBWZWN0b3I8
U3RyaW5nPiB7CiAgICAgICAgICAgICBhdXRvIGNyaXRlcmlhID0gYWNjZXNzaWJpbGl0eVRleHRD
cml0ZXJpYUZvclBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUoZGljdGlvbmFyeSk7Ci0gICAgICAgICAg
ICBjcml0ZXJpYS5zZWNvbmQudGV4dFJhbmdlcyA9IG1fb2JqZWN0LT5maW5kVGV4dFJhbmdlcyhj
cml0ZXJpYS5maXJzdCk7CisgICAgICAgICAgICBjcml0ZXJpYS5zZWNvbmQudGV4dFJhbmdlcyA9
IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5maW5kVGV4dFJhbmdlcyhjcml0ZXJpYS5maXJzdCk7CiAg
ICAgICAgICAgICBBU1NFUlQoY3JpdGVyaWEuc2Vjb25kLnRleHRSYW5nZXMuc2l6ZSgpIDw9IDEp
OwotICAgICAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5wZXJmb3JtVGV4dE9wZXJhdGlvbihjcml0
ZXJpYS5zZWNvbmQpOworICAgICAgICAgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5w
ZXJmb3JtVGV4dE9wZXJhdGlvbihjcml0ZXJpYS5zZWNvbmQpOwogICAgICAgICB9KTsKICAgICAg
ICAgQVNTRVJUKHJlc3VsdC5zaXplKCkgPD0gMSk7CiAgICAgICAgIGlmIChyZXN1bHQuc2l6ZSgp
ID4gMCkKQEAgLTM5MTQsNyArMzkxNyw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJ
T05TX0VORAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxp
dHlTZWFyY2hUZXh0V2l0aENyaXRlcmlhUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKICAgICAg
ICAgYXV0byBjcml0ZXJpYSA9IGFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0Q3JpdGVyaWFGb3JQYXJh
bWV0ZXJpemVkQXR0cmlidXRlKGRpY3Rpb25hcnkpOwogICAgICAgICByZXR1cm4gQWNjZXNzaWJp
bGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPE5TQXJyYXkgKj4oWyZjcml0ZXJpYSwg
c2VsZl0gKCkgLT4gTlNBcnJheSAqIHsKLSAgICAgICAgICAgIGF1dG8gcmFuZ2VzID0gbV9vYmpl
Y3QtPmZpbmRUZXh0UmFuZ2VzKGNyaXRlcmlhKTsKKyAgICAgICAgICAgIGF1dG8gcmFuZ2VzID0g
c2VsZi5heEJhY2tpbmdPYmplY3QtPmZpbmRUZXh0UmFuZ2VzKGNyaXRlcmlhKTsKICAgICAgICAg
ICAgIGlmIChyYW5nZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAg
ICAgICAgICAgICBOU011dGFibGVBcnJheSAqbWFya2VycyA9IFtOU011dGFibGVBcnJheSBhcnJh
eVdpdGhDYXBhY2l0eTpyYW5nZXMuc2l6ZSgpXTsKQEAgLTM5MjksNyArMzkzMiw3IEBAIEFMTE9X
X0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1
YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uUGFyYW1ldGVyaXplZEF0dHJp
YnV0ZV0pIHsKICAgICAgICAgYXV0byBvcGVyYXRpb25SZXN1bHQgPSBBY2Nlc3NpYmlsaXR5Ojpy
ZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8VmVjdG9yPFN0cmluZz4+KFtkaWN0aW9uYXJ5LCBz
ZWxmXSAoKSAtPiBWZWN0b3I8U3RyaW5nPiB7CiAgICAgICAgICAgICBhdXRvIHRleHRPcGVyYXRp
b24gPSBhY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvbkZvclBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUo
c2VsZiwgZGljdGlvbmFyeSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9vYmplY3QtPnBlcmZvcm1U
ZXh0T3BlcmF0aW9uKHRleHRPcGVyYXRpb24pOworICAgICAgICAgICAgcmV0dXJuIHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5wZXJmb3JtVGV4dE9wZXJhdGlvbih0ZXh0T3BlcmF0aW9uKTsKICAgICAg
ICAgfSk7CiAgICAgICAgIGlmIChvcGVyYXRpb25SZXN1bHQuaXNFbXB0eSgpKQogICAgICAgICAg
ICAgcmV0dXJuIG5pbDsKQEAgLTM5NDIsMjAgKzM5NDUsMjAgQEAgQUxMT1dfREVQUkVDQVRFRF9J
TVBMRU1FTlRBVElPTlNfRU5ECiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eVVJRWxlbWVudENvdW50Rm9yU2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXpl
ZEF0dHJpYnV0ZV0pIHsKICAgICAgICAgQWNjZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhIGNyaXRl
cmlhID0gYWNjZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhRm9yU2VhcmNoUHJlZGljYXRlUGFyYW1l
dGVyaXplZEF0dHJpYnV0ZShkaWN0aW9uYXJ5KTsKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVj
dDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJlc3VsdHM7Ci0gICAgICAgIG1fb2JqZWN0
LT5maW5kTWF0Y2hpbmdPYmplY3RzKCZjcml0ZXJpYSwgcmVzdWx0cyk7CisgICAgICAgIHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5maW5kTWF0Y2hpbmdPYmplY3RzKCZjcml0ZXJpYSwgcmVzdWx0cyk7
CiAgICAgICAgIHJldHVybiBAKHJlc3VsdHMuc2l6ZSgpKTsKICAgICB9CiAgICAgCiAgICAgaWYg
KFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVVJRWxlbWVudHNGb3JT
ZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewogICAgICAgICBBY2Nlc3Np
YmlsaXR5U2VhcmNoQ3JpdGVyaWEgY3JpdGVyaWEgPSBhY2Nlc3NpYmlsaXR5U2VhcmNoQ3JpdGVy
aWFGb3JTZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlKGRpY3Rpb25hcnkpOwog
ICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Ig
cmVzdWx0czsKLSAgICAgICAgbV9vYmplY3QtPmZpbmRNYXRjaGluZ09iamVjdHMoJmNyaXRlcmlh
LCByZXN1bHRzKTsKKyAgICAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPmZpbmRNYXRjaGluZ09i
amVjdHMoJmNyaXRlcmlhLCByZXN1bHRzKTsKICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJy
YXkocmVzdWx0cyk7CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5n
Ok5TQWNjZXNzaWJpbGl0eUVuZFRleHRNYXJrZXJGb3JCb3VuZHNQYXJhbWV0ZXJpemVkQXR0cmli
dXRlXSkgewogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21N
YWluVGhyZWFkPGlkPihbJnJlY3QsIHByb3RlY3RlZFNlbGYgPSBSZXRhaW5QdHI8V2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXI+KHNlbGYpXSAoKSAtPiBpZCB7Ci0gICAgICAgICAgICBhdXRv
KiBjYWNoZSA9IHByb3RlY3RlZFNlbGYtPm1fb2JqZWN0LT5heE9iamVjdENhY2hlKCk7CisgICAg
ICAgICAgICBhdXRvKiBjYWNoZSA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0
LT5heE9iamVjdENhY2hlKCk7CiAgICAgICAgICAgICBpZiAoIWNhY2hlKQogICAgICAgICAgICAg
ICAgIHJldHVybiBuaWw7CiAKQEAgLTM5NjcsNyArMzk3MCw3IEBAIEFMTE9XX0RFUFJFQ0FURURf
SU1QTEVNRU5UQVRJT05TX0VORAogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5n
Ok5TQWNjZXNzaWJpbGl0eVN0YXJ0VGV4dE1hcmtlckZvckJvdW5kc1BhcmFtZXRlcml6ZWRBdHRy
aWJ1dGVdKSB7CiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJv
bU1haW5UaHJlYWQ8aWQ+KFsmcmVjdCwgcHJvdGVjdGVkU2VsZiA9IFJldGFpblB0cjxXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4oc2VsZildICgpIC0+IGlkIHsKLSAgICAgICAgICAgIGF1
dG8qIGNhY2hlID0gcHJvdGVjdGVkU2VsZi0+bV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAg
ICAgICAgICAgIGF1dG8qIGNhY2hlID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmpl
Y3QtPmF4T2JqZWN0Q2FjaGUoKTsKICAgICAgICAgICAgIGlmICghY2FjaGUpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5pbDsKIApAQCAtMzk3OSwxMyArMzk4MiwxMyBAQCBBTExPV19ERVBSRUNB
VEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlMaW5lVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlclBhcmFt
ZXRlcml6ZWRBdHRyaWJ1dGVdKSB7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9z
aXRpb24gPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOnRleHRNYXJrZXJdOwot
ICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZSA9IG1fb2Jq
ZWN0LT5saW5lUmFuZ2VGb3JQb3NpdGlvbih2aXNpYmxlUG9zaXRpb24pOworICAgICAgICBWaXNp
YmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZSA9IHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5saW5lUmFuZ2VGb3JQb3NpdGlvbih2aXNpYmxlUG9zaXRpb24pOwogICAgICAgICByZXR1
cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6dmlzaWJsZVBvc2l0
aW9uUmFuZ2Uuc3RhcnQgZW5kUG9zaXRpb246dmlzaWJsZVBvc2l0aW9uUmFuZ2UuZW5kXTsKICAg
ICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5
TWlzc3BlbGxpbmdUZXh0TWFya2VyUmFuZ2VQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewogICAg
ICAgICBhdXRvIGNyaXRlcmlhID0gYWNjZXNzaWJpbGl0eU1pc3NwZWxsaW5nU2VhcmNoQ3JpdGVy
aWFGb3JQYXJhbWV0ZXJpemVkQXR0cmlidXRlKHNlbGYsIGRpY3Rpb25hcnkpOwotICAgICAgICBp
ZiAoYXV0byBtaXNzcGVsbGluZ1JhbmdlID0gbV9vYmplY3QtPmdldE1pc3NwZWxsaW5nUmFuZ2Uo
Y3JpdGVyaWEuZmlyc3QsIGNyaXRlcmlhLnNlY29uZCkpCisgICAgICAgIGlmIChhdXRvIG1pc3Nw
ZWxsaW5nUmFuZ2UgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+Z2V0TWlzc3BlbGxpbmdSYW5nZShj
cml0ZXJpYS5maXJzdCwgY3JpdGVyaWEuc2Vjb25kKSkKICAgICAgICAgICAgIHJldHVybiBbc2Vs
ZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6bWlzc3BlbGxpbmdSYW5nZV07CiAgICAgICAgIHJl
dHVybiBuaWw7CiAgICAgfQpAQCAtNDAxOSwxOSArNDAyMiwxOSBAQCBBTExPV19ERVBSRUNBVEVE
X0lNUExFTUVOVEFUSU9OU19FTkQKIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmlu
ZzpAIkFYTGluZUZvclRleHRNYXJrZXIiXSkgewogICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlz
aWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIp
XTsKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnQ6bV9vYmpl
Y3QtPmxpbmVGb3JQb3NpdGlvbih2aXNpYmxlUG9zKV07CisgICAgICAgIHJldHVybiBbTlNOdW1i
ZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50OnNlbGYuYXhCYWNraW5nT2JqZWN0LT5saW5lRm9yUG9z
aXRpb24odmlzaWJsZVBvcyldOwogICAgIH0KICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0Vx
dWFsVG9TdHJpbmc6QCJBWFRleHRNYXJrZXJSYW5nZUZvckxpbmUiXSkgewogICAgICAgICBWaXNp
YmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlOwogICAgICAgICBpZiAoW251bWJlciB1bnNpZ25lZElu
dGVnZXJWYWx1ZV0gIT0gTlNOb3RGb3VuZCkKLSAgICAgICAgICAgIHZwUmFuZ2UgPSBtX29iamVj
dC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JMaW5lKFtudW1iZXIgdW5zaWduZWRJbnRWYWx1ZV0p
OworICAgICAgICAgICAgdnBSYW5nZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT52aXNpYmxlUG9z
aXRpb25SYW5nZUZvckxpbmUoW251bWJlciB1bnNpZ25lZEludFZhbHVlXSk7CiAgICAgICAgIHJl
dHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2cFJhbmdlLnN0
YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKICAgICB9CiAgICAgCiAgICAgaWYgKFthdHRy
aWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UiXSkgewog
ICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gW3NlbGYgcmFuZ2VGb3JUZXh0TWFya2VyUmFu
Z2U6dGV4dE1hcmtlclJhbmdlXTsKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5zdHJpbmdGb3JS
YW5nZShyYW5nZSk7CisgICAgICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+c3RyaW5n
Rm9yUmFuZ2UocmFuZ2UpOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0
cmluZzpAIkFYVGV4dE1hcmtlckZvclBvc2l0aW9uIl0pIHsKQEAgLTQwNDAsNTggKzQwNDMsNTgg
QEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAgICByZXR1
cm4gbmlsOwogCiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJv
bU1haW5UaHJlYWQ8aWQ+KFsmd2ViQ29yZVBvaW50LCBwcm90ZWN0ZWRTZWxmID0gUmV0YWluUHRy
PFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPihzZWxmKV0gKCkgLT4gaWQgewotICAgICAg
ICAgICAgYXV0byogY2FjaGUgPSBwcm90ZWN0ZWRTZWxmLT5tX29iamVjdC0+YXhPYmplY3RDYWNo
ZSgpOworICAgICAgICAgICAgYXV0byogY2FjaGUgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFj
a2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpOwogICAgICAgICAgICAgaWYgKCFjYWNoZSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgICAgICAgICBDaGFyYWN0ZXJPZmZzZXQg
Y2hhcmFjdGVyT2Zmc2V0ID0gY2FjaGUtPmNoYXJhY3Rlck9mZnNldEZvclBvaW50KHdlYkNvcmVQ
b2ludCwgcHJvdGVjdGVkU2VsZi0+bV9vYmplY3QpOworICAgICAgICAgICAgQ2hhcmFjdGVyT2Zm
c2V0IGNoYXJhY3Rlck9mZnNldCA9IGNhY2hlLT5jaGFyYWN0ZXJPZmZzZXRGb3JQb2ludCh3ZWJD
b3JlUG9pbnQsIHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0KTsKICAgICAgICAg
ICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiB0ZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0OmNo
YXJhY3Rlck9mZnNldF07CiAgICAgICAgIH0pOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRl
IGlzRXF1YWxUb1N0cmluZzpAIkFYQm91bmRzRm9yVGV4dE1hcmtlclJhbmdlIl0pIHsKICAgICAg
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFtzZWxmIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRl
eHRNYXJrZXJSYW5nZV07Ci0gICAgICAgIGF1dG8gYm91bmRzID0gRmxvYXRSZWN0KG1fb2JqZWN0
LT5ib3VuZHNGb3JSYW5nZShyYW5nZSkpOworICAgICAgICBhdXRvIGJvdW5kcyA9IEZsb2F0UmVj
dChzZWxmLmF4QmFja2luZ09iamVjdC0+Ym91bmRzRm9yUmFuZ2UocmFuZ2UpKTsKICAgICAgICAg
TlNSZWN0IHJlY3QgPSBbc2VsZiBjb252ZXJ0UmVjdFRvU3BhY2U6Ym91bmRzIHNwYWNlOkFjY2Vz
c2liaWxpdHlDb252ZXJzaW9uU3BhY2U6OlNjcmVlbl07CiAgICAgICAgIHJldHVybiBbTlNWYWx1
ZSB2YWx1ZVdpdGhSZWN0OnJlY3RdOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1
YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlCb3VuZHNGb3JSYW5nZVBhcmFtZXRlcml6ZWRBdHRy
aWJ1dGVdKSB7CiAgICAgICAgIE5TUmVjdCByZWN0ID0gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVW
YWx1ZUZyb21NYWluVGhyZWFkPE5TUmVjdD4oWyZyYW5nZSwgcHJvdGVjdGVkU2VsZiA9IFJldGFp
blB0cjxXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4oc2VsZildICgpIC0+IE5TUmVjdCB7
Ci0gICAgICAgICAgICBhdXRvKiBjYWNoZSA9IHByb3RlY3RlZFNlbGYtPm1fb2JqZWN0LT5heE9i
amVjdENhY2hlKCk7CisgICAgICAgICAgICBhdXRvKiBjYWNoZSA9IHByb3RlY3RlZFNlbGYuZ2V0
KCkuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7CiAgICAgICAgICAgICBpZiAoIWNh
Y2hlKQogICAgICAgICAgICAgICAgIHJldHVybiBDR1JlY3RaZXJvOwogCi0gICAgICAgICAgICBD
aGFyYWN0ZXJPZmZzZXQgc3RhcnQgPSBjYWNoZS0+Y2hhcmFjdGVyT2Zmc2V0Rm9ySW5kZXgocmFu
Z2UubG9jYXRpb24sIHByb3RlY3RlZFNlbGYtPm1fb2JqZWN0KTsKLSAgICAgICAgICAgIENoYXJh
Y3Rlck9mZnNldCBlbmQgPSBjYWNoZS0+Y2hhcmFjdGVyT2Zmc2V0Rm9ySW5kZXgocmFuZ2UubG9j
YXRpb24rcmFuZ2UubGVuZ3RoLCBwcm90ZWN0ZWRTZWxmLT5tX29iamVjdCk7CisgICAgICAgICAg
ICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnQgPSBjYWNoZS0+Y2hhcmFjdGVyT2Zmc2V0Rm9ySW5kZXgo
cmFuZ2UubG9jYXRpb24sIHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0KTsKKyAg
ICAgICAgICAgIENoYXJhY3Rlck9mZnNldCBlbmQgPSBjYWNoZS0+Y2hhcmFjdGVyT2Zmc2V0Rm9y
SW5kZXgocmFuZ2UubG9jYXRpb24rcmFuZ2UubGVuZ3RoLCBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4
QmFja2luZ09iamVjdCk7CiAgICAgICAgICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlz
TnVsbCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBDR1JlY3RaZXJvOwogCiAgICAgICAgICAg
ICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gY2FjaGUtPnJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVy
T2Zmc2V0cyhzdGFydCwgZW5kKTsKLSAgICAgICAgICAgIGF1dG8gYm91bmRzID0gRmxvYXRSZWN0
KHByb3RlY3RlZFNlbGYtPm1fb2JqZWN0LT5ib3VuZHNGb3JSYW5nZShyYW5nZSkpOworICAgICAg
ICAgICAgYXV0byBib3VuZHMgPSBGbG9hdFJlY3QocHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tp
bmdPYmplY3QtPmJvdW5kc0ZvclJhbmdlKHJhbmdlKSk7CiAgICAgICAgICAgICByZXR1cm4gW3By
b3RlY3RlZFNlbGYgY29udmVydFJlY3RUb1NwYWNlOmJvdW5kcyBzcGFjZTpBY2Nlc3NpYmlsaXR5
Q29udmVyc2lvblNwYWNlOjpTY3JlZW5dOwogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuIFtO
U1ZhbHVlIHZhbHVlV2l0aFJlY3Q6cmVjdF07CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUg
aXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVN0cmluZ0ZvclJhbmdlUGFyYW1ldGVyaXpl
ZEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1RleHRDb250cm9sKCkpIHsK
KyAgICAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1RleHRDb250cm9sKCkpIHsKICAg
ICAgICAgICAgIFBsYWluVGV4dFJhbmdlIHBsYWluVGV4dFJhbmdlID0gUGxhaW5UZXh0UmFuZ2Uo
cmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9vYmpl
Y3QtPmRvQVhTdHJpbmdGb3JSYW5nZShwbGFpblRleHRSYW5nZSk7CisgICAgICAgICAgICByZXR1
cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPmRvQVhTdHJpbmdGb3JSYW5nZShwbGFpblRleHRSYW5n
ZSk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVW
YWx1ZUZyb21NYWluVGhyZWFkPE5TU3RyaW5nICo+KFsmcmFuZ2UsIHByb3RlY3RlZFNlbGYgPSBS
ZXRhaW5QdHI8V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+KHNlbGYpXSAoKSAtPiBOU1N0
cmluZyAqIHsKLSAgICAgICAgICAgIGF1dG8qIGNhY2hlID0gcHJvdGVjdGVkU2VsZi0+bV9vYmpl
Y3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICAgICAgICAgIGF1dG8qIGNhY2hlID0gcHJvdGVjdGVk
U2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKICAgICAgICAgICAg
IGlmICghY2FjaGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgICAgICAgICAg
Q2hhcmFjdGVyT2Zmc2V0IHN0YXJ0ID0gY2FjaGUtPmNoYXJhY3Rlck9mZnNldEZvckluZGV4KHJh
bmdlLmxvY2F0aW9uLCBwcm90ZWN0ZWRTZWxmLT5tX29iamVjdCk7Ci0gICAgICAgICAgICBDaGFy
YWN0ZXJPZmZzZXQgZW5kID0gY2FjaGUtPmNoYXJhY3Rlck9mZnNldEZvckluZGV4KHJhbmdlLmxv
Y2F0aW9uICsgcmFuZ2UubGVuZ3RoLCBwcm90ZWN0ZWRTZWxmLT5tX29iamVjdCk7CisgICAgICAg
ICAgICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnQgPSBjYWNoZS0+Y2hhcmFjdGVyT2Zmc2V0Rm9ySW5k
ZXgocmFuZ2UubG9jYXRpb24sIHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0KTsK
KyAgICAgICAgICAgIENoYXJhY3Rlck9mZnNldCBlbmQgPSBjYWNoZS0+Y2hhcmFjdGVyT2Zmc2V0
Rm9ySW5kZXgocmFuZ2UubG9jYXRpb24gKyByYW5nZS5sZW5ndGgsIHByb3RlY3RlZFNlbGYuZ2V0
KCkuYXhCYWNraW5nT2JqZWN0KTsKICAgICAgICAgICAgIGlmIChzdGFydC5pc051bGwoKSB8fCBl
bmQuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgICAgICAgICAg
UmVmUHRyPFJhbmdlPiByYW5nZSA9IGNhY2hlLT5yYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9m
ZnNldHMoc3RhcnQsIGVuZCk7Ci0gICAgICAgICAgICByZXR1cm4gcHJvdGVjdGVkU2VsZi0+bV9v
YmplY3QtPnN0cmluZ0ZvclJhbmdlKHJhbmdlKTsKKyAgICAgICAgICAgIHJldHVybiBwcm90ZWN0
ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdC0+c3RyaW5nRm9yUmFuZ2UocmFuZ2UpOwogICAg
ICAgICB9KTsKICAgICB9CiAKQEAgLTQxMjUsNyArNDEyOCw3IEBAIEFMTE9XX0RFUFJFQ0FURURf
SU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgICAgICBy
ZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbdGV4
dE1hcmtlcjEsIHRleHRNYXJrZXIyLCBwcm90ZWN0ZWRTZWxmID0gUmV0YWluUHRyPFdlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyPihzZWxmKV0gKCkgLT4gaWQgewotICAgICAgICAgICAgYXV0
byogY2FjaGUgPSBwcm90ZWN0ZWRTZWxmLT5tX29iamVjdC0+YXhPYmplY3RDYWNoZSgpOworICAg
ICAgICAgICAgYXV0byogY2FjaGUgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVj
dC0+YXhPYmplY3RDYWNoZSgpOwogICAgICAgICAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gbmlsOwogCkBAIC00MTQ4LDcgKzQxNTEsNyBAQCBBTExPV19ERVBSRUNBVEVE
X0lNUExFTUVOVEFUSU9OU19FTkQKIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmlu
ZzpAIkFYTGVmdFdvcmRUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIl0pIHsKICAgICAgICAg
cmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxpZD4oW3Rl
eHRNYXJrZXIsIHByb3RlY3RlZFNlbGYgPSBSZXRhaW5QdHI8V2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXI+KHNlbGYpXSAoKSAtPiBpZCB7Ci0gICAgICAgICAgICBhdXRvKiBjYWNoZSA9IHBy
b3RlY3RlZFNlbGYtPm1fb2JqZWN0LT5heE9iamVjdENhY2hlKCk7CisgICAgICAgICAgICBhdXRv
KiBjYWNoZSA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENh
Y2hlKCk7CiAgICAgICAgICAgICBpZiAoIWNhY2hlKQogICAgICAgICAgICAgICAgIHJldHVybiBu
aWw7CiAKQEAgLTQxNjAsNyArNDE2Myw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJ
T05TX0VORAogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhSaWdodFdv
cmRUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIl0pIHsKICAgICAgICAgcmV0dXJuIEFjY2Vz
c2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxpZD4oW3RleHRNYXJrZXIsIHBy
b3RlY3RlZFNlbGYgPSBSZXRhaW5QdHI8V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+KHNl
bGYpXSAoKSAtPiBpZCB7Ci0gICAgICAgICAgICBhdXRvKiBjYWNoZSA9IHByb3RlY3RlZFNlbGYt
Pm1fb2JqZWN0LT5heE9iamVjdENhY2hlKCk7CisgICAgICAgICAgICBhdXRvKiBjYWNoZSA9IHBy
b3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7CiAgICAg
ICAgICAgICBpZiAoIWNhY2hlKQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAKQEAgLTQx
NzIsMTkgKzQxNzUsMTkgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAK
ICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWExlZnRMaW5lVGV4dE1hcmtl
clJhbmdlRm9yVGV4dE1hcmtlciJdKSB7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxl
UG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOwot
ICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlID0gbV9vYmplY3QtPmxlZnRMaW5l
VmlzaWJsZVBvc2l0aW9uUmFuZ2UodmlzaWJsZVBvcyk7CisgICAgICAgIFZpc2libGVQb3NpdGlv
blJhbmdlIHZwUmFuZ2UgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+bGVmdExpbmVWaXNpYmxlUG9z
aXRpb25SYW5nZSh2aXNpYmxlUG9zKTsKICAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJS
YW5nZUZyb21WaXNpYmxlUG9zaXRpb25zOnZwUmFuZ2Uuc3RhcnQgZW5kUG9zaXRpb246dnBSYW5n
ZS5lbmRdOwogICAgIH0KICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6
QCJBWFJpZ2h0TGluZVRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiXSkgewogICAgICAgICBW
aXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRN
YXJrZXI6KHRleHRNYXJrZXIpXTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5n
ZSA9IG1fb2JqZWN0LT5yaWdodExpbmVWaXNpYmxlUG9zaXRpb25SYW5nZSh2aXNpYmxlUG9zKTsK
KyAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5yaWdodExpbmVWaXNpYmxlUG9zaXRpb25SYW5nZSh2aXNpYmxlUG9zKTsKICAgICAgICAg
cmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zOnZwUmFuZ2Uu
c3RhcnQgZW5kUG9zaXRpb246dnBSYW5nZS5lbmRdOwogICAgIH0KIAogICAgIGlmIChbYXR0cmli
dXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYU2VudGVuY2VUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFy
a2VyIl0pIHsKICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9t
TWFpblRocmVhZDxpZD4oW3RleHRNYXJrZXIsIHByb3RlY3RlZFNlbGYgPSBSZXRhaW5QdHI8V2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+KHNlbGYpXSAoKSAtPiBpZCB7Ci0gICAgICAgICAg
ICBhdXRvKiBjYWNoZSA9IHByb3RlY3RlZFNlbGYtPm1fb2JqZWN0LT5heE9iamVjdENhY2hlKCk7
CisgICAgICAgICAgICBhdXRvKiBjYWNoZSA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5n
T2JqZWN0LT5heE9iamVjdENhY2hlKCk7CiAgICAgICAgICAgICBpZiAoIWNhY2hlKQogICAgICAg
ICAgICAgICAgIHJldHVybiBuaWw7CiAKQEAgLTQxOTYsNyArNDE5OSw3IEBAIEFMTE9XX0RFUFJF
Q0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRv
U3RyaW5nOkAiQVhQYXJhZ3JhcGhUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIl0pIHsKICAg
ICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxp
ZD4oW3RleHRNYXJrZXIsIHByb3RlY3RlZFNlbGYgPSBSZXRhaW5QdHI8V2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXI+KHNlbGYpXSAoKSAtPiBpZCB7Ci0gICAgICAgICAgICBhdXRvKiBjYWNo
ZSA9IHByb3RlY3RlZFNlbGYtPm1fb2JqZWN0LT5heE9iamVjdENhY2hlKCk7CisgICAgICAgICAg
ICBhdXRvKiBjYWNoZSA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0LT5heE9i
amVjdENhY2hlKCk7CiAgICAgICAgICAgICBpZiAoIWNhY2hlKQogICAgICAgICAgICAgICAgIHJl
dHVybiBuaWw7CiAKQEAgLTQyMDgsNyArNDIxMSw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVN
RU5UQVRJT05TX0VORAogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhO
ZXh0V29yZEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pIHsKICAgICAgICAgcmV0dXJuIEFj
Y2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxpZD4oW3RleHRNYXJrZXIs
IHByb3RlY3RlZFNlbGYgPSBSZXRhaW5QdHI8V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+
KHNlbGYpXSAoKSAtPiBpZCB7Ci0gICAgICAgICAgICBhdXRvKiBjYWNoZSA9IHByb3RlY3RlZFNl
bGYtPm1fb2JqZWN0LT5heE9iamVjdENhY2hlKCk7CisgICAgICAgICAgICBhdXRvKiBjYWNoZSA9
IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7CiAg
ICAgICAgICAgICBpZiAoIWNhY2hlKQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAKQEAg
LTQyMjAsNyArNDIyMyw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAog
CiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhQcmV2aW91c1dvcmRTdGFy
dFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pIHsKICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxp
dHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxpZD4oW3RleHRNYXJrZXIsIHByb3RlY3Rl
ZFNlbGYgPSBSZXRhaW5QdHI8V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+KHNlbGYpXSAo
KSAtPiBpZCB7Ci0gICAgICAgICAgICBhdXRvKiBjYWNoZSA9IHByb3RlY3RlZFNlbGYtPm1fb2Jq
ZWN0LT5heE9iamVjdENhY2hlKCk7CisgICAgICAgICAgICBhdXRvKiBjYWNoZSA9IHByb3RlY3Rl
ZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7CiAgICAgICAgICAg
ICBpZiAoIWNhY2hlKQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAKQEAgLTQyMzIsMTcg
KzQyMzUsMTcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAKICAgICBp
ZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWE5leHRMaW5lRW5kVGV4dE1hcmtlckZv
clRleHRNYXJrZXIiXSkgewogICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtz
ZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKLSAgICAgICAg
cmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246bV9vYmplY3QtPm5leHRM
aW5lRW5kUG9zaXRpb24odmlzaWJsZVBvcyldOworICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1h
cmtlckZvclZpc2libGVQb3NpdGlvbjpzZWxmLmF4QmFja2luZ09iamVjdC0+bmV4dExpbmVFbmRQ
b3NpdGlvbih2aXNpYmxlUG9zKV07CiAgICAgfQogICAgIAogICAgIGlmIChbYXR0cmlidXRlIGlz
RXF1YWxUb1N0cmluZzpAIkFYUHJldmlvdXNMaW5lU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtl
ciJdKSB7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJs
ZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOwotICAgICAgICByZXR1cm4gW3Nl
bGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjptX29iamVjdC0+cHJldmlvdXNMaW5lU3Rh
cnRQb3NpdGlvbih2aXNpYmxlUG9zKV07CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2Vy
Rm9yVmlzaWJsZVBvc2l0aW9uOnNlbGYuYXhCYWNraW5nT2JqZWN0LT5wcmV2aW91c0xpbmVTdGFy
dFBvc2l0aW9uKHZpc2libGVQb3MpXTsKICAgICB9CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGUg
aXNFcXVhbFRvU3RyaW5nOkAiQVhOZXh0U2VudGVuY2VFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtl
ciJdKSB7CiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1h
aW5UaHJlYWQ8aWQ+KFt0ZXh0TWFya2VyLCBwcm90ZWN0ZWRTZWxmID0gUmV0YWluUHRyPFdlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPihzZWxmKV0gKCkgLT4gaWQgewotICAgICAgICAgICAg
YXV0byogY2FjaGUgPSBwcm90ZWN0ZWRTZWxmLT5tX29iamVjdC0+YXhPYmplY3RDYWNoZSgpOwor
ICAgICAgICAgICAgYXV0byogY2FjaGUgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09i
amVjdC0+YXhPYmplY3RDYWNoZSgpOwogICAgICAgICAgICAgaWYgKCFjYWNoZSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICAgICAgCkBAIC00MjU0LDcgKzQyNTcsNyBAQCBB
TExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIAogICAgIGlmIChbYXR0cmlidXRl
IGlzRXF1YWxUb1N0cmluZzpAIkFYUHJldmlvdXNTZW50ZW5jZVN0YXJ0VGV4dE1hcmtlckZvclRl
eHRNYXJrZXIiXSkgewogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1
ZUZyb21NYWluVGhyZWFkPGlkPihbdGV4dE1hcmtlciwgcHJvdGVjdGVkU2VsZiA9IFJldGFpblB0
cjxXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4oc2VsZildICgpIC0+IGlkIHsKLSAgICAg
ICAgICAgIGF1dG8qIGNhY2hlID0gcHJvdGVjdGVkU2VsZi0+bV9vYmplY3QtPmF4T2JqZWN0Q2Fj
aGUoKTsKKyAgICAgICAgICAgIGF1dG8qIGNhY2hlID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJh
Y2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKICAgICAgICAgICAgIGlmICghY2FjaGUpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKIApAQCAtNDI2Niw3ICs0MjY5LDcgQEAgQUxMT1df
REVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0Vx
dWFsVG9TdHJpbmc6QCJBWE5leHRQYXJhZ3JhcGhFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJd
KSB7CiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5U
aHJlYWQ8aWQ+KFt0ZXh0TWFya2VyLCBwcm90ZWN0ZWRTZWxmID0gUmV0YWluUHRyPFdlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyPihzZWxmKV0gKCkgLT4gaWQgewotICAgICAgICAgICAgYXV0
byogY2FjaGUgPSBwcm90ZWN0ZWRTZWxmLT5tX29iamVjdC0+YXhPYmplY3RDYWNoZSgpOworICAg
ICAgICAgICAgYXV0byogY2FjaGUgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVj
dC0+YXhPYmplY3RDYWNoZSgpOwogICAgICAgICAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gbmlsOwogCkBAIC00Mjc4LDcgKzQyODEsNyBAQCBBTExPV19ERVBSRUNBVEVE
X0lNUExFTUVOVEFUSU9OU19FTkQKIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmlu
ZzpAIkFYUHJldmlvdXNQYXJhZ3JhcGhTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pIHsK
ICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVh
ZDxpZD4oW3RleHRNYXJrZXIsIHByb3RlY3RlZFNlbGYgPSBSZXRhaW5QdHI8V2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXI+KHNlbGYpXSAoKSAtPiBpZCB7Ci0gICAgICAgICAgICBhdXRvKiBj
YWNoZSA9IHByb3RlY3RlZFNlbGYtPm1fb2JqZWN0LT5heE9iamVjdENhY2hlKCk7CisgICAgICAg
ICAgICBhdXRvKiBjYWNoZSA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0LT5h
eE9iamVjdENhY2hlKCk7CiAgICAgICAgICAgICBpZiAoIWNhY2hlKQogICAgICAgICAgICAgICAg
IHJldHVybiBuaWw7CiAKQEAgLTQyOTAsNyArNDI5Myw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1Q
TEVNRU5UQVRJT05TX0VORAogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAi
QVhTdHlsZVRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiXSkgewogICAgICAgICBWaXNpYmxl
UG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6
KHRleHRNYXJrZXIpXTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IG1f
b2JqZWN0LT5zdHlsZVJhbmdlRm9yUG9zaXRpb24odmlzaWJsZVBvcyk7CisgICAgICAgIFZpc2li
bGVQb3NpdGlvblJhbmdlIHZwUmFuZ2UgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+c3R5bGVSYW5n
ZUZvclBvc2l0aW9uKHZpc2libGVQb3MpOwogICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtl
clJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6dnBSYW5nZS5zdGFydCBlbmRQb3NpdGlvbjp2cFJh
bmdlLmVuZF07CiAgICAgfQogICAgIApAQCAtNDMzMSwxMSArNDMzNCwxMSBAQCBBTExPV19ERVBS
RUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChpczxB
Y2Nlc3NpYmlsaXR5VGFibGU+KCptX29iamVjdCkgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRh
YmxlPigqbV9vYmplY3QpLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSkgeworICAg
IGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCpzZWxmLmF4QmFja2luZ09iamVjdCkgJiYgZG93
bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqc2VsZi5heEJhY2tpbmdPYmplY3QpLmlzRXhwb3Nh
YmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSkgewogICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q2VsbEZvckNvbHVtbkFuZFJvd1BhcmFtZXRlcml6
ZWRBdHRyaWJ1dGVdKSB7CiAgICAgICAgICAgICBpZiAoYXJyYXkgPT0gbmlsIHx8IFthcnJheSBj
b3VudF0gIT0gMikKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICAgICAgQWNj
ZXNzaWJpbGl0eVRhYmxlQ2VsbCogY2VsbCA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4o
Km1fb2JqZWN0KS5jZWxsRm9yQ29sdW1uQW5kUm93KFtbYXJyYXkgb2JqZWN0QXRJbmRleDowXSB1
bnNpZ25lZEludFZhbHVlXSwgW1thcnJheSBvYmplY3RBdEluZGV4OjFdIHVuc2lnbmVkSW50VmFs
dWVdKTsKKyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqIGNlbGwgPSBkb3duY2Fz
dDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpzZWxmLmF4QmFja2luZ09iamVjdCkuY2VsbEZvckNvbHVt
bkFuZFJvdyhbW2FycmF5IG9iamVjdEF0SW5kZXg6MF0gdW5zaWduZWRJbnRWYWx1ZV0sIFtbYXJy
YXkgb2JqZWN0QXRJbmRleDoxXSB1bnNpZ25lZEludFZhbHVlXSk7CiAgICAgICAgICAgICBpZiAo
IWNlbGwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgICAgIApAQCAtNDM0
MywzNCArNDM0NiwzNCBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAg
ICAgICAgfQogICAgIH0KICAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzVGV4dENvbnRyb2woKSkg
eworICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUZXh0Q29udHJvbCgpKSB7CiAgICAg
ICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzogKE5TU3RyaW5nICopa0FYTGluZUZv
ckluZGV4UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgICAgIGludCBsaW5lTnVt
YmVyID0gbV9vYmplY3QtPmRvQVhMaW5lRm9ySW5kZXgoW251bWJlciBpbnRWYWx1ZV0pOworICAg
ICAgICAgICAgaW50IGxpbmVOdW1iZXIgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9BWExpbmVG
b3JJbmRleChbbnVtYmVyIGludFZhbHVlXSk7CiAgICAgICAgICAgICBpZiAobGluZU51bWJlciA8
IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgICAgIHJldHVybiBbTlNO
dW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50OmxpbmVOdW1iZXJdOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6IChOU1N0cmluZyAq
KWtBWFJhbmdlRm9yTGluZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7Ci0gICAgICAgICAgICBQ
bGFpblRleHRSYW5nZSB0ZXh0UmFuZ2UgPSBtX29iamVjdC0+ZG9BWFJhbmdlRm9yTGluZShbbnVt
YmVyIGludFZhbHVlXSk7CisgICAgICAgICAgICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2UgPSBz
ZWxmLmF4QmFja2luZ09iamVjdC0+ZG9BWFJhbmdlRm9yTGluZShbbnVtYmVyIGludFZhbHVlXSk7
CiAgICAgICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6IE5TTWFrZVJhbmdl
KHRleHRSYW5nZS5zdGFydCwgdGV4dFJhbmdlLmxlbmd0aCldOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6IChOU1N0cmluZyopa0FY
U3RyaW5nRm9yUmFuZ2VQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewogICAgICAgICAgICAgUGxh
aW5UZXh0UmFuZ2UgcGxhaW5UZXh0UmFuZ2UgPSBQbGFpblRleHRSYW5nZShyYW5nZS5sb2NhdGlv
biwgcmFuZ2UubGVuZ3RoKTsKLSAgICAgICAgICAgIHJldHVybiByYW5nZVNldCA/IChpZCkobV9v
YmplY3QtPmRvQVhTdHJpbmdGb3JSYW5nZShwbGFpblRleHRSYW5nZSkpIDogbmlsOworICAgICAg
ICAgICAgcmV0dXJuIHJhbmdlU2V0ID8gKGlkKShzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9BWFN0
cmluZ0ZvclJhbmdlKHBsYWluVGV4dFJhbmdlKSkgOiBuaWw7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzogKE5TU3RyaW5nKilrQVhS
YW5nZUZvclBvc2l0aW9uUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKICAgICAgICAgICAgIGlm
ICghcG9pbnRTZXQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgICAgIElu
dFBvaW50IHdlYkNvcmVQb2ludCA9IEludFBvaW50KHBvaW50KTsKLSAgICAgICAgICAgIFBsYWlu
VGV4dFJhbmdlIHRleHRSYW5nZSA9IG1fb2JqZWN0LT5kb0FYUmFuZ2VGb3JQb3NpdGlvbih3ZWJD
b3JlUG9pbnQpOworICAgICAgICAgICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlID0gc2VsZi5h
eEJhY2tpbmdPYmplY3QtPmRvQVhSYW5nZUZvclBvc2l0aW9uKHdlYkNvcmVQb2ludCk7CiAgICAg
ICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6IE5TTWFrZVJhbmdlKHRleHRS
YW5nZS5zdGFydCwgdGV4dFJhbmdlLmxlbmd0aCldOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6IChOU1N0cmluZyopa0FYUmFuZ2VG
b3JJbmRleFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7Ci0gICAgICAgICAgICBQbGFpblRleHRS
YW5nZSB0ZXh0UmFuZ2UgPSBtX29iamVjdC0+ZG9BWFJhbmdlRm9ySW5kZXgoW251bWJlciBpbnRW
YWx1ZV0pOworICAgICAgICAgICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlID0gc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmRvQVhSYW5nZUZvckluZGV4KFtudW1iZXIgaW50VmFsdWVdKTsKICAgICAg
ICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTogTlNNYWtlUmFuZ2UodGV4dFJh
bmdlLnN0YXJ0LCB0ZXh0UmFuZ2UubGVuZ3RoKV07CiAgICAgICAgIH0KICAgICAgICAgCkBAIC00
Mzc4LDcgKzQzODEsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAg
ICAgICAgICAgIGlmICghcmFuZ2VTZXQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAg
ICAgICAgICAgIFBsYWluVGV4dFJhbmdlIHBsYWluVGV4dFJhbmdlID0gUGxhaW5UZXh0UmFuZ2Uo
cmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCk7Ci0gICAgICAgICAgICBhdXRvIGJvdW5kcyA9
IEZsb2F0UmVjdChtX29iamVjdC0+ZG9BWEJvdW5kc0ZvclJhbmdlVXNpbmdDaGFyYWN0ZXJPZmZz
ZXQocGxhaW5UZXh0UmFuZ2UpKTsKKyAgICAgICAgICAgIGF1dG8gYm91bmRzID0gRmxvYXRSZWN0
KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5kb0FYQm91bmRzRm9yUmFuZ2VVc2luZ0NoYXJhY3Rlck9m
ZnNldChwbGFpblRleHRSYW5nZSkpOwogICAgICAgICAgICAgTlNSZWN0IHJlY3QgPSBbc2VsZiBj
b252ZXJ0UmVjdFRvU3BhY2U6Ym91bmRzIHNwYWNlOkFjY2Vzc2liaWxpdHlDb252ZXJzaW9uU3Bh
Y2U6OlNjcmVlbl07CiAgICAgICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpy
ZWN0XTsKICAgICAgICAgfQpAQCAtNDM5MCw3ICs0MzkzLDcgQEAgQUxMT1dfREVQUkVDQVRFRF9J
TVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAgICByZXR1cm4gcmFuZ2VTZXQgPyBbc2VsZiBk
b0FYQXR0cmlidXRlZFN0cmluZ0ZvclJhbmdlOnJhbmdlXSA6IG5pbDsKICAgICAgICAgCiAgICAg
ICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzogKE5TU3RyaW5nKilrQVhTdHlsZVJh
bmdlRm9ySW5kZXhQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewotICAgICAgICAgICAgUGxhaW5U
ZXh0UmFuZ2UgdGV4dFJhbmdlID0gbV9vYmplY3QtPmRvQVhTdHlsZVJhbmdlRm9ySW5kZXgoW251
bWJlciBpbnRWYWx1ZV0pOworICAgICAgICAgICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlID0g
c2VsZi5heEJhY2tpbmdPYmplY3QtPmRvQVhTdHlsZVJhbmdlRm9ySW5kZXgoW251bWJlciBpbnRW
YWx1ZV0pOwogICAgICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOiBOU01h
a2VSYW5nZSh0ZXh0UmFuZ2Uuc3RhcnQsIHRleHRSYW5nZS5sZW5ndGgpXTsKICAgICAgICAgfQog
ICAgIH0KQEAgLTQ0MTksNyArNDQyMiw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJ
T05TX0VORAogICAgIAogICAgIC8vIFRyZWUgb2JqZWN0cyByZXR1cm4gdGhlaXIgcm93cyBhcyB0
aGVpciBjaGlsZHJlbi4gV2UgY2FuIHVzZSB0aGUgb3JpZ2luYWwgbWV0aG9kCiAgICAgLy8gaGVy
ZSwgYmVjYXVzZSB3ZSB3b24ndCBnYWluIGFueSBzcGVlZCB1cC4KLSAgICBpZiAobV9vYmplY3Qt
PmlzVHJlZSgpKQorICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNUcmVlKCkpCiAgICAg
ICAgIHJldHVybiBbc3VwZXIgYWNjZXNzaWJpbGl0eUluZGV4T2ZDaGlsZDpjaGlsZF07CiAgICAg
CiAgICAgTlNBcnJheSAqY2hpbGRyZW4gPSBzZWxmLmNoaWxkcmVuVmVjdG9yQXJyYXk7CkBAIC00
NDQ5LDcgKzQ0NTIsNyBAQCBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgogICAg
IGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDaGlsZHJlbkF0
dHJpYnV0ZV0pIHsKICAgICAgICAgLy8gVHJlZSBpdGVtcyBvYmplY3QgcmV0dXJucyBhIGRpZmZl
cmVudCBzZXQgb2YgY2hpbGRyZW4gdGhhbiB0aG9zZSB0aGF0IGFyZSBpbiBjaGlsZHJlbigpCiAg
ICAgICAgIC8vIGJlY2F1c2UgYW4gQVhPdXRsaW5lICh0aGUgbWFjIHJvbGUgaXMgYmVjb21lcykg
aGFzIHNvbWUgb2RkIHN0aXB1bGF0aW9ucy4KLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1RyZWUo
KSB8fCBtX29iamVjdC0+aXNUcmVlSXRlbSgpKQorICAgICAgICBpZiAoc2VsZi5heEJhY2tpbmdP
YmplY3QtPmlzVHJlZSgpIHx8IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1RyZWVJdGVtKCkpCiAg
ICAgICAgICAgICByZXR1cm4gW1tzZWxmIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0Fj
Y2Vzc2liaWxpdHlDaGlsZHJlbkF0dHJpYnV0ZV0gY291bnRdOwogICAgICAgICAKICAgICAgICAg
YXV0byBjaGlsZHJlblNpemUgPSBzZWxmLmNoaWxkcmVuVmVjdG9yU2l6ZTsKQEAgLTQ0ODIsNyAr
NDQ4NSw3IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogICAgICAgICAgICAg
cmV0dXJuIFtjaGlsZHJlbiBzdWJhcnJheVdpdGhSYW5nZTpOU01ha2VSYW5nZShpbmRleCwgYXJy
YXlMZW5ndGgpXTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChfYXhCYWNraW5nT2JqZWN0LT5p
c1RyZWUoKSB8fCBfYXhCYWNraW5nT2JqZWN0LT5pc1RyZWVJdGVtKCkpIHsKKyAgICAgICAgaWYg
KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc1RyZWUoKSB8fCBzZWxmLmF4QmFja2luZ09iamVjdC0+
aXNUcmVlSXRlbSgpKSB7CiAgICAgICAgICAgICAvLyBUcmVlIG9iamVjdHMgcmV0dXJuIHRoZWly
IHJvd3MgYXMgdGhlaXIgY2hpbGRyZW4gJiB0cmVlIGl0ZW1zIHJldHVybiB0aGVpciBjb250ZW50
cyBzYW5zIHJvd3MuCiAgICAgICAgICAgICAvLyBXZSBjYW4gdXNlIHRoZSBvcmlnaW5hbCBtZXRo
b2QgaW4gdGhpcyBjYXNlLgogICAgICAgICAgICAgcmV0dXJuIFtzdXBlciBhY2Nlc3NpYmlsaXR5
QXJyYXlBdHRyaWJ1dGVWYWx1ZXM6YXR0cmlidXRlIGluZGV4OmluZGV4IG1heENvdW50Om1heENv
dW50XTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>