<?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>24861</bug_id>
          
          <creation_ts>2009-03-26 16:36:15 -0700</creation_ts>
          <short_desc>Chromium port does not render decorations for &lt;input type=&quot;search&quot;&gt;</short_desc>
          <delta_ts>2009-03-27 11:08:04 -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>PC</rep_platform>
          <op_sys>Windows XP</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Peter Kasting">pkasting</reporter>
          <assigned_to name="Peter Kasting">pkasting</assigned_to>
          <cc>ojan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>115446</commentid>
    <comment_count>0</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-03-26 16:36:15 -0700</bug_when>
    <thetext>Patch coming shortly</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115447</commentid>
    <comment_count>1</comment_count>
      <attachid>28993</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-03-26 16:37:14 -0700</bug_when>
    <thetext>Created attachment 28993
patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115448</commentid>
    <comment_count>2</comment_count>
      <attachid>28994</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-03-26 16:55:06 -0700</bug_when>
    <thetext>Created attachment 28994
patch v2

Now compiles on Linux, hopefully</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115451</commentid>
    <comment_count>3</comment_count>
      <attachid>28994</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-03-26 17:23:47 -0700</bug_when>
    <thetext>Comment on attachment 28994
patch v2

Peter informs me this is just copy/paste code.  That seems like a really bad idea.  Especially for this volume of code.  Can&apos;t we use a RenderThemeChromium superclass here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115460</commentid>
    <comment_count>4</comment_count>
      <attachid>28994</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-03-26 17:53:27 -0700</bug_when>
    <thetext>Comment on attachment 28994
patch v2

Peter says he&apos;s about to refactor this as his next patch.  So this is a fine intermediate step.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115571</commentid>
    <comment_count>5</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-03-27 11:08:04 -0700</bug_when>
    <thetext>Fixed in r42044.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28993</attachid>
            <date>2009-03-26 16:37:14 -0700</date>
            <delta_ts>2009-03-26 16:55:06 -0700</delta_ts>
            <desc>patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>22766</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MjAyMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMDktMDMtMjYgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDg2MQorICAgICAgICBD
