<?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>73081</bug_id>
          
          <creation_ts>2011-11-24 07:22:11 -0800</creation_ts>
          <short_desc>[Chromium] Web Inspector: remove legacy debugger support</short_desc>
          <delta_ts>2011-11-25 01:29:50 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Yury Semikhatsky">yurys</reporter>
          <assigned_to name="Yury Semikhatsky">yurys</assigned_to>
          <cc>abarth</cc>
    
    <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>fishd</cc>
    
    <cc>japhet</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>peter.rybin</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>508770</commentid>
    <comment_count>0</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-11-24 07:22:11 -0800</bug_when>
    <thetext>New web inspector protocol should provide all necessary debugging capabilities.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508772</commentid>
    <comment_count>1</comment_count>
      <attachid>116509</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-11-24 07:31:46 -0800</bug_when>
    <thetext>Created attachment 116509
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508773</commentid>
    <comment_count>2</comment_count>
      <attachid>116510</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-11-24 07:33:52 -0800</bug_when>
    <thetext>Created attachment 116510
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508774</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-24 07:33:57 -0800</bug_when>
    <thetext>Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508786</commentid>
    <comment_count>4</comment_count>
      <attachid>116510</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-11-24 07:54:12 -0800</bug_when>
    <thetext>Comment on attachment 116510
Patch

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

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:184
&gt; +    ASSERT(m_hostId &gt; 0);

Where did this come from?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508811</commentid>
    <comment_count>5</comment_count>
      <attachid>116510</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-11-24 09:00:49 -0800</bug_when>
    <thetext>Comment on attachment 116510
Patch

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

&gt;&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:184
&gt;&gt; +    ASSERT(m_hostId &gt; 0);
&gt; 
&gt; Where did this come from?

It was in DebuggerAgentManager::setHostId</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508836</commentid>
    <comment_count>6</comment_count>
      <attachid>116522</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-11-24 10:45:25 -0800</bug_when>
    <thetext>Created attachment 116522
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509028</commentid>
    <comment_count>7</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-11-25 01:29:50 -0800</bug_when>
    <thetext>Committed r101156: &lt;http://trac.webkit.org/changeset/101156&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116509</attachid>
            <date>2011-11-24 07:31:46 -0800</date>
            <delta_ts>2011-11-24 07:33:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73081-20111124193144.patch</filename>
            <type>text/plain</type>
            <size>32888</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMTM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGNiYjc0YTc4N2ZiNmYy
