<?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>85978</bug_id>
          
          <creation_ts>2012-05-09 03:44:01 -0700</creation_ts>
          <short_desc>[Forms] Move step related methods to InputType class from HTMLInputElement class</short_desc>
          <delta_ts>2012-05-10 00:22:01 -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>Forms</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>
          
          <blocked>82034</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>yosin</reporter>
          <assigned_to>yosin</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>619348</commentid>
    <comment_count>0</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-05-09 03:44:01 -0700</bug_when>
    <thetext>This is part of re-factoring of HTMLInputElement class for Steppable input type.

getAllowedValueStep and stepDown/stepUp/stepUpFromRendere methods of HTMLInputElement are used only by DateTime/Number/Range input type. For ease of maintenance, e.g. change of implementation should not change HTMLInputElement.cpp for reducing merge conflict, these method should be in files of input type implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>619349</commentid>
    <comment_count>1</comment_count>
      <attachid>140905</attachid>
    <who name="">yosin</who>
    <bug_when>2012-05-09 03:46:34 -0700</bug_when>
    <thetext>Created attachment 140905
Patch 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620200</commentid>
    <comment_count>2</comment_count>
      <attachid>140905</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-05-09 20:32:44 -0700</bug_when>
    <thetext>Comment on attachment 140905
Patch 1

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

&gt; Source/WebCore/html/InputType.cpp:789
&gt; +void InputType::applyStep(double count, AnyStepHandling anyStepHandling, TextFieldEventBehavior eventBehavior, ExceptionCode&amp; ec)

The code you copied was written by
Google employees in 2009, 2010, 2011, 2012, and
Apple employees in 2011.

You need to update the copyright notice of this file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620207</commentid>
    <comment_count>3</comment_count>
      <attachid>141077</attachid>
    <who name="">yosin</who>
    <bug_when>2012-05-09 20:53:53 -0700</bug_when>
    <thetext>Created attachment 141077
Patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620216</commentid>
    <comment_count>4</comment_count>
      <attachid>141077</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-05-09 21:00:28 -0700</bug_when>
    <thetext>Comment on attachment 141077
Patch 2

Looks good</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620217</commentid>
    <comment_count>5</comment_count>
      <attachid>141077</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-09 21:03:33 -0700</bug_when>
    <thetext>Comment on attachment 141077
Patch 2

Attachment 141077 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12656866</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620241</commentid>
    <comment_count>6</comment_count>
      <attachid>141084</attachid>
    <who name="">yosin</who>
    <bug_when>2012-05-09 21:54:17 -0700</bug_when>
    <thetext>Created attachment 141084
Patch 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620270</commentid>
    <comment_count>7</comment_count>
      <attachid>141084</attachid>
    <who name="">yosin</who>
    <bug_when>2012-05-09 23:10:21 -0700</bug_when>
    <thetext>Comment on attachment 141084
Patch 3

Sorry, previous patch contains wrong thing in HTMLInputElement.cpp. I failed to rebase then removing some newly added methods, isWeekField and so on.

Failure of CR-Linux-EWS isn&apos;t related to this patch, TIMEOUT, and unrelated tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620315</commentid>
    <comment_count>8</comment_count>
      <attachid>141084</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-10 00:21:49 -0700</bug_when>
    <thetext>Comment on attachment 141084
Patch 3

Clearing flags on attachment: 141084

Committed r116615: &lt;http://trac.webkit.org/changeset/116615&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620316</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-10 00:22:01 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140905</attachid>
            <date>2012-05-09 03:46:34 -0700</date>
            <delta_ts>2012-05-09 20:53:48 -0700</delta_ts>
            <desc>Patch 1</desc>
            <filename>bug-85978-20120509194632.patch</filename>
            <type>text/plain</type>
            <size>24828</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2NDkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWRjNDBlMGExZDM2MDEy
ZDYwY2UxODAyNmI1MzBjN2UxM2RlOGI5Ni4uYzJjODdkMzg0ZDQyNDcxZmU2Y2FhNjNiYjBkY2Fl
ZWYzM2IyMzlkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTA1LTA5ICBZb3No
aWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Zvcm1zXSBNb3Zl
IHN0ZXAgcmVsYXRlZCBtZXRob2RzIHRvIElucHV0VHlwZSBjbGFzcyBmcm9tIEhUTUxJbnB1dEVs
ZW1lbnQgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTg1OTc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBpcyBwYXJ0IG9mIHJlLWZhY3RvcmluZyBvZiBIVE1MSW5wdXRFbGVtZW50
LmNwcCBmb3IgbnVtZXJpYyBpbnB1dCB0eXBlLgorICAgICAgICBJbiB0aGlzIHBhdGNoLCB3ZSBt
b3ZlIGltcGxlbWVudGF0aW9uIG9mIGdldEFsbG93ZWRWYWx1ZVN0ZXAgYW5kIHN0ZXBVcC9zdGVw
VXBGcm9tUmVuZGVyZXIKKyAgICAgICAgdG8gSW5wdXRUeXBlIGNsYXNzIGJlY2F1c2Ugb2YgdGhl
c2UgYXJlIGZvciBEYXRlVGltZS9OdW1iZXIvUmFuZ2UuCisKKyAgICAgICAgRm9sbG93aW5nIHBh
dGNoZXMgd2lsbCBjaGFuZ2UgaW1wbGVtZW50YXRpb24gb2YgZ2V0QWxsb3dlZFZhbHVlU3RlcCB0
byB1c2UgU3RlcFJhbmdlIGFuZAorICAgICAgICByZW1vdmUgc3RlcCByZWxhdGVkIG1ldGhvZHMs
IGRlZmF1bHRTdGVwLCBzdGVwU2NhbGVGYWN0b3IsIGFuZCBzbyBvbi4KKworICAgICAgICBObyBu
ZXcgdGVzdHMuIFRoaXMgcGF0Y2ggc2hvdWxkIG5vdCBjaGFuZ2UgYmVoYXZpb3IuCisKKyAgICAg
ICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpnZXRBbGxvd2VkVmFsdWVTdGVwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnN0ZXBVcCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzdGVwRG93bik6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50OjpzdGVwVXBGcm9tUmVuZGVyZXIpOgorICAgICAgICAqIGh0bWwvSFRNTElu
cHV0RWxlbWVudC5oOgorICAgICAgICAoSFRNTElucHV0RWxlbWVudCk6CisgICAgICAgICogaHRt
bC9JbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjphcHBseVN0ZXAp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmFsaWdu
VmFsdWVGb3JTdGVwKToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6Z2V0QWxsb3dlZFZh
bHVlU3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmdldEFsbG93ZWRWYWx1ZVN0
ZXBXaXRoRGVjaW1hbFBsYWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OnN0ZXBV
cCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OnN0ZXBVcEZyb21SZW5kZXJlcik6Cisg
ICAgICAgICogaHRtbC9JbnB1dFR5cGUuaDoKKyAgICAgICAgKElucHV0VHlwZSk6CisKIDIwMTIt
MDUtMDggIEphc29uIExpdSAgPGphc29uLmxpdUB0b3JjaG1vYmlsZS5jb20uY24+CiAKICAgICAg
ICAgW0JsYWNrQmVycnldIEF1dGggY3JlZGVudGlhbHMgc2V0IGluIHByaXZhdGUgbW9kZSBhcmUg
cmV1c2VkIGluIHB1YmxpYyBtb2RlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MSW5wdXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVu
dC5jcHAKaW5kZXggZmJiYWIzODljMjIyNzI4ZmYyMmZhZGYxMTdiZjA4NzFlMTExZDViZC4uZDJi
ZDVkOGExNGEyNjU0NzBjMTAxMzgwOTcwNGJjNTc5ZDZlODc4YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC0yOTYsMTM4ICsyOTYsMjAgQEAgU3RyaW5nIEhU
TUxJbnB1dEVsZW1lbnQ6OnZhbHVlTWlzc2luZ1RleHQoKSBjb25zdAogICAgIHJldHVybiBtX2lu
cHV0VHlwZS0+dmFsdWVNaXNzaW5nVGV4dCgpOwogfQogCisvLyBGSVhNRTogV2Ugc2hvdWxkIHVz
ZSBTdGVwUmFuZ2UgZm9yIGdldHRpbmcgbWluaXVtL21heGltdW0vc3RlcC4KIGJvb2wgSFRNTElu
cHV0RWxlbWVudDo6Z2V0QWxsb3dlZFZhbHVlU3RlcChkb3VibGUqIHN0ZXApIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGdldEFsbG93ZWRWYWx1ZVN0ZXBXaXRoRGVjaW1hbFBsYWNlcyhSZWplY3RBbnks
IHN0ZXAsIDApOwotfQotCi1ib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmdldEFsbG93ZWRWYWx1ZVN0
ZXBXaXRoRGVjaW1hbFBsYWNlcyhBbnlTdGVwSGFuZGxpbmcgYW55U3RlcEhhbmRsaW5nLCBkb3Vi
bGUqIHN0ZXAsIHVuc2lnbmVkKiBkZWNpbWFsUGxhY2VzKSBjb25zdAotewotICAgIEFTU0VSVChz
dGVwKTsKLSAgICBkb3VibGUgZGVmYXVsdFN0ZXAgPSBtX2lucHV0VHlwZS0+ZGVmYXVsdFN0ZXAo
KTsKLSAgICBkb3VibGUgc3RlcFNjYWxlRmFjdG9yID0gbV9pbnB1dFR5cGUtPnN0ZXBTY2FsZUZh
Y3RvcigpOwotICAgIGlmICghaXNmaW5pdGUoZGVmYXVsdFN0ZXApIHx8ICFpc2Zpbml0ZShzdGVw
U2NhbGVGYWN0b3IpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBzdGVwU3RyaW5nID0gZmFzdEdldEF0dHJpYnV0ZShzdGVwQXR0cik7Ci0gICAgaWYgKHN0
ZXBTdHJpbmcuaXNFbXB0eSgpKSB7Ci0gICAgICAgICpzdGVwID0gZGVmYXVsdFN0ZXAgKiBzdGVw
U2NhbGVGYWN0b3I7Ci0gICAgICAgIGlmIChkZWNpbWFsUGxhY2VzKQotICAgICAgICAgICAgKmRl
Y2ltYWxQbGFjZXMgPSAwOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2Uoc3RlcFN0cmluZywgImFueSIpKSB7Ci0gICAgICAgIHN3aXRjaCAo
YW55U3RlcEhhbmRsaW5nKSB7Ci0gICAgICAgIGNhc2UgUmVqZWN0QW55OgotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBjYXNlIEFueUlzRGVmYXVsdFN0ZXA6Ci0gICAgICAgICAg
ICAqc3RlcCA9IGRlZmF1bHRTdGVwICogc3RlcFNjYWxlRmFjdG9yOwotICAgICAgICAgICAgaWYg
KGRlY2ltYWxQbGFjZXMpCi0gICAgICAgICAgICAgICAgKmRlY2ltYWxQbGFjZXMgPSAwOwotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGRvdWJsZSBwYXJzZWQ7
Ci0gICAgaWYgKCFkZWNpbWFsUGxhY2VzKSB7Ci0gICAgICAgIGlmICghcGFyc2VUb0RvdWJsZUZv
ck51bWJlclR5cGUoc3RlcFN0cmluZywgJnBhcnNlZCkgfHwgcGFyc2VkIDw9IDAuMCkgewotICAg
ICAgICAgICAgKnN0ZXAgPSBkZWZhdWx0U3RlcCAqIHN0ZXBTY2FsZUZhY3RvcjsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFw
YXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZVdpdGhEZWNpbWFsUGxhY2VzKHN0ZXBTdHJpbmcsICZw
YXJzZWQsIGRlY2ltYWxQbGFjZXMpIHx8IHBhcnNlZCA8PSAwLjApIHsKLSAgICAgICAgICAgICpz
dGVwID0gZGVmYXVsdFN0ZXAgKiBzdGVwU2NhbGVGYWN0b3I7Ci0gICAgICAgICAgICAqZGVjaW1h
bFBsYWNlcyA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0K
LSAgICAvLyBGb3IgZGF0ZSwgbW9udGgsIHdlZWssIHRoZSBwYXJzZWQgdmFsdWUgc2hvdWxkIGJl
IGFuIGludGVnZXIgZm9yIHNvbWUgdHlwZXMuCi0gICAgaWYgKG1faW5wdXRUeXBlLT5wYXJzZWRT
dGVwVmFsdWVTaG91bGRCZUludGVnZXIoKSkKLSAgICAgICAgcGFyc2VkID0gbWF4KHJvdW5kKHBh
cnNlZCksIDEuMCk7Ci0gICAgZG91YmxlIHJlc3VsdCA9IHBhcnNlZCAqIHN0ZXBTY2FsZUZhY3Rv
cjsKLSAgICAvLyBGb3IgZGF0ZXRpbWUsIGRhdGV0aW1lLWxvY2FsLCB0aW1lLCB0aGUgcmVzdWx0
IHNob3VsZCBiZSBhbiBpbnRlZ2VyLgotICAgIGlmIChtX2lucHV0VHlwZS0+c2NhbGVkU3RlcFZh
bHVlU2hvdWxkQmVJbnRlZ2VyKCkpCi0gICAgICAgIHJlc3VsdCA9IG1heChyb3VuZChyZXN1bHQp
LCAxLjApOwotICAgIEFTU0VSVChyZXN1bHQgPiAwKTsKLSAgICAqc3RlcCA9IHJlc3VsdDsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBIVE1MSW5wdXRFbGVtZW50OjphcHBseVN0ZXAoZG91
YmxlIGNvdW50LCBBbnlTdGVwSGFuZGxpbmcgYW55U3RlcEhhbmRsaW5nLCBUZXh0RmllbGRFdmVu
dEJlaGF2aW9yIGV2ZW50QmVoYXZpb3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGRvdWJs
ZSBzdGVwOwotICAgIHVuc2lnbmVkIHN0ZXBEZWNpbWFsUGxhY2VzLCBjdXJyZW50RGVjaW1hbFBs
YWNlczsKLSAgICBpZiAoIWdldEFsbG93ZWRWYWx1ZVN0ZXBXaXRoRGVjaW1hbFBsYWNlcyhhbnlT
dGVwSGFuZGxpbmcsICZzdGVwLCAmc3RlcERlY2ltYWxQbGFjZXMpKSB7Ci0gICAgICAgIGVjID0g
SU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjb25zdCBk
b3VibGUgbmFuID0gbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgZG91
YmxlIGN1cnJlbnQgPSBtX2lucHV0VHlwZS0+cGFyc2VUb0RvdWJsZVdpdGhEZWNpbWFsUGxhY2Vz
KHZhbHVlKCksIG5hbiwgJmN1cnJlbnREZWNpbWFsUGxhY2VzKTsKLSAgICBpZiAoIWlzZmluaXRl
KGN1cnJlbnQpKSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgZG91YmxlIG5ld1ZhbHVlID0gY3VycmVudCArIHN0ZXAgKiBjb3Vu
dDsKLSAgICBpZiAoaXNpbmYobmV3VmFsdWUpKSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9TVEFU
RV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkb3VibGUgYWNjZXB0YWJsZUVy
cm9yID0gbV9pbnB1dFR5cGUtPmFjY2VwdGFibGVFcnJvcihzdGVwKTsKLSAgICBpZiAobmV3VmFs
dWUgLSBtX2lucHV0VHlwZS0+bWluaW11bSgpIDwgLWFjY2VwdGFibGVFcnJvcikgewotICAgICAg
ICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlm
IChuZXdWYWx1ZSA8IG1faW5wdXRUeXBlLT5taW5pbXVtKCkpCi0gICAgICAgIG5ld1ZhbHVlID0g
bV9pbnB1dFR5cGUtPm1pbmltdW0oKTsKLQotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc3RlcFN0
cmluZyA9IGZhc3RHZXRBdHRyaWJ1dGUoc3RlcEF0dHIpOwotICAgIGlmICghZXF1YWxJZ25vcmlu
Z0Nhc2Uoc3RlcFN0cmluZywgImFueSIpKQotICAgICAgICBuZXdWYWx1ZSA9IGFsaWduVmFsdWVG
b3JTdGVwKG5ld1ZhbHVlLCBzdGVwLCBjdXJyZW50RGVjaW1hbFBsYWNlcywgc3RlcERlY2ltYWxQ
bGFjZXMpOwotCi0gICAgaWYgKG5ld1ZhbHVlIC0gbV9pbnB1dFR5cGUtPm1heGltdW0oKSA+IGFj
Y2VwdGFibGVFcnJvcikgewotICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGlmIChuZXdWYWx1ZSA+IG1faW5wdXRUeXBlLT5tYXhpbXVt
KCkpCi0gICAgICAgIG5ld1ZhbHVlID0gbV9pbnB1dFR5cGUtPm1heGltdW0oKTsKLQotICAgIHNl
dFZhbHVlQXNOdW1iZXIobmV3VmFsdWUsIGVjLCBldmVudEJlaGF2aW9yKTsKLQotICAgIGlmIChB
WE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQotICAgICAgICAgZG9jdW1lbnQo
KS0+YXhPYmplY3RDYWNoZSgpLT5wb3N0Tm90aWZpY2F0aW9uKHJlbmRlcmVyKCksIEFYT2JqZWN0
Q2FjaGU6OkFYVmFsdWVDaGFuZ2VkLCB0cnVlKTsKLX0KLQotZG91YmxlIEhUTUxJbnB1dEVsZW1l
bnQ6OmFsaWduVmFsdWVGb3JTdGVwKGRvdWJsZSBuZXdWYWx1ZSwgZG91YmxlIHN0ZXAsIHVuc2ln
bmVkIGN1cnJlbnREZWNpbWFsUGxhY2VzLCB1bnNpZ25lZCBzdGVwRGVjaW1hbFBsYWNlcykKLXsK
LSAgICBpZiAobmV3VmFsdWUgPj0gcG93KDEwLjAsIDIxLjApKQotICAgICAgICByZXR1cm4gbmV3
VmFsdWU7Ci0KLSAgICB1bnNpZ25lZCBiYXNlRGVjaW1hbFBsYWNlczsKLSAgICBkb3VibGUgYmFz
ZSA9IG1faW5wdXRUeXBlLT5zdGVwQmFzZVdpdGhEZWNpbWFsUGxhY2VzKCZiYXNlRGVjaW1hbFBs
YWNlcyk7Ci0gICAgYmFzZURlY2ltYWxQbGFjZXMgPSBtaW4oYmFzZURlY2ltYWxQbGFjZXMsIDE2
dSk7Ci0gICAgaWYgKHN0ZXBNaXNtYXRjaCh2YWx1ZSgpKSkgewotICAgICAgICBkb3VibGUgc2Nh
bGUgPSBwb3coMTAuMCwgc3RhdGljX2Nhc3Q8ZG91YmxlPihtYXgoc3RlcERlY2ltYWxQbGFjZXMs
IGN1cnJlbnREZWNpbWFsUGxhY2VzKSkpOwotICAgICAgICBuZXdWYWx1ZSA9IHJvdW5kKG5ld1Zh
bHVlICogc2NhbGUpIC8gc2NhbGU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZG91YmxlIHNjYWxl
ID0gcG93KDEwLjAsIHN0YXRpY19jYXN0PGRvdWJsZT4obWF4KHN0ZXBEZWNpbWFsUGxhY2VzLCBi
YXNlRGVjaW1hbFBsYWNlcykpKTsKLSAgICAgICAgbmV3VmFsdWUgPSByb3VuZCgoYmFzZSArIHJv
dW5kKChuZXdWYWx1ZSAtIGJhc2UpIC8gc3RlcCkgKiBzdGVwKSAqIHNjYWxlKSAvIHNjYWxlOwot
ICAgIH0KLQotICAgIHJldHVybiBuZXdWYWx1ZTsKKyAgICByZXR1cm4gbV9pbnB1dFR5cGUtPmdl
dEFsbG93ZWRWYWx1ZVN0ZXAoc3RlcCk7CiB9CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c3Rl
cFVwKGludCBuLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBhcHBseVN0ZXAobiwgUmVqZWN0
QW55LCBEaXNwYXRjaE5vRXZlbnQsIGVjKTsKKyAgICBtX2lucHV0VHlwZS0+c3RlcFVwKG4sIGVj
KTsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzdGVwRG93bihpbnQgbiwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7Ci0gICAgYXBwbHlTdGVwKC1uLCBSZWplY3RBbnksIERpc3BhdGNoTm9FdmVu
dCwgZWMpOworICAgIG1faW5wdXRUeXBlLT5zdGVwVXAoLW4sIGVjKTsKIH0KIAogYm9vbCBIVE1M
SW5wdXRFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBj
b25zdApAQCAtMTU1MywxMDggKzE0MzUsNyBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzU3Rl
cHBhYmxlKCkgY29uc3QKIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzdGVwVXBGcm9tUmVuZGVy
ZXIoaW50IG4pCiB7Ci0gICAgLy8gVGhlIGRpZmZlcmVuY2VzIGZyb20gc3RlcFVwKCkvc3RlcERv
d24oKToKLSAgICAvLwotICAgIC8vIERpZmZlcmVuY2UgMTogdGhlIGN1cnJlbnQgdmFsdWUKLSAg
ICAvLyBJZiB0aGUgY3VycmVudCB2YWx1ZSBpcyBub3QgYSBudW1iZXIsIGluY2x1ZGluZyBlbXB0
eSwgdGhlIGN1cnJlbnQgdmFsdWUgaXMgYXNzdW1lZCBhcyAwLgotICAgIC8vICAgKiBJZiAwIGlz
IGluLXJhbmdlLCBhbmQgbWF0Y2hlcyB0byBzdGVwIHZhbHVlCi0gICAgLy8gICAgIC0gVGhlIHZh
bHVlIHNob3VsZCBiZSB0aGUgK3N0ZXAgaWYgbiA+IDAKLSAgICAvLyAgICAgLSBUaGUgdmFsdWUg
c2hvdWxkIGJlIHRoZSAtc3RlcCBpZiBuIDwgMAotICAgIC8vICAgICBJZiAtc3RlcCBvciArc3Rl
cCBpcyBvdXQgb2YgcmFuZ2UsIG5ldyB2YWx1ZSBzaG91bGQgYmUgMC4KLSAgICAvLyAgICogSWYg
MCBpcyBzbWFsbGVyIHRoYW4gdGhlIG1pbmltdW0gdmFsdWUKLSAgICAvLyAgICAgLSBUaGUgdmFs
dWUgc2hvdWxkIGJlIHRoZSBtaW5pbXVtIHZhbHVlIGZvciBhbnkgbgotICAgIC8vICAgKiBJZiAw
IGlzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHZhbHVlCi0gICAgLy8gICAgIC0gVGhlIHZhbHVl
IHNob3VsZCBiZSB0aGUgbWF4aW11bSB2YWx1ZSBmb3IgYW55IG4KLSAgICAvLyAgICogSWYgMCBp
cyBpbi1yYW5nZSwgYnV0IG5vdCBtYXRjaGVkIHRvIHN0ZXAgdmFsdWUKLSAgICAvLyAgICAgLSBU
aGUgdmFsdWUgc2hvdWxkIGJlIHRoZSBsYXJnZXIgbWF0Y2hlZCB2YWx1ZSBuZWFyZXN0IHRvIDAg
aWYgbiA+IDAKLSAgICAvLyAgICAgICBlLmcuIDxpbnB1dCB0eXBlPW51bWJlciBtaW49LTEwMCBz
dGVwPTM+IC0+IDIKLSAgICAvLyAgICAgLSBUaGUgdmFsdWUgc2hvdWxkIGJlIHRoZSBzbWFsZXIg
bWF0Y2hlZCB2YWx1ZSBuZWFyZXN0IHRvIDAgaWYgbiA8IDAKLSAgICAvLyAgICAgICBlLmcuIDxp
bnB1dCB0eXBlPW51bWJlciBtaW49LTEwMCBzdGVwPTM+IC0+IC0xCi0gICAgLy8gICBBcyBmb3Ig
ZGF0ZS9kYXRldGltZS1sb2NhbC9tb250aC90aW1lL3dlZWsgdHlwZXMsIHRoZSBjdXJyZW50IHZh
bHVlIGlzIGFzc3VtZWQgYXMgInRoZSBjdXJyZW50IGxvY2FsIGRhdGUvdGltZSIuCi0gICAgLy8g
ICBBcyBmb3IgZGF0ZXRpbWUgdHlwZSwgdGhlIGN1cnJlbnQgdmFsdWUgaXMgYXNzdW1lZCBhcyAi
dGhlIGN1cnJlbnQgZGF0ZS90aW1lIGluIFVUQyIuCi0gICAgLy8gSWYgdGhlIGN1cnJlbnQgdmFs
dWUgaXMgc21hbGxlciB0aGFuIHRoZSBtaW5pbXVtIHZhbHVlOgotICAgIC8vICAtIFRoZSB2YWx1
ZSBzaG91bGQgYmUgdGhlIG1pbmltdW0gdmFsdWUgaWYgbiA+IDAKLSAgICAvLyAgLSBOb3RoaW5n
IHNob3VsZCBoYXBwZW4gaWYgbiA8IDAKLSAgICAvLyBJZiB0aGUgY3VycmVudCB2YWx1ZSBpcyBs
YXJnZXIgdGhhbiB0aGUgbWF4aW11bSB2YWx1ZToKLSAgICAvLyAgLSBUaGUgdmFsdWUgc2hvdWxk
IGJlIHRoZSBtYXhpbXVtIHZhbHVlIGlmIG4gPCAwCi0gICAgLy8gIC0gTm90aGluZyBzaG91bGQg
aGFwcGVuIGlmIG4gPiAwCi0gICAgLy8KLSAgICAvLyBEaWZmZXJlbmNlIDI6IGNsYW1waW5nIHN0
ZXBzCi0gICAgLy8gSWYgdGhlIGN1cnJlbnQgdmFsdWUgaXMgbm90IG1hdGNoZWQgdG8gc3RlcCB2
YWx1ZToKLSAgICAvLyAtIFRoZSB2YWx1ZSBzaG91bGQgYmUgdGhlIGxhcmdlciBtYXRjaGVkIHZh
bHVlIG5lYXJlc3QgdG8gMCBpZiBuID4gMAotICAgIC8vICAgZS5nLiA8aW5wdXQgdHlwZT1udW1i
ZXIgdmFsdWU9MyBtaW49LTEwMCBzdGVwPTM+IC0+IDUKLSAgICAvLyAtIFRoZSB2YWx1ZSBzaG91
bGQgYmUgdGhlIHNtYWxlciBtYXRjaGVkIHZhbHVlIG5lYXJlc3QgdG8gMCBpZiBuIDwgMAotICAg
IC8vICAgZS5nLiA8aW5wdXQgdHlwZT1udW1iZXIgdmFsdWU9MyBtaW49LTEwMCBzdGVwPTM+IC0+
IDIKLSAgICAvLwotICAgIC8vIG4gaXMgYXNzdW1lZCBhcyAtbiBpZiBzdGVwIDwgMC4KLQotICAg
IEFTU0VSVChpc1N0ZXBwYWJsZSgpKTsKLSAgICBpZiAoIWlzU3RlcHBhYmxlKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBBU1NFUlQobik7Ci0gICAgaWYgKCFuKQotICAgICAgICByZXR1cm47Ci0K
LSAgICB1bnNpZ25lZCBzdGVwRGVjaW1hbFBsYWNlcywgYmFzZURlY2ltYWxQbGFjZXM7Ci0gICAg
ZG91YmxlIHN0ZXAsIGJhc2U7Ci0gICAgLy8gRklYTUU6IE5vdCBhbnkgY2hhbmdlcyBhZnRlciBz
dGVwcGluZywgZXZlbiBpZiBpdCBpcyBhbiBpbnZhbGlkIHZhbHVlLCBtYXkgYmUgYmV0dGVyLgot
ICAgIC8vIChlLmcuIFN0ZXBwaW5nLXVwIGZvciA8aW5wdXQgdHlwZT0ibnVtYmVyIiB2YWx1ZT0i
Zm9vIiBzdGVwPSJhbnkiIC8+ID0+ICJmb28iKQotICAgIGlmICghZ2V0QWxsb3dlZFZhbHVlU3Rl
cFdpdGhEZWNpbWFsUGxhY2VzKEFueUlzRGVmYXVsdFN0ZXAsICZzdGVwLCAmc3RlcERlY2ltYWxQ
bGFjZXMpKQotICAgICAgcmV0dXJuOwotICAgIGJhc2UgPSBtX2lucHV0VHlwZS0+c3RlcEJhc2VX
aXRoRGVjaW1hbFBsYWNlcygmYmFzZURlY2ltYWxQbGFjZXMpOwotICAgIGJhc2VEZWNpbWFsUGxh
Y2VzID0gbWluKGJhc2VEZWNpbWFsUGxhY2VzLCAxNnUpOwotCi0gICAgaW50IHNpZ247Ci0gICAg
aWYgKHN0ZXAgPiAwKQotICAgICAgICBzaWduID0gbjsKLSAgICBlbHNlIGlmIChzdGVwIDwgMCkK
LSAgICAgICAgc2lnbiA9IC1uOwotICAgIGVsc2UKLSAgICAgICAgc2lnbiA9IDA7Ci0KLSAgICBj
b25zdCBkb3VibGUgbmFuID0gbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0g
ICAgU3RyaW5nIGN1cnJlbnRTdHJpbmdWYWx1ZSA9IHZhbHVlKCk7Ci0gICAgZG91YmxlIGN1cnJl
bnQgPSBtX2lucHV0VHlwZS0+cGFyc2VUb0RvdWJsZShjdXJyZW50U3RyaW5nVmFsdWUsIG5hbik7
Ci0gICAgaWYgKCFpc2Zpbml0ZShjdXJyZW50KSkgewotICAgICAgICBFeGNlcHRpb25Db2RlIGVj
OwotICAgICAgICBjdXJyZW50ID0gbV9pbnB1dFR5cGUtPmRlZmF1bHRWYWx1ZUZvclN0ZXBVcCgp
OwotICAgICAgICBkb3VibGUgbmV4dERpZmYgPSBzdGVwICogbjsKLSAgICAgICAgaWYgKGN1cnJl
bnQgPCBtX2lucHV0VHlwZS0+bWluaW11bSgpIC0gbmV4dERpZmYpCi0gICAgICAgICAgICBjdXJy
ZW50ID0gbV9pbnB1dFR5cGUtPm1pbmltdW0oKSAtIG5leHREaWZmOwotICAgICAgICBpZiAoY3Vy
cmVudCA+IG1faW5wdXRUeXBlLT5tYXhpbXVtKCkgLSBuZXh0RGlmZikKLSAgICAgICAgICAgIGN1
cnJlbnQgPSBtX2lucHV0VHlwZS0+bWF4aW11bSgpIC0gbmV4dERpZmY7Ci0gICAgICAgIHNldFZh
bHVlQXNOdW1iZXIoY3VycmVudCwgZWMsIERpc3BhdGNoSW5wdXRBbmRDaGFuZ2VFdmVudCk7Ci0g
ICAgfQotICAgIGlmICgoc2lnbiA+IDAgJiYgY3VycmVudCA8IG1faW5wdXRUeXBlLT5taW5pbXVt
KCkpIHx8IChzaWduIDwgMCAmJiBjdXJyZW50ID4gbV9pbnB1dFR5cGUtPm1heGltdW0oKSkpCi0g
ICAgICAgIHNldFZhbHVlKG1faW5wdXRUeXBlLT5zZXJpYWxpemUoc2lnbiA+IDAgPyBtX2lucHV0
VHlwZS0+bWluaW11bSgpIDogbV9pbnB1dFR5cGUtPm1heGltdW0oKSksIERpc3BhdGNoSW5wdXRB
bmRDaGFuZ2VFdmVudCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0g
ICAgICAgIGlmIChzdGVwTWlzbWF0Y2godmFsdWUoKSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChz
dGVwKTsKLSAgICAgICAgICAgIGRvdWJsZSBuZXdWYWx1ZTsKLSAgICAgICAgICAgIGRvdWJsZSBz
Y2FsZSA9IHBvdygxMC4wLCBzdGF0aWNfY2FzdDxkb3VibGU+KG1heChzdGVwRGVjaW1hbFBsYWNl
cywgYmFzZURlY2ltYWxQbGFjZXMpKSk7Ci0KLSAgICAgICAgICAgIGlmIChzaWduIDwgMCkKLSAg
ICAgICAgICAgICAgICBuZXdWYWx1ZSA9IHJvdW5kKChiYXNlICsgZmxvb3IoKGN1cnJlbnQgLSBi
YXNlKSAvIHN0ZXApICogc3RlcCkgKiBzY2FsZSkgLyBzY2FsZTsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKHNpZ24gPiAwKQotICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gcm91bmQoKGJhc2UgKyBj
ZWlsKChjdXJyZW50IC0gYmFzZSkgLyBzdGVwKSAqIHN0ZXApICogc2NhbGUpIC8gc2NhbGU7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBjdXJyZW50OwotCi0g
ICAgICAgICAgICBpZiAobmV3VmFsdWUgPCBtX2lucHV0VHlwZS0+bWluaW11bSgpKQotICAgICAg
ICAgICAgICAgIG5ld1ZhbHVlID0gbV9pbnB1dFR5cGUtPm1pbmltdW0oKTsKLSAgICAgICAgICAg
IGlmIChuZXdWYWx1ZSA+IG1faW5wdXRUeXBlLT5tYXhpbXVtKCkpCi0gICAgICAgICAgICAgICAg
bmV3VmFsdWUgPSBtX2lucHV0VHlwZS0+bWF4aW11bSgpOwotCi0gICAgICAgICAgICBzZXRWYWx1
ZUFzTnVtYmVyKG5ld1ZhbHVlLCBlYywgbiA9PSAxIHx8IG4gPT0gLTEgPyBEaXNwYXRjaElucHV0
QW5kQ2hhbmdlRXZlbnQgOiBEaXNwYXRjaE5vRXZlbnQpOwotICAgICAgICAgICAgY3VycmVudCA9
IG5ld1ZhbHVlOwotICAgICAgICAgICAgaWYgKG4gPiAxKQotICAgICAgICAgICAgICAgIGFwcGx5
U3RlcChuIC0gMSwgQW55SXNEZWZhdWx0U3RlcCwgRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50
LCBlYyk7Ci0gICAgICAgICAgICBlbHNlIGlmIChuIDwgLTEpCi0gICAgICAgICAgICAgICAgYXBw
bHlTdGVwKG4gKyAxLCBBbnlJc0RlZmF1bHRTdGVwLCBEaXNwYXRjaElucHV0QW5kQ2hhbmdlRXZl
bnQsIGVjKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBhcHBseVN0ZXAobiwgQW55SXNE
ZWZhdWx0U3RlcCwgRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50LCBlYyk7Ci0gICAgfQorICAg
IG1faW5wdXRUeXBlLT5zdGVwVXBGcm9tUmVuZGVyZXIobik7CiB9CiAKICNpZiBFTkFCTEUoSU5Q
VVRfU1BFRUNIKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAppbmRleCAwYmM1
ZmViNzdiYjRmYmRmOTFhZmQ5YmM4ZWU2N2RkMGZhN2I1MWE1Li41ZDFhYjYwZGVlOWE4ZDY0NGI1
MTVmNWNiYzJkZDVlZWZhNTAyNmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuaApAQCAtMjQ5LDcgKzI0OSw2IEBAIHByb3RlY3RlZDoKIAogcHJpdmF0ZToKICAgICBlbnVt
IEF1dG9Db21wbGV0ZVNldHRpbmcgeyBVbmluaXRpYWxpemVkLCBPbiwgT2ZmIH07Ci0gICAgZW51
bSBBbnlTdGVwSGFuZGxpbmcgeyBSZWplY3RBbnksIEFueUlzRGVmYXVsdFN0ZXAgfTsKIAogICAg
IHZpcnR1YWwgdm9pZCB3aWxsQ2hhbmdlRm9ybSgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9p
ZCBkaWRDaGFuZ2VGb3JtKCkgT1ZFUlJJREU7CkBAIC0zMzMsMTEgKzMzMiw2IEBAIHByaXZhdGU6
CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHN1YnRyZWVIYXNDaGFuZ2VkKCk7CiAKLSAgICBib29s
IGdldEFsbG93ZWRWYWx1ZVN0ZXBXaXRoRGVjaW1hbFBsYWNlcyhBbnlTdGVwSGFuZGxpbmcsIGRv
dWJsZSosIHVuc2lnbmVkKikgY29uc3Q7Ci0KLSAgICAvLyBIZWxwZXIgZm9yIHN0ZXBVcCgpL3N0
ZXBEb3duKCkuICBBZGRzIHN0ZXAgdmFsdWUgKiBjb3VudCB0byB0aGUgY3VycmVudCB2YWx1ZS4K
LSAgICB2b2lkIGFwcGx5U3RlcChkb3VibGUgY291bnQsIEFueVN0ZXBIYW5kbGluZywgVGV4dEZp
ZWxkRXZlbnRCZWhhdmlvciwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGRvdWJsZSBhbGlnblZhbHVl
Rm9yU3RlcChkb3VibGUgdmFsdWUsIGRvdWJsZSBzdGVwLCB1bnNpZ25lZCBjdXJyZW50RGVjaW1h
bFBsYWNlcywgdW5zaWduZWQgc3RlcERlY2ltYWxQbGFjZXMpOwogCiAjaWYgRU5BQkxFKERBVEFM
SVNUKQogICAgIEhUTUxEYXRhTGlzdEVsZW1lbnQqIGRhdGFMaXN0KCkgY29uc3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0lucHV0VHlwZS5jcHAKaW5kZXggM2QwYTM4MjVhNWFiYmQ2YWEzOTYyOTg3OTg2MTIxNmFi
NjZkZjg4NS4uM2Q1ZjY1MGRhMjNhNDY2NDRkMDgzNTYwYzM1N2JhMDRiOGI0MjA4ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSW5wdXRUeXBlLmNwcApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIklucHV0VHlwZS5oIgogCisjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5o
IgogI2luY2x1ZGUgIkJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmgiCiAjaW5jbHVkZSAiQnV0dG9u
SW5wdXRUeXBlLmgiCiAjaW5jbHVkZSAiQ2hlY2tib3hJbnB1dFR5cGUuaCIKQEAgLTc4NSw2ICs3
ODYsMjQxIEBAIHVuc2lnbmVkIElucHV0VHlwZTo6d2lkdGgoKSBjb25zdAogICAgIHJldHVybiAw
OwogfQogCit2b2lkIElucHV0VHlwZTo6YXBwbHlTdGVwKGRvdWJsZSBjb3VudCwgQW55U3RlcEhh
bmRsaW5nIGFueVN0ZXBIYW5kbGluZywgVGV4dEZpZWxkRXZlbnRCZWhhdmlvciBldmVudEJlaGF2
aW9yLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBkb3VibGUgc3RlcDsKKyAgICB1bnNpZ25l
ZCBzdGVwRGVjaW1hbFBsYWNlcywgY3VycmVudERlY2ltYWxQbGFjZXM7CisgICAgaWYgKCFnZXRB
bGxvd2VkVmFsdWVTdGVwV2l0aERlY2ltYWxQbGFjZXMoYW55U3RlcEhhbmRsaW5nLCAmc3RlcCwg
JnN0ZXBEZWNpbWFsUGxhY2VzKSkgeworICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgZG91YmxlIG5hbiA9IG51bWVyaWNf
bGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworICAgIGRvdWJsZSBjdXJyZW50ID0gcGFyc2VU
b0RvdWJsZVdpdGhEZWNpbWFsUGxhY2VzKGVsZW1lbnQoKS0+dmFsdWUoKSwgbmFuLCAmY3VycmVu
dERlY2ltYWxQbGFjZXMpOworICAgIGlmICghaXNmaW5pdGUoY3VycmVudCkpIHsKKyAgICAgICAg
ZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBkb3Vi
bGUgbmV3VmFsdWUgPSBjdXJyZW50ICsgc3RlcCAqIGNvdW50OworICAgIGlmIChpc2luZihuZXdW
YWx1ZSkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGRvdWJsZSBhY2NlcHRhYmxlRXJyb3JWYWx1ZSA9IGFjY2VwdGFibGVF
cnJvcihzdGVwKTsKKyAgICBpZiAobmV3VmFsdWUgLSBtaW5pbXVtKCkgPCAtYWNjZXB0YWJsZUVy
cm9yVmFsdWUpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBpZiAobmV3VmFsdWUgPCBtaW5pbXVtKCkpCisgICAgICAgIG5ld1Zh
bHVlID0gbWluaW11bSgpOworCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdGVwU3RyaW5nID0g
ZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKHN0ZXBBdHRyKTsKKyAgICBpZiAoIWVxdWFsSWdu
b3JpbmdDYXNlKHN0ZXBTdHJpbmcsICJhbnkiKSkKKyAgICAgICAgbmV3VmFsdWUgPSBhbGlnblZh
bHVlRm9yU3RlcChuZXdWYWx1ZSwgc3RlcCwgY3VycmVudERlY2ltYWxQbGFjZXMsIHN0ZXBEZWNp
bWFsUGxhY2VzKTsKKworICAgIGlmIChuZXdWYWx1ZSAtIG1heGltdW0oKSA+IGFjY2VwdGFibGVF
cnJvclZhbHVlKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgaWYgKG5ld1ZhbHVlID4gbWF4aW11bSgpKQorICAgICAgICBuZXdW
YWx1ZSA9IG1heGltdW0oKTsKKworICAgIGVsZW1lbnQoKS0+c2V0VmFsdWVBc051bWJlcihuZXdW
YWx1ZSwgZWMsIGV2ZW50QmVoYXZpb3IpOworCisgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vz
c2liaWxpdHlFbmFibGVkKCkpCisgICAgICAgICBlbGVtZW50KCktPmRvY3VtZW50KCktPmF4T2Jq
ZWN0Q2FjaGUoKS0+cG9zdE5vdGlmaWNhdGlvbihlbGVtZW50KCktPnJlbmRlcmVyKCksIEFYT2Jq
ZWN0Q2FjaGU6OkFYVmFsdWVDaGFuZ2VkLCB0cnVlKTsKK30KKworZG91YmxlIElucHV0VHlwZTo6
YWxpZ25WYWx1ZUZvclN0ZXAoZG91YmxlIG5ld1ZhbHVlLCBkb3VibGUgc3RlcCwgdW5zaWduZWQg
Y3VycmVudERlY2ltYWxQbGFjZXMsIHVuc2lnbmVkIHN0ZXBEZWNpbWFsUGxhY2VzKQoreworICAg
IGlmIChuZXdWYWx1ZSA+PSBwb3coMTAuMCwgMjEuMCkpCisgICAgICAgIHJldHVybiBuZXdWYWx1
ZTsKKworICAgIHVuc2lnbmVkIGJhc2VEZWNpbWFsUGxhY2VzOworICAgIGRvdWJsZSBiYXNlID0g
c3RlcEJhc2VXaXRoRGVjaW1hbFBsYWNlcygmYmFzZURlY2ltYWxQbGFjZXMpOworICAgIGJhc2VE
ZWNpbWFsUGxhY2VzID0gbWluKGJhc2VEZWNpbWFsUGxhY2VzLCAxNnUpOworICAgIGlmIChlbGVt
ZW50KCktPnN0ZXBNaXNtYXRjaChlbGVtZW50KCktPnZhbHVlKCkpKSB7CisgICAgICAgIGRvdWJs
ZSBzY2FsZSA9IHBvdygxMC4wLCBzdGF0aWNfY2FzdDxkb3VibGU+KG1heChzdGVwRGVjaW1hbFBs
YWNlcywgY3VycmVudERlY2ltYWxQbGFjZXMpKSk7CisgICAgICAgIG5ld1ZhbHVlID0gcm91bmQo
bmV3VmFsdWUgKiBzY2FsZSkgLyBzY2FsZTsKKyAgICB9IGVsc2UgeworICAgICAgICBkb3VibGUg
c2NhbGUgPSBwb3coMTAuMCwgc3RhdGljX2Nhc3Q8ZG91YmxlPihtYXgoc3RlcERlY2ltYWxQbGFj
ZXMsIGJhc2VEZWNpbWFsUGxhY2VzKSkpOworICAgICAgICBuZXdWYWx1ZSA9IHJvdW5kKChiYXNl
ICsgcm91bmQoKG5ld1ZhbHVlIC0gYmFzZSkgLyBzdGVwKSAqIHN0ZXApICogc2NhbGUpIC8gc2Nh
bGU7CisgICAgfQorCisgICAgcmV0dXJuIG5ld1ZhbHVlOworfQorCitib29sIElucHV0VHlwZTo6
Z2V0QWxsb3dlZFZhbHVlU3RlcChkb3VibGUqIHN0ZXApIGNvbnN0Cit7CisgICAgcmV0dXJuIGdl
dEFsbG93ZWRWYWx1ZVN0ZXBXaXRoRGVjaW1hbFBsYWNlcyhSZWplY3RBbnksIHN0ZXAsIDApOwor
fQorCitib29sIElucHV0VHlwZTo6Z2V0QWxsb3dlZFZhbHVlU3RlcFdpdGhEZWNpbWFsUGxhY2Vz
KEFueVN0ZXBIYW5kbGluZyBhbnlTdGVwSGFuZGxpbmcsIGRvdWJsZSogc3RlcCwgdW5zaWduZWQq
IGRlY2ltYWxQbGFjZXMpIGNvbnN0Cit7CisgICAgQVNTRVJUKHN0ZXApOworICAgIGRvdWJsZSBk
ZWZhdWx0U3RlcFZhbHVlID0gZGVmYXVsdFN0ZXAoKTsKKyAgICBkb3VibGUgc3RlcFNjYWxlRmFj
dG9yVmFsdWUgPSBzdGVwU2NhbGVGYWN0b3IoKTsKKyAgICBpZiAoIWlzZmluaXRlKGRlZmF1bHRT
dGVwVmFsdWUpIHx8ICFpc2Zpbml0ZShzdGVwU2NhbGVGYWN0b3JWYWx1ZSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHN0ZXBTdHJpbmcgPSBlbGVtZW50
KCktPmZhc3RHZXRBdHRyaWJ1dGUoc3RlcEF0dHIpOworICAgIGlmIChzdGVwU3RyaW5nLmlzRW1w
dHkoKSkgeworICAgICAgICAqc3RlcCA9IGRlZmF1bHRTdGVwVmFsdWUgKiBzdGVwU2NhbGVGYWN0
b3JWYWx1ZTsKKyAgICAgICAgaWYgKGRlY2ltYWxQbGFjZXMpCisgICAgICAgICAgICAqZGVjaW1h
bFBsYWNlcyA9IDA7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShzdGVwU3RyaW5nLCAiYW55IikpIHsKKyAgICAgICAgc3dpdGNoIChhbnlT
dGVwSGFuZGxpbmcpIHsKKyAgICAgICAgY2FzZSBSZWplY3RBbnk6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGNhc2UgQW55SXNEZWZhdWx0U3RlcDoKKyAgICAgICAgICAgICpz
dGVwID0gZGVmYXVsdFN0ZXBWYWx1ZSAqIHN0ZXBTY2FsZUZhY3RvclZhbHVlOworICAgICAgICAg
ICAgaWYgKGRlY2ltYWxQbGFjZXMpCisgICAgICAgICAgICAgICAgKmRlY2ltYWxQbGFjZXMgPSAw
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGRvdWJsZSBw
YXJzZWQ7CisgICAgaWYgKCFkZWNpbWFsUGxhY2VzKSB7CisgICAgICAgIGlmICghcGFyc2VUb0Rv
dWJsZUZvck51bWJlclR5cGUoc3RlcFN0cmluZywgJnBhcnNlZCkgfHwgcGFyc2VkIDw9IDAuMCkg
eworICAgICAgICAgICAgKnN0ZXAgPSBkZWZhdWx0U3RlcFZhbHVlICogc3RlcFNjYWxlRmFjdG9y
VmFsdWU7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIGlmICghcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGVXaXRoRGVjaW1hbFBsYWNl
cyhzdGVwU3RyaW5nLCAmcGFyc2VkLCBkZWNpbWFsUGxhY2VzKSB8fCBwYXJzZWQgPD0gMC4wKSB7
CisgICAgICAgICAgICAqc3RlcCA9IGRlZmF1bHRTdGVwVmFsdWUgKiBzdGVwU2NhbGVGYWN0b3JW
YWx1ZTsKKyAgICAgICAgICAgICpkZWNpbWFsUGxhY2VzID0gMDsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIC8vIEZvciBkYXRlLCBtb250aCwgd2Vlaywg
dGhlIHBhcnNlZCB2YWx1ZSBzaG91bGQgYmUgYW4gaW50ZWdlciBmb3Igc29tZSB0eXBlcy4KKyAg
ICBpZiAocGFyc2VkU3RlcFZhbHVlU2hvdWxkQmVJbnRlZ2VyKCkpCisgICAgICAgIHBhcnNlZCA9
IG1heChyb3VuZChwYXJzZWQpLCAxLjApOworICAgIGRvdWJsZSByZXN1bHQgPSBwYXJzZWQgKiBz
dGVwU2NhbGVGYWN0b3JWYWx1ZTsKKyAgICAvLyBGb3IgZGF0ZXRpbWUsIGRhdGV0aW1lLWxvY2Fs
LCB0aW1lLCB0aGUgcmVzdWx0IHNob3VsZCBiZSBhbiBpbnRlZ2VyLgorICAgIGlmIChzY2FsZWRT
dGVwVmFsdWVTaG91bGRCZUludGVnZXIoKSkKKyAgICAgICAgcmVzdWx0ID0gbWF4KHJvdW5kKHJl
c3VsdCksIDEuMCk7CisgICAgQVNTRVJUKHJlc3VsdCA+IDApOworICAgICpzdGVwID0gcmVzdWx0
OworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIElucHV0VHlwZTo6c3RlcFVwKGludCBuLCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBhcHBseVN0ZXAobiwgUmVqZWN0QW55LCBEaXNwYXRj
aE5vRXZlbnQsIGVjKTsKK30KKwordm9pZCBJbnB1dFR5cGU6OnN0ZXBVcEZyb21SZW5kZXJlcihp
bnQgbikKK3sKKyAgICAvLyBUaGUgZGlmZmVyZW5jZXMgZnJvbSBzdGVwVXAoKS9zdGVwRG93bigp
OgorICAgIC8vCisgICAgLy8gRGlmZmVyZW5jZSAxOiB0aGUgY3VycmVudCB2YWx1ZQorICAgIC8v
IElmIHRoZSBjdXJyZW50IHZhbHVlIGlzIG5vdCBhIG51bWJlciwgaW5jbHVkaW5nIGVtcHR5LCB0
aGUgY3VycmVudCB2YWx1ZSBpcyBhc3N1bWVkIGFzIDAuCisgICAgLy8gICAqIElmIDAgaXMgaW4t
cmFuZ2UsIGFuZCBtYXRjaGVzIHRvIHN0ZXAgdmFsdWUKKyAgICAvLyAgICAgLSBUaGUgdmFsdWUg
c2hvdWxkIGJlIHRoZSArc3RlcCBpZiBuID4gMAorICAgIC8vICAgICAtIFRoZSB2YWx1ZSBzaG91
bGQgYmUgdGhlIC1zdGVwIGlmIG4gPCAwCisgICAgLy8gICAgIElmIC1zdGVwIG9yICtzdGVwIGlz
IG91dCBvZiByYW5nZSwgbmV3IHZhbHVlIHNob3VsZCBiZSAwLgorICAgIC8vICAgKiBJZiAwIGlz
IHNtYWxsZXIgdGhhbiB0aGUgbWluaW11bSB2YWx1ZQorICAgIC8vICAgICAtIFRoZSB2YWx1ZSBz
aG91bGQgYmUgdGhlIG1pbmltdW0gdmFsdWUgZm9yIGFueSBuCisgICAgLy8gICAqIElmIDAgaXMg
bGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gdmFsdWUKKyAgICAvLyAgICAgLSBUaGUgdmFsdWUgc2hv
dWxkIGJlIHRoZSBtYXhpbXVtIHZhbHVlIGZvciBhbnkgbgorICAgIC8vICAgKiBJZiAwIGlzIGlu
LXJhbmdlLCBidXQgbm90IG1hdGNoZWQgdG8gc3RlcCB2YWx1ZQorICAgIC8vICAgICAtIFRoZSB2
YWx1ZSBzaG91bGQgYmUgdGhlIGxhcmdlciBtYXRjaGVkIHZhbHVlIG5lYXJlc3QgdG8gMCBpZiBu
ID4gMAorICAgIC8vICAgICAgIGUuZy4gPGlucHV0IHR5cGU9bnVtYmVyIG1pbj0tMTAwIHN0ZXA9
Mz4gLT4gMgorICAgIC8vICAgICAtIFRoZSB2YWx1ZSBzaG91bGQgYmUgdGhlIHNtYWxlciBtYXRj
aGVkIHZhbHVlIG5lYXJlc3QgdG8gMCBpZiBuIDwgMAorICAgIC8vICAgICAgIGUuZy4gPGlucHV0
IHR5cGU9bnVtYmVyIG1pbj0tMTAwIHN0ZXA9Mz4gLT4gLTEKKyAgICAvLyAgIEFzIGZvciBkYXRl
L2RhdGV0aW1lLWxvY2FsL21vbnRoL3RpbWUvd2VlayB0eXBlcywgdGhlIGN1cnJlbnQgdmFsdWUg
aXMgYXNzdW1lZCBhcyAidGhlIGN1cnJlbnQgbG9jYWwgZGF0ZS90aW1lIi4KKyAgICAvLyAgIEFz
IGZvciBkYXRldGltZSB0eXBlLCB0aGUgY3VycmVudCB2YWx1ZSBpcyBhc3N1bWVkIGFzICJ0aGUg
Y3VycmVudCBkYXRlL3RpbWUgaW4gVVRDIi4KKyAgICAvLyBJZiB0aGUgY3VycmVudCB2YWx1ZSBp
cyBzbWFsbGVyIHRoYW4gdGhlIG1pbmltdW0gdmFsdWU6CisgICAgLy8gIC0gVGhlIHZhbHVlIHNo
b3VsZCBiZSB0aGUgbWluaW11bSB2YWx1ZSBpZiBuID4gMAorICAgIC8vICAtIE5vdGhpbmcgc2hv
dWxkIGhhcHBlbiBpZiBuIDwgMAorICAgIC8vIElmIHRoZSBjdXJyZW50IHZhbHVlIGlzIGxhcmdl
ciB0aGFuIHRoZSBtYXhpbXVtIHZhbHVlOgorICAgIC8vICAtIFRoZSB2YWx1ZSBzaG91bGQgYmUg
dGhlIG1heGltdW0gdmFsdWUgaWYgbiA8IDAKKyAgICAvLyAgLSBOb3RoaW5nIHNob3VsZCBoYXBw
ZW4gaWYgbiA+IDAKKyAgICAvLworICAgIC8vIERpZmZlcmVuY2UgMjogY2xhbXBpbmcgc3RlcHMK
KyAgICAvLyBJZiB0aGUgY3VycmVudCB2YWx1ZSBpcyBub3QgbWF0Y2hlZCB0byBzdGVwIHZhbHVl
OgorICAgIC8vIC0gVGhlIHZhbHVlIHNob3VsZCBiZSB0aGUgbGFyZ2VyIG1hdGNoZWQgdmFsdWUg
bmVhcmVzdCB0byAwIGlmIG4gPiAwCisgICAgLy8gICBlLmcuIDxpbnB1dCB0eXBlPW51bWJlciB2
YWx1ZT0zIG1pbj0tMTAwIHN0ZXA9Mz4gLT4gNQorICAgIC8vIC0gVGhlIHZhbHVlIHNob3VsZCBi
ZSB0aGUgc21hbGVyIG1hdGNoZWQgdmFsdWUgbmVhcmVzdCB0byAwIGlmIG4gPCAwCisgICAgLy8g
ICBlLmcuIDxpbnB1dCB0eXBlPW51bWJlciB2YWx1ZT0zIG1pbj0tMTAwIHN0ZXA9Mz4gLT4gMgor
ICAgIC8vCisgICAgLy8gbiBpcyBhc3N1bWVkIGFzIC1uIGlmIHN0ZXAgPCAwLgorCisgICAgQVNT
RVJUKGlzU3RlcHBhYmxlKCkpOworICAgIGlmICghaXNTdGVwcGFibGUoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIEFTU0VSVChuKTsKKyAgICBpZiAoIW4pCisgICAgICAgIHJldHVybjsKKworICAg
IHVuc2lnbmVkIHN0ZXBEZWNpbWFsUGxhY2VzLCBiYXNlRGVjaW1hbFBsYWNlczsKKyAgICBkb3Vi
bGUgc3RlcCwgYmFzZTsKKyAgICAvLyBGSVhNRTogTm90IGFueSBjaGFuZ2VzIGFmdGVyIHN0ZXBw
aW5nLCBldmVuIGlmIGl0IGlzIGFuIGludmFsaWQgdmFsdWUsIG1heSBiZSBiZXR0ZXIuCisgICAg
Ly8gKGUuZy4gU3RlcHBpbmctdXAgZm9yIDxpbnB1dCB0eXBlPSJudW1iZXIiIHZhbHVlPSJmb28i
IHN0ZXA9ImFueSIgLz4gPT4gImZvbyIpCisgICAgaWYgKCFnZXRBbGxvd2VkVmFsdWVTdGVwV2l0
aERlY2ltYWxQbGFjZXMoQW55SXNEZWZhdWx0U3RlcCwgJnN0ZXAsICZzdGVwRGVjaW1hbFBsYWNl
cykpCisgICAgICByZXR1cm47CisgICAgYmFzZSA9IHN0ZXBCYXNlV2l0aERlY2ltYWxQbGFjZXMo
JmJhc2VEZWNpbWFsUGxhY2VzKTsKKyAgICBiYXNlRGVjaW1hbFBsYWNlcyA9IG1pbihiYXNlRGVj
aW1hbFBsYWNlcywgMTZ1KTsKKworICAgIGludCBzaWduOworICAgIGlmIChzdGVwID4gMCkKKyAg
ICAgICAgc2lnbiA9IG47CisgICAgZWxzZSBpZiAoc3RlcCA8IDApCisgICAgICAgIHNpZ24gPSAt
bjsKKyAgICBlbHNlCisgICAgICAgIHNpZ24gPSAwOworCisgICAgY29uc3QgZG91YmxlIG5hbiA9
IG51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworICAgIFN0cmluZyBjdXJyZW50
U3RyaW5nVmFsdWUgPSBlbGVtZW50KCktPnZhbHVlKCk7CisgICAgZG91YmxlIGN1cnJlbnQgPSBw
YXJzZVRvRG91YmxlKGN1cnJlbnRTdHJpbmdWYWx1ZSwgbmFuKTsKKyAgICBpZiAoIWlzZmluaXRl
KGN1cnJlbnQpKSB7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgICAgIGN1cnJlbnQg
PSBkZWZhdWx0VmFsdWVGb3JTdGVwVXAoKTsKKyAgICAgICAgZG91YmxlIG5leHREaWZmID0gc3Rl
cCAqIG47CisgICAgICAgIGlmIChjdXJyZW50IDwgbWluaW11bSgpIC0gbmV4dERpZmYpCisgICAg
ICAgICAgICBjdXJyZW50ID0gbWluaW11bSgpIC0gbmV4dERpZmY7CisgICAgICAgIGlmIChjdXJy
ZW50ID4gbWF4aW11bSgpIC0gbmV4dERpZmYpCisgICAgICAgICAgICBjdXJyZW50ID0gbWF4aW11
bSgpIC0gbmV4dERpZmY7CisgICAgICAgIGVsZW1lbnQoKS0+c2V0VmFsdWVBc051bWJlcihjdXJy
ZW50LCBlYywgRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50KTsKKyAgICB9CisgICAgaWYgKChz
aWduID4gMCAmJiBjdXJyZW50IDwgbWluaW11bSgpKSB8fCAoc2lnbiA8IDAgJiYgY3VycmVudCA+
IG1heGltdW0oKSkpCisgICAgICAgIGVsZW1lbnQoKS0+c2V0VmFsdWUoc2VyaWFsaXplKHNpZ24g
PiAwID8gbWluaW11bSgpIDogbWF4aW11bSgpKSwgRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICAgICAgaWYgKGVs
ZW1lbnQoKS0+c3RlcE1pc21hdGNoKGVsZW1lbnQoKS0+dmFsdWUoKSkpIHsKKyAgICAgICAgICAg
IEFTU0VSVChzdGVwKTsKKyAgICAgICAgICAgIGRvdWJsZSBuZXdWYWx1ZTsKKyAgICAgICAgICAg
IGRvdWJsZSBzY2FsZSA9IHBvdygxMC4wLCBzdGF0aWNfY2FzdDxkb3VibGU+KG1heChzdGVwRGVj
aW1hbFBsYWNlcywgYmFzZURlY2ltYWxQbGFjZXMpKSk7CisKKyAgICAgICAgICAgIGlmIChzaWdu
IDwgMCkKKyAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IHJvdW5kKChiYXNlICsgZmxvb3IoKGN1
cnJlbnQgLSBiYXNlKSAvIHN0ZXApICogc3RlcCkgKiBzY2FsZSkgLyBzY2FsZTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKHNpZ24gPiAwKQorICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gcm91bmQo
KGJhc2UgKyBjZWlsKChjdXJyZW50IC0gYmFzZSkgLyBzdGVwKSAqIHN0ZXApICogc2NhbGUpIC8g
c2NhbGU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBjdXJy
ZW50OworCisgICAgICAgICAgICBpZiAobmV3VmFsdWUgPCBtaW5pbXVtKCkpCisgICAgICAgICAg
ICAgICAgbmV3VmFsdWUgPSBtaW5pbXVtKCk7CisgICAgICAgICAgICBpZiAobmV3VmFsdWUgPiBt
YXhpbXVtKCkpCisgICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBtYXhpbXVtKCk7CisKKyAgICAg
ICAgICAgIGVsZW1lbnQoKS0+c2V0VmFsdWVBc051bWJlcihuZXdWYWx1ZSwgZWMsIG4gPT0gMSB8
fCBuID09IC0xID8gRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50IDogRGlzcGF0Y2hOb0V2ZW50
KTsKKyAgICAgICAgICAgIGN1cnJlbnQgPSBuZXdWYWx1ZTsKKyAgICAgICAgICAgIGlmIChuID4g
MSkKKyAgICAgICAgICAgICAgICBhcHBseVN0ZXAobiAtIDEsIEFueUlzRGVmYXVsdFN0ZXAsIERp
c3BhdGNoSW5wdXRBbmRDaGFuZ2VFdmVudCwgZWMpOworICAgICAgICAgICAgZWxzZSBpZiAobiA8
IC0xKQorICAgICAgICAgICAgICAgIGFwcGx5U3RlcChuICsgMSwgQW55SXNEZWZhdWx0U3RlcCwg
RGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50LCBlYyk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgYXBwbHlTdGVwKG4sIEFueUlzRGVmYXVsdFN0ZXAsIERpc3BhdGNoSW5wdXRBbmRDaGFu
Z2VFdmVudCwgZWMpOworICAgIH0KK30KKwogbmFtZXNwYWNlIElucHV0VHlwZU5hbWVzIHsKIAog
Ly8gVGhlIHR5cGUgbmFtZXMgbXVzdCBiZSBsb3dlcmNhc2VkIGJlY2F1c2UgdGhleSB3aWxsIGJl
IHRoZSByZXR1cm4gdmFsdWVzIG9mCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lu
cHV0VHlwZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuaAppbmRleCBhZTg1NjVj
MmJiZjcwNTFmYjVkZDM1NjdiZDQ4OGQwMWQ3MDI0N2M3Li45NGJlNjI0MDIzYTljNzM4MmZjODdi
YmYyNGFjOThkZTA4ZjYxZDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0
VHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgKQEAgLTE1NCw2ICsx
NTQsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHN0ZXBNaXNtYXRjaChjb25zdCBTdHJp
bmcmLCBkb3VibGUgc3RlcCkgY29uc3Q7CiAgICAgdmlydHVhbCBkb3VibGUgc3RlcEJhc2UoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGRvdWJsZSBzdGVwQmFzZVdpdGhEZWNpbWFsUGxhY2VzKHVuc2ln
bmVkKikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEFsbG93ZWRWYWx1ZVN0ZXAoZG91Ymxl
KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHN0ZXBVcChpbnQsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc3RlcFVwRnJvbVJlbmRlcmVyKGludCk7CiAgICAgdmlydHVhbCBk
b3VibGUgZGVmYXVsdFN0ZXAoKSBjb25zdDsKICAgICB2aXJ0dWFsIGRvdWJsZSBzdGVwU2NhbGVG
YWN0b3IoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VkU3RlcFZhbHVlU2hvdWxkQmVJ
bnRlZ2VyKCkgY29uc3Q7CkBAIC0yOTAsNiArMjkzLDEzIEBAIHByb3RlY3RlZDoKICAgICBDaHJv
bWUqIGNocm9tZSgpIGNvbnN0OwogCiBwcml2YXRlOgorICAgIGVudW0gQW55U3RlcEhhbmRsaW5n
IHsgUmVqZWN0QW55LCBBbnlJc0RlZmF1bHRTdGVwIH07CisKKyAgICAvLyBIZWxwZXIgZm9yIHN0
ZXBVcCgpL3N0ZXBEb3duKCkuIEFkZHMgc3RlcCB2YWx1ZSAqIGNvdW50IHRvIHRoZSBjdXJyZW50
IHZhbHVlLgorICAgIHZvaWQgYXBwbHlTdGVwKGRvdWJsZSBjb3VudCwgQW55U3RlcEhhbmRsaW5n
LCBUZXh0RmllbGRFdmVudEJlaGF2aW9yLCBFeGNlcHRpb25Db2RlJik7CisgICAgZG91YmxlIGFs
aWduVmFsdWVGb3JTdGVwKGRvdWJsZSB2YWx1ZSwgZG91YmxlIHN0ZXAsIHVuc2lnbmVkIGN1cnJl
bnREZWNpbWFsUGxhY2VzLCB1bnNpZ25lZCBzdGVwRGVjaW1hbFBsYWNlcyk7CisgICAgYm9vbCBn
ZXRBbGxvd2VkVmFsdWVTdGVwV2l0aERlY2ltYWxQbGFjZXMoQW55U3RlcEhhbmRsaW5nLCBkb3Vi
bGUqLCB1bnNpZ25lZCopIGNvbnN0OworCiAgICAgLy8gUmF3IHBvaW50ZXIgYmVjYXVzZSB0aGUg
SFRNTElucHV0RWxlbWVudCBvYmplY3Qgb3ducyB0aGlzIElucHV0VHlwZSBvYmplY3QuCiAgICAg
SFRNTElucHV0RWxlbWVudCogbV9lbGVtZW50OwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141077</attachid>
            <date>2012-05-09 20:53:53 -0700</date>
            <delta_ts>2012-05-09 21:54:11 -0700</delta_ts>
            <desc>Patch 2</desc>
            <filename>bug-85978-20120510125352.patch</filename>
            <type>text/plain</type>
            <size>25947</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2NTg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGE5OWU5OWQwYWYxMTAy