aHJvbWl1bSBwb3J0IGRpZCBub3QgcmVuZGVyIGRlY29yYXRpb25zIGZvciA8aW5wdXQgdHlwZT0i
c2VhcmNoIj4uCisgICAgICAgIFRoaXMgY29waWVzIFJlbmRlclRoZW1lV2luLiouCisKKyAgICAg
ICAgKiBjc3MvdGhlbWVDaHJvbWl1bVdpbi5jc3M6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUNocm9taXVtTGludXg6OmV4dHJhRGVmYXVsdFN0eWxlU2hlZXQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjphZGp1c3RTZWFyY2hGaWVsZENhbmNl
bEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1MaW51
eDo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUNocm9taXVtTGludXg6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6YWRqdXN0U2VhcmNo
RmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6YWRqdXN0U2VhcmNoRmll
bGRSZXN1bHRzQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJv
bWl1bUxpbnV4OjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbik6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludFNlYXJjaEZpZWxkKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjopOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6ZXh0cmFEZWZhdWx0U3R5
bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtV2luOjphZGp1
c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lQ2hyb21pdW1XaW46OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6YWRqdXN0U2VhcmNoRmllbGREZWNv
cmF0aW9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6
YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3Jh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtV2luOjphZGp1c3RT
ZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUNocm9taXVtV2luOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbik6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uaDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50U2VhcmNoRmllbGQpOgorCiAyMDA5LTAzLTI2
ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBBZGVsZSBQZXRlcnNvbi4KSW5kZXg6IFdlYkNvcmUvY3NzL3RoZW1lQ2hyb21pdW1XaW4u
Y3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL3RoZW1lQ2hyb21pdW1XaW4uY3NzCShyZXZp
c2lvbiA0MjAxOSkKKysrIFdlYkNvcmUvY3NzL3RoZW1lQ2hyb21pdW1XaW4uY3NzCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKiBUaGVzZSBzdHlsZXMgb3ZlcnJpZGUgdGhlIGRl
ZmF1bHQgc3R5bGluZyBmb3IgSFRNTCBlbGVtZW50cyBhcyBkZWZpbmVkIGluCi0gICBXZWJDb3Jl
L2Nzcy90aGVtZVdpbi5jc3MuICovCi0jaW5jbHVkZSAidGhlbWVXaW4uY3NzIgotCi1pbnB1dFt0
eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiwKLWlucHV0W3R5cGU9
InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWRlY29yYXRpb24sCi1pbnB1dFt0eXBl
PSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtcmVzdWx0cy1idXR0b24gewotICAgIG1hcmdpbjog
MCAwIDAgMDsKLX0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1M
aW51eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bUxpbnV4LmNwcAkocmV2aXNpb24gNDIwMTkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUNocm9taXVtTGludXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCwxNiBA
QCBzdGF0aWMgY29uc3QgaW50IHN0eWxlZE1lbnVMaXN0SW50ZXJuYWxQCiAvLyBmb3JtIGNvbnRy
b2wgZm9udHMuCiBzdGF0aWMgY29uc3QgZmxvYXQgRGVmYXVsdEZvbnRTaXplID0gMTYuMDsKIAor
Ly8gVGhlc2UgdmFsdWVzIGFsbCBtYXRjaCBTYWZhcmkvV2luLgorc3RhdGljIGNvbnN0IGZsb2F0
IGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZSA9IDEzOworc3RhdGljIGNvbnN0IGZsb2F0IGRl
ZmF1bHRDYW5jZWxCdXR0b25TaXplID0gOTsKK3N0YXRpYyBjb25zdCBmbG9hdCBtaW5DYW5jZWxC
dXR0b25TaXplID0gNTsKK3N0YXRpYyBjb25zdCBmbG9hdCBtYXhDYW5jZWxCdXR0b25TaXplID0g
MjE7CitzdGF0aWMgY29uc3QgZmxvYXQgZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRp
b25TaXplID0gMTM7CitzdGF0aWMgY29uc3QgZmxvYXQgbWluU2VhcmNoRmllbGRSZXN1bHRzRGVj
b3JhdGlvblNpemUgPSA5Oworc3RhdGljIGNvbnN0IGZsb2F0IG1heFNlYXJjaEZpZWxkUmVzdWx0
c0RlY29yYXRpb25TaXplID0gMzA7CitzdGF0aWMgY29uc3QgZmxvYXQgZGVmYXVsdFNlYXJjaEZp
ZWxkUmVzdWx0c0J1dHRvbldpZHRoID0gMTg7CisKIHN0YXRpYyBib29sIHN1cHBvcnRzRm9jdXMo
Q29udHJvbFBhcnQgYXBwZWFyYW5jZSkKIHsKICAgICAvLyBUaGlzIGNhdXNlcyBXZWJLaXQgdG8g
ZHJhdyB0aGUgZm9jdXMgcmluZ3MgZm9yIHVzLgpAQCAtOTUsNyArMTA1LDcgQEAgUmVuZGVyVGhl
bWVDaHJvbWl1bUxpbnV4OjpSZW5kZXJUaGVtZUNocgogLy8gVXNlIHRoZSBXaW5kb3dzIHN0eWxl
IHNoZWV0cyB0byBtYXRjaCB0aGVpciBtZXRyaWNzLgogU3RyaW5nIFJlbmRlclRoZW1lQ2hyb21p
dW1MaW51eDo6ZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpCiB7Ci0gICAgcmV0dXJuIFN0cmluZyh0
aGVtZUNocm9taXVtV2luVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHRoZW1lQ2hyb21pdW1X
aW5Vc2VyQWdlbnRTdHlsZVNoZWV0KSk7CisgICAgcmV0dXJuIFN0cmluZyh0aGVtZVdpblVzZXJB
Z2VudFN0eWxlU2hlZXQsIHNpemVvZih0aGVtZVdpblVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKIH0K
IAogU3RyaW5nIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6ZXh0cmFRdWlya3NTdHlsZVNoZWV0
KCkKQEAgLTI3NSwyNCArMjg1LDExNCBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6
cGFpbnRUZXh0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1
bUxpbnV4OjpwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCit2b2lkIFJlbmRlclRoZW1l
Q2hyb21pdW1MaW51eDo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKIHsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAvLyBTY2FsZSB0aGUgYnV0dG9uIHNpemUgYmFzZWQgb24gdGhlIGZv
bnQgc2l6ZQorICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVs
dENvbnRyb2xGb250UGl4ZWxTaXplOworICAgIGludCBjYW5jZWxCdXR0b25TaXplID0gbHJvdW5k
ZihzdGQ6Om1pbihzdGQ6Om1heChtaW5DYW5jZWxCdXR0b25TaXplLCBkZWZhdWx0Q2FuY2VsQnV0
dG9uU2l6ZSAqIGZvbnRTY2FsZSksIG1heENhbmNlbEJ1dHRvblNpemUpKTsKKyAgICBzdHlsZS0+
c2V0V2lkdGgoTGVuZ3RoKGNhbmNlbEJ1dHRvblNpemUsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNl
dEhlaWdodChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQpKTsKK30KKworYm9vbCBSZW5k
ZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVj
dCYgcikKK3sKKyAgICBJbnRSZWN0IGJvdW5kcyA9IHI7CisgICAgQVNTRVJUKG8tPnBhcmVudCgp
KTsKKyAgICBpZiAoIW8tPnBhcmVudCgpIHx8ICFvLT5wYXJlbnQoKS0+aXNCb3goKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIFJlbmRlckJveCogcGFyZW50UmVuZGVyQm94ID0g
dG9SZW5kZXJCb3goby0+cGFyZW50KCkpOworCisgICAgSW50UmVjdCBwYXJlbnRCb3ggPSBwYXJl
bnRSZW5kZXJCb3gtPmFic29sdXRlQ29udGVudEJveCgpOworICAgIAorICAgIC8vIE1ha2Ugc3Vy
ZSB0aGUgc2NhbGVkIGJ1dHRvbiBzdGF5cyBzcXVhcmUgYW5kIHdpbGwgZml0IGluIGl0cyBwYXJl
bnQncyBib3gKKyAgICBib3VuZHMuc2V0SGVpZ2h0KHN0ZDo6bWluKHBhcmVudEJveC53aWR0aCgp
LCBzdGQ6Om1pbihwYXJlbnRCb3guaGVpZ2h0KCksIGJvdW5kcy5oZWlnaHQoKSkpKTsKKyAgICBi
b3VuZHMuc2V0V2lkdGgoYm91bmRzLmhlaWdodCgpKTsKKworICAgIC8vIENlbnRlciB0aGUgYnV0
dG9uIHZlcnRpY2FsbHkuICBSb3VuZCB1cCB0aG91Z2gsIHNvIGlmIGl0IGhhcyB0byBiZSBvbmUg
cGl4ZWwgb2ZmLWNlbnRlciwgaXQgd2lsbAorICAgIC8vIGJlIG9uZSBwaXhlbCBjbG9zZXIgdG8g
dGhlIGJvdHRvbSBvZiB0aGUgZmllbGQuICBUaGlzIHRlbmRzIHRvIGxvb2sgYmV0dGVyIHdpdGgg
dGhlIHRleHQuCisgICAgYm91bmRzLnNldFkocGFyZW50Qm94LnkoKSArIChwYXJlbnRCb3guaGVp
Z2h0KCkgLSBib3VuZHMuaGVpZ2h0KCkgKyAxKSAvIDIpOworCisgICAgc3RhdGljIEltYWdlKiBj
YW5jZWxJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoQ2FuY2VsIiku
cmVsZWFzZVJlZigpOworICAgIHN0YXRpYyBJbWFnZSogY2FuY2VsUHJlc3NlZEltYWdlID0gSW1h
Z2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJzZWFyY2hDYW5jZWxQcmVzc2VkIikucmVsZWFzZVJl
ZigpOworICAgIGkuY29udGV4dC0+ZHJhd0ltYWdlKGlzUHJlc3NlZChvKSA/IGNhbmNlbFByZXNz
ZWRJbWFnZSA6IGNhbmNlbEltYWdlLCBib3VuZHMpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAot
Ym9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVj
b3JhdGlvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBp
LCBjb25zdCBJbnRSZWN0JiByZWN0KQordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OmFk
anVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewotICAgIHJldHVybiB0cnVlOworICAgIElu
dFNpemUgZW1wdHlTaXplKDEsIDExKTsKKyAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGVtcHR5
U2l6ZS53aWR0aCgpLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGVtcHR5
U2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTGlu
dXg6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVj
dG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3sKKyAgICAvLyBTY2Fs
ZSB0aGUgZGVjb3JhdGlvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUKKyAgICBmbG9hdCBm
b250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6
ZTsKKyAgICBpbnQgbWFnbmlmaWVyU2l6ZSA9IGxyb3VuZGYoc3RkOjptaW4oc3RkOjptYXgobWlu
U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUsIGRlZmF1bHRTZWFyY2hGaWVsZFJlc3Vs
dHNEZWNvcmF0aW9uU2l6ZSAqIGZvbnRTY2FsZSksIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtYXhTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSkpOwor
ICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobWFnbmlmaWVyU2l6ZSwgRml4ZWQpKTsKKyAgICBz
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aChtYWduaWZpZXJTaXplLCBGaXhlZCkpOworfQorCitib29s
IFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0
aW9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHIpCit7CisgICAgSW50UmVjdCBib3VuZHMgPSByOworICAgIEFTU0VSVChv
LT5wYXJlbnQoKSk7CisgICAgaWYgKCFvLT5wYXJlbnQoKSB8fCAhby0+cGFyZW50KCktPmlzQm94
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBSZW5kZXJCb3gqIHBhcmVudFJl
bmRlckJveCA9IHRvUmVuZGVyQm94KG8tPnBhcmVudCgpKTsKKyAgICBJbnRSZWN0IHBhcmVudEJv
eCA9IHBhcmVudFJlbmRlckJveC0+YWJzb2x1dGVDb250ZW50Qm94KCk7CisgICAgCisgICAgLy8g
TWFrZSBzdXJlIHRoZSBzY2FsZWQgZGVjb3JhdGlvbiBzdGF5cyBzcXVhcmUgYW5kIHdpbGwgZml0
IGluIGl0cyBwYXJlbnQncyBib3gKKyAgICBib3VuZHMuc2V0SGVpZ2h0KHN0ZDo6bWluKHBhcmVu
dEJveC53aWR0aCgpLCBzdGQ6Om1pbihwYXJlbnRCb3guaGVpZ2h0KCksIGJvdW5kcy5oZWlnaHQo
KSkpKTsKKyAgICBib3VuZHMuc2V0V2lkdGgoYm91bmRzLmhlaWdodCgpKTsKKworICAgIC8vIENl
bnRlciB0aGUgZGVjb3JhdGlvbiB2ZXJ0aWNhbGx5LiAgUm91bmQgdXAgdGhvdWdoLCBzbyBpZiBp
dCBoYXMgdG8gYmUgb25lIHBpeGVsIG9mZi1jZW50ZXIsIGl0IHdpbGwKKyAgICAvLyBiZSBvbmUg
cGl4ZWwgY2xvc2VyIHRvIHRoZSBib3R0b20gb2YgdGhlIGZpZWxkLiAgVGhpcyB0ZW5kcyB0byBs
b29rIGJldHRlciB3aXRoIHRoZSB0ZXh0LgorICAgIGJvdW5kcy5zZXRZKHBhcmVudEJveC55KCkg
KyAocGFyZW50Qm94LmhlaWdodCgpIC0gYm91bmRzLmhlaWdodCgpICsgMSkgLyAyKTsKKyAgICAK
KyAgICBzdGF0aWMgSW1hZ2UqIG1hZ25pZmllckltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJl
c291cmNlKCJzZWFyY2hNYWduaWZpZXIiKS5yZWxlYXNlUmVmKCk7CisgICAgaS5jb250ZXh0LT5k
cmF3SW1hZ2UobWFnbmlmaWVySW1hZ2UsIGJvdW5kcyk7CisgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNC
dXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjphZGp1
c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKIHsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KKyAg
ICAvLyBTY2FsZSB0aGUgYnV0dG9uIHNpemUgYmFzZWQgb24gdGhlIGZvbnQgc2l6ZQorICAgIGZs
b2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVsdENvbnRyb2xGb250UGl4
ZWxTaXplOworICAgIGludCBtYWduaWZpZXJIZWlnaHQgPSBscm91bmRmKHN0ZDo6bWluKHN0ZDo6
bWF4KG1pblNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplLCBkZWZhdWx0U2VhcmNoRmll
bGRSZXN1bHRzRGVjb3JhdGlvblNpemUgKiBmb250U2NhbGUpLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
U2l6ZSkpOworICAgIGludCBtYWduaWZpZXJXaWR0aCA9IGxyb3VuZGYobWFnbmlmaWVySGVpZ2h0
ICogZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbldpZHRoIC8gZGVmYXVsdFNlYXJjaEZp
ZWxkUmVzdWx0c0RlY29yYXRpb25TaXplKTsKKyAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKG1h
Z25pZmllcldpZHRoLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKG1hZ25p
ZmllckhlaWdodCwgRml4ZWQpKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6
OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgSW50UmVj
dCBib3VuZHMgPSByOworICAgIEFTU0VSVChvLT5wYXJlbnQoKSk7CisgICAgaWYgKCFvLT5wYXJl
bnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghby0+cGFyZW50KCkgfHwgIW8t
PnBhcmVudCgpLT5pc0JveCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgUmVu
ZGVyQm94KiBwYXJlbnRSZW5kZXJCb3ggPSB0b1JlbmRlckJveChvLT5wYXJlbnQoKSk7CisgICAg
SW50UmVjdCBwYXJlbnRCb3ggPSBwYXJlbnRSZW5kZXJCb3gtPmFic29sdXRlQ29udGVudEJveCgp
OworICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGUgc2NhbGVkIGRlY29yYXRpb24gd2lsbCBmaXQg
aW4gaXRzIHBhcmVudCdzIGJveAorICAgIGJvdW5kcy5zZXRIZWlnaHQoc3RkOjptaW4ocGFyZW50
Qm94LmhlaWdodCgpLCBib3VuZHMuaGVpZ2h0KCkpKTsKKyAgICBib3VuZHMuc2V0V2lkdGgoc3Rk
OjptaW4ocGFyZW50Qm94LndpZHRoKCksIHN0YXRpY19jYXN0PGludD4oYm91bmRzLmhlaWdodCgp
ICogZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbldpZHRoIC8gZGVmYXVsdFNlYXJjaEZp
ZWxkUmVzdWx0c0RlY29yYXRpb25TaXplKSkpOworCisgICAgLy8gQ2VudGVyIHRoZSBidXR0b24g
dmVydGljYWxseS4gIFJvdW5kIHVwIHRob3VnaCwgc28gaWYgaXQgaGFzIHRvIGJlIG9uZSBwaXhl
bCBvZmYtY2VudGVyLCBpdCB3aWxsCisgICAgLy8gYmUgb25lIHBpeGVsIGNsb3NlciB0byB0aGUg
Ym90dG9tIG9mIHRoZSBmaWVsZC4gIFRoaXMgdGVuZHMgdG8gbG9vayBiZXR0ZXIgd2l0aCB0aGUg
dGV4dC4KKyAgICBib3VuZHMuc2V0WShwYXJlbnRCb3gueSgpICsgKHBhcmVudEJveC5oZWlnaHQo
KSAtIGJvdW5kcy5oZWlnaHQoKSArIDEpIC8gMik7CiAKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1
bUxpbnV4OjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29u
c3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgc3RhdGljIEltYWdlKiBtYWduaWZpZXJJbWFnZSA9IEltYWdl
Ojpsb2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoTWFnbmlmaWVyUmVzdWx0cyIpLnJlbGVhc2VS
ZWYoKTsKKyAgICBpLmNvbnRleHQtPmRyYXdJbWFnZShtYWduaWZpZXJJbWFnZSwgYm91bmRzKTsK
KyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojph
ZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHls
ZSogc3R5bGUsIFdlYkNvcmU6OkVsZW1lbnQqIGUpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguaAkocmV2aXNpb24gNDIwMTkpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguaAkod29ya2luZyBjb3B5
KQpAQCAtNzIsMTEgKzcyLDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKSB7IHJldHVybiBwYWludFRleHRGaWVs
ZChvLCBpLCByKTsgfQogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJl
bmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOworICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3Qq
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVy
biBwYWludFRleHRGaWVsZChvLCBpLCByKTsgfQogCisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNo
RmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNl
YXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmll
bGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2Vh
cmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZp
ZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgICAgIC8vIE1lbnVMaXN0IHJlZmVycyB0byBh
biB1bnN0eWxlZCBtZW51bGlzdCAobWVhbmluZyBhIG1lbnVsaXN0IHdpdGhvdXQKICAgICAgICAg
Ly8gYmFja2dyb3VuZC1jb2xvciBvciBib3JkZXIgc2V0KSBhbmQgTWVudUxpc3RCdXR0b24gcmVm
ZXJzIHRvIGEgc3R5bGVkCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9t
aXVtV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNo
cm9taXVtV2luLmNwcAkocmV2aXNpb24gNDIwMTkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUNocm9taXVtV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMTYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgewogCisvLyBUaGVzZSB2YWx1ZXMgYWxs
IG1hdGNoIFNhZmFyaS9XaW4uCitzdGF0aWMgY29uc3QgZmxvYXQgZGVmYXVsdENvbnRyb2xGb250
UGl4ZWxTaXplID0gMTM7CitzdGF0aWMgY29uc3QgZmxvYXQgZGVmYXVsdENhbmNlbEJ1dHRvblNp
emUgPSA5Oworc3RhdGljIGNvbnN0IGZsb2F0IG1pbkNhbmNlbEJ1dHRvblNpemUgPSA1Oworc3Rh
dGljIGNvbnN0IGZsb2F0IG1heENhbmNlbEJ1dHRvblNpemUgPSAyMTsKK3N0YXRpYyBjb25zdCBm
bG9hdCBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUgPSAxMzsKK3N0YXRp
YyBjb25zdCBmbG9hdCBtaW5TZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSA9IDk7Citz
dGF0aWMgY29uc3QgZmxvYXQgbWF4U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUgPSAz
MDsKK3N0YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uV2lk
dGggPSAxODsKKwogYm9vbCBjYW52YXNIYXNNdWx0aXBsZUxheWVycyhjb25zdCBTa0NhbnZhcyog
Y2FudmFzKQogewogICAgIFNrQ2FudmFzOjpMYXllckl0ZXIgaXRlcihjb25zdF9jYXN0PFNrQ2Fu
dmFzKj4oY2FudmFzKSwgZmFsc2UpOwpAQCAtMjYxLDcgKzI3MSw3IEBAIFJlbmRlclRoZW1lKiB0
aGVtZSgpCiAKIFN0cmluZyBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpleHRyYURlZmF1bHRTdHls
ZVNoZWV0KCkKIHsKLSAgICByZXR1cm4gU3RyaW5nKHRoZW1lQ2hyb21pdW1XaW5Vc2VyQWdlbnRT
dHlsZVNoZWV0LCBzaXplb2YodGhlbWVDaHJvbWl1bVdpblVzZXJBZ2VudFN0eWxlU2hlZXQpKTsK
KyAgICByZXR1cm4gU3RyaW5nKHRoZW1lV2luVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHRo
ZW1lV2luVXNlckFnZW50U3R5bGVTaGVldCkpOwogfQogCiBTdHJpbmcgUmVuZGVyVGhlbWVDaHJv
bWl1bVdpbjo6ZXh0cmFRdWlya3NTdHlsZVNoZWV0KCkKQEAgLTQ2Miw5ICs0NzIsMTE0IEBAIGJv
b2wgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRTbGlkZXIKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRTZWFyY2hGaWVsZChSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRS
ZWN0JiByKQordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjphZGp1c3RTZWFyY2hGaWVsZENh
bmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqKSBjb25zdAoreworICAgIC8vIFNjYWxlIHRoZSBidXR0b24gc2l6ZSBiYXNlZCBvbiB0
aGUgZm9udCBzaXplCisgICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUtPmZvbnRTaXplKCkgLyBk
ZWZhdWx0Q29udHJvbEZvbnRQaXhlbFNpemU7CisgICAgaW50IGNhbmNlbEJ1dHRvblNpemUgPSBs
cm91bmRmKHN0ZDo6bWluKHN0ZDo6bWF4KG1pbkNhbmNlbEJ1dHRvblNpemUsIGRlZmF1bHRDYW5j
ZWxCdXR0b25TaXplICogZm9udFNjYWxlKSwgbWF4Q2FuY2VsQnV0dG9uU2l6ZSkpOworICAgIHN0
eWxlLT5zZXRXaWR0aChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQpKTsKKyAgICBzdHls
ZS0+c2V0SGVpZ2h0KExlbmd0aChjYW5jZWxCdXR0b25TaXplLCBGaXhlZCkpOworfQorCitib29s
IFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50
UmVjdCYgcikKK3sKKyAgICBJbnRSZWN0IGJvdW5kcyA9IHI7CisgICAgQVNTRVJUKG8tPnBhcmVu
dCgpKTsKKyAgICBpZiAoIW8tPnBhcmVudCgpIHx8ICFvLT5wYXJlbnQoKS0+aXNCb3goKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIFJlbmRlckJveCogcGFyZW50UmVuZGVyQm94
ID0gdG9SZW5kZXJCb3goby0+cGFyZW50KCkpOworCisgICAgSW50UmVjdCBwYXJlbnRCb3ggPSBw
YXJlbnRSZW5kZXJCb3gtPmFic29sdXRlQ29udGVudEJveCgpOworICAgIAorICAgIC8vIE1ha2Ug
c3VyZSB0aGUgc2NhbGVkIGJ1dHRvbiBzdGF5cyBzcXVhcmUgYW5kIHdpbGwgZml0IGluIGl0cyBw
YXJlbnQncyBib3gKKyAgICBib3VuZHMuc2V0SGVpZ2h0KHN0ZDo6bWluKHBhcmVudEJveC53aWR0
aCgpLCBzdGQ6Om1pbihwYXJlbnRCb3guaGVpZ2h0KCksIGJvdW5kcy5oZWlnaHQoKSkpKTsKKyAg
ICBib3VuZHMuc2V0V2lkdGgoYm91bmRzLmhlaWdodCgpKTsKKworICAgIC8vIENlbnRlciB0aGUg
YnV0dG9uIHZlcnRpY2FsbHkuICBSb3VuZCB1cCB0aG91Z2gsIHNvIGlmIGl0IGhhcyB0byBiZSBv
bmUgcGl4ZWwgb2ZmLWNlbnRlciwgaXQgd2lsbAorICAgIC8vIGJlIG9uZSBwaXhlbCBjbG9zZXIg
dG8gdGhlIGJvdHRvbSBvZiB0aGUgZmllbGQuICBUaGlzIHRlbmRzIHRvIGxvb2sgYmV0dGVyIHdp
dGggdGhlIHRleHQuCisgICAgYm91bmRzLnNldFkocGFyZW50Qm94LnkoKSArIChwYXJlbnRCb3gu
aGVpZ2h0KCkgLSBib3VuZHMuaGVpZ2h0KCkgKyAxKSAvIDIpOworCisgICAgc3RhdGljIEltYWdl
KiBjYW5jZWxJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoQ2FuY2Vs
IikucmVsZWFzZVJlZigpOworICAgIHN0YXRpYyBJbWFnZSogY2FuY2VsUHJlc3NlZEltYWdlID0g
SW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJzZWFyY2hDYW5jZWxQcmVzc2VkIikucmVsZWFz
ZVJlZigpOworICAgIGkuY29udGV4dC0+ZHJhd0ltYWdlKGlzUHJlc3NlZChvKSA/IGNhbmNlbFBy
ZXNzZWRJbWFnZSA6IGNhbmNlbEltYWdlLCBib3VuZHMpOworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRp
b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50Kikg
Y29uc3QKK3sKKyAgICBJbnRTaXplIGVtcHR5U2l6ZSgxLCAxMSk7CisgICAgc3R5bGUtPnNldFdp
ZHRoKExlbmd0aChlbXB0eVNpemUud2lkdGgoKSwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0SGVp
Z2h0KExlbmd0aChlbXB0eVNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Cit9CisKK3ZvaWQgUmVuZGVy
VGhlbWVDaHJvbWl1bVdpbjo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxl
KENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAog
ewotICAgIHJldHVybiBwYWludFRleHRGaWVsZChvLCBpLCByKTsKKyAgICAvLyBTY2FsZSB0aGUg
ZGVjb3JhdGlvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUKKyAgICBmbG9hdCBmb250U2Nh
bGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZTsKKyAg
ICBpbnQgbWFnbmlmaWVyU2l6ZSA9IGxyb3VuZGYoc3RkOjptaW4oc3RkOjptYXgobWluU2VhcmNo
RmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUsIGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uU2l6ZSAqIGZvbnRTY2FsZSksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYXhTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSkpOworICAgIHN0
eWxlLT5zZXRXaWR0aChMZW5ndGgobWFnbmlmaWVyU2l6ZSwgRml4ZWQpKTsKKyAgICBzdHlsZS0+
c2V0SGVpZ2h0KExlbmd0aChtYWduaWZpZXJTaXplLCBGaXhlZCkpOworfQorCitib29sIFJlbmRl
clRoZW1lQ2hyb21pdW1XaW46OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRS
ZWN0JiByKQoreworICAgIEludFJlY3QgYm91bmRzID0gcjsKKyAgICBBU1NFUlQoby0+cGFyZW50
KCkpOworICAgIGlmICghby0+cGFyZW50KCkgfHwgIW8tPnBhcmVudCgpLT5pc0JveCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgUmVuZGVyQm94KiBwYXJlbnRSZW5kZXJCb3gg
PSB0b1JlbmRlckJveChvLT5wYXJlbnQoKSk7CisgICAgSW50UmVjdCBwYXJlbnRCb3ggPSBwYXJl
bnRSZW5kZXJCb3gtPmFic29sdXRlQ29udGVudEJveCgpOworICAgIAorICAgIC8vIE1ha2Ugc3Vy
ZSB0aGUgc2NhbGVkIGRlY29yYXRpb24gc3RheXMgc3F1YXJlIGFuZCB3aWxsIGZpdCBpbiBpdHMg
cGFyZW50J3MgYm94CisgICAgYm91bmRzLnNldEhlaWdodChzdGQ6Om1pbihwYXJlbnRCb3gud2lk
dGgoKSwgc3RkOjptaW4ocGFyZW50Qm94LmhlaWdodCgpLCBib3VuZHMuaGVpZ2h0KCkpKSk7Cisg
ICAgYm91bmRzLnNldFdpZHRoKGJvdW5kcy5oZWlnaHQoKSk7CisKKyAgICAvLyBDZW50ZXIgdGhl
IGRlY29yYXRpb24gdmVydGljYWxseS4gIFJvdW5kIHVwIHRob3VnaCwgc28gaWYgaXQgaGFzIHRv
IGJlIG9uZSBwaXhlbCBvZmYtY2VudGVyLCBpdCB3aWxsCisgICAgLy8gYmUgb25lIHBpeGVsIGNs
b3NlciB0byB0aGUgYm90dG9tIG9mIHRoZSBmaWVsZC4gIFRoaXMgdGVuZHMgdG8gbG9vayBiZXR0
ZXIgd2l0aCB0aGUgdGV4dC4KKyAgICBib3VuZHMuc2V0WShwYXJlbnRCb3gueSgpICsgKHBhcmVu
dEJveC5oZWlnaHQoKSAtIGJvdW5kcy5oZWlnaHQoKSArIDEpIC8gMik7CisgICAgCisgICAgc3Rh
dGljIEltYWdlKiBtYWduaWZpZXJJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgi
c2VhcmNoTWFnbmlmaWVyIikucmVsZWFzZVJlZigpOworICAgIGkuY29udGV4dC0+ZHJhd0ltYWdl
KG1hZ25pZmllckltYWdlLCBib3VuZHMpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBS
ZW5kZXJUaGVtZUNocm9taXVtV2luOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QK
K3sKKyAgICAvLyBTY2FsZSB0aGUgYnV0dG9uIHNpemUgYmFzZWQgb24gdGhlIGZvbnQgc2l6ZQor
ICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVsdENvbnRyb2xG
b250UGl4ZWxTaXplOworICAgIGludCBtYWduaWZpZXJIZWlnaHQgPSBscm91bmRmKHN0ZDo6bWlu
KHN0ZDo6bWF4KG1pblNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplLCBkZWZhdWx0U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUgKiBmb250U2NhbGUpLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uU2l6ZSkpOworICAgIGludCBtYWduaWZpZXJXaWR0aCA9IGxyb3VuZGYobWFnbmlmaWVy
SGVpZ2h0ICogZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbldpZHRoIC8gZGVmYXVsdFNl
YXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplKTsKKyAgICBzdHlsZS0+c2V0V2lkdGgoTGVu
Z3RoKG1hZ25pZmllcldpZHRoLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3Ro
KG1hZ25pZmllckhlaWdodCwgRml4ZWQpKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUNocm9taXVt
V2luOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIElu
dFJlY3QgYm91bmRzID0gcjsKKyAgICBBU1NFUlQoby0+cGFyZW50KCkpOworICAgIGlmICghby0+
cGFyZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW8tPnBhcmVudCgpIHx8
ICFvLT5wYXJlbnQoKS0+aXNCb3goKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IFJlbmRlckJveCogcGFyZW50UmVuZGVyQm94ID0gdG9SZW5kZXJCb3goby0+cGFyZW50KCkpOwor
ICAgIEludFJlY3QgcGFyZW50Qm94ID0gcGFyZW50UmVuZGVyQm94LT5hYnNvbHV0ZUNvbnRlbnRC
b3goKTsKKyAgICAKKyAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBkZWNvcmF0aW9uIHdpbGwg
Zml0IGluIGl0cyBwYXJlbnQncyBib3gKKyAgICBib3VuZHMuc2V0SGVpZ2h0KHN0ZDo6bWluKHBh
cmVudEJveC5oZWlnaHQoKSwgYm91bmRzLmhlaWdodCgpKSk7CisgICAgYm91bmRzLnNldFdpZHRo
KHN0ZDo6bWluKHBhcmVudEJveC53aWR0aCgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJvdW5kcy5oZWln
aHQoKSAqIGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25XaWR0aCAvIGRlZmF1bHRTZWFy
Y2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSkpKTsKKworICAgIC8vIENlbnRlciB0aGUgYnV0
dG9uIHZlcnRpY2FsbHkuICBSb3VuZCB1cCB0aG91Z2gsIHNvIGlmIGl0IGhhcyB0byBiZSBvbmUg
cGl4ZWwgb2ZmLWNlbnRlciwgaXQgd2lsbAorICAgIC8vIGJlIG9uZSBwaXhlbCBjbG9zZXIgdG8g
dGhlIGJvdHRvbSBvZiB0aGUgZmllbGQuICBUaGlzIHRlbmRzIHRvIGxvb2sgYmV0dGVyIHdpdGgg
dGhlIHRleHQuCisgICAgYm91bmRzLnNldFkocGFyZW50Qm94LnkoKSArIChwYXJlbnRCb3guaGVp
Z2h0KCkgLSBib3VuZHMuaGVpZ2h0KCkgKyAxKSAvIDIpOworCisgICAgc3RhdGljIEltYWdlKiBt
YWduaWZpZXJJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoTWFnbmlm
aWVyUmVzdWx0cyIpLnJlbGVhc2VSZWYoKTsKKyAgICBpLmNvbnRleHQtPmRyYXdJbWFnZShtYWdu
aWZpZXJJbWFnZSwgYm91bmRzKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgUmVuZGVy
VGhlbWVDaHJvbWl1bVdpbjo6YWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBz
ZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdApJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uaAkocmV2aXNpb24gNDIwMTkp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg4LDcgKzg4LDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKSB7IHJldHVybiBwYWludFNs
aWRlclRyYWNrKG8sIGksIHIpOyB9CiAKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNo
RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRl
ck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
IHsgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOyB9CisKKyAgICAgICAgdmlydHVhbCB2
b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RT
ZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFy
Y2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNl
YXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgICAgICAvLyBNZW51TGlzdCByZWZl
cnMgdG8gYW4gdW5zdHlsZWQgbWVudWxpc3QgKG1lYW5pbmcgYSBtZW51bGlzdCB3aXRob3V0CiAg
ICAgICAgIC8vIGJhY2tncm91bmQtY29sb3Igb3IgYm9yZGVyIHNldCkgYW5kIE1lbnVMaXN0QnV0
dG9uIHJlZmVycyB0byBhIHN0eWxlZAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28994</attachid>
            <date>2009-03-26 16:55:06 -0700</date>
            <delta_ts>2009-03-26 17:53:27 -0700</delta_ts>
            <desc>patch v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>22988</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MjAyMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMDktMDMtMjYgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDg2MQorICAgICAgICBD