ZGEzZjE5ZjAyNjRiZTM2YWY2ZDQ4ODM3Zi4uYzdkZGNiNzg2OGM0NGY4MTZjNzUwMDIxY2QzNmQ3
MDJiOTkxZDFhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTExLTI0ICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0g
V2ViIEluc3BlY3RvcjogcmVtb3ZlIGxlZ2FjeSBkZWJ1Z2dlciBzdXBwb3J0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzA4MQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMh
KQorCisgICAgICAgICogYmluZGluZ3MvdjgvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6UGFnZVNjcmlwdERlYnVnU2Vy
dmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6YWRkTGlzdGVu
ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5oOgorCiAy
MDExLTExLTI0ICBUb3IgQXJuZSBWZXN0YsO4ICA8dG9yLmFybmUudmVzdGJvQG5va2lhLmNvbT4K
IAogICAgICAgICBbUXRdIEdldCByaWQgb2YgdGhlIGJ1aWxkRGlyRm9yU291cmNlKCkgZnVuY3Rp
b24gaW4gdGhlIGJ1aWxkIHN5c3RlbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAzYTcy
MDZjNWJiMzA4YjQ1NDJhNjE4ZmFlNWFmZGFjZTUwYjgzNzY5Li45NjYyODYxOTVlNzY0ZjdlODJk
ZmJmMDNjOWEyODAwZGZiYjVhMmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI5IEBACisyMDExLTExLTI0ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gV2ViIEluc3BlY3RvcjogcmVtb3ZlIGxlZ2FjeSBk
ZWJ1Z2dlciBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MzA4MQorCisgICAgICAgIFJlbW92ZWQgY2xhc3NlZCBwcm92aWRpbmcgYWNjZXNz
IHRvIFY4IGRlYnVnZ2luZyBwcm90b2NvbC4gQ2xpZW50cyBzaG91bGQKKyAgICAgICAgdXNlIFdl
YiBJbnNwZWN0b3IgcHJvdG9jb2wgaW5zdGVhZC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dl
YkRldlRvb2xzQWdlbnQuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViRGV2VG9vbHNBZ2VudENsaWVu
dC5oOgorICAgICAgICAqIHNyYy9EZWJ1Z2dlckFnZW50SW1wbC5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogc3JjL0RlYnVnZ2VyQWdlbnRJbXBsLmg6IFJlbW92ZWQuCisgICAgICAgICogc3JjL0Rl
YnVnZ2VyQWdlbnRNYW5hZ2VyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvRGVidWdnZXJB
Z2VudE1hbmFnZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvV2ViRGV2VG9vbHNBZ2VudElt
cGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6V2ViRGV2VG9v
bHNBZ2VudEltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6fldl
YkRldlRvb2xzQWdlbnRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudElt
cGw6OmF0dGFjaCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpkZXRh
Y2gpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6ZGlkTmF2aWdhdGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6ZGlkQ2xlYXJXaW5kb3dP
YmplY3QpOgorICAgICAgICAqIHNyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oOgorCiAyMDExLTEx
LTIzICBHcmVnIEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgogCiAgICAgICAgIEFkZCBz
aW1wbGUgaW1wbGVtZW50YXRpb24gZm9yIHdlYiBpbnRlbnRzIGNocm9taXVtIEFQSSBkYXRhIGNs
YXNzZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9QYWdlU2NyaXB0
RGVidWdTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvUGFnZVNjcmlwdERl
YnVnU2VydmVyLmNwcAppbmRleCBmMTQ5ZDhmNjFjMjIwNjZkMjE4MTFkNjc2NGJkYWM0ODE2ZGU0
MzMwLi5kYWY3OTYwODEzNWI4NTE5YTVmMGQ1OTc2NmY3YTVmMDI2OGJjNmY2IDEwMDc1NQotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAK
QEAgLTcxLDE1ICs3MSwxMSBAQCBQYWdlU2NyaXB0RGVidWdTZXJ2ZXImIFBhZ2VTY3JpcHREZWJ1
Z1NlcnZlcjo6c2hhcmVkKCkKIFBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6UGFnZVNjcmlwdERlYnVn
U2VydmVyKCkKICAgICA6IFNjcmlwdERlYnVnU2VydmVyKCkKICAgICAsIG1fcGF1c2VkUGFnZSgw
KQotICAgICwgbV9lbmFibGVkKHRydWUpCiB7CiB9CiAKIHZvaWQgUGFnZVNjcmlwdERlYnVnU2Vy
dmVyOjphZGRMaXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3RlbmVyKiBsaXN0ZW5lciwgUGFnZSogcGFn
ZSkKIHsKLSAgICBpZiAoIW1fZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgVjhQcm94
eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShwYWdlLT5tYWluRnJhbWUoKSk7CiAgICAgaWYg
KCFwcm94eSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvUGFnZVNjcmlwdERlYnVnU2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuaAppbmRleCA0YjEzNGMxOGRiOGViNjk4ZTY2MDU4
MzY1Yjc5ZDhmZmU2MWVhZGQ3Li43NTFkNzMzZDZkZTQ3MjI0ZGQxYWMwMDM3OWU4NzQ5MTJkZWI0
YWZmIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9QYWdlU2NyaXB0RGVi
dWdTZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9QYWdlU2NyaXB0RGVi
dWdTZXJ2ZXIuaApAQCAtNDgsOSArNDgsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRMaXN0ZW5l
cihTY3JpcHREZWJ1Z0xpc3RlbmVyKiwgUGFnZSopOwogICAgIHZvaWQgcmVtb3ZlTGlzdGVuZXIo
U2NyaXB0RGVidWdMaXN0ZW5lciosIFBhZ2UqKTsKIAotICAgIC8vIHY4LXNwZWNpZmljIG1ldGhv
ZHMuCi0gICAgdm9pZCBzZXRFbmFibGVkKGJvb2wgdmFsdWUpIHsgbV9lbmFibGVkID0gdmFsdWU7
IH0KLSAgICAKICAgICBjbGFzcyBDbGllbnRNZXNzYWdlTG9vcCB7CiAgICAgcHVibGljOgogICAg
ICAgICB2aXJ0dWFsIH5DbGllbnRNZXNzYWdlTG9vcCgpIHsgfQpAQCAtNzEsNyArNjgsNiBAQCBw
cml2YXRlOgogICAgIExpc3RlbmVyc01hcCBtX2xpc3RlbmVyc01hcDsKICAgICBPd25QdHI8Q2xp
ZW50TWVzc2FnZUxvb3A+IG1fY2xpZW50TWVzc2FnZUxvb3A7CiAgICAgUGFnZSogbV9wYXVzZWRQ
YWdlOwotICAgIGJvb2wgbV9lbmFibGVkOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4IGFmYWFiNzhkMTc1YjAzYmZjN2EwNGEyODY4
OGYyMzI3M2JjYmQzNWEuLjhiMDNlNGEwY2MxMjQ4OGIyMWFjZjE3MDJlZTM5OGYyN2FkMGMzNjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTM3MiwxMCArMzcyLDYgQEAKICAgICAg
ICAgICAgICAgICAnc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHAnLAogICAgICAgICAgICAg
ICAgICdzcmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMv
RGF0YWJhc2VPYnNlcnZlci5jcHAnLAotICAgICAgICAgICAgICAgICdzcmMvRGVidWdnZXJBZ2Vu
dEltcGwuY3BwJywKLSAgICAgICAgICAgICAgICAnc3JjL0RlYnVnZ2VyQWdlbnRJbXBsLmgnLAot
ICAgICAgICAgICAgICAgICdzcmMvRGVidWdnZXJBZ2VudE1hbmFnZXIuY3BwJywKLSAgICAgICAg
ICAgICAgICAnc3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2VyLmgnLAogICAgICAgICAgICAgICAgICdz
cmMvRGV2aWNlT3JpZW50YXRpb25DbGllbnRQcm94eS5jcHAnLAogICAgICAgICAgICAgICAgICdz
cmMvRGV2aWNlT3JpZW50YXRpb25DbGllbnRQcm94eS5oJywKICAgICAgICAgICAgICAgICAnc3Jj
L0RPTVV0aWxpdGllc1ByaXZhdGUuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYkRldlRvb2xzQWdlbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkRldlRvb2xzQWdlbnQuaAppbmRleCBhZjRiODdlZWIwMzk1YmM4NzM5OGQ3Zjlh
ODhiMDJjMjNiYmY0YzE1Li5lMGJiMzJhNTc2ZmRiNzM3N2FmYjIwMDQyMzA1NGQyYTFhZTBkYWRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEZXZUb29sc0Fn
ZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRGV2VG9vbHNBZ2Vu
dC5oCkBAIC03MSwxNCArNzEsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGV2YWx1YXRl
SW5XZWJJbnNwZWN0b3IobG9uZyBjYWxsSWQsIGNvbnN0IFdlYlN0cmluZyYgc2NyaXB0KSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIHNldEphdmFTY3JpcHRQcm9maWxpbmdFbmFibGVkKGJvb2wpID0g
MDsKIAotICAgIC8vIEFzeW5jaHJvbm91c2x5IGV4ZWN1dGVzIGRlYnVnZ2VyIGNvbW1hbmQgaW4g
dGhlIHJlbmRlciB0aHJlYWQuCi0gICAgLy8gfGNhbGxlcklkZW50aWZpZXJ8IHdpbGwgYmUgdXNl
ZCBmb3Igc2VuZGluZyByZXNwb25zZS4KLSAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyB2b2lkIGV4
ZWN1dGVEZWJ1Z2dlckNvbW1hbmQoCi0gICAgICAgIGNvbnN0IFdlYlN0cmluZyYgY29tbWFuZCwg
aW50IGNhbGxlcklkZW50aWZpZXIpOwotCi0gICAgLy8gQXN5bmNocm9ub3VzbHkgcmVxdWVzdCBk
ZWJ1Z2dlciB0byBwYXVzZSBpbW1lZGlhdGVseS4KLSAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyB2
b2lkIGRlYnVnZ2VyUGF1c2VTY3JpcHQoKTsKLQogICAgIGNsYXNzIE1lc3NhZ2VEZXNjcmlwdG9y
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfk1lc3NhZ2VEZXNjcmlwdG9yKCkgeyB9
CkBAIC05MywxMiArODUsNiBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJucyBhIGRpc2Nvbm5lY3Qg
ZXZlbnQgdGhhdCBjYW4gYmUgZGlzcGF0Y2hlZCBvbiB0aGUgZnJvbnQtZW5kCiAgICAgLy8gaW4g
b3JkZXIgdG8gbGV0IGl0IGtub3cgdGhhdCBpdCBoYXMgZGlzY29ubmVjdGVkIGZyb20gdGhlIGFn
ZW50LgogICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIFdlYlN0cmluZyBkaXNjb25uZWN0RXZlbnRB
c1RleHQoKTsKLQotICAgIHR5cGVkZWYgdm9pZCAoKk1lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVy
KSgpOwotCi0gICAgLy8gSW5zdGFsbHMgZGlzcGF0Y2ggaGFuZGxlIHRoYXQgaXMgZ29pbmcgdG8g
YmUgY2FsbGVkIHBlcmlvZGljYWxseQotICAgIC8vIHdoaWxlIG9uIGEgYnJlYWtwb2ludC4KLSAg
ICBXRUJLSVRfRVhQT1JUIHN0YXRpYyB2b2lkIHNldE1lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVy
KE1lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRGV2VG9vbHNB
Z2VudENsaWVudC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRGV2VG9vbHNB
Z2VudENsaWVudC5oCmluZGV4IGJjNzRkMTEyODAxYmYwMjBiNDExZmQ5ZmUzMzcxYTY2ZDZkOTJj
MjkuLjljNjNiMTE5ZDg1NWQ5Y2NmNjNlMWJlYzAxNGRlODkzNTIwYmVjZDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRldlRvb2xzQWdlbnRDbGllbnQuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEZXZUb29sc0FnZW50Q2xpZW50
LmgKQEAgLTU4LDggKzU4LDYgQEAgcHVibGljOgogICAgIH07CiAgICAgdmlydHVhbCBXZWJLaXRD
bGllbnRNZXNzYWdlTG9vcCogY3JlYXRlQ2xpZW50TWVzc2FnZUxvb3AoKSB7IHJldHVybiAwOyB9
CiAKLSAgICB2aXJ0dWFsIGJvb2wgZXhwb3NlVjhEZWJ1Z2dlclByb3RvY29sKCkgeyByZXR1cm4g
ZmFsc2U7IH0KLQogICAgIHZpcnR1YWwgdm9pZCBjbGVhckJyb3dzZXJDYWNoZSgpIHsgfQogICAg
IHZpcnR1YWwgdm9pZCBjbGVhckJyb3dzZXJDb29raWVzKCkgeyB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRJbXBsLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNWRkNWM1ODk3ZDAwODYyNjMxMmUzMmZmYjZkMThhOTE0Njk3NGQ0My4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50SW1wbC5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRlYnVnZ2VyQWdlbnRJ
bXBsLmgiCi0KLSNpbmNsdWRlICJEZWJ1Z2dlckFnZW50TWFuYWdlci5oIgotI2luY2x1ZGUgIldl
YkRldlRvb2xzQWdlbnRDbGllbnQuaCIKLSNpbmNsdWRlICJXZWJEZXZUb29sc0FnZW50SW1wbC5o
IgotI2luY2x1ZGUgIldlYlZpZXdJbXBsLmgiCi0KLXVzaW5nIFdURjo6U3RyaW5nOwotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotRGVidWdnZXJBZ2VudEltcGw6OkRlYnVnZ2VyQWdlbnRJbXBsKAot
ICAgIFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCwKLSAgICBXZWJEZXZUb29sc0FnZW50SW1wbCog
d2ViZGV2dG9vbHNBZ2VudCwKLSAgICBXZWJEZXZUb29sc0FnZW50Q2xpZW50KiB3ZWJkZXZ0b29s
c0FnZW50Q2xpZW50KQotICAgIDogbV93ZWJWaWV3SW1wbCh3ZWJWaWV3SW1wbCkKLSAgICAsIG1f
d2ViZGV2dG9vbHNBZ2VudCh3ZWJkZXZ0b29sc0FnZW50KQotICAgICwgbV93ZWJkZXZ0b29sc0Fn
ZW50Q2xpZW50KHdlYmRldnRvb2xzQWdlbnRDbGllbnQpCi0gICAgLCBtX2F1dG9Db250aW51ZU9u
RXhjZXB0aW9uKGZhbHNlKQotewotICAgIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpkZWJ1Z0F0dGFj
aCh0aGlzKTsKLX0KLQotRGVidWdnZXJBZ2VudEltcGw6On5EZWJ1Z2dlckFnZW50SW1wbCgpCi17
Ci0gICAgRGVidWdnZXJBZ2VudE1hbmFnZXI6OmRlYnVnRGV0YWNoKHRoaXMpOwotfQotCi12b2lk
IERlYnVnZ2VyQWdlbnRJbXBsOjpkZWJ1Z2dlck91dHB1dChjb25zdCBTdHJpbmcmIGNvbW1hbmQp
Ci17Ci0gICAgbV93ZWJkZXZ0b29sc0FnZW50Q2xpZW50LT5zZW5kRGVidWdnZXJPdXRwdXQoY29t
bWFuZCk7Ci19Ci0KLVdlYkNvcmU6OlBhZ2UqIERlYnVnZ2VyQWdlbnRJbXBsOjpwYWdlKCkKLXsK
LSAgICByZXR1cm4gbV93ZWJWaWV3SW1wbC0+cGFnZSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdl
bnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50SW1wbC5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGZjYzRlNmY0MzMwYzMxZWM2ZTI0M2Q1
ZWI2ZWRhZTY4YTQxYmFkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRJbXBsLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBEZWJ1Z2dlckFnZW50SW1wbF9oCi0j
ZGVmaW5lIERlYnVnZ2VyQWdlbnRJbXBsX2gKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIFBhZ2U7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi1jbGFzcyBXZWJEZXZUb29sc0FnZW50Q2xpZW50OwotY2xhc3MgV2ViRGV2VG9vbHNBZ2Vu
dEltcGw7Ci1jbGFzcyBXZWJWaWV3SW1wbDsKLQotY2xhc3MgRGVidWdnZXJBZ2VudEltcGwgewot
cHVibGljOgotICAgIERlYnVnZ2VyQWdlbnRJbXBsKFdlYktpdDo6V2ViVmlld0ltcGwqIHdlYlZp
ZXdJbXBsLAotICAgICAgICAgICAgICAgICAgICAgIFdlYkRldlRvb2xzQWdlbnRJbXBsKiB3ZWJk
ZXZ0b29sc0FnZW50LAotICAgICAgICAgICAgICAgICAgICAgIFdlYkRldlRvb2xzQWdlbnRDbGll
bnQqIHdlYmRldnRvb2xzQWdlbnRDbGllbnQpOwotICAgIHZpcnR1YWwgfkRlYnVnZ2VyQWdlbnRJ
bXBsKCk7Ci0KLSAgICB2b2lkIGRlYnVnZ2VyT3V0cHV0KGNvbnN0IFdURjo6U3RyaW5nJiBvdXQp
OwotCi0gICAgdm9pZCBzZXRBdXRvQ29udGludWVPbkV4Y2VwdGlvbihib29sIGF1dG9Db250aW51
ZSkgeyBtX2F1dG9Db250aW51ZU9uRXhjZXB0aW9uID0gYXV0b0NvbnRpbnVlOyB9Ci0KLSAgICBi
b29sIGF1dG9Db250aW51ZU9uRXhjZXB0aW9uKCkgeyByZXR1cm4gbV9hdXRvQ29udGludWVPbkV4
Y2VwdGlvbjsgfQotCi0gICAgV2ViQ29yZTo6UGFnZSogcGFnZSgpOwotICAgIFdlYkRldlRvb2xz
QWdlbnRJbXBsKiB3ZWJkZXZ0b29sc0FnZW50KCkgeyByZXR1cm4gbV93ZWJkZXZ0b29sc0FnZW50
OyB9Ci0KLSAgICBXZWJLaXQ6OldlYlZpZXdJbXBsKiB3ZWJWaWV3KCkgeyByZXR1cm4gbV93ZWJW
aWV3SW1wbDsgfQotCi1wcml2YXRlOgotICAgIFdlYktpdDo6V2ViVmlld0ltcGwqIG1fd2ViVmll
d0ltcGw7Ci0gICAgV2ViRGV2VG9vbHNBZ2VudEltcGwqIG1fd2ViZGV2dG9vbHNBZ2VudDsKLSAg
ICBXZWJEZXZUb29sc0FnZW50Q2xpZW50KiBtX3dlYmRldnRvb2xzQWdlbnRDbGllbnQ7Ci0gICAg
Ym9vbCBtX2F1dG9Db250aW51ZU9uRXhjZXB0aW9uOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVi
dWdnZXJBZ2VudE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdn
ZXJBZ2VudE1hbmFnZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2ViYmY0
OWE3NTZmYTBlNmQzYTdhYTYzMzY3N2U0OTFkN2NlNTRkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVn
Z2VyQWdlbnRNYW5hZ2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMxNiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRp
c3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRlYnVnZ2VyQWdlbnRNYW5hZ2VyLmgiCi0KLSNpbmNs
dWRlICJEZWJ1Z2dlckFnZW50SW1wbC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAi
UGFnZUdyb3VwTG9hZERlZmVycmVyLmgiCi0jaW5jbHVkZSAiUGFnZVNjcmlwdERlYnVnU2VydmVy
LmgiCi0jaW5jbHVkZSAiVjhQcm94eS5oIgotI2luY2x1ZGUgIldlYkRldlRvb2xzQWdlbnRJbXBs
LmgiCi0jaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCi0jaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIK
LSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+Ci0KLW5hbWVzcGFjZSBXZWJL
aXQgewotCi1XZWJEZXZUb29sc0FnZW50OjpNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlciBEZWJ1
Z2dlckFnZW50TWFuYWdlcjo6c19tZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlciA9IDA7Ci0KLWJv
b2wgRGVidWdnZXJBZ2VudE1hbmFnZXI6OnNfaW5Ib3N0RGlzcGF0Y2hIYW5kbGVyID0gZmFsc2U7
Ci0KLWJvb2wgRGVidWdnZXJBZ2VudE1hbmFnZXI6OnNfZXhwb3NlVjhEZWJ1Z2dlclByb3RvY29s
ID0gZmFsc2U7Ci0KLXR5cGVkZWYgSGFzaE1hcDxXZWJWaWV3SW1wbCosIFdlYkNvcmU6OlBhZ2VH
cm91cExvYWREZWZlcnJlcio+IERlZmVycmVyc01hcDsKLQotbmFtZXNwYWNlIHsKLQotY2xhc3Mg
Q2FsbGVySWRXcmFwcGVyIDogcHVibGljIHY4OjpEZWJ1Zzo6Q2xpZW50RGF0YSB7Ci0gICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQ2FsbGVySWRXcmFwcGVyKTsKLXB1YmxpYzoKLSAgICBDYWxsZXJJ
ZFdyYXBwZXIoKSA6IG1fY2FsbGVySXNNYW5hbmFnZXIodHJ1ZSksIG1fY2FsbGVySWQoMCkgeyB9
Ci0gICAgZXhwbGljaXQgQ2FsbGVySWRXcmFwcGVyKGludCBjYWxsZXJJZCkKLSAgICAgICAgOiBt
X2NhbGxlcklzTWFuYW5hZ2VyKGZhbHNlKQotICAgICAgICAsIG1fY2FsbGVySWQoY2FsbGVySWQp
IHsgfQotICAgIH5DYWxsZXJJZFdyYXBwZXIoKSB7IH0KLSAgICBib29sIGNhbGxlcklzTWFuYW5h
Z2VyKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZXJJc01hbmFuYWdlcjsgfQotICAgIGludCBjYWxs
ZXJJZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVySWQ7IH0KLXByaXZhdGU6Ci0gICAgYm9vbCBt
X2NhbGxlcklzTWFuYW5hZ2VyOwotICAgIGludCBtX2NhbGxlcklkOwotfTsKLQotRGVmZXJyZXJz
TWFwJiBwYWdlRGVmZXJyZXJzKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKERlZmVycmVy
c01hcCwgZGVmZXJyZXJzLCAoKSk7Ci0gICAgcmV0dXJuIGRlZmVycmVyczsKLX0KLQotfSAvLyBu
YW1lc3BhY2UKLQotCi12b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpkZWJ1Z0hvc3REaXNwYXRj
aEhhbmRsZXIoKQotewotICAgIGlmICghc19tZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlciB8fCAh
c19hdHRhY2hlZEFnZW50c01hcCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHNfaW5Ib3N0
RGlzcGF0Y2hIYW5kbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzX2luSG9zdERpc3BhdGNo
SGFuZGxlciA9IHRydWU7Ci0KLSAgICBWZWN0b3I8V2ViVmlld0ltcGwqPiB2aWV3czsKLSAgICAv
LyAxLiBEaXNhYmxlIGFjdGl2ZSBvYmplY3RzIGFuZCBpbnB1dCBldmVudHMuCi0gICAgZm9yIChB
dHRhY2hlZEFnZW50c01hcDo6aXRlcmF0b3IgaXQgPSBzX2F0dGFjaGVkQWdlbnRzTWFwLT5iZWdp
bigpOyBpdCAhPSBzX2F0dGFjaGVkQWdlbnRzTWFwLT5lbmQoKTsgKytpdCkgewotICAgICAgICBE
ZWJ1Z2dlckFnZW50SW1wbCogYWdlbnQgPSBpdC0+c2Vjb25kOwotICAgICAgICBwYWdlRGVmZXJy
ZXJzKCkuc2V0KGFnZW50LT53ZWJWaWV3KCksIG5ldyBXZWJDb3JlOjpQYWdlR3JvdXBMb2FkRGVm
ZXJyZXIoYWdlbnQtPnBhZ2UoKSwgdHJ1ZSkpOwotICAgICAgICB2aWV3cy5hcHBlbmQoYWdlbnQt
PndlYlZpZXcoKSk7Ci0gICAgICAgIGFnZW50LT53ZWJWaWV3KCktPnNldElnbm9yZUlucHV0RXZl
bnRzKHRydWUpOwotICAgIH0KLQotICAgIC8vIDIuIFByb2Nlc3MgbWVzc2FnZXMuCi0gICAgc19t
ZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlcigpOwotCi0gICAgLy8gMy4gQnJpbmcgdGhpbmdzIGJh
Y2suCi0gICAgZm9yIChWZWN0b3I8V2ViVmlld0ltcGwqPjo6aXRlcmF0b3IgaXQgPSB2aWV3cy5i
ZWdpbigpOyBpdCAhPSB2aWV3cy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAocGFnZURlZmVy
cmVycygpLmNvbnRhaW5zKCppdCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSB2aWV3IHdhcyBub3Qg
Y2xvc2VkIGR1cmluZyB0aGUgZGlzcGF0Y2guCi0gICAgICAgICAgICAoKml0KS0+c2V0SWdub3Jl
SW5wdXRFdmVudHMoZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotICAgIGRlbGV0ZUFsbFZhbHVl
cyhwYWdlRGVmZXJyZXJzKCkpOwotICAgIHBhZ2VEZWZlcnJlcnMoKS5jbGVhcigpOwotCi0gICAg
c19pbkhvc3REaXNwYXRjaEhhbmRsZXIgPSBmYWxzZTsKLSAgICBpZiAoIXNfYXR0YWNoZWRBZ2Vu
dHNNYXApIHsKLSAgICAgICAgLy8gUmVtb3ZlIGhhbmRsZXJzIGlmIGFsbCBhZ2VudHMgd2VyZSBk
ZXRhY2hlZCB3aXRoaW4gaG9zdCBkaXNwYXRjaC4KLSAgICAgICAgdjg6OkRlYnVnOjpTZXRNZXNz
YWdlSGFuZGxlcigwKTsKLSAgICAgICAgdjg6OkRlYnVnOjpTZXRIb3N0RGlzcGF0Y2hIYW5kbGVy
KDApOwotICAgIH0KLX0KLQotRGVidWdnZXJBZ2VudE1hbmFnZXI6OkF0dGFjaGVkQWdlbnRzTWFw
KiBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6c19hdHRhY2hlZEFnZW50c01hcCA9IDA7Ci0KLXZvaWQg
RGVidWdnZXJBZ2VudE1hbmFnZXI6OmRlYnVnQXR0YWNoKERlYnVnZ2VyQWdlbnRJbXBsKiBkZWJ1
Z2dlckFnZW50KQotewotICAgIGlmICghc19leHBvc2VWOERlYnVnZ2VyUHJvdG9jb2wpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAoIXNfYXR0YWNoZWRBZ2VudHNNYXApIHsKLSAgICAgICAgc19h
dHRhY2hlZEFnZW50c01hcCA9IG5ldyBBdHRhY2hlZEFnZW50c01hcCgpOwotICAgICAgICB2ODo6
RGVidWc6OlNldE1lc3NhZ2VIYW5kbGVyMigmRGVidWdnZXJBZ2VudE1hbmFnZXI6Om9uVjhEZWJ1
Z01lc3NhZ2UpOwotICAgICAgICB2ODo6RGVidWc6OlNldEhvc3REaXNwYXRjaEhhbmRsZXIoJkRl
YnVnZ2VyQWdlbnRNYW5hZ2VyOjpkZWJ1Z0hvc3REaXNwYXRjaEhhbmRsZXIsIDEwMCAvKiBtcyAq
Lyk7Ci0gICAgfQotICAgIGludCBob3N0SWQgPSBkZWJ1Z2dlckFnZW50LT53ZWJkZXZ0b29sc0Fn
ZW50KCktPmhvc3RJZCgpOwotICAgIEFTU0VSVChob3N0SWQpOwotICAgIHNfYXR0YWNoZWRBZ2Vu
dHNNYXAtPnNldChob3N0SWQsIGRlYnVnZ2VyQWdlbnQpOwotfQotCi12b2lkIERlYnVnZ2VyQWdl
bnRNYW5hZ2VyOjpkZWJ1Z0RldGFjaChEZWJ1Z2dlckFnZW50SW1wbCogZGVidWdnZXJBZ2VudCkK
LXsKLSAgICBpZiAoIXNfZXhwb3NlVjhEZWJ1Z2dlclByb3RvY29sKQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKCFzX2F0dGFjaGVkQWdlbnRzTWFwKSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGludCBob3N0SWQgPSBkZWJ1Z2dl
ckFnZW50LT53ZWJkZXZ0b29sc0FnZW50KCktPmhvc3RJZCgpOwotICAgIEFTU0VSVChzX2F0dGFj
aGVkQWdlbnRzTWFwLT5nZXQoaG9zdElkKSA9PSBkZWJ1Z2dlckFnZW50KTsKLSAgICBib29sIGlz
T25CcmVha3BvaW50ID0gKGZpbmRBZ2VudEZvckN1cnJlbnRWOENvbnRleHQoKSA9PSBkZWJ1Z2dl
ckFnZW50KTsKLSAgICBzX2F0dGFjaGVkQWdlbnRzTWFwLT5yZW1vdmUoaG9zdElkKTsKLQotICAg
IGlmIChzX2F0dGFjaGVkQWdlbnRzTWFwLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgZGVsZXRlIHNf
YXR0YWNoZWRBZ2VudHNNYXA7Ci0gICAgICAgIHNfYXR0YWNoZWRBZ2VudHNNYXAgPSAwOwotICAg
ICAgICAvLyBOb3RlIHRoYXQgd2UgZG8gbm90IGVtcHR5IGhhbmRsZXJzIHdoaWxlIGluIGRpc3Bh
dGNoIC0gd2Ugc2NoZWR1bGUKLSAgICAgICAgLy8gY29udGludWUgYW5kIGRvIHJlbW92YWwgb25j
ZSB3ZSBhcmUgb3V0IG9mIHRoZSBkaXNwYXRjaC4gQWxzbyB0aGVyZSBpcwotICAgICAgICAvLyBu
byBuZWVkIHRvIHNlbmQgY29udGludWUgY29tbWFuZCBpbiB0aGlzIGNhc2Ugc2luY2UgcmVtb3Zp
bmcgbWVzc2FnZQotICAgICAgICAvLyBoYW5kbGVyIHdpbGwgY2F1c2UgZGVidWdnZXIgdW5sb2Fk
IGFuZCBhbGwgYnJlYWtwb2ludHMgd2lsbCBiZSBjbGVhcmVkLgotICAgICAgICBpZiAoIXNfaW5I
b3N0RGlzcGF0Y2hIYW5kbGVyKSB7Ci0gICAgICAgICAgICB2ODo6RGVidWc6OlNldE1lc3NhZ2VI
YW5kbGVyMigwKTsKLSAgICAgICAgICAgIHY4OjpEZWJ1Zzo6U2V0SG9zdERpc3BhdGNoSGFuZGxl
cigwKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBSZW1vdmUgYWxsIGJyZWFr
cG9pbnRzIHNldCBieSB0aGUgYWdlbnQuCi0gICAgICBTdHJpbmcgY2xlYXJCcmVha3BvaW50R3Jv
dXBDbWQgPSBtYWtlU3RyaW5nKAotICAgICAgICAgICJ7XCJzZXFcIjoxLFwidHlwZVwiOlwicmVx
dWVzdFwiLFwiY29tbWFuZFwiOlwiY2xlYXJicmVha3BvaW50Z3JvdXBcIiwiCi0gICAgICAgICAg
ICAgICJcImFyZ3VtZW50c1wiOntcImdyb3VwSWRcIjoiLCBTdHJpbmc6Om51bWJlcihob3N0SWQp
LCAifX0iKTsKLSAgICAgIHNlbmRDb21tYW5kVG9WOChjbGVhckJyZWFrcG9pbnRHcm91cENtZCwg
bmV3IENhbGxlcklkV3JhcHBlcigpKTsKLQotICAgICAgaWYgKGlzT25CcmVha3BvaW50KSB7Ci0g
ICAgICAgICAgLy8gRm9yY2UgY29udGludWUgaWYgZGV0YWNoIGhhcHBlbmVkIGluIG5lc3N0ZWQg
bWVzc2FnZSBsb29wIHdoaWxlCi0gICAgICAgICAgLy8gZGVidWdnZXIgd2FzIHBhdXNlZCBvbiBh
IGJyZWFrcG9pbnQoYXMgbG9uZyBhcyB0aGVyZSBhcmUgb3RoZXIKLSAgICAgICAgICAvLyBhdHRh
Y2hlZCBhZ2VudHMgdjggd2lsbCB3YWl0IGZvciBleHBsaWNpdCdjb250aW51ZScgbWVzc2FnZSku
Ci0gICAgICAgICAgc2VuZENvbnRpbnVlQ29tbWFuZFRvVjgoKTsKLSAgICAgIH0KLSAgICB9Ci19
Ci0KLXZvaWQgRGVidWdnZXJBZ2VudE1hbmFnZXI6Om9uVjhEZWJ1Z01lc3NhZ2UoY29uc3Qgdjg6
OkRlYnVnOjpNZXNzYWdlJiBtZXNzYWdlKQotewotICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsK
LSAgICB2ODo6U3RyaW5nOjpWYWx1ZSB2YWx1ZShtZXNzYWdlLkdldEpTT04oKSk7Ci0gICAgV1RG
OjpTdHJpbmcgb3V0KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPigqdmFsdWUpLCB2YWx1
ZS5sZW5ndGgoKSk7Ci0KLSAgICAvLyBJZiBjYWxsZXJEYXRhIGlzIG5vdCAwIHRoZSBtZXNzYWdl
IGlzIGEgcmVzcG9uc2UgdG8gYSBkZWJ1Z2dlciBjb21tYW5kLgotICAgIGlmICh2ODo6RGVidWc6
OkNsaWVudERhdGEqIGNhbGxlckRhdGEgPSBtZXNzYWdlLkdldENsaWVudERhdGEoKSkgewotICAg
ICAgICBDYWxsZXJJZFdyYXBwZXIqIHdyYXBwZXIgPSBzdGF0aWNfY2FzdDxDYWxsZXJJZFdyYXBw
ZXIqPihjYWxsZXJEYXRhKTsKLSAgICAgICAgaWYgKHdyYXBwZXItPmNhbGxlcklzTWFuYW5hZ2Vy
KCkpIHsKLSAgICAgICAgICAgIC8vIEp1c3QgaWdub3JlIG1lc3NhZ2VzIHNlbnQgYnkgdGhpcyBt
YW5hZ2VyLgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIERlYnVnZ2Vy
QWdlbnRJbXBsKiBkZWJ1Z2dlckFnZW50ID0gZGVidWdnZXJBZ2VudEZvckhvc3RJZCh3cmFwcGVy
LT5jYWxsZXJJZCgpKTsKLSAgICAgICAgaWYgKGRlYnVnZ2VyQWdlbnQpCi0gICAgICAgICAgICBk
ZWJ1Z2dlckFnZW50LT5kZWJ1Z2dlck91dHB1dChvdXQpOwotICAgICAgICBlbHNlIGlmICghbWVz
c2FnZS5XaWxsU3RhcnRSdW5uaW5nKCkpIHsKLSAgICAgICAgICAgIC8vIEF1dG9jb250aW51ZSBl
eGVjdXRpb24gaWYgdGhlcmUgaXMgbm8gaGFuZGxlci4KLSAgICAgICAgICAgIHNlbmRDb250aW51
ZUNvbW1hbmRUb1Y4KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0gLy8gT3Ro
ZXJ3aXNlIGl0J3MgYW4gZXZlbnQgbWVzc2FnZS4KLSAgICBBU1NFUlQobWVzc2FnZS5Jc0V2ZW50
KCkpOwotCi0gICAgLy8gSWdub3JlIHVuc3VwcG9ydGVkIGV2ZW50IHR5cGVzLgotICAgIGlmICht
ZXNzYWdlLkdldEV2ZW50KCkgIT0gdjg6OkFmdGVyQ29tcGlsZSAmJiBtZXNzYWdlLkdldEV2ZW50
KCkgIT0gdjg6OkJyZWFrICYmIG1lc3NhZ2UuR2V0RXZlbnQoKSAhPSB2ODo6RXhjZXB0aW9uKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0ID0g
bWVzc2FnZS5HZXRFdmVudENvbnRleHQoKTsKLSAgICAvLyBJZiB0aGUgY29udGV4dCBpcyBmcm9t
IG9uZSBvZiB0aGUgaW5wZWN0ZWQgdGFicyBpdCBzaG91bGQgaGF2ZSBpdHMgY29udGV4dAotICAg
IC8vIGRhdGEuCi0gICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIFVua25v
d24gY29udGV4dCwgc2tpcCB0aGUgZXZlbnQuCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBJZiB0aGUgY29udGV4dCBpcyBmcm9tIG9uZSBvZiB0aGUgaW5wZWN0ZWQgdGFicyBvciBp
bmplY3RlZCBleHRlbnNpb24KLSAgICAvLyBzY3JpcHRzIGl0IG11c3QgaGF2ZSBob3N0SWQgaW4g
dGhlIGRhdGEgZmllbGQuCi0gICAgaW50IGhvc3RJZCA9IFdlYkNvcmU6OlY4UHJveHk6OmNvbnRl
eHREZWJ1Z0lkKGNvbnRleHQpOwotICAgIGlmIChob3N0SWQgIT0gLTEpIHsKLSAgICAgICAgRGVi
dWdnZXJBZ2VudEltcGwqIGFnZW50ID0gZGVidWdnZXJBZ2VudEZvckhvc3RJZChob3N0SWQpOwot
ICAgICAgICBpZiAoYWdlbnQpIHsKLSAgICAgICAgICAgIGlmIChhZ2VudC0+YXV0b0NvbnRpbnVl
T25FeGNlcHRpb24oKQotICAgICAgICAgICAgICAgICYmIG1lc3NhZ2UuR2V0RXZlbnQoKSA9PSB2
ODo6RXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICAgICAgc2VuZENvbnRpbnVlQ29tbWFuZFRvVjgo
KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGFnZW50LT5kZWJ1Z2dlck91dHB1dChvdXQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKCFtZXNzYWdlLldpbGxTdGFydFJ1bm5pbmcoKSkgewotICAg
ICAgICAvLyBBdXRvY29udGludWUgZXhlY3V0aW9uIG9uIGJyZWFrIGFuZCBleGNlcHRpb24gIGV2
ZW50cyBpZiB0aGVyZSBpcyBubwotICAgICAgICAvLyBoYW5kbGVyLgotICAgICAgICBzZW5kQ29u
dGludWVDb21tYW5kVG9WOCgpOwotICAgIH0KLX0KLQotdm9pZCBEZWJ1Z2dlckFnZW50TWFuYWdl
cjo6cGF1c2VTY3JpcHQoKQotewotICAgIHY4OjpEZWJ1Zzo6RGVidWdCcmVhaygpOwotfQotCi12
b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpleGVjdXRlRGVidWdnZXJDb21tYW5kKGNvbnN0IFdU
Rjo6U3RyaW5nJiBjb21tYW5kLCBpbnQgY2FsbGVySWQpCi17Ci0gICAgc2VuZENvbW1hbmRUb1Y4
KGNvbW1hbmQsIG5ldyBDYWxsZXJJZFdyYXBwZXIoY2FsbGVySWQpKTsKLX0KLQotdm9pZCBEZWJ1
Z2dlckFnZW50TWFuYWdlcjo6c2V0TWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIoV2ViRGV2VG9v
bHNBZ2VudDo6TWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIgaGFuZGxlcikKLXsKLSAgICBzX21l
c3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyID0gaGFuZGxlcjsKLX0KLQotdm9pZCBEZWJ1Z2dlckFn
ZW50TWFuYWdlcjo6c2V0RXhwb3NlVjhEZWJ1Z2dlclByb3RvY29sKGJvb2wgdmFsdWUpCi17Ci0g
ICAgc19leHBvc2VWOERlYnVnZ2VyUHJvdG9jb2wgPSB2YWx1ZTsKLSAgICBXZWJDb3JlOjpQYWdl
U2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnNldEVuYWJsZWQoIXNfZXhwb3NlVjhEZWJ1Z2dl
clByb3RvY29sKTsKLX0KLQotdm9pZCBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6c2V0SG9zdElkKFdl
YkZyYW1lSW1wbCogd2ViZnJhbWUsIGludCBob3N0SWQpCi17Ci0gICAgQVNTRVJUKGhvc3RJZCA+
IDApOwotICAgIFdlYkNvcmU6OlY4UHJveHkqIHByb3h5ID0gV2ViQ29yZTo6VjhQcm94eTo6cmV0
cmlldmUod2ViZnJhbWUtPmZyYW1lKCkpOwotICAgIGlmIChwcm94eSkKLSAgICAgICAgcHJveHkt
PnNldENvbnRleHREZWJ1Z0lkKGhvc3RJZCk7Ci19Ci0KLXZvaWQgRGVidWdnZXJBZ2VudE1hbmFn
ZXI6Om9uV2ViVmlld0Nsb3NlZChXZWJWaWV3SW1wbCogd2VidmlldykKLXsKLSAgICBpZiAocGFn
ZURlZmVycmVycygpLmNvbnRhaW5zKHdlYnZpZXcpKSB7Ci0gICAgICAgIGRlbGV0ZSBwYWdlRGVm
ZXJyZXJzKCkuZ2V0KHdlYnZpZXcpOwotICAgICAgICBwYWdlRGVmZXJyZXJzKCkucmVtb3ZlKHdl
YnZpZXcpOwotICAgIH0KLX0KLQotdm9pZCBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6b25OYXZpZ2F0
ZSgpCi17Ci0gICAgaWYgKHNfaW5Ib3N0RGlzcGF0Y2hIYW5kbGVyKQotICAgICAgICBEZWJ1Z2dl
ckFnZW50TWFuYWdlcjo6c2VuZENvbnRpbnVlQ29tbWFuZFRvVjgoKTsKLX0KLQotdm9pZCBEZWJ1
Z2dlckFnZW50TWFuYWdlcjo6c2VuZENvbW1hbmRUb1Y4KGNvbnN0IFdURjo6U3RyaW5nJiBjbWQs
IHY4OjpEZWJ1Zzo6Q2xpZW50RGF0YSogZGF0YSkKLXsKLSAgICB2ODo6RGVidWc6OlNlbmRDb21t
YW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDE2X3QqPihjbWQuY2hhcmFjdGVycygpKSwg
Y21kLmxlbmd0aCgpLCBkYXRhKTsKLX0KLQotdm9pZCBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6c2Vu
ZENvbnRpbnVlQ29tbWFuZFRvVjgoKQotewotICAgIFdURjo6U3RyaW5nIGNvbnRpbnVlQ21kKCJ7
XCJzZXFcIjoxLFwidHlwZVwiOlwicmVxdWVzdFwiLFwiY29tbWFuZFwiOlwiY29udGludWVcIn0i
KTsKLSAgICBzZW5kQ29tbWFuZFRvVjgoY29udGludWVDbWQsIG5ldyBDYWxsZXJJZFdyYXBwZXIo
KSk7Ci19Ci0KLURlYnVnZ2VyQWdlbnRJbXBsKiBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6ZmluZEFn
ZW50Rm9yQ3VycmVudFY4Q29udGV4dCgpCi17Ci0gICAgaWYgKCFzX2F0dGFjaGVkQWdlbnRzTWFw
KQotICAgICAgICByZXR1cm4gMDsKLSAgICBBU1NFUlQoIXNfYXR0YWNoZWRBZ2VudHNNYXAtPmlz
RW1wdHkoKSk7Ci0KLSAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBXZWJDb3JlOjpWOFByb3h5
OjpyZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKTsKLSAgICBpZiAoIWZyYW1lKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsK
LSAgICBmb3IgKEF0dGFjaGVkQWdlbnRzTWFwOjppdGVyYXRvciBpdCA9IHNfYXR0YWNoZWRBZ2Vu
dHNNYXAtPmJlZ2luKCk7IGl0ICE9IHNfYXR0YWNoZWRBZ2VudHNNYXAtPmVuZCgpOyArK2l0KSB7
Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5wYWdlKCkgPT0gcGFnZSkKLSAgICAgICAgICAgIHJl
dHVybiBpdC0+c2Vjb25kOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotRGVidWdnZXJBZ2Vu
dEltcGwqIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpkZWJ1Z2dlckFnZW50Rm9ySG9zdElkKGludCBo
b3N0SWQpCi17Ci0gICAgaWYgKCFzX2F0dGFjaGVkQWdlbnRzTWFwKQotICAgICAgICByZXR1cm4g
MDsKLSAgICByZXR1cm4gc19hdHRhY2hlZEFnZW50c01hcC0+Z2V0KGhvc3RJZCk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvRGVidWdnZXJBZ2VudE1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Rl
YnVnZ2VyQWdlbnRNYW5hZ2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4NjRj
MmU0ZDQ0NWNiMTg3MmRiNzk0ZjViOTc4MTZiMWE0NjFhYWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVi
dWdnZXJBZ2VudE1hbmFnZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRp
c3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRl
ZiBEZWJ1Z2dlckFnZW50TWFuYWdlcl9oCi0jZGVmaW5lIERlYnVnZ2VyQWdlbnRNYW5hZ2VyX2gK
LQotI2luY2x1ZGUgIldlYkNTdHJpbmcuaCIKLSNpbmNsdWRlICJXZWJEZXZUb29sc0FnZW50Lmgi
Ci0jaW5jbHVkZSA8djgtZGVidWcuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBQYWdlOwotY2xh
c3MgUGFnZUdyb3VwTG9hZERlZmVycmVyOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xh
c3MgRGVidWdnZXJBZ2VudEltcGw7Ci1jbGFzcyBEaWN0aW9uYXJ5VmFsdWU7Ci1jbGFzcyBXZWJG
cmFtZUltcGw7Ci1jbGFzcyBXZWJWaWV3SW1wbDsKLQotLy8gVGhlcmUgaXMgc2luZ2xlIHY4IGlu
c3RhbmNlIHBlciByZW5kZXIgcHJvY2Vzcy4gQWxzbyB0aGVyZSBtYXkgYmUgc2V2ZXJhbAotLy8g
UmVuZGVyVmlld3MgYW5kIGNvbnNlcXVlbnRseSBkZXZ0b29scyBhZ2VudHMgaW4gdGhlIHByb2Nl
c3MgdGhhdCB3YW50IHRvIHRhbGsKLS8vIHRvIHRoZSB2OCBkZWJ1Z2dlci4gVGhpcyBjbGFzcyBj
b29yZGluYXRlcyBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIGRlYnVnCi0vLyBhZ2VudHMgYW5k
IHY4IGRlYnVnZ2VyLiBJdCB3aWxsIHNldCBkZWJ1ZyBvdXRwdXQgaGFuZGxlciBhcyBsb25nIGFz
IGF0IGxlYXN0Ci0vLyBvbmUgZGVidWdnZXIgYWdlbnQgaXMgYXR0YWNoZWQgYW5kIHJlbW92ZSBp
dCB3aGVuIGxhc3QgZGVidWdnZXIgYWdlbnQgaXMKLS8vIGRldGFjaGVkLiBXaGVuIG1lc3NhZ2Ug
aXMgcmVjZWl2ZWQgZnJvbSBkZWJ1Z2dlciBpdCB3aWxsIHJvdXRlIGl0IHRvIHRoZQotLy8gcmln
aHQgZGVidWdnZXIgYWdlbnQgaWYgdGhlcmUgaXMgb25lIG90aGVyd2lzZSB0aGUgbWVzc2FnZSB3
aWxsIGJlIGlnbm9yZWQuCi0vLwotLy8gdjggbWF5IHNlbmQgYSBtZXNzYWdlKGUuZy4gZXhjZXB0
aW9uIGV2ZW50KSBhZnRlciB3aGljaCBpdAotLy8gd291bGQgZXhwZWN0IHNvbWUgYWN0aW9ucyBm
cm9tIHRoZSBoYW5kbGVyLiBJZiB0aGVyZSBpcyBubyBhcHByb3ByaWF0ZQotLy8gZGVidWdnZXIg
YWdlbnQgdG8gaGFuZGxlIHN1Y2ggbWVzc2FnZXMgdGhlIG1hbmFnZXIgd2lsbCBwZXJmb3JtIHRo
ZSBhY3Rpb24KLS8vIGl0c2VsZiwgb3RoZXJ3aXNlIHY4IG1heSBoYW5nIHdhaXRpbmcgZm9yIHRo
ZSBhY3Rpb24uCi1jbGFzcyBEZWJ1Z2dlckFnZW50TWFuYWdlciB7Ci0gICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoRGVidWdnZXJBZ2VudE1hbmFnZXIpOwotcHVibGljOgotICAgIHN0YXRpYyB2b2lk
IGRlYnVnQXR0YWNoKERlYnVnZ2VyQWdlbnRJbXBsKiBkZWJ1Z2dlckFnZW50KTsKLSAgICBzdGF0
aWMgdm9pZCBkZWJ1Z0RldGFjaChEZWJ1Z2dlckFnZW50SW1wbCogZGVidWdnZXJBZ2VudCk7Ci0g
ICAgc3RhdGljIHZvaWQgcGF1c2VTY3JpcHQoKTsKLSAgICBzdGF0aWMgdm9pZCBleGVjdXRlRGVi
dWdnZXJDb21tYW5kKGNvbnN0IFdURjo6U3RyaW5nJiBjb21tYW5kLCBpbnQgY2FsbGVySWQpOwot
ICAgIHN0YXRpYyB2b2lkIHNldE1lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyKFdlYkRldlRvb2xz
QWdlbnQ6Ok1lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyIGhhbmRsZXIpOwotICAgIHN0YXRpYyB2
b2lkIHNldEV4cG9zZVY4RGVidWdnZXJQcm90b2NvbChib29sKTsKLQotICAgIC8vIFNldHMgfGhv
c3RJZHwgYXMgdGhlIGZyYW1lIGNvbnRleHQgZGF0YS4gVGhpcyBpZCBpcyB1c2VkIHRvIGZpbHRl
ciBzY3JpcHRzCi0gICAgLy8gcmVsYXRlZCB0byB0aGUgaW5zcGVjdGVkIHBhZ2UuCi0gICAgc3Rh
dGljIHZvaWQgc2V0SG9zdElkKFdlYkZyYW1lSW1wbCogd2ViZnJhbWUsIGludCBob3N0SWQpOwot
Ci0gICAgc3RhdGljIHZvaWQgb25XZWJWaWV3Q2xvc2VkKFdlYlZpZXdJbXBsKiB3ZWJ2aWV3KTsK
LQotICAgIHN0YXRpYyB2b2lkIG9uTmF2aWdhdGUoKTsKLQotcHJpdmF0ZToKLSAgICBEZWJ1Z2dl
ckFnZW50TWFuYWdlcigpOwotICAgIH5EZWJ1Z2dlckFnZW50TWFuYWdlcigpOwotCi0gICAgc3Rh
dGljIHZvaWQgZGVidWdIb3N0RGlzcGF0Y2hIYW5kbGVyKCk7Ci0gICAgc3RhdGljIHZvaWQgb25W
OERlYnVnTWVzc2FnZShjb25zdCB2ODo6RGVidWc6Ok1lc3NhZ2UmIG1lc3NhZ2UpOwotICAgIHN0
YXRpYyB2b2lkIHNlbmRDb21tYW5kVG9WOChjb25zdCBXVEY6OlN0cmluZyYgY21kLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2ODo6RGVidWc6OkNsaWVudERhdGEqIGRhdGEpOwot
ICAgIHN0YXRpYyB2b2lkIHNlbmRDb250aW51ZUNvbW1hbmRUb1Y4KCk7Ci0KLSAgICBzdGF0aWMg
RGVidWdnZXJBZ2VudEltcGwqIGZpbmRBZ2VudEZvckN1cnJlbnRWOENvbnRleHQoKTsKLSAgICBz
dGF0aWMgRGVidWdnZXJBZ2VudEltcGwqIGRlYnVnZ2VyQWdlbnRGb3JIb3N0SWQoaW50IGhvc3RJ
ZCk7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBEZWJ1Z2dlckFnZW50SW1wbCo+IEF0dGFj
aGVkQWdlbnRzTWFwOwotICAgIHN0YXRpYyBBdHRhY2hlZEFnZW50c01hcCogc19hdHRhY2hlZEFn
ZW50c01hcDsKLQotICAgIHN0YXRpYyBXZWJEZXZUb29sc0FnZW50OjpNZXNzYWdlTG9vcERpc3Bh
dGNoSGFuZGxlciBzX21lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyOwotICAgIHN0YXRpYyBib29s
IHNfaW5Ib3N0RGlzcGF0Y2hIYW5kbGVyOwotCi0gICAgc3RhdGljIGJvb2wgc19leHBvc2VWOERl
YnVnZ2VyUHJvdG9jb2w7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1w
bC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5j
cHAKaW5kZXggOTM0OWE0MGE3OTk1YjJmYjdlZjM3MDAxOGE5OGRmMDc1YTc4NTUxMC4uZGQzMTM2
MTQ0MmE0ZjIxNmNkZDE0ZjE5ZmIwMWViNDlhZGJhZGFlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcApAQCAtMzEsOCArMzEs
NiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkRldlRvb2xzQWdlbnRJbXBs
LmgiCiAKLSNpbmNsdWRlICJEZWJ1Z2dlckFnZW50SW1wbC5oIgotI2luY2x1ZGUgIkRlYnVnZ2Vy
QWdlbnRNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0SG9zdC5oIgpAQCAtMTgz
LDEzICsxODEsMTEgQEAgV2ViRGV2VG9vbHNBZ2VudEltcGw6OldlYkRldlRvb2xzQWdlbnRJbXBs
KAogICAgICwgbV93ZWJWaWV3SW1wbCh3ZWJWaWV3SW1wbCkKICAgICAsIG1fYXR0YWNoZWQoZmFs
c2UpCiB7Ci0gICAgRGVidWdnZXJBZ2VudE1hbmFnZXI6OnNldEV4cG9zZVY4RGVidWdnZXJQcm90
b2NvbCgKLSAgICAgICAgY2xpZW50LT5leHBvc2VWOERlYnVnZ2VyUHJvdG9jb2woKSk7CisgICAg
QVNTRVJUKG1faG9zdElkID4gMCk7CiB9CiAKIFdlYkRldlRvb2xzQWdlbnRJbXBsOjp+V2ViRGV2
VG9vbHNBZ2VudEltcGwoKQogewotICAgIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpvbldlYlZpZXdD
bG9zZWQobV93ZWJWaWV3SW1wbCk7CiAgICAgQ2xpZW50TWVzc2FnZUxvb3BBZGFwdGVyOjppbnNw
ZWN0ZWRWaWV3Q2xvc2VkKG1fd2ViVmlld0ltcGwpOwogfQogCkBAIC0xOTgsMTAgKzE5NCw3IEBA
IHZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmF0dGFjaCgpCiAgICAgaWYgKG1fYXR0YWNoZWQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghbV9jbGllbnQtPmV4cG9zZVY4RGVidWdnZXJQ
cm90b2NvbCgpKQotICAgICAgICBDbGllbnRNZXNzYWdlTG9vcEFkYXB0ZXI6OmVuc3VyZUNsaWVu
dE1lc3NhZ2VMb29wQ3JlYXRlZChtX2NsaWVudCk7Ci0KLSAgICBtX2RlYnVnZ2VyQWdlbnRJbXBs
ID0gYWRvcHRQdHIobmV3IERlYnVnZ2VyQWdlbnRJbXBsKG1fd2ViVmlld0ltcGwsIHRoaXMsIG1f
Y2xpZW50KSk7CisgICAgQ2xpZW50TWVzc2FnZUxvb3BBZGFwdGVyOjplbnN1cmVDbGllbnRNZXNz
YWdlTG9vcENyZWF0ZWQobV9jbGllbnQpOwogICAgIG1fYXR0YWNoZWQgPSB0cnVlOwogfQogCkBA
IC0yMTgsNyArMjExLDYgQEAgdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6ZGV0YWNoKCkKICAg
ICBpYy0+ZGlzY29ubmVjdEZyb250ZW5kKCk7CiAgICAgaWMtPmhpZGVIaWdobGlnaHQoKTsKICAg
ICBpYy0+Y2xvc2UoKTsKLSAgICBtX2RlYnVnZ2VyQWdlbnRJbXBsLmNsZWFyKCk7CiAgICAgbV9h
dHRhY2hlZCA9IGZhbHNlOwogfQogCkBAIC0yMzAsMTIgKzIyMiwxMyBAQCB2b2lkIFdlYkRldlRv
b2xzQWdlbnRJbXBsOjpmcm9udGVuZExvYWRlZCgpCiB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBs
OjpkaWROYXZpZ2F0ZSgpCiB7CiAgICAgQ2xpZW50TWVzc2FnZUxvb3BBZGFwdGVyOjpkaWROYXZp
Z2F0ZSgpOwotICAgIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpvbk5hdmlnYXRlKCk7CiB9CiAKIHZv
aWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmRpZENsZWFyV2luZG93T2JqZWN0KFdlYkZyYW1lSW1w
bCogd2ViZnJhbWUpCiB7Ci0gICAgRGVidWdnZXJBZ2VudE1hbmFnZXI6OnNldEhvc3RJZCh3ZWJm
cmFtZSwgbV9ob3N0SWQpOworICAgIFdlYkNvcmU6OlY4UHJveHkqIHByb3h5ID0gV2ViQ29yZTo6
VjhQcm94eTo6cmV0cmlldmUod2ViZnJhbWUtPmZyYW1lKCkpOworICAgIGlmIChwcm94eSkKKyAg
ICAgICAgcHJveHktPnNldENvbnRleHREZWJ1Z0lkKG1faG9zdElkKTsKIH0KIAogdm9pZCBXZWJE
ZXZUb29sc0FnZW50SW1wbDo6ZGlzcGF0Y2hPbkluc3BlY3RvckJhY2tlbmQoY29uc3QgV2ViU3Ry
aW5nJiBtZXNzYWdlKQpAQCAtMzQ4LDE2ICszNDEsNiBAQCBib29sIFdlYkRldlRvb2xzQWdlbnQ6
OnN1cHBvcnRzSW5zcGVjdG9yUHJvdG9jb2xWZXJzaW9uKGNvbnN0IFdlYlN0cmluZyYgdmVyc2lv
bgogICAgIHJldHVybiBXZWJDb3JlOjpzdXBwb3J0c0luc3BlY3RvclByb3RvY29sVmVyc2lvbih2
ZXJzaW9uKTsKIH0KIAotdm9pZCBXZWJEZXZUb29sc0FnZW50OjpleGVjdXRlRGVidWdnZXJDb21t
YW5kKGNvbnN0IFdlYlN0cmluZyYgY29tbWFuZCwgaW50IGNhbGxlcklkKQotewotICAgIERlYnVn
Z2VyQWdlbnRNYW5hZ2VyOjpleGVjdXRlRGVidWdnZXJDb21tYW5kKGNvbW1hbmQsIGNhbGxlcklk
KTsKLX0KLQotdm9pZCBXZWJEZXZUb29sc0FnZW50OjpkZWJ1Z2dlclBhdXNlU2NyaXB0KCkKLXsK
LSAgICBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6cGF1c2VTY3JpcHQoKTsKLX0KLQogdm9pZCBXZWJE
ZXZUb29sc0FnZW50OjppbnRlcnJ1cHRBbmREaXNwYXRjaChNZXNzYWdlRGVzY3JpcHRvciogcmF3
RGVzY3JpcHRvcikKIHsKICAgICAvLyByYXdEZXNjcmlwdG9yIGNhbid0IGJlIGEgUGFzc093blB0
ciBiZWNhdXNlIGludGVycnVwdEFuZERpc3BhdGNoIGlzIGEgV2ViS2l0IEFQSSBmdW5jdGlvbi4K
QEAgLTQwMiw5ICszODUsNCBAQCBXZWJTdHJpbmcgV2ViRGV2VG9vbHNBZ2VudDo6ZGlzY29ubmVj
dEV2ZW50QXNUZXh0KCkKICAgICByZXR1cm4gY2hhbm5lbC5tX21lc3NhZ2U7CiB9CiAKLXZvaWQg
V2ViRGV2VG9vbHNBZ2VudDo6c2V0TWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIoTWVzc2FnZUxv
b3BEaXNwYXRjaEhhbmRsZXIgaGFuZGxlcikKLXsKLSAgICBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6
c2V0TWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIoaGFuZGxlcik7Ci19Ci0KIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2
VG9vbHNBZ2VudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xz
QWdlbnRJbXBsLmgKaW5kZXggZTdiYzBmZDExZDdkMTJlMzZmYzlkNDA2ZTBiYmJhOWQ0NGUwNjEw
YS4uNjNmNzlhYmM4YTVkMGI3Zjc4NmUxYWZmMmY4NGNkYjM4Y2Q4M2JhMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oCkBAIC01MCw3
ICs1MCw2IEBAIGNsYXNzIE5vZGU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBEZWJ1
Z2dlckFnZW50SW1wbDsKIGNsYXNzIFdlYkRldlRvb2xzQWdlbnRDbGllbnQ7CiBjbGFzcyBXZWJG
cmFtZTsKIGNsYXNzIFdlYkZyYW1lSW1wbDsKQEAgLTEwNyw3ICsxMDYsNiBAQCBwcml2YXRlOgog
ICAgIGludCBtX2hvc3RJZDsKICAgICBXZWJEZXZUb29sc0FnZW50Q2xpZW50KiBtX2NsaWVudDsK
ICAgICBXZWJWaWV3SW1wbCogbV93ZWJWaWV3SW1wbDsKLSAgICBPd25QdHI8RGVidWdnZXJBZ2Vu
dEltcGw+IG1fZGVidWdnZXJBZ2VudEltcGw7CiAgICAgYm9vbCBtX2F0dGFjaGVkOwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116510</attachid>
            <date>2011-11-24 07:33:52 -0800</date>
            <delta_ts>2011-11-24 10:45:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73081-20111124193350.patch</filename>
            <type>text/plain</type>
            <size>32985</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMTM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGNiYjc0YTc4N2ZiNmYy