OWVjMGEzN2NjMjU2MTQ3NDc1ODhkMWY4YS4uZjA5Nzc2ZGYwNjkyZTk2ZDQ0OWI2ZDM4MGVkZmNi
NzRlNjViMWU0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTA1LTA5ICBZb3No
aWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Zvcm1zXSBNb3Zl
IHN0ZXAgcmVsYXRlZCBtZXRob2RzIHRvIElucHV0VHlwZSBjbGFzcyBmcm9tIEhUTUxJbnB1dEVs
ZW1lbnQgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTg1OTc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBpcyBwYXJ0IG9mIHJlLWZhY3RvcmluZyBvZiBIVE1MSW5wdXRFbGVtZW50
LmNwcCBmb3IgbnVtZXJpYyBpbnB1dCB0eXBlLgorICAgICAgICBJbiB0aGlzIHBhdGNoLCB3ZSBt
b3ZlIGltcGxlbWVudGF0aW9uIG9mIGdldEFsbG93ZWRWYWx1ZVN0ZXAgYW5kIHN0ZXBVcC9zdGVw
VXBGcm9tUmVuZGVyZXIKKyAgICAgICAgdG8gSW5wdXRUeXBlIGNsYXNzIGJlY2F1c2Ugb2YgdGhl
c2UgYXJlIGZvciBEYXRlVGltZS9OdW1iZXIvUmFuZ2UuCisKKyAgICAgICAgRm9sbG93aW5nIHBh
dGNoZXMgd2lsbCBjaGFuZ2UgaW1wbGVtZW50YXRpb24gb2YgZ2V0QWxsb3dlZFZhbHVlU3RlcCB0
byB1c2UgU3RlcFJhbmdlIGFuZAorICAgICAgICByZW1vdmUgc3RlcCByZWxhdGVkIG1ldGhvZHMs
IGRlZmF1bHRTdGVwLCBzdGVwU2NhbGVGYWN0b3IsIGFuZCBzbyBvbi4KKworICAgICAgICBObyBu
ZXcgdGVzdHMuIFRoaXMgcGF0Y2ggc2hvdWxkIG5vdCBjaGFuZ2UgYmVoYXZpb3IuCisKKyAgICAg
ICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpnZXRBbGxvd2VkVmFsdWVTdGVwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnN0ZXBVcCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzdGVwRG93bik6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50OjpzdGVwVXBGcm9tUmVuZGVyZXIpOgorICAgICAgICAqIGh0bWwvSFRNTElu
cHV0RWxlbWVudC5oOgorICAgICAgICAoSFRNTElucHV0RWxlbWVudCk6CisgICAgICAgICogaHRt
bC9JbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjphcHBseVN0ZXAp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmFsaWdu
VmFsdWVGb3JTdGVwKToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6Z2V0QWxsb3dlZFZh
bHVlU3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmdldEFsbG93ZWRWYWx1ZVN0
ZXBXaXRoRGVjaW1hbFBsYWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OnN0ZXBV
cCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OnN0ZXBVcEZyb21SZW5kZXJlcik6Cisg
ICAgICAgICogaHRtbC9JbnB1dFR5cGUuaDoKKyAgICAgICAgKElucHV0VHlwZSk6CisKIDIwMTIt
MDUtMDkgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2No
cm9taXVtXSBEb24ndCBkcmF3IHdoZW4gY2FuRHJhdygpIGlzIGZhbHNlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAppbmRleCA5MWJmMzBkMzgxZGQ3ZmI5NTVjOGI0MWQ1
ZDdhYjk1ODlkMmNkZDhjLi5lZGQ2ZmFhY2Y1OGQ1N2YwMjIwZjljMDkwZTIyOTA1NDY0MWMxZGVm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAgLTI5OCwxMzYg
KzI5OCwxNyBAQCBTdHJpbmcgSFRNTElucHV0RWxlbWVudDo6dmFsdWVNaXNzaW5nVGV4dCgpIGNv
bnN0CiAKIGJvb2wgSFRNTElucHV0RWxlbWVudDo6Z2V0QWxsb3dlZFZhbHVlU3RlcChkb3VibGUq
IHN0ZXApIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEFsbG93ZWRWYWx1ZVN0ZXBXaXRoRGVjaW1h
bFBsYWNlcyhSZWplY3RBbnksIHN0ZXAsIDApOwotfQotCi1ib29sIEhUTUxJbnB1dEVsZW1lbnQ6
OmdldEFsbG93ZWRWYWx1ZVN0ZXBXaXRoRGVjaW1hbFBsYWNlcyhBbnlTdGVwSGFuZGxpbmcgYW55
U3RlcEhhbmRsaW5nLCBkb3VibGUqIHN0ZXAsIHVuc2lnbmVkKiBkZWNpbWFsUGxhY2VzKSBjb25z
dAotewotICAgIEFTU0VSVChzdGVwKTsKLSAgICBkb3VibGUgZGVmYXVsdFN0ZXAgPSBtX2lucHV0
VHlwZS0+ZGVmYXVsdFN0ZXAoKTsKLSAgICBkb3VibGUgc3RlcFNjYWxlRmFjdG9yID0gbV9pbnB1
dFR5cGUtPnN0ZXBTY2FsZUZhY3RvcigpOwotICAgIGlmICghaXNmaW5pdGUoZGVmYXVsdFN0ZXAp
IHx8ICFpc2Zpbml0ZShzdGVwU2NhbGVGYWN0b3IpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdGVwU3RyaW5nID0gZmFzdEdldEF0dHJpYnV0ZShzdGVw
QXR0cik7Ci0gICAgaWYgKHN0ZXBTdHJpbmcuaXNFbXB0eSgpKSB7Ci0gICAgICAgICpzdGVwID0g
ZGVmYXVsdFN0ZXAgKiBzdGVwU2NhbGVGYWN0b3I7Ci0gICAgICAgIGlmIChkZWNpbWFsUGxhY2Vz
KQotICAgICAgICAgICAgKmRlY2ltYWxQbGFjZXMgPSAwOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uoc3RlcFN0cmluZywgImFueSIpKSB7
Ci0gICAgICAgIHN3aXRjaCAoYW55U3RlcEhhbmRsaW5nKSB7Ci0gICAgICAgIGNhc2UgUmVqZWN0
QW55OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjYXNlIEFueUlzRGVmYXVs
dFN0ZXA6Ci0gICAgICAgICAgICAqc3RlcCA9IGRlZmF1bHRTdGVwICogc3RlcFNjYWxlRmFjdG9y
OwotICAgICAgICAgICAgaWYgKGRlY2ltYWxQbGFjZXMpCi0gICAgICAgICAgICAgICAgKmRlY2lt
YWxQbGFjZXMgPSAwOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGRvdWJsZSBwYXJzZWQ7Ci0gICAgaWYgKCFkZWNpbWFsUGxhY2VzKSB7Ci0gICAgICAgIGlm
ICghcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoc3RlcFN0cmluZywgJnBhcnNlZCkgfHwgcGFy
c2VkIDw9IDAuMCkgewotICAgICAgICAgICAgKnN0ZXAgPSBkZWZhdWx0U3RlcCAqIHN0ZXBTY2Fs
ZUZhY3RvcjsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgaWYgKCFwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZVdpdGhEZWNpbWFsUGxh
Y2VzKHN0ZXBTdHJpbmcsICZwYXJzZWQsIGRlY2ltYWxQbGFjZXMpIHx8IHBhcnNlZCA8PSAwLjAp
IHsKLSAgICAgICAgICAgICpzdGVwID0gZGVmYXVsdFN0ZXAgKiBzdGVwU2NhbGVGYWN0b3I7Ci0g
ICAgICAgICAgICAqZGVjaW1hbFBsYWNlcyA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotICAgIH0KLSAgICAvLyBGb3IgZGF0ZSwgbW9udGgsIHdlZWssIHRoZSBwYXJz
ZWQgdmFsdWUgc2hvdWxkIGJlIGFuIGludGVnZXIgZm9yIHNvbWUgdHlwZXMuCi0gICAgaWYgKG1f
aW5wdXRUeXBlLT5wYXJzZWRTdGVwVmFsdWVTaG91bGRCZUludGVnZXIoKSkKLSAgICAgICAgcGFy
c2VkID0gbWF4KHJvdW5kKHBhcnNlZCksIDEuMCk7Ci0gICAgZG91YmxlIHJlc3VsdCA9IHBhcnNl
ZCAqIHN0ZXBTY2FsZUZhY3RvcjsKLSAgICAvLyBGb3IgZGF0ZXRpbWUsIGRhdGV0aW1lLWxvY2Fs
LCB0aW1lLCB0aGUgcmVzdWx0IHNob3VsZCBiZSBhbiBpbnRlZ2VyLgotICAgIGlmIChtX2lucHV0
VHlwZS0+c2NhbGVkU3RlcFZhbHVlU2hvdWxkQmVJbnRlZ2VyKCkpCi0gICAgICAgIHJlc3VsdCA9
IG1heChyb3VuZChyZXN1bHQpLCAxLjApOwotICAgIEFTU0VSVChyZXN1bHQgPiAwKTsKLSAgICAq
c3RlcCA9IHJlc3VsdDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBIVE1MSW5wdXRFbGVt
ZW50OjphcHBseVN0ZXAoZG91YmxlIGNvdW50LCBBbnlTdGVwSGFuZGxpbmcgYW55U3RlcEhhbmRs
aW5nLCBUZXh0RmllbGRFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3IsIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIGRvdWJsZSBzdGVwOwotICAgIHVuc2lnbmVkIHN0ZXBEZWNpbWFsUGxhY2Vz
LCBjdXJyZW50RGVjaW1hbFBsYWNlczsKLSAgICBpZiAoIWdldEFsbG93ZWRWYWx1ZVN0ZXBXaXRo
RGVjaW1hbFBsYWNlcyhhbnlTdGVwSGFuZGxpbmcsICZzdGVwLCAmc3RlcERlY2ltYWxQbGFjZXMp
KSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBjb25zdCBkb3VibGUgbmFuID0gbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVp
ZXRfTmFOKCk7Ci0gICAgZG91YmxlIGN1cnJlbnQgPSBtX2lucHV0VHlwZS0+cGFyc2VUb0RvdWJs
ZVdpdGhEZWNpbWFsUGxhY2VzKHZhbHVlKCksIG5hbiwgJmN1cnJlbnREZWNpbWFsUGxhY2VzKTsK
LSAgICBpZiAoIWlzZmluaXRlKGN1cnJlbnQpKSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9TVEFU
RV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZG91YmxlIG5ld1ZhbHVlID0gY3Vy
cmVudCArIHN0ZXAgKiBjb3VudDsKLSAgICBpZiAoaXNpbmYobmV3VmFsdWUpKSB7Ci0gICAgICAg
IGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBk
b3VibGUgYWNjZXB0YWJsZUVycm9yID0gbV9pbnB1dFR5cGUtPmFjY2VwdGFibGVFcnJvcihzdGVw
KTsKLSAgICBpZiAobmV3VmFsdWUgLSBtX2lucHV0VHlwZS0+bWluaW11bSgpIDwgLWFjY2VwdGFi
bGVFcnJvcikgewotICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGlmIChuZXdWYWx1ZSA8IG1faW5wdXRUeXBlLT5taW5pbXVtKCkpCi0g
ICAgICAgIG5ld1ZhbHVlID0gbV9pbnB1dFR5cGUtPm1pbmltdW0oKTsKLQotICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgc3RlcFN0cmluZyA9IGZhc3RHZXRBdHRyaWJ1dGUoc3RlcEF0dHIpOwotICAg
IGlmICghZXF1YWxJZ25vcmluZ0Nhc2Uoc3RlcFN0cmluZywgImFueSIpKQotICAgICAgICBuZXdW
YWx1ZSA9IGFsaWduVmFsdWVGb3JTdGVwKG5ld1ZhbHVlLCBzdGVwLCBjdXJyZW50RGVjaW1hbFBs
YWNlcywgc3RlcERlY2ltYWxQbGFjZXMpOwotCi0gICAgaWYgKG5ld1ZhbHVlIC0gbV9pbnB1dFR5
cGUtPm1heGltdW0oKSA+IGFjY2VwdGFibGVFcnJvcikgewotICAgICAgICBlYyA9IElOVkFMSURf
U1RBVEVfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChuZXdWYWx1ZSA+IG1f
aW5wdXRUeXBlLT5tYXhpbXVtKCkpCi0gICAgICAgIG5ld1ZhbHVlID0gbV9pbnB1dFR5cGUtPm1h
eGltdW0oKTsKLQotICAgIHNldFZhbHVlQXNOdW1iZXIobmV3VmFsdWUsIGVjLCBldmVudEJlaGF2
aW9yKTsKLQotICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQot
ICAgICAgICAgZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5wb3N0Tm90aWZpY2F0aW9uKHJl
bmRlcmVyKCksIEFYT2JqZWN0Q2FjaGU6OkFYVmFsdWVDaGFuZ2VkLCB0cnVlKTsKLX0KLQotZG91
YmxlIEhUTUxJbnB1dEVsZW1lbnQ6OmFsaWduVmFsdWVGb3JTdGVwKGRvdWJsZSBuZXdWYWx1ZSwg
ZG91YmxlIHN0ZXAsIHVuc2lnbmVkIGN1cnJlbnREZWNpbWFsUGxhY2VzLCB1bnNpZ25lZCBzdGVw
RGVjaW1hbFBsYWNlcykKLXsKLSAgICBpZiAobmV3VmFsdWUgPj0gcG93KDEwLjAsIDIxLjApKQot
ICAgICAgICByZXR1cm4gbmV3VmFsdWU7Ci0KLSAgICB1bnNpZ25lZCBiYXNlRGVjaW1hbFBsYWNl
czsKLSAgICBkb3VibGUgYmFzZSA9IG1faW5wdXRUeXBlLT5zdGVwQmFzZVdpdGhEZWNpbWFsUGxh
Y2VzKCZiYXNlRGVjaW1hbFBsYWNlcyk7Ci0gICAgYmFzZURlY2ltYWxQbGFjZXMgPSBtaW4oYmFz
ZURlY2ltYWxQbGFjZXMsIDE2dSk7Ci0gICAgaWYgKHN0ZXBNaXNtYXRjaCh2YWx1ZSgpKSkgewot
ICAgICAgICBkb3VibGUgc2NhbGUgPSBwb3coMTAuMCwgc3RhdGljX2Nhc3Q8ZG91YmxlPihtYXgo
c3RlcERlY2ltYWxQbGFjZXMsIGN1cnJlbnREZWNpbWFsUGxhY2VzKSkpOwotICAgICAgICBuZXdW
YWx1ZSA9IHJvdW5kKG5ld1ZhbHVlICogc2NhbGUpIC8gc2NhbGU7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgZG91YmxlIHNjYWxlID0gcG93KDEwLjAsIHN0YXRpY19jYXN0PGRvdWJsZT4obWF4KHN0
ZXBEZWNpbWFsUGxhY2VzLCBiYXNlRGVjaW1hbFBsYWNlcykpKTsKLSAgICAgICAgbmV3VmFsdWUg
PSByb3VuZCgoYmFzZSArIHJvdW5kKChuZXdWYWx1ZSAtIGJhc2UpIC8gc3RlcCkgKiBzdGVwKSAq
IHNjYWxlKSAvIHNjYWxlOwotICAgIH0KLQotICAgIHJldHVybiBuZXdWYWx1ZTsKKyAgICByZXR1
cm4gbV9pbnB1dFR5cGUtPmdldEFsbG93ZWRWYWx1ZVN0ZXAoc3RlcCk7CiB9CiAKIHZvaWQgSFRN
TElucHV0RWxlbWVudDo6c3RlcFVwKGludCBuLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBh
cHBseVN0ZXAobiwgUmVqZWN0QW55LCBEaXNwYXRjaE5vRXZlbnQsIGVjKTsKKyAgICBtX2lucHV0
VHlwZS0+c3RlcFVwKG4sIGVjKTsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzdGVwRG93
bihpbnQgbiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgYXBwbHlTdGVwKC1uLCBSZWplY3RB
bnksIERpc3BhdGNoTm9FdmVudCwgZWMpOworICAgIG1faW5wdXRUeXBlLT5zdGVwVXAoLW4sIGVj
KTsKIH0KIAogYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJv
YXJkRXZlbnQqIGV2ZW50KSBjb25zdApAQCAtMTU1MywxMDggKzE0MzQsNyBAQCBib29sIEhUTUxJ
bnB1dEVsZW1lbnQ6OmlzU3RlcHBhYmxlKCkgY29uc3QKIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50
OjpzdGVwVXBGcm9tUmVuZGVyZXIoaW50IG4pCiB7Ci0gICAgLy8gVGhlIGRpZmZlcmVuY2VzIGZy
b20gc3RlcFVwKCkvc3RlcERvd24oKToKLSAgICAvLwotICAgIC8vIERpZmZlcmVuY2UgMTogdGhl
IGN1cnJlbnQgdmFsdWUKLSAgICAvLyBJZiB0aGUgY3VycmVudCB2YWx1ZSBpcyBub3QgYSBudW1i
ZXIsIGluY2x1ZGluZyBlbXB0eSwgdGhlIGN1cnJlbnQgdmFsdWUgaXMgYXNzdW1lZCBhcyAwLgot
ICAgIC8vICAgKiBJZiAwIGlzIGluLXJhbmdlLCBhbmQgbWF0Y2hlcyB0byBzdGVwIHZhbHVlCi0g
ICAgLy8gICAgIC0gVGhlIHZhbHVlIHNob3VsZCBiZSB0aGUgK3N0ZXAgaWYgbiA+IDAKLSAgICAv
LyAgICAgLSBUaGUgdmFsdWUgc2hvdWxkIGJlIHRoZSAtc3RlcCBpZiBuIDwgMAotICAgIC8vICAg
ICBJZiAtc3RlcCBvciArc3RlcCBpcyBvdXQgb2YgcmFuZ2UsIG5ldyB2YWx1ZSBzaG91bGQgYmUg
MC4KLSAgICAvLyAgICogSWYgMCBpcyBzbWFsbGVyIHRoYW4gdGhlIG1pbmltdW0gdmFsdWUKLSAg
ICAvLyAgICAgLSBUaGUgdmFsdWUgc2hvdWxkIGJlIHRoZSBtaW5pbXVtIHZhbHVlIGZvciBhbnkg
bgotICAgIC8vICAgKiBJZiAwIGlzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHZhbHVlCi0gICAg
Ly8gICAgIC0gVGhlIHZhbHVlIHNob3VsZCBiZSB0aGUgbWF4aW11bSB2YWx1ZSBmb3IgYW55IG4K
LSAgICAvLyAgICogSWYgMCBpcyBpbi1yYW5nZSwgYnV0IG5vdCBtYXRjaGVkIHRvIHN0ZXAgdmFs
dWUKLSAgICAvLyAgICAgLSBUaGUgdmFsdWUgc2hvdWxkIGJlIHRoZSBsYXJnZXIgbWF0Y2hlZCB2
YWx1ZSBuZWFyZXN0IHRvIDAgaWYgbiA+IDAKLSAgICAvLyAgICAgICBlLmcuIDxpbnB1dCB0eXBl
PW51bWJlciBtaW49LTEwMCBzdGVwPTM+IC0+IDIKLSAgICAvLyAgICAgLSBUaGUgdmFsdWUgc2hv
dWxkIGJlIHRoZSBzbWFsZXIgbWF0Y2hlZCB2YWx1ZSBuZWFyZXN0IHRvIDAgaWYgbiA8IDAKLSAg
ICAvLyAgICAgICBlLmcuIDxpbnB1dCB0eXBlPW51bWJlciBtaW49LTEwMCBzdGVwPTM+IC0+IC0x
Ci0gICAgLy8gICBBcyBmb3IgZGF0ZS9kYXRldGltZS1sb2NhbC9tb250aC90aW1lL3dlZWsgdHlw
ZXMsIHRoZSBjdXJyZW50IHZhbHVlIGlzIGFzc3VtZWQgYXMgInRoZSBjdXJyZW50IGxvY2FsIGRh
dGUvdGltZSIuCi0gICAgLy8gICBBcyBmb3IgZGF0ZXRpbWUgdHlwZSwgdGhlIGN1cnJlbnQgdmFs
dWUgaXMgYXNzdW1lZCBhcyAidGhlIGN1cnJlbnQgZGF0ZS90aW1lIGluIFVUQyIuCi0gICAgLy8g
SWYgdGhlIGN1cnJlbnQgdmFsdWUgaXMgc21hbGxlciB0aGFuIHRoZSBtaW5pbXVtIHZhbHVlOgot
ICAgIC8vICAtIFRoZSB2YWx1ZSBzaG91bGQgYmUgdGhlIG1pbmltdW0gdmFsdWUgaWYgbiA+IDAK
LSAgICAvLyAgLSBOb3RoaW5nIHNob3VsZCBoYXBwZW4gaWYgbiA8IDAKLSAgICAvLyBJZiB0aGUg
Y3VycmVudCB2YWx1ZSBpcyBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSB2YWx1ZToKLSAgICAvLyAg
LSBUaGUgdmFsdWUgc2hvdWxkIGJlIHRoZSBtYXhpbXVtIHZhbHVlIGlmIG4gPCAwCi0gICAgLy8g
IC0gTm90aGluZyBzaG91bGQgaGFwcGVuIGlmIG4gPiAwCi0gICAgLy8KLSAgICAvLyBEaWZmZXJl
bmNlIDI6IGNsYW1waW5nIHN0ZXBzCi0gICAgLy8gSWYgdGhlIGN1cnJlbnQgdmFsdWUgaXMgbm90
IG1hdGNoZWQgdG8gc3RlcCB2YWx1ZToKLSAgICAvLyAtIFRoZSB2YWx1ZSBzaG91bGQgYmUgdGhl
IGxhcmdlciBtYXRjaGVkIHZhbHVlIG5lYXJlc3QgdG8gMCBpZiBuID4gMAotICAgIC8vICAgZS5n
LiA8aW5wdXQgdHlwZT1udW1iZXIgdmFsdWU9MyBtaW49LTEwMCBzdGVwPTM+IC0+IDUKLSAgICAv
LyAtIFRoZSB2YWx1ZSBzaG91bGQgYmUgdGhlIHNtYWxlciBtYXRjaGVkIHZhbHVlIG5lYXJlc3Qg
dG8gMCBpZiBuIDwgMAotICAgIC8vICAgZS5nLiA8aW5wdXQgdHlwZT1udW1iZXIgdmFsdWU9MyBt
aW49LTEwMCBzdGVwPTM+IC0+IDIKLSAgICAvLwotICAgIC8vIG4gaXMgYXNzdW1lZCBhcyAtbiBp
ZiBzdGVwIDwgMC4KLQotICAgIEFTU0VSVChpc1N0ZXBwYWJsZSgpKTsKLSAgICBpZiAoIWlzU3Rl
cHBhYmxlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQobik7Ci0gICAgaWYgKCFuKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBzdGVwRGVjaW1hbFBsYWNlcywgYmFzZURl
Y2ltYWxQbGFjZXM7Ci0gICAgZG91YmxlIHN0ZXAsIGJhc2U7Ci0gICAgLy8gRklYTUU6IE5vdCBh
bnkgY2hhbmdlcyBhZnRlciBzdGVwcGluZywgZXZlbiBpZiBpdCBpcyBhbiBpbnZhbGlkIHZhbHVl
LCBtYXkgYmUgYmV0dGVyLgotICAgIC8vIChlLmcuIFN0ZXBwaW5nLXVwIGZvciA8aW5wdXQgdHlw
ZT0ibnVtYmVyIiB2YWx1ZT0iZm9vIiBzdGVwPSJhbnkiIC8+ID0+ICJmb28iKQotICAgIGlmICgh
Z2V0QWxsb3dlZFZhbHVlU3RlcFdpdGhEZWNpbWFsUGxhY2VzKEFueUlzRGVmYXVsdFN0ZXAsICZz
dGVwLCAmc3RlcERlY2ltYWxQbGFjZXMpKQotICAgICAgcmV0dXJuOwotICAgIGJhc2UgPSBtX2lu
cHV0VHlwZS0+c3RlcEJhc2VXaXRoRGVjaW1hbFBsYWNlcygmYmFzZURlY2ltYWxQbGFjZXMpOwot
ICAgIGJhc2VEZWNpbWFsUGxhY2VzID0gbWluKGJhc2VEZWNpbWFsUGxhY2VzLCAxNnUpOwotCi0g
ICAgaW50IHNpZ247Ci0gICAgaWYgKHN0ZXAgPiAwKQotICAgICAgICBzaWduID0gbjsKLSAgICBl
bHNlIGlmIChzdGVwIDwgMCkKLSAgICAgICAgc2lnbiA9IC1uOwotICAgIGVsc2UKLSAgICAgICAg
c2lnbiA9IDA7Ci0KLSAgICBjb25zdCBkb3VibGUgbmFuID0gbnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6cXVpZXRfTmFOKCk7Ci0gICAgU3RyaW5nIGN1cnJlbnRTdHJpbmdWYWx1ZSA9IHZhbHVlKCk7
Ci0gICAgZG91YmxlIGN1cnJlbnQgPSBtX2lucHV0VHlwZS0+cGFyc2VUb0RvdWJsZShjdXJyZW50
U3RyaW5nVmFsdWUsIG5hbik7Ci0gICAgaWYgKCFpc2Zpbml0ZShjdXJyZW50KSkgewotICAgICAg
ICBFeGNlcHRpb25Db2RlIGVjOwotICAgICAgICBjdXJyZW50ID0gbV9pbnB1dFR5cGUtPmRlZmF1
bHRWYWx1ZUZvclN0ZXBVcCgpOwotICAgICAgICBkb3VibGUgbmV4dERpZmYgPSBzdGVwICogbjsK
LSAgICAgICAgaWYgKGN1cnJlbnQgPCBtX2lucHV0VHlwZS0+bWluaW11bSgpIC0gbmV4dERpZmYp
Ci0gICAgICAgICAgICBjdXJyZW50ID0gbV9pbnB1dFR5cGUtPm1pbmltdW0oKSAtIG5leHREaWZm
OwotICAgICAgICBpZiAoY3VycmVudCA+IG1faW5wdXRUeXBlLT5tYXhpbXVtKCkgLSBuZXh0RGlm
ZikKLSAgICAgICAgICAgIGN1cnJlbnQgPSBtX2lucHV0VHlwZS0+bWF4aW11bSgpIC0gbmV4dERp
ZmY7Ci0gICAgICAgIHNldFZhbHVlQXNOdW1iZXIoY3VycmVudCwgZWMsIERpc3BhdGNoSW5wdXRB
bmRDaGFuZ2VFdmVudCk7Ci0gICAgfQotICAgIGlmICgoc2lnbiA+IDAgJiYgY3VycmVudCA8IG1f
aW5wdXRUeXBlLT5taW5pbXVtKCkpIHx8IChzaWduIDwgMCAmJiBjdXJyZW50ID4gbV9pbnB1dFR5
cGUtPm1heGltdW0oKSkpCi0gICAgICAgIHNldFZhbHVlKG1faW5wdXRUeXBlLT5zZXJpYWxpemUo
c2lnbiA+IDAgPyBtX2lucHV0VHlwZS0+bWluaW11bSgpIDogbV9pbnB1dFR5cGUtPm1heGltdW0o
KSksIERpc3BhdGNoSW5wdXRBbmRDaGFuZ2VFdmVudCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEV4
Y2VwdGlvbkNvZGUgZWM7Ci0gICAgICAgIGlmIChzdGVwTWlzbWF0Y2godmFsdWUoKSkpIHsKLSAg
ICAgICAgICAgIEFTU0VSVChzdGVwKTsKLSAgICAgICAgICAgIGRvdWJsZSBuZXdWYWx1ZTsKLSAg
ICAgICAgICAgIGRvdWJsZSBzY2FsZSA9IHBvdygxMC4wLCBzdGF0aWNfY2FzdDxkb3VibGU+KG1h
eChzdGVwRGVjaW1hbFBsYWNlcywgYmFzZURlY2ltYWxQbGFjZXMpKSk7Ci0KLSAgICAgICAgICAg
IGlmIChzaWduIDwgMCkKLSAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IHJvdW5kKChiYXNlICsg
Zmxvb3IoKGN1cnJlbnQgLSBiYXNlKSAvIHN0ZXApICogc3RlcCkgKiBzY2FsZSkgLyBzY2FsZTsK
LSAgICAgICAgICAgIGVsc2UgaWYgKHNpZ24gPiAwKQotICAgICAgICAgICAgICAgIG5ld1ZhbHVl
ID0gcm91bmQoKGJhc2UgKyBjZWlsKChjdXJyZW50IC0gYmFzZSkgLyBzdGVwKSAqIHN0ZXApICog
c2NhbGUpIC8gc2NhbGU7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbmV3VmFs
dWUgPSBjdXJyZW50OwotCi0gICAgICAgICAgICBpZiAobmV3VmFsdWUgPCBtX2lucHV0VHlwZS0+
bWluaW11bSgpKQotICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gbV9pbnB1dFR5cGUtPm1pbmlt
dW0oKTsKLSAgICAgICAgICAgIGlmIChuZXdWYWx1ZSA+IG1faW5wdXRUeXBlLT5tYXhpbXVtKCkp
Ci0gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBtX2lucHV0VHlwZS0+bWF4aW11bSgpOwotCi0g
ICAgICAgICAgICBzZXRWYWx1ZUFzTnVtYmVyKG5ld1ZhbHVlLCBlYywgbiA9PSAxIHx8IG4gPT0g
LTEgPyBEaXNwYXRjaElucHV0QW5kQ2hhbmdlRXZlbnQgOiBEaXNwYXRjaE5vRXZlbnQpOwotICAg
ICAgICAgICAgY3VycmVudCA9IG5ld1ZhbHVlOwotICAgICAgICAgICAgaWYgKG4gPiAxKQotICAg
ICAgICAgICAgICAgIGFwcGx5U3RlcChuIC0gMSwgQW55SXNEZWZhdWx0U3RlcCwgRGlzcGF0Y2hJ
bnB1dEFuZENoYW5nZUV2ZW50LCBlYyk7Ci0gICAgICAgICAgICBlbHNlIGlmIChuIDwgLTEpCi0g
ICAgICAgICAgICAgICAgYXBwbHlTdGVwKG4gKyAxLCBBbnlJc0RlZmF1bHRTdGVwLCBEaXNwYXRj
aElucHV0QW5kQ2hhbmdlRXZlbnQsIGVjKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBh
cHBseVN0ZXAobiwgQW55SXNEZWZhdWx0U3RlcCwgRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50
LCBlYyk7Ci0gICAgfQorICAgIG1faW5wdXRUeXBlLT5zdGVwVXBGcm9tUmVuZGVyZXIobik7CiB9
CiAKICNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQpAQCAtMTc0MiwzNiArMTUyMiw2IEBAIGJvb2wg
SFRNTElucHV0RWxlbWVudDo6aXNVUkxGaWVsZCgpIGNvbnN0CiAgICAgcmV0dXJuIG1faW5wdXRU
eXBlLT5pc1VSTEZpZWxkKCk7CiB9CiAKLWJvb2wgSFRNTElucHV0RWxlbWVudDo6aXNEYXRlRmll
bGQoKSBjb25zdAotewotICAgIHJldHVybiBtX2lucHV0VHlwZS0+aXNEYXRlRmllbGQoKTsKLX0K
LQotYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojppc0RhdGVUaW1lRmllbGQoKSBjb25zdAotewotICAg
IHJldHVybiBtX2lucHV0VHlwZS0+aXNEYXRlVGltZUZpZWxkKCk7Ci19Ci0KLWJvb2wgSFRNTElu
cHV0RWxlbWVudDo6aXNEYXRlVGltZUxvY2FsRmllbGQoKSBjb25zdAotewotICAgIHJldHVybiBt
X2lucHV0VHlwZS0+aXNEYXRlVGltZUxvY2FsRmllbGQoKTsKLX0KLQotYm9vbCBIVE1MSW5wdXRF
bGVtZW50Ojppc01vbnRoRmllbGQoKSBjb25zdAotewotICAgIHJldHVybiBtX2lucHV0VHlwZS0+
aXNNb250aEZpZWxkKCk7Ci19Ci0KLWJvb2wgSFRNTElucHV0RWxlbWVudDo6aXNUaW1lRmllbGQo
KSBjb25zdAotewotICAgIHJldHVybiBtX2lucHV0VHlwZS0+aXNUaW1lRmllbGQoKTsKLX0KLQot
Ym9vbCBIVE1MSW5wdXRFbGVtZW50Ojppc1dlZWtGaWVsZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1faW5wdXRUeXBlLT5pc1dlZWtGaWVsZCgpOwotfQotCiBib29sIEhUTUxJbnB1dEVsZW1lbnQ6
OmlzRW51bWVyYXRhYmxlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbnB1dFR5cGUtPmlzRW51
bWVyYXRhYmxlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCmluZGV4IDE1
ZjQ5N2M0MzNmNjZkNjIxNWMwYmQwNmQ0OWM0YmJjNTU3N2FhZTguLmFiNDc1YjI0OWFlYWMwNDEx
MGQwZDI2Yzc5NjdmZTEzN2U5MGI3YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTElucHV0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5oCkBAIC0yNTUsNyArMjU1LDYgQEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAgIGVu
dW0gQXV0b0NvbXBsZXRlU2V0dGluZyB7IFVuaW5pdGlhbGl6ZWQsIE9uLCBPZmYgfTsKLSAgICBl
bnVtIEFueVN0ZXBIYW5kbGluZyB7IFJlamVjdEFueSwgQW55SXNEZWZhdWx0U3RlcCB9OwogCiAg
ICAgdmlydHVhbCB2b2lkIHdpbGxDaGFuZ2VGb3JtKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2
b2lkIGRpZENoYW5nZUZvcm0oKSBPVkVSUklERTsKQEAgLTMzOSwxMSArMzM4LDYgQEAgcHJpdmF0
ZToKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgc3VidHJlZUhhc0NoYW5nZWQoKTsKIAotICAgIGJv
b2wgZ2V0QWxsb3dlZFZhbHVlU3RlcFdpdGhEZWNpbWFsUGxhY2VzKEFueVN0ZXBIYW5kbGluZywg
ZG91YmxlKiwgdW5zaWduZWQqKSBjb25zdDsKLQotICAgIC8vIEhlbHBlciBmb3Igc3RlcFVwKCkv
c3RlcERvd24oKS4gIEFkZHMgc3RlcCB2YWx1ZSAqIGNvdW50IHRvIHRoZSBjdXJyZW50IHZhbHVl
LgotICAgIHZvaWQgYXBwbHlTdGVwKGRvdWJsZSBjb3VudCwgQW55U3RlcEhhbmRsaW5nLCBUZXh0
RmllbGRFdmVudEJlaGF2aW9yLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgZG91YmxlIGFsaWduVmFs
dWVGb3JTdGVwKGRvdWJsZSB2YWx1ZSwgZG91YmxlIHN0ZXAsIHVuc2lnbmVkIGN1cnJlbnREZWNp
bWFsUGxhY2VzLCB1bnNpZ25lZCBzdGVwRGVjaW1hbFBsYWNlcyk7CiAKICNpZiBFTkFCTEUoREFU
QUxJU1QpCiAgICAgSFRNTERhdGFMaXN0RWxlbWVudCogZGF0YUxpc3QoKSBjb25zdDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSW5wdXRUeXBlLmNwcAppbmRleCA4NGUwZWIwZTZhYWU0MjBjMzgzOGYzOTM1OTg2NGRh
ZWU3NWE0Y2Y2Li45OTcxODJhYmFlN2Q0NGJmYjcwNzlhNGJhODRjN2VkOTQ1YTk1N2YyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCkBAIC01LDcgKzUsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJv
c2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdl
aW5pZyAoc2FtQHdlYmtpdC5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIklucHV0
VHlwZS5oIgogCisjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkJlZm9yZVRl
eHRJbnNlcnRlZEV2ZW50LmgiCiAjaW5jbHVkZSAiQnV0dG9uSW5wdXRUeXBlLmgiCiAjaW5jbHVk
ZSAiQ2hlY2tib3hJbnB1dFR5cGUuaCIKQEAgLTgxNSw2ICs4MTYsMjQxIEBAIHVuc2lnbmVkIElu
cHV0VHlwZTo6d2lkdGgoKSBjb25zdAogICAgIHJldHVybiAwOwogfQogCit2b2lkIElucHV0VHlw
ZTo6YXBwbHlTdGVwKGRvdWJsZSBjb3VudCwgQW55U3RlcEhhbmRsaW5nIGFueVN0ZXBIYW5kbGlu
ZywgVGV4dEZpZWxkRXZlbnRCZWhhdmlvciBldmVudEJlaGF2aW9yLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBkb3VibGUgc3RlcDsKKyAgICB1bnNpZ25lZCBzdGVwRGVjaW1hbFBsYWNlcywg
Y3VycmVudERlY2ltYWxQbGFjZXM7CisgICAgaWYgKCFnZXRBbGxvd2VkVmFsdWVTdGVwV2l0aERl
Y2ltYWxQbGFjZXMoYW55U3RlcEhhbmRsaW5nLCAmc3RlcCwgJnN0ZXBEZWNpbWFsUGxhY2VzKSkg
eworICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgY29uc3QgZG91YmxlIG5hbiA9IG51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0
X05hTigpOworICAgIGRvdWJsZSBjdXJyZW50ID0gcGFyc2VUb0RvdWJsZVdpdGhEZWNpbWFsUGxh
Y2VzKGVsZW1lbnQoKS0+dmFsdWUoKSwgbmFuLCAmY3VycmVudERlY2ltYWxQbGFjZXMpOworICAg
IGlmICghaXNmaW5pdGUoY3VycmVudCkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VS
UjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBkb3VibGUgbmV3VmFsdWUgPSBjdXJyZW50
ICsgc3RlcCAqIGNvdW50OworICAgIGlmIChpc2luZihuZXdWYWx1ZSkpIHsKKyAgICAgICAgZWMg
PSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRvdWJs
ZSBhY2NlcHRhYmxlRXJyb3JWYWx1ZSA9IGFjY2VwdGFibGVFcnJvcihzdGVwKTsKKyAgICBpZiAo
bmV3VmFsdWUgLSBtaW5pbXVtKCkgPCAtYWNjZXB0YWJsZUVycm9yVmFsdWUpIHsKKyAgICAgICAg
ZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAo
bmV3VmFsdWUgPCBtaW5pbXVtKCkpCisgICAgICAgIG5ld1ZhbHVlID0gbWluaW11bSgpOworCisg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdGVwU3RyaW5nID0gZWxlbWVudCgpLT5mYXN0R2V0QXR0
cmlidXRlKHN0ZXBBdHRyKTsKKyAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKHN0ZXBTdHJpbmcs
ICJhbnkiKSkKKyAgICAgICAgbmV3VmFsdWUgPSBhbGlnblZhbHVlRm9yU3RlcChuZXdWYWx1ZSwg
c3RlcCwgY3VycmVudERlY2ltYWxQbGFjZXMsIHN0ZXBEZWNpbWFsUGxhY2VzKTsKKworICAgIGlm
IChuZXdWYWx1ZSAtIG1heGltdW0oKSA+IGFjY2VwdGFibGVFcnJvclZhbHVlKSB7CisgICAgICAg
IGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg
KG5ld1ZhbHVlID4gbWF4aW11bSgpKQorICAgICAgICBuZXdWYWx1ZSA9IG1heGltdW0oKTsKKwor
ICAgIGVsZW1lbnQoKS0+c2V0VmFsdWVBc051bWJlcihuZXdWYWx1ZSwgZWMsIGV2ZW50QmVoYXZp
b3IpOworCisgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCisg
ICAgICAgICBlbGVtZW50KCktPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+cG9zdE5vdGlm
aWNhdGlvbihlbGVtZW50KCktPnJlbmRlcmVyKCksIEFYT2JqZWN0Q2FjaGU6OkFYVmFsdWVDaGFu
Z2VkLCB0cnVlKTsKK30KKworZG91YmxlIElucHV0VHlwZTo6YWxpZ25WYWx1ZUZvclN0ZXAoZG91
YmxlIG5ld1ZhbHVlLCBkb3VibGUgc3RlcCwgdW5zaWduZWQgY3VycmVudERlY2ltYWxQbGFjZXMs
IHVuc2lnbmVkIHN0ZXBEZWNpbWFsUGxhY2VzKQoreworICAgIGlmIChuZXdWYWx1ZSA+PSBwb3co
MTAuMCwgMjEuMCkpCisgICAgICAgIHJldHVybiBuZXdWYWx1ZTsKKworICAgIHVuc2lnbmVkIGJh
c2VEZWNpbWFsUGxhY2VzOworICAgIGRvdWJsZSBiYXNlID0gc3RlcEJhc2VXaXRoRGVjaW1hbFBs
YWNlcygmYmFzZURlY2ltYWxQbGFjZXMpOworICAgIGJhc2VEZWNpbWFsUGxhY2VzID0gbWluKGJh
c2VEZWNpbWFsUGxhY2VzLCAxNnUpOworICAgIGlmIChlbGVtZW50KCktPnN0ZXBNaXNtYXRjaChl
bGVtZW50KCktPnZhbHVlKCkpKSB7CisgICAgICAgIGRvdWJsZSBzY2FsZSA9IHBvdygxMC4wLCBz
dGF0aWNfY2FzdDxkb3VibGU+KG1heChzdGVwRGVjaW1hbFBsYWNlcywgY3VycmVudERlY2ltYWxQ
bGFjZXMpKSk7CisgICAgICAgIG5ld1ZhbHVlID0gcm91bmQobmV3VmFsdWUgKiBzY2FsZSkgLyBz
Y2FsZTsKKyAgICB9IGVsc2UgeworICAgICAgICBkb3VibGUgc2NhbGUgPSBwb3coMTAuMCwgc3Rh
dGljX2Nhc3Q8ZG91YmxlPihtYXgoc3RlcERlY2ltYWxQbGFjZXMsIGJhc2VEZWNpbWFsUGxhY2Vz
KSkpOworICAgICAgICBuZXdWYWx1ZSA9IHJvdW5kKChiYXNlICsgcm91bmQoKG5ld1ZhbHVlIC0g
YmFzZSkgLyBzdGVwKSAqIHN0ZXApICogc2NhbGUpIC8gc2NhbGU7CisgICAgfQorCisgICAgcmV0
dXJuIG5ld1ZhbHVlOworfQorCitib29sIElucHV0VHlwZTo6Z2V0QWxsb3dlZFZhbHVlU3RlcChk
b3VibGUqIHN0ZXApIGNvbnN0Cit7CisgICAgcmV0dXJuIGdldEFsbG93ZWRWYWx1ZVN0ZXBXaXRo
RGVjaW1hbFBsYWNlcyhSZWplY3RBbnksIHN0ZXAsIDApOworfQorCitib29sIElucHV0VHlwZTo6
Z2V0QWxsb3dlZFZhbHVlU3RlcFdpdGhEZWNpbWFsUGxhY2VzKEFueVN0ZXBIYW5kbGluZyBhbnlT
dGVwSGFuZGxpbmcsIGRvdWJsZSogc3RlcCwgdW5zaWduZWQqIGRlY2ltYWxQbGFjZXMpIGNvbnN0
Cit7CisgICAgQVNTRVJUKHN0ZXApOworICAgIGRvdWJsZSBkZWZhdWx0U3RlcFZhbHVlID0gZGVm
YXVsdFN0ZXAoKTsKKyAgICBkb3VibGUgc3RlcFNjYWxlRmFjdG9yVmFsdWUgPSBzdGVwU2NhbGVG
YWN0b3IoKTsKKyAgICBpZiAoIWlzZmluaXRlKGRlZmF1bHRTdGVwVmFsdWUpIHx8ICFpc2Zpbml0
ZShzdGVwU2NhbGVGYWN0b3JWYWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb25z
dCBBdG9taWNTdHJpbmcmIHN0ZXBTdHJpbmcgPSBlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUo
c3RlcEF0dHIpOworICAgIGlmIChzdGVwU3RyaW5nLmlzRW1wdHkoKSkgeworICAgICAgICAqc3Rl
cCA9IGRlZmF1bHRTdGVwVmFsdWUgKiBzdGVwU2NhbGVGYWN0b3JWYWx1ZTsKKyAgICAgICAgaWYg
KGRlY2ltYWxQbGFjZXMpCisgICAgICAgICAgICAqZGVjaW1hbFBsYWNlcyA9IDA7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShzdGVwU3Ry
aW5nLCAiYW55IikpIHsKKyAgICAgICAgc3dpdGNoIChhbnlTdGVwSGFuZGxpbmcpIHsKKyAgICAg
ICAgY2FzZSBSZWplY3RBbnk6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNh
c2UgQW55SXNEZWZhdWx0U3RlcDoKKyAgICAgICAgICAgICpzdGVwID0gZGVmYXVsdFN0ZXBWYWx1
ZSAqIHN0ZXBTY2FsZUZhY3RvclZhbHVlOworICAgICAgICAgICAgaWYgKGRlY2ltYWxQbGFjZXMp
CisgICAgICAgICAgICAgICAgKmRlY2ltYWxQbGFjZXMgPSAwOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGRvdWJsZSBwYXJzZWQ7CisgICAgaWYgKCFkZWNp
bWFsUGxhY2VzKSB7CisgICAgICAgIGlmICghcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoc3Rl
cFN0cmluZywgJnBhcnNlZCkgfHwgcGFyc2VkIDw9IDAuMCkgeworICAgICAgICAgICAgKnN0ZXAg
PSBkZWZhdWx0U3RlcFZhbHVlICogc3RlcFNjYWxlRmFjdG9yVmFsdWU7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghcGFyc2VU
b0RvdWJsZUZvck51bWJlclR5cGVXaXRoRGVjaW1hbFBsYWNlcyhzdGVwU3RyaW5nLCAmcGFyc2Vk
LCBkZWNpbWFsUGxhY2VzKSB8fCBwYXJzZWQgPD0gMC4wKSB7CisgICAgICAgICAgICAqc3RlcCA9
IGRlZmF1bHRTdGVwVmFsdWUgKiBzdGVwU2NhbGVGYWN0b3JWYWx1ZTsKKyAgICAgICAgICAgICpk
ZWNpbWFsUGxhY2VzID0gMDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgfQorICAgIC8vIEZvciBkYXRlLCBtb250aCwgd2VlaywgdGhlIHBhcnNlZCB2YWx1ZSBzaG91
bGQgYmUgYW4gaW50ZWdlciBmb3Igc29tZSB0eXBlcy4KKyAgICBpZiAocGFyc2VkU3RlcFZhbHVl
U2hvdWxkQmVJbnRlZ2VyKCkpCisgICAgICAgIHBhcnNlZCA9IG1heChyb3VuZChwYXJzZWQpLCAx
LjApOworICAgIGRvdWJsZSByZXN1bHQgPSBwYXJzZWQgKiBzdGVwU2NhbGVGYWN0b3JWYWx1ZTsK
KyAgICAvLyBGb3IgZGF0ZXRpbWUsIGRhdGV0aW1lLWxvY2FsLCB0aW1lLCB0aGUgcmVzdWx0IHNo
b3VsZCBiZSBhbiBpbnRlZ2VyLgorICAgIGlmIChzY2FsZWRTdGVwVmFsdWVTaG91bGRCZUludGVn
ZXIoKSkKKyAgICAgICAgcmVzdWx0ID0gbWF4KHJvdW5kKHJlc3VsdCksIDEuMCk7CisgICAgQVNT
RVJUKHJlc3VsdCA+IDApOworICAgICpzdGVwID0gcmVzdWx0OworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIElucHV0VHlwZTo6c3RlcFVwKGludCBuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBhcHBseVN0ZXAobiwgUmVqZWN0QW55LCBEaXNwYXRjaE5vRXZlbnQsIGVjKTsKK30KKwor
dm9pZCBJbnB1dFR5cGU6OnN0ZXBVcEZyb21SZW5kZXJlcihpbnQgbikKK3sKKyAgICAvLyBUaGUg
ZGlmZmVyZW5jZXMgZnJvbSBzdGVwVXAoKS9zdGVwRG93bigpOgorICAgIC8vCisgICAgLy8gRGlm
ZmVyZW5jZSAxOiB0aGUgY3VycmVudCB2YWx1ZQorICAgIC8vIElmIHRoZSBjdXJyZW50IHZhbHVl
IGlzIG5vdCBhIG51bWJlciwgaW5jbHVkaW5nIGVtcHR5LCB0aGUgY3VycmVudCB2YWx1ZSBpcyBh
c3N1bWVkIGFzIDAuCisgICAgLy8gICAqIElmIDAgaXMgaW4tcmFuZ2UsIGFuZCBtYXRjaGVzIHRv
IHN0ZXAgdmFsdWUKKyAgICAvLyAgICAgLSBUaGUgdmFsdWUgc2hvdWxkIGJlIHRoZSArc3RlcCBp
ZiBuID4gMAorICAgIC8vICAgICAtIFRoZSB2YWx1ZSBzaG91bGQgYmUgdGhlIC1zdGVwIGlmIG4g
PCAwCisgICAgLy8gICAgIElmIC1zdGVwIG9yICtzdGVwIGlzIG91dCBvZiByYW5nZSwgbmV3IHZh
bHVlIHNob3VsZCBiZSAwLgorICAgIC8vICAgKiBJZiAwIGlzIHNtYWxsZXIgdGhhbiB0aGUgbWlu
aW11bSB2YWx1ZQorICAgIC8vICAgICAtIFRoZSB2YWx1ZSBzaG91bGQgYmUgdGhlIG1pbmltdW0g
dmFsdWUgZm9yIGFueSBuCisgICAgLy8gICAqIElmIDAgaXMgbGFyZ2VyIHRoYW4gdGhlIG1heGlt
dW0gdmFsdWUKKyAgICAvLyAgICAgLSBUaGUgdmFsdWUgc2hvdWxkIGJlIHRoZSBtYXhpbXVtIHZh
bHVlIGZvciBhbnkgbgorICAgIC8vICAgKiBJZiAwIGlzIGluLXJhbmdlLCBidXQgbm90IG1hdGNo
ZWQgdG8gc3RlcCB2YWx1ZQorICAgIC8vICAgICAtIFRoZSB2YWx1ZSBzaG91bGQgYmUgdGhlIGxh
cmdlciBtYXRjaGVkIHZhbHVlIG5lYXJlc3QgdG8gMCBpZiBuID4gMAorICAgIC8vICAgICAgIGUu
Zy4gPGlucHV0IHR5cGU9bnVtYmVyIG1pbj0tMTAwIHN0ZXA9Mz4gLT4gMgorICAgIC8vICAgICAt
IFRoZSB2YWx1ZSBzaG91bGQgYmUgdGhlIHNtYWxlciBtYXRjaGVkIHZhbHVlIG5lYXJlc3QgdG8g
MCBpZiBuIDwgMAorICAgIC8vICAgICAgIGUuZy4gPGlucHV0IHR5cGU9bnVtYmVyIG1pbj0tMTAw
IHN0ZXA9Mz4gLT4gLTEKKyAgICAvLyAgIEFzIGZvciBkYXRlL2RhdGV0aW1lLWxvY2FsL21vbnRo
L3RpbWUvd2VlayB0eXBlcywgdGhlIGN1cnJlbnQgdmFsdWUgaXMgYXNzdW1lZCBhcyAidGhlIGN1
cnJlbnQgbG9jYWwgZGF0ZS90aW1lIi4KKyAgICAvLyAgIEFzIGZvciBkYXRldGltZSB0eXBlLCB0
aGUgY3VycmVudCB2YWx1ZSBpcyBhc3N1bWVkIGFzICJ0aGUgY3VycmVudCBkYXRlL3RpbWUgaW4g
VVRDIi4KKyAgICAvLyBJZiB0aGUgY3VycmVudCB2YWx1ZSBpcyBzbWFsbGVyIHRoYW4gdGhlIG1p
bmltdW0gdmFsdWU6CisgICAgLy8gIC0gVGhlIHZhbHVlIHNob3VsZCBiZSB0aGUgbWluaW11bSB2
YWx1ZSBpZiBuID4gMAorICAgIC8vICAtIE5vdGhpbmcgc2hvdWxkIGhhcHBlbiBpZiBuIDwgMAor
ICAgIC8vIElmIHRoZSBjdXJyZW50IHZhbHVlIGlzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHZh
bHVlOgorICAgIC8vICAtIFRoZSB2YWx1ZSBzaG91bGQgYmUgdGhlIG1heGltdW0gdmFsdWUgaWYg
biA8IDAKKyAgICAvLyAgLSBOb3RoaW5nIHNob3VsZCBoYXBwZW4gaWYgbiA+IDAKKyAgICAvLwor
ICAgIC8vIERpZmZlcmVuY2UgMjogY2xhbXBpbmcgc3RlcHMKKyAgICAvLyBJZiB0aGUgY3VycmVu
dCB2YWx1ZSBpcyBub3QgbWF0Y2hlZCB0byBzdGVwIHZhbHVlOgorICAgIC8vIC0gVGhlIHZhbHVl
IHNob3VsZCBiZSB0aGUgbGFyZ2VyIG1hdGNoZWQgdmFsdWUgbmVhcmVzdCB0byAwIGlmIG4gPiAw
CisgICAgLy8gICBlLmcuIDxpbnB1dCB0eXBlPW51bWJlciB2YWx1ZT0zIG1pbj0tMTAwIHN0ZXA9
Mz4gLT4gNQorICAgIC8vIC0gVGhlIHZhbHVlIHNob3VsZCBiZSB0aGUgc21hbGVyIG1hdGNoZWQg
dmFsdWUgbmVhcmVzdCB0byAwIGlmIG4gPCAwCisgICAgLy8gICBlLmcuIDxpbnB1dCB0eXBlPW51
bWJlciB2YWx1ZT0zIG1pbj0tMTAwIHN0ZXA9Mz4gLT4gMgorICAgIC8vCisgICAgLy8gbiBpcyBh
c3N1bWVkIGFzIC1uIGlmIHN0ZXAgPCAwLgorCisgICAgQVNTRVJUKGlzU3RlcHBhYmxlKCkpOwor
ICAgIGlmICghaXNTdGVwcGFibGUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChuKTsK
KyAgICBpZiAoIW4pCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIHN0ZXBEZWNpbWFs
UGxhY2VzLCBiYXNlRGVjaW1hbFBsYWNlczsKKyAgICBkb3VibGUgc3RlcCwgYmFzZTsKKyAgICAv
LyBGSVhNRTogTm90IGFueSBjaGFuZ2VzIGFmdGVyIHN0ZXBwaW5nLCBldmVuIGlmIGl0IGlzIGFu
IGludmFsaWQgdmFsdWUsIG1heSBiZSBiZXR0ZXIuCisgICAgLy8gKGUuZy4gU3RlcHBpbmctdXAg
Zm9yIDxpbnB1dCB0eXBlPSJudW1iZXIiIHZhbHVlPSJmb28iIHN0ZXA9ImFueSIgLz4gPT4gImZv
byIpCisgICAgaWYgKCFnZXRBbGxvd2VkVmFsdWVTdGVwV2l0aERlY2ltYWxQbGFjZXMoQW55SXNE
ZWZhdWx0U3RlcCwgJnN0ZXAsICZzdGVwRGVjaW1hbFBsYWNlcykpCisgICAgICByZXR1cm47Cisg
ICAgYmFzZSA9IHN0ZXBCYXNlV2l0aERlY2ltYWxQbGFjZXMoJmJhc2VEZWNpbWFsUGxhY2VzKTsK
KyAgICBiYXNlRGVjaW1hbFBsYWNlcyA9IG1pbihiYXNlRGVjaW1hbFBsYWNlcywgMTZ1KTsKKwor
ICAgIGludCBzaWduOworICAgIGlmIChzdGVwID4gMCkKKyAgICAgICAgc2lnbiA9IG47CisgICAg
ZWxzZSBpZiAoc3RlcCA8IDApCisgICAgICAgIHNpZ24gPSAtbjsKKyAgICBlbHNlCisgICAgICAg
IHNpZ24gPSAwOworCisgICAgY29uc3QgZG91YmxlIG5hbiA9IG51bWVyaWNfbGltaXRzPGRvdWJs
ZT46OnF1aWV0X05hTigpOworICAgIFN0cmluZyBjdXJyZW50U3RyaW5nVmFsdWUgPSBlbGVtZW50
KCktPnZhbHVlKCk7CisgICAgZG91YmxlIGN1cnJlbnQgPSBwYXJzZVRvRG91YmxlKGN1cnJlbnRT
dHJpbmdWYWx1ZSwgbmFuKTsKKyAgICBpZiAoIWlzZmluaXRlKGN1cnJlbnQpKSB7CisgICAgICAg
IEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgICAgIGN1cnJlbnQgPSBkZWZhdWx0VmFsdWVGb3JTdGVw
VXAoKTsKKyAgICAgICAgZG91YmxlIG5leHREaWZmID0gc3RlcCAqIG47CisgICAgICAgIGlmIChj
dXJyZW50IDwgbWluaW11bSgpIC0gbmV4dERpZmYpCisgICAgICAgICAgICBjdXJyZW50ID0gbWlu
aW11bSgpIC0gbmV4dERpZmY7CisgICAgICAgIGlmIChjdXJyZW50ID4gbWF4aW11bSgpIC0gbmV4
dERpZmYpCisgICAgICAgICAgICBjdXJyZW50ID0gbWF4aW11bSgpIC0gbmV4dERpZmY7CisgICAg
ICAgIGVsZW1lbnQoKS0+c2V0VmFsdWVBc051bWJlcihjdXJyZW50LCBlYywgRGlzcGF0Y2hJbnB1
dEFuZENoYW5nZUV2ZW50KTsKKyAgICB9CisgICAgaWYgKChzaWduID4gMCAmJiBjdXJyZW50IDwg
bWluaW11bSgpKSB8fCAoc2lnbiA8IDAgJiYgY3VycmVudCA+IG1heGltdW0oKSkpCisgICAgICAg
IGVsZW1lbnQoKS0+c2V0VmFsdWUoc2VyaWFsaXplKHNpZ24gPiAwID8gbWluaW11bSgpIDogbWF4
aW11bSgpKSwgRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50KTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICAgICAgaWYgKGVsZW1lbnQoKS0+c3RlcE1pc21hdGNo
KGVsZW1lbnQoKS0+dmFsdWUoKSkpIHsKKyAgICAgICAgICAgIEFTU0VSVChzdGVwKTsKKyAgICAg
ICAgICAgIGRvdWJsZSBuZXdWYWx1ZTsKKyAgICAgICAgICAgIGRvdWJsZSBzY2FsZSA9IHBvdygx
MC4wLCBzdGF0aWNfY2FzdDxkb3VibGU+KG1heChzdGVwRGVjaW1hbFBsYWNlcywgYmFzZURlY2lt
YWxQbGFjZXMpKSk7CisKKyAgICAgICAgICAgIGlmIChzaWduIDwgMCkKKyAgICAgICAgICAgICAg
ICBuZXdWYWx1ZSA9IHJvdW5kKChiYXNlICsgZmxvb3IoKGN1cnJlbnQgLSBiYXNlKSAvIHN0ZXAp
ICogc3RlcCkgKiBzY2FsZSkgLyBzY2FsZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHNpZ24gPiAw
KQorICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gcm91bmQoKGJhc2UgKyBjZWlsKChjdXJyZW50
IC0gYmFzZSkgLyBzdGVwKSAqIHN0ZXApICogc2NhbGUpIC8gc2NhbGU7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBjdXJyZW50OworCisgICAgICAgICAgICBp
ZiAobmV3VmFsdWUgPCBtaW5pbXVtKCkpCisgICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBtaW5p
bXVtKCk7CisgICAgICAgICAgICBpZiAobmV3VmFsdWUgPiBtYXhpbXVtKCkpCisgICAgICAgICAg
ICAgICAgbmV3VmFsdWUgPSBtYXhpbXVtKCk7CisKKyAgICAgICAgICAgIGVsZW1lbnQoKS0+c2V0
VmFsdWVBc051bWJlcihuZXdWYWx1ZSwgZWMsIG4gPT0gMSB8fCBuID09IC0xID8gRGlzcGF0Y2hJ
bnB1dEFuZENoYW5nZUV2ZW50IDogRGlzcGF0Y2hOb0V2ZW50KTsKKyAgICAgICAgICAgIGN1cnJl
bnQgPSBuZXdWYWx1ZTsKKyAgICAgICAgICAgIGlmIChuID4gMSkKKyAgICAgICAgICAgICAgICBh
cHBseVN0ZXAobiAtIDEsIEFueUlzRGVmYXVsdFN0ZXAsIERpc3BhdGNoSW5wdXRBbmRDaGFuZ2VF
dmVudCwgZWMpOworICAgICAgICAgICAgZWxzZSBpZiAobiA8IC0xKQorICAgICAgICAgICAgICAg
IGFwcGx5U3RlcChuICsgMSwgQW55SXNEZWZhdWx0U3RlcCwgRGlzcGF0Y2hJbnB1dEFuZENoYW5n
ZUV2ZW50LCBlYyk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYXBwbHlTdGVwKG4sIEFu
eUlzRGVmYXVsdFN0ZXAsIERpc3BhdGNoSW5wdXRBbmRDaGFuZ2VFdmVudCwgZWMpOworICAgIH0K
K30KKwogbmFtZXNwYWNlIElucHV0VHlwZU5hbWVzIHsKIAogLy8gVGhlIHR5cGUgbmFtZXMgbXVz
dCBiZSBsb3dlcmNhc2VkIGJlY2F1c2UgdGhleSB3aWxsIGJlIHRoZSByZXR1cm4gdmFsdWVzIG9m
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5oIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9JbnB1dFR5cGUuaAppbmRleCBiNmRmNDliNGQ4MGFmMDkyOTMzNWQ1ZjMzMDYw
YjBiNDhlMWY1ZTZmLi4xYzg2Y2IwZmNjYTkzYTdiMzIxMjg4ZDk4MmU5OGM0ZDljOGM4MGQ2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgKQEAgLTE2MCw2ICsxNjAsOSBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBib29sIHN0ZXBNaXNtYXRjaChjb25zdCBTdHJpbmcmLCBkb3VibGUgc3RlcCkgY29u
c3Q7CiAgICAgdmlydHVhbCBkb3VibGUgc3RlcEJhc2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIGRv
dWJsZSBzdGVwQmFzZVdpdGhEZWNpbWFsUGxhY2VzKHVuc2lnbmVkKikgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIGdldEFsbG93ZWRWYWx1ZVN0ZXAoZG91YmxlKikgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIHN0ZXBVcChpbnQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3Rl
cFVwRnJvbVJlbmRlcmVyKGludCk7CiAgICAgdmlydHVhbCBkb3VibGUgZGVmYXVsdFN0ZXAoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGRvdWJsZSBzdGVwU2NhbGVGYWN0b3IoKSBjb25zdDsKICAgICB2
aXJ0dWFsIGJvb2wgcGFyc2VkU3RlcFZhbHVlU2hvdWxkQmVJbnRlZ2VyKCkgY29uc3Q7CkBAIC0y
OTYsNiArMjk5LDEzIEBAIHByb3RlY3RlZDoKICAgICBDaHJvbWUqIGNocm9tZSgpIGNvbnN0Owog
CiBwcml2YXRlOgorICAgIGVudW0gQW55U3RlcEhhbmRsaW5nIHsgUmVqZWN0QW55LCBBbnlJc0Rl
ZmF1bHRTdGVwIH07CisKKyAgICAvLyBIZWxwZXIgZm9yIHN0ZXBVcCgpL3N0ZXBEb3duKCkuIEFk
ZHMgc3RlcCB2YWx1ZSAqIGNvdW50IHRvIHRoZSBjdXJyZW50IHZhbHVlLgorICAgIHZvaWQgYXBw
bHlTdGVwKGRvdWJsZSBjb3VudCwgQW55U3RlcEhhbmRsaW5nLCBUZXh0RmllbGRFdmVudEJlaGF2
aW9yLCBFeGNlcHRpb25Db2RlJik7CisgICAgZG91YmxlIGFsaWduVmFsdWVGb3JTdGVwKGRvdWJs
ZSB2YWx1ZSwgZG91YmxlIHN0ZXAsIHVuc2lnbmVkIGN1cnJlbnREZWNpbWFsUGxhY2VzLCB1bnNp
Z25lZCBzdGVwRGVjaW1hbFBsYWNlcyk7CisgICAgYm9vbCBnZXRBbGxvd2VkVmFsdWVTdGVwV2l0
aERlY2ltYWxQbGFjZXMoQW55U3RlcEhhbmRsaW5nLCBkb3VibGUqLCB1bnNpZ25lZCopIGNvbnN0
OworCiAgICAgLy8gUmF3IHBvaW50ZXIgYmVjYXVzZSB0aGUgSFRNTElucHV0RWxlbWVudCBvYmpl
Y3Qgb3ducyB0aGlzIElucHV0VHlwZSBvYmplY3QuCiAgICAgSFRNTElucHV0RWxlbWVudCogbV9l
bGVtZW50OwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141084</attachid>
            <date>2012-05-09 21:54:17 -0700</date>
            <delta_ts>2012-05-10 00:21:49 -0700</delta_ts>
            <desc>Patch 3</desc>
            <filename>bug-85978-20120510135416.patch</filename>
            <type>text/plain</type>
            <size>25248</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2NjA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjE4NTQ5ZDg4NGQyOGU0
