<?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>100005</bug_id>
          
          <creation_ts>2012-10-22 08:45:29 -0700</creation_ts>
          <short_desc>[EFL][WK2] Make download client a C++ class</short_desc>
          <delta_ts>2012-10-23 03:53:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>99594</dependson>
          <blocked>99992</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>gyuyoung.kim</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>rakuco</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>747580</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-22 08:45:29 -0700</bug_when>
    <thetext>The download client is currently tightly integrated to the context and uses C style.

We should move all the download client code to its own C++ class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747785</commentid>
    <comment_count>1</comment_count>
      <attachid>169959</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-22 12:51:20 -0700</bug_when>
    <thetext>Created attachment 169959
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748401</commentid>
    <comment_count>2</comment_count>
      <attachid>170090</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-23 02:16:23 -0700</bug_when>
    <thetext>Created attachment 170090
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748466</commentid>
    <comment_count>3</comment_count>
      <attachid>170090</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-23 03:53:48 -0700</bug_when>
    <thetext>Comment on attachment 170090
Patch

Clearing flags on attachment: 170090

Committed r132200: &lt;http://trac.webkit.org/changeset/132200&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748467</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-23 03:53:53 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169959</attachid>
            <date>2012-10-22 12:51:20 -0700</date>
            <delta_ts>2012-10-23 02:16:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>100005_downloadClient_cpp.patch</filename>
            <type>text/plain</type>
            <size>26610</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBhYzRhNWJkLi5mMTRmNGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNDkg
QEAKIDIwMTItMTAtMjIgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVs
LmNvbT4KIAorICAgICAgICBbRUZMXVtXSzJdIE1ha2UgYSBkb3dubG9hZCBjbGllbnQgYSBDKysg
Y2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
MDAwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1h
a2UgRUZMJ3MgRG93bmxvYWQgY2xpZW50IGEgQysrIGNsYXNzIGFuZCBtb3ZlCisgICAgICAgIHRo
ZSBpZCA8LT4gZG93bmxvYWQgbWFwcGluZyBmcm9tIEV3a19Db250ZXh0IHRvCisgICAgICAgIERv
d25sb2FkTWFuYWdlckVmbC4KKworICAgICAgICBUaGUgRG93bmxvYWQgY2xpZW50IHdhcyBhbHNv
IG1vdmVkIHRvCisgICAgICAgIFVJUHJvY2Vzcy9lZmwvIGluc3RlYWQgb2YgVUlQcm9jZXNzL0FQ
SS9lZmwvCisgICAgICAgIHNpbmNlIGl0IGlzIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLgor
CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvUGFnZUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6
aGFuZGxlRG93bmxvYWRSZXF1ZXN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tf
Y29udGV4dC5jcHA6CisgICAgICAgIChFd2tfQ29udGV4dDo6RXdrX0NvbnRleHQpOgorICAgICAg
ICAoRXdrX0NvbnRleHQ6OmRvd25sb2FkTWFuYWdlcik6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50X3ByaXZhdGUuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmg6CisgICAgICAg
IChFd2tfQ29udGV4dCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2Fk
X2pvYl9wcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9Eb3dubG9hZE1hbmFnZXJF
ZmwuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2NvbnRleHRfZG93bmxvYWRfY2xpZW50LmNwcC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
IChXZWJLaXQ6OnRvRG93bmxvYWRNYW5hZ2VyRWZsKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxv
YWRNYW5hZ2VyRWZsOjpkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkRvd25sb2FkTWFuYWdlckVmbDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToK
KyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRNYW5hZ2VyRWZsOjpkaWRDcmVhdGVEZXN0aW5hdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkTWFuYWdlckVmbDo6ZGlkUmVjZWl2ZURhdGEp
OgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZE1hbmFnZXJFZmw6OmRpZEZhaWwpOgorICAgICAg
ICAoV2ViS2l0OjpEb3dubG9hZE1hbmFnZXJFZmw6OmRpZENhbmNlbCk6CisgICAgICAgIChXZWJL
aXQ6OkRvd25sb2FkTWFuYWdlckVmbDo6ZGlkRmluaXNoKToKKyAgICAgICAgKFdlYktpdDo6RG93
bmxvYWRNYW5hZ2VyRWZsOjpEb3dubG9hZE1hbmFnZXJFZmwpOgorICAgICAgICAoV2ViS2l0OjpE
b3dubG9hZE1hbmFnZXJFZmw6OnJlZ2lzdGVyRG93bmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpE
b3dubG9hZE1hbmFnZXJFZmw6OmRvd25sb2FkSm9iKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxv
YWRNYW5hZ2VyRWZsOjp1bnJlZ2lzdGVyRG93bmxvYWRKb2IpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9lZmwvRG93bmxvYWRNYW5hZ2VyRWZsLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKERvd25sb2FkTWFuYWdlckVmbCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkTWFu
YWdlckVmbDo6Y3JlYXRlKToKKworMjAxMi0xMC0yMiAgQ2hyaXN0b3BoZSBEdW1leiAgPGNocmlz
dG9waGUuZHVtZXpAaW50ZWwuY29tPgorCiAgICAgICAgIFtFRkxdW1dLMl0gTWVtb3J5IGxlYWsg
aW4gRXdrX0Zvcm1fU3VibWlzc2lvbl9SZXF1ZXN0OjpmaWVsZFZhbHVlKCkKICAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5OTkzCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZv
cm1FZmwuY21ha2UKaW5kZXggNTE5YWRmYi4uYTAxZDQzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwu
Y21ha2UKQEAgLTUwLDcgKzUwLDYgQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAg
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmNwcAogICAgIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmNwcAogICAgIFVJUHJvY2Vzcy9B
UEkvZWZsL2V3a19jb250ZXh0LmNwcAotICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0
X2Rvd25sb2FkX2NsaWVudC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9o
aXN0b3J5X2NsaWVudC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9yZXF1
ZXN0X21hbmFnZXJfY2xpZW50LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb29raWVf
bWFuYWdlci5jcHAKQEAgLTgwLDYgKzc5LDcgQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VT
CiAKICAgICBVSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCiAKKyAgICBVSVBy
b2Nlc3MvZWZsL0Rvd25sb2FkTWFuYWdlckVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1RleHRD
aGVja2VyRWZsLmNwcAogICAgIFVJUHJvY2Vzcy9lZmwvV2ViQ29udGV4dEVmbC5jcHAKICAgICBV
SVByb2Nlc3MvZWZsL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlFZmwuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50SW1wbC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50SW1wbC5jcHAKaW5kZXgg
MDU0YmZjYi4uODhmNTczMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvUGFnZUNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL1BhZ2VDbGllbnRJbXBsLmNwcApAQCAtMjgzLDggKzI4Myw4IEBAIHZvaWQgUGFnZUNs
aWVudEltcGw6OmNvdW50U3RyaW5nTWF0Y2hlc0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3Qg
U3RyaW5nJiwgRmluCiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OmhhbmRsZURvd25sb2FkUmVxdWVz
dChEb3dubG9hZFByb3h5KiBkb3dubG9hZCkKIHsKLSAgICBSZWZQdHI8RXdrX0Rvd25sb2FkX0pv
Yj4gZXdrRG93bmxvYWQgPSBFd2tfRG93bmxvYWRfSm9iOjpjcmVhdGUoZG93bmxvYWQsIG1fdmll
d1dpZGdldCk7Ci0gICAgZXdrX3ZpZXdfY29udGV4dF9nZXQobV92aWV3V2lkZ2V0KS0+YWRkRG93
bmxvYWRKb2IoZXdrRG93bmxvYWQuZ2V0KCkpOworICAgIEV3a19Db250ZXh0KiBjb250ZXh0ID0g
ZXdrX3ZpZXdfY29udGV4dF9nZXQobV92aWV3V2lkZ2V0KTsKKyAgICBjb250ZXh0LT5kb3dubG9h
ZE1hbmFnZXIoKS0+cmVnaXN0ZXJEb3dubG9hZChkb3dubG9hZCwgbV92aWV3V2lkZ2V0KTsKIH0K
IAogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCmluZGV4IDM1ZmMxNTcuLmIyMDkyYzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAK
QEAgLTMyLDEzICszMiwxMCBAQAogI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKICNpbmNsdWRlICJX
ZWJJY29uRGF0YWJhc2UuaCIKICNpbmNsdWRlICJXZWJTb3VwUmVxdWVzdE1hbmFnZXJQcm94eS5o
IgotI2luY2x1ZGUgImV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9wcml2YXRlLmgiCiAjaW5j
bHVkZSAiZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3
a19jb250ZXh0X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfY29udGV4dF9yZXF1ZXN0X21hbmFn
ZXJfY2xpZW50X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfY29va2llX21hbmFnZXJfcHJpdmF0
ZS5oIgotI2luY2x1ZGUgImV3a19kb3dubG9hZF9qb2IuaCIKLSNpbmNsdWRlICJld2tfZG93bmxv
YWRfam9iX3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRl
LmgiCiAjaW5jbHVkZSAiZXdrX3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfdXJsX3NjaGVtZV9y
ZXF1ZXN0X3ByaXZhdGUuaCIKQEAgLTEwNiw5ICsxMDMsMTAgQEAgRXdrX0NvbnRleHQ6OkV3a19D
b250ZXh0KFdLQ29udGV4dFJlZiBjb250ZXh0KQogICAgIH0KICNlbmRpZgogCisgICAgLy8gSW5p
dGlhbGl6ZSBXS0NvbnRleHQgY2xpZW50cy4KICAgICBld2tfY29udGV4dF9yZXF1ZXN0X21hbmFn
ZXJfY2xpZW50X2F0dGFjaCh0aGlzKTsKLSAgICBld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnRf
YXR0YWNoKHRoaXMpOwogICAgIGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X2F0dGFjaCh0aGlz
KTsKKyAgICBtX2Rvd25sb2FkTWFuYWdlciA9IERvd25sb2FkTWFuYWdlckVmbDo6Y3JlYXRlKHRo
aXMpOwogfQogCiBFd2tfQ29udGV4dDo6fkV3a19Db250ZXh0KCkKQEAgLTIyNCwzOSArMjIyLDkg
QEAgV0tDb250ZXh0UmVmIEV3a19Db250ZXh0Ojp3a0NvbnRleHQoKQogICAgIHJldHVybiBtX2Nv
bnRleHQuZ2V0KCk7CiB9CiAKLS8qKgotICogQGludGVybmFsCi0gKiBSZWdpc3RlcnMgdGhhdCBh
IG5ldyBkb3dubG9hZCBoYXMgYmVlbiByZXF1ZXN0ZWQuCi0gKi8KLXZvaWQgRXdrX0NvbnRleHQ6
OmFkZERvd25sb2FkSm9iKEV3a19Eb3dubG9hZF9Kb2IqIGV3a0Rvd25sb2FkKQotewotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGV3a0Rvd25sb2FkKTsKLQotICAgIHVpbnQ2NF90IGRv
d25sb2FkSWQgPSBld2tEb3dubG9hZC0+aWQoKTsKLSAgICBpZiAobV9kb3dubG9hZEpvYnMuY29u
dGFpbnMoZG93bmxvYWRJZCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZG93bmxvYWRKb2Jz
LmFkZChkb3dubG9hZElkLCBld2tEb3dubG9hZCk7Ci19Ci0KLS8qKgotICogQGludGVybmFsCi0g
KiBSZXR1cm5zIHRoZSAjRXdrX0Rvd25sb2FkX0pvYiB3aXRoIHRoZSBnaXZlbiBAYSBkb3dubG9h
ZElkLCBvcgotICogQGMgMCBpbiBjYXNlIG9mIGZhaWx1cmUuCi0gKi8KLUV3a19Eb3dubG9hZF9K
b2IqIEV3a19Db250ZXh0Ojpkb3dubG9hZEpvYih1aW50NjRfdCBkb3dubG9hZElkKQotewotICAg
IHJldHVybiBtX2Rvd25sb2FkSm9icy5nZXQoZG93bmxvYWRJZCkuZ2V0KCk7Ci19Ci0KLS8qKgot
ICogQGludGVybmFsCi0gKiBSZW1vdmVzIHRoZSAjRXdrX0Rvd25sb2FkX0pvYiB3aXRoIHRoZSBn
aXZlbiBAYSBkb3dubG9hZElkIGZyb20gdGhlIGludGVybmFsCi0gKiBIYXNoTWFwLgotICovCi12
b2lkIEV3a19Db250ZXh0OjpyZW1vdmVEb3dubG9hZEpvYih1aW50NjRfdCBkb3dubG9hZElkKQor
RG93bmxvYWRNYW5hZ2VyRWZsKiBFd2tfQ29udGV4dDo6ZG93bmxvYWRNYW5hZ2VyKCkgY29uc3QK
IHsKLSAgICBtX2Rvd25sb2FkSm9icy5yZW1vdmUoZG93bmxvYWRJZCk7CisgICAgcmV0dXJuIG1f
ZG93bmxvYWRNYW5hZ2VyLmdldCgpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGll
bnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmE4NmU5Li4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2Rvd25sb2Fk
X2NsaWVudC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiRG93bmxvYWRQcm94eS5o
IgotI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgotI2luY2x1ZGUgIldLQ29udGV4dC5oIgotI2luY2x1
ZGUgIldLU3RyaW5nLmgiCi0jaW5jbHVkZSAiZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50X3By
aXZhdGUuaCIKLSNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRlLmgiCi0jaW5jbHVkZSAiZXdr
X2Rvd25sb2FkX2pvYi5oIgotI2luY2x1ZGUgImV3a19kb3dubG9hZF9qb2JfcHJpdmF0ZS5oIgot
I2luY2x1ZGUgImV3a19lcnJvcl9wcml2YXRlLmgiCi0jaW5jbHVkZSAiZXdrX3VybF9yZXNwb25z
ZS5oIgotI2luY2x1ZGUgImV3a191cmxfcmVzcG9uc2VfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImV3
a192aWV3X3ByaXZhdGUuaCIKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi11c2luZyBuYW1lc3BhY2Ug
V2ViS2l0OwotCi1zdGF0aWMgaW5saW5lIEV3a19Db250ZXh0KiB0b0V3a0NvbnRleHQoY29uc3Qg
dm9pZCogY2xpZW50SW5mbykKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RXdrX0NvbnRleHQq
Pihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7Ci19Ci0KLXN0YXRpYyBXS1N0cmluZ1Jl
ZiBkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShXS0NvbnRleHRSZWYsIFdL
RG93bmxvYWRSZWYgd2tEb3dubG9hZCwgV0tTdHJpbmdSZWYgZmlsZW5hbWUsIGJvb2wqIC8qYWxs
b3dPdmVyd3JpdGUqLywgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICBFd2tfRG93bmxv
YWRfSm9iKiBkb3dubG9hZCA9IHRvRXdrQ29udGV4dChjbGllbnRJbmZvKS0+ZG93bmxvYWRKb2Io
dG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOwotICAgIEFTU0VSVChkb3dubG9hZCk7
Ci0KLSAgICBkb3dubG9hZC0+c2V0U3VnZ2VzdGVkRmlsZU5hbWUodG9JbXBsKGZpbGVuYW1lKS0+
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICAvLyBXZSBzZW5kIHRoZSBuZXcgZG93bmxv
YWQgc2lnbmFsIG9uIHRoZSBFd2tfVmlldyBvbmx5IG9uY2Ugd2UgaGF2ZSByZWNlaXZlZCB0aGUg
cmVzcG9uc2UKLSAgICAvLyBhbmQgdGhlIHN1Z2dlc3RlZCBmaWxlIG5hbWUuCi0gICAgZXdrX3Zp
ZXdfZG93bmxvYWRfam9iX3JlcXVlc3RlZChkb3dubG9hZC0+dmlldygpLCBkb3dubG9hZCk7Ci0K
LSAgICAvLyBEb3dubG9hZFNvdXAgZXhwZWN0cyB0aGUgZGVzdGluYXRpb24gdG8gYmUgYSBVUkwu
Ci0gICAgU3RyaW5nIGRlc3RpbmF0aW9uID0gQVNDSUlMaXRlcmFsKCJmaWxlOi8vIikgKyBTdHJp
bmc6OmZyb21VVEY4KGRvd25sb2FkLT5kZXN0aW5hdGlvbigpKTsKLQotICAgIHJldHVybiBXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhkZXN0aW5hdGlvbi51dGY4KCkuZGF0YSgpKTsKLX0K
LQotc3RhdGljIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdLQ29udGV4dFJlZiwgV0tEb3dubG9h
ZFJlZiB3a0Rvd25sb2FkLCBXS1VSTFJlc3BvbnNlUmVmIHdrUmVzcG9uc2UsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pCi17Ci0gICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQgPSB0b0V3a0Nv
bnRleHQoY2xpZW50SW5mbyktPmRvd25sb2FkSm9iKHRvSW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxv
YWRJRCgpKTsKLSAgICBBU1NFUlQoZG93bmxvYWQpOwotICAgIGRvd25sb2FkLT5zZXRSZXNwb25z
ZShFd2tfVXJsX1Jlc3BvbnNlOjpjcmVhdGUod2tSZXNwb25zZSkpOwotfQotCi1zdGF0aWMgdm9p
ZCBkaWRDcmVhdGVEZXN0aW5hdGlvbihXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3du
bG9hZCwgV0tTdHJpbmdSZWYgLypwYXRoKi8sIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0g
ICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQgPSB0b0V3a0NvbnRleHQoY2xpZW50SW5mbykt
PmRvd25sb2FkSm9iKHRvSW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpKTsKLSAgICBBU1NF
UlQoZG93bmxvYWQpOwotCi0gICAgZG93bmxvYWQtPnNldFN0YXRlKEVXS19ET1dOTE9BRF9KT0Jf
U1RBVEVfRE9XTkxPQURJTkcpOwotfQotCi1zdGF0aWMgdm9pZCBkaWRSZWNlaXZlRGF0YShXS0Nv
bnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgdWludDY0X3QgbGVuZ3RoLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkID0g
dG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLT5kb3dubG9hZEpvYih0b0ltcGwod2tEb3dubG9hZCkt
PmRvd25sb2FkSUQoKSk7Ci0gICAgQVNTRVJUKGRvd25sb2FkKTsKLSAgICBkb3dubG9hZC0+aW5j
cmVtZW50UmVjZWl2ZWREYXRhKGxlbmd0aCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRpZEZhaWwoV0tD
b250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIFdLRXJyb3JSZWYgZXJyb3IsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgdWludDY0X3QgZG93bmxvYWRJZCA9IHRvSW1w
bCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpOwotICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRvd25s
b2FkID0gdG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLT5kb3dubG9hZEpvYihkb3dubG9hZElkKTsK
LSAgICBBU1NFUlQoZG93bmxvYWQpOwotCi0gICAgT3duUHRyPEV3a19FcnJvcj4gZXdrRXJyb3Ig
PSBFd2tfRXJyb3I6OmNyZWF0ZShlcnJvcik7Ci0gICAgZG93bmxvYWQtPnNldFN0YXRlKEVXS19E
T1dOTE9BRF9KT0JfU1RBVEVfRkFJTEVEKTsKLSAgICBld2tfdmlld19kb3dubG9hZF9qb2JfZmFp
bGVkKGRvd25sb2FkLT52aWV3KCksIGRvd25sb2FkLCBld2tFcnJvci5nZXQoKSk7Ci0gICAgdG9F
d2tDb250ZXh0KGNsaWVudEluZm8pLT5yZW1vdmVEb3dubG9hZEpvYihkb3dubG9hZElkKTsKLX0K
LQotc3RhdGljIHZvaWQgZGlkQ2FuY2VsKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rv
d25sb2FkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIHVpbnQ2NF90IGRvd25sb2Fk
SWQgPSB0b0ltcGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQoKTsKLSAgICBFd2tfRG93bmxvYWRf
Sm9iKiBkb3dubG9hZCA9IHRvRXdrQ29udGV4dChjbGllbnRJbmZvKS0+ZG93bmxvYWRKb2IoZG93
bmxvYWRJZCk7Ci0gICAgQVNTRVJUKGRvd25sb2FkKTsKLQotICAgIGRvd25sb2FkLT5zZXRTdGF0
ZShFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0NBTkNFTExFRCk7Ci0gICAgZXdrX3ZpZXdfZG93bmxv
YWRfam9iX2NhbmNlbGxlZChkb3dubG9hZC0+dmlldygpLCBkb3dubG9hZCk7Ci0gICAgdG9Fd2tD
b250ZXh0KGNsaWVudEluZm8pLT5yZW1vdmVEb3dubG9hZEpvYihkb3dubG9hZElkKTsKLX0KLQot
c3RhdGljIHZvaWQgZGlkRmluaXNoKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25s
b2FkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIHVpbnQ2NF90IGRvd25sb2FkSWQg
PSB0b0ltcGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQoKTsKLSAgICBFd2tfRG93bmxvYWRfSm9i
KiBkb3dubG9hZCA9IHRvRXdrQ29udGV4dChjbGllbnRJbmZvKS0+ZG93bmxvYWRKb2IoZG93bmxv
YWRJZCk7Ci0gICAgQVNTRVJUKGRvd25sb2FkKTsKLQotICAgIGRvd25sb2FkLT5zZXRTdGF0ZShF
V0tfRE9XTkxPQURfSk9CX1NUQVRFX0ZJTklTSEVEKTsKLSAgICBld2tfdmlld19kb3dubG9hZF9q
b2JfZmluaXNoZWQoZG93bmxvYWQtPnZpZXcoKSwgZG93bmxvYWQpOwotICAgIHRvRXdrQ29udGV4
dChjbGllbnRJbmZvKS0+cmVtb3ZlRG93bmxvYWRKb2IoZG93bmxvYWRJZCk7Ci19Ci0KLXZvaWQg
ZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50X2F0dGFjaChFd2tfQ29udGV4dCogZXdrQ29udGV4
dCkKLXsKLSAgICBXS0NvbnRleHREb3dubG9hZENsaWVudCB3a0Rvd25sb2FkQ2xpZW50OwotICAg
IG1lbXNldCgmd2tEb3dubG9hZENsaWVudCwgMCwgc2l6ZW9mKFdLQ29udGV4dERvd25sb2FkQ2xp
ZW50KSk7Ci0KLSAgICB3a0Rvd25sb2FkQ2xpZW50LnZlcnNpb24gPSBrV0tDb250ZXh0RG93bmxv
YWRDbGllbnRDdXJyZW50VmVyc2lvbjsKLSAgICB3a0Rvd25sb2FkQ2xpZW50LmNsaWVudEluZm8g
PSBld2tDb250ZXh0OwotICAgIHdrRG93bmxvYWRDbGllbnQuZGlkQ2FuY2VsID0gZGlkQ2FuY2Vs
OwotICAgIHdrRG93bmxvYWRDbGllbnQuZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmls
ZW5hbWUgPSBkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZTsKLSAgICB3a0Rv
d25sb2FkQ2xpZW50LmRpZENyZWF0ZURlc3RpbmF0aW9uID0gZGlkQ3JlYXRlRGVzdGluYXRpb247
Ci0gICAgd2tEb3dubG9hZENsaWVudC5kaWRSZWNlaXZlUmVzcG9uc2UgPSBkaWRSZWNlaXZlUmVz
cG9uc2U7Ci0gICAgd2tEb3dubG9hZENsaWVudC5kaWRSZWNlaXZlRGF0YSA9IGRpZFJlY2VpdmVE
YXRhOwotICAgIHdrRG93bmxvYWRDbGllbnQuZGlkRmFpbCA9IGRpZEZhaWw7Ci0gICAgd2tEb3du
bG9hZENsaWVudC5kaWRGaW5pc2ggPSBkaWRGaW5pc2g7Ci0KLSAgICBXS0NvbnRleHRTZXREb3du
bG9hZENsaWVudChld2tDb250ZXh0LT53a0NvbnRleHQoKSwgJndrRG93bmxvYWRDbGllbnQpOwot
fQotCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0X2Rvd25sb2FkX2NsaWVudF9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnRfcHJpdmF0ZS5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDU2YWFmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9wcml2YXRl
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIGV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9wcml2YXRlX2gKLSNkZWZpbmUgZXdr
X2NvbnRleHRfZG93bmxvYWRfY2xpZW50X3ByaXZhdGVfaAotCi10eXBlZGVmIHN0cnVjdCBFd2tf
Q29udGV4dCBFd2tfQ29udGV4dDsKLQotdm9pZCBld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnRf
YXR0YWNoKEV3a19Db250ZXh0Kik7Ci0KLSNlbmRpZiAvLyBld2tfY29udGV4dF9kb3dubG9hZF9j
bGllbnRfcHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmgKaW5kZXggZTdkZWZkMy4uYTg2YmRlNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3By
aXZhdGUuaApAQCAtMjAsMTEgKzIwLDExIEBACiAjaWZuZGVmIGV3a19jb250ZXh0X3ByaXZhdGVf
aAogI2RlZmluZSBld2tfY29udGV4dF9wcml2YXRlX2gKIAorI2luY2x1ZGUgIkRvd25sb2FkTWFu
YWdlckVmbC5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldLUmV0YWluUHRy
LmgiCiAjaW5jbHVkZSAiZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfcHJpdmF0ZS5oIgogCi1j
bGFzcyBFd2tfRG93bmxvYWRfSm9iOwogY2xhc3MgRXdrX1VybF9TY2hlbWVfUmVxdWVzdDsKIGNs
YXNzIEV3a19Db29raWVfTWFuYWdlcjsKIGNsYXNzIEV3a19GYXZpY29uX0RhdGFiYXNlOwpAQCAt
NzgsOSArNzgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVybFNjaGVtZVJlcXVlc3RSZWNlaXZl
ZChFd2tfVXJsX1NjaGVtZV9SZXF1ZXN0Kik7CiAKLSAgICB2b2lkIGFkZERvd25sb2FkSm9iKEV3
a19Eb3dubG9hZF9Kb2IqKTsKLSAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZEpvYih1aW50
NjRfdCBkb3dubG9hZElkKTsKLSAgICB2b2lkIHJlbW92ZURvd25sb2FkSm9iKHVpbnQ2NF90IGRv
d25sb2FkSWQpOworICAgIFdlYktpdDo6RG93bmxvYWRNYW5hZ2VyRWZsKiBkb3dubG9hZE1hbmFn
ZXIoKSBjb25zdDsKIAogICAgIGNvbnN0IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50JiBoaXN0
b3J5Q2xpZW50KCkgY29uc3QgIHsgcmV0dXJuIG1faGlzdG9yeUNsaWVudDsgfQogICAgIEV3a19D
b250ZXh0X0hpc3RvcnlfQ2xpZW50JiBoaXN0b3J5Q2xpZW50KCkgeyByZXR1cm4gbV9oaXN0b3J5
Q2xpZW50OyB9CkBAIC0xMDEsOSArOTksOCBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShWSUJSQVRJ
T04pCiAgICAgUmVmUHRyPFZpYnJhdGlvblByb3ZpZGVyPiBtX3ZpYnJhdGlvblByb3ZpZGVyOwog
I2VuZGlmCi0gICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPEV3a19Eb3dubG9hZF9Kb2I+ID4g
bV9kb3dubG9hZEpvYnM7Ci0KICAgICBXS1JldGFpblB0cjxXS1NvdXBSZXF1ZXN0TWFuYWdlclJl
Zj4gbV9yZXF1ZXN0TWFuYWdlcjsKKyAgICBPd25QdHI8V2ViS2l0OjpEb3dubG9hZE1hbmFnZXJF
Zmw+IG1fZG93bmxvYWRNYW5hZ2VyOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgY2xh
c3MgRXdrX1VybF9TY2hlbWVfSGFuZGxlcj4gVVJMU2NoZW1lSGFuZGxlck1hcDsKICAgICBVUkxT
Y2hlbWVIYW5kbGVyTWFwIG1fdXJsU2NoZW1lSGFuZGxlcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfam9iX3ByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2JfcHJpdmF0ZS5o
CmluZGV4IGUyNTAxZDEuLjhiYTViYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2JfcHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2JfcHJpdmF0ZS5oCkBAIC0yOCw2
ICsyOCw3IEBACiAKICNpbmNsdWRlICJXS0Jhc2UuaCIKICNpbmNsdWRlICJXS0VpbmFTaGFyZWRT
dHJpbmcuaCIKKyNpbmNsdWRlICJld2tfZG93bmxvYWRfam9iLmgiCiAjaW5jbHVkZSAiZXdrX3Vy
bF9yZXF1ZXN0X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfdXJsX3Jlc3BvbnNlX3ByaXZhdGUu
aCIKICNpbmNsdWRlIDxFdmFzLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL0Rvd25sb2FkTWFuYWdlckVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
ZWZsL0Rvd25sb2FkTWFuYWdlckVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNzJhN2EwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvRG93bmxvYWRNYW5hZ2VyRWZsLmNwcApAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRvd25sb2FkTWFuYWdl
ckVmbC5oIgorCisjaW5jbHVkZSAiRG93bmxvYWRQcm94eS5oIgorI2luY2x1ZGUgIldLQ29udGV4
dC5oIgorI2luY2x1ZGUgIldLU3RyaW5nLmgiCisjaW5jbHVkZSAiZXdrX2NvbnRleHRfcHJpdmF0
ZS5oIgorI2luY2x1ZGUgImV3a19lcnJvcl9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3ZpZXdf
cHJpdmF0ZS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIGlubGluZSBEb3dubG9h
ZE1hbmFnZXJFZmwqIHRvRG93bmxvYWRNYW5hZ2VyRWZsKGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERvd25sb2FkTWFuYWdlckVmbCo+KGNvbnN0X2Nh
c3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKK30KKworV0tTdHJpbmdSZWYgRG93bmxvYWRNYW5hZ2Vy
RWZsOjpkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShXS0NvbnRleHRSZWYs
IFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgV0tTdHJpbmdSZWYgZmlsZW5hbWUsIGJvb2wqIC8q
YWxsb3dPdmVyd3JpdGUqLywgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tfRG93
bmxvYWRfSm9iKiBkb3dubG9hZCA9IHRvRG93bmxvYWRNYW5hZ2VyRWZsKGNsaWVudEluZm8pLT5k
b3dubG9hZEpvYih0b0ltcGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQoKSk7CisgICAgQVNTRVJU
KGRvd25sb2FkKTsKKworICAgIGRvd25sb2FkLT5zZXRTdWdnZXN0ZWRGaWxlTmFtZSh0b0ltcGwo
ZmlsZW5hbWUpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIC8vIFdlIHNlbmQgdGhl
IG5ldyBkb3dubG9hZCBzaWduYWwgb24gdGhlIEV3a19WaWV3IG9ubHkgb25jZSB3ZSBoYXZlIHJl
Y2VpdmVkIHRoZSByZXNwb25zZQorICAgIC8vIGFuZCB0aGUgc3VnZ2VzdGVkIGZpbGUgbmFtZS4K
KyAgICBld2tfdmlld19kb3dubG9hZF9qb2JfcmVxdWVzdGVkKGRvd25sb2FkLT52aWV3KCksIGRv
d25sb2FkKTsKKworICAgIC8vIERvd25sb2FkU291cCBleHBlY3RzIHRoZSBkZXN0aW5hdGlvbiB0
byBiZSBhIFVSTC4KKyAgICBTdHJpbmcgZGVzdGluYXRpb24gPSBBU0NJSUxpdGVyYWwoImZpbGU6
Ly8iKSArIFN0cmluZzo6ZnJvbVVURjgoZG93bmxvYWQtPmRlc3RpbmF0aW9uKCkpOworCisgICAg
cmV0dXJuIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGRlc3RpbmF0aW9uLnV0ZjgoKS5k
YXRhKCkpOworfQorCit2b2lkIERvd25sb2FkTWFuYWdlckVmbDo6ZGlkUmVjZWl2ZVJlc3BvbnNl
KFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBXS1VSTFJlc3BvbnNlUmVm
IHdrUmVzcG9uc2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgRXdrX0Rvd25sb2Fk
X0pvYiogZG93bmxvYWQgPSB0b0Rvd25sb2FkTWFuYWdlckVmbChjbGllbnRJbmZvKS0+ZG93bmxv
YWRKb2IodG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOworICAgIEFTU0VSVChkb3du
bG9hZCk7CisgICAgZG93bmxvYWQtPnNldFJlc3BvbnNlKEV3a19VcmxfUmVzcG9uc2U6OmNyZWF0
ZSh3a1Jlc3BvbnNlKSk7Cit9CisKK3ZvaWQgRG93bmxvYWRNYW5hZ2VyRWZsOjpkaWRDcmVhdGVE
ZXN0aW5hdGlvbihXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgV0tTdHJp
bmdSZWYgLypwYXRoKi8sIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgRXdrX0Rvd25s
b2FkX0pvYiogZG93bmxvYWQgPSB0b0Rvd25sb2FkTWFuYWdlckVmbChjbGllbnRJbmZvKS0+ZG93
bmxvYWRKb2IodG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOworICAgIEFTU0VSVChk
b3dubG9hZCk7CisKKyAgICBkb3dubG9hZC0+c2V0U3RhdGUoRVdLX0RPV05MT0FEX0pPQl9TVEFU
RV9ET1dOTE9BRElORyk7Cit9CisKK3ZvaWQgRG93bmxvYWRNYW5hZ2VyRWZsOjpkaWRSZWNlaXZl
RGF0YShXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgdWludDY0X3QgbGVu
Z3RoLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRv
d25sb2FkID0gdG9Eb3dubG9hZE1hbmFnZXJFZmwoY2xpZW50SW5mbyktPmRvd25sb2FkSm9iKHRv
SW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpKTsKKyAgICBBU1NFUlQoZG93bmxvYWQpOwor
ICAgIGRvd25sb2FkLT5pbmNyZW1lbnRSZWNlaXZlZERhdGEobGVuZ3RoKTsKK30KKwordm9pZCBE
b3dubG9hZE1hbmFnZXJFZmw6OmRpZEZhaWwoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdr
RG93bmxvYWQsIFdLRXJyb3JSZWYgZXJyb3IsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7Cisg
ICAgRG93bmxvYWRNYW5hZ2VyRWZsKiBkb3dubG9hZE1hbmFnZXIgPSB0b0Rvd25sb2FkTWFuYWdl
ckVmbChjbGllbnRJbmZvKTsKKyAgICB1aW50NjRfdCBkb3dubG9hZElkID0gdG9JbXBsKHdrRG93
bmxvYWQpLT5kb3dubG9hZElEKCk7CisgICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQgPSBk
b3dubG9hZE1hbmFnZXItPmRvd25sb2FkSm9iKGRvd25sb2FkSWQpOworICAgIEFTU0VSVChkb3du
bG9hZCk7CisKKyAgICBPd25QdHI8RXdrX0Vycm9yPiBld2tFcnJvciA9IEV3a19FcnJvcjo6Y3Jl
YXRlKGVycm9yKTsKKyAgICBkb3dubG9hZC0+c2V0U3RhdGUoRVdLX0RPV05MT0FEX0pPQl9TVEFU
RV9GQUlMRUQpOworICAgIGV3a192aWV3X2Rvd25sb2FkX2pvYl9mYWlsZWQoZG93bmxvYWQtPnZp
ZXcoKSwgZG93bmxvYWQsIGV3a0Vycm9yLmdldCgpKTsKKyAgICBkb3dubG9hZE1hbmFnZXItPnVu
cmVnaXN0ZXJEb3dubG9hZEpvYihkb3dubG9hZElkKTsKK30KKwordm9pZCBEb3dubG9hZE1hbmFn
ZXJFZmw6OmRpZENhbmNlbChXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBEb3dubG9hZE1hbmFnZXJFZmwqIGRvd25s
b2FkTWFuYWdlciA9IHRvRG93bmxvYWRNYW5hZ2VyRWZsKGNsaWVudEluZm8pOworICAgIHVpbnQ2
NF90IGRvd25sb2FkSWQgPSB0b0ltcGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQoKTsKKyAgICBF
d2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IGRvd25sb2FkTWFuYWdlci0+ZG93bmxvYWRKb2Io
ZG93bmxvYWRJZCk7CisgICAgQVNTRVJUKGRvd25sb2FkKTsKKworICAgIGRvd25sb2FkLT5zZXRT
dGF0ZShFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0NBTkNFTExFRCk7CisgICAgZXdrX3ZpZXdfZG93
bmxvYWRfam9iX2NhbmNlbGxlZChkb3dubG9hZC0+dmlldygpLCBkb3dubG9hZCk7CisgICAgZG93
bmxvYWRNYW5hZ2VyLT51bnJlZ2lzdGVyRG93bmxvYWRKb2IoZG93bmxvYWRJZCk7Cit9CisKK3Zv
aWQgRG93bmxvYWRNYW5hZ2VyRWZsOjpkaWRGaW5pc2goV0tDb250ZXh0UmVmLCBXS0Rvd25sb2Fk
UmVmIHdrRG93bmxvYWQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgRG93bmxvYWRN
YW5hZ2VyRWZsKiBkb3dubG9hZE1hbmFnZXIgPSB0b0Rvd25sb2FkTWFuYWdlckVmbChjbGllbnRJ
bmZvKTsKKyAgICB1aW50NjRfdCBkb3dubG9hZElkID0gdG9JbXBsKHdrRG93bmxvYWQpLT5kb3du
bG9hZElEKCk7CisgICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQgPSBkb3dubG9hZE1hbmFn
ZXItPmRvd25sb2FkSm9iKGRvd25sb2FkSWQpOworICAgIEFTU0VSVChkb3dubG9hZCk7CisKKyAg
ICBkb3dubG9hZC0+c2V0U3RhdGUoRVdLX0RPV05MT0FEX0pPQl9TVEFURV9GSU5JU0hFRCk7Cisg
ICAgZXdrX3ZpZXdfZG93bmxvYWRfam9iX2ZpbmlzaGVkKGRvd25sb2FkLT52aWV3KCksIGRvd25s
b2FkKTsKKyAgICBkb3dubG9hZE1hbmFnZXItPnVucmVnaXN0ZXJEb3dubG9hZEpvYihkb3dubG9h
ZElkKTsKK30KKworRG93bmxvYWRNYW5hZ2VyRWZsOjpEb3dubG9hZE1hbmFnZXJFZmwoRXdrX0Nv
bnRleHQqIGNvbnRleHQpCisgICAgOiBtX2NvbnRleHQoY29udGV4dCkKK3sKKyAgICBXS0NvbnRl
eHREb3dubG9hZENsaWVudCB3a0Rvd25sb2FkQ2xpZW50OworICAgIG1lbXNldCgmd2tEb3dubG9h
ZENsaWVudCwgMCwgc2l6ZW9mKFdLQ29udGV4dERvd25sb2FkQ2xpZW50KSk7CisKKyAgICB3a0Rv
d25sb2FkQ2xpZW50LnZlcnNpb24gPSBrV0tDb250ZXh0RG93bmxvYWRDbGllbnRDdXJyZW50VmVy
c2lvbjsKKyAgICB3a0Rvd25sb2FkQ2xpZW50LmNsaWVudEluZm8gPSB0aGlzOworICAgIHdrRG93
bmxvYWRDbGllbnQuZGlkQ2FuY2VsID0gZGlkQ2FuY2VsOworICAgIHdrRG93bmxvYWRDbGllbnQu
ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUgPSBkZWNpZGVEZXN0aW5hdGlv
bldpdGhTdWdnZXN0ZWRGaWxlbmFtZTsKKyAgICB3a0Rvd25sb2FkQ2xpZW50LmRpZENyZWF0ZURl
c3RpbmF0aW9uID0gZGlkQ3JlYXRlRGVzdGluYXRpb247CisgICAgd2tEb3dubG9hZENsaWVudC5k
aWRSZWNlaXZlUmVzcG9uc2UgPSBkaWRSZWNlaXZlUmVzcG9uc2U7CisgICAgd2tEb3dubG9hZENs
aWVudC5kaWRSZWNlaXZlRGF0YSA9IGRpZFJlY2VpdmVEYXRhOworICAgIHdrRG93bmxvYWRDbGll
bnQuZGlkRmFpbCA9IGRpZEZhaWw7CisgICAgd2tEb3dubG9hZENsaWVudC5kaWRGaW5pc2ggPSBk
aWRGaW5pc2g7CisKKyAgICBXS0NvbnRleHRTZXREb3dubG9hZENsaWVudChjb250ZXh0LT53a0Nv
bnRleHQoKSwgJndrRG93bmxvYWRDbGllbnQpOworfQorCit2b2lkIERvd25sb2FkTWFuYWdlckVm
bDo6cmVnaXN0ZXJEb3dubG9hZChEb3dubG9hZFByb3h5KiBkb3dubG9hZCwgRXZhc19PYmplY3Qq
IHZpZXcpCit7CisgICAgdWludDY0X3QgZG93bmxvYWRJZCA9IGRvd25sb2FkLT5kb3dubG9hZElE
KCk7CisgICAgaWYgKG1fZG93bmxvYWRKb2JzLmNvbnRhaW5zKGRvd25sb2FkSWQpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBSZWZQdHI8RXdrX0Rvd25sb2FkX0pvYj4gZXdrRG93bmxvYWQgPSBF
d2tfRG93bmxvYWRfSm9iOjpjcmVhdGUoZG93bmxvYWQsIHZpZXcpOworICAgIG1fZG93bmxvYWRK
b2JzLmFkZChkb3dubG9hZElkLCBld2tEb3dubG9hZCk7Cit9CisKK0V3a19Eb3dubG9hZF9Kb2Iq
IERvd25sb2FkTWFuYWdlckVmbDo6ZG93bmxvYWRKb2IodWludDY0X3QgaWQpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fZG93bmxvYWRKb2JzLmdldChpZCkuZ2V0KCk7Cit9CisKK3ZvaWQgRG93bmxv
YWRNYW5hZ2VyRWZsOjp1bnJlZ2lzdGVyRG93bmxvYWRKb2IodWludDY0X3QgaWQpCit7CisgICAg
bV9kb3dubG9hZEpvYnMucmVtb3ZlKGlkKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0Rvd25sb2FkTWFuYWdlckVm
bC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Eb3dubG9hZE1hbmFnZXJFZmwuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWZmNDBkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Eb3dubG9hZE1hbmFnZXJFZmwuaApA
QCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0
aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERvd25sb2FkTWFu
YWdlckVmbF9oCisjZGVmaW5lIERvd25sb2FkTWFuYWdlckVmbF9oCisKKyNpbmNsdWRlICJld2tf
ZG93bmxvYWRfam9iX3ByaXZhdGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitjbGFzcyBF
d2tfQ29udGV4dDsKK2NsYXNzIEV3a19Eb3dubG9hZF9Kb2I7CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitjbGFzcyBEb3dubG9hZE1hbmFnZXJFZmwgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
T3duUHRyPERvd25sb2FkTWFuYWdlckVmbD4gY3JlYXRlKEV3a19Db250ZXh0KiBjb250ZXh0KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEb3dubG9hZE1hbmFnZXJFZmwoY29u
dGV4dCkpOworICAgIH0KKworICAgIHZvaWQgcmVnaXN0ZXJEb3dubG9hZChEb3dubG9hZFByb3h5
KiwgRXZhc19PYmplY3QqIHZpZXcpOworCitwcml2YXRlOgorICAgIERvd25sb2FkTWFuYWdlckVm
bChFd2tfQ29udGV4dCopOworCisgICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWRKb2IodWlu
dDY0X3QgaWQpIGNvbnN0OworICAgIHZvaWQgdW5yZWdpc3RlckRvd25sb2FkSm9iKHVpbnQ2NF90
IGlkKTsKKworICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdn
ZXN0ZWRGaWxlbmFtZShXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYsIFdLU3RyaW5nUmVmIGZp
bGVuYW1lLCBib29sKiBhbGxvd092ZXJ3cml0ZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cisg
ICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdLQ29udGV4dFJlZiwgV0tEb3dubG9h
ZFJlZiwgV0tVUkxSZXNwb25zZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3Rh
dGljIHZvaWQgZGlkQ3JlYXRlRGVzdGluYXRpb24oV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVm
LCBXS1N0cmluZ1JlZiBwYXRoLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMg
dm9pZCBkaWRSZWNlaXZlRGF0YShXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYsIHVpbnQ2NF90
IGxlbmd0aCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQgZGlkRmFp
bChXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYsIFdLRXJyb3JSZWYsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIGRpZENhbmNlbChXS0NvbnRleHRSZWYsIFdLRG93
bmxvYWRSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIGRpZEZp
bmlzaChXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
OworCisgICAgRXdrX0NvbnRleHQqIG1fY29udGV4dDsKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBS
ZWZQdHI8RXdrX0Rvd25sb2FkX0pvYj4gPiBtX2Rvd25sb2FkSm9iczsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRG93bmxvYWRNYW5hZ2VyRWZsX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170090</attachid>
            <date>2012-10-23 02:16:23 -0700</date>
            <delta_ts>2012-10-23 03:53:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>100005_downloadClient_cpp.patch</filename>
            <type>text/plain</type>
            <size>26517</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBiYjFkNGYzLi5hZjA1ZDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcg
QEAKKzIwMTItMTAtMjMgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVs
LmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIE1ha2UgYSBkb3dubG9hZCBjbGllbnQgYSBDKysg
Y2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
MDAwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1h
a2UgRUZMJ3MgRG93bmxvYWQgY2xpZW50IGEgQysrIGNsYXNzIGFuZCBtb3ZlCisgICAgICAgIHRo
ZSBpZCA8LT4gZG93bmxvYWQgbWFwcGluZyBmcm9tIEV3a19Db250ZXh0IHRvCisgICAgICAgIERv
d25sb2FkTWFuYWdlckVmbC4KKworICAgICAgICBUaGUgRG93bmxvYWQgY2xpZW50IHdhcyBhbHNv
IG1vdmVkIHRvCisgICAgICAgIFVJUHJvY2Vzcy9lZmwvIGluc3RlYWQgb2YgVUlQcm9jZXNzL0FQ
SS9lZmwvCisgICAgICAgIHNpbmNlIGl0IGlzIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLgor
CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvUGFnZUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6
aGFuZGxlRG93bmxvYWRSZXF1ZXN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tf
Y29udGV4dC5jcHA6CisgICAgICAgIChFd2tfQ29udGV4dDo6RXdrX0NvbnRleHQpOgorICAgICAg
ICAoRXdrX0NvbnRleHQ6OmRvd25sb2FkTWFuYWdlcik6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50X3ByaXZhdGUuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmg6CisgICAgICAg
IChFd2tfQ29udGV4dCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2Fk
X2pvYl9wcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9Eb3dubG9hZE1hbmFnZXJF
ZmwuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2NvbnRleHRfZG93bmxvYWRfY2xpZW50LmNwcC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
IChXZWJLaXQ6OnRvRG93bmxvYWRNYW5hZ2VyRWZsKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxv
YWRNYW5hZ2VyRWZsOjpkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkRvd25sb2FkTWFuYWdlckVmbDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToK
KyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRNYW5hZ2VyRWZsOjpkaWRDcmVhdGVEZXN0aW5hdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkTWFuYWdlckVmbDo6ZGlkUmVjZWl2ZURhdGEp
OgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZE1hbmFnZXJFZmw6OmRpZEZhaWwpOgorICAgICAg
ICAoV2ViS2l0OjpEb3dubG9hZE1hbmFnZXJFZmw6OmRpZENhbmNlbCk6CisgICAgICAgIChXZWJL
aXQ6OkRvd25sb2FkTWFuYWdlckVmbDo6ZGlkRmluaXNoKToKKyAgICAgICAgKFdlYktpdDo6RG93
bmxvYWRNYW5hZ2VyRWZsOjpEb3dubG9hZE1hbmFnZXJFZmwpOgorICAgICAgICAoV2ViS2l0OjpE
b3dubG9hZE1hbmFnZXJFZmw6OnJlZ2lzdGVyRG93bmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpE
b3dubG9hZE1hbmFnZXJFZmw6OmRvd25sb2FkSm9iKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxv
YWRNYW5hZ2VyRWZsOjp1bnJlZ2lzdGVyRG93bmxvYWRKb2IpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9lZmwvRG93bmxvYWRNYW5hZ2VyRWZsLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKERvd25sb2FkTWFuYWdlckVmbCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkTWFu
YWdlckVmbDo6Y3JlYXRlKToKKwogMjAxMi0xMC0yMyAgTWlraGFpbCBQb3pkbnlha292ICA8bWlr
aGFpbC5wb3pkbnlha292QGludGVsLmNvbT4KIAogICAgICAgICBbRUZMXVtXSzJdIFJlZmFjdG9y
IEV3a19Db250ZXh0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFr
ZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDNiMDYyYWUuLjM5Zjgz
OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC01MCw3ICs1MCw2IEBAIExJU1QoQVBQ
RU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2Zvcndh
cmRfbGlzdC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3Rf
aXRlbS5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKLSAgICBVSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnQuY3BwCiAgICAgVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnQuY3BwCiAgICAgVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVudC5jcHAKICAgICBVSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfY29va2llX21hbmFnZXIuY3BwCkBAIC03OCw2ICs3Nyw3IEBAIExJ
U1QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogCiAgICAgVUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdT
dG9yZUNhaXJvLmNwcAogCisgICAgVUlQcm9jZXNzL2VmbC9Eb3dubG9hZE1hbmFnZXJFZmwuY3Bw
CiAgICAgVUlQcm9jZXNzL2VmbC9QYWdlTG9hZENsaWVudEVmbC5jcHAKICAgICBVSVByb2Nlc3Mv
ZWZsL1Jlc291cmNlTG9hZENsaWVudEVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1RleHRDaGVj
a2VyRWZsLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
UGFnZUNsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvUGFn
ZUNsaWVudEltcGwuY3BwCmluZGV4IDA1NGJmY2IuLjg4ZjU3MzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50SW1wbC5jcHAKQEAgLTI4Myw4
ICsyODMsOCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpjb3VudFN0cmluZ01hdGNoZXNJbkN1c3Rv
bVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIEZpbgogCiB2b2lkIFBhZ2VDbGllbnRJbXBs
OjpoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSogZG93bmxvYWQpCiB7Ci0gICAg
UmVmUHRyPEV3a19Eb3dubG9hZF9Kb2I+IGV3a0Rvd25sb2FkID0gRXdrX0Rvd25sb2FkX0pvYjo6
Y3JlYXRlKGRvd25sb2FkLCBtX3ZpZXdXaWRnZXQpOwotICAgIGV3a192aWV3X2NvbnRleHRfZ2V0
KG1fdmlld1dpZGdldCktPmFkZERvd25sb2FkSm9iKGV3a0Rvd25sb2FkLmdldCgpKTsKKyAgICBF
d2tfQ29udGV4dCogY29udGV4dCA9IGV3a192aWV3X2NvbnRleHRfZ2V0KG1fdmlld1dpZGdldCk7
CisgICAgY29udGV4dC0+ZG93bmxvYWRNYW5hZ2VyKCktPnJlZ2lzdGVyRG93bmxvYWQoZG93bmxv
YWQsIG1fdmlld1dpZGdldCk7CiB9CiAKICNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAppbmRl
eCAzMjk5MWM1Li4zNWFhYzVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfY29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2NvbnRleHQuY3BwCkBAIC0zMiwxMyArMzIsMTAgQEAKICNpbmNsdWRlICJXZWJD
b250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViSWNvbkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiV2ViU291
cFJlcXVlc3RNYW5hZ2VyUHJveHkuaCIKLSNpbmNsdWRlICJld2tfY29udGV4dF9kb3dubG9hZF9j
bGllbnRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X3By
aXZhdGUuaCIKICNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdr
X2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVudF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdr
X2Nvb2tpZV9tYW5hZ2VyX3ByaXZhdGUuaCIKLSNpbmNsdWRlICJld2tfZG93bmxvYWRfam9iLmgi
Ci0jaW5jbHVkZSAiZXdrX2Rvd25sb2FkX2pvYl9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX2Zh
dmljb25fZGF0YWJhc2VfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19wcml2YXRlLmgiCiAjaW5j
bHVkZSAiZXdrX3VybF9zY2hlbWVfcmVxdWVzdF9wcml2YXRlLmgiCkBAIC0xMTcsOSArMTE0LDEw
IEBAIEV3a19Db250ZXh0OjpFd2tfQ29udGV4dChXS0NvbnRleHRSZWYgY29udGV4dCkKICAgICB9
CiAjZW5kaWYKIAorICAgIC8vIEluaXRpYWxpemUgV0tDb250ZXh0IGNsaWVudHMuCiAgICAgZXdr
X2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVudF9hdHRhY2godGhpcyk7Ci0gICAgZXdrX2Nv
bnRleHRfZG93bmxvYWRfY2xpZW50X2F0dGFjaCh0aGlzKTsKICAgICBld2tfY29udGV4dF9oaXN0
b3J5X2NsaWVudF9hdHRhY2godGhpcyk7CisgICAgbV9kb3dubG9hZE1hbmFnZXIgPSBEb3dubG9h
ZE1hbmFnZXJFZmw6OmNyZWF0ZSh0aGlzKTsKIH0KIAogRXdrX0NvbnRleHQ6On5Fd2tfQ29udGV4
dCgpCkBAIC0yNTAsMzkgKzI0OCw5IEBAIFdLQ29udGV4dFJlZiBFd2tfQ29udGV4dDo6d2tDb250
ZXh0KCkKICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwogfQogCi0vKioKLSAqIEBpbnRlcm5h
bAotICogUmVnaXN0ZXJzIHRoYXQgYSBuZXcgZG93bmxvYWQgaGFzIGJlZW4gcmVxdWVzdGVkLgot
ICovCi12b2lkIEV3a19Db250ZXh0OjphZGREb3dubG9hZEpvYihFd2tfRG93bmxvYWRfSm9iKiBl
d2tEb3dubG9hZCkKLXsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihld2tEb3dubG9h
ZCk7Ci0KLSAgICB1aW50NjRfdCBkb3dubG9hZElkID0gZXdrRG93bmxvYWQtPmlkKCk7Ci0gICAg
aWYgKG1fZG93bmxvYWRKb2JzLmNvbnRhaW5zKGRvd25sb2FkSWQpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2Rvd25sb2FkSm9icy5hZGQoZG93bmxvYWRJZCwgZXdrRG93bmxvYWQpOwotfQot
Ci0vKioKLSAqIEBpbnRlcm5hbAotICogUmV0dXJucyB0aGUgI0V3a19Eb3dubG9hZF9Kb2Igd2l0
aCB0aGUgZ2l2ZW4gQGEgZG93bmxvYWRJZCwgb3IKLSAqIEBjIDAgaW4gY2FzZSBvZiBmYWlsdXJl
LgotICovCi1Fd2tfRG93bmxvYWRfSm9iKiBFd2tfQ29udGV4dDo6ZG93bmxvYWRKb2IodWludDY0
X3QgZG93bmxvYWRJZCkKLXsKLSAgICByZXR1cm4gbV9kb3dubG9hZEpvYnMuZ2V0KGRvd25sb2Fk
SWQpLmdldCgpOwotfQotCi0vKioKLSAqIEBpbnRlcm5hbAotICogUmVtb3ZlcyB0aGUgI0V3a19E
b3dubG9hZF9Kb2Igd2l0aCB0aGUgZ2l2ZW4gQGEgZG93bmxvYWRJZCBmcm9tIHRoZSBpbnRlcm5h
bAotICogSGFzaE1hcC4KLSAqLwotdm9pZCBFd2tfQ29udGV4dDo6cmVtb3ZlRG93bmxvYWRKb2Io
dWludDY0X3QgZG93bmxvYWRJZCkKK0Rvd25sb2FkTWFuYWdlckVmbCogRXdrX0NvbnRleHQ6OmRv
d25sb2FkTWFuYWdlcigpIGNvbnN0CiB7Ci0gICAgbV9kb3dubG9hZEpvYnMucmVtb3ZlKGRvd25s
b2FkSWQpOworICAgIHJldHVybiBtX2Rvd25sb2FkTWFuYWdlci5nZXQoKTsKIH0KIAogLyoqCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9k
b3dubG9hZF9jbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2NvbnRleHRfZG93bmxvYWRfY2xpZW50LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMmZhODZlOS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTQy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lu
Y2x1ZGUgIkRvd25sb2FkUHJveHkuaCIKLSNpbmNsdWRlICJXS0FQSUNhc3QuaCIKLSNpbmNsdWRl
ICJXS0NvbnRleHQuaCIKLSNpbmNsdWRlICJXS1N0cmluZy5oIgotI2luY2x1ZGUgImV3a19jb250
ZXh0X2Rvd25sb2FkX2NsaWVudF9wcml2YXRlLmgiCi0jaW5jbHVkZSAiZXdrX2NvbnRleHRfcHJp
dmF0ZS5oIgotI2luY2x1ZGUgImV3a19kb3dubG9hZF9qb2IuaCIKLSNpbmNsdWRlICJld2tfZG93
bmxvYWRfam9iX3ByaXZhdGUuaCIKLSNpbmNsdWRlICJld2tfZXJyb3JfcHJpdmF0ZS5oIgotI2lu
Y2x1ZGUgImV3a191cmxfcmVzcG9uc2UuaCIKLSNpbmNsdWRlICJld2tfdXJsX3Jlc3BvbnNlX3By
aXZhdGUuaCIKLSNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCi0jaW5jbHVkZSA8c3RyaW5n
Lmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQotc3RhdGljIGlubGluZSBFd2tfQ29udGV4
dCogdG9Fd2tDb250ZXh0KGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PEV3a19Db250ZXh0Kj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOwot
fQotCi1zdGF0aWMgV0tTdHJpbmdSZWYgZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmls
ZW5hbWUoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIFdLU3RyaW5nUmVm
IGZpbGVuYW1lLCBib29sKiAvKmFsbG93T3ZlcndyaXRlKi8sIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCi17Ci0gICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQgPSB0b0V3a0NvbnRleHQoY2xp
ZW50SW5mbyktPmRvd25sb2FkSm9iKHRvSW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpKTsK
LSAgICBBU1NFUlQoZG93bmxvYWQpOwotCi0gICAgZG93bmxvYWQtPnNldFN1Z2dlc3RlZEZpbGVO
YW1lKHRvSW1wbChmaWxlbmFtZSktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgLy8g
V2Ugc2VuZCB0aGUgbmV3IGRvd25sb2FkIHNpZ25hbCBvbiB0aGUgRXdrX1ZpZXcgb25seSBvbmNl
IHdlIGhhdmUgcmVjZWl2ZWQgdGhlIHJlc3BvbnNlCi0gICAgLy8gYW5kIHRoZSBzdWdnZXN0ZWQg
ZmlsZSBuYW1lLgotICAgIGV3a192aWV3X2Rvd25sb2FkX2pvYl9yZXF1ZXN0ZWQoZG93bmxvYWQt
PnZpZXcoKSwgZG93bmxvYWQpOwotCi0gICAgLy8gRG93bmxvYWRTb3VwIGV4cGVjdHMgdGhlIGRl
c3RpbmF0aW9uIHRvIGJlIGEgVVJMLgotICAgIFN0cmluZyBkZXN0aW5hdGlvbiA9IEFTQ0lJTGl0
ZXJhbCgiZmlsZTovLyIpICsgU3RyaW5nOjpmcm9tVVRGOChkb3dubG9hZC0+ZGVzdGluYXRpb24o
KSk7Ci0KLSAgICByZXR1cm4gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZGVzdGluYXRp
b24udXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShX
S0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgV0tVUkxSZXNwb25zZVJlZiB3
a1Jlc3BvbnNlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIEV3a19Eb3dubG9hZF9K
b2IqIGRvd25sb2FkID0gdG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLT5kb3dubG9hZEpvYih0b0lt
cGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQoKSk7Ci0gICAgQVNTRVJUKGRvd25sb2FkKTsKLSAg
ICBkb3dubG9hZC0+c2V0UmVzcG9uc2UoRXdrX1VybF9SZXNwb25zZTo6Y3JlYXRlKHdrUmVzcG9u
c2UpKTsKLX0KLQotc3RhdGljIHZvaWQgZGlkQ3JlYXRlRGVzdGluYXRpb24oV0tDb250ZXh0UmVm
LCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIFdLU3RyaW5nUmVmIC8qcGF0aCovLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQotewotICAgIEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkID0gdG9F
d2tDb250ZXh0KGNsaWVudEluZm8pLT5kb3dubG9hZEpvYih0b0ltcGwod2tEb3dubG9hZCktPmRv
d25sb2FkSUQoKSk7Ci0gICAgQVNTRVJUKGRvd25sb2FkKTsKLQotICAgIGRvd25sb2FkLT5zZXRT
dGF0ZShFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0RPV05MT0FESU5HKTsKLX0KLQotc3RhdGljIHZv
aWQgZGlkUmVjZWl2ZURhdGEoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQs
IHVpbnQ2NF90IGxlbmd0aCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICBFd2tfRG93
bmxvYWRfSm9iKiBkb3dubG9hZCA9IHRvRXdrQ29udGV4dChjbGllbnRJbmZvKS0+ZG93bmxvYWRK
b2IodG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOwotICAgIEFTU0VSVChkb3dubG9h
ZCk7Ci0gICAgZG93bmxvYWQtPmluY3JlbWVudFJlY2VpdmVkRGF0YShsZW5ndGgpOwotfQotCi1z
dGF0aWMgdm9pZCBkaWRGYWlsKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2Fk
LCBXS0Vycm9yUmVmIGVycm9yLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIHVpbnQ2
NF90IGRvd25sb2FkSWQgPSB0b0ltcGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQoKTsKLSAgICBF
d2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IHRvRXdrQ29udGV4dChjbGllbnRJbmZvKS0+ZG93
bmxvYWRKb2IoZG93bmxvYWRJZCk7Ci0gICAgQVNTRVJUKGRvd25sb2FkKTsKLQotICAgIE93blB0
cjxFd2tfRXJyb3I+IGV3a0Vycm9yID0gRXdrX0Vycm9yOjpjcmVhdGUoZXJyb3IpOwotICAgIGRv
d25sb2FkLT5zZXRTdGF0ZShFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0ZBSUxFRCk7Ci0gICAgZXdr
X3ZpZXdfZG93bmxvYWRfam9iX2ZhaWxlZChkb3dubG9hZC0+dmlldygpLCBkb3dubG9hZCwgZXdr
RXJyb3IuZ2V0KCkpOwotICAgIHRvRXdrQ29udGV4dChjbGllbnRJbmZvKS0+cmVtb3ZlRG93bmxv
YWRKb2IoZG93bmxvYWRJZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRpZENhbmNlbChXS0NvbnRleHRS
ZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsK
LSAgICB1aW50NjRfdCBkb3dubG9hZElkID0gdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElE
KCk7Ci0gICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQgPSB0b0V3a0NvbnRleHQoY2xpZW50
SW5mbyktPmRvd25sb2FkSm9iKGRvd25sb2FkSWQpOwotICAgIEFTU0VSVChkb3dubG9hZCk7Ci0K
LSAgICBkb3dubG9hZC0+c2V0U3RhdGUoRVdLX0RPV05MT0FEX0pPQl9TVEFURV9DQU5DRUxMRUQp
OwotICAgIGV3a192aWV3X2Rvd25sb2FkX2pvYl9jYW5jZWxsZWQoZG93bmxvYWQtPnZpZXcoKSwg
ZG93bmxvYWQpOwotICAgIHRvRXdrQ29udGV4dChjbGllbnRJbmZvKS0+cmVtb3ZlRG93bmxvYWRK
b2IoZG93bmxvYWRJZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRpZEZpbmlzaChXS0NvbnRleHRSZWYs
IFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAg
ICB1aW50NjRfdCBkb3dubG9hZElkID0gdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCk7
Ci0gICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQgPSB0b0V3a0NvbnRleHQoY2xpZW50SW5m
byktPmRvd25sb2FkSm9iKGRvd25sb2FkSWQpOwotICAgIEFTU0VSVChkb3dubG9hZCk7Ci0KLSAg
ICBkb3dubG9hZC0+c2V0U3RhdGUoRVdLX0RPV05MT0FEX0pPQl9TVEFURV9GSU5JU0hFRCk7Ci0g
ICAgZXdrX3ZpZXdfZG93bmxvYWRfam9iX2ZpbmlzaGVkKGRvd25sb2FkLT52aWV3KCksIGRvd25s
b2FkKTsKLSAgICB0b0V3a0NvbnRleHQoY2xpZW50SW5mbyktPnJlbW92ZURvd25sb2FkSm9iKGRv
d25sb2FkSWQpOwotfQotCi12b2lkIGV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9hdHRhY2go
RXdrX0NvbnRleHQqIGV3a0NvbnRleHQpCi17Ci0gICAgV0tDb250ZXh0RG93bmxvYWRDbGllbnQg
d2tEb3dubG9hZENsaWVudDsKLSAgICBtZW1zZXQoJndrRG93bmxvYWRDbGllbnQsIDAsIHNpemVv
ZihXS0NvbnRleHREb3dubG9hZENsaWVudCkpOwotCi0gICAgd2tEb3dubG9hZENsaWVudC52ZXJz
aW9uID0ga1dLQ29udGV4dERvd25sb2FkQ2xpZW50Q3VycmVudFZlcnNpb247Ci0gICAgd2tEb3du
bG9hZENsaWVudC5jbGllbnRJbmZvID0gZXdrQ29udGV4dDsKLSAgICB3a0Rvd25sb2FkQ2xpZW50
LmRpZENhbmNlbCA9IGRpZENhbmNlbDsKLSAgICB3a0Rvd25sb2FkQ2xpZW50LmRlY2lkZURlc3Rp
bmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lID0gZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2Vz
dGVkRmlsZW5hbWU7Ci0gICAgd2tEb3dubG9hZENsaWVudC5kaWRDcmVhdGVEZXN0aW5hdGlvbiA9
IGRpZENyZWF0ZURlc3RpbmF0aW9uOwotICAgIHdrRG93bmxvYWRDbGllbnQuZGlkUmVjZWl2ZVJl
c3BvbnNlID0gZGlkUmVjZWl2ZVJlc3BvbnNlOwotICAgIHdrRG93bmxvYWRDbGllbnQuZGlkUmVj
ZWl2ZURhdGEgPSBkaWRSZWNlaXZlRGF0YTsKLSAgICB3a0Rvd25sb2FkQ2xpZW50LmRpZEZhaWwg
PSBkaWRGYWlsOwotICAgIHdrRG93bmxvYWRDbGllbnQuZGlkRmluaXNoID0gZGlkRmluaXNoOwot
Ci0gICAgV0tDb250ZXh0U2V0RG93bmxvYWRDbGllbnQoZXdrQ29udGV4dC0+d2tDb250ZXh0KCks
ICZ3a0Rvd25sb2FkQ2xpZW50KTsKLX0KLQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnRfcHJpdmF0ZS5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfZG93bmxvYWRfY2xp
ZW50X3ByaXZhdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA1NmFhZi4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9k
b3dubG9hZF9jbGllbnRfcHJpdmF0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnRf
cHJpdmF0ZV9oCi0jZGVmaW5lIGV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9wcml2YXRlX2gK
LQotdHlwZWRlZiBzdHJ1Y3QgRXdrX0NvbnRleHQgRXdrX0NvbnRleHQ7Ci0KLXZvaWQgZXdrX2Nv
bnRleHRfZG93bmxvYWRfY2xpZW50X2F0dGFjaChFd2tfQ29udGV4dCopOwotCi0jZW5kaWYgLy8g
ZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50X3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oCmluZGV4IDQ4
OWYwNTEuLjgzMWRlYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmgKQEAgLTIwLDExICsyMCwxMSBAQAogI2lmbmRl
ZiBld2tfY29udGV4dF9wcml2YXRlX2gKICNkZWZpbmUgZXdrX2NvbnRleHRfcHJpdmF0ZV9oCiAK
KyNpbmNsdWRlICJEb3dubG9hZE1hbmFnZXJFZmwuaCIKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIK
ICNpbmNsdWRlICJXS1JldGFpblB0ci5oIgogI2luY2x1ZGUgImV3a19jb250ZXh0X2hpc3Rvcnlf
Y2xpZW50X3ByaXZhdGUuaCIKIAotY2xhc3MgRXdrX0Rvd25sb2FkX0pvYjsKIGNsYXNzIEV3a19V
cmxfU2NoZW1lX1JlcXVlc3Q7CiBjbGFzcyBFd2tfQ29va2llX01hbmFnZXI7CiBjbGFzcyBFd2tf
RmF2aWNvbl9EYXRhYmFzZTsKQEAgLTcwLDkgKzcwLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCB1
cmxTY2hlbWVSZXF1ZXN0UmVjZWl2ZWQoRXdrX1VybF9TY2hlbWVfUmVxdWVzdCopOwogCi0gICAg
dm9pZCBhZGREb3dubG9hZEpvYihFd2tfRG93bmxvYWRfSm9iKik7Ci0gICAgRXdrX0Rvd25sb2Fk
X0pvYiogZG93bmxvYWRKb2IodWludDY0X3QgZG93bmxvYWRJZCk7Ci0gICAgdm9pZCByZW1vdmVE
b3dubG9hZEpvYih1aW50NjRfdCBkb3dubG9hZElkKTsKKyAgICBXZWJLaXQ6OkRvd25sb2FkTWFu
YWdlckVmbCogZG93bmxvYWRNYW5hZ2VyKCkgY29uc3Q7CiAKICAgICBjb25zdCBFd2tfQ29udGV4
dF9IaXN0b3J5X0NsaWVudCYgaGlzdG9yeUNsaWVudCgpIGNvbnN0ICB7IHJldHVybiBtX2hpc3Rv
cnlDbGllbnQ7IH0KICAgICBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCYgaGlzdG9yeUNsaWVu
dCgpIHsgcmV0dXJuIG1faGlzdG9yeUNsaWVudDsgfQpAQCAtOTMsOSArOTEsOCBAQCBwcml2YXRl
OgogI2lmIEVOQUJMRShWSUJSQVRJT04pCiAgICAgUmVmUHRyPFZpYnJhdGlvblByb3ZpZGVyPiBt
X3ZpYnJhdGlvblByb3ZpZGVyOwogI2VuZGlmCi0gICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRy
PEV3a19Eb3dubG9hZF9Kb2I+ID4gbV9kb3dubG9hZEpvYnM7Ci0KICAgICBXS1JldGFpblB0cjxX
S1NvdXBSZXF1ZXN0TWFuYWdlclJlZj4gbV9yZXF1ZXN0TWFuYWdlcjsKKyAgICBPd25QdHI8V2Vi
S2l0OjpEb3dubG9hZE1hbmFnZXJFZmw+IG1fZG93bmxvYWRNYW5hZ2VyOwogCiAgICAgdHlwZWRl
ZiBIYXNoTWFwPFN0cmluZywgY2xhc3MgRXdrX1VybF9TY2hlbWVfSGFuZGxlcj4gVVJMU2NoZW1l
SGFuZGxlck1hcDsKICAgICBVUkxTY2hlbWVIYW5kbGVyTWFwIG1fdXJsU2NoZW1lSGFuZGxlcnM7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxv
YWRfam9iX3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19k
b3dubG9hZF9qb2JfcHJpdmF0ZS5oCmluZGV4IGUyNTAxZDEuLjhiYTViYzMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2JfcHJpdmF0
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9q
b2JfcHJpdmF0ZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJXS0Jhc2UuaCIKICNp
bmNsdWRlICJXS0VpbmFTaGFyZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJld2tfZG93bmxvYWRfam9i
LmgiCiAjaW5jbHVkZSAiZXdrX3VybF9yZXF1ZXN0X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tf
dXJsX3Jlc3BvbnNlX3ByaXZhdGUuaCIKICNpbmNsdWRlIDxFdmFzLmg+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0Rvd25sb2FkTWFuYWdlckVmbC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0Rvd25sb2FkTWFuYWdlckVmbC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJhN2EwYwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvRG93bmxvYWRNYW5hZ2VyRWZsLmNwcApAQCAtMCww
ICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkRvd25sb2FkTWFuYWdlckVmbC5oIgorCisjaW5jbHVkZSAiRG93bmxvYWRQcm94eS5o
IgorI2luY2x1ZGUgIldLQ29udGV4dC5oIgorI2luY2x1ZGUgIldLU3RyaW5nLmgiCisjaW5jbHVk
ZSAiZXdrX2NvbnRleHRfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a19lcnJvcl9wcml2YXRlLmgi
CisjaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
c3RhdGljIGlubGluZSBEb3dubG9hZE1hbmFnZXJFZmwqIHRvRG93bmxvYWRNYW5hZ2VyRWZsKGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERvd25sb2Fk
TWFuYWdlckVmbCo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKK30KKworV0tTdHJp
bmdSZWYgRG93bmxvYWRNYW5hZ2VyRWZsOjpkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRG
aWxlbmFtZShXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgV0tTdHJpbmdS
ZWYgZmlsZW5hbWUsIGJvb2wqIC8qYWxsb3dPdmVyd3JpdGUqLywgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKK3sKKyAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IHRvRG93bmxvYWRNYW5h
Z2VyRWZsKGNsaWVudEluZm8pLT5kb3dubG9hZEpvYih0b0ltcGwod2tEb3dubG9hZCktPmRvd25s
b2FkSUQoKSk7CisgICAgQVNTRVJUKGRvd25sb2FkKTsKKworICAgIGRvd25sb2FkLT5zZXRTdWdn
ZXN0ZWRGaWxlTmFtZSh0b0ltcGwoZmlsZW5hbWUpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
KworICAgIC8vIFdlIHNlbmQgdGhlIG5ldyBkb3dubG9hZCBzaWduYWwgb24gdGhlIEV3a19WaWV3
IG9ubHkgb25jZSB3ZSBoYXZlIHJlY2VpdmVkIHRoZSByZXNwb25zZQorICAgIC8vIGFuZCB0aGUg
c3VnZ2VzdGVkIGZpbGUgbmFtZS4KKyAgICBld2tfdmlld19kb3dubG9hZF9qb2JfcmVxdWVzdGVk
KGRvd25sb2FkLT52aWV3KCksIGRvd25sb2FkKTsKKworICAgIC8vIERvd25sb2FkU291cCBleHBl
Y3RzIHRoZSBkZXN0aW5hdGlvbiB0byBiZSBhIFVSTC4KKyAgICBTdHJpbmcgZGVzdGluYXRpb24g
PSBBU0NJSUxpdGVyYWwoImZpbGU6Ly8iKSArIFN0cmluZzo6ZnJvbVVURjgoZG93bmxvYWQtPmRl
c3RpbmF0aW9uKCkpOworCisgICAgcmV0dXJuIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KGRlc3RpbmF0aW9uLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIERvd25sb2FkTWFuYWdlckVm
bDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25s
b2FkLCBXS1VSTFJlc3BvbnNlUmVmIHdrUmVzcG9uc2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
Cit7CisgICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQgPSB0b0Rvd25sb2FkTWFuYWdlckVm
bChjbGllbnRJbmZvKS0+ZG93bmxvYWRKb2IodG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElE
KCkpOworICAgIEFTU0VSVChkb3dubG9hZCk7CisgICAgZG93bmxvYWQtPnNldFJlc3BvbnNlKEV3
a19VcmxfUmVzcG9uc2U6OmNyZWF0ZSh3a1Jlc3BvbnNlKSk7Cit9CisKK3ZvaWQgRG93bmxvYWRN
YW5hZ2VyRWZsOjpkaWRDcmVhdGVEZXN0aW5hdGlvbihXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRS
ZWYgd2tEb3dubG9hZCwgV0tTdHJpbmdSZWYgLypwYXRoKi8sIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCit7CisgICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQgPSB0b0Rvd25sb2FkTWFuYWdl
ckVmbChjbGllbnRJbmZvKS0+ZG93bmxvYWRKb2IodG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9h
ZElEKCkpOworICAgIEFTU0VSVChkb3dubG9hZCk7CisKKyAgICBkb3dubG9hZC0+c2V0U3RhdGUo
RVdLX0RPV05MT0FEX0pPQl9TVEFURV9ET1dOTE9BRElORyk7Cit9CisKK3ZvaWQgRG93bmxvYWRN
YW5hZ2VyRWZsOjpkaWRSZWNlaXZlRGF0YShXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tE
b3dubG9hZCwgdWludDY0X3QgbGVuZ3RoLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAg
IEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkID0gdG9Eb3dubG9hZE1hbmFnZXJFZmwoY2xpZW50
SW5mbyktPmRvd25sb2FkSm9iKHRvSW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpKTsKKyAg
ICBBU1NFUlQoZG93bmxvYWQpOworICAgIGRvd25sb2FkLT5pbmNyZW1lbnRSZWNlaXZlZERhdGEo
bGVuZ3RoKTsKK30KKwordm9pZCBEb3dubG9hZE1hbmFnZXJFZmw6OmRpZEZhaWwoV0tDb250ZXh0
UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIFdLRXJyb3JSZWYgZXJyb3IsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCit7CisgICAgRG93bmxvYWRNYW5hZ2VyRWZsKiBkb3dubG9hZE1hbmFn
ZXIgPSB0b0Rvd25sb2FkTWFuYWdlckVmbChjbGllbnRJbmZvKTsKKyAgICB1aW50NjRfdCBkb3du
bG9hZElkID0gdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCk7CisgICAgRXdrX0Rvd25s
b2FkX0pvYiogZG93bmxvYWQgPSBkb3dubG9hZE1hbmFnZXItPmRvd25sb2FkSm9iKGRvd25sb2Fk
SWQpOworICAgIEFTU0VSVChkb3dubG9hZCk7CisKKyAgICBPd25QdHI8RXdrX0Vycm9yPiBld2tF
cnJvciA9IEV3a19FcnJvcjo6Y3JlYXRlKGVycm9yKTsKKyAgICBkb3dubG9hZC0+c2V0U3RhdGUo
RVdLX0RPV05MT0FEX0pPQl9TVEFURV9GQUlMRUQpOworICAgIGV3a192aWV3X2Rvd25sb2FkX2pv
Yl9mYWlsZWQoZG93bmxvYWQtPnZpZXcoKSwgZG93bmxvYWQsIGV3a0Vycm9yLmdldCgpKTsKKyAg
ICBkb3dubG9hZE1hbmFnZXItPnVucmVnaXN0ZXJEb3dubG9hZEpvYihkb3dubG9hZElkKTsKK30K
Kwordm9pZCBEb3dubG9hZE1hbmFnZXJFZmw6OmRpZENhbmNlbChXS0NvbnRleHRSZWYsIFdLRG93
bmxvYWRSZWYgd2tEb3dubG9hZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBEb3du
bG9hZE1hbmFnZXJFZmwqIGRvd25sb2FkTWFuYWdlciA9IHRvRG93bmxvYWRNYW5hZ2VyRWZsKGNs
aWVudEluZm8pOworICAgIHVpbnQ2NF90IGRvd25sb2FkSWQgPSB0b0ltcGwod2tEb3dubG9hZCkt
PmRvd25sb2FkSUQoKTsKKyAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IGRvd25sb2Fk
TWFuYWdlci0+ZG93bmxvYWRKb2IoZG93bmxvYWRJZCk7CisgICAgQVNTRVJUKGRvd25sb2FkKTsK
KworICAgIGRvd25sb2FkLT5zZXRTdGF0ZShFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0NBTkNFTExF
RCk7CisgICAgZXdrX3ZpZXdfZG93bmxvYWRfam9iX2NhbmNlbGxlZChkb3dubG9hZC0+dmlldygp
LCBkb3dubG9hZCk7CisgICAgZG93bmxvYWRNYW5hZ2VyLT51bnJlZ2lzdGVyRG93bmxvYWRKb2Io
ZG93bmxvYWRJZCk7Cit9CisKK3ZvaWQgRG93bmxvYWRNYW5hZ2VyRWZsOjpkaWRGaW5pc2goV0tD
b250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCit7CisgICAgRG93bmxvYWRNYW5hZ2VyRWZsKiBkb3dubG9hZE1hbmFnZXIgPSB0b0Rvd25s
b2FkTWFuYWdlckVmbChjbGllbnRJbmZvKTsKKyAgICB1aW50NjRfdCBkb3dubG9hZElkID0gdG9J
bXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCk7CisgICAgRXdrX0Rvd25sb2FkX0pvYiogZG93
bmxvYWQgPSBkb3dubG9hZE1hbmFnZXItPmRvd25sb2FkSm9iKGRvd25sb2FkSWQpOworICAgIEFT
U0VSVChkb3dubG9hZCk7CisKKyAgICBkb3dubG9hZC0+c2V0U3RhdGUoRVdLX0RPV05MT0FEX0pP
Ql9TVEFURV9GSU5JU0hFRCk7CisgICAgZXdrX3ZpZXdfZG93bmxvYWRfam9iX2ZpbmlzaGVkKGRv
d25sb2FkLT52aWV3KCksIGRvd25sb2FkKTsKKyAgICBkb3dubG9hZE1hbmFnZXItPnVucmVnaXN0
ZXJEb3dubG9hZEpvYihkb3dubG9hZElkKTsKK30KKworRG93bmxvYWRNYW5hZ2VyRWZsOjpEb3du
bG9hZE1hbmFnZXJFZmwoRXdrX0NvbnRleHQqIGNvbnRleHQpCisgICAgOiBtX2NvbnRleHQoY29u
dGV4dCkKK3sKKyAgICBXS0NvbnRleHREb3dubG9hZENsaWVudCB3a0Rvd25sb2FkQ2xpZW50Owor
ICAgIG1lbXNldCgmd2tEb3dubG9hZENsaWVudCwgMCwgc2l6ZW9mKFdLQ29udGV4dERvd25sb2Fk
Q2xpZW50KSk7CisKKyAgICB3a0Rvd25sb2FkQ2xpZW50LnZlcnNpb24gPSBrV0tDb250ZXh0RG93
bmxvYWRDbGllbnRDdXJyZW50VmVyc2lvbjsKKyAgICB3a0Rvd25sb2FkQ2xpZW50LmNsaWVudElu
Zm8gPSB0aGlzOworICAgIHdrRG93bmxvYWRDbGllbnQuZGlkQ2FuY2VsID0gZGlkQ2FuY2VsOwor
ICAgIHdrRG93bmxvYWRDbGllbnQuZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5h
bWUgPSBkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZTsKKyAgICB3a0Rvd25s
b2FkQ2xpZW50LmRpZENyZWF0ZURlc3RpbmF0aW9uID0gZGlkQ3JlYXRlRGVzdGluYXRpb247Cisg
ICAgd2tEb3dubG9hZENsaWVudC5kaWRSZWNlaXZlUmVzcG9uc2UgPSBkaWRSZWNlaXZlUmVzcG9u
c2U7CisgICAgd2tEb3dubG9hZENsaWVudC5kaWRSZWNlaXZlRGF0YSA9IGRpZFJlY2VpdmVEYXRh
OworICAgIHdrRG93bmxvYWRDbGllbnQuZGlkRmFpbCA9IGRpZEZhaWw7CisgICAgd2tEb3dubG9h
ZENsaWVudC5kaWRGaW5pc2ggPSBkaWRGaW5pc2g7CisKKyAgICBXS0NvbnRleHRTZXREb3dubG9h
ZENsaWVudChjb250ZXh0LT53a0NvbnRleHQoKSwgJndrRG93bmxvYWRDbGllbnQpOworfQorCit2
b2lkIERvd25sb2FkTWFuYWdlckVmbDo6cmVnaXN0ZXJEb3dubG9hZChEb3dubG9hZFByb3h5KiBk
b3dubG9hZCwgRXZhc19PYmplY3QqIHZpZXcpCit7CisgICAgdWludDY0X3QgZG93bmxvYWRJZCA9
IGRvd25sb2FkLT5kb3dubG9hZElEKCk7CisgICAgaWYgKG1fZG93bmxvYWRKb2JzLmNvbnRhaW5z
KGRvd25sb2FkSWQpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8RXdrX0Rvd25sb2Fk
X0pvYj4gZXdrRG93bmxvYWQgPSBFd2tfRG93bmxvYWRfSm9iOjpjcmVhdGUoZG93bmxvYWQsIHZp
ZXcpOworICAgIG1fZG93bmxvYWRKb2JzLmFkZChkb3dubG9hZElkLCBld2tEb3dubG9hZCk7Cit9
CisKK0V3a19Eb3dubG9hZF9Kb2IqIERvd25sb2FkTWFuYWdlckVmbDo6ZG93bmxvYWRKb2IodWlu
dDY0X3QgaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZG93bmxvYWRKb2JzLmdldChpZCkuZ2V0
KCk7Cit9CisKK3ZvaWQgRG93bmxvYWRNYW5hZ2VyRWZsOjp1bnJlZ2lzdGVyRG93bmxvYWRKb2Io
dWludDY0X3QgaWQpCit7CisgICAgbV9kb3dubG9hZEpvYnMucmVtb3ZlKGlkKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
ZWZsL0Rvd25sb2FkTWFuYWdlckVmbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9E
b3dubG9hZE1hbmFnZXJFZmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5j
MWZmNDBkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9E
b3dubG9hZE1hbmFnZXJFZmwuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIERvd25sb2FkTWFuYWdlckVmbF9oCisjZGVmaW5lIERvd25sb2FkTWFuYWdlckVm
bF9oCisKKyNpbmNsdWRlICJld2tfZG93bmxvYWRfam9iX3ByaXZhdGUuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorCitjbGFzcyBFd2tfQ29udGV4dDsKK2NsYXNzIEV3a19Eb3dubG9hZF9Kb2I7
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBEb3dubG9hZE1hbmFnZXJFZmwgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPERvd25sb2FkTWFuYWdlckVmbD4gY3JlYXRlKEV3
a19Db250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBE
b3dubG9hZE1hbmFnZXJFZmwoY29udGV4dCkpOworICAgIH0KKworICAgIHZvaWQgcmVnaXN0ZXJE
b3dubG9hZChEb3dubG9hZFByb3h5KiwgRXZhc19PYmplY3QqIHZpZXcpOworCitwcml2YXRlOgor
ICAgIERvd25sb2FkTWFuYWdlckVmbChFd2tfQ29udGV4dCopOworCisgICAgRXdrX0Rvd25sb2Fk
X0pvYiogZG93bmxvYWRKb2IodWludDY0X3QgaWQpIGNvbnN0OworICAgIHZvaWQgdW5yZWdpc3Rl
ckRvd25sb2FkSm9iKHVpbnQ2NF90IGlkKTsKKworICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBkZWNp
ZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShXS0NvbnRleHRSZWYsIFdLRG93bmxv
YWRSZWYsIFdLU3RyaW5nUmVmIGZpbGVuYW1lLCBib29sKiBhbGxvd092ZXJ3cml0ZSwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdL
Q29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiwgV0tVUkxSZXNwb25zZVJlZiwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQgZGlkQ3JlYXRlRGVzdGluYXRpb24oV0tDb250
ZXh0UmVmLCBXS0Rvd25sb2FkUmVmLCBXS1N0cmluZ1JlZiBwYXRoLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlRGF0YShXS0NvbnRleHRSZWYsIFdL
RG93bmxvYWRSZWYsIHVpbnQ2NF90IGxlbmd0aCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cisg
ICAgc3RhdGljIHZvaWQgZGlkRmFpbChXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYsIFdLRXJy
b3JSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIGRpZENhbmNl
bChXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwor
ICAgIHN0YXRpYyB2b2lkIGRpZEZpbmlzaChXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pOworCisgICAgRXdrX0NvbnRleHQqIG1fY29udGV4dDsKKyAg
ICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8RXdrX0Rvd25sb2FkX0pvYj4gPiBtX2Rvd25sb2Fk
Sm9iczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRG93bmxvYWRN
YW5hZ2VyRWZsX2gK
</data>

          </attachment>
      

    </bug>

</bugzilla>