ZGEzZjE5ZjAyNjRiZTM2YWY2ZDQ4ODM3Zi4uN2NiNmZjNjY0ZmY1OWEwYmJiODEzNzA2MzQxNzdl
ZmM3YjJlZDc5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDExLTExLTI0ICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0g
V2ViIEluc3BlY3RvcjogcmVtb3ZlIGxlZ2FjeSBkZWJ1Z2dlciBzdXBwb3J0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzA4MQorCisgICAgICAgIFJl
bW92ZWQgY2xhc3NlZCBwcm92aWRpbmcgYWNjZXNzIHRvIFY4IGRlYnVnZ2luZyBwcm90b2NvbC4g
Q2xpZW50cyBzaG91bGQKKyAgICAgICAgdXNlIFdlYiBJbnNwZWN0b3IgcHJvdG9jb2wgaW5zdGVh
ZC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJp
bmRpbmdzL3Y4L1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
YWdlU2NyaXB0RGVidWdTZXJ2ZXI6OlBhZ2VTY3JpcHREZWJ1Z1NlcnZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OmFkZExpc3RlbmVyKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuaDoKKwogMjAxMS0xMS0yNCAgVG9yIEFy
bmUgVmVzdGLDuCAgPHRvci5hcm5lLnZlc3Rib0Bub2tpYS5jb20+CiAKICAgICAgICAgW1F0XSBH
ZXQgcmlkIG9mIHRoZSBidWlsZERpckZvclNvdXJjZSgpIGZ1bmN0aW9uIGluIHRoZSBidWlsZCBz
eXN0ZW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggM2E3MjA2YzViYjMwOGI0NTQyYTYx
OGZhZTVhZmRhY2U1MGI4Mzc2OS4uOTY2Mjg2MTk1ZTc2NGY3ZTgyZGZiZjAzYzlhMjgwMGRmYmI1
YTJmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAxMS0x
MS0yNCAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBb
Q2hyb21pdW1dIFdlYiBJbnNwZWN0b3I6IHJlbW92ZSBsZWdhY3kgZGVidWdnZXIgc3VwcG9ydAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwODEKKwor
ICAgICAgICBSZW1vdmVkIGNsYXNzZWQgcHJvdmlkaW5nIGFjY2VzcyB0byBWOCBkZWJ1Z2dpbmcg
cHJvdG9jb2wuIENsaWVudHMgc2hvdWxkCisgICAgICAgIHVzZSBXZWIgSW5zcGVjdG9yIHByb3Rv
Y29sIGluc3RlYWQuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJEZXZUb29sc0FnZW50Lmg6
CisgICAgICAgICogcHVibGljL1dlYkRldlRvb2xzQWdlbnRDbGllbnQuaDoKKyAgICAgICAgKiBz
cmMvRGVidWdnZXJBZ2VudEltcGwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9EZWJ1Z2dl
ckFnZW50SW1wbC5oOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9EZWJ1Z2dlckFnZW50TWFuYWdl
ci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2VyLmg6IFJl
bW92ZWQuCisgICAgICAgICogc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OldlYkRldlRvb2xzQWdlbnRJbXBsKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6On5XZWJEZXZUb29sc0FnZW50SW1w
bCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjphdHRhY2gpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6ZGV0YWNoKToKKyAgICAgICAgKFdl
YktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OmRpZE5hdmlnYXRlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OmRpZENsZWFyV2luZG93T2JqZWN0KToKKyAgICAgICAg
KiBzcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaDoKKwogMjAxMS0xMS0yMyAgR3JlZyBCaWxsb2Nr
ICA8Z2JpbGxvY2tAZ29vZ2xlLmNvbT4KIAogICAgICAgICBBZGQgc2ltcGxlIGltcGxlbWVudGF0
aW9uIGZvciB3ZWIgaW50ZW50cyBjaHJvbWl1bSBBUEkgZGF0YSBjbGFzc2VzLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAKaW5k
ZXggZjE0OWQ4ZjYxYzIyMDY2ZDIxODExZDY3NjRiZGFjNDgxNmRlNDMzMC4uZGFmNzk2MDgxMzVi
ODUxOWE1ZjBkNTk3NjZmN2E1ZjAyNjhiYzZmNiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCkBAIC03MSwxNSArNzEsMTEg
QEAgUGFnZVNjcmlwdERlYnVnU2VydmVyJiBQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgp
CiBQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OlBhZ2VTY3JpcHREZWJ1Z1NlcnZlcigpCiAgICAgOiBT
Y3JpcHREZWJ1Z1NlcnZlcigpCiAgICAgLCBtX3BhdXNlZFBhZ2UoMCkKLSAgICAsIG1fZW5hYmxl
ZCh0cnVlKQogewogfQogCiB2b2lkIFBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6YWRkTGlzdGVuZXIo
U2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIFBhZ2UqIHBhZ2UpCiB7Ci0gICAgaWYgKCFt
X2VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQogICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94
eTo6cmV0cmlldmUocGFnZS0+bWFpbkZyYW1lKCkpOwogICAgIGlmICghcHJveHkpCiAgICAgICAg
IHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1BhZ2VTY3Jp
cHREZWJ1Z1NlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvUGFnZVNjcmlwdERl
YnVnU2VydmVyLmgKaW5kZXggNGIxMzRjMThkYjhlYjY5OGU2NjA1ODM2NWI3OWQ4ZmZlNjFlYWRk
Ny4uNzUxZDczM2Q2ZGU0NzIyNGRkMWFjMDAzNzllODc0OTEyZGViNGFmZiAxMDA3NTUKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvUGFnZVNjcmlwdERlYnVnU2VydmVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvUGFnZVNjcmlwdERlYnVnU2VydmVyLmgKQEAgLTQ4
LDkgKzQ4LDYgQEAgcHVibGljOgogICAgIHZvaWQgYWRkTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0
ZW5lciosIFBhZ2UqKTsKICAgICB2b2lkIHJlbW92ZUxpc3RlbmVyKFNjcmlwdERlYnVnTGlzdGVu
ZXIqLCBQYWdlKik7CiAKLSAgICAvLyB2OC1zcGVjaWZpYyBtZXRob2RzLgotICAgIHZvaWQgc2V0
RW5hYmxlZChib29sIHZhbHVlKSB7IG1fZW5hYmxlZCA9IHZhbHVlOyB9Ci0gICAgCiAgICAgY2xh
c3MgQ2xpZW50TWVzc2FnZUxvb3AgewogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+Q2xp
ZW50TWVzc2FnZUxvb3AoKSB7IH0KQEAgLTcxLDcgKzY4LDYgQEAgcHJpdmF0ZToKICAgICBMaXN0
ZW5lcnNNYXAgbV9saXN0ZW5lcnNNYXA7CiAgICAgT3duUHRyPENsaWVudE1lc3NhZ2VMb29wPiBt
X2NsaWVudE1lc3NhZ2VMb29wOwogICAgIFBhZ2UqIG1fcGF1c2VkUGFnZTsKLSAgICBib29sIG1f
ZW5hYmxlZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cAppbmRleCBhZmFhYjc4ZDE3NWIwM2JmYzdhMDRhMjg2ODhmMjMyNzNiY2JkMzVhLi44
YjAzZTRhMGNjMTI0ODhiMjFhY2YxNzAyZWUzOThmMjdhZDBjMzY1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwCkBAIC0zNzIsMTAgKzM3Miw2IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9D
b250ZXh0TWVudUNsaWVudEltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL0NvbnRleHRN
ZW51Q2xpZW50SW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL0RhdGFiYXNlT2JzZXJ2ZXIu
Y3BwJywKLSAgICAgICAgICAgICAgICAnc3JjL0RlYnVnZ2VyQWdlbnRJbXBsLmNwcCcsCi0gICAg
ICAgICAgICAgICAgJ3NyYy9EZWJ1Z2dlckFnZW50SW1wbC5oJywKLSAgICAgICAgICAgICAgICAn
c3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2VyLmNwcCcsCi0gICAgICAgICAgICAgICAgJ3NyYy9EZWJ1
Z2dlckFnZW50TWFuYWdlci5oJywKICAgICAgICAgICAgICAgICAnc3JjL0RldmljZU9yaWVudGF0
aW9uQ2xpZW50UHJveHkuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL0RldmljZU9yaWVudGF0
aW9uQ2xpZW50UHJveHkuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9ET01VdGlsaXRpZXNQcml2
YXRlLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJE
ZXZUb29sc0FnZW50LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEZXZUb29s
c0FnZW50LmgKaW5kZXggYWY0Yjg3ZWViMDM5NWJjODczOThkN2Y5YTg4YjAyYzIzYmJmNGMxNS4u
ZTBiYjMyYTU3NmZkYjczNzdhZmIyMDA0MjMwNTRkMmExYWUwZGFkZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRGV2VG9vbHNBZ2VudC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRldlRvb2xzQWdlbnQuaApAQCAtNzEsMTQgKzcx
LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGxv
bmcgY2FsbElkLCBjb25zdCBXZWJTdHJpbmcmIHNjcmlwdCkgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRKYXZhU2NyaXB0UHJvZmlsaW5nRW5hYmxlZChib29sKSA9IDA7CiAKLSAgICAvLyBBc3lu
Y2hyb25vdXNseSBleGVjdXRlcyBkZWJ1Z2dlciBjb21tYW5kIGluIHRoZSByZW5kZXIgdGhyZWFk
LgotICAgIC8vIHxjYWxsZXJJZGVudGlmaWVyfCB3aWxsIGJlIHVzZWQgZm9yIHNlbmRpbmcgcmVz
cG9uc2UuCi0gICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgdm9pZCBleGVjdXRlRGVidWdnZXJDb21t
YW5kKAotICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGNvbW1hbmQsIGludCBjYWxsZXJJZGVudGlm
aWVyKTsKLQotICAgIC8vIEFzeW5jaHJvbm91c2x5IHJlcXVlc3QgZGVidWdnZXIgdG8gcGF1c2Ug
aW1tZWRpYXRlbHkuCi0gICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgdm9pZCBkZWJ1Z2dlclBhdXNl
U2NyaXB0KCk7Ci0KICAgICBjbGFzcyBNZXNzYWdlRGVzY3JpcHRvciB7CiAgICAgcHVibGljOgog
ICAgICAgICB2aXJ0dWFsIH5NZXNzYWdlRGVzY3JpcHRvcigpIHsgfQpAQCAtOTMsMTIgKzg1LDYg
QEAgcHVibGljOgogICAgIC8vIFJldHVybnMgYSBkaXNjb25uZWN0IGV2ZW50IHRoYXQgY2FuIGJl
IGRpc3BhdGNoZWQgb24gdGhlIGZyb250LWVuZAogICAgIC8vIGluIG9yZGVyIHRvIGxldCBpdCBr
bm93IHRoYXQgaXQgaGFzIGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSBhZ2VudC4KICAgICBXRUJLSVRf
RVhQT1JUIHN0YXRpYyBXZWJTdHJpbmcgZGlzY29ubmVjdEV2ZW50QXNUZXh0KCk7Ci0KLSAgICB0
eXBlZGVmIHZvaWQgKCpNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlcikoKTsKLQotICAgIC8vIElu
c3RhbGxzIGRpc3BhdGNoIGhhbmRsZSB0aGF0IGlzIGdvaW5nIHRvIGJlIGNhbGxlZCBwZXJpb2Rp
Y2FsbHkKLSAgICAvLyB3aGlsZSBvbiBhIGJyZWFrcG9pbnQuCi0gICAgV0VCS0lUX0VYUE9SVCBz
dGF0aWMgdm9pZCBzZXRNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlcihNZXNzYWdlTG9vcERpc3Bh
dGNoSGFuZGxlcik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRldlRvb2xzQWdlbnRDbGllbnQuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRldlRvb2xzQWdlbnRDbGllbnQuaAppbmRl
eCBiYzc0ZDExMjgwMWJmMDIwYjQxMWZkOWZlMzM3MWE2NmQ2ZDkyYzI5Li45YzYzYjExOWQ4NTVk
OWNjZjYzZTFiZWMwMTRkZTg5MzUyMGJlY2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJEZXZUb29sc0FnZW50Q2xpZW50LmgKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViRGV2VG9vbHNBZ2VudENsaWVudC5oCkBAIC01OCw4ICs1OCw2
IEBAIHB1YmxpYzoKICAgICB9OwogICAgIHZpcnR1YWwgV2ViS2l0Q2xpZW50TWVzc2FnZUxvb3Aq
IGNyZWF0ZUNsaWVudE1lc3NhZ2VMb29wKCkgeyByZXR1cm4gMDsgfQogCi0gICAgdmlydHVhbCBi
b29sIGV4cG9zZVY4RGVidWdnZXJQcm90b2NvbCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KICAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJCcm93c2VyQ2FjaGUoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgY2xl
YXJCcm93c2VyQ29va2llcygpIHsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9EZWJ1Z2dlckFnZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9EZWJ1Z2dlckFnZW50SW1wbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVk
ZDVjNTg5N2QwMDg2MjYzMTJlMzJmZmI2ZDE4YTkxNDY5NzRkNDMuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
RGVidWdnZXJBZ2VudEltcGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBk
aXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEZWJ1Z2dlckFnZW50SW1wbC5oIgotCi0jaW5jbHVk
ZSAiRGVidWdnZXJBZ2VudE1hbmFnZXIuaCIKLSNpbmNsdWRlICJXZWJEZXZUb29sc0FnZW50Q2xp
ZW50LmgiCi0jaW5jbHVkZSAiV2ViRGV2VG9vbHNBZ2VudEltcGwuaCIKLSNpbmNsdWRlICJXZWJW
aWV3SW1wbC5oIgotCi11c2luZyBXVEY6OlN0cmluZzsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LURlYnVnZ2VyQWdlbnRJbXBsOjpEZWJ1Z2dlckFnZW50SW1wbCgKLSAgICBXZWJWaWV3SW1wbCog
d2ViVmlld0ltcGwsCi0gICAgV2ViRGV2VG9vbHNBZ2VudEltcGwqIHdlYmRldnRvb2xzQWdlbnQs
Ci0gICAgV2ViRGV2VG9vbHNBZ2VudENsaWVudCogd2ViZGV2dG9vbHNBZ2VudENsaWVudCkKLSAg
ICA6IG1fd2ViVmlld0ltcGwod2ViVmlld0ltcGwpCi0gICAgLCBtX3dlYmRldnRvb2xzQWdlbnQo
d2ViZGV2dG9vbHNBZ2VudCkKLSAgICAsIG1fd2ViZGV2dG9vbHNBZ2VudENsaWVudCh3ZWJkZXZ0
b29sc0FnZW50Q2xpZW50KQotICAgICwgbV9hdXRvQ29udGludWVPbkV4Y2VwdGlvbihmYWxzZSkK
LXsKLSAgICBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6ZGVidWdBdHRhY2godGhpcyk7Ci19Ci0KLURl
YnVnZ2VyQWdlbnRJbXBsOjp+RGVidWdnZXJBZ2VudEltcGwoKQotewotICAgIERlYnVnZ2VyQWdl
bnRNYW5hZ2VyOjpkZWJ1Z0RldGFjaCh0aGlzKTsKLX0KLQotdm9pZCBEZWJ1Z2dlckFnZW50SW1w
bDo6ZGVidWdnZXJPdXRwdXQoY29uc3QgU3RyaW5nJiBjb21tYW5kKQotewotICAgIG1fd2ViZGV2
dG9vbHNBZ2VudENsaWVudC0+c2VuZERlYnVnZ2VyT3V0cHV0KGNvbW1hbmQpOwotfQotCi1XZWJD
b3JlOjpQYWdlKiBEZWJ1Z2dlckFnZW50SW1wbDo6cGFnZSgpCi17Ci0gICAgcmV0dXJuIG1fd2Vi
Vmlld0ltcGwtPnBhZ2UoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50SW1wbC5oIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2VudEltcGwuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYThmY2M0ZTZmNDMzMGMzMWVjNmUyNDNkNWViNmVkYWU2OGE0MWJhZC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50SW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEs
NzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0
OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgRGVidWdnZXJBZ2VudEltcGxfaAotI2RlZmluZSBEZWJ1Z2dlckFn
ZW50SW1wbF9oCi0KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci1jbGFzcyBQYWdlOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViRGV2
VG9vbHNBZ2VudENsaWVudDsKLWNsYXNzIFdlYkRldlRvb2xzQWdlbnRJbXBsOwotY2xhc3MgV2Vi
Vmlld0ltcGw7Ci0KLWNsYXNzIERlYnVnZ2VyQWdlbnRJbXBsIHsKLXB1YmxpYzoKLSAgICBEZWJ1
Z2dlckFnZW50SW1wbChXZWJLaXQ6OldlYlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCwKLSAgICAgICAg
ICAgICAgICAgICAgICBXZWJEZXZUb29sc0FnZW50SW1wbCogd2ViZGV2dG9vbHNBZ2VudCwKLSAg
ICAgICAgICAgICAgICAgICAgICBXZWJEZXZUb29sc0FnZW50Q2xpZW50KiB3ZWJkZXZ0b29sc0Fn
ZW50Q2xpZW50KTsKLSAgICB2aXJ0dWFsIH5EZWJ1Z2dlckFnZW50SW1wbCgpOwotCi0gICAgdm9p
ZCBkZWJ1Z2dlck91dHB1dChjb25zdCBXVEY6OlN0cmluZyYgb3V0KTsKLQotICAgIHZvaWQgc2V0
QXV0b0NvbnRpbnVlT25FeGNlcHRpb24oYm9vbCBhdXRvQ29udGludWUpIHsgbV9hdXRvQ29udGlu
dWVPbkV4Y2VwdGlvbiA9IGF1dG9Db250aW51ZTsgfQotCi0gICAgYm9vbCBhdXRvQ29udGludWVP
bkV4Y2VwdGlvbigpIHsgcmV0dXJuIG1fYXV0b0NvbnRpbnVlT25FeGNlcHRpb247IH0KLQotICAg
IFdlYkNvcmU6OlBhZ2UqIHBhZ2UoKTsKLSAgICBXZWJEZXZUb29sc0FnZW50SW1wbCogd2ViZGV2
dG9vbHNBZ2VudCgpIHsgcmV0dXJuIG1fd2ViZGV2dG9vbHNBZ2VudDsgfQotCi0gICAgV2ViS2l0
OjpXZWJWaWV3SW1wbCogd2ViVmlldygpIHsgcmV0dXJuIG1fd2ViVmlld0ltcGw7IH0KLQotcHJp
dmF0ZToKLSAgICBXZWJLaXQ6OldlYlZpZXdJbXBsKiBtX3dlYlZpZXdJbXBsOwotICAgIFdlYkRl
dlRvb2xzQWdlbnRJbXBsKiBtX3dlYmRldnRvb2xzQWdlbnQ7Ci0gICAgV2ViRGV2VG9vbHNBZ2Vu
dENsaWVudCogbV93ZWJkZXZ0b29sc0FnZW50Q2xpZW50OwotICAgIGJvb2wgbV9hdXRvQ29udGlu
dWVPbkV4Y2VwdGlvbjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2Vy
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2VyLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNlYmJmNDlhNzU2ZmEwZTZkM2E3YWE2
MzM2NzdlNDkxZDdjZTU0ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50TWFuYWdlci5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJEZWJ1Z2dlckFnZW50TWFuYWdlci5oIgotCi0jaW5jbHVkZSAiRGVidWdnZXJBZ2Vu
dEltcGwuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIlBhZ2VHcm91cExvYWREZWZl
cnJlci5oIgotI2luY2x1ZGUgIlBhZ2VTY3JpcHREZWJ1Z1NlcnZlci5oIgotI2luY2x1ZGUgIlY4
UHJveHkuaCIKLSNpbmNsdWRlICJXZWJEZXZUb29sc0FnZW50SW1wbC5oIgotI2luY2x1ZGUgIldl
YkZyYW1lSW1wbC5oIgotI2luY2x1ZGUgIldlYlZpZXdJbXBsLmgiCi0jaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViRGV2VG9v
bHNBZ2VudDo6TWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIgRGVidWdnZXJBZ2VudE1hbmFnZXI6
OnNfbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIgPSAwOwotCi1ib29sIERlYnVnZ2VyQWdlbnRN
YW5hZ2VyOjpzX2luSG9zdERpc3BhdGNoSGFuZGxlciA9IGZhbHNlOwotCi1ib29sIERlYnVnZ2Vy
QWdlbnRNYW5hZ2VyOjpzX2V4cG9zZVY4RGVidWdnZXJQcm90b2NvbCA9IGZhbHNlOwotCi10eXBl
ZGVmIEhhc2hNYXA8V2ViVmlld0ltcGwqLCBXZWJDb3JlOjpQYWdlR3JvdXBMb2FkRGVmZXJyZXIq
PiBEZWZlcnJlcnNNYXA7Ci0KLW5hbWVzcGFjZSB7Ci0KLWNsYXNzIENhbGxlcklkV3JhcHBlciA6
IHB1YmxpYyB2ODo6RGVidWc6OkNsaWVudERhdGEgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KENhbGxlcklkV3JhcHBlcik7Ci1wdWJsaWM6Ci0gICAgQ2FsbGVySWRXcmFwcGVyKCkgOiBtX2Nh
bGxlcklzTWFuYW5hZ2VyKHRydWUpLCBtX2NhbGxlcklkKDApIHsgfQotICAgIGV4cGxpY2l0IENh
bGxlcklkV3JhcHBlcihpbnQgY2FsbGVySWQpCi0gICAgICAgIDogbV9jYWxsZXJJc01hbmFuYWdl
cihmYWxzZSkKLSAgICAgICAgLCBtX2NhbGxlcklkKGNhbGxlcklkKSB7IH0KLSAgICB+Q2FsbGVy
SWRXcmFwcGVyKCkgeyB9Ci0gICAgYm9vbCBjYWxsZXJJc01hbmFuYWdlcigpIGNvbnN0IHsgcmV0
dXJuIG1fY2FsbGVySXNNYW5hbmFnZXI7IH0KLSAgICBpbnQgY2FsbGVySWQoKSBjb25zdCB7IHJl
dHVybiBtX2NhbGxlcklkOyB9Ci1wcml2YXRlOgotICAgIGJvb2wgbV9jYWxsZXJJc01hbmFuYWdl
cjsKLSAgICBpbnQgbV9jYWxsZXJJZDsKLX07Ci0KLURlZmVycmVyc01hcCYgcGFnZURlZmVycmVy
cygpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChEZWZlcnJlcnNNYXAsIGRlZmVycmVycywg
KCkpOwotICAgIHJldHVybiBkZWZlcnJlcnM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlCi0KLQotdm9p
ZCBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6ZGVidWdIb3N0RGlzcGF0Y2hIYW5kbGVyKCkKLXsKLSAg
ICBpZiAoIXNfbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIgfHwgIXNfYXR0YWNoZWRBZ2VudHNN
YXApCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChzX2luSG9zdERpc3BhdGNoSGFuZGxlcikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgc19pbkhvc3REaXNwYXRjaEhhbmRsZXIgPSB0cnVlOwot
Ci0gICAgVmVjdG9yPFdlYlZpZXdJbXBsKj4gdmlld3M7Ci0gICAgLy8gMS4gRGlzYWJsZSBhY3Rp
dmUgb2JqZWN0cyBhbmQgaW5wdXQgZXZlbnRzLgotICAgIGZvciAoQXR0YWNoZWRBZ2VudHNNYXA6
Oml0ZXJhdG9yIGl0ID0gc19hdHRhY2hlZEFnZW50c01hcC0+YmVnaW4oKTsgaXQgIT0gc19hdHRh
Y2hlZEFnZW50c01hcC0+ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgRGVidWdnZXJBZ2VudEltcGwq
IGFnZW50ID0gaXQtPnNlY29uZDsKLSAgICAgICAgcGFnZURlZmVycmVycygpLnNldChhZ2VudC0+
d2ViVmlldygpLCBuZXcgV2ViQ29yZTo6UGFnZUdyb3VwTG9hZERlZmVycmVyKGFnZW50LT5wYWdl
KCksIHRydWUpKTsKLSAgICAgICAgdmlld3MuYXBwZW5kKGFnZW50LT53ZWJWaWV3KCkpOwotICAg
ICAgICBhZ2VudC0+d2ViVmlldygpLT5zZXRJZ25vcmVJbnB1dEV2ZW50cyh0cnVlKTsKLSAgICB9
Ci0KLSAgICAvLyAyLiBQcm9jZXNzIG1lc3NhZ2VzLgotICAgIHNfbWVzc2FnZUxvb3BEaXNwYXRj
aEhhbmRsZXIoKTsKLQotICAgIC8vIDMuIEJyaW5nIHRoaW5ncyBiYWNrLgotICAgIGZvciAoVmVj
dG9yPFdlYlZpZXdJbXBsKj46Oml0ZXJhdG9yIGl0ID0gdmlld3MuYmVnaW4oKTsgaXQgIT0gdmll
d3MuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKHBhZ2VEZWZlcnJlcnMoKS5jb250YWlucygq
aXQpKSB7Ci0gICAgICAgICAgICAvLyBUaGUgdmlldyB3YXMgbm90IGNsb3NlZCBkdXJpbmcgdGhl
IGRpc3BhdGNoLgotICAgICAgICAgICAgKCppdCktPnNldElnbm9yZUlucHV0RXZlbnRzKGZhbHNl
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBkZWxldGVBbGxWYWx1ZXMocGFnZURlZmVycmVycygp
KTsKLSAgICBwYWdlRGVmZXJyZXJzKCkuY2xlYXIoKTsKLQotICAgIHNfaW5Ib3N0RGlzcGF0Y2hI
YW5kbGVyID0gZmFsc2U7Ci0gICAgaWYgKCFzX2F0dGFjaGVkQWdlbnRzTWFwKSB7Ci0gICAgICAg
IC8vIFJlbW92ZSBoYW5kbGVycyBpZiBhbGwgYWdlbnRzIHdlcmUgZGV0YWNoZWQgd2l0aGluIGhv
c3QgZGlzcGF0Y2guCi0gICAgICAgIHY4OjpEZWJ1Zzo6U2V0TWVzc2FnZUhhbmRsZXIoMCk7Ci0g
ICAgICAgIHY4OjpEZWJ1Zzo6U2V0SG9zdERpc3BhdGNoSGFuZGxlcigwKTsKLSAgICB9Ci19Ci0K
LURlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpBdHRhY2hlZEFnZW50c01hcCogRGVidWdnZXJBZ2VudE1h
bmFnZXI6OnNfYXR0YWNoZWRBZ2VudHNNYXAgPSAwOwotCi12b2lkIERlYnVnZ2VyQWdlbnRNYW5h
Z2VyOjpkZWJ1Z0F0dGFjaChEZWJ1Z2dlckFnZW50SW1wbCogZGVidWdnZXJBZ2VudCkKLXsKLSAg
ICBpZiAoIXNfZXhwb3NlVjhEZWJ1Z2dlclByb3RvY29sKQotICAgICAgICByZXR1cm47Ci0gICAg
aWYgKCFzX2F0dGFjaGVkQWdlbnRzTWFwKSB7Ci0gICAgICAgIHNfYXR0YWNoZWRBZ2VudHNNYXAg
PSBuZXcgQXR0YWNoZWRBZ2VudHNNYXAoKTsKLSAgICAgICAgdjg6OkRlYnVnOjpTZXRNZXNzYWdl
SGFuZGxlcjIoJkRlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpvblY4RGVidWdNZXNzYWdlKTsKLSAgICAg
ICAgdjg6OkRlYnVnOjpTZXRIb3N0RGlzcGF0Y2hIYW5kbGVyKCZEZWJ1Z2dlckFnZW50TWFuYWdl
cjo6ZGVidWdIb3N0RGlzcGF0Y2hIYW5kbGVyLCAxMDAgLyogbXMgKi8pOwotICAgIH0KLSAgICBp
bnQgaG9zdElkID0gZGVidWdnZXJBZ2VudC0+d2ViZGV2dG9vbHNBZ2VudCgpLT5ob3N0SWQoKTsK
LSAgICBBU1NFUlQoaG9zdElkKTsKLSAgICBzX2F0dGFjaGVkQWdlbnRzTWFwLT5zZXQoaG9zdElk
LCBkZWJ1Z2dlckFnZW50KTsKLX0KLQotdm9pZCBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6ZGVidWdE
ZXRhY2goRGVidWdnZXJBZ2VudEltcGwqIGRlYnVnZ2VyQWdlbnQpCi17Ci0gICAgaWYgKCFzX2V4
cG9zZVY4RGVidWdnZXJQcm90b2NvbCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghc19hdHRh
Y2hlZEFnZW50c01hcCkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBpbnQgaG9zdElkID0gZGVidWdnZXJBZ2VudC0+d2ViZGV2dG9v
bHNBZ2VudCgpLT5ob3N0SWQoKTsKLSAgICBBU1NFUlQoc19hdHRhY2hlZEFnZW50c01hcC0+Z2V0
KGhvc3RJZCkgPT0gZGVidWdnZXJBZ2VudCk7Ci0gICAgYm9vbCBpc09uQnJlYWtwb2ludCA9IChm
aW5kQWdlbnRGb3JDdXJyZW50VjhDb250ZXh0KCkgPT0gZGVidWdnZXJBZ2VudCk7Ci0gICAgc19h
dHRhY2hlZEFnZW50c01hcC0+cmVtb3ZlKGhvc3RJZCk7Ci0KLSAgICBpZiAoc19hdHRhY2hlZEFn
ZW50c01hcC0+aXNFbXB0eSgpKSB7Ci0gICAgICAgIGRlbGV0ZSBzX2F0dGFjaGVkQWdlbnRzTWFw
OwotICAgICAgICBzX2F0dGFjaGVkQWdlbnRzTWFwID0gMDsKLSAgICAgICAgLy8gTm90ZSB0aGF0
IHdlIGRvIG5vdCBlbXB0eSBoYW5kbGVycyB3aGlsZSBpbiBkaXNwYXRjaCAtIHdlIHNjaGVkdWxl
Ci0gICAgICAgIC8vIGNvbnRpbnVlIGFuZCBkbyByZW1vdmFsIG9uY2Ugd2UgYXJlIG91dCBvZiB0
aGUgZGlzcGF0Y2guIEFsc28gdGhlcmUgaXMKLSAgICAgICAgLy8gbm8gbmVlZCB0byBzZW5kIGNv
bnRpbnVlIGNvbW1hbmQgaW4gdGhpcyBjYXNlIHNpbmNlIHJlbW92aW5nIG1lc3NhZ2UKLSAgICAg
ICAgLy8gaGFuZGxlciB3aWxsIGNhdXNlIGRlYnVnZ2VyIHVubG9hZCBhbmQgYWxsIGJyZWFrcG9p
bnRzIHdpbGwgYmUgY2xlYXJlZC4KLSAgICAgICAgaWYgKCFzX2luSG9zdERpc3BhdGNoSGFuZGxl
cikgewotICAgICAgICAgICAgdjg6OkRlYnVnOjpTZXRNZXNzYWdlSGFuZGxlcjIoMCk7Ci0gICAg
ICAgICAgICB2ODo6RGVidWc6OlNldEhvc3REaXNwYXRjaEhhbmRsZXIoMCk7Ci0gICAgICAgIH0K
LSAgICB9IGVsc2UgewotICAgICAgLy8gUmVtb3ZlIGFsbCBicmVha3BvaW50cyBzZXQgYnkgdGhl
IGFnZW50LgotICAgICAgU3RyaW5nIGNsZWFyQnJlYWtwb2ludEdyb3VwQ21kID0gbWFrZVN0cmlu
ZygKLSAgICAgICAgICAie1wic2VxXCI6MSxcInR5cGVcIjpcInJlcXVlc3RcIixcImNvbW1hbmRc
IjpcImNsZWFyYnJlYWtwb2ludGdyb3VwXCIsIgotICAgICAgICAgICAgICAiXCJhcmd1bWVudHNc
Ijp7XCJncm91cElkXCI6IiwgU3RyaW5nOjpudW1iZXIoaG9zdElkKSwgIn19Iik7Ci0gICAgICBz
ZW5kQ29tbWFuZFRvVjgoY2xlYXJCcmVha3BvaW50R3JvdXBDbWQsIG5ldyBDYWxsZXJJZFdyYXBw
ZXIoKSk7Ci0KLSAgICAgIGlmIChpc09uQnJlYWtwb2ludCkgewotICAgICAgICAgIC8vIEZvcmNl
IGNvbnRpbnVlIGlmIGRldGFjaCBoYXBwZW5lZCBpbiBuZXNzdGVkIG1lc3NhZ2UgbG9vcCB3aGls
ZQotICAgICAgICAgIC8vIGRlYnVnZ2VyIHdhcyBwYXVzZWQgb24gYSBicmVha3BvaW50KGFzIGxv
bmcgYXMgdGhlcmUgYXJlIG90aGVyCi0gICAgICAgICAgLy8gYXR0YWNoZWQgYWdlbnRzIHY4IHdp
bGwgd2FpdCBmb3IgZXhwbGljaXQnY29udGludWUnIG1lc3NhZ2UpLgotICAgICAgICAgIHNlbmRD
b250aW51ZUNvbW1hbmRUb1Y4KCk7Ci0gICAgICB9Ci0gICAgfQotfQotCi12b2lkIERlYnVnZ2Vy
QWdlbnRNYW5hZ2VyOjpvblY4RGVidWdNZXNzYWdlKGNvbnN0IHY4OjpEZWJ1Zzo6TWVzc2FnZSYg
bWVzc2FnZSkKLXsKLSAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7Ci0gICAgdjg6OlN0cmluZzo6
VmFsdWUgdmFsdWUobWVzc2FnZS5HZXRKU09OKCkpOwotICAgIFdURjo6U3RyaW5nIG91dChyZWlu
dGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oKnZhbHVlKSwgdmFsdWUubGVuZ3RoKCkpOwotCi0g
ICAgLy8gSWYgY2FsbGVyRGF0YSBpcyBub3QgMCB0aGUgbWVzc2FnZSBpcyBhIHJlc3BvbnNlIHRv
IGEgZGVidWdnZXIgY29tbWFuZC4KLSAgICBpZiAodjg6OkRlYnVnOjpDbGllbnREYXRhKiBjYWxs
ZXJEYXRhID0gbWVzc2FnZS5HZXRDbGllbnREYXRhKCkpIHsKLSAgICAgICAgQ2FsbGVySWRXcmFw
cGVyKiB3cmFwcGVyID0gc3RhdGljX2Nhc3Q8Q2FsbGVySWRXcmFwcGVyKj4oY2FsbGVyRGF0YSk7
Ci0gICAgICAgIGlmICh3cmFwcGVyLT5jYWxsZXJJc01hbmFuYWdlcigpKSB7Ci0gICAgICAgICAg
ICAvLyBKdXN0IGlnbm9yZSBtZXNzYWdlcyBzZW50IGJ5IHRoaXMgbWFuYWdlci4KLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBEZWJ1Z2dlckFnZW50SW1wbCogZGVidWdn
ZXJBZ2VudCA9IGRlYnVnZ2VyQWdlbnRGb3JIb3N0SWQod3JhcHBlci0+Y2FsbGVySWQoKSk7Ci0g
ICAgICAgIGlmIChkZWJ1Z2dlckFnZW50KQotICAgICAgICAgICAgZGVidWdnZXJBZ2VudC0+ZGVi
dWdnZXJPdXRwdXQob3V0KTsKLSAgICAgICAgZWxzZSBpZiAoIW1lc3NhZ2UuV2lsbFN0YXJ0UnVu
bmluZygpKSB7Ci0gICAgICAgICAgICAvLyBBdXRvY29udGludWUgZXhlY3V0aW9uIGlmIHRoZXJl
IGlzIG5vIGhhbmRsZXIuCi0gICAgICAgICAgICBzZW5kQ29udGludWVDb21tYW5kVG9WOCgpOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9IC8vIE90aGVyd2lzZSBpdCdzIGFuIGV2
ZW50IG1lc3NhZ2UuCi0gICAgQVNTRVJUKG1lc3NhZ2UuSXNFdmVudCgpKTsKLQotICAgIC8vIEln
bm9yZSB1bnN1cHBvcnRlZCBldmVudCB0eXBlcy4KLSAgICBpZiAobWVzc2FnZS5HZXRFdmVudCgp
ICE9IHY4OjpBZnRlckNvbXBpbGUgJiYgbWVzc2FnZS5HZXRFdmVudCgpICE9IHY4OjpCcmVhayAm
JiBtZXNzYWdlLkdldEV2ZW50KCkgIT0gdjg6OkV4Y2VwdGlvbikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IG1lc3NhZ2UuR2V0RXZlbnRD
b250ZXh0KCk7Ci0gICAgLy8gSWYgdGhlIGNvbnRleHQgaXMgZnJvbSBvbmUgb2YgdGhlIGlucGVj
dGVkIHRhYnMgaXQgc2hvdWxkIGhhdmUgaXRzIGNvbnRleHQKLSAgICAvLyBkYXRhLgotICAgIGlm
IChjb250ZXh0LklzRW1wdHkoKSkgewotICAgICAgICAvLyBVbmtub3duIGNvbnRleHQsIHNraXAg
dGhlIGV2ZW50LgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIGNvbnRl
eHQgaXMgZnJvbSBvbmUgb2YgdGhlIGlucGVjdGVkIHRhYnMgb3IgaW5qZWN0ZWQgZXh0ZW5zaW9u
Ci0gICAgLy8gc2NyaXB0cyBpdCBtdXN0IGhhdmUgaG9zdElkIGluIHRoZSBkYXRhIGZpZWxkLgot
ICAgIGludCBob3N0SWQgPSBXZWJDb3JlOjpWOFByb3h5Ojpjb250ZXh0RGVidWdJZChjb250ZXh0
KTsKLSAgICBpZiAoaG9zdElkICE9IC0xKSB7Ci0gICAgICAgIERlYnVnZ2VyQWdlbnRJbXBsKiBh
Z2VudCA9IGRlYnVnZ2VyQWdlbnRGb3JIb3N0SWQoaG9zdElkKTsKLSAgICAgICAgaWYgKGFnZW50
KSB7Ci0gICAgICAgICAgICBpZiAoYWdlbnQtPmF1dG9Db250aW51ZU9uRXhjZXB0aW9uKCkKLSAg
ICAgICAgICAgICAgICAmJiBtZXNzYWdlLkdldEV2ZW50KCkgPT0gdjg6OkV4Y2VwdGlvbikgewot
ICAgICAgICAgICAgICAgIHNlbmRDb250aW51ZUNvbW1hbmRUb1Y4KCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhZ2VudC0+ZGVidWdnZXJP
dXRwdXQob3V0KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGlmICghbWVzc2FnZS5XaWxsU3RhcnRSdW5uaW5nKCkpIHsKLSAgICAgICAgLy8gQXV0b2NvbnRp
bnVlIGV4ZWN1dGlvbiBvbiBicmVhayBhbmQgZXhjZXB0aW9uICBldmVudHMgaWYgdGhlcmUgaXMg
bm8KLSAgICAgICAgLy8gaGFuZGxlci4KLSAgICAgICAgc2VuZENvbnRpbnVlQ29tbWFuZFRvVjgo
KTsKLSAgICB9Ci19Ci0KLXZvaWQgRGVidWdnZXJBZ2VudE1hbmFnZXI6OnBhdXNlU2NyaXB0KCkK
LXsKLSAgICB2ODo6RGVidWc6OkRlYnVnQnJlYWsoKTsKLX0KLQotdm9pZCBEZWJ1Z2dlckFnZW50
TWFuYWdlcjo6ZXhlY3V0ZURlYnVnZ2VyQ29tbWFuZChjb25zdCBXVEY6OlN0cmluZyYgY29tbWFu
ZCwgaW50IGNhbGxlcklkKQotewotICAgIHNlbmRDb21tYW5kVG9WOChjb21tYW5kLCBuZXcgQ2Fs
bGVySWRXcmFwcGVyKGNhbGxlcklkKSk7Ci19Ci0KLXZvaWQgRGVidWdnZXJBZ2VudE1hbmFnZXI6
OnNldE1lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyKFdlYkRldlRvb2xzQWdlbnQ6Ok1lc3NhZ2VM
b29wRGlzcGF0Y2hIYW5kbGVyIGhhbmRsZXIpCi17Ci0gICAgc19tZXNzYWdlTG9vcERpc3BhdGNo
SGFuZGxlciA9IGhhbmRsZXI7Ci19Ci0KLXZvaWQgRGVidWdnZXJBZ2VudE1hbmFnZXI6OnNldEV4
cG9zZVY4RGVidWdnZXJQcm90b2NvbChib29sIHZhbHVlKQotewotICAgIHNfZXhwb3NlVjhEZWJ1
Z2dlclByb3RvY29sID0gdmFsdWU7Ci0gICAgV2ViQ29yZTo6UGFnZVNjcmlwdERlYnVnU2VydmVy
OjpzaGFyZWQoKS5zZXRFbmFibGVkKCFzX2V4cG9zZVY4RGVidWdnZXJQcm90b2NvbCk7Ci19Ci0K
LXZvaWQgRGVidWdnZXJBZ2VudE1hbmFnZXI6OnNldEhvc3RJZChXZWJGcmFtZUltcGwqIHdlYmZy
YW1lLCBpbnQgaG9zdElkKQotewotICAgIEFTU0VSVChob3N0SWQgPiAwKTsKLSAgICBXZWJDb3Jl
OjpWOFByb3h5KiBwcm94eSA9IFdlYkNvcmU6OlY4UHJveHk6OnJldHJpZXZlKHdlYmZyYW1lLT5m
cmFtZSgpKTsKLSAgICBpZiAocHJveHkpCi0gICAgICAgIHByb3h5LT5zZXRDb250ZXh0RGVidWdJ
ZChob3N0SWQpOwotfQotCi12b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpvbldlYlZpZXdDbG9z
ZWQoV2ViVmlld0ltcGwqIHdlYnZpZXcpCi17Ci0gICAgaWYgKHBhZ2VEZWZlcnJlcnMoKS5jb250
YWlucyh3ZWJ2aWV3KSkgewotICAgICAgICBkZWxldGUgcGFnZURlZmVycmVycygpLmdldCh3ZWJ2
aWV3KTsKLSAgICAgICAgcGFnZURlZmVycmVycygpLnJlbW92ZSh3ZWJ2aWV3KTsKLSAgICB9Ci19
Ci0KLXZvaWQgRGVidWdnZXJBZ2VudE1hbmFnZXI6Om9uTmF2aWdhdGUoKQotewotICAgIGlmIChz
X2luSG9zdERpc3BhdGNoSGFuZGxlcikKLSAgICAgICAgRGVidWdnZXJBZ2VudE1hbmFnZXI6OnNl
bmRDb250aW51ZUNvbW1hbmRUb1Y4KCk7Ci19Ci0KLXZvaWQgRGVidWdnZXJBZ2VudE1hbmFnZXI6
OnNlbmRDb21tYW5kVG9WOChjb25zdCBXVEY6OlN0cmluZyYgY21kLCB2ODo6RGVidWc6OkNsaWVu
dERhdGEqIGRhdGEpCi17Ci0gICAgdjg6OkRlYnVnOjpTZW5kQ29tbWFuZChyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQxNl90Kj4oY21kLmNoYXJhY3RlcnMoKSksIGNtZC5sZW5ndGgoKSwgZGF0
YSk7Ci19Ci0KLXZvaWQgRGVidWdnZXJBZ2VudE1hbmFnZXI6OnNlbmRDb250aW51ZUNvbW1hbmRU
b1Y4KCkKLXsKLSAgICBXVEY6OlN0cmluZyBjb250aW51ZUNtZCgie1wic2VxXCI6MSxcInR5cGVc
IjpcInJlcXVlc3RcIixcImNvbW1hbmRcIjpcImNvbnRpbnVlXCJ9Iik7Ci0gICAgc2VuZENvbW1h
bmRUb1Y4KGNvbnRpbnVlQ21kLCBuZXcgQ2FsbGVySWRXcmFwcGVyKCkpOwotfQotCi1EZWJ1Z2dl
ckFnZW50SW1wbCogRGVidWdnZXJBZ2VudE1hbmFnZXI6OmZpbmRBZ2VudEZvckN1cnJlbnRWOENv
bnRleHQoKQotewotICAgIGlmICghc19hdHRhY2hlZEFnZW50c01hcCkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgQVNTRVJUKCFzX2F0dGFjaGVkQWdlbnRzTWFwLT5pc0VtcHR5KCkpOwotCi0gICAg
V2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gV2ViQ29yZTo6VjhQcm94eTo6cmV0cmlldmVGcmFtZUZv
ckVudGVyZWRDb250ZXh0KCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7Ci0gICAgZm9yIChBdHRhY2hl
ZEFnZW50c01hcDo6aXRlcmF0b3IgaXQgPSBzX2F0dGFjaGVkQWdlbnRzTWFwLT5iZWdpbigpOyBp
dCAhPSBzX2F0dGFjaGVkQWdlbnRzTWFwLT5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoaXQt
PnNlY29uZC0+cGFnZSgpID09IHBhZ2UpCi0gICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsK
LSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLURlYnVnZ2VyQWdlbnRJbXBsKiBEZWJ1Z2dlckFn
ZW50TWFuYWdlcjo6ZGVidWdnZXJBZ2VudEZvckhvc3RJZChpbnQgaG9zdElkKQotewotICAgIGlm
ICghc19hdHRhY2hlZEFnZW50c01hcCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHNf
YXR0YWNoZWRBZ2VudHNNYXAtPmdldChob3N0SWQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRN
YW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50TWFuYWdl
ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODY0YzJlNGQ0NDVjYjE4NzJkYjc5
NGY1Yjk3ODE2YjFhNDYxYWFiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2Vy
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRGVidWdnZXJBZ2VudE1h
bmFnZXJfaAotI2RlZmluZSBEZWJ1Z2dlckFnZW50TWFuYWdlcl9oCi0KLSNpbmNsdWRlICJXZWJD
U3RyaW5nLmgiCi0jaW5jbHVkZSAiV2ViRGV2VG9vbHNBZ2VudC5oIgotI2luY2x1ZGUgPHY4LWRl
YnVnLmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgUGFnZTsKLWNsYXNzIFBhZ2VHcm91cExvYWRE
ZWZlcnJlcjsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIERlYnVnZ2VyQWdlbnRJ
bXBsOwotY2xhc3MgRGljdGlvbmFyeVZhbHVlOwotY2xhc3MgV2ViRnJhbWVJbXBsOwotY2xhc3Mg
V2ViVmlld0ltcGw7Ci0KLS8vIFRoZXJlIGlzIHNpbmdsZSB2OCBpbnN0YW5jZSBwZXIgcmVuZGVy
IHByb2Nlc3MuIEFsc28gdGhlcmUgbWF5IGJlIHNldmVyYWwKLS8vIFJlbmRlclZpZXdzIGFuZCBj
b25zZXF1ZW50bHkgZGV2dG9vbHMgYWdlbnRzIGluIHRoZSBwcm9jZXNzIHRoYXQgd2FudCB0byB0
YWxrCi0vLyB0byB0aGUgdjggZGVidWdnZXIuIFRoaXMgY2xhc3MgY29vcmRpbmF0ZXMgY29tbXVu
aWNhdGlvbiBiZXR3ZWVuIHRoZSBkZWJ1ZwotLy8gYWdlbnRzIGFuZCB2OCBkZWJ1Z2dlci4gSXQg
d2lsbCBzZXQgZGVidWcgb3V0cHV0IGhhbmRsZXIgYXMgbG9uZyBhcyBhdCBsZWFzdAotLy8gb25l
IGRlYnVnZ2VyIGFnZW50IGlzIGF0dGFjaGVkIGFuZCByZW1vdmUgaXQgd2hlbiBsYXN0IGRlYnVn
Z2VyIGFnZW50IGlzCi0vLyBkZXRhY2hlZC4gV2hlbiBtZXNzYWdlIGlzIHJlY2VpdmVkIGZyb20g
ZGVidWdnZXIgaXQgd2lsbCByb3V0ZSBpdCB0byB0aGUKLS8vIHJpZ2h0IGRlYnVnZ2VyIGFnZW50
IGlmIHRoZXJlIGlzIG9uZSBvdGhlcndpc2UgdGhlIG1lc3NhZ2Ugd2lsbCBiZSBpZ25vcmVkLgot
Ly8KLS8vIHY4IG1heSBzZW5kIGEgbWVzc2FnZShlLmcuIGV4Y2VwdGlvbiBldmVudCkgYWZ0ZXIg
d2hpY2ggaXQKLS8vIHdvdWxkIGV4cGVjdCBzb21lIGFjdGlvbnMgZnJvbSB0aGUgaGFuZGxlci4g
SWYgdGhlcmUgaXMgbm8gYXBwcm9wcmlhdGUKLS8vIGRlYnVnZ2VyIGFnZW50IHRvIGhhbmRsZSBz
dWNoIG1lc3NhZ2VzIHRoZSBtYW5hZ2VyIHdpbGwgcGVyZm9ybSB0aGUgYWN0aW9uCi0vLyBpdHNl
bGYsIG90aGVyd2lzZSB2OCBtYXkgaGFuZyB3YWl0aW5nIGZvciB0aGUgYWN0aW9uLgotY2xhc3Mg
RGVidWdnZXJBZ2VudE1hbmFnZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERlYnVnZ2Vy
QWdlbnRNYW5hZ2VyKTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBkZWJ1Z0F0dGFjaChEZWJ1
Z2dlckFnZW50SW1wbCogZGVidWdnZXJBZ2VudCk7Ci0gICAgc3RhdGljIHZvaWQgZGVidWdEZXRh
Y2goRGVidWdnZXJBZ2VudEltcGwqIGRlYnVnZ2VyQWdlbnQpOwotICAgIHN0YXRpYyB2b2lkIHBh
dXNlU2NyaXB0KCk7Ci0gICAgc3RhdGljIHZvaWQgZXhlY3V0ZURlYnVnZ2VyQ29tbWFuZChjb25z
dCBXVEY6OlN0cmluZyYgY29tbWFuZCwgaW50IGNhbGxlcklkKTsKLSAgICBzdGF0aWMgdm9pZCBz
ZXRNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlcihXZWJEZXZUb29sc0FnZW50OjpNZXNzYWdlTG9v
cERpc3BhdGNoSGFuZGxlciBoYW5kbGVyKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRFeHBvc2VWOERl
YnVnZ2VyUHJvdG9jb2woYm9vbCk7Ci0KLSAgICAvLyBTZXRzIHxob3N0SWR8IGFzIHRoZSBmcmFt
ZSBjb250ZXh0IGRhdGEuIFRoaXMgaWQgaXMgdXNlZCB0byBmaWx0ZXIgc2NyaXB0cwotICAgIC8v
IHJlbGF0ZWQgdG8gdGhlIGluc3BlY3RlZCBwYWdlLgotICAgIHN0YXRpYyB2b2lkIHNldEhvc3RJ
ZChXZWJGcmFtZUltcGwqIHdlYmZyYW1lLCBpbnQgaG9zdElkKTsKLQotICAgIHN0YXRpYyB2b2lk
IG9uV2ViVmlld0Nsb3NlZChXZWJWaWV3SW1wbCogd2Vidmlldyk7Ci0KLSAgICBzdGF0aWMgdm9p
ZCBvbk5hdmlnYXRlKCk7Ci0KLXByaXZhdGU6Ci0gICAgRGVidWdnZXJBZ2VudE1hbmFnZXIoKTsK
LSAgICB+RGVidWdnZXJBZ2VudE1hbmFnZXIoKTsKLQotICAgIHN0YXRpYyB2b2lkIGRlYnVnSG9z
dERpc3BhdGNoSGFuZGxlcigpOwotICAgIHN0YXRpYyB2b2lkIG9uVjhEZWJ1Z01lc3NhZ2UoY29u
c3Qgdjg6OkRlYnVnOjpNZXNzYWdlJiBtZXNzYWdlKTsKLSAgICBzdGF0aWMgdm9pZCBzZW5kQ29t
bWFuZFRvVjgoY29uc3QgV1RGOjpTdHJpbmcmIGNtZCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdjg6OkRlYnVnOjpDbGllbnREYXRhKiBkYXRhKTsKLSAgICBzdGF0aWMgdm9pZCBz
ZW5kQ29udGludWVDb21tYW5kVG9WOCgpOwotCi0gICAgc3RhdGljIERlYnVnZ2VyQWdlbnRJbXBs
KiBmaW5kQWdlbnRGb3JDdXJyZW50VjhDb250ZXh0KCk7Ci0gICAgc3RhdGljIERlYnVnZ2VyQWdl
bnRJbXBsKiBkZWJ1Z2dlckFnZW50Rm9ySG9zdElkKGludCBob3N0SWQpOwotCi0gICAgdHlwZWRl
ZiBIYXNoTWFwPGludCwgRGVidWdnZXJBZ2VudEltcGwqPiBBdHRhY2hlZEFnZW50c01hcDsKLSAg
ICBzdGF0aWMgQXR0YWNoZWRBZ2VudHNNYXAqIHNfYXR0YWNoZWRBZ2VudHNNYXA7Ci0KLSAgICBz
dGF0aWMgV2ViRGV2VG9vbHNBZ2VudDo6TWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIgc19tZXNz
YWdlTG9vcERpc3BhdGNoSGFuZGxlcjsKLSAgICBzdGF0aWMgYm9vbCBzX2luSG9zdERpc3BhdGNo
SGFuZGxlcjsKLQotICAgIHN0YXRpYyBib29sIHNfZXhwb3NlVjhEZWJ1Z2dlclByb3RvY29sOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCmluZGV4IDkzNDlhNDBh
Nzk5NWIyZmI3ZWYzNzAwMThhOThkZjA3NWE3ODU1MTAuLmRkMzEzNjE0NDJhNGYyMTZjZGQxNGYx
OWZiMDFlYjQ5YWRiYWRhZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAKQEAgLTMxLDggKzMxLDYgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJXZWJEZXZUb29sc0FnZW50SW1wbC5oIgogCi0jaW5jbHVkZSAi
RGVidWdnZXJBZ2VudEltcGwuaCIKLSNpbmNsdWRlICJEZWJ1Z2dlckFnZW50TWFuYWdlci5oIgog
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdEhvc3QuaCIKQEAgLTE4MywxMyArMTgxLDExIEBAIFdl
YkRldlRvb2xzQWdlbnRJbXBsOjpXZWJEZXZUb29sc0FnZW50SW1wbCgKICAgICAsIG1fd2ViVmll
d0ltcGwod2ViVmlld0ltcGwpCiAgICAgLCBtX2F0dGFjaGVkKGZhbHNlKQogewotICAgIERlYnVn
Z2VyQWdlbnRNYW5hZ2VyOjpzZXRFeHBvc2VWOERlYnVnZ2VyUHJvdG9jb2woCi0gICAgICAgIGNs
aWVudC0+ZXhwb3NlVjhEZWJ1Z2dlclByb3RvY29sKCkpOworICAgIEFTU0VSVChtX2hvc3RJZCA+
IDApOwogfQogCiBXZWJEZXZUb29sc0FnZW50SW1wbDo6fldlYkRldlRvb2xzQWdlbnRJbXBsKCkK
IHsKLSAgICBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6b25XZWJWaWV3Q2xvc2VkKG1fd2ViVmlld0lt
cGwpOwogICAgIENsaWVudE1lc3NhZ2VMb29wQWRhcHRlcjo6aW5zcGVjdGVkVmlld0Nsb3NlZCht
X3dlYlZpZXdJbXBsKTsKIH0KIApAQCAtMTk4LDEwICsxOTQsNyBAQCB2b2lkIFdlYkRldlRvb2xz
QWdlbnRJbXBsOjphdHRhY2goKQogICAgIGlmIChtX2F0dGFjaGVkKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAoIW1fY2xpZW50LT5leHBvc2VWOERlYnVnZ2VyUHJvdG9jb2woKSkKLSAgICAg
ICAgQ2xpZW50TWVzc2FnZUxvb3BBZGFwdGVyOjplbnN1cmVDbGllbnRNZXNzYWdlTG9vcENyZWF0
ZWQobV9jbGllbnQpOwotCi0gICAgbV9kZWJ1Z2dlckFnZW50SW1wbCA9IGFkb3B0UHRyKG5ldyBE
ZWJ1Z2dlckFnZW50SW1wbChtX3dlYlZpZXdJbXBsLCB0aGlzLCBtX2NsaWVudCkpOworICAgIENs
aWVudE1lc3NhZ2VMb29wQWRhcHRlcjo6ZW5zdXJlQ2xpZW50TWVzc2FnZUxvb3BDcmVhdGVkKG1f
Y2xpZW50KTsKICAgICBtX2F0dGFjaGVkID0gdHJ1ZTsKIH0KIApAQCAtMjE4LDcgKzIxMSw2IEBA
IHZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmRldGFjaCgpCiAgICAgaWMtPmRpc2Nvbm5lY3RG
cm9udGVuZCgpOwogICAgIGljLT5oaWRlSGlnaGxpZ2h0KCk7CiAgICAgaWMtPmNsb3NlKCk7Ci0g
ICAgbV9kZWJ1Z2dlckFnZW50SW1wbC5jbGVhcigpOwogICAgIG1fYXR0YWNoZWQgPSBmYWxzZTsK
IH0KIApAQCAtMjMwLDEyICsyMjIsMTMgQEAgdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6ZnJv
bnRlbmRMb2FkZWQoKQogdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6ZGlkTmF2aWdhdGUoKQog
ewogICAgIENsaWVudE1lc3NhZ2VMb29wQWRhcHRlcjo6ZGlkTmF2aWdhdGUoKTsKLSAgICBEZWJ1
Z2dlckFnZW50TWFuYWdlcjo6b25OYXZpZ2F0ZSgpOwogfQogCiB2b2lkIFdlYkRldlRvb2xzQWdl
bnRJbXBsOjpkaWRDbGVhcldpbmRvd09iamVjdChXZWJGcmFtZUltcGwqIHdlYmZyYW1lKQogewot
ICAgIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpzZXRIb3N0SWQod2ViZnJhbWUsIG1faG9zdElkKTsK
KyAgICBXZWJDb3JlOjpWOFByb3h5KiBwcm94eSA9IFdlYkNvcmU6OlY4UHJveHk6OnJldHJpZXZl
KHdlYmZyYW1lLT5mcmFtZSgpKTsKKyAgICBpZiAocHJveHkpCisgICAgICAgIHByb3h5LT5zZXRD
b250ZXh0RGVidWdJZChtX2hvc3RJZCk7CiB9CiAKIHZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6
OmRpc3BhdGNoT25JbnNwZWN0b3JCYWNrZW5kKGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSkKQEAg
LTM0OCwxNiArMzQxLDYgQEAgYm9vbCBXZWJEZXZUb29sc0FnZW50OjpzdXBwb3J0c0luc3BlY3Rv
clByb3RvY29sVmVyc2lvbihjb25zdCBXZWJTdHJpbmcmIHZlcnNpb24KICAgICByZXR1cm4gV2Vi
Q29yZTo6c3VwcG9ydHNJbnNwZWN0b3JQcm90b2NvbFZlcnNpb24odmVyc2lvbik7CiB9CiAKLXZv
aWQgV2ViRGV2VG9vbHNBZ2VudDo6ZXhlY3V0ZURlYnVnZ2VyQ29tbWFuZChjb25zdCBXZWJTdHJp
bmcmIGNvbW1hbmQsIGludCBjYWxsZXJJZCkKLXsKLSAgICBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6
ZXhlY3V0ZURlYnVnZ2VyQ29tbWFuZChjb21tYW5kLCBjYWxsZXJJZCk7Ci19Ci0KLXZvaWQgV2Vi
RGV2VG9vbHNBZ2VudDo6ZGVidWdnZXJQYXVzZVNjcmlwdCgpCi17Ci0gICAgRGVidWdnZXJBZ2Vu
dE1hbmFnZXI6OnBhdXNlU2NyaXB0KCk7Ci19Ci0KIHZvaWQgV2ViRGV2VG9vbHNBZ2VudDo6aW50
ZXJydXB0QW5kRGlzcGF0Y2goTWVzc2FnZURlc2NyaXB0b3IqIHJhd0Rlc2NyaXB0b3IpCiB7CiAg
ICAgLy8gcmF3RGVzY3JpcHRvciBjYW4ndCBiZSBhIFBhc3NPd25QdHIgYmVjYXVzZSBpbnRlcnJ1
cHRBbmREaXNwYXRjaCBpcyBhIFdlYktpdCBBUEkgZnVuY3Rpb24uCkBAIC00MDIsOSArMzg1LDQg
QEAgV2ViU3RyaW5nIFdlYkRldlRvb2xzQWdlbnQ6OmRpc2Nvbm5lY3RFdmVudEFzVGV4dCgpCiAg
ICAgcmV0dXJuIGNoYW5uZWwubV9tZXNzYWdlOwogfQogCi12b2lkIFdlYkRldlRvb2xzQWdlbnQ6
OnNldE1lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyKE1lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVy
IGhhbmRsZXIpCi17Ci0gICAgRGVidWdnZXJBZ2VudE1hbmFnZXI6OnNldE1lc3NhZ2VMb29wRGlz
cGF0Y2hIYW5kbGVyKGhhbmRsZXIpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oCmluZGV4
IGU3YmMwZmQxMWQ3ZDEyZTM2ZmM5ZDQwNmUwYmJiYTlkNDRlMDYxMGEuLjYzZjc5YWJjOGE1ZDBi
N2Y3ODZlMWFmZjJmODRjZGIzOGNkODNiYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaApAQCAtNTAsNyArNTAsNiBAQCBjbGFzcyBO
b2RlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgRGVidWdnZXJBZ2VudEltcGw7CiBj
bGFzcyBXZWJEZXZUb29sc0FnZW50Q2xpZW50OwogY2xhc3MgV2ViRnJhbWU7CiBjbGFzcyBXZWJG
cmFtZUltcGw7CkBAIC0xMDcsNyArMTA2LDYgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9ob3N0SWQ7
CiAgICAgV2ViRGV2VG9vbHNBZ2VudENsaWVudCogbV9jbGllbnQ7CiAgICAgV2ViVmlld0ltcGwq
IG1fd2ViVmlld0ltcGw7Ci0gICAgT3duUHRyPERlYnVnZ2VyQWdlbnRJbXBsPiBtX2RlYnVnZ2Vy
QWdlbnRJbXBsOwogICAgIGJvb2wgbV9hdHRhY2hlZDsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116522</attachid>
            <date>2011-11-24 10:45:25 -0800</date>
            <delta_ts>2011-11-24 10:50:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73081-20111124224522.patch</filename>
            <type>text/plain</type>
            <size>37427</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMTQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjVmMmJkNTA0ZjY1M2Rj