ZTgxZWM4ZTYyNThjZjcyMzI1YTIyZjk1YS4uZmEzYTM4ODcyZGU4YjAzNTZiNmJkOWVlMzY0YWFj
NmMxZGYyMjQ2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTA1LTA5ICBZb3No
aWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Zvcm1zXSBNb3Zl
IHN0ZXAgcmVsYXRlZCBtZXRob2RzIHRvIElucHV0VHlwZSBjbGFzcyBmcm9tIEhUTUxJbnB1dEVs
ZW1lbnQgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTg1OTc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBpcyBwYXJ0IG9mIHJlLWZhY3RvcmluZyBvZiBIVE1MSW5wdXRFbGVtZW50
LmNwcCBmb3IgbnVtZXJpYyBpbnB1dCB0eXBlLgorICAgICAgICBJbiB0aGlzIHBhdGNoLCB3ZSBt
b3ZlIGltcGxlbWVudGF0aW9uIG9mIGdldEFsbG93ZWRWYWx1ZVN0ZXAgYW5kIHN0ZXBVcC9zdGVw
VXBGcm9tUmVuZGVyZXIKKyAgICAgICAgdG8gSW5wdXRUeXBlIGNsYXNzIGJlY2F1c2Ugb2YgdGhl
c2UgYXJlIGZvciBEYXRlVGltZS9OdW1iZXIvUmFuZ2UuCisKKyAgICAgICAgRm9sbG93aW5nIHBh
dGNoZXMgd2lsbCBjaGFuZ2UgaW1wbGVtZW50YXRpb24gb2YgZ2V0QWxsb3dlZFZhbHVlU3RlcCB0
byB1c2UgU3RlcFJhbmdlIGFuZAorICAgICAgICByZW1vdmUgc3RlcCByZWxhdGVkIG1ldGhvZHMs
IGRlZmF1bHRTdGVwLCBzdGVwU2NhbGVGYWN0b3IsIGFuZCBzbyBvbi4KKworICAgICAgICBObyBu
ZXcgdGVzdHMuIFRoaXMgcGF0Y2ggc2hvdWxkIG5vdCBjaGFuZ2UgYmVoYXZpb3IuCisKKyAgICAg
ICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpnZXRBbGxvd2VkVmFsdWVTdGVwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnN0ZXBVcCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzdGVwRG93bik6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50OjpzdGVwVXBGcm9tUmVuZGVyZXIpOgorICAgICAgICAqIGh0bWwvSFRNTElu
cHV0RWxlbWVudC5oOgorICAgICAgICAoSFRNTElucHV0RWxlbWVudCk6CisgICAgICAgICogaHRt
bC9JbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjphcHBseVN0ZXAp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmFsaWdu
VmFsdWVGb3JTdGVwKToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6Z2V0QWxsb3dlZFZh
bHVlU3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmdldEFsbG93ZWRWYWx1ZVN0
ZXBXaXRoRGVjaW1hbFBsYWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OnN0ZXBV
cCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OnN0ZXBVcEZyb21SZW5kZXJlcik6Cisg
ICAgICAgICogaHRtbC9JbnB1dFR5cGUuaDoKKyAgICAgICAgKElucHV0VHlwZSk6CisKIDIwMTIt
MDUtMDkgIEphc29uIExpdSAgPGphc29uLmxpdUB0b3JjaG1vYmlsZS5jb20uY24+CiAKICAgICAg
ICAgW0JsYWNrQmVycnldIENvb2tpZSBwYXJzaW5nIGlzc3VlLiBJZiB0aGUgY29va2llIHZhbHVl
IHByb3ZpZGVkIHdhcyAoIikgdGhlbiB0aGUgYnJvd3NlciBjcmVhdGVzIGEgc2Vzc2lvbiBjb29r
aWUgaW5zdGVhZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCmluZGV4
IGVmNGFkMDRhNjRjMTFjZWRiZDQ4ZDgxYzQ4OGJlN2VhN2I2YTkyNDEuLjZmZTU1OTY1ZDRmMWRh
NzU5OWQ2MjkwMmQ5ODkxZTQ4ZDQ3OWFlZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmNwcApAQCAtMjk4LDEzNiArMjk4LDE3IEBAIFN0cmluZyBIVE1MSW5wdXRFbGVt
ZW50Ojp2YWx1ZU1pc3NpbmdUZXh0KCkgY29uc3QKIAogYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojpn
ZXRBbGxvd2VkVmFsdWVTdGVwKGRvdWJsZSogc3RlcCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0
QWxsb3dlZFZhbHVlU3RlcFdpdGhEZWNpbWFsUGxhY2VzKFJlamVjdEFueSwgc3RlcCwgMCk7Ci19
Ci0KLWJvb2wgSFRNTElucHV0RWxlbWVudDo6Z2V0QWxsb3dlZFZhbHVlU3RlcFdpdGhEZWNpbWFs
UGxhY2VzKEFueVN0ZXBIYW5kbGluZyBhbnlTdGVwSGFuZGxpbmcsIGRvdWJsZSogc3RlcCwgdW5z
aWduZWQqIGRlY2ltYWxQbGFjZXMpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHN0ZXApOwotICAgIGRv
dWJsZSBkZWZhdWx0U3RlcCA9IG1faW5wdXRUeXBlLT5kZWZhdWx0U3RlcCgpOwotICAgIGRvdWJs
ZSBzdGVwU2NhbGVGYWN0b3IgPSBtX2lucHV0VHlwZS0+c3RlcFNjYWxlRmFjdG9yKCk7Ci0gICAg
aWYgKCFpc2Zpbml0ZShkZWZhdWx0U3RlcCkgfHwgIWlzZmluaXRlKHN0ZXBTY2FsZUZhY3Rvcikp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIHN0ZXBTdHJp
bmcgPSBmYXN0R2V0QXR0cmlidXRlKHN0ZXBBdHRyKTsKLSAgICBpZiAoc3RlcFN0cmluZy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgKnN0ZXAgPSBkZWZhdWx0U3RlcCAqIHN0ZXBTY2FsZUZhY3RvcjsK
LSAgICAgICAgaWYgKGRlY2ltYWxQbGFjZXMpCi0gICAgICAgICAgICAqZGVjaW1hbFBsYWNlcyA9
IDA7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShzdGVwU3RyaW5nLCAiYW55IikpIHsKLSAgICAgICAgc3dpdGNoIChhbnlTdGVwSGFuZGxp
bmcpIHsKLSAgICAgICAgY2FzZSBSZWplY3RBbnk6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGNhc2UgQW55SXNEZWZhdWx0U3RlcDoKLSAgICAgICAgICAgICpzdGVwID0gZGVm
YXVsdFN0ZXAgKiBzdGVwU2NhbGVGYWN0b3I7Ci0gICAgICAgICAgICBpZiAoZGVjaW1hbFBsYWNl
cykKLSAgICAgICAgICAgICAgICAqZGVjaW1hbFBsYWNlcyA9IDA7Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZG91YmxlIHBhcnNlZDsKLSAgICBpZiAoIWRl
Y2ltYWxQbGFjZXMpIHsKLSAgICAgICAgaWYgKCFwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZShz
dGVwU3RyaW5nLCAmcGFyc2VkKSB8fCBwYXJzZWQgPD0gMC4wKSB7Ci0gICAgICAgICAgICAqc3Rl
cCA9IGRlZmF1bHRTdGVwICogc3RlcFNjYWxlRmFjdG9yOwotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIXBhcnNlVG9Eb3VibGVG
b3JOdW1iZXJUeXBlV2l0aERlY2ltYWxQbGFjZXMoc3RlcFN0cmluZywgJnBhcnNlZCwgZGVjaW1h
bFBsYWNlcykgfHwgcGFyc2VkIDw9IDAuMCkgewotICAgICAgICAgICAgKnN0ZXAgPSBkZWZhdWx0
U3RlcCAqIHN0ZXBTY2FsZUZhY3RvcjsKLSAgICAgICAgICAgICpkZWNpbWFsUGxhY2VzID0gMDsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIC8vIEZvciBk
YXRlLCBtb250aCwgd2VlaywgdGhlIHBhcnNlZCB2YWx1ZSBzaG91bGQgYmUgYW4gaW50ZWdlciBm
b3Igc29tZSB0eXBlcy4KLSAgICBpZiAobV9pbnB1dFR5cGUtPnBhcnNlZFN0ZXBWYWx1ZVNob3Vs
ZEJlSW50ZWdlcigpKQotICAgICAgICBwYXJzZWQgPSBtYXgocm91bmQocGFyc2VkKSwgMS4wKTsK
LSAgICBkb3VibGUgcmVzdWx0ID0gcGFyc2VkICogc3RlcFNjYWxlRmFjdG9yOwotICAgIC8vIEZv
ciBkYXRldGltZSwgZGF0ZXRpbWUtbG9jYWwsIHRpbWUsIHRoZSByZXN1bHQgc2hvdWxkIGJlIGFu
IGludGVnZXIuCi0gICAgaWYgKG1faW5wdXRUeXBlLT5zY2FsZWRTdGVwVmFsdWVTaG91bGRCZUlu
dGVnZXIoKSkKLSAgICAgICAgcmVzdWx0ID0gbWF4KHJvdW5kKHJlc3VsdCksIDEuMCk7Ci0gICAg
QVNTRVJUKHJlc3VsdCA+IDApOwotICAgICpzdGVwID0gcmVzdWx0OwotICAgIHJldHVybiB0cnVl
OwotfQotCi12b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmFwcGx5U3RlcChkb3VibGUgY291bnQsIEFu
eVN0ZXBIYW5kbGluZyBhbnlTdGVwSGFuZGxpbmcsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IgZXZl
bnRCZWhhdmlvciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZG91YmxlIHN0ZXA7Ci0gICAg
dW5zaWduZWQgc3RlcERlY2ltYWxQbGFjZXMsIGN1cnJlbnREZWNpbWFsUGxhY2VzOwotICAgIGlm
ICghZ2V0QWxsb3dlZFZhbHVlU3RlcFdpdGhEZWNpbWFsUGxhY2VzKGFueVN0ZXBIYW5kbGluZywg
JnN0ZXAsICZzdGVwRGVjaW1hbFBsYWNlcykpIHsKLSAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRF
X0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbnN0IGRvdWJsZSBuYW4gPSBu
dW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICBkb3VibGUgY3VycmVudCA9
IG1faW5wdXRUeXBlLT5wYXJzZVRvRG91YmxlV2l0aERlY2ltYWxQbGFjZXModmFsdWUoKSwgbmFu
LCAmY3VycmVudERlY2ltYWxQbGFjZXMpOwotICAgIGlmICghaXNmaW5pdGUoY3VycmVudCkpIHsK
LSAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBkb3VibGUgbmV3VmFsdWUgPSBjdXJyZW50ICsgc3RlcCAqIGNvdW50OwotICAgIGlmIChp
c2luZihuZXdWYWx1ZSkpIHsKLSAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRvdWJsZSBhY2NlcHRhYmxlRXJyb3IgPSBtX2lucHV0
VHlwZS0+YWNjZXB0YWJsZUVycm9yKHN0ZXApOwotICAgIGlmIChuZXdWYWx1ZSAtIG1faW5wdXRU
eXBlLT5taW5pbXVtKCkgPCAtYWNjZXB0YWJsZUVycm9yKSB7Ci0gICAgICAgIGVjID0gSU5WQUxJ
RF9TVEFURV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG5ld1ZhbHVlIDwg
bV9pbnB1dFR5cGUtPm1pbmltdW0oKSkKLSAgICAgICAgbmV3VmFsdWUgPSBtX2lucHV0VHlwZS0+
bWluaW11bSgpOwotCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdGVwU3RyaW5nID0gZmFzdEdl
dEF0dHJpYnV0ZShzdGVwQXR0cik7Ci0gICAgaWYgKCFlcXVhbElnbm9yaW5nQ2FzZShzdGVwU3Ry
aW5nLCAiYW55IikpCi0gICAgICAgIG5ld1ZhbHVlID0gYWxpZ25WYWx1ZUZvclN0ZXAobmV3VmFs
dWUsIHN0ZXAsIGN1cnJlbnREZWNpbWFsUGxhY2VzLCBzdGVwRGVjaW1hbFBsYWNlcyk7Ci0KLSAg
ICBpZiAobmV3VmFsdWUgLSBtX2lucHV0VHlwZS0+bWF4aW11bSgpID4gYWNjZXB0YWJsZUVycm9y
KSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgaWYgKG5ld1ZhbHVlID4gbV9pbnB1dFR5cGUtPm1heGltdW0oKSkKLSAgICAgICAg
bmV3VmFsdWUgPSBtX2lucHV0VHlwZS0+bWF4aW11bSgpOwotCi0gICAgc2V0VmFsdWVBc051bWJl
cihuZXdWYWx1ZSwgZWMsIGV2ZW50QmVoYXZpb3IpOwotCi0gICAgaWYgKEFYT2JqZWN0Q2FjaGU6
OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCi0gICAgICAgICBkb2N1bWVudCgpLT5heE9iamVjdENh
Y2hlKCktPnBvc3ROb3RpZmljYXRpb24ocmVuZGVyZXIoKSwgQVhPYmplY3RDYWNoZTo6QVhWYWx1
ZUNoYW5nZWQsIHRydWUpOwotfQotCi1kb3VibGUgSFRNTElucHV0RWxlbWVudDo6YWxpZ25WYWx1
ZUZvclN0ZXAoZG91YmxlIG5ld1ZhbHVlLCBkb3VibGUgc3RlcCwgdW5zaWduZWQgY3VycmVudERl
Y2ltYWxQbGFjZXMsIHVuc2lnbmVkIHN0ZXBEZWNpbWFsUGxhY2VzKQotewotICAgIGlmIChuZXdW
YWx1ZSA+PSBwb3coMTAuMCwgMjEuMCkpCi0gICAgICAgIHJldHVybiBuZXdWYWx1ZTsKLQotICAg
IHVuc2lnbmVkIGJhc2VEZWNpbWFsUGxhY2VzOwotICAgIGRvdWJsZSBiYXNlID0gbV9pbnB1dFR5
cGUtPnN0ZXBCYXNlV2l0aERlY2ltYWxQbGFjZXMoJmJhc2VEZWNpbWFsUGxhY2VzKTsKLSAgICBi
YXNlRGVjaW1hbFBsYWNlcyA9IG1pbihiYXNlRGVjaW1hbFBsYWNlcywgMTZ1KTsKLSAgICBpZiAo
c3RlcE1pc21hdGNoKHZhbHVlKCkpKSB7Ci0gICAgICAgIGRvdWJsZSBzY2FsZSA9IHBvdygxMC4w
LCBzdGF0aWNfY2FzdDxkb3VibGU+KG1heChzdGVwRGVjaW1hbFBsYWNlcywgY3VycmVudERlY2lt
YWxQbGFjZXMpKSk7Ci0gICAgICAgIG5ld1ZhbHVlID0gcm91bmQobmV3VmFsdWUgKiBzY2FsZSkg
LyBzY2FsZTsKLSAgICB9IGVsc2UgewotICAgICAgICBkb3VibGUgc2NhbGUgPSBwb3coMTAuMCwg
c3RhdGljX2Nhc3Q8ZG91YmxlPihtYXgoc3RlcERlY2ltYWxQbGFjZXMsIGJhc2VEZWNpbWFsUGxh
Y2VzKSkpOwotICAgICAgICBuZXdWYWx1ZSA9IHJvdW5kKChiYXNlICsgcm91bmQoKG5ld1ZhbHVl
IC0gYmFzZSkgLyBzdGVwKSAqIHN0ZXApICogc2NhbGUpIC8gc2NhbGU7Ci0gICAgfQotCi0gICAg
cmV0dXJuIG5ld1ZhbHVlOworICAgIHJldHVybiBtX2lucHV0VHlwZS0+Z2V0QWxsb3dlZFZhbHVl
U3RlcChzdGVwKTsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzdGVwVXAoaW50IG4sIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGFwcGx5U3RlcChuLCBSZWplY3RBbnksIERpc3BhdGNo
Tm9FdmVudCwgZWMpOworICAgIG1faW5wdXRUeXBlLT5zdGVwVXAobiwgZWMpOwogfQogCiB2b2lk
IEhUTUxJbnB1dEVsZW1lbnQ6OnN0ZXBEb3duKGludCBuLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
LSAgICBhcHBseVN0ZXAoLW4sIFJlamVjdEFueSwgRGlzcGF0Y2hOb0V2ZW50LCBlYyk7CisgICAg
bV9pbnB1dFR5cGUtPnN0ZXBVcCgtbiwgZWMpOwogfQogCiBib29sIEhUTUxJbnB1dEVsZW1lbnQ6
OmlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0CkBAIC0xNTUz
LDEwOCArMTQzNCw3IEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6aXNTdGVwcGFibGUoKSBjb25z
dAogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnN0ZXBVcEZyb21SZW5kZXJlcihpbnQgbikKIHsK
LSAgICAvLyBUaGUgZGlmZmVyZW5jZXMgZnJvbSBzdGVwVXAoKS9zdGVwRG93bigpOgotICAgIC8v
Ci0gICAgLy8gRGlmZmVyZW5jZSAxOiB0aGUgY3VycmVudCB2YWx1ZQotICAgIC8vIElmIHRoZSBj
dXJyZW50IHZhbHVlIGlzIG5vdCBhIG51bWJlciwgaW5jbHVkaW5nIGVtcHR5LCB0aGUgY3VycmVu
dCB2YWx1ZSBpcyBhc3N1bWVkIGFzIDAuCi0gICAgLy8gICAqIElmIDAgaXMgaW4tcmFuZ2UsIGFu
ZCBtYXRjaGVzIHRvIHN0ZXAgdmFsdWUKLSAgICAvLyAgICAgLSBUaGUgdmFsdWUgc2hvdWxkIGJl
IHRoZSArc3RlcCBpZiBuID4gMAotICAgIC8vICAgICAtIFRoZSB2YWx1ZSBzaG91bGQgYmUgdGhl
IC1zdGVwIGlmIG4gPCAwCi0gICAgLy8gICAgIElmIC1zdGVwIG9yICtzdGVwIGlzIG91dCBvZiBy
YW5nZSwgbmV3IHZhbHVlIHNob3VsZCBiZSAwLgotICAgIC8vICAgKiBJZiAwIGlzIHNtYWxsZXIg
dGhhbiB0aGUgbWluaW11bSB2YWx1ZQotICAgIC8vICAgICAtIFRoZSB2YWx1ZSBzaG91bGQgYmUg
dGhlIG1pbmltdW0gdmFsdWUgZm9yIGFueSBuCi0gICAgLy8gICAqIElmIDAgaXMgbGFyZ2VyIHRo
YW4gdGhlIG1heGltdW0gdmFsdWUKLSAgICAvLyAgICAgLSBUaGUgdmFsdWUgc2hvdWxkIGJlIHRo
ZSBtYXhpbXVtIHZhbHVlIGZvciBhbnkgbgotICAgIC8vICAgKiBJZiAwIGlzIGluLXJhbmdlLCBi
dXQgbm90IG1hdGNoZWQgdG8gc3RlcCB2YWx1ZQotICAgIC8vICAgICAtIFRoZSB2YWx1ZSBzaG91
bGQgYmUgdGhlIGxhcmdlciBtYXRjaGVkIHZhbHVlIG5lYXJlc3QgdG8gMCBpZiBuID4gMAotICAg
IC8vICAgICAgIGUuZy4gPGlucHV0IHR5cGU9bnVtYmVyIG1pbj0tMTAwIHN0ZXA9Mz4gLT4gMgot
ICAgIC8vICAgICAtIFRoZSB2YWx1ZSBzaG91bGQgYmUgdGhlIHNtYWxlciBtYXRjaGVkIHZhbHVl
IG5lYXJlc3QgdG8gMCBpZiBuIDwgMAotICAgIC8vICAgICAgIGUuZy4gPGlucHV0IHR5cGU9bnVt
YmVyIG1pbj0tMTAwIHN0ZXA9Mz4gLT4gLTEKLSAgICAvLyAgIEFzIGZvciBkYXRlL2RhdGV0aW1l
LWxvY2FsL21vbnRoL3RpbWUvd2VlayB0eXBlcywgdGhlIGN1cnJlbnQgdmFsdWUgaXMgYXNzdW1l
ZCBhcyAidGhlIGN1cnJlbnQgbG9jYWwgZGF0ZS90aW1lIi4KLSAgICAvLyAgIEFzIGZvciBkYXRl
dGltZSB0eXBlLCB0aGUgY3VycmVudCB2YWx1ZSBpcyBhc3N1bWVkIGFzICJ0aGUgY3VycmVudCBk
YXRlL3RpbWUgaW4gVVRDIi4KLSAgICAvLyBJZiB0aGUgY3VycmVudCB2YWx1ZSBpcyBzbWFsbGVy
IHRoYW4gdGhlIG1pbmltdW0gdmFsdWU6Ci0gICAgLy8gIC0gVGhlIHZhbHVlIHNob3VsZCBiZSB0
aGUgbWluaW11bSB2YWx1ZSBpZiBuID4gMAotICAgIC8vICAtIE5vdGhpbmcgc2hvdWxkIGhhcHBl
biBpZiBuIDwgMAotICAgIC8vIElmIHRoZSBjdXJyZW50IHZhbHVlIGlzIGxhcmdlciB0aGFuIHRo
ZSBtYXhpbXVtIHZhbHVlOgotICAgIC8vICAtIFRoZSB2YWx1ZSBzaG91bGQgYmUgdGhlIG1heGlt
dW0gdmFsdWUgaWYgbiA8IDAKLSAgICAvLyAgLSBOb3RoaW5nIHNob3VsZCBoYXBwZW4gaWYgbiA+
IDAKLSAgICAvLwotICAgIC8vIERpZmZlcmVuY2UgMjogY2xhbXBpbmcgc3RlcHMKLSAgICAvLyBJ
ZiB0aGUgY3VycmVudCB2YWx1ZSBpcyBub3QgbWF0Y2hlZCB0byBzdGVwIHZhbHVlOgotICAgIC8v
IC0gVGhlIHZhbHVlIHNob3VsZCBiZSB0aGUgbGFyZ2VyIG1hdGNoZWQgdmFsdWUgbmVhcmVzdCB0
byAwIGlmIG4gPiAwCi0gICAgLy8gICBlLmcuIDxpbnB1dCB0eXBlPW51bWJlciB2YWx1ZT0zIG1p
bj0tMTAwIHN0ZXA9Mz4gLT4gNQotICAgIC8vIC0gVGhlIHZhbHVlIHNob3VsZCBiZSB0aGUgc21h
bGVyIG1hdGNoZWQgdmFsdWUgbmVhcmVzdCB0byAwIGlmIG4gPCAwCi0gICAgLy8gICBlLmcuIDxp
bnB1dCB0eXBlPW51bWJlciB2YWx1ZT0zIG1pbj0tMTAwIHN0ZXA9Mz4gLT4gMgotICAgIC8vCi0g
ICAgLy8gbiBpcyBhc3N1bWVkIGFzIC1uIGlmIHN0ZXAgPCAwLgotCi0gICAgQVNTRVJUKGlzU3Rl
cHBhYmxlKCkpOwotICAgIGlmICghaXNTdGVwcGFibGUoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IEFTU0VSVChuKTsKLSAgICBpZiAoIW4pCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVk
IHN0ZXBEZWNpbWFsUGxhY2VzLCBiYXNlRGVjaW1hbFBsYWNlczsKLSAgICBkb3VibGUgc3RlcCwg
YmFzZTsKLSAgICAvLyBGSVhNRTogTm90IGFueSBjaGFuZ2VzIGFmdGVyIHN0ZXBwaW5nLCBldmVu
IGlmIGl0IGlzIGFuIGludmFsaWQgdmFsdWUsIG1heSBiZSBiZXR0ZXIuCi0gICAgLy8gKGUuZy4g
U3RlcHBpbmctdXAgZm9yIDxpbnB1dCB0eXBlPSJudW1iZXIiIHZhbHVlPSJmb28iIHN0ZXA9ImFu
eSIgLz4gPT4gImZvbyIpCi0gICAgaWYgKCFnZXRBbGxvd2VkVmFsdWVTdGVwV2l0aERlY2ltYWxQ
bGFjZXMoQW55SXNEZWZhdWx0U3RlcCwgJnN0ZXAsICZzdGVwRGVjaW1hbFBsYWNlcykpCi0gICAg
ICByZXR1cm47Ci0gICAgYmFzZSA9IG1faW5wdXRUeXBlLT5zdGVwQmFzZVdpdGhEZWNpbWFsUGxh
Y2VzKCZiYXNlRGVjaW1hbFBsYWNlcyk7Ci0gICAgYmFzZURlY2ltYWxQbGFjZXMgPSBtaW4oYmFz
ZURlY2ltYWxQbGFjZXMsIDE2dSk7Ci0KLSAgICBpbnQgc2lnbjsKLSAgICBpZiAoc3RlcCA+IDAp
Ci0gICAgICAgIHNpZ24gPSBuOwotICAgIGVsc2UgaWYgKHN0ZXAgPCAwKQotICAgICAgICBzaWdu
ID0gLW47Ci0gICAgZWxzZQotICAgICAgICBzaWduID0gMDsKLQotICAgIGNvbnN0IGRvdWJsZSBu
YW4gPSBudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICBTdHJpbmcgY3Vy
cmVudFN0cmluZ1ZhbHVlID0gdmFsdWUoKTsKLSAgICBkb3VibGUgY3VycmVudCA9IG1faW5wdXRU
eXBlLT5wYXJzZVRvRG91YmxlKGN1cnJlbnRTdHJpbmdWYWx1ZSwgbmFuKTsKLSAgICBpZiAoIWlz
ZmluaXRlKGN1cnJlbnQpKSB7Ci0gICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgICAgIGN1
cnJlbnQgPSBtX2lucHV0VHlwZS0+ZGVmYXVsdFZhbHVlRm9yU3RlcFVwKCk7Ci0gICAgICAgIGRv
dWJsZSBuZXh0RGlmZiA9IHN0ZXAgKiBuOwotICAgICAgICBpZiAoY3VycmVudCA8IG1faW5wdXRU
eXBlLT5taW5pbXVtKCkgLSBuZXh0RGlmZikKLSAgICAgICAgICAgIGN1cnJlbnQgPSBtX2lucHV0
VHlwZS0+bWluaW11bSgpIC0gbmV4dERpZmY7Ci0gICAgICAgIGlmIChjdXJyZW50ID4gbV9pbnB1
dFR5cGUtPm1heGltdW0oKSAtIG5leHREaWZmKQotICAgICAgICAgICAgY3VycmVudCA9IG1faW5w
dXRUeXBlLT5tYXhpbXVtKCkgLSBuZXh0RGlmZjsKLSAgICAgICAgc2V0VmFsdWVBc051bWJlcihj
dXJyZW50LCBlYywgRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50KTsKLSAgICB9Ci0gICAgaWYg
KChzaWduID4gMCAmJiBjdXJyZW50IDwgbV9pbnB1dFR5cGUtPm1pbmltdW0oKSkgfHwgKHNpZ24g
PCAwICYmIGN1cnJlbnQgPiBtX2lucHV0VHlwZS0+bWF4aW11bSgpKSkKLSAgICAgICAgc2V0VmFs
dWUobV9pbnB1dFR5cGUtPnNlcmlhbGl6ZShzaWduID4gMCA/IG1faW5wdXRUeXBlLT5taW5pbXVt
KCkgOiBtX2lucHV0VHlwZS0+bWF4aW11bSgpKSwgRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICAgICAgaWYgKHN0
ZXBNaXNtYXRjaCh2YWx1ZSgpKSkgewotICAgICAgICAgICAgQVNTRVJUKHN0ZXApOwotICAgICAg
ICAgICAgZG91YmxlIG5ld1ZhbHVlOwotICAgICAgICAgICAgZG91YmxlIHNjYWxlID0gcG93KDEw
LjAsIHN0YXRpY19jYXN0PGRvdWJsZT4obWF4KHN0ZXBEZWNpbWFsUGxhY2VzLCBiYXNlRGVjaW1h
bFBsYWNlcykpKTsKLQotICAgICAgICAgICAgaWYgKHNpZ24gPCAwKQotICAgICAgICAgICAgICAg
IG5ld1ZhbHVlID0gcm91bmQoKGJhc2UgKyBmbG9vcigoY3VycmVudCAtIGJhc2UpIC8gc3RlcCkg
KiBzdGVwKSAqIHNjYWxlKSAvIHNjYWxlOwotICAgICAgICAgICAgZWxzZSBpZiAoc2lnbiA+IDAp
Ci0gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSByb3VuZCgoYmFzZSArIGNlaWwoKGN1cnJlbnQg
LSBiYXNlKSAvIHN0ZXApICogc3RlcCkgKiBzY2FsZSkgLyBzY2FsZTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IGN1cnJlbnQ7Ci0KLSAgICAgICAgICAgIGlm
IChuZXdWYWx1ZSA8IG1faW5wdXRUeXBlLT5taW5pbXVtKCkpCi0gICAgICAgICAgICAgICAgbmV3
VmFsdWUgPSBtX2lucHV0VHlwZS0+bWluaW11bSgpOwotICAgICAgICAgICAgaWYgKG5ld1ZhbHVl
ID4gbV9pbnB1dFR5cGUtPm1heGltdW0oKSkKLSAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IG1f
aW5wdXRUeXBlLT5tYXhpbXVtKCk7Ci0KLSAgICAgICAgICAgIHNldFZhbHVlQXNOdW1iZXIobmV3
VmFsdWUsIGVjLCBuID09IDEgfHwgbiA9PSAtMSA/IERpc3BhdGNoSW5wdXRBbmRDaGFuZ2VFdmVu
dCA6IERpc3BhdGNoTm9FdmVudCk7Ci0gICAgICAgICAgICBjdXJyZW50ID0gbmV3VmFsdWU7Ci0g
ICAgICAgICAgICBpZiAobiA+IDEpCi0gICAgICAgICAgICAgICAgYXBwbHlTdGVwKG4gLSAxLCBB
bnlJc0RlZmF1bHRTdGVwLCBEaXNwYXRjaElucHV0QW5kQ2hhbmdlRXZlbnQsIGVjKTsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKG4gPCAtMSkKLSAgICAgICAgICAgICAgICBhcHBseVN0ZXAobiArIDEs
IEFueUlzRGVmYXVsdFN0ZXAsIERpc3BhdGNoSW5wdXRBbmRDaGFuZ2VFdmVudCwgZWMpOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIGFwcGx5U3RlcChuLCBBbnlJc0RlZmF1bHRTdGVwLCBE
aXNwYXRjaElucHV0QW5kQ2hhbmdlRXZlbnQsIGVjKTsKLSAgICB9CisgICAgbV9pbnB1dFR5cGUt
PnN0ZXBVcEZyb21SZW5kZXJlcihuKTsKIH0KIAogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCmluZGV4IDAyNDVkZTIzYmYwMGYwYmRl
NTAyNTg0MzUzOGU0NmZlMmZhYTFhMzcuLmUzNGEwM2U2MzVlOWRmYzM0MGIwNTBkZGUxYmRhY2E5
ODM4NzU4OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCkBAIC0yNjAs
NyArMjYwLDYgQEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAgIGVudW0gQXV0b0NvbXBsZXRl
U2V0dGluZyB7IFVuaW5pdGlhbGl6ZWQsIE9uLCBPZmYgfTsKLSAgICBlbnVtIEFueVN0ZXBIYW5k
bGluZyB7IFJlamVjdEFueSwgQW55SXNEZWZhdWx0U3RlcCB9OwogCiAgICAgdmlydHVhbCB2b2lk
IHdpbGxDaGFuZ2VGb3JtKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUZv
cm0oKSBPVkVSUklERTsKQEAgLTM0NCwxMSArMzQzLDYgQEAgcHJpdmF0ZToKICAgICAKICAgICB2
aXJ0dWFsIHZvaWQgc3VidHJlZUhhc0NoYW5nZWQoKTsKIAotICAgIGJvb2wgZ2V0QWxsb3dlZFZh
bHVlU3RlcFdpdGhEZWNpbWFsUGxhY2VzKEFueVN0ZXBIYW5kbGluZywgZG91YmxlKiwgdW5zaWdu
ZWQqKSBjb25zdDsKLQotICAgIC8vIEhlbHBlciBmb3Igc3RlcFVwKCkvc3RlcERvd24oKS4gIEFk
ZHMgc3RlcCB2YWx1ZSAqIGNvdW50IHRvIHRoZSBjdXJyZW50IHZhbHVlLgotICAgIHZvaWQgYXBw
bHlTdGVwKGRvdWJsZSBjb3VudCwgQW55U3RlcEhhbmRsaW5nLCBUZXh0RmllbGRFdmVudEJlaGF2
aW9yLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgZG91YmxlIGFsaWduVmFsdWVGb3JTdGVwKGRvdWJs
ZSB2YWx1ZSwgZG91YmxlIHN0ZXAsIHVuc2lnbmVkIGN1cnJlbnREZWNpbWFsUGxhY2VzLCB1bnNp
Z25lZCBzdGVwRGVjaW1hbFBsYWNlcyk7CiAKICNpZiBFTkFCTEUoREFUQUxJU1QpCiAgICAgSFRN
TERhdGFMaXN0RWxlbWVudCogZGF0YUxpc3QoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBl
LmNwcAppbmRleCA4NGUwZWIwZTZhYWU0MjBjMzgzOGYzOTM1OTg2NGRhZWU3NWE0Y2Y2Li45OTcx
ODJhYmFlN2Q0NGJmYjcwNzlhNGJhODRjN2VkOTQ1YTk1N2YyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1
dFR5cGUuY3BwCkBAIC01LDcgKzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBu
eXBvcC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyAoc2FtQHdlYmtp
dC5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxl
Y3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjgsNiArMjgs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIklucHV0VHlwZS5oIgogCisjaW5j
bHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkJlZm9yZVRleHRJbnNlcnRlZEV2ZW50
LmgiCiAjaW5jbHVkZSAiQnV0dG9uSW5wdXRUeXBlLmgiCiAjaW5jbHVkZSAiQ2hlY2tib3hJbnB1
dFR5cGUuaCIKQEAgLTgxNSw2ICs4MTYsMjQxIEBAIHVuc2lnbmVkIElucHV0VHlwZTo6d2lkdGgo
KSBjb25zdAogICAgIHJldHVybiAwOwogfQogCit2b2lkIElucHV0VHlwZTo6YXBwbHlTdGVwKGRv
dWJsZSBjb3VudCwgQW55U3RlcEhhbmRsaW5nIGFueVN0ZXBIYW5kbGluZywgVGV4dEZpZWxkRXZl
bnRCZWhhdmlvciBldmVudEJlaGF2aW9yLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBkb3Vi
bGUgc3RlcDsKKyAgICB1bnNpZ25lZCBzdGVwRGVjaW1hbFBsYWNlcywgY3VycmVudERlY2ltYWxQ
bGFjZXM7CisgICAgaWYgKCFnZXRBbGxvd2VkVmFsdWVTdGVwV2l0aERlY2ltYWxQbGFjZXMoYW55
U3RlcEhhbmRsaW5nLCAmc3RlcCwgJnN0ZXBEZWNpbWFsUGxhY2VzKSkgeworICAgICAgICBlYyA9
IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3Qg
ZG91YmxlIG5hbiA9IG51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworICAgIGRv
dWJsZSBjdXJyZW50ID0gcGFyc2VUb0RvdWJsZVdpdGhEZWNpbWFsUGxhY2VzKGVsZW1lbnQoKS0+
dmFsdWUoKSwgbmFuLCAmY3VycmVudERlY2ltYWxQbGFjZXMpOworICAgIGlmICghaXNmaW5pdGUo
Y3VycmVudCkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBkb3VibGUgbmV3VmFsdWUgPSBjdXJyZW50ICsgc3RlcCAqIGNvdW50
OworICAgIGlmIChpc2luZihuZXdWYWx1ZSkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRF
X0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRvdWJsZSBhY2NlcHRhYmxlRXJy
b3JWYWx1ZSA9IGFjY2VwdGFibGVFcnJvcihzdGVwKTsKKyAgICBpZiAobmV3VmFsdWUgLSBtaW5p
bXVtKCkgPCAtYWNjZXB0YWJsZUVycm9yVmFsdWUpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NU
QVRFX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobmV3VmFsdWUgPCBtaW5p
bXVtKCkpCisgICAgICAgIG5ld1ZhbHVlID0gbWluaW11bSgpOworCisgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBzdGVwU3RyaW5nID0gZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKHN0ZXBBdHRy
KTsKKyAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKHN0ZXBTdHJpbmcsICJhbnkiKSkKKyAgICAg
ICAgbmV3VmFsdWUgPSBhbGlnblZhbHVlRm9yU3RlcChuZXdWYWx1ZSwgc3RlcCwgY3VycmVudERl
Y2ltYWxQbGFjZXMsIHN0ZXBEZWNpbWFsUGxhY2VzKTsKKworICAgIGlmIChuZXdWYWx1ZSAtIG1h
eGltdW0oKSA+IGFjY2VwdGFibGVFcnJvclZhbHVlKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9T
VEFURV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG5ld1ZhbHVlID4gbWF4
aW11bSgpKQorICAgICAgICBuZXdWYWx1ZSA9IG1heGltdW0oKTsKKworICAgIGVsZW1lbnQoKS0+
c2V0VmFsdWVBc051bWJlcihuZXdWYWx1ZSwgZWMsIGV2ZW50QmVoYXZpb3IpOworCisgICAgaWYg
KEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCisgICAgICAgICBlbGVtZW50
KCktPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+cG9zdE5vdGlmaWNhdGlvbihlbGVtZW50
KCktPnJlbmRlcmVyKCksIEFYT2JqZWN0Q2FjaGU6OkFYVmFsdWVDaGFuZ2VkLCB0cnVlKTsKK30K
KworZG91YmxlIElucHV0VHlwZTo6YWxpZ25WYWx1ZUZvclN0ZXAoZG91YmxlIG5ld1ZhbHVlLCBk
b3VibGUgc3RlcCwgdW5zaWduZWQgY3VycmVudERlY2ltYWxQbGFjZXMsIHVuc2lnbmVkIHN0ZXBE
ZWNpbWFsUGxhY2VzKQoreworICAgIGlmIChuZXdWYWx1ZSA+PSBwb3coMTAuMCwgMjEuMCkpCisg
ICAgICAgIHJldHVybiBuZXdWYWx1ZTsKKworICAgIHVuc2lnbmVkIGJhc2VEZWNpbWFsUGxhY2Vz
OworICAgIGRvdWJsZSBiYXNlID0gc3RlcEJhc2VXaXRoRGVjaW1hbFBsYWNlcygmYmFzZURlY2lt
YWxQbGFjZXMpOworICAgIGJhc2VEZWNpbWFsUGxhY2VzID0gbWluKGJhc2VEZWNpbWFsUGxhY2Vz
LCAxNnUpOworICAgIGlmIChlbGVtZW50KCktPnN0ZXBNaXNtYXRjaChlbGVtZW50KCktPnZhbHVl
KCkpKSB7CisgICAgICAgIGRvdWJsZSBzY2FsZSA9IHBvdygxMC4wLCBzdGF0aWNfY2FzdDxkb3Vi
bGU+KG1heChzdGVwRGVjaW1hbFBsYWNlcywgY3VycmVudERlY2ltYWxQbGFjZXMpKSk7CisgICAg
ICAgIG5ld1ZhbHVlID0gcm91bmQobmV3VmFsdWUgKiBzY2FsZSkgLyBzY2FsZTsKKyAgICB9IGVs
c2UgeworICAgICAgICBkb3VibGUgc2NhbGUgPSBwb3coMTAuMCwgc3RhdGljX2Nhc3Q8ZG91Ymxl
PihtYXgoc3RlcERlY2ltYWxQbGFjZXMsIGJhc2VEZWNpbWFsUGxhY2VzKSkpOworICAgICAgICBu
ZXdWYWx1ZSA9IHJvdW5kKChiYXNlICsgcm91bmQoKG5ld1ZhbHVlIC0gYmFzZSkgLyBzdGVwKSAq
IHN0ZXApICogc2NhbGUpIC8gc2NhbGU7CisgICAgfQorCisgICAgcmV0dXJuIG5ld1ZhbHVlOwor
fQorCitib29sIElucHV0VHlwZTo6Z2V0QWxsb3dlZFZhbHVlU3RlcChkb3VibGUqIHN0ZXApIGNv
bnN0Cit7CisgICAgcmV0dXJuIGdldEFsbG93ZWRWYWx1ZVN0ZXBXaXRoRGVjaW1hbFBsYWNlcyhS
ZWplY3RBbnksIHN0ZXAsIDApOworfQorCitib29sIElucHV0VHlwZTo6Z2V0QWxsb3dlZFZhbHVl
U3RlcFdpdGhEZWNpbWFsUGxhY2VzKEFueVN0ZXBIYW5kbGluZyBhbnlTdGVwSGFuZGxpbmcsIGRv
dWJsZSogc3RlcCwgdW5zaWduZWQqIGRlY2ltYWxQbGFjZXMpIGNvbnN0Cit7CisgICAgQVNTRVJU
KHN0ZXApOworICAgIGRvdWJsZSBkZWZhdWx0U3RlcFZhbHVlID0gZGVmYXVsdFN0ZXAoKTsKKyAg
ICBkb3VibGUgc3RlcFNjYWxlRmFjdG9yVmFsdWUgPSBzdGVwU2NhbGVGYWN0b3IoKTsKKyAgICBp
ZiAoIWlzZmluaXRlKGRlZmF1bHRTdGVwVmFsdWUpIHx8ICFpc2Zpbml0ZShzdGVwU2NhbGVGYWN0
b3JWYWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcm
IHN0ZXBTdHJpbmcgPSBlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUoc3RlcEF0dHIpOworICAg
IGlmIChzdGVwU3RyaW5nLmlzRW1wdHkoKSkgeworICAgICAgICAqc3RlcCA9IGRlZmF1bHRTdGVw
VmFsdWUgKiBzdGVwU2NhbGVGYWN0b3JWYWx1ZTsKKyAgICAgICAgaWYgKGRlY2ltYWxQbGFjZXMp
CisgICAgICAgICAgICAqZGVjaW1hbFBsYWNlcyA9IDA7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShzdGVwU3RyaW5nLCAiYW55IikpIHsK
KyAgICAgICAgc3dpdGNoIChhbnlTdGVwSGFuZGxpbmcpIHsKKyAgICAgICAgY2FzZSBSZWplY3RB
bnk6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgQW55SXNEZWZhdWx0
U3RlcDoKKyAgICAgICAgICAgICpzdGVwID0gZGVmYXVsdFN0ZXBWYWx1ZSAqIHN0ZXBTY2FsZUZh
Y3RvclZhbHVlOworICAgICAgICAgICAgaWYgKGRlY2ltYWxQbGFjZXMpCisgICAgICAgICAgICAg
ICAgKmRlY2ltYWxQbGFjZXMgPSAwOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGRvdWJsZSBwYXJzZWQ7CisgICAgaWYgKCFkZWNpbWFsUGxhY2VzKSB7Cisg
ICAgICAgIGlmICghcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoc3RlcFN0cmluZywgJnBhcnNl
ZCkgfHwgcGFyc2VkIDw9IDAuMCkgeworICAgICAgICAgICAgKnN0ZXAgPSBkZWZhdWx0U3RlcFZh
bHVlICogc3RlcFNjYWxlRmFjdG9yVmFsdWU7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghcGFyc2VUb0RvdWJsZUZvck51bWJl
clR5cGVXaXRoRGVjaW1hbFBsYWNlcyhzdGVwU3RyaW5nLCAmcGFyc2VkLCBkZWNpbWFsUGxhY2Vz
KSB8fCBwYXJzZWQgPD0gMC4wKSB7CisgICAgICAgICAgICAqc3RlcCA9IGRlZmF1bHRTdGVwVmFs
dWUgKiBzdGVwU2NhbGVGYWN0b3JWYWx1ZTsKKyAgICAgICAgICAgICpkZWNpbWFsUGxhY2VzID0g
MDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIC8vIEZv
ciBkYXRlLCBtb250aCwgd2VlaywgdGhlIHBhcnNlZCB2YWx1ZSBzaG91bGQgYmUgYW4gaW50ZWdl
ciBmb3Igc29tZSB0eXBlcy4KKyAgICBpZiAocGFyc2VkU3RlcFZhbHVlU2hvdWxkQmVJbnRlZ2Vy
KCkpCisgICAgICAgIHBhcnNlZCA9IG1heChyb3VuZChwYXJzZWQpLCAxLjApOworICAgIGRvdWJs
ZSByZXN1bHQgPSBwYXJzZWQgKiBzdGVwU2NhbGVGYWN0b3JWYWx1ZTsKKyAgICAvLyBGb3IgZGF0
ZXRpbWUsIGRhdGV0aW1lLWxvY2FsLCB0aW1lLCB0aGUgcmVzdWx0IHNob3VsZCBiZSBhbiBpbnRl
Z2VyLgorICAgIGlmIChzY2FsZWRTdGVwVmFsdWVTaG91bGRCZUludGVnZXIoKSkKKyAgICAgICAg
cmVzdWx0ID0gbWF4KHJvdW5kKHJlc3VsdCksIDEuMCk7CisgICAgQVNTRVJUKHJlc3VsdCA+IDAp
OworICAgICpzdGVwID0gcmVzdWx0OworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIElucHV0
VHlwZTo6c3RlcFVwKGludCBuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBhcHBseVN0ZXAo
biwgUmVqZWN0QW55LCBEaXNwYXRjaE5vRXZlbnQsIGVjKTsKK30KKwordm9pZCBJbnB1dFR5cGU6
OnN0ZXBVcEZyb21SZW5kZXJlcihpbnQgbikKK3sKKyAgICAvLyBUaGUgZGlmZmVyZW5jZXMgZnJv
bSBzdGVwVXAoKS9zdGVwRG93bigpOgorICAgIC8vCisgICAgLy8gRGlmZmVyZW5jZSAxOiB0aGUg
Y3VycmVudCB2YWx1ZQorICAgIC8vIElmIHRoZSBjdXJyZW50IHZhbHVlIGlzIG5vdCBhIG51bWJl
ciwgaW5jbHVkaW5nIGVtcHR5LCB0aGUgY3VycmVudCB2YWx1ZSBpcyBhc3N1bWVkIGFzIDAuCisg
ICAgLy8gICAqIElmIDAgaXMgaW4tcmFuZ2UsIGFuZCBtYXRjaGVzIHRvIHN0ZXAgdmFsdWUKKyAg
ICAvLyAgICAgLSBUaGUgdmFsdWUgc2hvdWxkIGJlIHRoZSArc3RlcCBpZiBuID4gMAorICAgIC8v
ICAgICAtIFRoZSB2YWx1ZSBzaG91bGQgYmUgdGhlIC1zdGVwIGlmIG4gPCAwCisgICAgLy8gICAg
IElmIC1zdGVwIG9yICtzdGVwIGlzIG91dCBvZiByYW5nZSwgbmV3IHZhbHVlIHNob3VsZCBiZSAw
LgorICAgIC8vICAgKiBJZiAwIGlzIHNtYWxsZXIgdGhhbiB0aGUgbWluaW11bSB2YWx1ZQorICAg
IC8vICAgICAtIFRoZSB2YWx1ZSBzaG91bGQgYmUgdGhlIG1pbmltdW0gdmFsdWUgZm9yIGFueSBu
CisgICAgLy8gICAqIElmIDAgaXMgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gdmFsdWUKKyAgICAv
LyAgICAgLSBUaGUgdmFsdWUgc2hvdWxkIGJlIHRoZSBtYXhpbXVtIHZhbHVlIGZvciBhbnkgbgor
ICAgIC8vICAgKiBJZiAwIGlzIGluLXJhbmdlLCBidXQgbm90IG1hdGNoZWQgdG8gc3RlcCB2YWx1
ZQorICAgIC8vICAgICAtIFRoZSB2YWx1ZSBzaG91bGQgYmUgdGhlIGxhcmdlciBtYXRjaGVkIHZh
bHVlIG5lYXJlc3QgdG8gMCBpZiBuID4gMAorICAgIC8vICAgICAgIGUuZy4gPGlucHV0IHR5cGU9
bnVtYmVyIG1pbj0tMTAwIHN0ZXA9Mz4gLT4gMgorICAgIC8vICAgICAtIFRoZSB2YWx1ZSBzaG91
bGQgYmUgdGhlIHNtYWxlciBtYXRjaGVkIHZhbHVlIG5lYXJlc3QgdG8gMCBpZiBuIDwgMAorICAg
IC8vICAgICAgIGUuZy4gPGlucHV0IHR5cGU9bnVtYmVyIG1pbj0tMTAwIHN0ZXA9Mz4gLT4gLTEK
KyAgICAvLyAgIEFzIGZvciBkYXRlL2RhdGV0aW1lLWxvY2FsL21vbnRoL3RpbWUvd2VlayB0eXBl
cywgdGhlIGN1cnJlbnQgdmFsdWUgaXMgYXNzdW1lZCBhcyAidGhlIGN1cnJlbnQgbG9jYWwgZGF0
ZS90aW1lIi4KKyAgICAvLyAgIEFzIGZvciBkYXRldGltZSB0eXBlLCB0aGUgY3VycmVudCB2YWx1
ZSBpcyBhc3N1bWVkIGFzICJ0aGUgY3VycmVudCBkYXRlL3RpbWUgaW4gVVRDIi4KKyAgICAvLyBJ
ZiB0aGUgY3VycmVudCB2YWx1ZSBpcyBzbWFsbGVyIHRoYW4gdGhlIG1pbmltdW0gdmFsdWU6Cisg
ICAgLy8gIC0gVGhlIHZhbHVlIHNob3VsZCBiZSB0aGUgbWluaW11bSB2YWx1ZSBpZiBuID4gMAor
ICAgIC8vICAtIE5vdGhpbmcgc2hvdWxkIGhhcHBlbiBpZiBuIDwgMAorICAgIC8vIElmIHRoZSBj
dXJyZW50IHZhbHVlIGlzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHZhbHVlOgorICAgIC8vICAt
IFRoZSB2YWx1ZSBzaG91bGQgYmUgdGhlIG1heGltdW0gdmFsdWUgaWYgbiA8IDAKKyAgICAvLyAg
LSBOb3RoaW5nIHNob3VsZCBoYXBwZW4gaWYgbiA+IDAKKyAgICAvLworICAgIC8vIERpZmZlcmVu
Y2UgMjogY2xhbXBpbmcgc3RlcHMKKyAgICAvLyBJZiB0aGUgY3VycmVudCB2YWx1ZSBpcyBub3Qg
bWF0Y2hlZCB0byBzdGVwIHZhbHVlOgorICAgIC8vIC0gVGhlIHZhbHVlIHNob3VsZCBiZSB0aGUg
bGFyZ2VyIG1hdGNoZWQgdmFsdWUgbmVhcmVzdCB0byAwIGlmIG4gPiAwCisgICAgLy8gICBlLmcu
IDxpbnB1dCB0eXBlPW51bWJlciB2YWx1ZT0zIG1pbj0tMTAwIHN0ZXA9Mz4gLT4gNQorICAgIC8v
IC0gVGhlIHZhbHVlIHNob3VsZCBiZSB0aGUgc21hbGVyIG1hdGNoZWQgdmFsdWUgbmVhcmVzdCB0
byAwIGlmIG4gPCAwCisgICAgLy8gICBlLmcuIDxpbnB1dCB0eXBlPW51bWJlciB2YWx1ZT0zIG1p
bj0tMTAwIHN0ZXA9Mz4gLT4gMgorICAgIC8vCisgICAgLy8gbiBpcyBhc3N1bWVkIGFzIC1uIGlm
IHN0ZXAgPCAwLgorCisgICAgQVNTRVJUKGlzU3RlcHBhYmxlKCkpOworICAgIGlmICghaXNTdGVw
cGFibGUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChuKTsKKyAgICBpZiAoIW4pCisg
ICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIHN0ZXBEZWNpbWFsUGxhY2VzLCBiYXNlRGVj
aW1hbFBsYWNlczsKKyAgICBkb3VibGUgc3RlcCwgYmFzZTsKKyAgICAvLyBGSVhNRTogTm90IGFu
eSBjaGFuZ2VzIGFmdGVyIHN0ZXBwaW5nLCBldmVuIGlmIGl0IGlzIGFuIGludmFsaWQgdmFsdWUs
IG1heSBiZSBiZXR0ZXIuCisgICAgLy8gKGUuZy4gU3RlcHBpbmctdXAgZm9yIDxpbnB1dCB0eXBl
PSJudW1iZXIiIHZhbHVlPSJmb28iIHN0ZXA9ImFueSIgLz4gPT4gImZvbyIpCisgICAgaWYgKCFn
ZXRBbGxvd2VkVmFsdWVTdGVwV2l0aERlY2ltYWxQbGFjZXMoQW55SXNEZWZhdWx0U3RlcCwgJnN0
ZXAsICZzdGVwRGVjaW1hbFBsYWNlcykpCisgICAgICByZXR1cm47CisgICAgYmFzZSA9IHN0ZXBC
YXNlV2l0aERlY2ltYWxQbGFjZXMoJmJhc2VEZWNpbWFsUGxhY2VzKTsKKyAgICBiYXNlRGVjaW1h
bFBsYWNlcyA9IG1pbihiYXNlRGVjaW1hbFBsYWNlcywgMTZ1KTsKKworICAgIGludCBzaWduOwor
ICAgIGlmIChzdGVwID4gMCkKKyAgICAgICAgc2lnbiA9IG47CisgICAgZWxzZSBpZiAoc3RlcCA8
IDApCisgICAgICAgIHNpZ24gPSAtbjsKKyAgICBlbHNlCisgICAgICAgIHNpZ24gPSAwOworCisg
ICAgY29uc3QgZG91YmxlIG5hbiA9IG51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigp
OworICAgIFN0cmluZyBjdXJyZW50U3RyaW5nVmFsdWUgPSBlbGVtZW50KCktPnZhbHVlKCk7Cisg
ICAgZG91YmxlIGN1cnJlbnQgPSBwYXJzZVRvRG91YmxlKGN1cnJlbnRTdHJpbmdWYWx1ZSwgbmFu
KTsKKyAgICBpZiAoIWlzZmluaXRlKGN1cnJlbnQpKSB7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUg
ZWM7CisgICAgICAgIGN1cnJlbnQgPSBkZWZhdWx0VmFsdWVGb3JTdGVwVXAoKTsKKyAgICAgICAg
ZG91YmxlIG5leHREaWZmID0gc3RlcCAqIG47CisgICAgICAgIGlmIChjdXJyZW50IDwgbWluaW11
bSgpIC0gbmV4dERpZmYpCisgICAgICAgICAgICBjdXJyZW50ID0gbWluaW11bSgpIC0gbmV4dERp
ZmY7CisgICAgICAgIGlmIChjdXJyZW50ID4gbWF4aW11bSgpIC0gbmV4dERpZmYpCisgICAgICAg
ICAgICBjdXJyZW50ID0gbWF4aW11bSgpIC0gbmV4dERpZmY7CisgICAgICAgIGVsZW1lbnQoKS0+
c2V0VmFsdWVBc051bWJlcihjdXJyZW50LCBlYywgRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50
KTsKKyAgICB9CisgICAgaWYgKChzaWduID4gMCAmJiBjdXJyZW50IDwgbWluaW11bSgpKSB8fCAo
c2lnbiA8IDAgJiYgY3VycmVudCA+IG1heGltdW0oKSkpCisgICAgICAgIGVsZW1lbnQoKS0+c2V0
VmFsdWUoc2VyaWFsaXplKHNpZ24gPiAwID8gbWluaW11bSgpIDogbWF4aW11bSgpKSwgRGlzcGF0
Y2hJbnB1dEFuZENoYW5nZUV2ZW50KTsKKyAgICBlbHNlIHsKKyAgICAgICAgRXhjZXB0aW9uQ29k
ZSBlYzsKKyAgICAgICAgaWYgKGVsZW1lbnQoKS0+c3RlcE1pc21hdGNoKGVsZW1lbnQoKS0+dmFs
dWUoKSkpIHsKKyAgICAgICAgICAgIEFTU0VSVChzdGVwKTsKKyAgICAgICAgICAgIGRvdWJsZSBu
ZXdWYWx1ZTsKKyAgICAgICAgICAgIGRvdWJsZSBzY2FsZSA9IHBvdygxMC4wLCBzdGF0aWNfY2Fz
dDxkb3VibGU+KG1heChzdGVwRGVjaW1hbFBsYWNlcywgYmFzZURlY2ltYWxQbGFjZXMpKSk7CisK
KyAgICAgICAgICAgIGlmIChzaWduIDwgMCkKKyAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IHJv
dW5kKChiYXNlICsgZmxvb3IoKGN1cnJlbnQgLSBiYXNlKSAvIHN0ZXApICogc3RlcCkgKiBzY2Fs
ZSkgLyBzY2FsZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHNpZ24gPiAwKQorICAgICAgICAgICAg
ICAgIG5ld1ZhbHVlID0gcm91bmQoKGJhc2UgKyBjZWlsKChjdXJyZW50IC0gYmFzZSkgLyBzdGVw
KSAqIHN0ZXApICogc2NhbGUpIC8gc2NhbGU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgbmV3VmFsdWUgPSBjdXJyZW50OworCisgICAgICAgICAgICBpZiAobmV3VmFsdWUgPCBt
aW5pbXVtKCkpCisgICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBtaW5pbXVtKCk7CisgICAgICAg
ICAgICBpZiAobmV3VmFsdWUgPiBtYXhpbXVtKCkpCisgICAgICAgICAgICAgICAgbmV3VmFsdWUg
PSBtYXhpbXVtKCk7CisKKyAgICAgICAgICAgIGVsZW1lbnQoKS0+c2V0VmFsdWVBc051bWJlcihu
ZXdWYWx1ZSwgZWMsIG4gPT0gMSB8fCBuID09IC0xID8gRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2
ZW50IDogRGlzcGF0Y2hOb0V2ZW50KTsKKyAgICAgICAgICAgIGN1cnJlbnQgPSBuZXdWYWx1ZTsK
KyAgICAgICAgICAgIGlmIChuID4gMSkKKyAgICAgICAgICAgICAgICBhcHBseVN0ZXAobiAtIDEs
IEFueUlzRGVmYXVsdFN0ZXAsIERpc3BhdGNoSW5wdXRBbmRDaGFuZ2VFdmVudCwgZWMpOworICAg
ICAgICAgICAgZWxzZSBpZiAobiA8IC0xKQorICAgICAgICAgICAgICAgIGFwcGx5U3RlcChuICsg
MSwgQW55SXNEZWZhdWx0U3RlcCwgRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50LCBlYyk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYXBwbHlTdGVwKG4sIEFueUlzRGVmYXVsdFN0ZXAs
IERpc3BhdGNoSW5wdXRBbmRDaGFuZ2VFdmVudCwgZWMpOworICAgIH0KK30KKwogbmFtZXNwYWNl
IElucHV0VHlwZU5hbWVzIHsKIAogLy8gVGhlIHR5cGUgbmFtZXMgbXVzdCBiZSBsb3dlcmNhc2Vk
IGJlY2F1c2UgdGhleSB3aWxsIGJlIHRoZSByZXR1cm4gdmFsdWVzIG9mCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1
dFR5cGUuaAppbmRleCBiNmRmNDliNGQ4MGFmMDkyOTMzNWQ1ZjMzMDYwYjBiNDhlMWY1ZTZmLi4x
Yzg2Y2IwZmNjYTkzYTdiMzIxMjg4ZDk4MmU5OGM0ZDljOGM4MGQ2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5w
dXRUeXBlLmgKQEAgLTE2MCw2ICsxNjAsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHN0
ZXBNaXNtYXRjaChjb25zdCBTdHJpbmcmLCBkb3VibGUgc3RlcCkgY29uc3Q7CiAgICAgdmlydHVh
bCBkb3VibGUgc3RlcEJhc2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIGRvdWJsZSBzdGVwQmFzZVdp
dGhEZWNpbWFsUGxhY2VzKHVuc2lnbmVkKikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEFs
bG93ZWRWYWx1ZVN0ZXAoZG91YmxlKikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHN0ZXBVcChp
bnQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlcFVwRnJvbVJlbmRlcmVy
KGludCk7CiAgICAgdmlydHVhbCBkb3VibGUgZGVmYXVsdFN0ZXAoKSBjb25zdDsKICAgICB2aXJ0
dWFsIGRvdWJsZSBzdGVwU2NhbGVGYWN0b3IoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFy
c2VkU3RlcFZhbHVlU2hvdWxkQmVJbnRlZ2VyKCkgY29uc3Q7CkBAIC0yOTYsNiArMjk5LDEzIEBA
IHByb3RlY3RlZDoKICAgICBDaHJvbWUqIGNocm9tZSgpIGNvbnN0OwogCiBwcml2YXRlOgorICAg
IGVudW0gQW55U3RlcEhhbmRsaW5nIHsgUmVqZWN0QW55LCBBbnlJc0RlZmF1bHRTdGVwIH07CisK
KyAgICAvLyBIZWxwZXIgZm9yIHN0ZXBVcCgpL3N0ZXBEb3duKCkuIEFkZHMgc3RlcCB2YWx1ZSAq
IGNvdW50IHRvIHRoZSBjdXJyZW50IHZhbHVlLgorICAgIHZvaWQgYXBwbHlTdGVwKGRvdWJsZSBj
b3VudCwgQW55U3RlcEhhbmRsaW5nLCBUZXh0RmllbGRFdmVudEJlaGF2aW9yLCBFeGNlcHRpb25D
b2RlJik7CisgICAgZG91YmxlIGFsaWduVmFsdWVGb3JTdGVwKGRvdWJsZSB2YWx1ZSwgZG91Ymxl
IHN0ZXAsIHVuc2lnbmVkIGN1cnJlbnREZWNpbWFsUGxhY2VzLCB1bnNpZ25lZCBzdGVwRGVjaW1h
bFBsYWNlcyk7CisgICAgYm9vbCBnZXRBbGxvd2VkVmFsdWVTdGVwV2l0aERlY2ltYWxQbGFjZXMo
QW55U3RlcEhhbmRsaW5nLCBkb3VibGUqLCB1bnNpZ25lZCopIGNvbnN0OworCiAgICAgLy8gUmF3
IHBvaW50ZXIgYmVjYXVzZSB0aGUgSFRNTElucHV0RWxlbWVudCBvYmplY3Qgb3ducyB0aGlzIElu
cHV0VHlwZSBvYmplY3QuCiAgICAgSFRNTElucHV0RWxlbWVudCogbV9lbGVtZW50OwogfTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>