aHJvbWl1bSBwb3J0IGRpZCBub3QgcmVuZGVyIGRlY29yYXRpb25zIGZvciA8aW5wdXQgdHlwZT0i
c2VhcmNoIj4uCisgICAgICAgIFRoaXMgY29waWVzIFJlbmRlclRoZW1lV2luLiouCisKKyAgICAg
ICAgKiBjc3MvdGhlbWVDaHJvbWl1bVdpbi5jc3M6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUNocm9taXVtTGludXg6OmV4dHJhRGVmYXVsdFN0eWxlU2hlZXQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjphZGp1c3RTZWFyY2hGaWVsZENhbmNl
bEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1MaW51
eDo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUNocm9taXVtTGludXg6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6YWRqdXN0U2VhcmNo
RmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6YWRqdXN0U2VhcmNoRmll
bGRSZXN1bHRzQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJv
bWl1bUxpbnV4OjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbik6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludFNlYXJjaEZpZWxkKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjopOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6ZXh0cmFEZWZhdWx0U3R5
bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtV2luOjphZGp1
c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lQ2hyb21pdW1XaW46OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6YWRqdXN0U2VhcmNoRmllbGREZWNv
cmF0aW9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6
YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3Jh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtV2luOjphZGp1c3RT
ZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUNocm9taXVtV2luOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbik6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uaDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50U2VhcmNoRmllbGQpOgorCiAyMDA5LTAzLTI2
ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBBZGVsZSBQZXRlcnNvbi4KSW5kZXg6IFdlYkNvcmUvY3NzL3RoZW1lQ2hyb21pdW1XaW4u
Y3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL3RoZW1lQ2hyb21pdW1XaW4uY3NzCShyZXZp
c2lvbiA0MjAxOSkKKysrIFdlYkNvcmUvY3NzL3RoZW1lQ2hyb21pdW1XaW4uY3NzCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKiBUaGVzZSBzdHlsZXMgb3ZlcnJpZGUgdGhlIGRl
ZmF1bHQgc3R5bGluZyBmb3IgSFRNTCBlbGVtZW50cyBhcyBkZWZpbmVkIGluCi0gICBXZWJDb3Jl
L2Nzcy90aGVtZVdpbi5jc3MuICovCi0jaW5jbHVkZSAidGhlbWVXaW4uY3NzIgotCi1pbnB1dFt0
eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiwKLWlucHV0W3R5cGU9
InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWRlY29yYXRpb24sCi1pbnB1dFt0eXBl
PSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtcmVzdWx0cy1idXR0b24gewotICAgIG1hcmdpbjog
MCAwIDAgMDsKLX0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1M
aW51eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bUxpbnV4LmNwcAkocmV2aXNpb24gNDIwMTkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUNocm9taXVtTGludXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBA
CiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKyNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNs
dWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgogI2luY2x1
ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCkBAIC01NCw2ICs1NSwxNiBAQCBzdGF0aWMgY29u
c3QgaW50IHN0eWxlZE1lbnVMaXN0SW50ZXJuYWxQCiAvLyBmb3JtIGNvbnRyb2wgZm9udHMuCiBz
dGF0aWMgY29uc3QgZmxvYXQgRGVmYXVsdEZvbnRTaXplID0gMTYuMDsKIAorLy8gVGhlc2UgdmFs
dWVzIGFsbCBtYXRjaCBTYWZhcmkvV2luLgorc3RhdGljIGNvbnN0IGZsb2F0IGRlZmF1bHRDb250
cm9sRm9udFBpeGVsU2l6ZSA9IDEzOworc3RhdGljIGNvbnN0IGZsb2F0IGRlZmF1bHRDYW5jZWxC
dXR0b25TaXplID0gOTsKK3N0YXRpYyBjb25zdCBmbG9hdCBtaW5DYW5jZWxCdXR0b25TaXplID0g
NTsKK3N0YXRpYyBjb25zdCBmbG9hdCBtYXhDYW5jZWxCdXR0b25TaXplID0gMjE7CitzdGF0aWMg
Y29uc3QgZmxvYXQgZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplID0gMTM7
CitzdGF0aWMgY29uc3QgZmxvYXQgbWluU2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUg
PSA5Oworc3RhdGljIGNvbnN0IGZsb2F0IG1heFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25T
aXplID0gMzA7CitzdGF0aWMgY29uc3QgZmxvYXQgZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0J1
dHRvbldpZHRoID0gMTg7CisKIHN0YXRpYyBib29sIHN1cHBvcnRzRm9jdXMoQ29udHJvbFBhcnQg
YXBwZWFyYW5jZSkKIHsKICAgICAvLyBUaGlzIGNhdXNlcyBXZWJLaXQgdG8gZHJhdyB0aGUgZm9j
dXMgcmluZ3MgZm9yIHVzLgpAQCAtOTUsNyArMTA2LDcgQEAgUmVuZGVyVGhlbWVDaHJvbWl1bUxp
bnV4OjpSZW5kZXJUaGVtZUNocgogLy8gVXNlIHRoZSBXaW5kb3dzIHN0eWxlIHNoZWV0cyB0byBt
YXRjaCB0aGVpciBtZXRyaWNzLgogU3RyaW5nIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6ZXh0
cmFEZWZhdWx0U3R5bGVTaGVldCgpCiB7Ci0gICAgcmV0dXJuIFN0cmluZyh0aGVtZUNocm9taXVt
V2luVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHRoZW1lQ2hyb21pdW1XaW5Vc2VyQWdlbnRT
dHlsZVNoZWV0KSk7CisgICAgcmV0dXJuIFN0cmluZyh0aGVtZVdpblVzZXJBZ2VudFN0eWxlU2hl
ZXQsIHNpemVvZih0aGVtZVdpblVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKIH0KIAogU3RyaW5nIFJl
bmRlclRoZW1lQ2hyb21pdW1MaW51eDo6ZXh0cmFRdWlya3NTdHlsZVNoZWV0KCkKQEAgLTI3NSwy
NCArMjg2LDExNCBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRUZXh0CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWlu
dFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludElu
Zm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51
eDo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKIHsKLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICAvLyBTY2FsZSB0aGUgYnV0dG9uIHNpemUgYmFzZWQgb24gdGhlIGZvbnQgc2l6ZQorICAg
IGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVsdENvbnRyb2xGb250
UGl4ZWxTaXplOworICAgIGludCBjYW5jZWxCdXR0b25TaXplID0gbHJvdW5kZihzdGQ6Om1pbihz
dGQ6Om1heChtaW5DYW5jZWxCdXR0b25TaXplLCBkZWZhdWx0Q2FuY2VsQnV0dG9uU2l6ZSAqIGZv
bnRTY2FsZSksIG1heENhbmNlbEJ1dHRvblNpemUpKTsKKyAgICBzdHlsZS0+c2V0V2lkdGgoTGVu
Z3RoKGNhbmNlbEJ1dHRvblNpemUsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldEhlaWdodChMZW5n
dGgoY2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQpKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUNocm9t
aXVtTGludXg6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAg
ICBJbnRSZWN0IGJvdW5kcyA9IHI7CisgICAgQVNTRVJUKG8tPnBhcmVudCgpKTsKKyAgICBpZiAo
IW8tPnBhcmVudCgpIHx8ICFvLT5wYXJlbnQoKS0+aXNCb3goKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIFJlbmRlckJveCogcGFyZW50UmVuZGVyQm94ID0gdG9SZW5kZXJCb3go
by0+cGFyZW50KCkpOworCisgICAgSW50UmVjdCBwYXJlbnRCb3ggPSBwYXJlbnRSZW5kZXJCb3gt
PmFic29sdXRlQ29udGVudEJveCgpOworICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGUgc2NhbGVk
IGJ1dHRvbiBzdGF5cyBzcXVhcmUgYW5kIHdpbGwgZml0IGluIGl0cyBwYXJlbnQncyBib3gKKyAg
ICBib3VuZHMuc2V0SGVpZ2h0KHN0ZDo6bWluKHBhcmVudEJveC53aWR0aCgpLCBzdGQ6Om1pbihw
YXJlbnRCb3guaGVpZ2h0KCksIGJvdW5kcy5oZWlnaHQoKSkpKTsKKyAgICBib3VuZHMuc2V0V2lk
dGgoYm91bmRzLmhlaWdodCgpKTsKKworICAgIC8vIENlbnRlciB0aGUgYnV0dG9uIHZlcnRpY2Fs
bHkuICBSb3VuZCB1cCB0aG91Z2gsIHNvIGlmIGl0IGhhcyB0byBiZSBvbmUgcGl4ZWwgb2ZmLWNl
bnRlciwgaXQgd2lsbAorICAgIC8vIGJlIG9uZSBwaXhlbCBjbG9zZXIgdG8gdGhlIGJvdHRvbSBv
ZiB0aGUgZmllbGQuICBUaGlzIHRlbmRzIHRvIGxvb2sgYmV0dGVyIHdpdGggdGhlIHRleHQuCisg
ICAgYm91bmRzLnNldFkocGFyZW50Qm94LnkoKSArIChwYXJlbnRCb3guaGVpZ2h0KCkgLSBib3Vu
ZHMuaGVpZ2h0KCkgKyAxKSAvIDIpOworCisgICAgc3RhdGljIEltYWdlKiBjYW5jZWxJbWFnZSA9
IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoQ2FuY2VsIikucmVsZWFzZVJlZigp
OworICAgIHN0YXRpYyBJbWFnZSogY2FuY2VsUHJlc3NlZEltYWdlID0gSW1hZ2U6OmxvYWRQbGF0
Zm9ybVJlc291cmNlKCJzZWFyY2hDYW5jZWxQcmVzc2VkIikucmVsZWFzZVJlZigpOworICAgIGku
Y29udGV4dC0+ZHJhd0ltYWdlKGlzUHJlc3NlZChvKSA/IGNhbmNlbFByZXNzZWRJbWFnZSA6IGNh
bmNlbEltYWdlLCBib3VuZHMpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJU
aGVtZUNocm9taXVtTGludXg6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OmFkanVzdFNlYXJjaEZp
ZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUs
IEVsZW1lbnQqKSBjb25zdAogewotICAgIHJldHVybiB0cnVlOworICAgIEludFNpemUgZW1wdHlT
aXplKDEsIDExKTsKKyAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGVtcHR5U2l6ZS53aWR0aCgp
LCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGVtcHR5U2l6ZS5oZWlnaHQo
KSwgRml4ZWQpKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OmFkanVzdFNl
YXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3sKKyAgICAvLyBTY2FsZSB0aGUgZGVjb3Jh
dGlvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUKKyAgICBmbG9hdCBmb250U2NhbGUgPSBz
dHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZTsKKyAgICBpbnQg
bWFnbmlmaWVyU2l6ZSA9IGxyb3VuZGYoc3RkOjptaW4oc3RkOjptYXgobWluU2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblNpemUsIGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
U2l6ZSAqIGZvbnRTY2FsZSksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYXhTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSkpOworICAgIHN0eWxlLT5z
ZXRXaWR0aChMZW5ndGgobWFnbmlmaWVyU2l6ZSwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0SGVp
Z2h0KExlbmd0aChtYWduaWZpZXJTaXplLCBGaXhlZCkpOworfQorCitib29sIFJlbmRlclRoZW1l
Q2hyb21pdW1MaW51eDo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9i
amVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHIpCit7CisgICAgSW50UmVjdCBib3VuZHMgPSByOworICAgIEFTU0VSVChvLT5wYXJlbnQoKSk7
CisgICAgaWYgKCFvLT5wYXJlbnQoKSB8fCAhby0+cGFyZW50KCktPmlzQm94KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBSZW5kZXJCb3gqIHBhcmVudFJlbmRlckJveCA9IHRv
UmVuZGVyQm94KG8tPnBhcmVudCgpKTsKKyAgICBJbnRSZWN0IHBhcmVudEJveCA9IHBhcmVudFJl
bmRlckJveC0+YWJzb2x1dGVDb250ZW50Qm94KCk7CisgICAgCisgICAgLy8gTWFrZSBzdXJlIHRo
ZSBzY2FsZWQgZGVjb3JhdGlvbiBzdGF5cyBzcXVhcmUgYW5kIHdpbGwgZml0IGluIGl0cyBwYXJl
bnQncyBib3gKKyAgICBib3VuZHMuc2V0SGVpZ2h0KHN0ZDo6bWluKHBhcmVudEJveC53aWR0aCgp
LCBzdGQ6Om1pbihwYXJlbnRCb3guaGVpZ2h0KCksIGJvdW5kcy5oZWlnaHQoKSkpKTsKKyAgICBi
b3VuZHMuc2V0V2lkdGgoYm91bmRzLmhlaWdodCgpKTsKKworICAgIC8vIENlbnRlciB0aGUgZGVj
b3JhdGlvbiB2ZXJ0aWNhbGx5LiAgUm91bmQgdXAgdGhvdWdoLCBzbyBpZiBpdCBoYXMgdG8gYmUg
b25lIHBpeGVsIG9mZi1jZW50ZXIsIGl0IHdpbGwKKyAgICAvLyBiZSBvbmUgcGl4ZWwgY2xvc2Vy
IHRvIHRoZSBib3R0b20gb2YgdGhlIGZpZWxkLiAgVGhpcyB0ZW5kcyB0byBsb29rIGJldHRlciB3
aXRoIHRoZSB0ZXh0LgorICAgIGJvdW5kcy5zZXRZKHBhcmVudEJveC55KCkgKyAocGFyZW50Qm94
LmhlaWdodCgpIC0gYm91bmRzLmhlaWdodCgpICsgMSkgLyAyKTsKKyAgICAKKyAgICBzdGF0aWMg
SW1hZ2UqIG1hZ25pZmllckltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJzZWFy
Y2hNYWduaWZpZXIiKS5yZWxlYXNlUmVmKCk7CisgICAgaS5jb250ZXh0LT5kcmF3SW1hZ2UobWFn
bmlmaWVySW1hZ2UsIGJvdW5kcyk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRl
clRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVj
dCYgcmVjdCkKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjphZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KikgY29uc3QKIHsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KKyAgICAvLyBTY2FsZSB0
aGUgYnV0dG9uIHNpemUgYmFzZWQgb24gdGhlIGZvbnQgc2l6ZQorICAgIGZsb2F0IGZvbnRTY2Fs
ZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVsdENvbnRyb2xGb250UGl4ZWxTaXplOworICAg
IGludCBtYWduaWZpZXJIZWlnaHQgPSBscm91bmRmKHN0ZDo6bWluKHN0ZDo6bWF4KG1pblNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplLCBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzRGVj
b3JhdGlvblNpemUgKiBmb250U2NhbGUpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYXhTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSkpOworICAg
IGludCBtYWduaWZpZXJXaWR0aCA9IGxyb3VuZGYobWFnbmlmaWVySGVpZ2h0ICogZGVmYXVsdFNl
YXJjaEZpZWxkUmVzdWx0c0J1dHRvbldpZHRoIC8gZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0Rl
Y29yYXRpb25TaXplKTsKKyAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKG1hZ25pZmllcldpZHRo
LCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKG1hZ25pZmllckhlaWdodCwg
Rml4ZWQpKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50U2VhcmNo
RmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgSW50UmVjdCBib3VuZHMgPSBy
OworICAgIEFTU0VSVChvLT5wYXJlbnQoKSk7CisgICAgaWYgKCFvLT5wYXJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghby0+cGFyZW50KCkgfHwgIW8tPnBhcmVudCgpLT5p
c0JveCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgUmVuZGVyQm94KiBwYXJl
bnRSZW5kZXJCb3ggPSB0b1JlbmRlckJveChvLT5wYXJlbnQoKSk7CisgICAgSW50UmVjdCBwYXJl
bnRCb3ggPSBwYXJlbnRSZW5kZXJCb3gtPmFic29sdXRlQ29udGVudEJveCgpOworICAgIAorICAg
IC8vIE1ha2Ugc3VyZSB0aGUgc2NhbGVkIGRlY29yYXRpb24gd2lsbCBmaXQgaW4gaXRzIHBhcmVu
dCdzIGJveAorICAgIGJvdW5kcy5zZXRIZWlnaHQoc3RkOjptaW4ocGFyZW50Qm94LmhlaWdodCgp
LCBib3VuZHMuaGVpZ2h0KCkpKTsKKyAgICBib3VuZHMuc2V0V2lkdGgoc3RkOjptaW4ocGFyZW50
Qm94LndpZHRoKCksIHN0YXRpY19jYXN0PGludD4oYm91bmRzLmhlaWdodCgpICogZGVmYXVsdFNl
YXJjaEZpZWxkUmVzdWx0c0J1dHRvbldpZHRoIC8gZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0Rl
Y29yYXRpb25TaXplKSkpOworCisgICAgLy8gQ2VudGVyIHRoZSBidXR0b24gdmVydGljYWxseS4g
IFJvdW5kIHVwIHRob3VnaCwgc28gaWYgaXQgaGFzIHRvIGJlIG9uZSBwaXhlbCBvZmYtY2VudGVy
LCBpdCB3aWxsCisgICAgLy8gYmUgb25lIHBpeGVsIGNsb3NlciB0byB0aGUgYm90dG9tIG9mIHRo
ZSBmaWVsZC4gIFRoaXMgdGVuZHMgdG8gbG9vayBiZXR0ZXIgd2l0aCB0aGUgdGV4dC4KKyAgICBi
b3VuZHMuc2V0WShwYXJlbnRCb3gueSgpICsgKHBhcmVudEJveC5oZWlnaHQoKSAtIGJvdW5kcy5o
ZWlnaHQoKSArIDEpIC8gMik7CiAKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWlu
dFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJuIHRy
dWU7CisgICAgc3RhdGljIEltYWdlKiBtYWduaWZpZXJJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZv
cm1SZXNvdXJjZSgic2VhcmNoTWFnbmlmaWVyUmVzdWx0cyIpLnJlbGVhc2VSZWYoKTsKKyAgICBp
LmNvbnRleHQtPmRyYXdJbWFnZShtYWduaWZpZXJJbWFnZSwgYm91bmRzKTsKKyAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjphZGp1c3RNZW51TGlz
dFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIFdl
YkNvcmU6OkVsZW1lbnQqIGUpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUNocm9taXVtTGludXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUNocm9taXVtTGludXguaAkocmV2aXNpb24gNDIwMTkpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguaAkod29ya2luZyBjb3B5KQpAQCAtNzIsMTEg
KzcyLDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiBpLCBjb25zdCBJbnRSZWN0JiByKSB7IHJldHVybiBwYWludFRleHRGaWVsZChvLCBpLCByKTsg
fQogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCos
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgICAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKSB7IHJldHVybiBwYWlu
dFRleHRGaWVsZChvLCBpLCByKTsgfQogCisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFy
Y2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRD
YW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZp
ZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1
bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRz
RGVjb3JhdGlvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmll
bGRSZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3Vs
dHNCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2Fu
Y2VsQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwogCiAgICAgICAgIC8vIE1lbnVMaXN0IHJlZmVycyB0byBhbiB1bnN0
eWxlZCBtZW51bGlzdCAobWVhbmluZyBhIG1lbnVsaXN0IHdpdGhvdXQKICAgICAgICAgLy8gYmFj
a2dyb3VuZC1jb2xvciBvciBib3JkZXIgc2V0KSBhbmQgTWVudUxpc3RCdXR0b24gcmVmZXJzIHRv
IGEgc3R5bGVkCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2lu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVt
V2luLmNwcAkocmV2aXNpb24gNDIwMTkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUNocm9taXVtV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMTYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgewogCisvLyBUaGVzZSB2YWx1ZXMgYWxsIG1hdGNo
IFNhZmFyaS9XaW4uCitzdGF0aWMgY29uc3QgZmxvYXQgZGVmYXVsdENvbnRyb2xGb250UGl4ZWxT
aXplID0gMTM7CitzdGF0aWMgY29uc3QgZmxvYXQgZGVmYXVsdENhbmNlbEJ1dHRvblNpemUgPSA5
Oworc3RhdGljIGNvbnN0IGZsb2F0IG1pbkNhbmNlbEJ1dHRvblNpemUgPSA1Oworc3RhdGljIGNv
bnN0IGZsb2F0IG1heENhbmNlbEJ1dHRvblNpemUgPSAyMTsKK3N0YXRpYyBjb25zdCBmbG9hdCBk
ZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUgPSAxMzsKK3N0YXRpYyBjb25z
dCBmbG9hdCBtaW5TZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSA9IDk7CitzdGF0aWMg
Y29uc3QgZmxvYXQgbWF4U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUgPSAzMDsKK3N0
YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uV2lkdGggPSAx
ODsKKwogYm9vbCBjYW52YXNIYXNNdWx0aXBsZUxheWVycyhjb25zdCBTa0NhbnZhcyogY2FudmFz
KQogewogICAgIFNrQ2FudmFzOjpMYXllckl0ZXIgaXRlcihjb25zdF9jYXN0PFNrQ2FudmFzKj4o
Y2FudmFzKSwgZmFsc2UpOwpAQCAtMjYxLDcgKzI3MSw3IEBAIFJlbmRlclRoZW1lKiB0aGVtZSgp
CiAKIFN0cmluZyBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpleHRyYURlZmF1bHRTdHlsZVNoZWV0
KCkKIHsKLSAgICByZXR1cm4gU3RyaW5nKHRoZW1lQ2hyb21pdW1XaW5Vc2VyQWdlbnRTdHlsZVNo
ZWV0LCBzaXplb2YodGhlbWVDaHJvbWl1bVdpblVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKKyAgICBy
ZXR1cm4gU3RyaW5nKHRoZW1lV2luVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHRoZW1lV2lu
VXNlckFnZW50U3R5bGVTaGVldCkpOwogfQogCiBTdHJpbmcgUmVuZGVyVGhlbWVDaHJvbWl1bVdp
bjo6ZXh0cmFRdWlya3NTdHlsZVNoZWV0KCkKQEAgLTQ2Miw5ICs0NzIsMTE0IEBAIGJvb2wgUmVu
ZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRTbGlkZXIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiBy
KQordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQq
KSBjb25zdAoreworICAgIC8vIFNjYWxlIHRoZSBidXR0b24gc2l6ZSBiYXNlZCBvbiB0aGUgZm9u
dCBzaXplCisgICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUtPmZvbnRTaXplKCkgLyBkZWZhdWx0
Q29udHJvbEZvbnRQaXhlbFNpemU7CisgICAgaW50IGNhbmNlbEJ1dHRvblNpemUgPSBscm91bmRm
KHN0ZDo6bWluKHN0ZDo6bWF4KG1pbkNhbmNlbEJ1dHRvblNpemUsIGRlZmF1bHRDYW5jZWxCdXR0
b25TaXplICogZm9udFNjYWxlKSwgbWF4Q2FuY2VsQnV0dG9uU2l6ZSkpOworICAgIHN0eWxlLT5z
ZXRXaWR0aChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0
SGVpZ2h0KExlbmd0aChjYW5jZWxCdXR0b25TaXplLCBGaXhlZCkpOworfQorCitib29sIFJlbmRl
clRoZW1lQ2hyb21pdW1XaW46OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYg
cikKK3sKKyAgICBJbnRSZWN0IGJvdW5kcyA9IHI7CisgICAgQVNTRVJUKG8tPnBhcmVudCgpKTsK
KyAgICBpZiAoIW8tPnBhcmVudCgpIHx8ICFvLT5wYXJlbnQoKS0+aXNCb3goKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIFJlbmRlckJveCogcGFyZW50UmVuZGVyQm94ID0gdG9S
ZW5kZXJCb3goby0+cGFyZW50KCkpOworCisgICAgSW50UmVjdCBwYXJlbnRCb3ggPSBwYXJlbnRS
ZW5kZXJCb3gtPmFic29sdXRlQ29udGVudEJveCgpOworICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0
aGUgc2NhbGVkIGJ1dHRvbiBzdGF5cyBzcXVhcmUgYW5kIHdpbGwgZml0IGluIGl0cyBwYXJlbnQn
cyBib3gKKyAgICBib3VuZHMuc2V0SGVpZ2h0KHN0ZDo6bWluKHBhcmVudEJveC53aWR0aCgpLCBz
dGQ6Om1pbihwYXJlbnRCb3guaGVpZ2h0KCksIGJvdW5kcy5oZWlnaHQoKSkpKTsKKyAgICBib3Vu
ZHMuc2V0V2lkdGgoYm91bmRzLmhlaWdodCgpKTsKKworICAgIC8vIENlbnRlciB0aGUgYnV0dG9u
IHZlcnRpY2FsbHkuICBSb3VuZCB1cCB0aG91Z2gsIHNvIGlmIGl0IGhhcyB0byBiZSBvbmUgcGl4
ZWwgb2ZmLWNlbnRlciwgaXQgd2lsbAorICAgIC8vIGJlIG9uZSBwaXhlbCBjbG9zZXIgdG8gdGhl
IGJvdHRvbSBvZiB0aGUgZmllbGQuICBUaGlzIHRlbmRzIHRvIGxvb2sgYmV0dGVyIHdpdGggdGhl
IHRleHQuCisgICAgYm91bmRzLnNldFkocGFyZW50Qm94LnkoKSArIChwYXJlbnRCb3guaGVpZ2h0
KCkgLSBib3VuZHMuaGVpZ2h0KCkgKyAxKSAvIDIpOworCisgICAgc3RhdGljIEltYWdlKiBjYW5j
ZWxJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoQ2FuY2VsIikucmVs
ZWFzZVJlZigpOworICAgIHN0YXRpYyBJbWFnZSogY2FuY2VsUHJlc3NlZEltYWdlID0gSW1hZ2U6
OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJzZWFyY2hDYW5jZWxQcmVzc2VkIikucmVsZWFzZVJlZigp
OworICAgIGkuY29udGV4dC0+ZHJhd0ltYWdlKGlzUHJlc3NlZChvKSA/IGNhbmNlbFByZXNzZWRJ
bWFnZSA6IGNhbmNlbEltYWdlLCBib3VuZHMpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QK
K3sKKyAgICBJbnRTaXplIGVtcHR5U2l6ZSgxLCAxMSk7CisgICAgc3R5bGUtPnNldFdpZHRoKExl
bmd0aChlbXB0eVNpemUud2lkdGgoKSwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0SGVpZ2h0KExl
bmd0aChlbXB0eVNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVD
aHJvbWl1bVdpbjo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewotICAg
IHJldHVybiBwYWludFRleHRGaWVsZChvLCBpLCByKTsKKyAgICAvLyBTY2FsZSB0aGUgZGVjb3Jh
dGlvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUKKyAgICBmbG9hdCBmb250U2NhbGUgPSBz
dHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZTsKKyAgICBpbnQg
bWFnbmlmaWVyU2l6ZSA9IGxyb3VuZGYoc3RkOjptaW4oc3RkOjptYXgobWluU2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblNpemUsIGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
U2l6ZSAqIGZvbnRTY2FsZSksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYXhTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSkpOworICAgIHN0eWxlLT5z
ZXRXaWR0aChMZW5ndGgobWFnbmlmaWVyU2l6ZSwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0SGVp
Z2h0KExlbmd0aChtYWduaWZpZXJTaXplLCBGaXhlZCkpOworfQorCitib29sIFJlbmRlclRoZW1l
Q2hyb21pdW1XaW46OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiBy
KQoreworICAgIEludFJlY3QgYm91bmRzID0gcjsKKyAgICBBU1NFUlQoby0+cGFyZW50KCkpOwor
ICAgIGlmICghby0+cGFyZW50KCkgfHwgIW8tPnBhcmVudCgpLT5pc0JveCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgUmVuZGVyQm94KiBwYXJlbnRSZW5kZXJCb3ggPSB0b1Jl
bmRlckJveChvLT5wYXJlbnQoKSk7CisgICAgSW50UmVjdCBwYXJlbnRCb3ggPSBwYXJlbnRSZW5k
ZXJCb3gtPmFic29sdXRlQ29udGVudEJveCgpOworICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGUg
c2NhbGVkIGRlY29yYXRpb24gc3RheXMgc3F1YXJlIGFuZCB3aWxsIGZpdCBpbiBpdHMgcGFyZW50
J3MgYm94CisgICAgYm91bmRzLnNldEhlaWdodChzdGQ6Om1pbihwYXJlbnRCb3gud2lkdGgoKSwg
c3RkOjptaW4ocGFyZW50Qm94LmhlaWdodCgpLCBib3VuZHMuaGVpZ2h0KCkpKSk7CisgICAgYm91
bmRzLnNldFdpZHRoKGJvdW5kcy5oZWlnaHQoKSk7CisKKyAgICAvLyBDZW50ZXIgdGhlIGRlY29y
YXRpb24gdmVydGljYWxseS4gIFJvdW5kIHVwIHRob3VnaCwgc28gaWYgaXQgaGFzIHRvIGJlIG9u
ZSBwaXhlbCBvZmYtY2VudGVyLCBpdCB3aWxsCisgICAgLy8gYmUgb25lIHBpeGVsIGNsb3NlciB0
byB0aGUgYm90dG9tIG9mIHRoZSBmaWVsZC4gIFRoaXMgdGVuZHMgdG8gbG9vayBiZXR0ZXIgd2l0
aCB0aGUgdGV4dC4KKyAgICBib3VuZHMuc2V0WShwYXJlbnRCb3gueSgpICsgKHBhcmVudEJveC5o
ZWlnaHQoKSAtIGJvdW5kcy5oZWlnaHQoKSArIDEpIC8gMik7CisgICAgCisgICAgc3RhdGljIElt
YWdlKiBtYWduaWZpZXJJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNo
TWFnbmlmaWVyIikucmVsZWFzZVJlZigpOworICAgIGkuY29udGV4dC0+ZHJhd0ltYWdlKG1hZ25p
ZmllckltYWdlLCBib3VuZHMpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJU
aGVtZUNocm9taXVtV2luOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3sKKyAg
ICAvLyBTY2FsZSB0aGUgYnV0dG9uIHNpemUgYmFzZWQgb24gdGhlIGZvbnQgc2l6ZQorICAgIGZs
b2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVsdENvbnRyb2xGb250UGl4
ZWxTaXplOworICAgIGludCBtYWduaWZpZXJIZWlnaHQgPSBscm91bmRmKHN0ZDo6bWluKHN0ZDo6
bWF4KG1pblNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplLCBkZWZhdWx0U2VhcmNoRmll
bGRSZXN1bHRzRGVjb3JhdGlvblNpemUgKiBmb250U2NhbGUpLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
U2l6ZSkpOworICAgIGludCBtYWduaWZpZXJXaWR0aCA9IGxyb3VuZGYobWFnbmlmaWVySGVpZ2h0
ICogZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbldpZHRoIC8gZGVmYXVsdFNlYXJjaEZp
ZWxkUmVzdWx0c0RlY29yYXRpb25TaXplKTsKKyAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKG1h
Z25pZmllcldpZHRoLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKG1hZ25p
ZmllckhlaWdodCwgRml4ZWQpKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpw
YWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIEludFJlY3Qg
Ym91bmRzID0gcjsKKyAgICBBU1NFUlQoby0+cGFyZW50KCkpOworICAgIGlmICghby0+cGFyZW50
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW8tPnBhcmVudCgpIHx8ICFvLT5w
YXJlbnQoKS0+aXNCb3goKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIFJlbmRl
ckJveCogcGFyZW50UmVuZGVyQm94ID0gdG9SZW5kZXJCb3goby0+cGFyZW50KCkpOworICAgIElu
dFJlY3QgcGFyZW50Qm94ID0gcGFyZW50UmVuZGVyQm94LT5hYnNvbHV0ZUNvbnRlbnRCb3goKTsK
KyAgICAKKyAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBkZWNvcmF0aW9uIHdpbGwgZml0IGlu
IGl0cyBwYXJlbnQncyBib3gKKyAgICBib3VuZHMuc2V0SGVpZ2h0KHN0ZDo6bWluKHBhcmVudEJv
eC5oZWlnaHQoKSwgYm91bmRzLmhlaWdodCgpKSk7CisgICAgYm91bmRzLnNldFdpZHRoKHN0ZDo6
bWluKHBhcmVudEJveC53aWR0aCgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJvdW5kcy5oZWlnaHQoKSAq
IGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25XaWR0aCAvIGRlZmF1bHRTZWFyY2hGaWVs
ZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSkpKTsKKworICAgIC8vIENlbnRlciB0aGUgYnV0dG9uIHZl
cnRpY2FsbHkuICBSb3VuZCB1cCB0aG91Z2gsIHNvIGlmIGl0IGhhcyB0byBiZSBvbmUgcGl4ZWwg
b2ZmLWNlbnRlciwgaXQgd2lsbAorICAgIC8vIGJlIG9uZSBwaXhlbCBjbG9zZXIgdG8gdGhlIGJv
dHRvbSBvZiB0aGUgZmllbGQuICBUaGlzIHRlbmRzIHRvIGxvb2sgYmV0dGVyIHdpdGggdGhlIHRl
eHQuCisgICAgYm91bmRzLnNldFkocGFyZW50Qm94LnkoKSArIChwYXJlbnRCb3guaGVpZ2h0KCkg
LSBib3VuZHMuaGVpZ2h0KCkgKyAxKSAvIDIpOworCisgICAgc3RhdGljIEltYWdlKiBtYWduaWZp
ZXJJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoTWFnbmlmaWVyUmVz
dWx0cyIpLnJlbGVhc2VSZWYoKTsKKyAgICBpLmNvbnRleHQtPmRyYXdJbWFnZShtYWduaWZpZXJJ
bWFnZSwgYm91bmRzKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgUmVuZGVyVGhlbWVD
aHJvbWl1bVdpbjo6YWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3Rv
ciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdApJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uaAkocmV2aXNpb24gNDIwMTkpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmgJKHdvcmtpbmcgY29weSkK
QEAgLTg4LDcgKzg4LDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKSB7IHJldHVybiBwYWludFNsaWRlclRy
YWNrKG8sIGksIHIpOyB9CiAKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQo
UmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7CisgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVj
dCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0
dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOyB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGFk
anVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFy
Y2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVs
ZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RT
ZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZp
ZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgICAgICAvLyBNZW51TGlzdCByZWZlcnMgdG8g
YW4gdW5zdHlsZWQgbWVudWxpc3QgKG1lYW5pbmcgYSBtZW51bGlzdCB3aXRob3V0CiAgICAgICAg
IC8vIGJhY2tncm91bmQtY29sb3Igb3IgYm9yZGVyIHNldCkgYW5kIE1lbnVMaXN0QnV0dG9uIHJl
ZmVycyB0byBhIHN0eWxlZAo=
</data>
<flag name="review"
          id="14350"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>