ZmMxOGU2YWE5ODg0YWQwMDMzZTE2NjJlMC4uZmUzYmYwNmFjYjI2NmMyNjFmN2JjYTUxNGM4ZTBi
ZDYzYzQ1MmZjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDExLTExLTI0ICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0g
V2ViIEluc3BlY3RvcjogcmVtb3ZlIGxlZ2FjeSBkZWJ1Z2dlciBzdXBwb3J0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzA4MQorCisgICAgICAgIFJl
bW92ZWQgY2xhc3NlZCBwcm92aWRpbmcgYWNjZXNzIHRvIFY4IGRlYnVnZ2luZyBwcm90b2NvbC4g
Q2xpZW50cyBzaG91bGQKKyAgICAgICAgdXNlIFdlYiBJbnNwZWN0b3IgcHJvdG9jb2wgaW5zdGVh
ZC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJp
bmRpbmdzL3Y4L1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
YWdlU2NyaXB0RGVidWdTZXJ2ZXI6OlBhZ2VTY3JpcHREZWJ1Z1NlcnZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OmFkZExpc3RlbmVyKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuaDoKKwogMjAxMS0xMS0yNCAgUGF2ZWwg
RmVsZG1hbiAgPHBmZWxkbWFuQGdvb2dsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3Rvcjog
V2ViSW5zcGVjdG9yLmluc3BlY3RlZFBhZ2VEb21haW4gaXMgbm90IGNhbGN1bGF0ZWQgZm9yIGFi
b3V0OmJsYW5rCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDNhNzIwNmM1YmIzMDhiNDU0
MmE2MThmYWU1YWZkYWNlNTBiODM3NjkuLjk2NjI4NjE5NWU3NjRmN2U4MmRmYmYwM2M5YTI4MDBk
ZmJiNWEyZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIw
MTEtMTEtMjQgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgW0Nocm9taXVtXSBXZWIgSW5zcGVjdG9yOiByZW1vdmUgbGVnYWN5IGRlYnVnZ2VyIHN1cHBv
cnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMDgx
CisKKyAgICAgICAgUmVtb3ZlZCBjbGFzc2VkIHByb3ZpZGluZyBhY2Nlc3MgdG8gVjggZGVidWdn
aW5nIHByb3RvY29sLiBDbGllbnRzIHNob3VsZAorICAgICAgICB1c2UgV2ViIEluc3BlY3RvciBw
cm90b2NvbCBpbnN0ZWFkLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViRGV2VG9vbHNBZ2Vu
dC5oOgorICAgICAgICAqIHB1YmxpYy9XZWJEZXZUb29sc0FnZW50Q2xpZW50Lmg6CisgICAgICAg
ICogc3JjL0RlYnVnZ2VyQWdlbnRJbXBsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvRGVi
dWdnZXJBZ2VudEltcGwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvRGVidWdnZXJBZ2VudE1h
bmFnZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9EZWJ1Z2dlckFnZW50TWFuYWdlci5o
OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpXZWJEZXZUb29sc0FnZW50SW1wbCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjp+V2ViRGV2VG9vbHNBZ2Vu
dEltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6YXR0YWNoKToK
KyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OmRldGFjaCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpkaWROYXZpZ2F0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpkaWRDbGVhcldpbmRvd09iamVjdCk6CisgICAg
ICAgICogc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmg6CisKIDIwMTEtMTEtMjMgIEdyZWcgQmls
bG9jayAgPGdiaWxsb2NrQGdvb2dsZS5jb20+CiAKICAgICAgICAgQWRkIHNpbXBsZSBpbXBsZW1l
bnRhdGlvbiBmb3Igd2ViIGludGVudHMgY2hyb21pdW0gQVBJIGRhdGEgY2xhc3Nlcy4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3Bw
CmluZGV4IGYxNDlkOGY2MWMyMjA2NmQyMTgxMWQ2NzY0YmRhYzQ4MTZkZTQzMzAuLmRhZjc5NjA4
MTM1Yjg1MTlhNWYwZDU5NzY2ZjdhNWYwMjY4YmM2ZjYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcApAQCAtNzEsMTUgKzcx
LDExIEBAIFBhZ2VTY3JpcHREZWJ1Z1NlcnZlciYgUGFnZVNjcmlwdERlYnVnU2VydmVyOjpzaGFy
ZWQoKQogUGFnZVNjcmlwdERlYnVnU2VydmVyOjpQYWdlU2NyaXB0RGVidWdTZXJ2ZXIoKQogICAg
IDogU2NyaXB0RGVidWdTZXJ2ZXIoKQogICAgICwgbV9wYXVzZWRQYWdlKDApCi0gICAgLCBtX2Vu
YWJsZWQodHJ1ZSkKIHsKIH0KIAogdm9pZCBQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OmFkZExpc3Rl
bmVyKFNjcmlwdERlYnVnTGlzdGVuZXIqIGxpc3RlbmVyLCBQYWdlKiBwYWdlKQogewotICAgIGlm
ICghbV9lbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KICAgICBWOFByb3h5KiBwcm94eSA9IFY4
UHJveHk6OnJldHJpZXZlKHBhZ2UtPm1haW5GcmFtZSgpKTsKICAgICBpZiAoIXByb3h5KQogICAg
ICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9QYWdl
U2NyaXB0RGVidWdTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1BhZ2VTY3Jp
cHREZWJ1Z1NlcnZlci5oCmluZGV4IDRiMTM0YzE4ZGI4ZWI2OThlNjYwNTgzNjViNzlkOGZmZTYx
ZWFkZDcuLjc1MWQ3MzNkNmRlNDcyMjRkZDFhYzAwMzc5ZTg3NDkxMmRlYjRhZmYgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5oCkBA
IC00OCw5ICs0OCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZExpc3RlbmVyKFNjcmlwdERlYnVn
TGlzdGVuZXIqLCBQYWdlKik7CiAgICAgdm9pZCByZW1vdmVMaXN0ZW5lcihTY3JpcHREZWJ1Z0xp
c3RlbmVyKiwgUGFnZSopOwogCi0gICAgLy8gdjgtc3BlY2lmaWMgbWV0aG9kcy4KLSAgICB2b2lk
IHNldEVuYWJsZWQoYm9vbCB2YWx1ZSkgeyBtX2VuYWJsZWQgPSB2YWx1ZTsgfQotICAgIAogICAg
IGNsYXNzIENsaWVudE1lc3NhZ2VMb29wIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwg
fkNsaWVudE1lc3NhZ2VMb29wKCkgeyB9CkBAIC03MSw3ICs2OCw2IEBAIHByaXZhdGU6CiAgICAg
TGlzdGVuZXJzTWFwIG1fbGlzdGVuZXJzTWFwOwogICAgIE93blB0cjxDbGllbnRNZXNzYWdlTG9v
cD4gbV9jbGllbnRNZXNzYWdlTG9vcDsKICAgICBQYWdlKiBtX3BhdXNlZFBhZ2U7Ci0gICAgYm9v
bCBtX2VuYWJsZWQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXAKaW5kZXggYWZhYWI3OGQxNzViMDNiZmM3YTA0YTI4Njg4ZjIzMjczYmNiZDM1
YS4uOGIwM2U0YTBjYzEyNDg4YjIxYWNmMTcwMmVlMzk4ZjI3YWQwYzM2NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cApAQCAtMzcyLDEwICszNzIsNiBAQAogICAgICAgICAgICAgICAgICdz
cmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9Db250
ZXh0TWVudUNsaWVudEltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9EYXRhYmFzZU9ic2Vy
dmVyLmNwcCcsCi0gICAgICAgICAgICAgICAgJ3NyYy9EZWJ1Z2dlckFnZW50SW1wbC5jcHAnLAot
ICAgICAgICAgICAgICAgICdzcmMvRGVidWdnZXJBZ2VudEltcGwuaCcsCi0gICAgICAgICAgICAg
ICAgJ3NyYy9EZWJ1Z2dlckFnZW50TWFuYWdlci5jcHAnLAotICAgICAgICAgICAgICAgICdzcmMv
RGVidWdnZXJBZ2VudE1hbmFnZXIuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9EZXZpY2VPcmll
bnRhdGlvbkNsaWVudFByb3h5LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9EZXZpY2VPcmll
bnRhdGlvbkNsaWVudFByb3h5LmgnLAogICAgICAgICAgICAgICAgICdzcmMvRE9NVXRpbGl0aWVz
UHJpdmF0ZS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViRGV2VG9vbHNBZ2VudC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRGV2
VG9vbHNBZ2VudC5oCmluZGV4IGFmNGI4N2VlYjAzOTViYzg3Mzk4ZDdmOWE4OGIwMmMyM2JiZjRj
MTUuLmUwYmIzMmE1NzZmZGI3Mzc3YWZiMjAwNDIzMDU0ZDJhMWFlMGRhZGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRldlRvb2xzQWdlbnQuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEZXZUb29sc0FnZW50LmgKQEAgLTcxLDE0
ICs3MSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZXZhbHVhdGVJbldlYkluc3BlY3Rv
cihsb25nIGNhbGxJZCwgY29uc3QgV2ViU3RyaW5nJiBzY3JpcHQpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0SmF2YVNjcmlwdFByb2ZpbGluZ0VuYWJsZWQoYm9vbCkgPSAwOwogCi0gICAgLy8g
QXN5bmNocm9ub3VzbHkgZXhlY3V0ZXMgZGVidWdnZXIgY29tbWFuZCBpbiB0aGUgcmVuZGVyIHRo
cmVhZC4KLSAgICAvLyB8Y2FsbGVySWRlbnRpZmllcnwgd2lsbCBiZSB1c2VkIGZvciBzZW5kaW5n
IHJlc3BvbnNlLgotICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIHZvaWQgZXhlY3V0ZURlYnVnZ2Vy
Q29tbWFuZCgKLSAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBjb21tYW5kLCBpbnQgY2FsbGVySWRl
bnRpZmllcik7Ci0KLSAgICAvLyBBc3luY2hyb25vdXNseSByZXF1ZXN0IGRlYnVnZ2VyIHRvIHBh
dXNlIGltbWVkaWF0ZWx5LgotICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIHZvaWQgZGVidWdnZXJQ
YXVzZVNjcmlwdCgpOwotCiAgICAgY2xhc3MgTWVzc2FnZURlc2NyaXB0b3IgewogICAgIHB1Ymxp
YzoKICAgICAgICAgdmlydHVhbCB+TWVzc2FnZURlc2NyaXB0b3IoKSB7IH0KQEAgLTkzLDEyICs4
NSw2IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIGEgZGlzY29ubmVjdCBldmVudCB0aGF0IGNh
biBiZSBkaXNwYXRjaGVkIG9uIHRoZSBmcm9udC1lbmQKICAgICAvLyBpbiBvcmRlciB0byBsZXQg
aXQga25vdyB0aGF0IGl0IGhhcyBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgYWdlbnQuCiAgICAgV0VC
S0lUX0VYUE9SVCBzdGF0aWMgV2ViU3RyaW5nIGRpc2Nvbm5lY3RFdmVudEFzVGV4dCgpOwotCi0g
ICAgdHlwZWRlZiB2b2lkICgqTWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIpKCk7Ci0KLSAgICAv
LyBJbnN0YWxscyBkaXNwYXRjaCBoYW5kbGUgdGhhdCBpcyBnb2luZyB0byBiZSBjYWxsZWQgcGVy
aW9kaWNhbGx5Ci0gICAgLy8gd2hpbGUgb24gYSBicmVha3BvaW50LgotICAgIFdFQktJVF9FWFBP
UlQgc3RhdGljIHZvaWQgc2V0TWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIoTWVzc2FnZUxvb3BE
aXNwYXRjaEhhbmRsZXIpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEZXZUb29sc0FnZW50Q2xpZW50Lmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEZXZUb29sc0FnZW50Q2xpZW50LmgK
aW5kZXggYmM3NGQxMTI4MDFiZjAyMGI0MTFmZDlmZTMzNzFhNjZkNmQ5MmMyOS4uOWM2M2IxMTlk
ODU1ZDljY2Y2M2UxYmVjMDE0ZGU4OTM1MjBiZWNkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViRGV2VG9vbHNBZ2VudENsaWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRldlRvb2xzQWdlbnRDbGllbnQuaApAQCAtNTgsOCAr
NTgsNiBAQCBwdWJsaWM6CiAgICAgfTsKICAgICB2aXJ0dWFsIFdlYktpdENsaWVudE1lc3NhZ2VM
b29wKiBjcmVhdGVDbGllbnRNZXNzYWdlTG9vcCgpIHsgcmV0dXJuIDA7IH0KIAotICAgIHZpcnR1
YWwgYm9vbCBleHBvc2VWOERlYnVnZ2VyUHJvdG9jb2woKSB7IHJldHVybiBmYWxzZTsgfQotCiAg
ICAgdmlydHVhbCB2b2lkIGNsZWFyQnJvd3NlckNhY2hlKCkgeyB9CiAgICAgdmlydHVhbCB2b2lk
IGNsZWFyQnJvd3NlckNvb2tpZXMoKSB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViRGV2VG9vbHNGcm9udGVuZENsaWVudC5oIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViRGV2VG9vbHNGcm9udGVuZENsaWVudC5oCmluZGV4IDQwYzA5
MjcyMjg2NzNiNWI0YzFmZWFiZGM4ZTEzMTA1OWY0ZDQxMGYuLjVmYzNhMmJhODdiNTM0MDQ0MmYz
MTlkNTI4NzJjZTU2NmUxN2NkYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkRldlRvb2xzRnJvbnRlbmRDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJEZXZUb29sc0Zyb250ZW5kQ2xpZW50LmgKQEAgLTQzLDggKzQzLDYg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNlbmRGcm9udGVuZExvYWRlZCgpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBXZWJTdHJpbmcmKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2VuZERlYnVnZ2VyQ29tbWFuZFRvQWdlbnQoY29uc3QgV2Vi
U3RyaW5nJiBjb21tYW5kKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2VuZERlYnVnZ2VyUGF1c2VT
Y3JpcHQoKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhY3RpdmF0ZVdpbmRvdygpIHsgfQogICAg
IHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvdygpIHsgfQpAQCAtNTMsOCArNTEsNiBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIG1vdmVXaW5kb3dCeShjb25zdCBXZWJGbG9hdFBvaW50JikgeyB9
CiAgICAgdmlydHVhbCB2b2lkIHNhdmVBcyhjb25zdCBXZWJTdHJpbmcmIGZpbGVOYW1lLCBjb25z
dCBXZWJTdHJpbmcmIGNvbnRlbnQpIHsgfQogCi0gICAgdmlydHVhbCBib29sIHNob3VsZEhpZGVT
Y3JpcHRzUGFuZWwoKSB7IHJldHVybiBmYWxzZTsgfQotCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVh
bCB+V2ViRGV2VG9vbHNGcm9udGVuZENsaWVudCgpIHt9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2VudEltcGwuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2VudEltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA1ZGQ1YzU4OTdkMDA4NjI2MzEyZTMyZmZiNmQxOGE5MTQ2OTc0ZDQzLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRJbXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDcw
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGVidWdnZXJBZ2VudEltcGwu
aCIKLQotI2luY2x1ZGUgIkRlYnVnZ2VyQWdlbnRNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiV2ViRGV2
VG9vbHNBZ2VudENsaWVudC5oIgotI2luY2x1ZGUgIldlYkRldlRvb2xzQWdlbnRJbXBsLmgiCi0j
aW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKLQotdXNpbmcgV1RGOjpTdHJpbmc7Ci0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1EZWJ1Z2dlckFnZW50SW1wbDo6RGVidWdnZXJBZ2VudEltcGwoCi0gICAg
V2ViVmlld0ltcGwqIHdlYlZpZXdJbXBsLAotICAgIFdlYkRldlRvb2xzQWdlbnRJbXBsKiB3ZWJk
ZXZ0b29sc0FnZW50LAotICAgIFdlYkRldlRvb2xzQWdlbnRDbGllbnQqIHdlYmRldnRvb2xzQWdl
bnRDbGllbnQpCi0gICAgOiBtX3dlYlZpZXdJbXBsKHdlYlZpZXdJbXBsKQotICAgICwgbV93ZWJk
ZXZ0b29sc0FnZW50KHdlYmRldnRvb2xzQWdlbnQpCi0gICAgLCBtX3dlYmRldnRvb2xzQWdlbnRD
bGllbnQod2ViZGV2dG9vbHNBZ2VudENsaWVudCkKLSAgICAsIG1fYXV0b0NvbnRpbnVlT25FeGNl
cHRpb24oZmFsc2UpCi17Ci0gICAgRGVidWdnZXJBZ2VudE1hbmFnZXI6OmRlYnVnQXR0YWNoKHRo
aXMpOwotfQotCi1EZWJ1Z2dlckFnZW50SW1wbDo6fkRlYnVnZ2VyQWdlbnRJbXBsKCkKLXsKLSAg
ICBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6ZGVidWdEZXRhY2godGhpcyk7Ci19Ci0KLXZvaWQgRGVi
dWdnZXJBZ2VudEltcGw6OmRlYnVnZ2VyT3V0cHV0KGNvbnN0IFN0cmluZyYgY29tbWFuZCkKLXsK
LSAgICBtX3dlYmRldnRvb2xzQWdlbnRDbGllbnQtPnNlbmREZWJ1Z2dlck91dHB1dChjb21tYW5k
KTsKLX0KLQotV2ViQ29yZTo6UGFnZSogRGVidWdnZXJBZ2VudEltcGw6OnBhZ2UoKQotewotICAg
IHJldHVybiBtX3dlYlZpZXdJbXBsLT5wYWdlKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2VudElt
cGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRJbXBsLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4ZmNjNGU2ZjQzMzBjMzFlYzZlMjQzZDVlYjZl
ZGFlNjhhNDFiYWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2VudEltcGwuaAorKysgL2Rl
di9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIERlYnVnZ2VyQWdlbnRJbXBsX2gKLSNkZWZp
bmUgRGVidWdnZXJBZ2VudEltcGxfaAotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgUGFnZTsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LWNsYXNzIFdlYkRldlRvb2xzQWdlbnRDbGllbnQ7Ci1jbGFzcyBXZWJEZXZUb29sc0FnZW50SW1w
bDsKLWNsYXNzIFdlYlZpZXdJbXBsOwotCi1jbGFzcyBEZWJ1Z2dlckFnZW50SW1wbCB7Ci1wdWJs
aWM6Ci0gICAgRGVidWdnZXJBZ2VudEltcGwoV2ViS2l0OjpXZWJWaWV3SW1wbCogd2ViVmlld0lt
cGwsCi0gICAgICAgICAgICAgICAgICAgICAgV2ViRGV2VG9vbHNBZ2VudEltcGwqIHdlYmRldnRv
b2xzQWdlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgV2ViRGV2VG9vbHNBZ2VudENsaWVudCog
d2ViZGV2dG9vbHNBZ2VudENsaWVudCk7Ci0gICAgdmlydHVhbCB+RGVidWdnZXJBZ2VudEltcGwo
KTsKLQotICAgIHZvaWQgZGVidWdnZXJPdXRwdXQoY29uc3QgV1RGOjpTdHJpbmcmIG91dCk7Ci0K
LSAgICB2b2lkIHNldEF1dG9Db250aW51ZU9uRXhjZXB0aW9uKGJvb2wgYXV0b0NvbnRpbnVlKSB7
IG1fYXV0b0NvbnRpbnVlT25FeGNlcHRpb24gPSBhdXRvQ29udGludWU7IH0KLQotICAgIGJvb2wg
YXV0b0NvbnRpbnVlT25FeGNlcHRpb24oKSB7IHJldHVybiBtX2F1dG9Db250aW51ZU9uRXhjZXB0
aW9uOyB9Ci0KLSAgICBXZWJDb3JlOjpQYWdlKiBwYWdlKCk7Ci0gICAgV2ViRGV2VG9vbHNBZ2Vu
dEltcGwqIHdlYmRldnRvb2xzQWdlbnQoKSB7IHJldHVybiBtX3dlYmRldnRvb2xzQWdlbnQ7IH0K
LQotICAgIFdlYktpdDo6V2ViVmlld0ltcGwqIHdlYlZpZXcoKSB7IHJldHVybiBtX3dlYlZpZXdJ
bXBsOyB9Ci0KLXByaXZhdGU6Ci0gICAgV2ViS2l0OjpXZWJWaWV3SW1wbCogbV93ZWJWaWV3SW1w
bDsKLSAgICBXZWJEZXZUb29sc0FnZW50SW1wbCogbV93ZWJkZXZ0b29sc0FnZW50OwotICAgIFdl
YkRldlRvb2xzQWdlbnRDbGllbnQqIG1fd2ViZGV2dG9vbHNBZ2VudENsaWVudDsKLSAgICBib29s
IG1fYXV0b0NvbnRpbnVlT25FeGNlcHRpb247Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dl
ckFnZW50TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFn
ZW50TWFuYWdlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjZWJiZjQ5YTc1
NmZhMGU2ZDNhN2FhNjMzNjc3ZTQ5MWQ3Y2U1NGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdnZXJB
Z2VudE1hbmFnZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzE2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiRGVidWdnZXJBZ2VudE1hbmFnZXIuaCIKLQotI2luY2x1ZGUg
IkRlYnVnZ2VyQWdlbnRJbXBsLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJQYWdl
R3JvdXBMb2FkRGVmZXJyZXIuaCIKLSNpbmNsdWRlICJQYWdlU2NyaXB0RGVidWdTZXJ2ZXIuaCIK
LSNpbmNsdWRlICJWOFByb3h5LmgiCi0jaW5jbHVkZSAiV2ViRGV2VG9vbHNBZ2VudEltcGwuaCIK
LSNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKLSNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgotI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLVdlYkRldlRvb2xzQWdlbnQ6Ok1lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyIERlYnVnZ2Vy
QWdlbnRNYW5hZ2VyOjpzX21lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyID0gMDsKLQotYm9vbCBE
ZWJ1Z2dlckFnZW50TWFuYWdlcjo6c19pbkhvc3REaXNwYXRjaEhhbmRsZXIgPSBmYWxzZTsKLQot
Ym9vbCBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6c19leHBvc2VWOERlYnVnZ2VyUHJvdG9jb2wgPSBm
YWxzZTsKLQotdHlwZWRlZiBIYXNoTWFwPFdlYlZpZXdJbXBsKiwgV2ViQ29yZTo6UGFnZUdyb3Vw
TG9hZERlZmVycmVyKj4gRGVmZXJyZXJzTWFwOwotCi1uYW1lc3BhY2UgewotCi1jbGFzcyBDYWxs
ZXJJZFdyYXBwZXIgOiBwdWJsaWMgdjg6OkRlYnVnOjpDbGllbnREYXRhIHsKLSAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShDYWxsZXJJZFdyYXBwZXIpOwotcHVibGljOgotICAgIENhbGxlcklkV3Jh
cHBlcigpIDogbV9jYWxsZXJJc01hbmFuYWdlcih0cnVlKSwgbV9jYWxsZXJJZCgwKSB7IH0KLSAg
ICBleHBsaWNpdCBDYWxsZXJJZFdyYXBwZXIoaW50IGNhbGxlcklkKQotICAgICAgICA6IG1fY2Fs
bGVySXNNYW5hbmFnZXIoZmFsc2UpCi0gICAgICAgICwgbV9jYWxsZXJJZChjYWxsZXJJZCkgeyB9
Ci0gICAgfkNhbGxlcklkV3JhcHBlcigpIHsgfQotICAgIGJvb2wgY2FsbGVySXNNYW5hbmFnZXIo
KSBjb25zdCB7IHJldHVybiBtX2NhbGxlcklzTWFuYW5hZ2VyOyB9Ci0gICAgaW50IGNhbGxlcklk
KCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZXJJZDsgfQotcHJpdmF0ZToKLSAgICBib29sIG1fY2Fs
bGVySXNNYW5hbmFnZXI7Ci0gICAgaW50IG1fY2FsbGVySWQ7Ci19OwotCi1EZWZlcnJlcnNNYXAm
IHBhZ2VEZWZlcnJlcnMoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoRGVmZXJyZXJzTWFw
LCBkZWZlcnJlcnMsICgpKTsKLSAgICByZXR1cm4gZGVmZXJyZXJzOwotfQotCi19IC8vIG5hbWVz
cGFjZQotCi0KLXZvaWQgRGVidWdnZXJBZ2VudE1hbmFnZXI6OmRlYnVnSG9zdERpc3BhdGNoSGFu
ZGxlcigpCi17Ci0gICAgaWYgKCFzX21lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyIHx8ICFzX2F0
dGFjaGVkQWdlbnRzTWFwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoc19pbkhvc3REaXNw
YXRjaEhhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNfaW5Ib3N0RGlzcGF0Y2hIYW5k
bGVyID0gdHJ1ZTsKLQotICAgIFZlY3RvcjxXZWJWaWV3SW1wbCo+IHZpZXdzOwotICAgIC8vIDEu
IERpc2FibGUgYWN0aXZlIG9iamVjdHMgYW5kIGlucHV0IGV2ZW50cy4KLSAgICBmb3IgKEF0dGFj
aGVkQWdlbnRzTWFwOjppdGVyYXRvciBpdCA9IHNfYXR0YWNoZWRBZ2VudHNNYXAtPmJlZ2luKCk7
IGl0ICE9IHNfYXR0YWNoZWRBZ2VudHNNYXAtPmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIERlYnVn
Z2VyQWdlbnRJbXBsKiBhZ2VudCA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgIHBhZ2VEZWZlcnJlcnMo
KS5zZXQoYWdlbnQtPndlYlZpZXcoKSwgbmV3IFdlYkNvcmU6OlBhZ2VHcm91cExvYWREZWZlcnJl
cihhZ2VudC0+cGFnZSgpLCB0cnVlKSk7Ci0gICAgICAgIHZpZXdzLmFwcGVuZChhZ2VudC0+d2Vi
VmlldygpKTsKLSAgICAgICAgYWdlbnQtPndlYlZpZXcoKS0+c2V0SWdub3JlSW5wdXRFdmVudHMo
dHJ1ZSk7Ci0gICAgfQotCi0gICAgLy8gMi4gUHJvY2VzcyBtZXNzYWdlcy4KLSAgICBzX21lc3Nh
Z2VMb29wRGlzcGF0Y2hIYW5kbGVyKCk7Ci0KLSAgICAvLyAzLiBCcmluZyB0aGluZ3MgYmFjay4K
LSAgICBmb3IgKFZlY3RvcjxXZWJWaWV3SW1wbCo+OjppdGVyYXRvciBpdCA9IHZpZXdzLmJlZ2lu
KCk7IGl0ICE9IHZpZXdzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChwYWdlRGVmZXJyZXJz
KCkuY29udGFpbnMoKml0KSkgewotICAgICAgICAgICAgLy8gVGhlIHZpZXcgd2FzIG5vdCBjbG9z
ZWQgZHVyaW5nIHRoZSBkaXNwYXRjaC4KLSAgICAgICAgICAgICgqaXQpLT5zZXRJZ25vcmVJbnB1
dEV2ZW50cyhmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZGVsZXRlQWxsVmFsdWVzKHBh
Z2VEZWZlcnJlcnMoKSk7Ci0gICAgcGFnZURlZmVycmVycygpLmNsZWFyKCk7Ci0KLSAgICBzX2lu
SG9zdERpc3BhdGNoSGFuZGxlciA9IGZhbHNlOwotICAgIGlmICghc19hdHRhY2hlZEFnZW50c01h
cCkgewotICAgICAgICAvLyBSZW1vdmUgaGFuZGxlcnMgaWYgYWxsIGFnZW50cyB3ZXJlIGRldGFj
aGVkIHdpdGhpbiBob3N0IGRpc3BhdGNoLgotICAgICAgICB2ODo6RGVidWc6OlNldE1lc3NhZ2VI
YW5kbGVyKDApOwotICAgICAgICB2ODo6RGVidWc6OlNldEhvc3REaXNwYXRjaEhhbmRsZXIoMCk7
Ci0gICAgfQotfQotCi1EZWJ1Z2dlckFnZW50TWFuYWdlcjo6QXR0YWNoZWRBZ2VudHNNYXAqIERl
YnVnZ2VyQWdlbnRNYW5hZ2VyOjpzX2F0dGFjaGVkQWdlbnRzTWFwID0gMDsKLQotdm9pZCBEZWJ1
Z2dlckFnZW50TWFuYWdlcjo6ZGVidWdBdHRhY2goRGVidWdnZXJBZ2VudEltcGwqIGRlYnVnZ2Vy
QWdlbnQpCi17Ci0gICAgaWYgKCFzX2V4cG9zZVY4RGVidWdnZXJQcm90b2NvbCkKLSAgICAgICAg
cmV0dXJuOwotICAgIGlmICghc19hdHRhY2hlZEFnZW50c01hcCkgewotICAgICAgICBzX2F0dGFj
aGVkQWdlbnRzTWFwID0gbmV3IEF0dGFjaGVkQWdlbnRzTWFwKCk7Ci0gICAgICAgIHY4OjpEZWJ1
Zzo6U2V0TWVzc2FnZUhhbmRsZXIyKCZEZWJ1Z2dlckFnZW50TWFuYWdlcjo6b25WOERlYnVnTWVz
c2FnZSk7Ci0gICAgICAgIHY4OjpEZWJ1Zzo6U2V0SG9zdERpc3BhdGNoSGFuZGxlcigmRGVidWdn
ZXJBZ2VudE1hbmFnZXI6OmRlYnVnSG9zdERpc3BhdGNoSGFuZGxlciwgMTAwIC8qIG1zICovKTsK
LSAgICB9Ci0gICAgaW50IGhvc3RJZCA9IGRlYnVnZ2VyQWdlbnQtPndlYmRldnRvb2xzQWdlbnQo
KS0+aG9zdElkKCk7Ci0gICAgQVNTRVJUKGhvc3RJZCk7Ci0gICAgc19hdHRhY2hlZEFnZW50c01h
cC0+c2V0KGhvc3RJZCwgZGVidWdnZXJBZ2VudCk7Ci19Ci0KLXZvaWQgRGVidWdnZXJBZ2VudE1h
bmFnZXI6OmRlYnVnRGV0YWNoKERlYnVnZ2VyQWdlbnRJbXBsKiBkZWJ1Z2dlckFnZW50KQotewot
ICAgIGlmICghc19leHBvc2VWOERlYnVnZ2VyUHJvdG9jb2wpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpZiAoIXNfYXR0YWNoZWRBZ2VudHNNYXApIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaW50IGhvc3RJZCA9IGRlYnVnZ2VyQWdl
bnQtPndlYmRldnRvb2xzQWdlbnQoKS0+aG9zdElkKCk7Ci0gICAgQVNTRVJUKHNfYXR0YWNoZWRB
Z2VudHNNYXAtPmdldChob3N0SWQpID09IGRlYnVnZ2VyQWdlbnQpOwotICAgIGJvb2wgaXNPbkJy
ZWFrcG9pbnQgPSAoZmluZEFnZW50Rm9yQ3VycmVudFY4Q29udGV4dCgpID09IGRlYnVnZ2VyQWdl
bnQpOwotICAgIHNfYXR0YWNoZWRBZ2VudHNNYXAtPnJlbW92ZShob3N0SWQpOwotCi0gICAgaWYg
KHNfYXR0YWNoZWRBZ2VudHNNYXAtPmlzRW1wdHkoKSkgewotICAgICAgICBkZWxldGUgc19hdHRh
Y2hlZEFnZW50c01hcDsKLSAgICAgICAgc19hdHRhY2hlZEFnZW50c01hcCA9IDA7Ci0gICAgICAg
IC8vIE5vdGUgdGhhdCB3ZSBkbyBub3QgZW1wdHkgaGFuZGxlcnMgd2hpbGUgaW4gZGlzcGF0Y2gg
LSB3ZSBzY2hlZHVsZQotICAgICAgICAvLyBjb250aW51ZSBhbmQgZG8gcmVtb3ZhbCBvbmNlIHdl
IGFyZSBvdXQgb2YgdGhlIGRpc3BhdGNoLiBBbHNvIHRoZXJlIGlzCi0gICAgICAgIC8vIG5vIG5l
ZWQgdG8gc2VuZCBjb250aW51ZSBjb21tYW5kIGluIHRoaXMgY2FzZSBzaW5jZSByZW1vdmluZyBt
ZXNzYWdlCi0gICAgICAgIC8vIGhhbmRsZXIgd2lsbCBjYXVzZSBkZWJ1Z2dlciB1bmxvYWQgYW5k
IGFsbCBicmVha3BvaW50cyB3aWxsIGJlIGNsZWFyZWQuCi0gICAgICAgIGlmICghc19pbkhvc3RE
aXNwYXRjaEhhbmRsZXIpIHsKLSAgICAgICAgICAgIHY4OjpEZWJ1Zzo6U2V0TWVzc2FnZUhhbmRs
ZXIyKDApOwotICAgICAgICAgICAgdjg6OkRlYnVnOjpTZXRIb3N0RGlzcGF0Y2hIYW5kbGVyKDAp
OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIFJlbW92ZSBhbGwgYnJlYWtwb2lu
dHMgc2V0IGJ5IHRoZSBhZ2VudC4KLSAgICAgIFN0cmluZyBjbGVhckJyZWFrcG9pbnRHcm91cENt
ZCA9IG1ha2VTdHJpbmcoCi0gICAgICAgICAgIntcInNlcVwiOjEsXCJ0eXBlXCI6XCJyZXF1ZXN0
XCIsXCJjb21tYW5kXCI6XCJjbGVhcmJyZWFrcG9pbnRncm91cFwiLCIKLSAgICAgICAgICAgICAg
IlwiYXJndW1lbnRzXCI6e1wiZ3JvdXBJZFwiOiIsIFN0cmluZzo6bnVtYmVyKGhvc3RJZCksICJ9
fSIpOwotICAgICAgc2VuZENvbW1hbmRUb1Y4KGNsZWFyQnJlYWtwb2ludEdyb3VwQ21kLCBuZXcg
Q2FsbGVySWRXcmFwcGVyKCkpOwotCi0gICAgICBpZiAoaXNPbkJyZWFrcG9pbnQpIHsKLSAgICAg
ICAgICAvLyBGb3JjZSBjb250aW51ZSBpZiBkZXRhY2ggaGFwcGVuZWQgaW4gbmVzc3RlZCBtZXNz
YWdlIGxvb3Agd2hpbGUKLSAgICAgICAgICAvLyBkZWJ1Z2dlciB3YXMgcGF1c2VkIG9uIGEgYnJl
YWtwb2ludChhcyBsb25nIGFzIHRoZXJlIGFyZSBvdGhlcgotICAgICAgICAgIC8vIGF0dGFjaGVk
IGFnZW50cyB2OCB3aWxsIHdhaXQgZm9yIGV4cGxpY2l0J2NvbnRpbnVlJyBtZXNzYWdlKS4KLSAg
ICAgICAgICBzZW5kQ29udGludWVDb21tYW5kVG9WOCgpOwotICAgICAgfQotICAgIH0KLX0KLQot
dm9pZCBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6b25WOERlYnVnTWVzc2FnZShjb25zdCB2ODo6RGVi
dWc6Ok1lc3NhZ2UmIG1lc3NhZ2UpCi17Ci0gICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwotICAg
IHY4OjpTdHJpbmc6OlZhbHVlIHZhbHVlKG1lc3NhZ2UuR2V0SlNPTigpKTsKLSAgICBXVEY6OlN0
cmluZyBvdXQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KCp2YWx1ZSksIHZhbHVlLmxl
bmd0aCgpKTsKLQotICAgIC8vIElmIGNhbGxlckRhdGEgaXMgbm90IDAgdGhlIG1lc3NhZ2UgaXMg
YSByZXNwb25zZSB0byBhIGRlYnVnZ2VyIGNvbW1hbmQuCi0gICAgaWYgKHY4OjpEZWJ1Zzo6Q2xp
ZW50RGF0YSogY2FsbGVyRGF0YSA9IG1lc3NhZ2UuR2V0Q2xpZW50RGF0YSgpKSB7Ci0gICAgICAg
IENhbGxlcklkV3JhcHBlciogd3JhcHBlciA9IHN0YXRpY19jYXN0PENhbGxlcklkV3JhcHBlcio+
KGNhbGxlckRhdGEpOwotICAgICAgICBpZiAod3JhcHBlci0+Y2FsbGVySXNNYW5hbmFnZXIoKSkg
ewotICAgICAgICAgICAgLy8gSnVzdCBpZ25vcmUgbWVzc2FnZXMgc2VudCBieSB0aGlzIG1hbmFn
ZXIuCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgRGVidWdnZXJBZ2Vu
dEltcGwqIGRlYnVnZ2VyQWdlbnQgPSBkZWJ1Z2dlckFnZW50Rm9ySG9zdElkKHdyYXBwZXItPmNh
bGxlcklkKCkpOwotICAgICAgICBpZiAoZGVidWdnZXJBZ2VudCkKLSAgICAgICAgICAgIGRlYnVn
Z2VyQWdlbnQtPmRlYnVnZ2VyT3V0cHV0KG91dCk7Ci0gICAgICAgIGVsc2UgaWYgKCFtZXNzYWdl
LldpbGxTdGFydFJ1bm5pbmcoKSkgewotICAgICAgICAgICAgLy8gQXV0b2NvbnRpbnVlIGV4ZWN1
dGlvbiBpZiB0aGVyZSBpcyBubyBoYW5kbGVyLgotICAgICAgICAgICAgc2VuZENvbnRpbnVlQ29t
bWFuZFRvVjgoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfSAvLyBPdGhlcndp
c2UgaXQncyBhbiBldmVudCBtZXNzYWdlLgotICAgIEFTU0VSVChtZXNzYWdlLklzRXZlbnQoKSk7
Ci0KLSAgICAvLyBJZ25vcmUgdW5zdXBwb3J0ZWQgZXZlbnQgdHlwZXMuCi0gICAgaWYgKG1lc3Nh
Z2UuR2V0RXZlbnQoKSAhPSB2ODo6QWZ0ZXJDb21waWxlICYmIG1lc3NhZ2UuR2V0RXZlbnQoKSAh
PSB2ODo6QnJlYWsgJiYgbWVzc2FnZS5HZXRFdmVudCgpICE9IHY4OjpFeGNlcHRpb24pCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBtZXNz
YWdlLkdldEV2ZW50Q29udGV4dCgpOwotICAgIC8vIElmIHRoZSBjb250ZXh0IGlzIGZyb20gb25l
IG9mIHRoZSBpbnBlY3RlZCB0YWJzIGl0IHNob3VsZCBoYXZlIGl0cyBjb250ZXh0Ci0gICAgLy8g
ZGF0YS4KLSAgICBpZiAoY29udGV4dC5Jc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gVW5rbm93biBj
b250ZXh0LCBza2lwIHRoZSBldmVudC4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8v
IElmIHRoZSBjb250ZXh0IGlzIGZyb20gb25lIG9mIHRoZSBpbnBlY3RlZCB0YWJzIG9yIGluamVj
dGVkIGV4dGVuc2lvbgotICAgIC8vIHNjcmlwdHMgaXQgbXVzdCBoYXZlIGhvc3RJZCBpbiB0aGUg
ZGF0YSBmaWVsZC4KLSAgICBpbnQgaG9zdElkID0gV2ViQ29yZTo6VjhQcm94eTo6Y29udGV4dERl
YnVnSWQoY29udGV4dCk7Ci0gICAgaWYgKGhvc3RJZCAhPSAtMSkgewotICAgICAgICBEZWJ1Z2dl
ckFnZW50SW1wbCogYWdlbnQgPSBkZWJ1Z2dlckFnZW50Rm9ySG9zdElkKGhvc3RJZCk7Ci0gICAg
ICAgIGlmIChhZ2VudCkgewotICAgICAgICAgICAgaWYgKGFnZW50LT5hdXRvQ29udGludWVPbkV4
Y2VwdGlvbigpCi0gICAgICAgICAgICAgICAgJiYgbWVzc2FnZS5HZXRFdmVudCgpID09IHY4OjpF
eGNlcHRpb24pIHsKLSAgICAgICAgICAgICAgICBzZW5kQ29udGludWVDb21tYW5kVG9WOCgpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYWdl
bnQtPmRlYnVnZ2VyT3V0cHV0KG91dCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAoIW1lc3NhZ2UuV2lsbFN0YXJ0UnVubmluZygpKSB7Ci0gICAgICAg
IC8vIEF1dG9jb250aW51ZSBleGVjdXRpb24gb24gYnJlYWsgYW5kIGV4Y2VwdGlvbiAgZXZlbnRz
IGlmIHRoZXJlIGlzIG5vCi0gICAgICAgIC8vIGhhbmRsZXIuCi0gICAgICAgIHNlbmRDb250aW51
ZUNvbW1hbmRUb1Y4KCk7Ci0gICAgfQotfQotCi12b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpw
YXVzZVNjcmlwdCgpCi17Ci0gICAgdjg6OkRlYnVnOjpEZWJ1Z0JyZWFrKCk7Ci19Ci0KLXZvaWQg
RGVidWdnZXJBZ2VudE1hbmFnZXI6OmV4ZWN1dGVEZWJ1Z2dlckNvbW1hbmQoY29uc3QgV1RGOjpT
dHJpbmcmIGNvbW1hbmQsIGludCBjYWxsZXJJZCkKLXsKLSAgICBzZW5kQ29tbWFuZFRvVjgoY29t
bWFuZCwgbmV3IENhbGxlcklkV3JhcHBlcihjYWxsZXJJZCkpOwotfQotCi12b2lkIERlYnVnZ2Vy
QWdlbnRNYW5hZ2VyOjpzZXRNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlcihXZWJEZXZUb29sc0Fn
ZW50OjpNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlciBoYW5kbGVyKQotewotICAgIHNfbWVzc2Fn
ZUxvb3BEaXNwYXRjaEhhbmRsZXIgPSBoYW5kbGVyOwotfQotCi12b2lkIERlYnVnZ2VyQWdlbnRN
YW5hZ2VyOjpzZXRFeHBvc2VWOERlYnVnZ2VyUHJvdG9jb2woYm9vbCB2YWx1ZSkKLXsKLSAgICBz
X2V4cG9zZVY4RGVidWdnZXJQcm90b2NvbCA9IHZhbHVlOwotICAgIFdlYkNvcmU6OlBhZ2VTY3Jp
cHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc2V0RW5hYmxlZCghc19leHBvc2VWOERlYnVnZ2VyUHJv
dG9jb2wpOwotfQotCi12b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpzZXRIb3N0SWQoV2ViRnJh
bWVJbXBsKiB3ZWJmcmFtZSwgaW50IGhvc3RJZCkKLXsKLSAgICBBU1NFUlQoaG9zdElkID4gMCk7
Ci0gICAgV2ViQ29yZTo6VjhQcm94eSogcHJveHkgPSBXZWJDb3JlOjpWOFByb3h5OjpyZXRyaWV2
ZSh3ZWJmcmFtZS0+ZnJhbWUoKSk7Ci0gICAgaWYgKHByb3h5KQotICAgICAgICBwcm94eS0+c2V0
Q29udGV4dERlYnVnSWQoaG9zdElkKTsKLX0KLQotdm9pZCBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6
b25XZWJWaWV3Q2xvc2VkKFdlYlZpZXdJbXBsKiB3ZWJ2aWV3KQotewotICAgIGlmIChwYWdlRGVm
ZXJyZXJzKCkuY29udGFpbnMod2VidmlldykpIHsKLSAgICAgICAgZGVsZXRlIHBhZ2VEZWZlcnJl
cnMoKS5nZXQod2Vidmlldyk7Ci0gICAgICAgIHBhZ2VEZWZlcnJlcnMoKS5yZW1vdmUod2Vidmll
dyk7Ci0gICAgfQotfQotCi12b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpvbk5hdmlnYXRlKCkK
LXsKLSAgICBpZiAoc19pbkhvc3REaXNwYXRjaEhhbmRsZXIpCi0gICAgICAgIERlYnVnZ2VyQWdl
bnRNYW5hZ2VyOjpzZW5kQ29udGludWVDb21tYW5kVG9WOCgpOwotfQotCi12b2lkIERlYnVnZ2Vy
QWdlbnRNYW5hZ2VyOjpzZW5kQ29tbWFuZFRvVjgoY29uc3QgV1RGOjpTdHJpbmcmIGNtZCwgdjg6
OkRlYnVnOjpDbGllbnREYXRhKiBkYXRhKQotewotICAgIHY4OjpEZWJ1Zzo6U2VuZENvbW1hbmQo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MTZfdCo+KGNtZC5jaGFyYWN0ZXJzKCkpLCBjbWQu
bGVuZ3RoKCksIGRhdGEpOwotfQotCi12b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpzZW5kQ29u
dGludWVDb21tYW5kVG9WOCgpCi17Ci0gICAgV1RGOjpTdHJpbmcgY29udGludWVDbWQoIntcInNl
cVwiOjEsXCJ0eXBlXCI6XCJyZXF1ZXN0XCIsXCJjb21tYW5kXCI6XCJjb250aW51ZVwifSIpOwot
ICAgIHNlbmRDb21tYW5kVG9WOChjb250aW51ZUNtZCwgbmV3IENhbGxlcklkV3JhcHBlcigpKTsK
LX0KLQotRGVidWdnZXJBZ2VudEltcGwqIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpmaW5kQWdlbnRG
b3JDdXJyZW50VjhDb250ZXh0KCkKLXsKLSAgICBpZiAoIXNfYXR0YWNoZWRBZ2VudHNNYXApCi0g
ICAgICAgIHJldHVybiAwOwotICAgIEFTU0VSVCghc19hdHRhY2hlZEFnZW50c01hcC0+aXNFbXB0
eSgpKTsKLQotICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IFdlYkNvcmU6OlY4UHJveHk6OnJl
dHJpZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4dCgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAg
IHJldHVybiAwOwotICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwotICAg
IGZvciAoQXR0YWNoZWRBZ2VudHNNYXA6Oml0ZXJhdG9yIGl0ID0gc19hdHRhY2hlZEFnZW50c01h
cC0+YmVnaW4oKTsgaXQgIT0gc19hdHRhY2hlZEFnZW50c01hcC0+ZW5kKCk7ICsraXQpIHsKLSAg
ICAgICAgaWYgKGl0LT5zZWNvbmQtPnBhZ2UoKSA9PSBwYWdlKQotICAgICAgICAgICAgcmV0dXJu
IGl0LT5zZWNvbmQ7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1EZWJ1Z2dlckFnZW50SW1w
bCogRGVidWdnZXJBZ2VudE1hbmFnZXI6OmRlYnVnZ2VyQWdlbnRGb3JIb3N0SWQoaW50IGhvc3RJ
ZCkKLXsKLSAgICBpZiAoIXNfYXR0YWNoZWRBZ2VudHNNYXApCi0gICAgICAgIHJldHVybiAwOwot
ICAgIHJldHVybiBzX2F0dGFjaGVkQWdlbnRzTWFwLT5nZXQoaG9zdElkKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9E
ZWJ1Z2dlckFnZW50TWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdn
ZXJBZ2VudE1hbmFnZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg2NGMyZTRk
NDQ1Y2IxODcyZGI3OTRmNWI5NzgxNmIxYTQ2MWFhYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dl
ckFnZW50TWFuYWdlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIERl
YnVnZ2VyQWdlbnRNYW5hZ2VyX2gKLSNkZWZpbmUgRGVidWdnZXJBZ2VudE1hbmFnZXJfaAotCi0j
aW5jbHVkZSAiV2ViQ1N0cmluZy5oIgotI2luY2x1ZGUgIldlYkRldlRvb2xzQWdlbnQuaCIKLSNp
bmNsdWRlIDx2OC1kZWJ1Zy5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIFBhZ2U7Ci1jbGFzcyBQ
YWdlR3JvdXBMb2FkRGVmZXJyZXI7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBE
ZWJ1Z2dlckFnZW50SW1wbDsKLWNsYXNzIERpY3Rpb25hcnlWYWx1ZTsKLWNsYXNzIFdlYkZyYW1l
SW1wbDsKLWNsYXNzIFdlYlZpZXdJbXBsOwotCi0vLyBUaGVyZSBpcyBzaW5nbGUgdjggaW5zdGFu
Y2UgcGVyIHJlbmRlciBwcm9jZXNzLiBBbHNvIHRoZXJlIG1heSBiZSBzZXZlcmFsCi0vLyBSZW5k
ZXJWaWV3cyBhbmQgY29uc2VxdWVudGx5IGRldnRvb2xzIGFnZW50cyBpbiB0aGUgcHJvY2VzcyB0
aGF0IHdhbnQgdG8gdGFsawotLy8gdG8gdGhlIHY4IGRlYnVnZ2VyLiBUaGlzIGNsYXNzIGNvb3Jk
aW5hdGVzIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgZGVidWcKLS8vIGFnZW50cyBhbmQgdjgg
ZGVidWdnZXIuIEl0IHdpbGwgc2V0IGRlYnVnIG91dHB1dCBoYW5kbGVyIGFzIGxvbmcgYXMgYXQg
bGVhc3QKLS8vIG9uZSBkZWJ1Z2dlciBhZ2VudCBpcyBhdHRhY2hlZCBhbmQgcmVtb3ZlIGl0IHdo
ZW4gbGFzdCBkZWJ1Z2dlciBhZ2VudCBpcwotLy8gZGV0YWNoZWQuIFdoZW4gbWVzc2FnZSBpcyBy
ZWNlaXZlZCBmcm9tIGRlYnVnZ2VyIGl0IHdpbGwgcm91dGUgaXQgdG8gdGhlCi0vLyByaWdodCBk
ZWJ1Z2dlciBhZ2VudCBpZiB0aGVyZSBpcyBvbmUgb3RoZXJ3aXNlIHRoZSBtZXNzYWdlIHdpbGwg
YmUgaWdub3JlZC4KLS8vCi0vLyB2OCBtYXkgc2VuZCBhIG1lc3NhZ2UoZS5nLiBleGNlcHRpb24g
ZXZlbnQpIGFmdGVyIHdoaWNoIGl0Ci0vLyB3b3VsZCBleHBlY3Qgc29tZSBhY3Rpb25zIGZyb20g
dGhlIGhhbmRsZXIuIElmIHRoZXJlIGlzIG5vIGFwcHJvcHJpYXRlCi0vLyBkZWJ1Z2dlciBhZ2Vu
dCB0byBoYW5kbGUgc3VjaCBtZXNzYWdlcyB0aGUgbWFuYWdlciB3aWxsIHBlcmZvcm0gdGhlIGFj
dGlvbgotLy8gaXRzZWxmLCBvdGhlcndpc2UgdjggbWF5IGhhbmcgd2FpdGluZyBmb3IgdGhlIGFj
dGlvbi4KLWNsYXNzIERlYnVnZ2VyQWdlbnRNYW5hZ2VyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShEZWJ1Z2dlckFnZW50TWFuYWdlcik7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgZGVi
dWdBdHRhY2goRGVidWdnZXJBZ2VudEltcGwqIGRlYnVnZ2VyQWdlbnQpOwotICAgIHN0YXRpYyB2
b2lkIGRlYnVnRGV0YWNoKERlYnVnZ2VyQWdlbnRJbXBsKiBkZWJ1Z2dlckFnZW50KTsKLSAgICBz
dGF0aWMgdm9pZCBwYXVzZVNjcmlwdCgpOwotICAgIHN0YXRpYyB2b2lkIGV4ZWN1dGVEZWJ1Z2dl
ckNvbW1hbmQoY29uc3QgV1RGOjpTdHJpbmcmIGNvbW1hbmQsIGludCBjYWxsZXJJZCk7Ci0gICAg
c3RhdGljIHZvaWQgc2V0TWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIoV2ViRGV2VG9vbHNBZ2Vu
dDo6TWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIgaGFuZGxlcik7Ci0gICAgc3RhdGljIHZvaWQg
c2V0RXhwb3NlVjhEZWJ1Z2dlclByb3RvY29sKGJvb2wpOwotCi0gICAgLy8gU2V0cyB8aG9zdElk
fCBhcyB0aGUgZnJhbWUgY29udGV4dCBkYXRhLiBUaGlzIGlkIGlzIHVzZWQgdG8gZmlsdGVyIHNj
cmlwdHMKLSAgICAvLyByZWxhdGVkIHRvIHRoZSBpbnNwZWN0ZWQgcGFnZS4KLSAgICBzdGF0aWMg
dm9pZCBzZXRIb3N0SWQoV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSwgaW50IGhvc3RJZCk7Ci0KLSAg
ICBzdGF0aWMgdm9pZCBvbldlYlZpZXdDbG9zZWQoV2ViVmlld0ltcGwqIHdlYnZpZXcpOwotCi0g
ICAgc3RhdGljIHZvaWQgb25OYXZpZ2F0ZSgpOwotCi1wcml2YXRlOgotICAgIERlYnVnZ2VyQWdl
bnRNYW5hZ2VyKCk7Ci0gICAgfkRlYnVnZ2VyQWdlbnRNYW5hZ2VyKCk7Ci0KLSAgICBzdGF0aWMg
dm9pZCBkZWJ1Z0hvc3REaXNwYXRjaEhhbmRsZXIoKTsKLSAgICBzdGF0aWMgdm9pZCBvblY4RGVi
dWdNZXNzYWdlKGNvbnN0IHY4OjpEZWJ1Zzo6TWVzc2FnZSYgbWVzc2FnZSk7Ci0gICAgc3RhdGlj
IHZvaWQgc2VuZENvbW1hbmRUb1Y4KGNvbnN0IFdURjo6U3RyaW5nJiBjbWQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHY4OjpEZWJ1Zzo6Q2xpZW50RGF0YSogZGF0YSk7Ci0gICAg
c3RhdGljIHZvaWQgc2VuZENvbnRpbnVlQ29tbWFuZFRvVjgoKTsKLQotICAgIHN0YXRpYyBEZWJ1
Z2dlckFnZW50SW1wbCogZmluZEFnZW50Rm9yQ3VycmVudFY4Q29udGV4dCgpOwotICAgIHN0YXRp
YyBEZWJ1Z2dlckFnZW50SW1wbCogZGVidWdnZXJBZ2VudEZvckhvc3RJZChpbnQgaG9zdElkKTsK
LQotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIERlYnVnZ2VyQWdlbnRJbXBsKj4gQXR0YWNoZWRB
Z2VudHNNYXA7Ci0gICAgc3RhdGljIEF0dGFjaGVkQWdlbnRzTWFwKiBzX2F0dGFjaGVkQWdlbnRz
TWFwOwotCi0gICAgc3RhdGljIFdlYkRldlRvb2xzQWdlbnQ6Ok1lc3NhZ2VMb29wRGlzcGF0Y2hI
YW5kbGVyIHNfbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXI7Ci0gICAgc3RhdGljIGJvb2wgc19p
bkhvc3REaXNwYXRjaEhhbmRsZXI7Ci0KLSAgICBzdGF0aWMgYm9vbCBzX2V4cG9zZVY4RGVidWdn
ZXJQcm90b2NvbDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckZyb250ZW5kQ2xpZW50
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JGcm9udGVuZENs
aWVudEltcGwuY3BwCmluZGV4IGViZjgxZjA1ZjVmMTQwMTk2MDMzMGY1MmJmZDU3YTlhNzBhZmE2
YzYuLjExNDAzNmVmYTU4M2RhYWUxNThjZWYyNWU4MTZiZTIzNzcxZTI2YjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRJbXBsLmNwcApAQCAtOTIsOCArOTIsNiBAQCBTdHJpbmcgSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRJbXBsOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKIAogU3RyaW5nIEluc3BlY3RvckZyb250ZW5k
Q2xpZW50SW1wbDo6aGlkZGVuUGFuZWxzKCkKIHsKLSAgICBpZiAobV9jbGllbnQtPnNob3VsZEhp
ZGVTY3JpcHRzUGFuZWwoKSkKLSAgICAgICAgcmV0dXJuICJzY3JpcHRzIjsKICAgICByZXR1cm4g
IiI7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRv
b2xzQWdlbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xz
QWdlbnRJbXBsLmNwcAppbmRleCA5MzQ5YTQwYTc5OTViMmZiN2VmMzcwMDE4YTk4ZGYwNzVhNzg1
NTEwLi5kZDMxMzYxNDQyYTRmMjE2Y2RkMTRmMTlmYjAxZWI0OWFkYmFkYWVhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCkBA
IC0zMSw4ICszMSw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViRGV2VG9v
bHNBZ2VudEltcGwuaCIKIAotI2luY2x1ZGUgIkRlYnVnZ2VyQWdlbnRJbXBsLmgiCi0jaW5jbHVk
ZSAiRGVidWdnZXJBZ2VudE1hbmFnZXIuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0
LmgiCkBAIC0xODMsMTMgKzE4MSwxMSBAQCBXZWJEZXZUb29sc0FnZW50SW1wbDo6V2ViRGV2VG9v
bHNBZ2VudEltcGwoCiAgICAgLCBtX3dlYlZpZXdJbXBsKHdlYlZpZXdJbXBsKQogICAgICwgbV9h
dHRhY2hlZChmYWxzZSkKIHsKLSAgICBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6c2V0RXhwb3NlVjhE
ZWJ1Z2dlclByb3RvY29sKAotICAgICAgICBjbGllbnQtPmV4cG9zZVY4RGVidWdnZXJQcm90b2Nv
bCgpKTsKKyAgICBBU1NFUlQobV9ob3N0SWQgPiAwKTsKIH0KIAogV2ViRGV2VG9vbHNBZ2VudElt
cGw6On5XZWJEZXZUb29sc0FnZW50SW1wbCgpCiB7Ci0gICAgRGVidWdnZXJBZ2VudE1hbmFnZXI6
Om9uV2ViVmlld0Nsb3NlZChtX3dlYlZpZXdJbXBsKTsKICAgICBDbGllbnRNZXNzYWdlTG9vcEFk
YXB0ZXI6Omluc3BlY3RlZFZpZXdDbG9zZWQobV93ZWJWaWV3SW1wbCk7CiB9CiAKQEAgLTE5OCwx
MCArMTk0LDcgQEAgdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6YXR0YWNoKCkKICAgICBpZiAo
bV9hdHRhY2hlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX2NsaWVudC0+ZXhwb3Nl
VjhEZWJ1Z2dlclByb3RvY29sKCkpCi0gICAgICAgIENsaWVudE1lc3NhZ2VMb29wQWRhcHRlcjo6
ZW5zdXJlQ2xpZW50TWVzc2FnZUxvb3BDcmVhdGVkKG1fY2xpZW50KTsKLQotICAgIG1fZGVidWdn
ZXJBZ2VudEltcGwgPSBhZG9wdFB0cihuZXcgRGVidWdnZXJBZ2VudEltcGwobV93ZWJWaWV3SW1w
bCwgdGhpcywgbV9jbGllbnQpKTsKKyAgICBDbGllbnRNZXNzYWdlTG9vcEFkYXB0ZXI6OmVuc3Vy
ZUNsaWVudE1lc3NhZ2VMb29wQ3JlYXRlZChtX2NsaWVudCk7CiAgICAgbV9hdHRhY2hlZCA9IHRy
dWU7CiB9CiAKQEAgLTIxOCw3ICsyMTEsNiBAQCB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpk
ZXRhY2goKQogICAgIGljLT5kaXNjb25uZWN0RnJvbnRlbmQoKTsKICAgICBpYy0+aGlkZUhpZ2hs
aWdodCgpOwogICAgIGljLT5jbG9zZSgpOwotICAgIG1fZGVidWdnZXJBZ2VudEltcGwuY2xlYXIo
KTsKICAgICBtX2F0dGFjaGVkID0gZmFsc2U7CiB9CiAKQEAgLTIzMCwxMiArMjIyLDEzIEBAIHZv
aWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmZyb250ZW5kTG9hZGVkKCkKIHZvaWQgV2ViRGV2VG9v
bHNBZ2VudEltcGw6OmRpZE5hdmlnYXRlKCkKIHsKICAgICBDbGllbnRNZXNzYWdlTG9vcEFkYXB0
ZXI6OmRpZE5hdmlnYXRlKCk7Ci0gICAgRGVidWdnZXJBZ2VudE1hbmFnZXI6Om9uTmF2aWdhdGUo
KTsKIH0KIAogdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6ZGlkQ2xlYXJXaW5kb3dPYmplY3Qo
V2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSkKIHsKLSAgICBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6c2V0
SG9zdElkKHdlYmZyYW1lLCBtX2hvc3RJZCk7CisgICAgV2ViQ29yZTo6VjhQcm94eSogcHJveHkg
PSBXZWJDb3JlOjpWOFByb3h5OjpyZXRyaWV2ZSh3ZWJmcmFtZS0+ZnJhbWUoKSk7CisgICAgaWYg
KHByb3h5KQorICAgICAgICBwcm94eS0+c2V0Q29udGV4dERlYnVnSWQobV9ob3N0SWQpOwogfQog
CiB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpkaXNwYXRjaE9uSW5zcGVjdG9yQmFja2VuZChj
b25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpCkBAIC0zNDgsMTYgKzM0MSw2IEBAIGJvb2wgV2ViRGV2
VG9vbHNBZ2VudDo6c3VwcG9ydHNJbnNwZWN0b3JQcm90b2NvbFZlcnNpb24oY29uc3QgV2ViU3Ry
aW5nJiB2ZXJzaW9uCiAgICAgcmV0dXJuIFdlYkNvcmU6OnN1cHBvcnRzSW5zcGVjdG9yUHJvdG9j
b2xWZXJzaW9uKHZlcnNpb24pOwogfQogCi12b2lkIFdlYkRldlRvb2xzQWdlbnQ6OmV4ZWN1dGVE
ZWJ1Z2dlckNvbW1hbmQoY29uc3QgV2ViU3RyaW5nJiBjb21tYW5kLCBpbnQgY2FsbGVySWQpCi17
Ci0gICAgRGVidWdnZXJBZ2VudE1hbmFnZXI6OmV4ZWN1dGVEZWJ1Z2dlckNvbW1hbmQoY29tbWFu
ZCwgY2FsbGVySWQpOwotfQotCi12b2lkIFdlYkRldlRvb2xzQWdlbnQ6OmRlYnVnZ2VyUGF1c2VT
Y3JpcHQoKQotewotICAgIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpwYXVzZVNjcmlwdCgpOwotfQot
CiB2b2lkIFdlYkRldlRvb2xzQWdlbnQ6OmludGVycnVwdEFuZERpc3BhdGNoKE1lc3NhZ2VEZXNj
cmlwdG9yKiByYXdEZXNjcmlwdG9yKQogewogICAgIC8vIHJhd0Rlc2NyaXB0b3IgY2FuJ3QgYmUg
YSBQYXNzT3duUHRyIGJlY2F1c2UgaW50ZXJydXB0QW5kRGlzcGF0Y2ggaXMgYSBXZWJLaXQgQVBJ
IGZ1bmN0aW9uLgpAQCAtNDAyLDkgKzM4NSw0IEBAIFdlYlN0cmluZyBXZWJEZXZUb29sc0FnZW50
OjpkaXNjb25uZWN0RXZlbnRBc1RleHQoKQogICAgIHJldHVybiBjaGFubmVsLm1fbWVzc2FnZTsK
IH0KIAotdm9pZCBXZWJEZXZUb29sc0FnZW50OjpzZXRNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxl
cihNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlciBoYW5kbGVyKQotewotICAgIERlYnVnZ2VyQWdl
bnRNYW5hZ2VyOjpzZXRNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlcihoYW5kbGVyKTsKLX0KLQog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViRGV2VG9vbHNBZ2VudEltcGwuaAppbmRleCBlN2JjMGZkMTFkN2QxMmUzNmZjOWQ0MDZlMGJi
YmE5ZDQ0ZTA2MTBhLi42M2Y3OWFiYzhhNWQwYjdmNzg2ZTFhZmYyZjg0Y2RiMzhjZDgzYmExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1w
bC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBs
LmgKQEAgLTUwLDcgKzUwLDYgQEAgY2xhc3MgTm9kZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAK
LWNsYXNzIERlYnVnZ2VyQWdlbnRJbXBsOwogY2xhc3MgV2ViRGV2VG9vbHNBZ2VudENsaWVudDsK
IGNsYXNzIFdlYkZyYW1lOwogY2xhc3MgV2ViRnJhbWVJbXBsOwpAQCAtMTA3LDcgKzEwNiw2IEBA
IHByaXZhdGU6CiAgICAgaW50IG1faG9zdElkOwogICAgIFdlYkRldlRvb2xzQWdlbnRDbGllbnQq
IG1fY2xpZW50OwogICAgIFdlYlZpZXdJbXBsKiBtX3dlYlZpZXdJbXBsOwotICAgIE93blB0cjxE
ZWJ1Z2dlckFnZW50SW1wbD4gbV9kZWJ1Z2dlckFnZW50SW1wbDsKICAgICBib29sIG1fYXR0YWNo
ZWQ7CiB9OwogCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlRE
ZXZUb29sc0FnZW50LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERldlRv
b2xzQWdlbnQuY3BwCmluZGV4IDA1OWE0MDRjMmFiNmEyMTc5OWYzZjVlZWI3ZDM5YTEwMWE3ZGQw
ZjEuLmM4MDkwNzhkNDVkODJlMGNlYzE3ZjE0NzRmNDI5NjI0MGMzMzMzNzUgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERldlRvb2xzQWdlbnQuY3BwCisrKyBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERldlRvb2xzQWdlbnQuY3BwCkBAIC00
Nyw4ICs0Nyw2IEBAIERSVERldlRvb2xzQWdlbnQ6OkRSVERldlRvb2xzQWdlbnQoKQogICAgIHN0
YXRpYyBpbnQgZGV2VG9vbHNBZ2VudENvdW50ZXIgPSAwOwogCiAgICAgbV9yb3V0aW5nSUQgPSAr
K2RldlRvb2xzQWdlbnRDb3VudGVyOwotICAgIGlmIChtX3JvdXRpbmdJRCA9PSAxKQotICAgICAg
ICBXZWJEZXZUb29sc0FnZW50OjpzZXRNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlcigmRFJURGV2
VG9vbHNBZ2VudDo6ZGlzcGF0Y2hNZXNzYWdlTG9vcCk7CiB9CiAKIHZvaWQgRFJURGV2VG9vbHNB
Z2VudDo6cmVzZXQoKQpAQCAtMTQ0LDkgKzE0MiwzIEBAIGJvb2wgRFJURGV2VG9vbHNBZ2VudDo6
ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihsb25nIGNhbGxJRCwgY29uc3Qgc3RkOjpzdHJpbmcmIHNj
CiAgICAgYWdlbnQtPmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoY2FsbElELCBXZWJTdHJpbmc6OmZy
b21VVEY4KHNjcmlwdCkpOwogICAgIHJldHVybiB0cnVlOwogfQotCi0vLyBzdGF0aWMgbWV0aG9k
Ci12b2lkIERSVERldlRvb2xzQWdlbnQ6OmRpc3BhdGNoTWVzc2FnZUxvb3AoKQotewotICAgIHdl
YmtpdF9zdXBwb3J0OjpEaXNwYXRjaE1lc3NhZ2VMb29wKCk7Ci19CmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0FnZW50LmggYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0FnZW50LmgKaW5kZXggNzViNGE5MTNiZjE4
ZTQzNjgzNDA1MTk2NDgyNGJiNjMwNWY4NTU3NC4uYWUxZDFjNzdlZDdjNzVmZmVkZjJmMzA2Mzhk
Nzg1NjM4M2RkNGRhNiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
RFJURGV2VG9vbHNBZ2VudC5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RS
VERldlRvb2xzQWdlbnQuaApAQCAtNzYsNyArNzYsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IHZvaWQgY2FsbChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgYXJncyk7CiAgICAgdm9pZCBkZWxh
eWVkRnJvbnRlbmRMb2FkZWQoKTsKLSAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaE1lc3NhZ2VMb29w
KCk7CiAgICAgV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50KiB3ZWJEZXZUb29sc0FnZW50KCk7CiAK
ICAgICBjbGFzcyBBc3luY0NhbGxUYXNrOiBwdWJsaWMgTWV0aG9kVGFzazxEUlREZXZUb29sc0Fn
ZW50PiB7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZU
b29sc0NsaWVudC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29s
c0NsaWVudC5jcHAKaW5kZXggY2ZjZDAwMzJiYzMxY2UxMDFmNTBjMWUyNTNlNDM3MmUzMmFiMzEw
YS4uMWMyMWQ3YjNiNTE1NDkwZDFhZjMxODlmMTJlN2I3MTVmNWU2NWJkOCAxMDA2NDQKLS0tIGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNDbGllbnQuY3BwCisrKyBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERldlRvb2xzQ2xpZW50LmNwcApAQCAt
NzYsMTEgKzc2LDYgQEAgdm9pZCBEUlREZXZUb29sc0NsaWVudDo6c2VuZE1lc3NhZ2VUb0JhY2tl
bmQoY29uc3QgV2ViU3RyaW5nJiBkYXRhKQogICAgICAgICBtX2RydERldlRvb2xzQWdlbnQtPmFz
eW5jQ2FsbChkYXRhKTsKIH0KIAotdm9pZCBEUlREZXZUb29sc0NsaWVudDo6c2VuZERlYnVnZ2Vy
Q29tbWFuZFRvQWdlbnQoY29uc3QgV2ViU3RyaW5nJiBjb21tYW5kKQotewotICAgIFdlYkRldlRv
b2xzQWdlbnQ6OmV4ZWN1dGVEZWJ1Z2dlckNvbW1hbmQoY29tbWFuZCwgMSk7Ci19Ci0KIHZvaWQg
RFJURGV2VG9vbHNDbGllbnQ6OmFjdGl2YXRlV2luZG93KCkKIHsKICAgICAvLyBOb3QgaW1wbGVt
ZW50ZWQuCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZU
b29sc0NsaWVudC5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHND
bGllbnQuaAppbmRleCA3OWY3ZDk1OWMzMDMwOTMxOWE0NDFhOTE5MmQ0MGVlNmI0YzAyMTFkLi4z
Yjk2YzBiZDg5NTU5OTVmMDA5MmUxNzc1OTcxYzMwNmIxYWQxOTEyIDEwMDY0NAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0NsaWVudC5oCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERldlRvb2xzQ2xpZW50LmgKQEAgLTU2LDcgKzU2
LDYgQEAgcHVibGljOgogICAgIC8vIFdlYkRldlRvb2xzRnJvbnRlbmRDbGllbnQgaW1wbGVtZW50
YXRpb24KICAgICB2aXJ0dWFsIHZvaWQgc2VuZEZyb250ZW5kTG9hZGVkKCk7CiAgICAgdmlydHVh
bCB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJik7Ci0g
ICAgdmlydHVhbCB2b2lkIHNlbmREZWJ1Z2dlckNvbW1hbmRUb0FnZW50KGNvbnN0IFdlYktpdDo6
V2ViU3RyaW5nJiBjb21tYW5kKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhY3RpdmF0ZVdpbmRvdygp
OwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvdygpOwo=
</data>
<flag name="review"
          id="115719"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>