<?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>41392</bug_id>
          
          <creation_ts>2010-06-29 23:42:56 -0700</creation_ts>
          <short_desc>[V8] Move window.open into generic bindings</short_desc>
          <delta_ts>2010-08-09 10:50:55 -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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Dominic Cooney">dominicc</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>244640</commentid>
    <comment_count>0</comment_count>
    <who name="Dominic Cooney">dominicc</who>
    <bug_when>2010-06-29 23:42:56 -0700</bug_when>
    <thetext>Like bug 33201 which moved createWindow into the generic bindings, logic for open can be moved into the generic bindings too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245751</commentid>
    <comment_count>1</comment_count>
      <attachid>60331</attachid>
    <who name="Dominic Cooney">dominicc</who>
    <bug_when>2010-07-01 21:49:34 -0700</bug_when>
    <thetext>Created attachment 60331
Moves window.open into the generic bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245753</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-01 21:53:29 -0700</bug_when>
    <thetext>Attachment 60331 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/bindings/generic/BindingDOMWindow.h:167:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/bindings/generic/BindingDOMWindow.h:192:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/bindings/v8/V8Utilities.cpp:41:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 3 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245754</commentid>
    <comment_count>3</comment_count>
      <attachid>60333</attachid>
    <who name="Dominic Cooney">dominicc</who>
    <bug_when>2010-07-01 21:59:46 -0700</bug_when>
    <thetext>Created attachment 60333
Moves window.open into the generic bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246073</commentid>
    <comment_count>4</comment_count>
      <attachid>60333</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-02 13:53:11 -0700</bug_when>
    <thetext>Comment on attachment 60333
Moves window.open into the generic bindings.

Sorry, need to run.  I got about half way through.

WebCore/bindings/generic/BindingDOMWindow.h:150
 +      Frame* enteredFrame = state-&gt;getFirstFrame();
Why not call this firstFrame?

WebCore/bindings/generic/BindingDOMWindow.h:154
 +      Frame* callingFrame = state-&gt;getActiveFrame();
Why not call this activeFrame?

WebCore/bindings/generic/BindingDOMWindow.h:193
 +              &amp;&amp; (!protocolIsJavaScript(completedUrl) || ScriptController::isSafeScript(frame))) {
isSafeScript is a terrible name.  I don&apos;t think this is correct.  You need to call something on BindingsSecurity and pass in the state.

WebCore/bindings/generic/BindingSecurity.h:150
 +      Frame* callingFrame = state-&gt;getActiveFrame();
again, should be &quot;activeFrame&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261986</commentid>
    <comment_count>5</comment_count>
      <attachid>63861</attachid>
    <who name="Dominic Cooney">dominicc</who>
    <bug_when>2010-08-08 23:37:54 -0700</bug_when>
    <thetext>Created attachment 63861
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262034</commentid>
    <comment_count>6</comment_count>
      <attachid>63873</attachid>
    <who name="Dominic Cooney">dominicc</who>
    <bug_when>2010-08-09 02:18:23 -0700</bug_when>
    <thetext>Created attachment 63873
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262211</commentid>
    <comment_count>7</comment_count>
      <attachid>63873</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-09 10:22:50 -0700</bug_when>
    <thetext>Comment on attachment 63873
Patch

This looks great.  Now that we have more of this fleshed out, we should talk to some JSC folks and see if they want to use some of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262220</commentid>
    <comment_count>8</comment_count>
      <attachid>63873</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-09 10:50:50 -0700</bug_when>
    <thetext>Comment on attachment 63873
Patch

Clearing flags on attachment: 63873

Committed r64991: &lt;http://trac.webkit.org/changeset/64991&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262221</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-09 10:50:55 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60331</attachid>
            <date>2010-07-01 21:49:34 -0700</date>
            <delta_ts>2010-07-01 21:59:40 -0700</delta_ts>
            <desc>Moves window.open into the generic bindings.</desc>
            <filename>bug-41392-20100702134932.patch</filename>
            <type>text/plain</type>
            <size>30942</size>
            <attacher name="Dominic Cooney">dominicc</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YmRmNTNhM2ZjMjJjZjZjY2YyYzc2MjU4M2FhNTgxOGQxYzg4NTdiNy4uYmFjZDYwYjRmODY4Njdi
YWI4NmZmNTNlOTUxOGU0NmI4ODY3YzA3NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAxMC0wNy0wMSAgRG9t
aW5pYyBDb29uZXkgIDxkb21pbmljY0Bkb21pbmljYy1tYWNwcm8udG9rLmNvcnAuZ29vZ2xlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3Zl
cyB3aW5kb3cub3BlbiBsb2dpYyBpbnRvIHRoZSBnZW5lcmljIGJpbmRpbmdzLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggbW92ZXMgd2luZG93Lm9wZW4gbG9naWMgZnJvbSBWOCBpbnRvIHRoZSBnZW5l
cmljCisgICAgICAgIGJpbmRpbmdzIHNvIGl0IGNvdWxkIGJlIHNoYXJlZCB3aXRoIEpTQy4gSlND
IHNoYXJpbmcgaXMgbm90IGluCisgICAgICAgIHRoaXMgcGF0Y2guIFRoaXMgcGF0Y2ggaXMgb2Yg
dGhlIHNhbWUgZmxhdm9yL2ludGVudCBhcworICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTMzMjAxPi4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEzOTIKKworICAgICAgICAqIGJpbmRpbmdzL2dlbmVyaWMv
QmluZGluZ0RPTVdpbmRvdy5oOgorICAgICAgICAoV2ViQ29yZTo6OjpjcmVhdGVXaW5kb3cpOgor
ICAgICAgICAoV2ViQ29yZTo6OjpvcGVuKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6Y29tcGxldGVV
UkwpOgorICAgICAgICAqIGJpbmRpbmdzL2dlbmVyaWMvQmluZGluZ1NlY3VyaXR5Lmg6CisgICAg
ICAgIChXZWJDb3JlOjo6OmFsbG93UG9wVXApOgorICAgICAgICAoV2ViQ29yZTo6OjpzaG91bGRB
bGxvd05hdmlnYXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QmluZGluZy5oOgorICAg
ICAgICAoV2ViQ29yZTo6VjhCaW5kaW5nOjplbXB0eVNjcmlwdFZhbHVlKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9WOFV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0cmFuc2Zlckhp
ZGRlbkRlcGVuZGVuY3kpOgorICAgICAgICAoV2ViQ29yZTo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZEFsbG93TmF2aWdhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpjb21wbGV0ZVVSTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4QXJy
YXlCdWZmZXJDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdp
bmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvdzo6c2hvd01vZGFs
RGlhbG9nQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3c6Om9wZW5DYWxs
YmFjayk6CisgICAgICAgICogYmluZGluZ3Mvdjgvc3BlY2lhbGl6YXRpb24vVjhCaW5kaW5nU3Rh
dGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6OjpnZXRBY3RpdmVGcmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjo6OmdldEZpcnN0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Ojpwcm9jZXNzaW5n
VXNlckdlc3R1cmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L3NwZWNpYWxpemF0aW9uL1Y4Qmlu
ZGluZ1N0YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjopOgorCiAyMDEwLTA3LTAxICBTaGVyaWZm
IEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByNjIzMjEuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVy
aWMvQmluZGluZ0RPTVdpbmRvdy5oIGIvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0JpbmRpbmdE
T01XaW5kb3cuaAppbmRleCBmODgzZDExMDIzNWQ3ZDMwNjhjMWNiZTVmN2E5MjAxZTRlYWY4MTU4
Li44ZWJkM2RjYmE5ZmM4NDU1ZDA2Zjg4Yjc3MmVlOTRjNjFkYjk4MTczIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvQmluZGluZ0RPTVdpbmRvdy5oCisrKyBiL1dlYkNvcmUv
YmluZGluZ3MvZ2VuZXJpYy9CaW5kaW5nRE9NV2luZG93LmgKQEAgLTEsMTAgKzEsMTAgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIAorICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogICogbWV0OgotICogCisg
KgogICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKICAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKQEAgLTE0LDcgKzE0LDcgQEAKICAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKICAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCiAgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCisgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKICAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgpAQCAtMzEsMTEgKzMxLDE3IEBACiAjaWZuZGVmIEJpbmRpbmdE
T01XaW5kb3dfaAogI2RlZmluZSBCaW5kaW5nRE9NV2luZG93X2gKIAorI2luY2x1ZGUgIkRPTVdp
bmRvdy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5o
IgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5j
bHVkZSAiR2VuZXJpY0JpbmRpbmcuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1TY3JlZW4uaCIKKyNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTUyLDYgKzU4LDIwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBXaW5kb3dGZWF0dXJlcyYgd2luZG93RmVhdHVyZXMsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmluZGluZ1ZhbHVlIGRpYWxvZ0FyZ3MpOwor
CisgICAgc3RhdGljIFdlYkNvcmU6OkRPTVdpbmRvdyogb3BlbihTdGF0ZTxCaW5kaW5nPiosCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpET01XaW5kb3cqIHBh
cmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYg
dXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBm
cmFtZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXaW5k
b3dGZWF0dXJlcyYgcmF3RmVhdHVyZXMpOworCisgICAgLy8gRklYTUU6IFRoZXJlIHNob3VsZCBi
ZSBhIHBsYWNlIGZvciBnZW5lcmljIGJpbmRpbmcgdXRpbGl0aWVzLgorICAgIHN0YXRpYyBLVVJM
IGNvbXBsZXRlVVJMKFN0YXRlPEJpbmRpbmc+KiwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZVVSTCk7
CisKK3ByaXZhdGU6CisgICAgLy8gSG9yaXpvbnRhbCBhbmQgdmVydGljYWwgb2Zmc2V0LCBmcm9t
IHRoZSBwYXJlbnQgY29udGVudCBhcmVhLAorICAgIC8vIGFyb3VuZCBuZXdseSBvcGVuZWQgcG9w
dXBzIHRoYXQgZG9uJ3Qgc3BlY2lmeSBhIGxvY2F0aW9uLgorICAgIHN0YXRpYyBjb25zdCBpbnQg
cG9wdXBUaWxlUGl4ZWxzID0gMTA7CiB9OwogCiAvLyBJbXBsZW1lbnRhdGlvbnMgb2YgdGVtcGxh
dGVkIG1ldGhvZHMgbXVzdCBiZSBpbiB0aGlzIGZpbGUuCkBAIC0xMDMsOCArMTIzLDggQEAgRnJh
bWUqIEJpbmRpbmdET01XaW5kb3c8QmluZGluZz46OmNyZWF0ZVdpbmRvdyhTdGF0ZTxCaW5kaW5n
Piogc3RhdGUsCiAKICAgICBpZiAoIXByb3RvY29sSXNKYXZhU2NyaXB0KHVybCkgfHwgQmluZGlu
Z1NlY3VyaXR5PEJpbmRpbmc+OjpjYW5BY2Nlc3NGcmFtZShzdGF0ZSwgbmV3RnJhbWUsIHRydWUp
KSB7CiAgICAgICAgIEtVUkwgY29tcGxldGVkVXJsID0KLSAgICAgICAgICAgIHVybC5pc0VtcHR5
KCkgPyBLVVJMKFBhcnNlZFVSTFN0cmluZywgIiIpIDogY29tcGxldGVVUkwodXJsKTsKLSAgICAg
ICAgYm9vbCB1c2VyR2VzdHVyZSA9IHByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOworICAgICAgICAg
ICAgdXJsLmlzRW1wdHkoKSA/IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAiIikgOiBjb21wbGV0ZVVS
TChzdGF0ZSwgdXJsKTsKKyAgICAgICAgYm9vbCB1c2VyR2VzdHVyZSA9IHN0YXRlLT5wcm9jZXNz
aW5nVXNlckdlc3R1cmUoKTsKIAogICAgICAgICBpZiAoY3JlYXRlZCkKICAgICAgICAgICAgIG5l
d0ZyYW1lLT5sb2FkZXIoKS0+Y2hhbmdlTG9jYXRpb24oY29tcGxldGVkVXJsLCByZWZlcnJlciwg
ZmFsc2UsIGZhbHNlLCB1c2VyR2VzdHVyZSk7CkBAIC0xMTUsNiArMTM1LDE1MiBAQCBGcmFtZSog
QmluZGluZ0RPTVdpbmRvdzxCaW5kaW5nPjo6Y3JlYXRlV2luZG93KFN0YXRlPEJpbmRpbmc+KiBz
dGF0ZSwKICAgICByZXR1cm4gbmV3RnJhbWU7CiB9CiAKK3RlbXBsYXRlPGNsYXNzIEJpbmRpbmc+
CitXZWJDb3JlOjpET01XaW5kb3cqIEJpbmRpbmdET01XaW5kb3c8QmluZGluZz46Om9wZW4oU3Rh
dGU8QmluZGluZz4qIHN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogcGFyZW50LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdXJs
U3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFN0cmluZyYgZnJhbWVOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdpbmRvd0ZlYXR1cmVzJiByYXdGZWF0dXJl
cykKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBwYXJlbnQtPmZyYW1lKCk7CisKKyAgICBpZiAoIUJp
bmRpbmdTZWN1cml0eTxCaW5kaW5nPjo6Y2FuQWNjZXNzRnJhbWUoc3RhdGUsIGZyYW1lLCB0cnVl
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBGcmFtZSogZW50ZXJlZEZyYW1lID0gc3RhdGUt
PmdldEZpcnN0RnJhbWUoKTsKKyAgICBpZiAoIWVudGVyZWRGcmFtZSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBGcmFtZSogY2FsbGluZ0ZyYW1lID0gc3RhdGUtPmdldEFjdGl2ZUZyYW1lKCk7
CisgICAgLy8gV2UgbWF5IG5vdCBoYXZlIGEgY2FsbGluZyBjb250ZXh0IGlmIHdlIGFyZSBpbnZv
a2VkIGJ5IGEgcGx1Z2luCisgICAgLy8gdmlhIE5QQVBJLgorICAgIGlmICghY2FsbGluZ0ZyYW1l
KQorICAgICAgICBjYWxsaW5nRnJhbWUgPSBlbnRlcmVkRnJhbWU7CisKKyAgICBQYWdlKiBwYWdl
ID0gZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgLy8gQmVjYXVzZSBGcmFtZVRyZWU6OmZpbmQoKSByZXR1cm5zIHRydWUgZm9yIGVtcHR5IHN0
cmluZ3MsIHdlIG11c3QgY2hlY2sKKyAgICAvLyBmb3IgZW1wdHkgZnJhbWVuYW1lcy4gT3RoZXJ3
aXNlLCBpbGxlZ2l0aW1hdGUgd2luZG93Lm9wZW4oKSBjYWxscyB3aXRoCisgICAgLy8gbm8gbmFt
ZSB3aWxsIHBhc3MgcmlnaHQgdGhyb3VnaCB0aGUgcG9wdXAgYmxvY2tlci4KKyAgICBpZiAoIUJp
bmRpbmdTZWN1cml0eTxCaW5kaW5nPjo6YWxsb3dQb3BVcChzdGF0ZSkgJiYKKyAgICAgICAgKGZy
YW1lTmFtZS5pc0VtcHR5KCkgfHwgIWZyYW1lLT50cmVlKCktPmZpbmQoZnJhbWVOYW1lKSkpIHsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gR2V0IHRoZSB0YXJnZXQgZnJhbWUg
Zm9yIHRoZSBzcGVjaWFsIGNhc2VzIG9mIF90b3AgYW5kIF9wYXJlbnQuCisgICAgLy8gSW4gdGhv
c2UgY2FzZXMsIHdlIGNhbiBzY2hlZHVsZSBhIGxvY2F0aW9uIGNoYW5nZSByaWdodCBub3cgYW5k
CisgICAgLy8gcmV0dXJuIGVhcmx5LgorICAgIGJvb2wgdG9wT3JQYXJlbnQgPSBmYWxzZTsKKyAg
ICBpZiAoZnJhbWVOYW1lID09ICJfdG9wIikgeworICAgICAgICBmcmFtZSA9IGZyYW1lLT50cmVl
KCktPnRvcCgpOworICAgICAgICB0b3BPclBhcmVudCA9IHRydWU7CisgICAgfSBlbHNlIGlmIChm
cmFtZU5hbWUgPT0gIl9wYXJlbnQiKSB7CisgICAgICAgIGlmIChGcmFtZSogcGFyZW50ID0gZnJh
bWUtPnRyZWUoKS0+cGFyZW50KCkpCisgICAgICAgICAgICBmcmFtZSA9IHBhcmVudDsKKyAgICAg
ICAgdG9wT3JQYXJlbnQgPSB0cnVlOworICAgIH0KKyAgICBpZiAodG9wT3JQYXJlbnQpIHsKKyAg
ICAgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk8QmluZGluZz46OnNob3VsZEFsbG93TmF2aWdhdGlv
bihzdGF0ZSwgZnJhbWUpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgU3RyaW5n
IGNvbXBsZXRlZFVybDsKKyAgICAgICAgaWYgKCF1cmxTdHJpbmcuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgY29tcGxldGVkVXJsID0gY29tcGxldGVVUkwoc3RhdGUsIHVybFN0cmluZyk7CisKKyAg
ICAgICAgaWYgKCFjb21wbGV0ZWRVcmwuaXNFbXB0eSgpICYmCisgICAgICAgICAgICAoIXByb3Rv
Y29sSXNKYXZhU2NyaXB0KGNvbXBsZXRlZFVybCkgfHwgU2NyaXB0Q29udHJvbGxlcjo6aXNTYWZl
U2NyaXB0KGZyYW1lKSkpIHsKKyAgICAgICAgICAgIGJvb2wgdXNlckdlc3R1cmUgPSBzdGF0ZS0+
cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7CisKKyAgICAgICAgICAgIC8vIEZvciB3aGF0ZXZlciBy
ZWFzb24sIEZpcmVmb3ggdXNlcyB0aGUgZW50ZXJlZCBmcmFtZSB0byBkZXRlcm1pbmUKKyAgICAg
ICAgICAgIC8vIHRoZSBvdXRnb2luZ1JlZmVycmVyLiAgV2UgcmVwbGljYXRlIHRoYXQgYmVoYXZp
b3IgaGVyZS4KKyAgICAgICAgICAgIFN0cmluZyByZWZlcnJlciA9IGVudGVyZWRGcmFtZS0+bG9h
ZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKTsKKworICAgICAgICAgICAgZnJhbWUtPnJlZGlyZWN0
U2NoZWR1bGVyKCktPnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UoY29tcGxldGVkVXJsLCByZWZlcnJl
ciwgZmFsc2UsIGZhbHNlLCB1c2VyR2VzdHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGZyYW1lLT5kb21XaW5kb3coKTsKKyAgICB9CisKKyAgICAvLyBJbiB0aGUgY2FzZSBvZiBhIG5h
bWVkIGZyYW1lIG9yIGEgbmV3IHdpbmRvdywgd2UnbGwgdXNlIHRoZQorICAgIC8vIGNyZWF0ZVdp
bmRvdygpIGhlbHBlci4KKworICAgIC8vIFdvcmsgd2l0aCBhIGNvcHkgb2YgdGhlIHBhcnNlZCB2
YWx1ZXMgc28gd2UgY2FuIHJlc3RvcmUgdGhlCisgICAgLy8gdmFsdWVzIHdlIG1heSBub3Qgd2Fu
dCB0byBvdmVyd3JpdGUgYWZ0ZXIgd2UgZG8gdGhlIG11bHRpcGxlCisgICAgLy8gbW9uaXRvciBm
aXhlcy4KKyAgICBXaW5kb3dGZWF0dXJlcyB3aW5kb3dGZWF0dXJlcyhyYXdGZWF0dXJlcyk7Cisg
ICAgRmxvYXRSZWN0IHNjcmVlblJlY3QgPSBzY3JlZW5BdmFpbGFibGVSZWN0KHBhZ2UtPm1haW5G
cmFtZSgpLT52aWV3KCkpOworCisgICAgLy8gU2V0IGRlZmF1bHQgc2l6ZSBhbmQgbG9jYXRpb24g
bmVhciBwYXJlbnQgd2luZG93IGlmIG5vbmUgd2VyZSBzcGVjaWZpZWQuCisgICAgLy8gVGhlc2Ug
bWF5IGJlIGZ1cnRoZXIgbW9kaWZpZWQgYnkgYWRqdXN0V2luZG93UmVjdCwgYmVsb3cuCisgICAg
aWYgKCF3aW5kb3dGZWF0dXJlcy54U2V0KSB7CisgICAgICAgIHdpbmRvd0ZlYXR1cmVzLnggPSBw
YXJlbnQtPnNjcmVlblgoKSAtIHNjcmVlblJlY3QueCgpICsgcG9wdXBUaWxlUGl4ZWxzOworICAg
ICAgICB3aW5kb3dGZWF0dXJlcy54U2V0ID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCF3aW5kb3dG
ZWF0dXJlcy55U2V0KSB7CisgICAgICAgIHdpbmRvd0ZlYXR1cmVzLnkgPSBwYXJlbnQtPnNjcmVl
blkoKSAtIHNjcmVlblJlY3QueSgpICsgcG9wdXBUaWxlUGl4ZWxzOworICAgICAgICB3aW5kb3dG
ZWF0dXJlcy55U2V0ID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCF3aW5kb3dGZWF0dXJlcy53aWR0
aFNldCkgeworICAgICAgICB3aW5kb3dGZWF0dXJlcy53aWR0aCA9IHBhcmVudC0+aW5uZXJXaWR0
aCgpOworICAgICAgICB3aW5kb3dGZWF0dXJlcy53aWR0aFNldCA9IHRydWU7CisgICAgfQorICAg
IGlmICghd2luZG93RmVhdHVyZXMuaGVpZ2h0U2V0KSB7CisgICAgICAgIHdpbmRvd0ZlYXR1cmVz
LmhlaWdodCA9IHBhcmVudC0+aW5uZXJIZWlnaHQoKTsKKyAgICAgICAgd2luZG93RmVhdHVyZXMu
aGVpZ2h0U2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3Qgd2luZG93UmVjdCh3aW5k
b3dGZWF0dXJlcy54LCB3aW5kb3dGZWF0dXJlcy55LCB3aW5kb3dGZWF0dXJlcy53aWR0aCwgd2lu
ZG93RmVhdHVyZXMuaGVpZ2h0KTsKKworICAgIC8vIFRoZSBuZXcgd2luZG93J3MgbG9jYXRpb24g
aXMgcmVsYXRpdmUgdG8gaXRzIGN1cnJlbnQgc2NyZWVuLCBzbyBzaGlmdAorICAgIC8vIGl0IGlu
IGNhc2UgaXQncyBvbiBhIHNlY29uZGFyeSBtb25pdG9yLiBTZWUgaHR0cDovL2Ivdmlld0lzc3Vl
P2lkPTk2NzkwNS4KKyAgICB3aW5kb3dSZWN0Lm1vdmUoc2NyZWVuUmVjdC54KCksIHNjcmVlblJl
Y3QueSgpKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3c6OmFkanVzdFdpbmRvd1JlY3Qoc2NyZWVu
UmVjdCwgd2luZG93UmVjdCwgd2luZG93UmVjdCk7CisKKyAgICB3aW5kb3dGZWF0dXJlcy54ID0g
d2luZG93UmVjdC54KCk7CisgICAgd2luZG93RmVhdHVyZXMueSA9IHdpbmRvd1JlY3QueSgpOwor
ICAgIHdpbmRvd0ZlYXR1cmVzLmhlaWdodCA9IHdpbmRvd1JlY3QuaGVpZ2h0KCk7CisgICAgd2lu
ZG93RmVhdHVyZXMud2lkdGggPSB3aW5kb3dSZWN0LndpZHRoKCk7CisKKyAgICAvLyBJZiBlaXRo
ZXIgb2YgdGhlIG9yaWdpbiBjb29yZGluYXRlcyBvciBkaW1lbnNpb25zIHdlcmVuJ3Qgc2V0Cisg
ICAgLy8gaW4gdGhlIG9yaWdpbmFsIHN0cmluZywgbWFrZSBzdXJlIHRoZXkgYXJlbid0IHNldCBu
b3cuCisgICAgaWYgKCFyYXdGZWF0dXJlcy54U2V0KSB7CisgICAgICAgIHdpbmRvd0ZlYXR1cmVz
LnggPSAwOworICAgICAgICB3aW5kb3dGZWF0dXJlcy54U2V0ID0gZmFsc2U7CisgICAgfQorICAg
IGlmICghcmF3RmVhdHVyZXMueVNldCkgeworICAgICAgICB3aW5kb3dGZWF0dXJlcy55ID0gMDsK
KyAgICAgICAgd2luZG93RmVhdHVyZXMueVNldCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoIXJh
d0ZlYXR1cmVzLndpZHRoU2V0KSB7CisgICAgICB3aW5kb3dGZWF0dXJlcy53aWR0aCA9IDA7Cisg
ICAgICB3aW5kb3dGZWF0dXJlcy53aWR0aFNldCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoIXJh
d0ZlYXR1cmVzLmhlaWdodFNldCkgeworICAgICAgd2luZG93RmVhdHVyZXMuaGVpZ2h0ID0gMDsK
KyAgICAgIHdpbmRvd0ZlYXR1cmVzLmhlaWdodFNldCA9IGZhbHNlOworICAgIH0KKworICAgIGZy
YW1lID0gY3JlYXRlV2luZG93KHN0YXRlLCBjYWxsaW5nRnJhbWUsIGVudGVyZWRGcmFtZSwgZnJh
bWUsIHVybFN0cmluZywgZnJhbWVOYW1lLCB3aW5kb3dGZWF0dXJlcywgQmluZGluZzo6ZW1wdHlT
Y3JpcHRWYWx1ZSgpKTsKKworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgcmV0dXJuIGZyYW1lLT5kb21XaW5kb3coKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIEJpbmRp
bmc+CitLVVJMIEJpbmRpbmdET01XaW5kb3c8QmluZGluZz46OmNvbXBsZXRlVVJMKFN0YXRlPEJp
bmRpbmc+KiBzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU3RyaW5nJiByZWxhdGl2ZVVSTCkKK3sKKyAgICAvLyBGb3IgaGlzdG9yaWNhbCBy
ZWFzb25zLCB3ZSBuZWVkIHRvIGNvbXBsZXRlIHRoZSBVUkwgdXNpbmcgdGhlCisgICAgLy8gZHlu
YW1pYyBmcmFtZS4KKyAgICBGcmFtZSogZnJhbWUgPSBzdGF0ZS0+Z2V0Rmlyc3RGcmFtZSgpOwor
ICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBLVVJMKCk7CisgICAgcmV0dXJuIGZyYW1l
LT5sb2FkZXIoKS0+Y29tcGxldGVVUkwocmVsYXRpdmVVUkwpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBCaW5kaW5nRE9NV2luZG93X2gKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9CaW5kaW5nU2VjdXJpdHkuaCBiL1dlYkNvcmUvYmluZGlu
Z3MvZ2VuZXJpYy9CaW5kaW5nU2VjdXJpdHkuaAppbmRleCBkN2M5ZGZlMjJkMTJmMWJmOTMwNWFj
ODRiNzEzMmRmN2Q5MzYzZWE2Li4zYWM1ODFiZjg5YzJhN2I4OTMwY2JiOTBmY2RiNDU3MzA4ZTg3
NGQzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvQmluZGluZ1NlY3VyaXR5
LmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0JpbmRpbmdTZWN1cml0eS5oCkBAIC0z
NCwxNCArMzQsMTUgQEAKICNpbmNsdWRlICJCaW5kaW5nU2VjdXJpdHlCYXNlLmgiCiAjaW5jbHVk
ZSAiQ1NTSGVscGVyLmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgi
CiAjaW5jbHVkZSAiR2VuZXJpY0JpbmRpbmcuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVFbGVtZW50
QmFzZS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRE9NV2luZG93OwotY2xhc3MgRnJhbWU7CiBj
bGFzcyBOb2RlOwogCiAvLyBTZWN1cml0eSBmdW5jdGlvbnMgc2hhcmVkIGJ5IHZhcmlvdXMgbGFu
Z3VhZ2UgYmluZGluZ3MuCkBAIC01NSw5ICs1NiwxMiBAQCBwdWJsaWM6CiAgICAgLy8gY3VycmVu
dCBzZWN1cml0eSBjb250ZXh0LgogICAgIHN0YXRpYyBib29sIGNoZWNrTm9kZVNlY3VyaXR5KFN0
YXRlPEJpbmRpbmc+KiwgTm9kZSogdGFyZ2V0KTsKIAorICAgIHN0YXRpYyBib29sIGFsbG93UG9w
VXAoU3RhdGU8QmluZGluZz4qKTsKICAgICBzdGF0aWMgYm9vbCBhbGxvd1NldHRpbmdGcmFtZVNy
Y1RvSmF2YXNjcmlwdFVybChTdGF0ZTxCaW5kaW5nPiosIEhUTUxGcmFtZUVsZW1lbnRCYXNlKiwg
U3RyaW5nIHZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBhbGxvd1NldHRpbmdTcmNUb0phdmFzY3Jp
cHRVUkwoU3RhdGU8QmluZGluZz4qLCBFbGVtZW50KiwgU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1
ZSk7CiAKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRBbGxvd05hdmlnYXRpb24oU3RhdGU8QmluZGlu
Zz4qLCBGcmFtZSopOworCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEJpbmRpbmdTZWN1cml0eSgp
IHt9CiAgICAgfkJpbmRpbmdTZWN1cml0eSgpOwpAQCAtMTEwLDYgKzExNCwxOCBAQCBib29sIEJp
bmRpbmdTZWN1cml0eTxCaW5kaW5nPjo6Y2hlY2tOb2RlU2VjdXJpdHkoU3RhdGU8QmluZGluZz4q
IHN0YXRlLCBOb2RlKiBubwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgQmluZGluZz4KK2Jvb2wgQmlu
ZGluZ1NlY3VyaXR5PEJpbmRpbmc+OjphbGxvd1BvcFVwKFN0YXRlPEJpbmRpbmc+KiBzdGF0ZSkK
K3sKKyAgICBpZiAoc3RhdGUtPnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIEZyYW1lKiBmcmFtZSA9IHN0YXRlLT5nZXRGaXJzdEZyYW1lKCk7Cisg
ICAgQVNTRVJUKGZyYW1lKTsKKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBmcmFtZS0+c2V0dGlu
Z3MoKTsKKyAgICByZXR1cm4gc2V0dGluZ3MgJiYgc2V0dGluZ3MtPmphdmFTY3JpcHRDYW5PcGVu
V2luZG93c0F1dG9tYXRpY2FsbHkoKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIEJpbmRpbmc+CiBi
b29sIEJpbmRpbmdTZWN1cml0eTxCaW5kaW5nPjo6YWxsb3dTZXR0aW5nRnJhbWVTcmNUb0phdmFz
Y3JpcHRVcmwoU3RhdGU8QmluZGluZz4qIHN0YXRlLCBIVE1MRnJhbWVFbGVtZW50QmFzZSogZnJh
bWUsIFN0cmluZyB2YWx1ZSkKIHsKICAgICBpZiAocHJvdG9jb2xJc0phdmFTY3JpcHQoZGVwcmVj
YXRlZFBhcnNlVVJMKHZhbHVlKSkpIHsKQEAgLTEyOCw2ICsxNDQsMTMgQEAgYm9vbCBCaW5kaW5n
U2VjdXJpdHk8QmluZGluZz46OmFsbG93U2V0dGluZ1NyY1RvSmF2YXNjcmlwdFVSTChTdGF0ZTxC
aW5kaW5nPiogc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordGVtcGxhdGUgPGNsYXNzIEJpbmRp
bmc+Citib29sIEJpbmRpbmdTZWN1cml0eTxCaW5kaW5nPjo6c2hvdWxkQWxsb3dOYXZpZ2F0aW9u
KFN0YXRlPEJpbmRpbmc+KiBzdGF0ZSwgRnJhbWUqIGZyYW1lKQoreworICAgIEZyYW1lKiBjYWxs
aW5nRnJhbWUgPSBzdGF0ZS0+Z2V0QWN0aXZlRnJhbWUoKTsKKyAgICByZXR1cm4gY2FsbGluZ0Zy
YW1lICYmIGNhbGxpbmdGcmFtZS0+bG9hZGVyKCktPnNob3VsZEFsbG93TmF2aWdhdGlvbihmcmFt
ZSk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEJpbmRpbmdTZWN1cml0eV9oCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJp
bmRpbmcuaAppbmRleCBhMTVlY2UxMjQ5MjRmYjM3YjEyOGZhNjNkNjVjZWFjNThlOGFlNDRhLi44
MzgzZjk0ZjFlY2U1ODEzMmViNDg2ZGU1NDE3MDcyZTM3NjlhNWYzIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhC
aW5kaW5nLmgKQEAgLTEsMTAgKzEsMTAgQEAKIC8qCiAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKiAKKyoKICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKICogbWV0OgotKiAKKyoKICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCkBA
IC0xNCw3ICsxNCw3IEBACiAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSogCisqCiAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVk
ZSA8djguaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAorCiAgICAgY2xhc3MgRXZlbnRM
aXN0ZW5lcjsKICAgICBjbGFzcyBFdmVudFRhcmdldDsKICAgICBjbGFzcyBWOEJpbmRpbmdET01X
aW5kb3c7CkBAIC01MCw2ICs1MCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6
CiAgICAgICAgIHR5cGVkZWYgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFZhbHVlOwogICAgICAgICB0
eXBlZGVmIFY4QmluZGluZ0RPTVdpbmRvdyBET01XaW5kb3c7CisKKyAgICAgICAgc3RhdGljIFZh
bHVlIGVtcHR5U2NyaXB0VmFsdWUoKSB7IHJldHVybiB2ODo6TG9jYWw8djg6OlZhbHVlPigpOyB9
CiAgICAgfTsKICAgICB0eXBlZGVmIEJpbmRpbmdTZWN1cml0eTxWOEJpbmRpbmc+IFY4QmluZGlu
Z1NlY3VyaXR5OwogICAgIApAQCAtMTUyLDcgKzE1NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICB7CiAgICAgICAgIHJldHVybiB2OFZhbHVlVG9XZWJDb3JlU3RyaW5nKG9iamVjdCk7CiAg
ICAgfQotICAgIAorCiAgICAgU3RyaW5nIHRvV2ViQ29yZVN0cmluZyhjb25zdCB2ODo6QXJndW1l
bnRzJiwgaW50IGluZGV4KTsKIAogICAgIC8vIFRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdGhpcyBm
dW5jdGlvbiBpcyBzdGlsbCBvd25lZCBieSB0aGUgYXJndW1lbnQKQEAgLTE3MSw3ICsxNzMsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgQXRvbWljU3RyaW5nIHRvQXRvbWljV2ViQ29yZVN0
cmluZ1dpdGhOdWxsQ2hlY2sodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKTsKIAogICAgIFN0
cmluZyB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2sodjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHZhbHVlKTsKLSAKKwogICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gdjhVbmRl
dGVjdGFibGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIpOwogCiAgICAgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHY4U3RyaW5nT3JOdWxsKGNvbnN0IFN0cmluZyYgc3RyKTsKQEAgLTE4MywzMSArMTg1
LDMxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBkb3VibGUgdG9XZWJDb3JlRGF0ZSh2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0KTsKIAogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2
OERhdGVPck51bGwoZG91YmxlIHZhbHVlKTsKLSAgICAKKwogICAgIHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiBjcmVhdGVSYXdUZW1wbGF0ZSgpOwogCiAgICAgc3RydWN0IEJh
dGNoZWRBdHRyaWJ1dGU7CiAgICAgc3RydWN0IEJhdGNoZWRDYWxsYmFjazsKLSAgICAKKwogICAg
IHY4OjpMb2NhbDx2ODo6U2lnbmF0dXJlPiBjb25maWd1cmVUZW1wbGF0ZSh2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiBwYXJlbnRDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGZpZWxkQ291bnQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhdGNoZWRBdHRyaWJ1dGUqLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmF0Y2hlZEF0
dHJpYnV0ZSosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBhdHRyaWJ1dGVDb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgQmF0Y2hlZENhbGxiYWNrKiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNhbGxiYWNrQ291bnQpOwotICAg
IAorCiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldEVsZW1lbnRTdHJpbmdBdHRyKGNvbnN0
IHY4OjpBY2Nlc3NvckluZm8mLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdm9pZCBzZXRFbGVtZW50U3Ry
aW5nQXR0cihjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4pOwogCi0gICAgCisKICAgICB2ODo6UGVyc2lzdGVudDx2
ODo6U3RyaW5nPiBnZXRUb1N0cmluZ05hbWUoKTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gZ2V0VG9TdHJpbmdUZW1wbGF0ZSgpOwotICAgIAorCiAgICAgLy8gVjhQ
YXJhbWV0ZXIgaXMgYW4gYWRhcHRlciBjbGFzcyB0aGF0IGNvbnZlcnRzIFY4IHZhbHVlcyB0byBT
dHJpbmdzCiAgICAgLy8gb3IgQXRvbWljU3RyaW5ncyBhcyBhcHByb3ByaWF0ZSwgdXNpbmcgbXVs
dGlwbGUgdHlwZWNhc3Qgb3BlcmF0b3JzLgogICAgIGVudW0gVjhQYXJhbWV0ZXJNb2RlIHsKQEAg
LTIyNCw3ICsyMjYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAgICAg
ICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gbV92OE9iamVjdDsKICAgICB9OwotICAgIAorCiAgICAg
dGVtcGxhdGU8PiBpbmxpbmUgVjhQYXJhbWV0ZXI8RGVmYXVsdE1vZGU+OjpvcGVyYXRvciBTdHJp
bmcoKSB7IHJldHVybiB0b1dlYkNvcmVTdHJpbmcobV92OE9iamVjdCk7IH0KICAgICB0ZW1wbGF0
ZTw+IGlubGluZSBWOFBhcmFtZXRlcjxXaXRoTnVsbENoZWNrPjo6b3BlcmF0b3IgU3RyaW5nKCkg
eyByZXR1cm4gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhtX3Y4T2JqZWN0KTsgfQogICAg
IHRlbXBsYXRlPD4gaW5saW5lIFY4UGFyYW1ldGVyPFdpdGhVbmRlZmluZWRPck51bGxDaGVjaz46
Om9wZXJhdG9yIFN0cmluZygpIHsgcmV0dXJuIHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsT3JVbmRl
ZmluZWRDaGVjayhtX3Y4T2JqZWN0KTsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOFV0aWxpdGllcy5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmNwcApp
bmRleCBmZmNjYjA2ZmNmNGQxNDJhY2JlODA4YWY4YWFiMTg4NzZlMDlmMzI2Li5mYmZlODA2NTli
MzlmODY1ZTIxMWMwMjBlYzUwMjQ1NGE5ZGU0MDFiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4VXRpbGl0aWVzLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VXRpbGl0
aWVzLmNwcApAQCAtMzgsNiArMzgsOCBAQAogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgor
I2luY2x1ZGUgIlY4QmluZGluZ0RPTVdpbmRvdy5oIiAgLy8gRklYTUU6IHJlbW92ZSB3aGVuIGNv
bXBsZXRlVVJMIG1vdmVzCisjaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKICNpbmNsdWRlICJW
OFByb3h5LmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgIldvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eS5oIgpAQCAtOTIsMjcgKzk0LDIwIEBAIHZvaWQgdHJhbnNmZXJI
aWRkZW5EZXBlbmRlbmN5KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0LAogICAgIGlmICgh
bmV3VmFsdWUtPklzTnVsbCgpICYmICFuZXdWYWx1ZS0+SXNVbmRlZmluZWQoKSkKICAgICAgICAg
Y3JlYXRlSGlkZGVuRGVwZW5kZW5jeShvYmplY3QsIG5ld1ZhbHVlLCBjYWNoZUluZGV4KTsKIH0K
LSAgICAKIAogYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmUoKQogewotICAgIEZyYW1lKiBmcmFt
ZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4dCgpOwotICAgIHJldHVy
biBmcmFtZSAmJiBmcmFtZS0+c2NyaXB0KCktPnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOworICAg
IHJldHVybiBWOEJpbmRpbmdTdGF0ZTo6T25seSgpLT5wcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsK
IH0KIAogYm9vbCBzaG91bGRBbGxvd05hdmlnYXRpb24oRnJhbWUqIGZyYW1lKQogewotICAgIEZy
YW1lKiBjYWxsaW5nRnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yQ2FsbGluZ0NvbnRl
eHQoKTsKLSAgICByZXR1cm4gY2FsbGluZ0ZyYW1lICYmIGNhbGxpbmdGcmFtZS0+bG9hZGVyKCkt
PnNob3VsZEFsbG93TmF2aWdhdGlvbihmcmFtZSk7CisgICAgcmV0dXJuIFY4QmluZGluZ1NlY3Vy
aXR5OjpzaG91bGRBbGxvd05hdmlnYXRpb24oVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgZnJhbWUp
OwogfQogCiBLVVJMIGNvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYgcmVsYXRpdmVVUkwpCiB7Ci0g
ICAgLy8gRm9yIGhpc3RvaWNhbCByZWFzb25zLCB3ZSBuZWVkIHRvIGNvbXBsZXRlIHRoZSBVUkwg
dXNpbmcgdGhlIGR5bmFtaWMgZnJhbWUuCi0gICAgRnJhbWUqIGZyYW1lID0gVjhQcm94eTo6cmV0
cmlldmVGcmFtZUZvckVudGVyZWRDb250ZXh0KCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAg
cmV0dXJuIEtVUkwoKTsKLSAgICByZXR1cm4gZnJhbWUtPmxvYWRlcigpLT5jb21wbGV0ZVVSTChy
ZWxhdGl2ZVVSTCk7CisgICAgcmV0dXJuIFY4QmluZGluZ0RPTVdpbmRvdzo6Y29tcGxldGVVUkwo
VjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgcmVsYXRpdmVVUkwpOwogfQogCiB2b2lkIG5hdmlnYXRl
SWZBbGxvd2VkKEZyYW1lKiBmcmFtZSwgY29uc3QgS1VSTCYgdXJsLCBib29sIGxvY2tIaXN0b3J5
LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEFycmF5QnVmZmVyQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4QXJyYXlCdWZmZXJDdXN0b20uY3BwCmluZGV4IDUwMWU1YTJkZTNlYTg3NzhiNjIw
ZTE5ZTk1N2I1NGE4OTFiMzc2Y2UuLjMwNWZiMTg1OGU5YzYwMjAxZmJkMDdmNWQ1ZWEyOTBmMzhi
MTQ4NjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QXJyYXlCdWZm
ZXJDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QXJyYXlCdWZm
ZXJDdXN0b20uY3BwCkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNsdWRlICJBcnJheUJ1ZmZlci5o
IgogCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgog
I2luY2x1ZGUgIlY4QXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAKaW5kZXggZTg3
ZGY1MWFlOTMwZDQwZjY0NGY0MDkxNzhkZmQwYTYxOWExZDc0NC4uM2ExYTVlMjQwYzI0YjdmYTBj
MjcwNWMyZThkNWVmMWEyYzc3NzQ2OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcApAQCAtODEsMTAgKzgxLDYgQEAKICNlbmRpZgogI2lu
Y2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCiAKLS8vIEhvcml6b250YWwgYW5kIHZlcnRpY2FsIG9m
ZnNldCwgZnJvbSB0aGUgcGFyZW50IGNvbnRlbnQgYXJlYSwgYXJvdW5kIG5ld2x5Ci0vLyBvcGVu
ZWQgcG9wdXBzIHRoYXQgZG9uJ3Qgc3BlY2lmeSBhIGxvY2F0aW9uLgotc3RhdGljIGNvbnN0IGlu
dCBwb3B1cFRpbGVQaXhlbHMgPSAxMDsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gV2luZG93U2V0VGltZW91dEltcGwoY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncywgYm9vbCBzaW5nbGVTaG90KQpAQCAtNDQ4LDE3ICs0NDQsNiBAQCBzdGF0aWMgYm9vbCBj
YW5TaG93TW9kYWxEaWFsb2dOb3coY29uc3QgRnJhbWUqIGZyYW1lKQogICAgIHJldHVybiBmcmFt
ZS0+cGFnZSgpLT5jaHJvbWUoKS0+Y2FuUnVuTW9kYWxOb3coKTsKIH0KIAotc3RhdGljIGJvb2wg
YWxsb3dQb3BVcCgpCi17Ci0gICAgRnJhbWUqIGZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFt
ZUZvckVudGVyZWRDb250ZXh0KCk7Ci0KLSAgICBBU1NFUlQoZnJhbWUpOwotICAgIGlmIChmcmFt
ZS0+c2NyaXB0KCktPnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBmcmFtZS0+c2V0dGluZ3MoKTsKLSAgICByZXR1
cm4gc2V0dGluZ3MgJiYgc2V0dGluZ3MtPmphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRp
Y2FsbHkoKTsKLX0KLQogc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcnNlTW9kYWxE
aWFsb2dGZWF0dXJlcyhjb25zdCBTdHJpbmcmIGZlYXR1cmVzQXJnKQogewogICAgIEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+IG1hcDsKQEAgLTUxMiw3ICs0OTcsNyBAQCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhET01XaW5kb3c6OnNob3dNb2RhbERpYWxvZ0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudHMmCiAgICAgaWYgKCFlbnRlcmVkRnJhbWUpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZp
bmVkKCk7CiAKLSAgICBpZiAoIWNhblNob3dNb2RhbERpYWxvZ05vdyhmcmFtZSkgfHwgIWFsbG93
UG9wVXAoKSkKKyAgICBpZiAoIWNhblNob3dNb2RhbERpYWxvZ05vdyhmcmFtZSkgfHwgIVY4Qmlu
ZGluZ1NlY3VyaXR5OjphbGxvd1BvcFVwKFY4QmluZGluZ1N0YXRlOjpPbmx5KCkpKQogICAgICAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCiAgICAgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4gZmVhdHVyZXMgPSBwYXJzZU1vZGFsRGlhbG9nRmVhdHVyZXMoZmVhdHVyZUFyZ3MpOwpA
QCAtNTgzLDEzNCArNTY4LDE2IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdpbmRvdzo6
b3BlbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRT
KCJET00uRE9NV2luZG93Lm9wZW4oKSIpOwogCisgICAgRE9NV2luZG93KiBwYXJlbnQgPSBWOERP
TVdpbmRvdzo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAgU3RyaW5nIHVybFN0cmluZyA9
IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsT3JVbmRlZmluZWRDaGVjayhhcmdzWzBdKTsKICAgICBB
dG9taWNTdHJpbmcgZnJhbWVOYW1lID0gKGFyZ3NbMV0tPklzVW5kZWZpbmVkKCkgfHwgYXJnc1sx
XS0+SXNOdWxsKCkpID8gIl9ibGFuayIgOiBBdG9taWNTdHJpbmcodG9XZWJDb3JlU3RyaW5nKGFy
Z3NbMV0pKTsKLQotICAgIERPTVdpbmRvdyogcGFyZW50ID0gVjhET01XaW5kb3c6OnRvTmF0aXZl
KGFyZ3MuSG9sZGVyKCkpOwotICAgIEZyYW1lKiBmcmFtZSA9IHBhcmVudC0+ZnJhbWUoKTsKLQot
ICAgIGlmICghVjhCaW5kaW5nU2VjdXJpdHk6OmNhbkFjY2Vzc0ZyYW1lKFY4QmluZGluZ1N0YXRl
OjpPbmx5KCksIGZyYW1lLCB0cnVlKSkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsK
LQotICAgIEZyYW1lKiBlbnRlcmVkRnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yRW50
ZXJlZENvbnRleHQoKTsKLSAgICBpZiAoIWVudGVyZWRGcmFtZSkKLSAgICAgICAgcmV0dXJuIHY4
OjpVbmRlZmluZWQoKTsKLQotICAgIEZyYW1lKiBjYWxsaW5nRnJhbWUgPSBWOFByb3h5OjpyZXRy
aWV2ZUZyYW1lRm9yQ2FsbGluZ0NvbnRleHQoKTsKLSAgICAvLyBXZSBtYXkgbm90IGhhdmUgYSBj
YWxsaW5nIGNvbnRleHQgaWYgd2UgYXJlIGludm9rZWQgYnkgYSBwbHVnaW4gdmlhIE5QQVBJLgot
ICAgIGlmICghY2FsbGluZ0ZyYW1lKQotICAgICAgICBjYWxsaW5nRnJhbWUgPSBlbnRlcmVkRnJh
bWU7Ci0KLSAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0g
ICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAgICAvLyBCZWNhdXNlIEZyYW1lVHJl
ZTo6ZmluZCgpIHJldHVybnMgdHJ1ZSBmb3IgZW1wdHkgc3RyaW5ncywgd2UgbXVzdCBjaGVjawot
ICAgIC8vIGZvciBlbXB0eSBmcmFtZW5hbWVzLiBPdGhlcndpc2UsIGlsbGVnaXRpbWF0ZSB3aW5k
b3cub3BlbigpIGNhbGxzIHdpdGgKLSAgICAvLyBubyBuYW1lIHdpbGwgcGFzcyByaWdodCB0aHJv
dWdoIHRoZSBwb3B1cCBibG9ja2VyLgotICAgIGlmICghYWxsb3dQb3BVcCgpICYmCi0gICAgICAg
IChmcmFtZU5hbWUuaXNFbXB0eSgpIHx8ICFmcmFtZS0+dHJlZSgpLT5maW5kKGZyYW1lTmFtZSkp
KSB7Ci0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0gICAgfQotCi0gICAgLy8gR2V0
IHRoZSB0YXJnZXQgZnJhbWUgZm9yIHRoZSBzcGVjaWFsIGNhc2VzIG9mIF90b3AgYW5kIF9wYXJl
bnQuICBJbiB0aG9zZQotICAgIC8vIGNhc2VzLCB3ZSBjYW4gc2NoZWR1bGUgYSBsb2NhdGlvbiBj
aGFuZ2UgcmlnaHQgbm93IGFuZCByZXR1cm4gZWFybHkuCi0gICAgYm9vbCB0b3BPclBhcmVudCA9
IGZhbHNlOwotICAgIGlmIChmcmFtZU5hbWUgPT0gIl90b3AiKSB7Ci0gICAgICAgIGZyYW1lID0g
ZnJhbWUtPnRyZWUoKS0+dG9wKCk7Ci0gICAgICAgIHRvcE9yUGFyZW50ID0gdHJ1ZTsKLSAgICB9
IGVsc2UgaWYgKGZyYW1lTmFtZSA9PSAiX3BhcmVudCIpIHsKLSAgICAgICAgaWYgKEZyYW1lKiBw
YXJlbnQgPSBmcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkKLSAgICAgICAgICAgIGZyYW1lID0gcGFy
ZW50OwotICAgICAgICB0b3BPclBhcmVudCA9IHRydWU7Ci0gICAgfQotICAgIGlmICh0b3BPclBh
cmVudCkgewotICAgICAgICBpZiAoIXNob3VsZEFsbG93TmF2aWdhdGlvbihmcmFtZSkpCi0gICAg
ICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAgICAgIFN0cmluZyBjb21wbGV0
ZWRVcmw7Ci0gICAgICAgIGlmICghdXJsU3RyaW5nLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNv
bXBsZXRlZFVybCA9IGNvbXBsZXRlVVJMKHVybFN0cmluZyk7Ci0KLSAgICAgICAgaWYgKCFjb21w
bGV0ZWRVcmwuaXNFbXB0eSgpICYmCi0gICAgICAgICAgICAoIXByb3RvY29sSXNKYXZhU2NyaXB0
KGNvbXBsZXRlZFVybCkgfHwgU2NyaXB0Q29udHJvbGxlcjo6aXNTYWZlU2NyaXB0KGZyYW1lKSkp
IHsKLSAgICAgICAgICAgIGJvb2wgdXNlckdlc3R1cmUgPSBwcm9jZXNzaW5nVXNlckdlc3R1cmUo
KTsKLQotICAgICAgICAgICAgLy8gRm9yIHdoYXRldmVyIHJlYXNvbiwgRmlyZWZveCB1c2VzIHRo
ZSBlbnRlcmVkIGZyYW1lIHRvIGRldGVybWluZQotICAgICAgICAgICAgLy8gdGhlIG91dGdvaW5n
UmVmZXJyZXIuICBXZSByZXBsaWNhdGUgdGhhdCBiZWhhdmlvciBoZXJlLgotICAgICAgICAgICAg
U3RyaW5nIHJlZmVycmVyID0gZW50ZXJlZEZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJl
cigpOwotCi0gICAgICAgICAgICBmcmFtZS0+cmVkaXJlY3RTY2hlZHVsZXIoKS0+c2NoZWR1bGVM
b2NhdGlvbkNoYW5nZShjb21wbGV0ZWRVcmwsIHJlZmVycmVyLCBmYWxzZSwgZmFsc2UsIHVzZXJH
ZXN0dXJlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9WOChmcmFtZS0+ZG9tV2luZG93
KCkpOwotICAgIH0KLQotICAgIC8vIEluIHRoZSBjYXNlIG9mIGEgbmFtZWQgZnJhbWUgb3IgYSBu
ZXcgd2luZG93LCB3ZSdsbCB1c2UgdGhlCi0gICAgLy8gY3JlYXRlV2luZG93KCkgaGVscGVyLgot
Ci0gICAgLy8gUGFyc2UgdGhlIHZhbHVlcywgYW5kIHRoZW4gd29yayB3aXRoIGEgY29weSBvZiB0
aGUgcGFyc2VkIHZhbHVlcwotICAgIC8vIHNvIHdlIGNhbiByZXN0b3JlIHRoZSB2YWx1ZXMgd2Ug
bWF5IG5vdCB3YW50IHRvIG92ZXJ3cml0ZSBhZnRlcgotICAgIC8vIHdlIGRvIHRoZSBtdWx0aXBs
ZSBtb25pdG9yIGZpeGVzLgogICAgIFdpbmRvd0ZlYXR1cmVzIHJhd0ZlYXR1cmVzKHRvV2ViQ29y
ZVN0cmluZ1dpdGhOdWxsT3JVbmRlZmluZWRDaGVjayhhcmdzWzJdKSk7Ci0gICAgV2luZG93RmVh
dHVyZXMgd2luZG93RmVhdHVyZXMocmF3RmVhdHVyZXMpOwotICAgIEZsb2F0UmVjdCBzY3JlZW5S
ZWN0ID0gc2NyZWVuQXZhaWxhYmxlUmVjdChwYWdlLT5tYWluRnJhbWUoKS0+dmlldygpKTsKLQot
ICAgIC8vIFNldCBkZWZhdWx0IHNpemUgYW5kIGxvY2F0aW9uIG5lYXIgcGFyZW50IHdpbmRvdyBp
ZiBub25lIHdlcmUgc3BlY2lmaWVkLgotICAgIC8vIFRoZXNlIG1heSBiZSBmdXJ0aGVyIG1vZGlm
aWVkIGJ5IGFkanVzdFdpbmRvd1JlY3QsIGJlbG93LgotICAgIGlmICghd2luZG93RmVhdHVyZXMu
eFNldCkgewotICAgICAgICB3aW5kb3dGZWF0dXJlcy54ID0gcGFyZW50LT5zY3JlZW5YKCkgLSBz
Y3JlZW5SZWN0LngoKSArIHBvcHVwVGlsZVBpeGVsczsKLSAgICAgICAgd2luZG93RmVhdHVyZXMu
eFNldCA9IHRydWU7Ci0gICAgfQotICAgIGlmICghd2luZG93RmVhdHVyZXMueVNldCkgewotICAg
ICAgICB3aW5kb3dGZWF0dXJlcy55ID0gcGFyZW50LT5zY3JlZW5ZKCkgLSBzY3JlZW5SZWN0Lnko
KSArIHBvcHVwVGlsZVBpeGVsczsKLSAgICAgICAgd2luZG93RmVhdHVyZXMueVNldCA9IHRydWU7
Ci0gICAgfQotICAgIGlmICghd2luZG93RmVhdHVyZXMud2lkdGhTZXQpIHsKLSAgICAgICAgd2lu
ZG93RmVhdHVyZXMud2lkdGggPSBwYXJlbnQtPmlubmVyV2lkdGgoKTsKLSAgICAgICAgd2luZG93
RmVhdHVyZXMud2lkdGhTZXQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAoIXdpbmRvd0ZlYXR1cmVz
LmhlaWdodFNldCkgewotICAgICAgICB3aW5kb3dGZWF0dXJlcy5oZWlnaHQgPSBwYXJlbnQtPmlu
bmVySGVpZ2h0KCk7Ci0gICAgICAgIHdpbmRvd0ZlYXR1cmVzLmhlaWdodFNldCA9IHRydWU7Ci0g
ICAgfQotCi0gICAgRmxvYXRSZWN0IHdpbmRvd1JlY3Qod2luZG93RmVhdHVyZXMueCwgd2luZG93
RmVhdHVyZXMueSwgd2luZG93RmVhdHVyZXMud2lkdGgsIHdpbmRvd0ZlYXR1cmVzLmhlaWdodCk7
Ci0KLSAgICAvLyBUaGUgbmV3IHdpbmRvdydzIGxvY2F0aW9uIGlzIHJlbGF0aXZlIHRvIGl0cyBj
dXJyZW50IHNjcmVlbiwgc28gc2hpZnQKLSAgICAvLyBpdCBpbiBjYXNlIGl0J3Mgb24gYSBzZWNv
bmRhcnkgbW9uaXRvci4gU2VlIGh0dHA6Ly9iL3ZpZXdJc3N1ZT9pZD05Njc5MDUuCi0gICAgd2lu
ZG93UmVjdC5tb3ZlKHNjcmVlblJlY3QueCgpLCBzY3JlZW5SZWN0LnkoKSk7Ci0gICAgV2ViQ29y
ZTo6RE9NV2luZG93OjphZGp1c3RXaW5kb3dSZWN0KHNjcmVlblJlY3QsIHdpbmRvd1JlY3QsIHdp
bmRvd1JlY3QpOwotCi0gICAgd2luZG93RmVhdHVyZXMueCA9IHdpbmRvd1JlY3QueCgpOwotICAg
IHdpbmRvd0ZlYXR1cmVzLnkgPSB3aW5kb3dSZWN0LnkoKTsKLSAgICB3aW5kb3dGZWF0dXJlcy5o
ZWlnaHQgPSB3aW5kb3dSZWN0LmhlaWdodCgpOwotICAgIHdpbmRvd0ZlYXR1cmVzLndpZHRoID0g
d2luZG93UmVjdC53aWR0aCgpOwotCi0gICAgLy8gSWYgZWl0aGVyIG9mIHRoZSBvcmlnaW4gY29v
cmRpbmF0ZXMgb3IgZGltZW5zaW9ucyB3ZXJlbid0IHNldCBpbiB0aGUgb3JpZ2luYWwKLSAgICAv
LyBzdHJpbmcsIG1ha2Ugc3VyZSB0aGV5IGFyZW4ndCBzZXQgbm93LgotICAgIGlmICghcmF3RmVh
dHVyZXMueFNldCkgewotICAgICAgICB3aW5kb3dGZWF0dXJlcy54ID0gMDsKLSAgICAgICAgd2lu
ZG93RmVhdHVyZXMueFNldCA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAoIXJhd0ZlYXR1cmVzLnlT
ZXQpIHsKLSAgICAgICAgd2luZG93RmVhdHVyZXMueSA9IDA7Ci0gICAgICAgIHdpbmRvd0ZlYXR1
cmVzLnlTZXQgPSBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKCFyYXdGZWF0dXJlcy53aWR0aFNldCkg
ewotICAgICAgd2luZG93RmVhdHVyZXMud2lkdGggPSAwOwotICAgICAgd2luZG93RmVhdHVyZXMu
d2lkdGhTZXQgPSBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKCFyYXdGZWF0dXJlcy5oZWlnaHRTZXQp
IHsKLSAgICAgIHdpbmRvd0ZlYXR1cmVzLmhlaWdodCA9IDA7Ci0gICAgICB3aW5kb3dGZWF0dXJl
cy5oZWlnaHRTZXQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBmcmFtZSA9IFY4QmluZGluZ0RPTVdp
bmRvdzo6Y3JlYXRlV2luZG93KFY4QmluZGluZ1N0YXRlOjpPbmx5KCksIGNhbGxpbmdGcmFtZSwg
ZW50ZXJlZEZyYW1lLCBmcmFtZSwgdXJsU3RyaW5nLCBmcmFtZU5hbWUsIHdpbmRvd0ZlYXR1cmVz
LCB2ODo6TG9jYWw8djg6OlZhbHVlPigpKTsKKyAgICBET01XaW5kb3cqIGNoaWxkID0gVjhCaW5k
aW5nRE9NV2luZG93OjpvcGVuKFY4QmluZGluZ1N0YXRlOjpPbmx5KCksIHBhcmVudCwgdXJsU3Ry
aW5nLCBmcmFtZU5hbWUsIHJhd0ZlYXR1cmVzKTsKIAotICAgIGlmICghZnJhbWUpCisgICAgaWYg
KCFjaGlsZCkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIAotICAgIHJldHVybiB0
b1Y4KGZyYW1lLT5kb21XaW5kb3coKSk7CisgICAgcmV0dXJuIHRvVjgoY2hpbGQpOwogfQogCiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvdjgvc3BlY2lhbGl6YXRpb24vVjhCaW5kaW5n
U3RhdGUuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9zcGVjaWFsaXphdGlvbi9WOEJpbmRpbmdT
dGF0ZS5jcHAKaW5kZXggNDcxMDI3MWVmYzlkZmE5YWVlNTlhZmViMzBlOTMyNDYyNGZjOWZlNC4u
ODllOWIxNGExMGE1NGFhNWJiYzg4MGFkNmZkYjJiYWZhODNlMzg3NyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9zcGVjaWFsaXphdGlvbi9WOEJpbmRpbmdTdGF0ZS5jcHAKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9zcGVjaWFsaXphdGlvbi9WOEJpbmRpbmdTdGF0ZS5jcHAKQEAg
LTEsMTAgKzEsMTAgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIAorICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQogICogbWV0OgotICogCisgKgogICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKQEAg
LTE0LDcgKzE0LDcgQEAKICAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKICAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCisgKgogICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwogICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKICAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpAQCAtMzEsNiArMzEsOCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlY4QmluZGluZ1N0YXRlLmgiCiAKKyNpbmNs
dWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJW
OFByb3h5LmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCkBAIC01Myw5ICs1NSwy
NSBAQCBET01XaW5kb3cqIFN0YXRlPFY4QmluZGluZz46OmdldEFjdGl2ZVdpbmRvdygpCiAgICAg
cmV0dXJuIFY4UHJveHk6OnJldHJpZXZlV2luZG93KGFjdGl2ZUNvbnRleHQpOwogfQogCitGcmFt
ZSogU3RhdGU8VjhCaW5kaW5nPjo6Z2V0QWN0aXZlRnJhbWUoKQoreworICAgIHJldHVybiBWOFBy
b3h5OjpyZXRyaWV2ZUZyYW1lRm9yQ3VycmVudENvbnRleHQoKTsKK30KKworRnJhbWUqIFN0YXRl
PFY4QmluZGluZz46OmdldEZpcnN0RnJhbWUoKQoreworICAgIHJldHVybiBWOFByb3h5OjpyZXRy
aWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKTsKK30KKwogdm9pZCBTdGF0ZTxWOEJpbmRpbmc+
OjppbW1lZGlhdGVseVJlcG9ydFVuc2FmZUFjY2Vzc1RvKEZyYW1lKiB0YXJnZXQpCiB7CiAgICAg
VjhQcm94eTo6cmVwb3J0VW5zYWZlQWNjZXNzVG8odGFyZ2V0LCBWOFByb3h5OjpSZXBvcnROb3cp
OwogfQogCitib29sIFN0YXRlPFY4QmluZGluZz46OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpCit7
CisgICAgRnJhbWUqIGZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckVudGVyZWRDb250
ZXh0KCk7CisgICAgcmV0dXJuIGZyYW1lICYmIGZyYW1lLT5zY3JpcHQoKS0+cHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3Mvdjgvc3BlY2lhbGl6YXRpb24vVjhCaW5kaW5nU3RhdGUuaCBiL1dlYkNv
cmUvYmluZGluZ3Mvdjgvc3BlY2lhbGl6YXRpb24vVjhCaW5kaW5nU3RhdGUuaAppbmRleCBmMzA1
YzE0NTEwNTczZWQzMGQ2N2Y1ZGU4YmNmYTkwMDc3MjhkMWY2Li5iYWJhMGM2M2MwODhmZjcxNDg1
OGQ0ZDA2YjlkZmZjYmMwNDFhNzJjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L3Nw
ZWNpYWxpemF0aW9uL1Y4QmluZGluZ1N0YXRlLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9z
cGVjaWFsaXphdGlvbi9WOEJpbmRpbmdTdGF0ZS5oCkBAIC0xLDEwICsxLDEwIEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAK
KyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKICAqIG1ldDoKLSAqIAorICoKICAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CiAgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCiAgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCkBAIC0xNCw3ICsxNCw3IEBACiAgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQogICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqIAorICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKQEAgLTM2LDYgKzM2LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitjbGFzcyBGcmFtZTsKKwogLy8gU2luZ2xldG9uIGltcGxlbWVudGF0aW9uIG9mIFN0YXRlPFY4
QmluZGluZz4uICBVc2VzIFY4J3MgZ2xvYmFsIGRhdGEKIC8vIHN0cnVjdHVyZXMgdG8gcmV0dXJu
IGluZm9ybWF0aW9uIGFib3V0IHJlbGV2YW50IGV4ZWN1dGlvbiBzdGF0ZS4KIHRlbXBsYXRlIDw+
CkBAIC00NCwxMSArNDYsMTkgQEAgcHVibGljOgogICAgIC8vIFNpbmdsZXRvbgogICAgIHN0YXRp
YyBTdGF0ZSogT25seSgpOwogCisgICAgLy8gUmVwb3J0cyBhbiBlcnJvciBtZXNzYWdlICh3aXRo
b3V0IGRlbGF5KSBpZiB0aGUgc2VjdXJpdHkgY2hlY2sgZmFpbHMuCisgICAgc3RhdGljIHZvaWQg
aW1tZWRpYXRlbHlSZXBvcnRVbnNhZmVBY2Nlc3NUbyhGcmFtZSopOworCiAgICAgLy8gVGhlIERP
TVdpbmRvdyBjb3JyZXNwb25kaW5nIHRvIHRoZSAnY2FsbGluZyBjb250ZXh0JyBvZiBleGVjdXRp
b24uCiAgICAgRE9NV2luZG93KiBnZXRBY3RpdmVXaW5kb3coKTsKIAotICAgIC8vIFJlcG9ydHMg
YW4gZXJyb3IgbWVzc2FnZSAod2l0aG91dCBkZWxheSkgaWYgdGhlIHNlY3VyaXR5IGNoZWNrIGZh
aWxzLgotICAgIHN0YXRpYyB2b2lkIGltbWVkaWF0ZWx5UmVwb3J0VW5zYWZlQWNjZXNzVG8oRnJh
bWUqKTsKKyAgICAvLyBUaGUgZnJhbWUgY29ycmVzcG9uZGluZyB0byB0aGUgJ2NhbGxpbmcgY29u
dGV4dCcgb2YgZXhlY3V0aW9uLgorICAgIEZyYW1lKiBnZXRBY3RpdmVGcmFtZSgpOworCisgICAg
Ly8gVGhlIGZpcnN0IGZyYW1lIGluIHdoaWNoIGV4ZWN1dGlvbiBlbnRlcmVkIHVzZXIgc2NyaXB0
LgorICAgIEZyYW1lKiBnZXRGaXJzdEZyYW1lKCk7CisKKyAgICBib29sIHByb2Nlc3NpbmdVc2Vy
R2VzdHVyZSgpOwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFN0YXRlKCkge30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60333</attachid>
            <date>2010-07-01 21:59:46 -0700</date>
            <delta_ts>2010-08-08 23:37:49 -0700</delta_ts>
            <desc>Moves window.open into the generic bindings.</desc>
            <filename>bug-41392-20100702135943.patch</filename>
            <type>text/plain</type>
            <size>30941</size>
            <attacher name="Dominic Cooney">dominicc</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YmRmNTNhM2ZjMjJjZjZjY2YyYzc2MjU4M2FhNTgxOGQxYzg4NTdiNy4uYmFjZDYwYjRmODY4Njdi
YWI4NmZmNTNlOTUxOGU0NmI4ODY3YzA3NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAxMC0wNy0wMSAgRG9t
aW5pYyBDb29uZXkgIDxkb21pbmljY0Bkb21pbmljYy1tYWNwcm8udG9rLmNvcnAuZ29vZ2xlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3Zl
cyB3aW5kb3cub3BlbiBsb2dpYyBpbnRvIHRoZSBnZW5lcmljIGJpbmRpbmdzLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggbW92ZXMgd2luZG93Lm9wZW4gbG9naWMgZnJvbSBWOCBpbnRvIHRoZSBnZW5l
cmljCisgICAgICAgIGJpbmRpbmdzIHNvIGl0IGNvdWxkIGJlIHNoYXJlZCB3aXRoIEpTQy4gSlND
IHNoYXJpbmcgaXMgbm90IGluCisgICAgICAgIHRoaXMgcGF0Y2guIFRoaXMgcGF0Y2ggaXMgb2Yg
dGhlIHNhbWUgZmxhdm9yL2ludGVudCBhcworICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTMzMjAxPi4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEzOTIKKworICAgICAgICAqIGJpbmRpbmdzL2dlbmVyaWMv
QmluZGluZ0RPTVdpbmRvdy5oOgorICAgICAgICAoV2ViQ29yZTo6OjpjcmVhdGVXaW5kb3cpOgor
ICAgICAgICAoV2ViQ29yZTo6OjpvcGVuKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6Y29tcGxldGVV
UkwpOgorICAgICAgICAqIGJpbmRpbmdzL2dlbmVyaWMvQmluZGluZ1NlY3VyaXR5Lmg6CisgICAg
ICAgIChXZWJDb3JlOjo6OmFsbG93UG9wVXApOgorICAgICAgICAoV2ViQ29yZTo6OjpzaG91bGRB
bGxvd05hdmlnYXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QmluZGluZy5oOgorICAg
ICAgICAoV2ViQ29yZTo6VjhCaW5kaW5nOjplbXB0eVNjcmlwdFZhbHVlKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9WOFV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0cmFuc2Zlckhp
ZGRlbkRlcGVuZGVuY3kpOgorICAgICAgICAoV2ViQ29yZTo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZEFsbG93TmF2aWdhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpjb21wbGV0ZVVSTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4QXJy
YXlCdWZmZXJDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdp
bmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvdzo6c2hvd01vZGFs
RGlhbG9nQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3c6Om9wZW5DYWxs
YmFjayk6CisgICAgICAgICogYmluZGluZ3Mvdjgvc3BlY2lhbGl6YXRpb24vVjhCaW5kaW5nU3Rh
dGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6OjpnZXRBY3RpdmVGcmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjo6OmdldEZpcnN0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Ojpwcm9jZXNzaW5n
VXNlckdlc3R1cmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L3NwZWNpYWxpemF0aW9uL1Y4Qmlu
ZGluZ1N0YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjopOgorCiAyMDEwLTA3LTAxICBTaGVyaWZm
IEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByNjIzMjEuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVy
aWMvQmluZGluZ0RPTVdpbmRvdy5oIGIvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0JpbmRpbmdE
T01XaW5kb3cuaAppbmRleCBmODgzZDExMDIzNWQ3ZDMwNjhjMWNiZTVmN2E5MjAxZTRlYWY4MTU4
Li4xMGJhMmEzNmY4ODQyNDQyNTFjMjY0OGJmMzJkNzIyMDFjNDUwM2M3IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvQmluZGluZ0RPTVdpbmRvdy5oCisrKyBiL1dlYkNvcmUv
YmluZGluZ3MvZ2VuZXJpYy9CaW5kaW5nRE9NV2luZG93LmgKQEAgLTEsMTAgKzEsMTAgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIAorICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogICogbWV0OgotICogCisg
KgogICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKICAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKQEAgLTE0LDcgKzE0LDcgQEAKICAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKICAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCiAgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCisgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKICAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgpAQCAtMzEsMTEgKzMxLDE3IEBACiAjaWZuZGVmIEJpbmRpbmdE
T01XaW5kb3dfaAogI2RlZmluZSBCaW5kaW5nRE9NV2luZG93X2gKIAorI2luY2x1ZGUgIkRPTVdp
bmRvdy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5o
IgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5j
bHVkZSAiR2VuZXJpY0JpbmRpbmcuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1TY3JlZW4uaCIKKyNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTUyLDYgKzU4LDIwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBXaW5kb3dGZWF0dXJlcyYgd2luZG93RmVhdHVyZXMsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmluZGluZ1ZhbHVlIGRpYWxvZ0FyZ3MpOwor
CisgICAgc3RhdGljIFdlYkNvcmU6OkRPTVdpbmRvdyogb3BlbihTdGF0ZTxCaW5kaW5nPiosCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpET01XaW5kb3cqIHBh
cmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYg
dXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBm
cmFtZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXaW5k
b3dGZWF0dXJlcyYgcmF3RmVhdHVyZXMpOworCisgICAgLy8gRklYTUU6IFRoZXJlIHNob3VsZCBi
ZSBhIHBsYWNlIGZvciBnZW5lcmljIGJpbmRpbmcgdXRpbGl0aWVzLgorICAgIHN0YXRpYyBLVVJM
IGNvbXBsZXRlVVJMKFN0YXRlPEJpbmRpbmc+KiwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZVVSTCk7
CisKK3ByaXZhdGU6CisgICAgLy8gSG9yaXpvbnRhbCBhbmQgdmVydGljYWwgb2Zmc2V0LCBmcm9t
IHRoZSBwYXJlbnQgY29udGVudCBhcmVhLAorICAgIC8vIGFyb3VuZCBuZXdseSBvcGVuZWQgcG9w
dXBzIHRoYXQgZG9uJ3Qgc3BlY2lmeSBhIGxvY2F0aW9uLgorICAgIHN0YXRpYyBjb25zdCBpbnQg
cG9wdXBUaWxlUGl4ZWxzID0gMTA7CiB9OwogCiAvLyBJbXBsZW1lbnRhdGlvbnMgb2YgdGVtcGxh
dGVkIG1ldGhvZHMgbXVzdCBiZSBpbiB0aGlzIGZpbGUuCkBAIC0xMDMsOCArMTIzLDggQEAgRnJh
bWUqIEJpbmRpbmdET01XaW5kb3c8QmluZGluZz46OmNyZWF0ZVdpbmRvdyhTdGF0ZTxCaW5kaW5n
Piogc3RhdGUsCiAKICAgICBpZiAoIXByb3RvY29sSXNKYXZhU2NyaXB0KHVybCkgfHwgQmluZGlu
Z1NlY3VyaXR5PEJpbmRpbmc+OjpjYW5BY2Nlc3NGcmFtZShzdGF0ZSwgbmV3RnJhbWUsIHRydWUp
KSB7CiAgICAgICAgIEtVUkwgY29tcGxldGVkVXJsID0KLSAgICAgICAgICAgIHVybC5pc0VtcHR5
KCkgPyBLVVJMKFBhcnNlZFVSTFN0cmluZywgIiIpIDogY29tcGxldGVVUkwodXJsKTsKLSAgICAg
ICAgYm9vbCB1c2VyR2VzdHVyZSA9IHByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOworICAgICAgICAg
ICAgdXJsLmlzRW1wdHkoKSA/IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAiIikgOiBjb21wbGV0ZVVS
TChzdGF0ZSwgdXJsKTsKKyAgICAgICAgYm9vbCB1c2VyR2VzdHVyZSA9IHN0YXRlLT5wcm9jZXNz
aW5nVXNlckdlc3R1cmUoKTsKIAogICAgICAgICBpZiAoY3JlYXRlZCkKICAgICAgICAgICAgIG5l
d0ZyYW1lLT5sb2FkZXIoKS0+Y2hhbmdlTG9jYXRpb24oY29tcGxldGVkVXJsLCByZWZlcnJlciwg
ZmFsc2UsIGZhbHNlLCB1c2VyR2VzdHVyZSk7CkBAIC0xMTUsNiArMTM1LDE1MiBAQCBGcmFtZSog
QmluZGluZ0RPTVdpbmRvdzxCaW5kaW5nPjo6Y3JlYXRlV2luZG93KFN0YXRlPEJpbmRpbmc+KiBz
dGF0ZSwKICAgICByZXR1cm4gbmV3RnJhbWU7CiB9CiAKK3RlbXBsYXRlPGNsYXNzIEJpbmRpbmc+
CitXZWJDb3JlOjpET01XaW5kb3cqIEJpbmRpbmdET01XaW5kb3c8QmluZGluZz46Om9wZW4oU3Rh
dGU8QmluZGluZz4qIHN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogcGFyZW50LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdXJs
U3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFN0cmluZyYgZnJhbWVOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdpbmRvd0ZlYXR1cmVzJiByYXdGZWF0dXJl
cykKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBwYXJlbnQtPmZyYW1lKCk7CisKKyAgICBpZiAoIUJp
bmRpbmdTZWN1cml0eTxCaW5kaW5nPjo6Y2FuQWNjZXNzRnJhbWUoc3RhdGUsIGZyYW1lLCB0cnVl
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBGcmFtZSogZW50ZXJlZEZyYW1lID0gc3RhdGUt
PmdldEZpcnN0RnJhbWUoKTsKKyAgICBpZiAoIWVudGVyZWRGcmFtZSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBGcmFtZSogY2FsbGluZ0ZyYW1lID0gc3RhdGUtPmdldEFjdGl2ZUZyYW1lKCk7
CisgICAgLy8gV2UgbWF5IG5vdCBoYXZlIGEgY2FsbGluZyBjb250ZXh0IGlmIHdlIGFyZSBpbnZv
a2VkIGJ5IGEgcGx1Z2luCisgICAgLy8gdmlhIE5QQVBJLgorICAgIGlmICghY2FsbGluZ0ZyYW1l
KQorICAgICAgICBjYWxsaW5nRnJhbWUgPSBlbnRlcmVkRnJhbWU7CisKKyAgICBQYWdlKiBwYWdl
ID0gZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgLy8gQmVjYXVzZSBGcmFtZVRyZWU6OmZpbmQoKSByZXR1cm5zIHRydWUgZm9yIGVtcHR5IHN0
cmluZ3MsIHdlIG11c3QgY2hlY2sKKyAgICAvLyBmb3IgZW1wdHkgZnJhbWVuYW1lcy4gT3RoZXJ3
aXNlLCBpbGxlZ2l0aW1hdGUgd2luZG93Lm9wZW4oKSBjYWxscyB3aXRoCisgICAgLy8gbm8gbmFt
ZSB3aWxsIHBhc3MgcmlnaHQgdGhyb3VnaCB0aGUgcG9wdXAgYmxvY2tlci4KKyAgICBpZiAoIUJp
bmRpbmdTZWN1cml0eTxCaW5kaW5nPjo6YWxsb3dQb3BVcChzdGF0ZSkKKyAgICAgICAgJiYgKGZy
YW1lTmFtZS5pc0VtcHR5KCkgfHwgIWZyYW1lLT50cmVlKCktPmZpbmQoZnJhbWVOYW1lKSkpIHsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gR2V0IHRoZSB0YXJnZXQgZnJhbWUg
Zm9yIHRoZSBzcGVjaWFsIGNhc2VzIG9mIF90b3AgYW5kIF9wYXJlbnQuCisgICAgLy8gSW4gdGhv
c2UgY2FzZXMsIHdlIGNhbiBzY2hlZHVsZSBhIGxvY2F0aW9uIGNoYW5nZSByaWdodCBub3cgYW5k
CisgICAgLy8gcmV0dXJuIGVhcmx5LgorICAgIGJvb2wgdG9wT3JQYXJlbnQgPSBmYWxzZTsKKyAg
ICBpZiAoZnJhbWVOYW1lID09ICJfdG9wIikgeworICAgICAgICBmcmFtZSA9IGZyYW1lLT50cmVl
KCktPnRvcCgpOworICAgICAgICB0b3BPclBhcmVudCA9IHRydWU7CisgICAgfSBlbHNlIGlmIChm
cmFtZU5hbWUgPT0gIl9wYXJlbnQiKSB7CisgICAgICAgIGlmIChGcmFtZSogcGFyZW50ID0gZnJh
bWUtPnRyZWUoKS0+cGFyZW50KCkpCisgICAgICAgICAgICBmcmFtZSA9IHBhcmVudDsKKyAgICAg
ICAgdG9wT3JQYXJlbnQgPSB0cnVlOworICAgIH0KKyAgICBpZiAodG9wT3JQYXJlbnQpIHsKKyAg
ICAgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk8QmluZGluZz46OnNob3VsZEFsbG93TmF2aWdhdGlv
bihzdGF0ZSwgZnJhbWUpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgU3RyaW5n
IGNvbXBsZXRlZFVybDsKKyAgICAgICAgaWYgKCF1cmxTdHJpbmcuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgY29tcGxldGVkVXJsID0gY29tcGxldGVVUkwoc3RhdGUsIHVybFN0cmluZyk7CisKKyAg
ICAgICAgaWYgKCFjb21wbGV0ZWRVcmwuaXNFbXB0eSgpCisgICAgICAgICAgICAmJiAoIXByb3Rv
Y29sSXNKYXZhU2NyaXB0KGNvbXBsZXRlZFVybCkgfHwgU2NyaXB0Q29udHJvbGxlcjo6aXNTYWZl
U2NyaXB0KGZyYW1lKSkpIHsKKyAgICAgICAgICAgIGJvb2wgdXNlckdlc3R1cmUgPSBzdGF0ZS0+
cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7CisKKyAgICAgICAgICAgIC8vIEZvciB3aGF0ZXZlciBy
ZWFzb24sIEZpcmVmb3ggdXNlcyB0aGUgZW50ZXJlZCBmcmFtZSB0byBkZXRlcm1pbmUKKyAgICAg
ICAgICAgIC8vIHRoZSBvdXRnb2luZ1JlZmVycmVyLiAgV2UgcmVwbGljYXRlIHRoYXQgYmVoYXZp
b3IgaGVyZS4KKyAgICAgICAgICAgIFN0cmluZyByZWZlcnJlciA9IGVudGVyZWRGcmFtZS0+bG9h
ZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKTsKKworICAgICAgICAgICAgZnJhbWUtPnJlZGlyZWN0
U2NoZWR1bGVyKCktPnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UoY29tcGxldGVkVXJsLCByZWZlcnJl
ciwgZmFsc2UsIGZhbHNlLCB1c2VyR2VzdHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGZyYW1lLT5kb21XaW5kb3coKTsKKyAgICB9CisKKyAgICAvLyBJbiB0aGUgY2FzZSBvZiBhIG5h
bWVkIGZyYW1lIG9yIGEgbmV3IHdpbmRvdywgd2UnbGwgdXNlIHRoZQorICAgIC8vIGNyZWF0ZVdp
bmRvdygpIGhlbHBlci4KKworICAgIC8vIFdvcmsgd2l0aCBhIGNvcHkgb2YgdGhlIHBhcnNlZCB2
YWx1ZXMgc28gd2UgY2FuIHJlc3RvcmUgdGhlCisgICAgLy8gdmFsdWVzIHdlIG1heSBub3Qgd2Fu
dCB0byBvdmVyd3JpdGUgYWZ0ZXIgd2UgZG8gdGhlIG11bHRpcGxlCisgICAgLy8gbW9uaXRvciBm
aXhlcy4KKyAgICBXaW5kb3dGZWF0dXJlcyB3aW5kb3dGZWF0dXJlcyhyYXdGZWF0dXJlcyk7Cisg
ICAgRmxvYXRSZWN0IHNjcmVlblJlY3QgPSBzY3JlZW5BdmFpbGFibGVSZWN0KHBhZ2UtPm1haW5G
cmFtZSgpLT52aWV3KCkpOworCisgICAgLy8gU2V0IGRlZmF1bHQgc2l6ZSBhbmQgbG9jYXRpb24g
bmVhciBwYXJlbnQgd2luZG93IGlmIG5vbmUgd2VyZSBzcGVjaWZpZWQuCisgICAgLy8gVGhlc2Ug
bWF5IGJlIGZ1cnRoZXIgbW9kaWZpZWQgYnkgYWRqdXN0V2luZG93UmVjdCwgYmVsb3cuCisgICAg
aWYgKCF3aW5kb3dGZWF0dXJlcy54U2V0KSB7CisgICAgICAgIHdpbmRvd0ZlYXR1cmVzLnggPSBw
YXJlbnQtPnNjcmVlblgoKSAtIHNjcmVlblJlY3QueCgpICsgcG9wdXBUaWxlUGl4ZWxzOworICAg
ICAgICB3aW5kb3dGZWF0dXJlcy54U2V0ID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCF3aW5kb3dG
ZWF0dXJlcy55U2V0KSB7CisgICAgICAgIHdpbmRvd0ZlYXR1cmVzLnkgPSBwYXJlbnQtPnNjcmVl
blkoKSAtIHNjcmVlblJlY3QueSgpICsgcG9wdXBUaWxlUGl4ZWxzOworICAgICAgICB3aW5kb3dG
ZWF0dXJlcy55U2V0ID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCF3aW5kb3dGZWF0dXJlcy53aWR0
aFNldCkgeworICAgICAgICB3aW5kb3dGZWF0dXJlcy53aWR0aCA9IHBhcmVudC0+aW5uZXJXaWR0
aCgpOworICAgICAgICB3aW5kb3dGZWF0dXJlcy53aWR0aFNldCA9IHRydWU7CisgICAgfQorICAg
IGlmICghd2luZG93RmVhdHVyZXMuaGVpZ2h0U2V0KSB7CisgICAgICAgIHdpbmRvd0ZlYXR1cmVz
LmhlaWdodCA9IHBhcmVudC0+aW5uZXJIZWlnaHQoKTsKKyAgICAgICAgd2luZG93RmVhdHVyZXMu
aGVpZ2h0U2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3Qgd2luZG93UmVjdCh3aW5k
b3dGZWF0dXJlcy54LCB3aW5kb3dGZWF0dXJlcy55LCB3aW5kb3dGZWF0dXJlcy53aWR0aCwgd2lu
ZG93RmVhdHVyZXMuaGVpZ2h0KTsKKworICAgIC8vIFRoZSBuZXcgd2luZG93J3MgbG9jYXRpb24g
aXMgcmVsYXRpdmUgdG8gaXRzIGN1cnJlbnQgc2NyZWVuLCBzbyBzaGlmdAorICAgIC8vIGl0IGlu
IGNhc2UgaXQncyBvbiBhIHNlY29uZGFyeSBtb25pdG9yLiBTZWUgaHR0cDovL2Ivdmlld0lzc3Vl
P2lkPTk2NzkwNS4KKyAgICB3aW5kb3dSZWN0Lm1vdmUoc2NyZWVuUmVjdC54KCksIHNjcmVlblJl
Y3QueSgpKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3c6OmFkanVzdFdpbmRvd1JlY3Qoc2NyZWVu
UmVjdCwgd2luZG93UmVjdCwgd2luZG93UmVjdCk7CisKKyAgICB3aW5kb3dGZWF0dXJlcy54ID0g
d2luZG93UmVjdC54KCk7CisgICAgd2luZG93RmVhdHVyZXMueSA9IHdpbmRvd1JlY3QueSgpOwor
ICAgIHdpbmRvd0ZlYXR1cmVzLmhlaWdodCA9IHdpbmRvd1JlY3QuaGVpZ2h0KCk7CisgICAgd2lu
ZG93RmVhdHVyZXMud2lkdGggPSB3aW5kb3dSZWN0LndpZHRoKCk7CisKKyAgICAvLyBJZiBlaXRo
ZXIgb2YgdGhlIG9yaWdpbiBjb29yZGluYXRlcyBvciBkaW1lbnNpb25zIHdlcmVuJ3Qgc2V0Cisg
ICAgLy8gaW4gdGhlIG9yaWdpbmFsIHN0cmluZywgbWFrZSBzdXJlIHRoZXkgYXJlbid0IHNldCBu
b3cuCisgICAgaWYgKCFyYXdGZWF0dXJlcy54U2V0KSB7CisgICAgICAgIHdpbmRvd0ZlYXR1cmVz
LnggPSAwOworICAgICAgICB3aW5kb3dGZWF0dXJlcy54U2V0ID0gZmFsc2U7CisgICAgfQorICAg
IGlmICghcmF3RmVhdHVyZXMueVNldCkgeworICAgICAgICB3aW5kb3dGZWF0dXJlcy55ID0gMDsK
KyAgICAgICAgd2luZG93RmVhdHVyZXMueVNldCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoIXJh
d0ZlYXR1cmVzLndpZHRoU2V0KSB7CisgICAgICB3aW5kb3dGZWF0dXJlcy53aWR0aCA9IDA7Cisg
ICAgICB3aW5kb3dGZWF0dXJlcy53aWR0aFNldCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoIXJh
d0ZlYXR1cmVzLmhlaWdodFNldCkgeworICAgICAgd2luZG93RmVhdHVyZXMuaGVpZ2h0ID0gMDsK
KyAgICAgIHdpbmRvd0ZlYXR1cmVzLmhlaWdodFNldCA9IGZhbHNlOworICAgIH0KKworICAgIGZy
YW1lID0gY3JlYXRlV2luZG93KHN0YXRlLCBjYWxsaW5nRnJhbWUsIGVudGVyZWRGcmFtZSwgZnJh
bWUsIHVybFN0cmluZywgZnJhbWVOYW1lLCB3aW5kb3dGZWF0dXJlcywgQmluZGluZzo6ZW1wdHlT
Y3JpcHRWYWx1ZSgpKTsKKworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgcmV0dXJuIGZyYW1lLT5kb21XaW5kb3coKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIEJpbmRp
bmc+CitLVVJMIEJpbmRpbmdET01XaW5kb3c8QmluZGluZz46OmNvbXBsZXRlVVJMKFN0YXRlPEJp
bmRpbmc+KiBzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU3RyaW5nJiByZWxhdGl2ZVVSTCkKK3sKKyAgICAvLyBGb3IgaGlzdG9yaWNhbCBy
ZWFzb25zLCB3ZSBuZWVkIHRvIGNvbXBsZXRlIHRoZSBVUkwgdXNpbmcgdGhlCisgICAgLy8gZHlu
YW1pYyBmcmFtZS4KKyAgICBGcmFtZSogZnJhbWUgPSBzdGF0ZS0+Z2V0Rmlyc3RGcmFtZSgpOwor
ICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBLVVJMKCk7CisgICAgcmV0dXJuIGZyYW1l
LT5sb2FkZXIoKS0+Y29tcGxldGVVUkwocmVsYXRpdmVVUkwpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBCaW5kaW5nRE9NV2luZG93X2gKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9CaW5kaW5nU2VjdXJpdHkuaCBiL1dlYkNvcmUvYmluZGlu
Z3MvZ2VuZXJpYy9CaW5kaW5nU2VjdXJpdHkuaAppbmRleCBkN2M5ZGZlMjJkMTJmMWJmOTMwNWFj
ODRiNzEzMmRmN2Q5MzYzZWE2Li4zYWM1ODFiZjg5YzJhN2I4OTMwY2JiOTBmY2RiNDU3MzA4ZTg3
NGQzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvQmluZGluZ1NlY3VyaXR5
LmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0JpbmRpbmdTZWN1cml0eS5oCkBAIC0z
NCwxNCArMzQsMTUgQEAKICNpbmNsdWRlICJCaW5kaW5nU2VjdXJpdHlCYXNlLmgiCiAjaW5jbHVk
ZSAiQ1NTSGVscGVyLmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgi
CiAjaW5jbHVkZSAiR2VuZXJpY0JpbmRpbmcuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVFbGVtZW50
QmFzZS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRE9NV2luZG93OwotY2xhc3MgRnJhbWU7CiBj
bGFzcyBOb2RlOwogCiAvLyBTZWN1cml0eSBmdW5jdGlvbnMgc2hhcmVkIGJ5IHZhcmlvdXMgbGFu
Z3VhZ2UgYmluZGluZ3MuCkBAIC01NSw5ICs1NiwxMiBAQCBwdWJsaWM6CiAgICAgLy8gY3VycmVu
dCBzZWN1cml0eSBjb250ZXh0LgogICAgIHN0YXRpYyBib29sIGNoZWNrTm9kZVNlY3VyaXR5KFN0
YXRlPEJpbmRpbmc+KiwgTm9kZSogdGFyZ2V0KTsKIAorICAgIHN0YXRpYyBib29sIGFsbG93UG9w
VXAoU3RhdGU8QmluZGluZz4qKTsKICAgICBzdGF0aWMgYm9vbCBhbGxvd1NldHRpbmdGcmFtZVNy
Y1RvSmF2YXNjcmlwdFVybChTdGF0ZTxCaW5kaW5nPiosIEhUTUxGcmFtZUVsZW1lbnRCYXNlKiwg
U3RyaW5nIHZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBhbGxvd1NldHRpbmdTcmNUb0phdmFzY3Jp
cHRVUkwoU3RhdGU8QmluZGluZz4qLCBFbGVtZW50KiwgU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1
ZSk7CiAKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRBbGxvd05hdmlnYXRpb24oU3RhdGU8QmluZGlu
Zz4qLCBGcmFtZSopOworCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEJpbmRpbmdTZWN1cml0eSgp
IHt9CiAgICAgfkJpbmRpbmdTZWN1cml0eSgpOwpAQCAtMTEwLDYgKzExNCwxOCBAQCBib29sIEJp
bmRpbmdTZWN1cml0eTxCaW5kaW5nPjo6Y2hlY2tOb2RlU2VjdXJpdHkoU3RhdGU8QmluZGluZz4q
IHN0YXRlLCBOb2RlKiBubwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgQmluZGluZz4KK2Jvb2wgQmlu
ZGluZ1NlY3VyaXR5PEJpbmRpbmc+OjphbGxvd1BvcFVwKFN0YXRlPEJpbmRpbmc+KiBzdGF0ZSkK
K3sKKyAgICBpZiAoc3RhdGUtPnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIEZyYW1lKiBmcmFtZSA9IHN0YXRlLT5nZXRGaXJzdEZyYW1lKCk7Cisg
ICAgQVNTRVJUKGZyYW1lKTsKKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBmcmFtZS0+c2V0dGlu
Z3MoKTsKKyAgICByZXR1cm4gc2V0dGluZ3MgJiYgc2V0dGluZ3MtPmphdmFTY3JpcHRDYW5PcGVu
V2luZG93c0F1dG9tYXRpY2FsbHkoKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIEJpbmRpbmc+CiBi
b29sIEJpbmRpbmdTZWN1cml0eTxCaW5kaW5nPjo6YWxsb3dTZXR0aW5nRnJhbWVTcmNUb0phdmFz
Y3JpcHRVcmwoU3RhdGU8QmluZGluZz4qIHN0YXRlLCBIVE1MRnJhbWVFbGVtZW50QmFzZSogZnJh
bWUsIFN0cmluZyB2YWx1ZSkKIHsKICAgICBpZiAocHJvdG9jb2xJc0phdmFTY3JpcHQoZGVwcmVj
YXRlZFBhcnNlVVJMKHZhbHVlKSkpIHsKQEAgLTEyOCw2ICsxNDQsMTMgQEAgYm9vbCBCaW5kaW5n
U2VjdXJpdHk8QmluZGluZz46OmFsbG93U2V0dGluZ1NyY1RvSmF2YXNjcmlwdFVSTChTdGF0ZTxC
aW5kaW5nPiogc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordGVtcGxhdGUgPGNsYXNzIEJpbmRp
bmc+Citib29sIEJpbmRpbmdTZWN1cml0eTxCaW5kaW5nPjo6c2hvdWxkQWxsb3dOYXZpZ2F0aW9u
KFN0YXRlPEJpbmRpbmc+KiBzdGF0ZSwgRnJhbWUqIGZyYW1lKQoreworICAgIEZyYW1lKiBjYWxs
aW5nRnJhbWUgPSBzdGF0ZS0+Z2V0QWN0aXZlRnJhbWUoKTsKKyAgICByZXR1cm4gY2FsbGluZ0Zy
YW1lICYmIGNhbGxpbmdGcmFtZS0+bG9hZGVyKCktPnNob3VsZEFsbG93TmF2aWdhdGlvbihmcmFt
ZSk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEJpbmRpbmdTZWN1cml0eV9oCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJp
bmRpbmcuaAppbmRleCBhMTVlY2UxMjQ5MjRmYjM3YjEyOGZhNjNkNjVjZWFjNThlOGFlNDRhLi44
MzgzZjk0ZjFlY2U1ODEzMmViNDg2ZGU1NDE3MDcyZTM3NjlhNWYzIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhC
aW5kaW5nLmgKQEAgLTEsMTAgKzEsMTAgQEAKIC8qCiAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKiAKKyoKICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKICogbWV0OgotKiAKKyoKICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCkBA
IC0xNCw3ICsxNCw3IEBACiAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSogCisqCiAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVk
ZSA8djguaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAorCiAgICAgY2xhc3MgRXZlbnRM
aXN0ZW5lcjsKICAgICBjbGFzcyBFdmVudFRhcmdldDsKICAgICBjbGFzcyBWOEJpbmRpbmdET01X
aW5kb3c7CkBAIC01MCw2ICs1MCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6
CiAgICAgICAgIHR5cGVkZWYgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFZhbHVlOwogICAgICAgICB0
eXBlZGVmIFY4QmluZGluZ0RPTVdpbmRvdyBET01XaW5kb3c7CisKKyAgICAgICAgc3RhdGljIFZh
bHVlIGVtcHR5U2NyaXB0VmFsdWUoKSB7IHJldHVybiB2ODo6TG9jYWw8djg6OlZhbHVlPigpOyB9
CiAgICAgfTsKICAgICB0eXBlZGVmIEJpbmRpbmdTZWN1cml0eTxWOEJpbmRpbmc+IFY4QmluZGlu
Z1NlY3VyaXR5OwogICAgIApAQCAtMTUyLDcgKzE1NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICB7CiAgICAgICAgIHJldHVybiB2OFZhbHVlVG9XZWJDb3JlU3RyaW5nKG9iamVjdCk7CiAg
ICAgfQotICAgIAorCiAgICAgU3RyaW5nIHRvV2ViQ29yZVN0cmluZyhjb25zdCB2ODo6QXJndW1l
bnRzJiwgaW50IGluZGV4KTsKIAogICAgIC8vIFRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdGhpcyBm
dW5jdGlvbiBpcyBzdGlsbCBvd25lZCBieSB0aGUgYXJndW1lbnQKQEAgLTE3MSw3ICsxNzMsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgQXRvbWljU3RyaW5nIHRvQXRvbWljV2ViQ29yZVN0
cmluZ1dpdGhOdWxsQ2hlY2sodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKTsKIAogICAgIFN0
cmluZyB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2sodjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHZhbHVlKTsKLSAKKwogICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gdjhVbmRl
dGVjdGFibGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIpOwogCiAgICAgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHY4U3RyaW5nT3JOdWxsKGNvbnN0IFN0cmluZyYgc3RyKTsKQEAgLTE4MywzMSArMTg1
LDMxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBkb3VibGUgdG9XZWJDb3JlRGF0ZSh2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0KTsKIAogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2
OERhdGVPck51bGwoZG91YmxlIHZhbHVlKTsKLSAgICAKKwogICAgIHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiBjcmVhdGVSYXdUZW1wbGF0ZSgpOwogCiAgICAgc3RydWN0IEJh
dGNoZWRBdHRyaWJ1dGU7CiAgICAgc3RydWN0IEJhdGNoZWRDYWxsYmFjazsKLSAgICAKKwogICAg
IHY4OjpMb2NhbDx2ODo6U2lnbmF0dXJlPiBjb25maWd1cmVUZW1wbGF0ZSh2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiBwYXJlbnRDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGZpZWxkQ291bnQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhdGNoZWRBdHRyaWJ1dGUqLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmF0Y2hlZEF0
dHJpYnV0ZSosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBhdHRyaWJ1dGVDb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgQmF0Y2hlZENhbGxiYWNrKiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNhbGxiYWNrQ291bnQpOwotICAg
IAorCiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldEVsZW1lbnRTdHJpbmdBdHRyKGNvbnN0
IHY4OjpBY2Nlc3NvckluZm8mLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdm9pZCBzZXRFbGVtZW50U3Ry
aW5nQXR0cihjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4pOwogCi0gICAgCisKICAgICB2ODo6UGVyc2lzdGVudDx2
ODo6U3RyaW5nPiBnZXRUb1N0cmluZ05hbWUoKTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gZ2V0VG9TdHJpbmdUZW1wbGF0ZSgpOwotICAgIAorCiAgICAgLy8gVjhQ
YXJhbWV0ZXIgaXMgYW4gYWRhcHRlciBjbGFzcyB0aGF0IGNvbnZlcnRzIFY4IHZhbHVlcyB0byBT
dHJpbmdzCiAgICAgLy8gb3IgQXRvbWljU3RyaW5ncyBhcyBhcHByb3ByaWF0ZSwgdXNpbmcgbXVs
dGlwbGUgdHlwZWNhc3Qgb3BlcmF0b3JzLgogICAgIGVudW0gVjhQYXJhbWV0ZXJNb2RlIHsKQEAg
LTIyNCw3ICsyMjYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAgICAg
ICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gbV92OE9iamVjdDsKICAgICB9OwotICAgIAorCiAgICAg
dGVtcGxhdGU8PiBpbmxpbmUgVjhQYXJhbWV0ZXI8RGVmYXVsdE1vZGU+OjpvcGVyYXRvciBTdHJp
bmcoKSB7IHJldHVybiB0b1dlYkNvcmVTdHJpbmcobV92OE9iamVjdCk7IH0KICAgICB0ZW1wbGF0
ZTw+IGlubGluZSBWOFBhcmFtZXRlcjxXaXRoTnVsbENoZWNrPjo6b3BlcmF0b3IgU3RyaW5nKCkg
eyByZXR1cm4gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhtX3Y4T2JqZWN0KTsgfQogICAg
IHRlbXBsYXRlPD4gaW5saW5lIFY4UGFyYW1ldGVyPFdpdGhVbmRlZmluZWRPck51bGxDaGVjaz46
Om9wZXJhdG9yIFN0cmluZygpIHsgcmV0dXJuIHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsT3JVbmRl
ZmluZWRDaGVjayhtX3Y4T2JqZWN0KTsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOFV0aWxpdGllcy5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmNwcApp
bmRleCBmZmNjYjA2ZmNmNGQxNDJhY2JlODA4YWY4YWFiMTg4NzZlMDlmMzI2Li43MzcxMmMyNTFm
MmZkYjBhNzA1ZDMwMTc2Yjc5NmU4YmVmZjUyYjlhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4VXRpbGl0aWVzLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VXRpbGl0
aWVzLmNwcApAQCAtMzgsNiArMzgsOCBAQAogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgor
I2luY2x1ZGUgIlY4QmluZGluZ0RPTVdpbmRvdy5oIiAvLyBGSVhNRTogcmVtb3ZlIHdoZW4gY29t
cGxldGVVUkwgbW92ZXMKKyNpbmNsdWRlICJWOEJpbmRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIlY4
UHJveHkuaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5LmgiCkBAIC05MiwyNyArOTQsMjAgQEAgdm9pZCB0cmFuc2Zlckhp
ZGRlbkRlcGVuZGVuY3kodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QsCiAgICAgaWYgKCFu
ZXdWYWx1ZS0+SXNOdWxsKCkgJiYgIW5ld1ZhbHVlLT5Jc1VuZGVmaW5lZCgpKQogICAgICAgICBj
cmVhdGVIaWRkZW5EZXBlbmRlbmN5KG9iamVjdCwgbmV3VmFsdWUsIGNhY2hlSW5kZXgpOwogfQot
ICAgIAogCiBib29sIHByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpCiB7Ci0gICAgRnJhbWUqIGZyYW1l
ID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckVudGVyZWRDb250ZXh0KCk7Ci0gICAgcmV0dXJu
IGZyYW1lICYmIGZyYW1lLT5zY3JpcHQoKS0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7CisgICAg
cmV0dXJuIFY4QmluZGluZ1N0YXRlOjpPbmx5KCktPnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOwog
fQogCiBib29sIHNob3VsZEFsbG93TmF2aWdhdGlvbihGcmFtZSogZnJhbWUpCiB7Ci0gICAgRnJh
bWUqIGNhbGxpbmdGcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JDYWxsaW5nQ29udGV4
dCgpOwotICAgIHJldHVybiBjYWxsaW5nRnJhbWUgJiYgY2FsbGluZ0ZyYW1lLT5sb2FkZXIoKS0+
c2hvdWxkQWxsb3dOYXZpZ2F0aW9uKGZyYW1lKTsKKyAgICByZXR1cm4gVjhCaW5kaW5nU2VjdXJp
dHk6OnNob3VsZEFsbG93TmF2aWdhdGlvbihWOEJpbmRpbmdTdGF0ZTo6T25seSgpLCBmcmFtZSk7
CiB9CiAKIEtVUkwgY29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiByZWxhdGl2ZVVSTCkKIHsKLSAg
ICAvLyBGb3IgaGlzdG9pY2FsIHJlYXNvbnMsIHdlIG5lZWQgdG8gY29tcGxldGUgdGhlIFVSTCB1
c2luZyB0aGUgZHluYW1pYyBmcmFtZS4KLSAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRy
aWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICBy
ZXR1cm4gS1VSTCgpOwotICAgIHJldHVybiBmcmFtZS0+bG9hZGVyKCktPmNvbXBsZXRlVVJMKHJl
bGF0aXZlVVJMKTsKKyAgICByZXR1cm4gVjhCaW5kaW5nRE9NV2luZG93Ojpjb21wbGV0ZVVSTChW
OEJpbmRpbmdTdGF0ZTo6T25seSgpLCByZWxhdGl2ZVVSTCk7CiB9CiAKIHZvaWQgbmF2aWdhdGVJ
ZkFsbG93ZWQoRnJhbWUqIGZyYW1lLCBjb25zdCBLVVJMJiB1cmwsIGJvb2wgbG9ja0hpc3Rvcnks
IGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4QXJyYXlCdWZmZXJDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhBcnJheUJ1ZmZlckN1c3RvbS5jcHAKaW5kZXggNTAxZTVhMmRlM2VhODc3OGI2MjBl
MTllOTU3YjU0YTg5MWIzNzZjZS4uMzA1ZmIxODU4ZTljNjAyMDFmYmQwN2Y1ZDVlYTI5MGYzOGIx
NDg2NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhBcnJheUJ1ZmZl
ckN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhBcnJheUJ1ZmZl
ckN1c3RvbS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgi
CiAKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAj
aW5jbHVkZSAiVjhBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcCBiL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAppbmRleCBlODdk
ZjUxYWU5MzBkNDBmNjQ0ZjQwOTE3OGRmZDBhNjE5YTFkNzQ0Li4zYTFhNWUyNDBjMjRiN2ZhMGMy
NzA1YzJlOGQ1ZWYxYTJjNzc3NDY4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhET01XaW5kb3dDdXN0b20uY3BwCkBAIC04MSwxMCArODEsNiBAQAogI2VuZGlmCiAjaW5j
bHVkZSAiV2luZG93RmVhdHVyZXMuaCIKIAotLy8gSG9yaXpvbnRhbCBhbmQgdmVydGljYWwgb2Zm
c2V0LCBmcm9tIHRoZSBwYXJlbnQgY29udGVudCBhcmVhLCBhcm91bmQgbmV3bHkKLS8vIG9wZW5l
ZCBwb3B1cHMgdGhhdCBkb24ndCBzcGVjaWZ5IGEgbG9jYXRpb24uCi1zdGF0aWMgY29uc3QgaW50
IHBvcHVwVGlsZVBpeGVscyA9IDEwOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBXaW5kb3dTZXRUaW1lb3V0SW1wbChjb25zdCB2ODo6QXJndW1lbnRzJiBh
cmdzLCBib29sIHNpbmdsZVNob3QpCkBAIC00NDgsMTcgKzQ0NCw2IEBAIHN0YXRpYyBib29sIGNh
blNob3dNb2RhbERpYWxvZ05vdyhjb25zdCBGcmFtZSogZnJhbWUpCiAgICAgcmV0dXJuIGZyYW1l
LT5wYWdlKCktPmNocm9tZSgpLT5jYW5SdW5Nb2RhbE5vdygpOwogfQogCi1zdGF0aWMgYm9vbCBh
bGxvd1BvcFVwKCkKLXsKLSAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1l
Rm9yRW50ZXJlZENvbnRleHQoKTsKLQotICAgIEFTU0VSVChmcmFtZSk7Ci0gICAgaWYgKGZyYW1l
LT5zY3JpcHQoKS0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGZyYW1lLT5zZXR0aW5ncygpOwotICAgIHJldHVy
biBzZXR0aW5ncyAmJiBzZXR0aW5ncy0+amF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGlj
YWxseSgpOwotfQotCiBzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyc2VNb2RhbERp
YWxvZ0ZlYXR1cmVzKGNvbnN0IFN0cmluZyYgZmVhdHVyZXNBcmcpCiB7CiAgICAgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz4gbWFwOwpAQCAtNTEyLDcgKzQ5Nyw3IEBAIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBWOERPTVdpbmRvdzo6c2hvd01vZGFsRGlhbG9nQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYKICAgICBpZiAoIWVudGVyZWRGcmFtZSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTsKIAotICAgIGlmICghY2FuU2hvd01vZGFsRGlhbG9nTm93KGZyYW1lKSB8fCAhYWxsb3dQ
b3BVcCgpKQorICAgIGlmICghY2FuU2hvd01vZGFsRGlhbG9nTm93KGZyYW1lKSB8fCAhVjhCaW5k
aW5nU2VjdXJpdHk6OmFsbG93UG9wVXAoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSkpCiAgICAgICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKICAgICBjb25zdCBIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPiBmZWF0dXJlcyA9IHBhcnNlTW9kYWxEaWFsb2dGZWF0dXJlcyhmZWF0dXJlQXJncyk7CkBA
IC01ODMsMTM0ICs1NjgsMTYgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV2luZG93Ojpv
cGVuQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMo
IkRPTS5ET01XaW5kb3cub3BlbigpIik7CiAKKyAgICBET01XaW5kb3cqIHBhcmVudCA9IFY4RE9N
V2luZG93Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICBTdHJpbmcgdXJsU3RyaW5nID0g
dG9XZWJDb3JlU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKGFyZ3NbMF0pOwogICAgIEF0
b21pY1N0cmluZyBmcmFtZU5hbWUgPSAoYXJnc1sxXS0+SXNVbmRlZmluZWQoKSB8fCBhcmdzWzFd
LT5Jc051bGwoKSkgPyAiX2JsYW5rIiA6IEF0b21pY1N0cmluZyh0b1dlYkNvcmVTdHJpbmcoYXJn
c1sxXSkpOwotCi0gICAgRE9NV2luZG93KiBwYXJlbnQgPSBWOERPTVdpbmRvdzo6dG9OYXRpdmUo
YXJncy5Ib2xkZXIoKSk7Ci0gICAgRnJhbWUqIGZyYW1lID0gcGFyZW50LT5mcmFtZSgpOwotCi0g
ICAgaWYgKCFWOEJpbmRpbmdTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6
Ok9ubHkoKSwgZnJhbWUsIHRydWUpKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwot
Ci0gICAgRnJhbWUqIGVudGVyZWRGcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JFbnRl
cmVkQ29udGV4dCgpOwotICAgIGlmICghZW50ZXJlZEZyYW1lKQotICAgICAgICByZXR1cm4gdjg6
OlVuZGVmaW5lZCgpOwotCi0gICAgRnJhbWUqIGNhbGxpbmdGcmFtZSA9IFY4UHJveHk6OnJldHJp
ZXZlRnJhbWVGb3JDYWxsaW5nQ29udGV4dCgpOwotICAgIC8vIFdlIG1heSBub3QgaGF2ZSBhIGNh
bGxpbmcgY29udGV4dCBpZiB3ZSBhcmUgaW52b2tlZCBieSBhIHBsdWdpbiB2aWEgTlBBUEkuCi0g
ICAgaWYgKCFjYWxsaW5nRnJhbWUpCi0gICAgICAgIGNhbGxpbmdGcmFtZSA9IGVudGVyZWRGcmFt
ZTsKLQotICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAg
ICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIC8vIEJlY2F1c2UgRnJhbWVUcmVl
OjpmaW5kKCkgcmV0dXJucyB0cnVlIGZvciBlbXB0eSBzdHJpbmdzLCB3ZSBtdXN0IGNoZWNrCi0g
ICAgLy8gZm9yIGVtcHR5IGZyYW1lbmFtZXMuIE90aGVyd2lzZSwgaWxsZWdpdGltYXRlIHdpbmRv
dy5vcGVuKCkgY2FsbHMgd2l0aAotICAgIC8vIG5vIG5hbWUgd2lsbCBwYXNzIHJpZ2h0IHRocm91
Z2ggdGhlIHBvcHVwIGJsb2NrZXIuCi0gICAgaWYgKCFhbGxvd1BvcFVwKCkgJiYKLSAgICAgICAg
KGZyYW1lTmFtZS5pc0VtcHR5KCkgfHwgIWZyYW1lLT50cmVlKCktPmZpbmQoZnJhbWVOYW1lKSkp
IHsKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAgICAvLyBHZXQg
dGhlIHRhcmdldCBmcmFtZSBmb3IgdGhlIHNwZWNpYWwgY2FzZXMgb2YgX3RvcCBhbmQgX3BhcmVu
dC4gIEluIHRob3NlCi0gICAgLy8gY2FzZXMsIHdlIGNhbiBzY2hlZHVsZSBhIGxvY2F0aW9uIGNo
YW5nZSByaWdodCBub3cgYW5kIHJldHVybiBlYXJseS4KLSAgICBib29sIHRvcE9yUGFyZW50ID0g
ZmFsc2U7Ci0gICAgaWYgKGZyYW1lTmFtZSA9PSAiX3RvcCIpIHsKLSAgICAgICAgZnJhbWUgPSBm
cmFtZS0+dHJlZSgpLT50b3AoKTsKLSAgICAgICAgdG9wT3JQYXJlbnQgPSB0cnVlOwotICAgIH0g
ZWxzZSBpZiAoZnJhbWVOYW1lID09ICJfcGFyZW50IikgewotICAgICAgICBpZiAoRnJhbWUqIHBh
cmVudCA9IGZyYW1lLT50cmVlKCktPnBhcmVudCgpKQotICAgICAgICAgICAgZnJhbWUgPSBwYXJl
bnQ7Ci0gICAgICAgIHRvcE9yUGFyZW50ID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKHRvcE9yUGFy
ZW50KSB7Ci0gICAgICAgIGlmICghc2hvdWxkQWxsb3dOYXZpZ2F0aW9uKGZyYW1lKSkKLSAgICAg
ICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgU3RyaW5nIGNvbXBsZXRl
ZFVybDsKLSAgICAgICAgaWYgKCF1cmxTdHJpbmcuaXNFbXB0eSgpKQotICAgICAgICAgICAgY29t
cGxldGVkVXJsID0gY29tcGxldGVVUkwodXJsU3RyaW5nKTsKLQotICAgICAgICBpZiAoIWNvbXBs
ZXRlZFVybC5pc0VtcHR5KCkgJiYKLSAgICAgICAgICAgICghcHJvdG9jb2xJc0phdmFTY3JpcHQo
Y29tcGxldGVkVXJsKSB8fCBTY3JpcHRDb250cm9sbGVyOjppc1NhZmVTY3JpcHQoZnJhbWUpKSkg
ewotICAgICAgICAgICAgYm9vbCB1c2VyR2VzdHVyZSA9IHByb2Nlc3NpbmdVc2VyR2VzdHVyZSgp
OwotCi0gICAgICAgICAgICAvLyBGb3Igd2hhdGV2ZXIgcmVhc29uLCBGaXJlZm94IHVzZXMgdGhl
IGVudGVyZWQgZnJhbWUgdG8gZGV0ZXJtaW5lCi0gICAgICAgICAgICAvLyB0aGUgb3V0Z29pbmdS
ZWZlcnJlci4gIFdlIHJlcGxpY2F0ZSB0aGF0IGJlaGF2aW9yIGhlcmUuCi0gICAgICAgICAgICBT
dHJpbmcgcmVmZXJyZXIgPSBlbnRlcmVkRnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVy
KCk7Ci0KLSAgICAgICAgICAgIGZyYW1lLT5yZWRpcmVjdFNjaGVkdWxlcigpLT5zY2hlZHVsZUxv
Y2F0aW9uQ2hhbmdlKGNvbXBsZXRlZFVybCwgcmVmZXJyZXIsIGZhbHNlLCBmYWxzZSwgdXNlckdl
c3R1cmUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1Y4KGZyYW1lLT5kb21XaW5kb3co
KSk7Ci0gICAgfQotCi0gICAgLy8gSW4gdGhlIGNhc2Ugb2YgYSBuYW1lZCBmcmFtZSBvciBhIG5l
dyB3aW5kb3csIHdlJ2xsIHVzZSB0aGUKLSAgICAvLyBjcmVhdGVXaW5kb3coKSBoZWxwZXIuCi0K
LSAgICAvLyBQYXJzZSB0aGUgdmFsdWVzLCBhbmQgdGhlbiB3b3JrIHdpdGggYSBjb3B5IG9mIHRo
ZSBwYXJzZWQgdmFsdWVzCi0gICAgLy8gc28gd2UgY2FuIHJlc3RvcmUgdGhlIHZhbHVlcyB3ZSBt
YXkgbm90IHdhbnQgdG8gb3ZlcndyaXRlIGFmdGVyCi0gICAgLy8gd2UgZG8gdGhlIG11bHRpcGxl
IG1vbml0b3IgZml4ZXMuCiAgICAgV2luZG93RmVhdHVyZXMgcmF3RmVhdHVyZXModG9XZWJDb3Jl
U3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKGFyZ3NbMl0pKTsKLSAgICBXaW5kb3dGZWF0
dXJlcyB3aW5kb3dGZWF0dXJlcyhyYXdGZWF0dXJlcyk7Ci0gICAgRmxvYXRSZWN0IHNjcmVlblJl
Y3QgPSBzY3JlZW5BdmFpbGFibGVSZWN0KHBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkpOwotCi0g
ICAgLy8gU2V0IGRlZmF1bHQgc2l6ZSBhbmQgbG9jYXRpb24gbmVhciBwYXJlbnQgd2luZG93IGlm
IG5vbmUgd2VyZSBzcGVjaWZpZWQuCi0gICAgLy8gVGhlc2UgbWF5IGJlIGZ1cnRoZXIgbW9kaWZp
ZWQgYnkgYWRqdXN0V2luZG93UmVjdCwgYmVsb3cuCi0gICAgaWYgKCF3aW5kb3dGZWF0dXJlcy54
U2V0KSB7Ci0gICAgICAgIHdpbmRvd0ZlYXR1cmVzLnggPSBwYXJlbnQtPnNjcmVlblgoKSAtIHNj
cmVlblJlY3QueCgpICsgcG9wdXBUaWxlUGl4ZWxzOwotICAgICAgICB3aW5kb3dGZWF0dXJlcy54
U2V0ID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKCF3aW5kb3dGZWF0dXJlcy55U2V0KSB7Ci0gICAg
ICAgIHdpbmRvd0ZlYXR1cmVzLnkgPSBwYXJlbnQtPnNjcmVlblkoKSAtIHNjcmVlblJlY3QueSgp
ICsgcG9wdXBUaWxlUGl4ZWxzOwotICAgICAgICB3aW5kb3dGZWF0dXJlcy55U2V0ID0gdHJ1ZTsK
LSAgICB9Ci0gICAgaWYgKCF3aW5kb3dGZWF0dXJlcy53aWR0aFNldCkgewotICAgICAgICB3aW5k
b3dGZWF0dXJlcy53aWR0aCA9IHBhcmVudC0+aW5uZXJXaWR0aCgpOwotICAgICAgICB3aW5kb3dG
ZWF0dXJlcy53aWR0aFNldCA9IHRydWU7Ci0gICAgfQotICAgIGlmICghd2luZG93RmVhdHVyZXMu
aGVpZ2h0U2V0KSB7Ci0gICAgICAgIHdpbmRvd0ZlYXR1cmVzLmhlaWdodCA9IHBhcmVudC0+aW5u
ZXJIZWlnaHQoKTsKLSAgICAgICAgd2luZG93RmVhdHVyZXMuaGVpZ2h0U2V0ID0gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBGbG9hdFJlY3Qgd2luZG93UmVjdCh3aW5kb3dGZWF0dXJlcy54LCB3aW5kb3dG
ZWF0dXJlcy55LCB3aW5kb3dGZWF0dXJlcy53aWR0aCwgd2luZG93RmVhdHVyZXMuaGVpZ2h0KTsK
LQotICAgIC8vIFRoZSBuZXcgd2luZG93J3MgbG9jYXRpb24gaXMgcmVsYXRpdmUgdG8gaXRzIGN1
cnJlbnQgc2NyZWVuLCBzbyBzaGlmdAotICAgIC8vIGl0IGluIGNhc2UgaXQncyBvbiBhIHNlY29u
ZGFyeSBtb25pdG9yLiBTZWUgaHR0cDovL2Ivdmlld0lzc3VlP2lkPTk2NzkwNS4KLSAgICB3aW5k
b3dSZWN0Lm1vdmUoc2NyZWVuUmVjdC54KCksIHNjcmVlblJlY3QueSgpKTsKLSAgICBXZWJDb3Jl
OjpET01XaW5kb3c6OmFkanVzdFdpbmRvd1JlY3Qoc2NyZWVuUmVjdCwgd2luZG93UmVjdCwgd2lu
ZG93UmVjdCk7Ci0KLSAgICB3aW5kb3dGZWF0dXJlcy54ID0gd2luZG93UmVjdC54KCk7Ci0gICAg
d2luZG93RmVhdHVyZXMueSA9IHdpbmRvd1JlY3QueSgpOwotICAgIHdpbmRvd0ZlYXR1cmVzLmhl
aWdodCA9IHdpbmRvd1JlY3QuaGVpZ2h0KCk7Ci0gICAgd2luZG93RmVhdHVyZXMud2lkdGggPSB3
aW5kb3dSZWN0LndpZHRoKCk7Ci0KLSAgICAvLyBJZiBlaXRoZXIgb2YgdGhlIG9yaWdpbiBjb29y
ZGluYXRlcyBvciBkaW1lbnNpb25zIHdlcmVuJ3Qgc2V0IGluIHRoZSBvcmlnaW5hbAotICAgIC8v
IHN0cmluZywgbWFrZSBzdXJlIHRoZXkgYXJlbid0IHNldCBub3cuCi0gICAgaWYgKCFyYXdGZWF0
dXJlcy54U2V0KSB7Ci0gICAgICAgIHdpbmRvd0ZlYXR1cmVzLnggPSAwOwotICAgICAgICB3aW5k
b3dGZWF0dXJlcy54U2V0ID0gZmFsc2U7Ci0gICAgfQotICAgIGlmICghcmF3RmVhdHVyZXMueVNl
dCkgewotICAgICAgICB3aW5kb3dGZWF0dXJlcy55ID0gMDsKLSAgICAgICAgd2luZG93RmVhdHVy
ZXMueVNldCA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAoIXJhd0ZlYXR1cmVzLndpZHRoU2V0KSB7
Ci0gICAgICB3aW5kb3dGZWF0dXJlcy53aWR0aCA9IDA7Ci0gICAgICB3aW5kb3dGZWF0dXJlcy53
aWR0aFNldCA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAoIXJhd0ZlYXR1cmVzLmhlaWdodFNldCkg
ewotICAgICAgd2luZG93RmVhdHVyZXMuaGVpZ2h0ID0gMDsKLSAgICAgIHdpbmRvd0ZlYXR1cmVz
LmhlaWdodFNldCA9IGZhbHNlOwotICAgIH0KLQotICAgIGZyYW1lID0gVjhCaW5kaW5nRE9NV2lu
ZG93OjpjcmVhdGVXaW5kb3coVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgY2FsbGluZ0ZyYW1lLCBl
bnRlcmVkRnJhbWUsIGZyYW1lLCB1cmxTdHJpbmcsIGZyYW1lTmFtZSwgd2luZG93RmVhdHVyZXMs
IHY4OjpMb2NhbDx2ODo6VmFsdWU+KCkpOworICAgIERPTVdpbmRvdyogY2hpbGQgPSBWOEJpbmRp
bmdET01XaW5kb3c6Om9wZW4oVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgcGFyZW50LCB1cmxTdHJp
bmcsIGZyYW1lTmFtZSwgcmF3RmVhdHVyZXMpOwogCi0gICAgaWYgKCFmcmFtZSkKKyAgICBpZiAo
IWNoaWxkKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCi0gICAgcmV0dXJuIHRv
VjgoZnJhbWUtPmRvbVdpbmRvdygpKTsKKyAgICByZXR1cm4gdG9WOChjaGlsZCk7CiB9CiAKIApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9zcGVjaWFsaXphdGlvbi9WOEJpbmRpbmdT
dGF0ZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L3NwZWNpYWxpemF0aW9uL1Y4QmluZGluZ1N0
YXRlLmNwcAppbmRleCA0NzEwMjcxZWZjOWRmYTlhZWU1OWFmZWIzMGU5MzI0NjI0ZmM5ZmU0Li44
OWU5YjE0YTEwYTU0YWE1YmJjODgwYWQ2ZmRiMmJhZmE4M2UzODc3IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L3NwZWNpYWxpemF0aW9uL1Y4QmluZGluZ1N0YXRlLmNwcAorKysgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L3NwZWNpYWxpemF0aW9uL1Y4QmluZGluZ1N0YXRlLmNwcApAQCAt
MSwxMCArMSwxMCBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CiAgKiBtZXQ6Ci0gKiAKKyAqCiAgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQpAQCAt
MTQsNyArMTQsNyBAQAogICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwogICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKKyAqCiAgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCiAgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAogICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCkBAIC0zMSw2ICszMSw4IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKIAorI2luY2x1
ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlY4
UHJveHkuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTUzLDkgKzU1LDI1
IEBAIERPTVdpbmRvdyogU3RhdGU8VjhCaW5kaW5nPjo6Z2V0QWN0aXZlV2luZG93KCkKICAgICBy
ZXR1cm4gVjhQcm94eTo6cmV0cmlldmVXaW5kb3coYWN0aXZlQ29udGV4dCk7CiB9CiAKK0ZyYW1l
KiBTdGF0ZTxWOEJpbmRpbmc+OjpnZXRBY3RpdmVGcmFtZSgpCit7CisgICAgcmV0dXJuIFY4UHJv
eHk6OnJldHJpZXZlRnJhbWVGb3JDdXJyZW50Q29udGV4dCgpOworfQorCitGcmFtZSogU3RhdGU8
VjhCaW5kaW5nPjo6Z2V0Rmlyc3RGcmFtZSgpCit7CisgICAgcmV0dXJuIFY4UHJveHk6OnJldHJp
ZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4dCgpOworfQorCiB2b2lkIFN0YXRlPFY4QmluZGluZz46
OmltbWVkaWF0ZWx5UmVwb3J0VW5zYWZlQWNjZXNzVG8oRnJhbWUqIHRhcmdldCkKIHsKICAgICBW
OFByb3h5OjpyZXBvcnRVbnNhZmVBY2Nlc3NUbyh0YXJnZXQsIFY4UHJveHk6OlJlcG9ydE5vdyk7
CiB9CiAKK2Jvb2wgU3RhdGU8VjhCaW5kaW5nPjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkKK3sK
KyAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRl
eHQoKTsKKyAgICByZXR1cm4gZnJhbWUgJiYgZnJhbWUtPnNjcmlwdCgpLT5wcm9jZXNzaW5nVXNl
ckdlc3R1cmUoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9zcGVjaWFsaXphdGlvbi9WOEJpbmRpbmdTdGF0ZS5oIGIvV2ViQ29y
ZS9iaW5kaW5ncy92OC9zcGVjaWFsaXphdGlvbi9WOEJpbmRpbmdTdGF0ZS5oCmluZGV4IGYzMDVj
MTQ1MTA1NzNlZDMwZDY3ZjVkZThiY2ZhOTAwNzcyOGQxZjYuLmJhYmEwYzYzYzA4OGZmNzE0ODU4
ZDRkMDZiOWRmZmNiYzA0MWE3MmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvdjgvc3Bl
Y2lhbGl6YXRpb24vVjhCaW5kaW5nU3RhdGUuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L3Nw
ZWNpYWxpemF0aW9uL1Y4QmluZGluZ1N0YXRlLmgKQEAgLTEsMTAgKzEsMTAgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAor
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogICogbWV0OgotICogCisgKgogICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKICAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KICAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKQEAgLTE0LDcgKzE0LDcgQEAKICAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCiAgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICogCisgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgpAQCAtMzYsNiArMzYsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K2NsYXNzIEZyYW1lOworCiAvLyBTaW5nbGV0b24gaW1wbGVtZW50YXRpb24gb2YgU3RhdGU8VjhC
aW5kaW5nPi4gIFVzZXMgVjgncyBnbG9iYWwgZGF0YQogLy8gc3RydWN0dXJlcyB0byByZXR1cm4g
aW5mb3JtYXRpb24gYWJvdXQgcmVsZXZhbnQgZXhlY3V0aW9uIHN0YXRlLgogdGVtcGxhdGUgPD4K
QEAgLTQ0LDExICs0NiwxOSBAQCBwdWJsaWM6CiAgICAgLy8gU2luZ2xldG9uCiAgICAgc3RhdGlj
IFN0YXRlKiBPbmx5KCk7CiAKKyAgICAvLyBSZXBvcnRzIGFuIGVycm9yIG1lc3NhZ2UgKHdpdGhv
dXQgZGVsYXkpIGlmIHRoZSBzZWN1cml0eSBjaGVjayBmYWlscy4KKyAgICBzdGF0aWMgdm9pZCBp
bW1lZGlhdGVseVJlcG9ydFVuc2FmZUFjY2Vzc1RvKEZyYW1lKik7CisKICAgICAvLyBUaGUgRE9N
V2luZG93IGNvcnJlc3BvbmRpbmcgdG8gdGhlICdjYWxsaW5nIGNvbnRleHQnIG9mIGV4ZWN1dGlv
bi4KICAgICBET01XaW5kb3cqIGdldEFjdGl2ZVdpbmRvdygpOwogCi0gICAgLy8gUmVwb3J0cyBh
biBlcnJvciBtZXNzYWdlICh3aXRob3V0IGRlbGF5KSBpZiB0aGUgc2VjdXJpdHkgY2hlY2sgZmFp
bHMuCi0gICAgc3RhdGljIHZvaWQgaW1tZWRpYXRlbHlSZXBvcnRVbnNhZmVBY2Nlc3NUbyhGcmFt
ZSopOworICAgIC8vIFRoZSBmcmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSAnY2FsbGluZyBjb250
ZXh0JyBvZiBleGVjdXRpb24uCisgICAgRnJhbWUqIGdldEFjdGl2ZUZyYW1lKCk7CisKKyAgICAv
LyBUaGUgZmlyc3QgZnJhbWUgaW4gd2hpY2ggZXhlY3V0aW9uIGVudGVyZWQgdXNlciBzY3JpcHQu
CisgICAgRnJhbWUqIGdldEZpcnN0RnJhbWUoKTsKKworICAgIGJvb2wgcHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKCk7CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgU3RhdGUoKSB7fQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63861</attachid>
            <date>2010-08-08 23:37:54 -0700</date>
            <delta_ts>2010-08-08 23:54:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-41392-20100809153752.patch</filename>
            <type>text/plain</type>
            <size>31514</size>
            <attacher name="Dominic Cooney">dominicc</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTEzNzI2MWZlZGM3OWE3NjMzMWMzMzcyZTNkODRkZjJlNmE2Nzc4Zi4uYjk1MjAyYjg3YWU4N2Yy
MzNjNjExOGIwZTg5ZDI0NDgwZjE5OTNkMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAxMC0wNy0wMSAgRG9t
aW5pYyBDb29uZXkgIDxkb21pbmljY0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmVzIHdpbmRvdy5vcGVuIGxvZ2ljIGludG8g
dGhlIGdlbmVyaWMgYmluZGluZ3MuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtb3ZlcyB3aW5kb3cu
b3BlbiBsb2dpYyBmcm9tIFY4IGludG8gdGhlIGdlbmVyaWMKKyAgICAgICAgYmluZGluZ3Mgc28g
aXQgY291bGQgYmUgc2hhcmVkIHdpdGggSlNDLiBKU0Mgc2hhcmluZyBpcyBub3QgaW4KKyAgICAg
ICAgdGhpcyBwYXRjaC4gVGhpcyBwYXRjaCBpcyBvZiB0aGUgc2FtZSBmbGF2b3IvaW50ZW50IGFz
CisgICAgICAgIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzMyMDE+
LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTM5
MgorCisgICAgICAgICogYmluZGluZ3MvZ2VuZXJpYy9CaW5kaW5nRE9NV2luZG93Lmg6CisgICAg
ICAgIChXZWJDb3JlOjo6OmNyZWF0ZVdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjo6Om9wZW4p
OgorICAgICAgICAoV2ViQ29yZTo6Ojpjb21wbGV0ZVVSTCk6CisgICAgICAgICogYmluZGluZ3Mv
Z2VuZXJpYy9CaW5kaW5nU2VjdXJpdHkuaDoKKyAgICAgICAgKFdlYkNvcmU6Ojo6YWxsb3dQb3BV
cCk6CisgICAgICAgIChXZWJDb3JlOjo6OnNob3VsZEFsbG93TmF2aWdhdGlvbik6CisgICAgICAg
ICogYmluZGluZ3MvdjgvVjhCaW5kaW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpWOEJpbmRpbmc6
OmVtcHR5U2NyaXB0VmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnRyYW5zZmVySGlkZGVuRGVwZW5kZW5jeSk6CisgICAgICAg
IChXZWJDb3JlOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6c2hv
dWxkQWxsb3dOYXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBsZXRlVVJMKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhBcnJheUJ1ZmZlckN1c3RvbS5jcHA6CisgICAg
ICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlY4RE9NV2luZG93OjpzaG93TW9kYWxEaWFsb2dDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpWOERPTVdpbmRvdzo6b3BlbkNhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9zcGVjaWFsaXphdGlvbi9WOEJpbmRpbmdTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojo6OmdldEFjdGl2ZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6Z2V0Rmlyc3RGcmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjo6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSk6CisgICAgICAgICog
YmluZGluZ3Mvdjgvc3BlY2lhbGl6YXRpb24vVjhCaW5kaW5nU3RhdGUuaDoKKyAgICAgICAgKFdl
YkNvcmU6Oik6CisKIDIwMTAtMDgtMDYgIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGd1c3Rhdm8u
bm9yb25oYUBjb2xsYWJvcmEuY28udWs+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFuIExvcGV6
LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0JpbmRpbmdET01XaW5kb3cu
aCBiL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9CaW5kaW5nRE9NV2luZG93LmgKaW5kZXggZjg4
M2QxMTAyMzVkN2QzMDY4YzFjYmU1ZjdhOTIwMWU0ZWFmODE1OC4uZGRhNTY0NDE5Mzg0OTYzY2Fk
MTYyM2FmODA0ODhlMDcwZjE1YThjYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9nZW5l
cmljL0JpbmRpbmdET01XaW5kb3cuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvQmlu
ZGluZ0RPTVdpbmRvdy5oCkBAIC0xLDEwICsxLDEwIEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKICAqIG1ldDoKLSAqIAorICoKICAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCiAgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCkBAIC0xNCw3ICsxNCw3IEBACiAgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQog
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqIAorICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
QEAgLTMxLDExICszMSwxNyBAQAogI2lmbmRlZiBCaW5kaW5nRE9NV2luZG93X2gKICNkZWZpbmUg
QmluZGluZ0RPTVdpbmRvd19oCiAKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdlbmVyaWNCaW5kaW5n
LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCisjaW5j
bHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisj
aW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01
Miw2ICs1OCwyMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgU3RyaW5nJiBmcmFtZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgV2luZG93RmVhdHVyZXMmIHdpbmRvd0ZlYXR1cmVzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEJpbmRpbmdWYWx1ZSBkaWFsb2dBcmdzKTsKKworICAgIHN0YXRpYyBXZWJDb3Jl
OjpET01XaW5kb3cqIG9wZW4oU3RhdGU8QmluZGluZz4qLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV2ViQ29yZTo6RE9NV2luZG93KiBwYXJlbnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHVybCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZnJhbWVOYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2luZG93RmVhdHVyZXMmIHJhd0ZlYXR1
cmVzKTsKKworICAgIC8vIEZJWE1FOiBUaGVyZSBzaG91bGQgYmUgYSBwbGFjZSBmb3IgZ2VuZXJp
YyBiaW5kaW5nIHV0aWxpdGllcy4KKyAgICBzdGF0aWMgS1VSTCBjb21wbGV0ZVVSTChTdGF0ZTxC
aW5kaW5nPiosIGNvbnN0IFN0cmluZyYgcmVsYXRpdmVVUkwpOworCitwcml2YXRlOgorICAgIC8v
IEhvcml6b250YWwgYW5kIHZlcnRpY2FsIG9mZnNldCwgZnJvbSB0aGUgcGFyZW50IGNvbnRlbnQg
YXJlYSwKKyAgICAvLyBhcm91bmQgbmV3bHkgb3BlbmVkIHBvcHVwcyB0aGF0IGRvbid0IHNwZWNp
ZnkgYSBsb2NhdGlvbi4KKyAgICBzdGF0aWMgY29uc3QgaW50IHBvcHVwVGlsZVBpeGVscyA9IDEw
OwogfTsKIAogLy8gSW1wbGVtZW50YXRpb25zIG9mIHRlbXBsYXRlZCBtZXRob2RzIG11c3QgYmUg
aW4gdGhpcyBmaWxlLgpAQCAtMTAzLDggKzEyMyw4IEBAIEZyYW1lKiBCaW5kaW5nRE9NV2luZG93
PEJpbmRpbmc+OjpjcmVhdGVXaW5kb3coU3RhdGU8QmluZGluZz4qIHN0YXRlLAogCiAgICAgaWYg
KCFwcm90b2NvbElzSmF2YVNjcmlwdCh1cmwpIHx8IEJpbmRpbmdTZWN1cml0eTxCaW5kaW5nPjo6
Y2FuQWNjZXNzRnJhbWUoc3RhdGUsIG5ld0ZyYW1lLCB0cnVlKSkgewogICAgICAgICBLVVJMIGNv
bXBsZXRlZFVybCA9Ci0gICAgICAgICAgICB1cmwuaXNFbXB0eSgpID8gS1VSTChQYXJzZWRVUkxT
dHJpbmcsICIiKSA6IGNvbXBsZXRlVVJMKHVybCk7Ci0gICAgICAgIGJvb2wgdXNlckdlc3R1cmUg
PSBwcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKKyAgICAgICAgICAgIHVybC5pc0VtcHR5KCkgPyBL
VVJMKFBhcnNlZFVSTFN0cmluZywgIiIpIDogY29tcGxldGVVUkwoc3RhdGUsIHVybCk7CisgICAg
ICAgIGJvb2wgdXNlckdlc3R1cmUgPSBzdGF0ZS0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7CiAK
ICAgICAgICAgaWYgKGNyZWF0ZWQpCiAgICAgICAgICAgICBuZXdGcmFtZS0+bG9hZGVyKCktPmNo
YW5nZUxvY2F0aW9uKGNvbXBsZXRlZFVybCwgcmVmZXJyZXIsIGZhbHNlLCBmYWxzZSwgdXNlckdl
c3R1cmUpOwpAQCAtMTE1LDYgKzEzNSwxNTMgQEAgRnJhbWUqIEJpbmRpbmdET01XaW5kb3c8Qmlu
ZGluZz46OmNyZWF0ZVdpbmRvdyhTdGF0ZTxCaW5kaW5nPiogc3RhdGUsCiAgICAgcmV0dXJuIG5l
d0ZyYW1lOwogfQogCit0ZW1wbGF0ZTxjbGFzcyBCaW5kaW5nPgorV2ViQ29yZTo6RE9NV2luZG93
KiBCaW5kaW5nRE9NV2luZG93PEJpbmRpbmc+OjpvcGVuKFN0YXRlPEJpbmRpbmc+KiBzdGF0ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJD
b3JlOjpET01XaW5kb3cqIHBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHVybFN0cmluZywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGZy
YW1lTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBXaW5kb3dGZWF0dXJlcyYgcmF3RmVhdHVyZXMpCit7CisgICAgRnJhbWUqIGZy
YW1lID0gcGFyZW50LT5mcmFtZSgpOworCisgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk8QmluZGlu
Zz46OmNhbkFjY2Vzc0ZyYW1lKHN0YXRlLCBmcmFtZSwgdHJ1ZSkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgRnJhbWUqIGZpcnN0RnJhbWUgPSBzdGF0ZS0+Z2V0Rmlyc3RGcmFtZSgpOworICAg
IGlmICghZmlyc3RGcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBGcmFtZSogYWN0aXZl
RnJhbWUgPSBzdGF0ZS0+Z2V0QWN0aXZlRnJhbWUoKTsKKyAgICAvLyBXZSBtYXkgbm90IGhhdmUg
YSBjYWxsaW5nIGNvbnRleHQgaWYgd2UgYXJlIGludm9rZWQgYnkgYSBwbHVnaW4KKyAgICAvLyB2
aWEgTlBBUEkuCisgICAgaWYgKCFhY3RpdmVGcmFtZSkKKyAgICAgICAgYWN0aXZlRnJhbWUgPSBm
aXJzdEZyYW1lOworCisgICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFw
YWdlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIEJlY2F1c2UgRnJhbWVUcmVlOjpmaW5k
KCkgcmV0dXJucyB0cnVlIGZvciBlbXB0eSBzdHJpbmdzLCB3ZSBtdXN0IGNoZWNrCisgICAgLy8g
Zm9yIGVtcHR5IGZyYW1lbmFtZXMuIE90aGVyd2lzZSwgaWxsZWdpdGltYXRlIHdpbmRvdy5vcGVu
KCkgY2FsbHMgd2l0aAorICAgIC8vIG5vIG5hbWUgd2lsbCBwYXNzIHJpZ2h0IHRocm91Z2ggdGhl
IHBvcHVwIGJsb2NrZXIuCisgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk8QmluZGluZz46OmFsbG93
UG9wVXAoc3RhdGUpCisgICAgICAgICYmIChmcmFtZU5hbWUuaXNFbXB0eSgpIHx8ICFmcmFtZS0+
dHJlZSgpLT5maW5kKGZyYW1lTmFtZSkpKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIC8vIEdldCB0aGUgdGFyZ2V0IGZyYW1lIGZvciB0aGUgc3BlY2lhbCBjYXNlcyBvZiBfdG9w
IGFuZCBfcGFyZW50LgorICAgIC8vIEluIHRob3NlIGNhc2VzLCB3ZSBjYW4gc2NoZWR1bGUgYSBs
b2NhdGlvbiBjaGFuZ2UgcmlnaHQgbm93IGFuZAorICAgIC8vIHJldHVybiBlYXJseS4KKyAgICBi
b29sIHRvcE9yUGFyZW50ID0gZmFsc2U7CisgICAgaWYgKGZyYW1lTmFtZSA9PSAiX3RvcCIpIHsK
KyAgICAgICAgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50b3AoKTsKKyAgICAgICAgdG9wT3JQYXJl
bnQgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoZnJhbWVOYW1lID09ICJfcGFyZW50IikgeworICAg
ICAgICBpZiAoRnJhbWUqIHBhcmVudCA9IGZyYW1lLT50cmVlKCktPnBhcmVudCgpKQorICAgICAg
ICAgICAgZnJhbWUgPSBwYXJlbnQ7CisgICAgICAgIHRvcE9yUGFyZW50ID0gdHJ1ZTsKKyAgICB9
CisgICAgaWYgKHRvcE9yUGFyZW50KSB7CisgICAgICAgIGlmICghQmluZGluZ1NlY3VyaXR5PEJp
bmRpbmc+OjpzaG91bGRBbGxvd05hdmlnYXRpb24oc3RhdGUsIGZyYW1lKSkKKyAgICAgICAgICAg
IHJldHVybiAwOworCisgICAgICAgIFN0cmluZyBjb21wbGV0ZWRVcmw7CisgICAgICAgIGlmICgh
dXJsU3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbXBsZXRlZFVybCA9IGNvbXBsZXRl
VVJMKHN0YXRlLCB1cmxTdHJpbmcpOworCisgICAgICAgIGlmICghY29tcGxldGVkVXJsLmlzRW1w
dHkoKQorICAgICAgICAgICAgJiYgKCFwcm90b2NvbElzSmF2YVNjcmlwdChjb21wbGV0ZWRVcmwp
CisgICAgICAgICAgICAgICAgfHwgQmluZGluZ1NlY3VyaXR5PEJpbmRpbmc+OjpjYW5BY2Nlc3NG
cmFtZShzdGF0ZSwgZnJhbWUsIHRydWUpKSkgeworICAgICAgICAgICAgYm9vbCB1c2VyR2VzdHVy
ZSA9IHN0YXRlLT5wcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKKworICAgICAgICAgICAgLy8gRm9y
IHdoYXRldmVyIHJlYXNvbiwgRmlyZWZveCB1c2VzIHRoZSBmaXJzdCBmcmFtZSB0byBkZXRlcm1p
bmUKKyAgICAgICAgICAgIC8vIHRoZSBvdXRnb2luZ1JlZmVycmVyLiAgV2UgcmVwbGljYXRlIHRo
YXQgYmVoYXZpb3IgaGVyZS4KKyAgICAgICAgICAgIFN0cmluZyByZWZlcnJlciA9IGZpcnN0RnJh
bWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCk7CisKKyAgICAgICAgICAgIGZyYW1lLT5y
ZWRpcmVjdFNjaGVkdWxlcigpLT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKGNvbXBsZXRlZFVybCwg
cmVmZXJyZXIsIGZhbHNlLCBmYWxzZSwgdXNlckdlc3R1cmUpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBmcmFtZS0+ZG9tV2luZG93KCk7CisgICAgfQorCisgICAgLy8gSW4gdGhlIGNhc2Ug
b2YgYSBuYW1lZCBmcmFtZSBvciBhIG5ldyB3aW5kb3csIHdlJ2xsIHVzZSB0aGUKKyAgICAvLyBj
cmVhdGVXaW5kb3coKSBoZWxwZXIuCisKKyAgICAvLyBXb3JrIHdpdGggYSBjb3B5IG9mIHRoZSBw
YXJzZWQgdmFsdWVzIHNvIHdlIGNhbiByZXN0b3JlIHRoZQorICAgIC8vIHZhbHVlcyB3ZSBtYXkg
bm90IHdhbnQgdG8gb3ZlcndyaXRlIGFmdGVyIHdlIGRvIHRoZSBtdWx0aXBsZQorICAgIC8vIG1v
bml0b3IgZml4ZXMuCisgICAgV2luZG93RmVhdHVyZXMgd2luZG93RmVhdHVyZXMocmF3RmVhdHVy
ZXMpOworICAgIEZsb2F0UmVjdCBzY3JlZW5SZWN0ID0gc2NyZWVuQXZhaWxhYmxlUmVjdChwYWdl
LT5tYWluRnJhbWUoKS0+dmlldygpKTsKKworICAgIC8vIFNldCBkZWZhdWx0IHNpemUgYW5kIGxv
Y2F0aW9uIG5lYXIgcGFyZW50IHdpbmRvdyBpZiBub25lIHdlcmUgc3BlY2lmaWVkLgorICAgIC8v
IFRoZXNlIG1heSBiZSBmdXJ0aGVyIG1vZGlmaWVkIGJ5IGFkanVzdFdpbmRvd1JlY3QsIGJlbG93
LgorICAgIGlmICghd2luZG93RmVhdHVyZXMueFNldCkgeworICAgICAgICB3aW5kb3dGZWF0dXJl
cy54ID0gcGFyZW50LT5zY3JlZW5YKCkgLSBzY3JlZW5SZWN0LngoKSArIHBvcHVwVGlsZVBpeGVs
czsKKyAgICAgICAgd2luZG93RmVhdHVyZXMueFNldCA9IHRydWU7CisgICAgfQorICAgIGlmICgh
d2luZG93RmVhdHVyZXMueVNldCkgeworICAgICAgICB3aW5kb3dGZWF0dXJlcy55ID0gcGFyZW50
LT5zY3JlZW5ZKCkgLSBzY3JlZW5SZWN0LnkoKSArIHBvcHVwVGlsZVBpeGVsczsKKyAgICAgICAg
d2luZG93RmVhdHVyZXMueVNldCA9IHRydWU7CisgICAgfQorICAgIGlmICghd2luZG93RmVhdHVy
ZXMud2lkdGhTZXQpIHsKKyAgICAgICAgd2luZG93RmVhdHVyZXMud2lkdGggPSBwYXJlbnQtPmlu
bmVyV2lkdGgoKTsKKyAgICAgICAgd2luZG93RmVhdHVyZXMud2lkdGhTZXQgPSB0cnVlOworICAg
IH0KKyAgICBpZiAoIXdpbmRvd0ZlYXR1cmVzLmhlaWdodFNldCkgeworICAgICAgICB3aW5kb3dG
ZWF0dXJlcy5oZWlnaHQgPSBwYXJlbnQtPmlubmVySGVpZ2h0KCk7CisgICAgICAgIHdpbmRvd0Zl
YXR1cmVzLmhlaWdodFNldCA9IHRydWU7CisgICAgfQorCisgICAgRmxvYXRSZWN0IHdpbmRvd1Jl
Y3Qod2luZG93RmVhdHVyZXMueCwgd2luZG93RmVhdHVyZXMueSwgd2luZG93RmVhdHVyZXMud2lk
dGgsIHdpbmRvd0ZlYXR1cmVzLmhlaWdodCk7CisKKyAgICAvLyBUaGUgbmV3IHdpbmRvdydzIGxv
Y2F0aW9uIGlzIHJlbGF0aXZlIHRvIGl0cyBjdXJyZW50IHNjcmVlbiwgc28gc2hpZnQKKyAgICAv
LyBpdCBpbiBjYXNlIGl0J3Mgb24gYSBzZWNvbmRhcnkgbW9uaXRvci4gU2VlIGh0dHA6Ly9iL3Zp
ZXdJc3N1ZT9pZD05Njc5MDUuCisgICAgd2luZG93UmVjdC5tb3ZlKHNjcmVlblJlY3QueCgpLCBz
Y3JlZW5SZWN0LnkoKSk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93OjphZGp1c3RXaW5kb3dSZWN0
KHNjcmVlblJlY3QsIHdpbmRvd1JlY3QsIHdpbmRvd1JlY3QpOworCisgICAgd2luZG93RmVhdHVy
ZXMueCA9IHdpbmRvd1JlY3QueCgpOworICAgIHdpbmRvd0ZlYXR1cmVzLnkgPSB3aW5kb3dSZWN0
LnkoKTsKKyAgICB3aW5kb3dGZWF0dXJlcy5oZWlnaHQgPSB3aW5kb3dSZWN0LmhlaWdodCgpOwor
ICAgIHdpbmRvd0ZlYXR1cmVzLndpZHRoID0gd2luZG93UmVjdC53aWR0aCgpOworCisgICAgLy8g
SWYgZWl0aGVyIG9mIHRoZSBvcmlnaW4gY29vcmRpbmF0ZXMgb3IgZGltZW5zaW9ucyB3ZXJlbid0
IHNldAorICAgIC8vIGluIHRoZSBvcmlnaW5hbCBzdHJpbmcsIG1ha2Ugc3VyZSB0aGV5IGFyZW4n
dCBzZXQgbm93LgorICAgIGlmICghcmF3RmVhdHVyZXMueFNldCkgeworICAgICAgICB3aW5kb3dG
ZWF0dXJlcy54ID0gMDsKKyAgICAgICAgd2luZG93RmVhdHVyZXMueFNldCA9IGZhbHNlOworICAg
IH0KKyAgICBpZiAoIXJhd0ZlYXR1cmVzLnlTZXQpIHsKKyAgICAgICAgd2luZG93RmVhdHVyZXMu
eSA9IDA7CisgICAgICAgIHdpbmRvd0ZlYXR1cmVzLnlTZXQgPSBmYWxzZTsKKyAgICB9CisgICAg
aWYgKCFyYXdGZWF0dXJlcy53aWR0aFNldCkgeworICAgICAgd2luZG93RmVhdHVyZXMud2lkdGgg
PSAwOworICAgICAgd2luZG93RmVhdHVyZXMud2lkdGhTZXQgPSBmYWxzZTsKKyAgICB9CisgICAg
aWYgKCFyYXdGZWF0dXJlcy5oZWlnaHRTZXQpIHsKKyAgICAgIHdpbmRvd0ZlYXR1cmVzLmhlaWdo
dCA9IDA7CisgICAgICB3aW5kb3dGZWF0dXJlcy5oZWlnaHRTZXQgPSBmYWxzZTsKKyAgICB9CisK
KyAgICBmcmFtZSA9IGNyZWF0ZVdpbmRvdyhzdGF0ZSwgYWN0aXZlRnJhbWUsIGZpcnN0RnJhbWUs
IGZyYW1lLCB1cmxTdHJpbmcsIGZyYW1lTmFtZSwgd2luZG93RmVhdHVyZXMsIEJpbmRpbmc6OmVt
cHR5U2NyaXB0VmFsdWUoKSk7CisKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIHJldHVybiBmcmFtZS0+ZG9tV2luZG93KCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBC
aW5kaW5nPgorS1VSTCBCaW5kaW5nRE9NV2luZG93PEJpbmRpbmc+Ojpjb21wbGV0ZVVSTChTdGF0
ZTxCaW5kaW5nPiogc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFN0cmluZyYgcmVsYXRpdmVVUkwpCit7CisgICAgLy8gRm9yIGhpc3Rvcmlj
YWwgcmVhc29ucywgd2UgbmVlZCB0byBjb21wbGV0ZSB0aGUgVVJMIHVzaW5nIHRoZQorICAgIC8v
IGR5bmFtaWMgZnJhbWUuCisgICAgRnJhbWUqIGZyYW1lID0gc3RhdGUtPmdldEZpcnN0RnJhbWUo
KTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gS1VSTCgpOworICAgIHJldHVybiBm
cmFtZS0+bG9hZGVyKCktPmNvbXBsZXRlVVJMKHJlbGF0aXZlVVJMKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gQmluZGluZ0RPTVdpbmRvd19oCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvQmluZGluZ1NlY3VyaXR5LmggYi9XZWJDb3JlL2Jp
bmRpbmdzL2dlbmVyaWMvQmluZGluZ1NlY3VyaXR5LmgKaW5kZXggZDdjOWRmZTIyZDEyZjFiZjkz
MDVhYzg0YjcxMzJkZjdkOTM2M2VhNi4uMTEyNGY3ZWY2ZTc2ZTNhYThlYWZjNzkyMDY1YWE2ODJi
MWEwNTRlNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0JpbmRpbmdTZWN1
cml0eS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9CaW5kaW5nU2VjdXJpdHkuaApA
QCAtMzQsMTQgKzM0LDE1IEBACiAjaW5jbHVkZSAiQmluZGluZ1NlY3VyaXR5QmFzZS5oIgogI2lu
Y2x1ZGUgIkNTU0hlbHBlci5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIkdlbmVyaWNCaW5kaW5nLmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lRWxl
bWVudEJhc2UuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERPTVdpbmRvdzsKLWNsYXNzIEZyYW1l
OwogY2xhc3MgTm9kZTsKIAogLy8gU2VjdXJpdHkgZnVuY3Rpb25zIHNoYXJlZCBieSB2YXJpb3Vz
IGxhbmd1YWdlIGJpbmRpbmdzLgpAQCAtNTUsOSArNTYsMTIgQEAgcHVibGljOgogICAgIC8vIGN1
cnJlbnQgc2VjdXJpdHkgY29udGV4dC4KICAgICBzdGF0aWMgYm9vbCBjaGVja05vZGVTZWN1cml0
eShTdGF0ZTxCaW5kaW5nPiosIE5vZGUqIHRhcmdldCk7CiAKKyAgICBzdGF0aWMgYm9vbCBhbGxv
d1BvcFVwKFN0YXRlPEJpbmRpbmc+Kik7CiAgICAgc3RhdGljIGJvb2wgYWxsb3dTZXR0aW5nRnJh
bWVTcmNUb0phdmFzY3JpcHRVcmwoU3RhdGU8QmluZGluZz4qLCBIVE1MRnJhbWVFbGVtZW50QmFz
ZSosIFN0cmluZyB2YWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgYWxsb3dTZXR0aW5nU3JjVG9KYXZh
c2NyaXB0VVJMKFN0YXRlPEJpbmRpbmc+KiwgRWxlbWVudCosIFN0cmluZyBuYW1lLCBTdHJpbmcg
dmFsdWUpOwogCisgICAgc3RhdGljIGJvb2wgc2hvdWxkQWxsb3dOYXZpZ2F0aW9uKFN0YXRlPEJp
bmRpbmc+KiwgRnJhbWUqKTsKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBCaW5kaW5nU2VjdXJp
dHkoKSB7fQogICAgIH5CaW5kaW5nU2VjdXJpdHkoKTsKQEAgLTExMCw2ICsxMTQsMTggQEAgYm9v
bCBCaW5kaW5nU2VjdXJpdHk8QmluZGluZz46OmNoZWNrTm9kZVNlY3VyaXR5KFN0YXRlPEJpbmRp
bmc+KiBzdGF0ZSwgTm9kZSogbm8KIH0KIAogdGVtcGxhdGUgPGNsYXNzIEJpbmRpbmc+Citib29s
IEJpbmRpbmdTZWN1cml0eTxCaW5kaW5nPjo6YWxsb3dQb3BVcChTdGF0ZTxCaW5kaW5nPiogc3Rh
dGUpCit7CisgICAgaWYgKHN0YXRlLT5wcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBGcmFtZSogZnJhbWUgPSBzdGF0ZS0+Z2V0Rmlyc3RGcmFtZSgp
OworICAgIEFTU0VSVChmcmFtZSk7CisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZnJhbWUtPnNl
dHRpbmdzKCk7CisgICAgcmV0dXJuIHNldHRpbmdzICYmIHNldHRpbmdzLT5qYXZhU2NyaXB0Q2Fu
T3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5KCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBCaW5kaW5n
PgogYm9vbCBCaW5kaW5nU2VjdXJpdHk8QmluZGluZz46OmFsbG93U2V0dGluZ0ZyYW1lU3JjVG9K
YXZhc2NyaXB0VXJsKFN0YXRlPEJpbmRpbmc+KiBzdGF0ZSwgSFRNTEZyYW1lRWxlbWVudEJhc2Uq
IGZyYW1lLCBTdHJpbmcgdmFsdWUpCiB7CiAgICAgaWYgKHByb3RvY29sSXNKYXZhU2NyaXB0KGRl
cHJlY2F0ZWRQYXJzZVVSTCh2YWx1ZSkpKSB7CkBAIC0xMjgsNiArMTQ0LDEzIEBAIGJvb2wgQmlu
ZGluZ1NlY3VyaXR5PEJpbmRpbmc+OjphbGxvd1NldHRpbmdTcmNUb0phdmFzY3JpcHRVUkwoU3Rh
dGU8QmluZGluZz4qIHN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3RlbXBsYXRlIDxjbGFzcyBC
aW5kaW5nPgorYm9vbCBCaW5kaW5nU2VjdXJpdHk8QmluZGluZz46OnNob3VsZEFsbG93TmF2aWdh
dGlvbihTdGF0ZTxCaW5kaW5nPiogc3RhdGUsIEZyYW1lKiBmcmFtZSkKK3sKKyAgICBGcmFtZSog
YWN0aXZlRnJhbWUgPSBzdGF0ZS0+Z2V0QWN0aXZlRnJhbWUoKTsKKyAgICByZXR1cm4gYWN0aXZl
RnJhbWUgJiYgYWN0aXZlRnJhbWUtPmxvYWRlcigpLT5zaG91bGRBbGxvd05hdmlnYXRpb24oZnJh
bWUpOworfQorCiB9CiAKICNlbmRpZiAvLyBCaW5kaW5nU2VjdXJpdHlfaApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhC
aW5kaW5nLmgKaW5kZXggYTE1ZWNlMTI0OTI0ZmIzN2IxMjhmYTYzZDY1Y2VhYzU4ZThhZTQ0YS4u
ODM4M2Y5NGYxZWNlNTgxMzJlYjQ4NmRlNTQxNzA3MmUzNzY5YTVmMyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
QmluZGluZy5oCkBAIC0xLDEwICsxLDEwIEBACiAvKgogKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSogCisqCiAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCiAqIG1ldDoKLSogCisqCiAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQpA
QCAtMTQsNyArMTQsNyBAQAogKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCiAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0qIAorKgogKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCiAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCiAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpAQCAtNDAsNyArNDAsNyBAQAogI2luY2x1
ZGUgPHY4Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKKwogICAgIGNsYXNzIEV2ZW50
TGlzdGVuZXI7CiAgICAgY2xhc3MgRXZlbnRUYXJnZXQ7CiAgICAgY2xhc3MgVjhCaW5kaW5nRE9N
V2luZG93OwpAQCAtNTAsNiArNTAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHVibGlj
OgogICAgICAgICB0eXBlZGVmIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWYWx1ZTsKICAgICAgICAg
dHlwZWRlZiBWOEJpbmRpbmdET01XaW5kb3cgRE9NV2luZG93OworCisgICAgICAgIHN0YXRpYyBW
YWx1ZSBlbXB0eVNjcmlwdFZhbHVlKCkgeyByZXR1cm4gdjg6OkxvY2FsPHY4OjpWYWx1ZT4oKTsg
fQogICAgIH07CiAgICAgdHlwZWRlZiBCaW5kaW5nU2VjdXJpdHk8VjhCaW5kaW5nPiBWOEJpbmRp
bmdTZWN1cml0eTsKICAgICAKQEAgLTE1Miw3ICsxNTQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgewogICAgICAgICByZXR1cm4gdjhWYWx1ZVRvV2ViQ29yZVN0cmluZyhvYmplY3QpOwog
ICAgIH0KLSAgICAKKwogICAgIFN0cmluZyB0b1dlYkNvcmVTdHJpbmcoY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYsIGludCBpbmRleCk7CiAKICAgICAvLyBUaGUgc3RyaW5nIHJldHVybmVkIGJ5IHRoaXMg
ZnVuY3Rpb24gaXMgc3RpbGwgb3duZWQgYnkgdGhlIGFyZ3VtZW50CkBAIC0xNzEsNyArMTczLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIEF0b21pY1N0cmluZyB0b0F0b21pY1dlYkNvcmVT
dHJpbmdXaXRoTnVsbENoZWNrKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSk7CiAKICAgICBT
dHJpbmcgdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB2YWx1ZSk7Ci0gCisKICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4VW5k
ZXRlY3RhYmxlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyKTsKIAogICAgIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB2OFN0cmluZ09yTnVsbChjb25zdCBTdHJpbmcmIHN0cik7CkBAIC0xODMsMzEgKzE4
NSwzMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgZG91YmxlIHRvV2ViQ29yZURhdGUodjg6
OkhhbmRsZTx2ODo6VmFsdWU+IG9iamVjdCk7CiAKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
djhEYXRlT3JOdWxsKGRvdWJsZSB2YWx1ZSk7Ci0gICAgCisKICAgICB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gY3JlYXRlUmF3VGVtcGxhdGUoKTsKIAogICAgIHN0cnVjdCBC
YXRjaGVkQXR0cmlidXRlOwogICAgIHN0cnVjdCBCYXRjaGVkQ2FsbGJhY2s7Ci0gICAgCisKICAg
ICB2ODo6TG9jYWw8djg6OlNpZ25hdHVyZT4gY29uZmlndXJlVGVtcGxhdGUodjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gcGFyZW50Q2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBmaWVsZENvdW50LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYXRjaGVkQXR0cmlidXRlKiwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhdGNoZWRB
dHRyaWJ1dGUqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgYXR0cmlidXRlQ291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEJhdGNoZWRDYWxsYmFjayosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjYWxsYmFja0NvdW50KTsKLSAg
ICAKKwogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBnZXRFbGVtZW50U3RyaW5nQXR0cihjb25z
dCB2ODo6QWNjZXNzb3JJbmZvJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZvaWQgc2V0RWxlbWVudFN0
cmluZ0F0dHIoY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+KTsKIAotICAgIAorCiAgICAgdjg6OlBlcnNpc3RlbnQ8
djg6OlN0cmluZz4gZ2V0VG9TdHJpbmdOYW1lKCk7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IGdldFRvU3RyaW5nVGVtcGxhdGUoKTsKLSAgICAKKwogICAgIC8vIFY4
UGFyYW1ldGVyIGlzIGFuIGFkYXB0ZXIgY2xhc3MgdGhhdCBjb252ZXJ0cyBWOCB2YWx1ZXMgdG8g
U3RyaW5ncwogICAgIC8vIG9yIEF0b21pY1N0cmluZ3MgYXMgYXBwcm9wcmlhdGUsIHVzaW5nIG11
bHRpcGxlIHR5cGVjYXN0IG9wZXJhdG9ycy4KICAgICBlbnVtIFY4UGFyYW1ldGVyTW9kZSB7CkBA
IC0yMjQsNyArMjI2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6CiAgICAg
ICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IG1fdjhPYmplY3Q7CiAgICAgfTsKLSAgICAKKwogICAg
IHRlbXBsYXRlPD4gaW5saW5lIFY4UGFyYW1ldGVyPERlZmF1bHRNb2RlPjo6b3BlcmF0b3IgU3Ry
aW5nKCkgeyByZXR1cm4gdG9XZWJDb3JlU3RyaW5nKG1fdjhPYmplY3QpOyB9CiAgICAgdGVtcGxh
dGU8PiBpbmxpbmUgVjhQYXJhbWV0ZXI8V2l0aE51bGxDaGVjaz46Om9wZXJhdG9yIFN0cmluZygp
IHsgcmV0dXJuIHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2sobV92OE9iamVjdCk7IH0KICAg
ICB0ZW1wbGF0ZTw+IGlubGluZSBWOFBhcmFtZXRlcjxXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2s+
OjpvcGVyYXRvciBTdHJpbmcoKSB7IHJldHVybiB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5k
ZWZpbmVkQ2hlY2sobV92OE9iamVjdCk7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhVdGlsaXRpZXMuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFV0aWxpdGllcy5jcHAK
aW5kZXggZjc4MDIxODdkMjE1OGIwOGIzYmIxMzYzMTYwZGMyMTc0NzYxMzEzZC4uMmU1Y2Y4YjBm
NTI3NmY3NzYzZmYzNjljNGU0MDU3MjM5ZmRhMGRiMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOFV0aWxpdGllcy5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFV0aWxp
dGllcy5jcHAKQEAgLTM4LDYgKzM4LDggQEAKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgiCiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIK
KyNpbmNsdWRlICJWOEJpbmRpbmdET01XaW5kb3cuaCIgLy8gRklYTUU6IHJlbW92ZSB3aGVuIGNv
bXBsZXRlVVJMIG1vdmVzCisjaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKICNpbmNsdWRlICJW
OFByb3h5LmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgIldvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eS5oIgpAQCAtOTIsNDEgKzk0LDI1IEBAIHZvaWQgdHJhbnNmZXJI
aWRkZW5EZXBlbmRlbmN5KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0LAogICAgIGlmICgh
bmV3VmFsdWUtPklzTnVsbCgpICYmICFuZXdWYWx1ZS0+SXNVbmRlZmluZWQoKSkKICAgICAgICAg
Y3JlYXRlSGlkZGVuRGVwZW5kZW5jeShvYmplY3QsIG5ld1ZhbHVlLCBjYWNoZUluZGV4KTsKIH0K
LSAgICAKIAogYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmUoKQogewotICAgIEZyYW1lKiBmcmFt
ZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4dCgpOwotICAgIHJldHVy
biBmcmFtZSAmJiBmcmFtZS0+c2NyaXB0KCktPnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOworICAg
IHJldHVybiBWOEJpbmRpbmdTdGF0ZTo6T25seSgpLT5wcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsK
IH0KIAogRnJhbWUqIGNhbGxpbmdPckVudGVyZWRGcmFtZSgpCiB7Ci0gICAgRnJhbWUqIGZyYW1l
ID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckNhbGxpbmdDb250ZXh0KCk7Ci0gICAgaWYgKCFm
cmFtZSkgewotICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5LCB3aGVuIHByb2Nlc3Npbmcgc2NyaXB0
IGZyb20gYSBwbHVnLWluLCB3ZSBtaWdodCBub3QKLSAgICAgICAgLy8gaGF2ZSBhIGNhbGxpbmcg
Y29udGV4dC4gIEluIHRob3NlIGNhc2VzLCB3ZSBmYWxsIGJhY2sgdG8gdGhlCi0gICAgICAgIC8v
IGVudGVyZWQgY29udGV4dCBmb3Igc2VjdXJpdHkgY2hlY2tzLgotICAgICAgICAvLyBGSVhNRTog
V2UgbmVlZCBhIGJldHRlciBBUEkgZm9yIHJldHJpZXZpbmcgZnJhbWVzIHRoYXQgYWJzdHJhY3Rz
Ci0gICAgICAgIC8vICAgICAgICBhd2F5IHRoaXMgY29uY2Vybi4KLSAgICAgICAgZnJhbWUgPSBW
OFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKTsKLSAgICB9Ci0gICAgcmV0
dXJuIGZyYW1lOworICAgIHJldHVybiBWOEJpbmRpbmdTdGF0ZTo6T25seSgpLT5nZXRBY3RpdmVG
cmFtZSgpOwogfQogCiBib29sIHNob3VsZEFsbG93TmF2aWdhdGlvbihGcmFtZSogZnJhbWUpCiB7
Ci0gICAgRnJhbWUqIGNhbGxpbmdPckVudGVyZWQgPSBjYWxsaW5nT3JFbnRlcmVkRnJhbWUoKTsK
LSAgICByZXR1cm4gY2FsbGluZ09yRW50ZXJlZCAmJiBjYWxsaW5nT3JFbnRlcmVkLT5sb2FkZXIo
KS0+c2hvdWxkQWxsb3dOYXZpZ2F0aW9uKGZyYW1lKTsKKyAgICByZXR1cm4gVjhCaW5kaW5nU2Vj
dXJpdHk6OnNob3VsZEFsbG93TmF2aWdhdGlvbihWOEJpbmRpbmdTdGF0ZTo6T25seSgpLCBmcmFt
ZSk7CiB9CiAKIEtVUkwgY29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiByZWxhdGl2ZVVSTCkKIHsK
LSAgICAvLyBGb3IgaGlzdG9pY2FsIHJlYXNvbnMsIHdlIG5lZWQgdG8gY29tcGxldGUgdGhlIFVS
TCB1c2luZyB0aGUgZHluYW1pYyBmcmFtZS4KLSAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5Ojpy
ZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAg
ICByZXR1cm4gS1VSTCgpOwotICAgIHJldHVybiBmcmFtZS0+bG9hZGVyKCktPmNvbXBsZXRlVVJM
KHJlbGF0aXZlVVJMKTsKKyAgICByZXR1cm4gVjhCaW5kaW5nRE9NV2luZG93Ojpjb21wbGV0ZVVS
TChWOEJpbmRpbmdTdGF0ZTo6T25seSgpLCByZWxhdGl2ZVVSTCk7CiB9CiAKIHZvaWQgbmF2aWdh
dGVJZkFsbG93ZWQoRnJhbWUqIGZyYW1lLCBjb25zdCBLVVJMJiB1cmwsIGJvb2wgbG9ja0hpc3Rv
cnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4QXJyYXlCdWZmZXJDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhBcnJheUJ1ZmZlckN1c3RvbS5jcHAKaW5kZXggNTAxZTVhMmRlM2VhODc3OGI2
MjBlMTllOTU3YjU0YTg5MWIzNzZjZS4uMzA1ZmIxODU4ZTljNjAyMDFmYmQwN2Y1ZDVlYTI5MGYz
OGIxNDg2NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhBcnJheUJ1
ZmZlckN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhBcnJheUJ1
ZmZlckN1c3RvbS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkFycmF5QnVmZmVy
LmgiCiAKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgi
CiAjaW5jbHVkZSAiVjhBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcCBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAppbmRleCBi
NGZhNzRmN2U5ZDRjM2U4OWY2M2E2ZWYzYzNhMWJlMjlmNzg1MDk2Li5jZmYyNTIzODQ4ZTY4MDQ3
NTk1NDNjMDE1MjQ1YjY4MjA5YTBiYTZlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCkBAIC04MiwxMCArODIsNiBAQAogI2VuZGlmCiAj
aW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKIAotLy8gSG9yaXpvbnRhbCBhbmQgdmVydGljYWwg
b2Zmc2V0LCBmcm9tIHRoZSBwYXJlbnQgY29udGVudCBhcmVhLCBhcm91bmQgbmV3bHkKLS8vIG9w
ZW5lZCBwb3B1cHMgdGhhdCBkb24ndCBzcGVjaWZ5IGEgbG9jYXRpb24uCi1zdGF0aWMgY29uc3Qg
aW50IHBvcHVwVGlsZVBpeGVscyA9IDEwOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBXaW5kb3dTZXRUaW1lb3V0SW1wbChjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzLCBib29sIHNpbmdsZVNob3QpCkBAIC00NDksMTcgKzQ0NSw2IEBAIHN0YXRpYyBib29s
IGNhblNob3dNb2RhbERpYWxvZ05vdyhjb25zdCBGcmFtZSogZnJhbWUpCiAgICAgcmV0dXJuIGZy
YW1lLT5wYWdlKCktPmNocm9tZSgpLT5jYW5SdW5Nb2RhbE5vdygpOwogfQogCi1zdGF0aWMgYm9v
bCBhbGxvd1BvcFVwKCkKLXsKLSAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZy
YW1lRm9yRW50ZXJlZENvbnRleHQoKTsKLQotICAgIEFTU0VSVChmcmFtZSk7Ci0gICAgaWYgKGZy
YW1lLT5zY3JpcHQoKS0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGZyYW1lLT5zZXR0aW5ncygpOwotICAgIHJl
dHVybiBzZXR0aW5ncyAmJiBzZXR0aW5ncy0+amF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21h
dGljYWxseSgpOwotfQotCiBzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyc2VNb2Rh
bERpYWxvZ0ZlYXR1cmVzKGNvbnN0IFN0cmluZyYgZmVhdHVyZXNBcmcpCiB7CiAgICAgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4gbWFwOwpAQCAtNTEzLDcgKzQ5OCw3IEBAIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOERPTVdpbmRvdzo6c2hvd01vZGFsRGlhbG9nQ2FsbGJhY2soY29uc3Qgdjg6OkFy
Z3VtZW50cyYKICAgICBpZiAoIWVudGVyZWRGcmFtZSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTsKIAotICAgIGlmICghY2FuU2hvd01vZGFsRGlhbG9nTm93KGZyYW1lKSB8fCAhYWxs
b3dQb3BVcCgpKQorICAgIGlmICghY2FuU2hvd01vZGFsRGlhbG9nTm93KGZyYW1lKSB8fCAhVjhC
aW5kaW5nU2VjdXJpdHk6OmFsbG93UG9wVXAoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSkpCiAgICAg
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKICAgICBjb25zdCBIYXNoTWFwPFN0cmluZywg
U3RyaW5nPiBmZWF0dXJlcyA9IHBhcnNlTW9kYWxEaWFsb2dGZWF0dXJlcyhmZWF0dXJlQXJncyk7
CkBAIC01ODQsMTM0ICs1NjksMTYgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV2luZG93
OjpvcGVuQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RB
VFMoIkRPTS5ET01XaW5kb3cub3BlbigpIik7CiAKKyAgICBET01XaW5kb3cqIHBhcmVudCA9IFY4
RE9NV2luZG93Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICBTdHJpbmcgdXJsU3RyaW5n
ID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKGFyZ3NbMF0pOwogICAg
IEF0b21pY1N0cmluZyBmcmFtZU5hbWUgPSAoYXJnc1sxXS0+SXNVbmRlZmluZWQoKSB8fCBhcmdz
WzFdLT5Jc051bGwoKSkgPyAiX2JsYW5rIiA6IEF0b21pY1N0cmluZyh0b1dlYkNvcmVTdHJpbmco
YXJnc1sxXSkpOwotCi0gICAgRE9NV2luZG93KiBwYXJlbnQgPSBWOERPTVdpbmRvdzo6dG9OYXRp
dmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgRnJhbWUqIGZyYW1lID0gcGFyZW50LT5mcmFtZSgpOwot
Ci0gICAgaWYgKCFWOEJpbmRpbmdTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5nU3Rh
dGU6Ok9ubHkoKSwgZnJhbWUsIHRydWUpKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgp
OwotCi0gICAgRnJhbWUqIGVudGVyZWRGcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JF
bnRlcmVkQ29udGV4dCgpOwotICAgIGlmICghZW50ZXJlZEZyYW1lKQotICAgICAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOwotCi0gICAgRnJhbWUqIGNhbGxpbmdGcmFtZSA9IFY4UHJveHk6OnJl
dHJpZXZlRnJhbWVGb3JDYWxsaW5nQ29udGV4dCgpOwotICAgIC8vIFdlIG1heSBub3QgaGF2ZSBh
IGNhbGxpbmcgY29udGV4dCBpZiB3ZSBhcmUgaW52b2tlZCBieSBhIHBsdWdpbiB2aWEgTlBBUEku
Ci0gICAgaWYgKCFjYWxsaW5nRnJhbWUpCi0gICAgICAgIGNhbGxpbmdGcmFtZSA9IGVudGVyZWRG
cmFtZTsKLQotICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkK
LSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIC8vIEJlY2F1c2UgRnJhbWVU
cmVlOjpmaW5kKCkgcmV0dXJucyB0cnVlIGZvciBlbXB0eSBzdHJpbmdzLCB3ZSBtdXN0IGNoZWNr
Ci0gICAgLy8gZm9yIGVtcHR5IGZyYW1lbmFtZXMuIE90aGVyd2lzZSwgaWxsZWdpdGltYXRlIHdp
bmRvdy5vcGVuKCkgY2FsbHMgd2l0aAotICAgIC8vIG5vIG5hbWUgd2lsbCBwYXNzIHJpZ2h0IHRo
cm91Z2ggdGhlIHBvcHVwIGJsb2NrZXIuCi0gICAgaWYgKCFhbGxvd1BvcFVwKCkgJiYKLSAgICAg
ICAgKGZyYW1lTmFtZS5pc0VtcHR5KCkgfHwgIWZyYW1lLT50cmVlKCktPmZpbmQoZnJhbWVOYW1l
KSkpIHsKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAgICAvLyBH
ZXQgdGhlIHRhcmdldCBmcmFtZSBmb3IgdGhlIHNwZWNpYWwgY2FzZXMgb2YgX3RvcCBhbmQgX3Bh
cmVudC4gIEluIHRob3NlCi0gICAgLy8gY2FzZXMsIHdlIGNhbiBzY2hlZHVsZSBhIGxvY2F0aW9u
IGNoYW5nZSByaWdodCBub3cgYW5kIHJldHVybiBlYXJseS4KLSAgICBib29sIHRvcE9yUGFyZW50
ID0gZmFsc2U7Ci0gICAgaWYgKGZyYW1lTmFtZSA9PSAiX3RvcCIpIHsKLSAgICAgICAgZnJhbWUg
PSBmcmFtZS0+dHJlZSgpLT50b3AoKTsKLSAgICAgICAgdG9wT3JQYXJlbnQgPSB0cnVlOwotICAg
IH0gZWxzZSBpZiAoZnJhbWVOYW1lID09ICJfcGFyZW50IikgewotICAgICAgICBpZiAoRnJhbWUq
IHBhcmVudCA9IGZyYW1lLT50cmVlKCktPnBhcmVudCgpKQotICAgICAgICAgICAgZnJhbWUgPSBw
YXJlbnQ7Ci0gICAgICAgIHRvcE9yUGFyZW50ID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKHRvcE9y
UGFyZW50KSB7Ci0gICAgICAgIGlmICghc2hvdWxkQWxsb3dOYXZpZ2F0aW9uKGZyYW1lKSkKLSAg
ICAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgU3RyaW5nIGNvbXBs
ZXRlZFVybDsKLSAgICAgICAgaWYgKCF1cmxTdHJpbmcuaXNFbXB0eSgpKQotICAgICAgICAgICAg
Y29tcGxldGVkVXJsID0gY29tcGxldGVVUkwodXJsU3RyaW5nKTsKLQotICAgICAgICBpZiAoIWNv
bXBsZXRlZFVybC5pc0VtcHR5KCkgJiYKLSAgICAgICAgICAgICghcHJvdG9jb2xJc0phdmFTY3Jp
cHQoY29tcGxldGVkVXJsKSB8fCBTY3JpcHRDb250cm9sbGVyOjppc1NhZmVTY3JpcHQoZnJhbWUp
KSkgewotICAgICAgICAgICAgYm9vbCB1c2VyR2VzdHVyZSA9IHByb2Nlc3NpbmdVc2VyR2VzdHVy
ZSgpOwotCi0gICAgICAgICAgICAvLyBGb3Igd2hhdGV2ZXIgcmVhc29uLCBGaXJlZm94IHVzZXMg
dGhlIGVudGVyZWQgZnJhbWUgdG8gZGV0ZXJtaW5lCi0gICAgICAgICAgICAvLyB0aGUgb3V0Z29p
bmdSZWZlcnJlci4gIFdlIHJlcGxpY2F0ZSB0aGF0IGJlaGF2aW9yIGhlcmUuCi0gICAgICAgICAg
ICBTdHJpbmcgcmVmZXJyZXIgPSBlbnRlcmVkRnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVy
cmVyKCk7Ci0KLSAgICAgICAgICAgIGZyYW1lLT5yZWRpcmVjdFNjaGVkdWxlcigpLT5zY2hlZHVs
ZUxvY2F0aW9uQ2hhbmdlKGNvbXBsZXRlZFVybCwgcmVmZXJyZXIsIGZhbHNlLCBmYWxzZSwgdXNl
ckdlc3R1cmUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1Y4KGZyYW1lLT5kb21XaW5k
b3coKSk7Ci0gICAgfQotCi0gICAgLy8gSW4gdGhlIGNhc2Ugb2YgYSBuYW1lZCBmcmFtZSBvciBh
IG5ldyB3aW5kb3csIHdlJ2xsIHVzZSB0aGUKLSAgICAvLyBjcmVhdGVXaW5kb3coKSBoZWxwZXIu
Ci0KLSAgICAvLyBQYXJzZSB0aGUgdmFsdWVzLCBhbmQgdGhlbiB3b3JrIHdpdGggYSBjb3B5IG9m
IHRoZSBwYXJzZWQgdmFsdWVzCi0gICAgLy8gc28gd2UgY2FuIHJlc3RvcmUgdGhlIHZhbHVlcyB3
ZSBtYXkgbm90IHdhbnQgdG8gb3ZlcndyaXRlIGFmdGVyCi0gICAgLy8gd2UgZG8gdGhlIG11bHRp
cGxlIG1vbml0b3IgZml4ZXMuCiAgICAgV2luZG93RmVhdHVyZXMgcmF3RmVhdHVyZXModG9XZWJD
b3JlU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKGFyZ3NbMl0pKTsKLSAgICBXaW5kb3dG
ZWF0dXJlcyB3aW5kb3dGZWF0dXJlcyhyYXdGZWF0dXJlcyk7Ci0gICAgRmxvYXRSZWN0IHNjcmVl
blJlY3QgPSBzY3JlZW5BdmFpbGFibGVSZWN0KHBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkpOwot
Ci0gICAgLy8gU2V0IGRlZmF1bHQgc2l6ZSBhbmQgbG9jYXRpb24gbmVhciBwYXJlbnQgd2luZG93
IGlmIG5vbmUgd2VyZSBzcGVjaWZpZWQuCi0gICAgLy8gVGhlc2UgbWF5IGJlIGZ1cnRoZXIgbW9k
aWZpZWQgYnkgYWRqdXN0V2luZG93UmVjdCwgYmVsb3cuCi0gICAgaWYgKCF3aW5kb3dGZWF0dXJl
cy54U2V0KSB7Ci0gICAgICAgIHdpbmRvd0ZlYXR1cmVzLnggPSBwYXJlbnQtPnNjcmVlblgoKSAt
IHNjcmVlblJlY3QueCgpICsgcG9wdXBUaWxlUGl4ZWxzOwotICAgICAgICB3aW5kb3dGZWF0dXJl
cy54U2V0ID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKCF3aW5kb3dGZWF0dXJlcy55U2V0KSB7Ci0g
ICAgICAgIHdpbmRvd0ZlYXR1cmVzLnkgPSBwYXJlbnQtPnNjcmVlblkoKSAtIHNjcmVlblJlY3Qu
eSgpICsgcG9wdXBUaWxlUGl4ZWxzOwotICAgICAgICB3aW5kb3dGZWF0dXJlcy55U2V0ID0gdHJ1
ZTsKLSAgICB9Ci0gICAgaWYgKCF3aW5kb3dGZWF0dXJlcy53aWR0aFNldCkgewotICAgICAgICB3
aW5kb3dGZWF0dXJlcy53aWR0aCA9IHBhcmVudC0+aW5uZXJXaWR0aCgpOwotICAgICAgICB3aW5k
b3dGZWF0dXJlcy53aWR0aFNldCA9IHRydWU7Ci0gICAgfQotICAgIGlmICghd2luZG93RmVhdHVy
ZXMuaGVpZ2h0U2V0KSB7Ci0gICAgICAgIHdpbmRvd0ZlYXR1cmVzLmhlaWdodCA9IHBhcmVudC0+
aW5uZXJIZWlnaHQoKTsKLSAgICAgICAgd2luZG93RmVhdHVyZXMuaGVpZ2h0U2V0ID0gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBGbG9hdFJlY3Qgd2luZG93UmVjdCh3aW5kb3dGZWF0dXJlcy54LCB3aW5k
b3dGZWF0dXJlcy55LCB3aW5kb3dGZWF0dXJlcy53aWR0aCwgd2luZG93RmVhdHVyZXMuaGVpZ2h0
KTsKLQotICAgIC8vIFRoZSBuZXcgd2luZG93J3MgbG9jYXRpb24gaXMgcmVsYXRpdmUgdG8gaXRz
IGN1cnJlbnQgc2NyZWVuLCBzbyBzaGlmdAotICAgIC8vIGl0IGluIGNhc2UgaXQncyBvbiBhIHNl
Y29uZGFyeSBtb25pdG9yLiBTZWUgaHR0cDovL2Ivdmlld0lzc3VlP2lkPTk2NzkwNS4KLSAgICB3
aW5kb3dSZWN0Lm1vdmUoc2NyZWVuUmVjdC54KCksIHNjcmVlblJlY3QueSgpKTsKLSAgICBXZWJD
b3JlOjpET01XaW5kb3c6OmFkanVzdFdpbmRvd1JlY3Qoc2NyZWVuUmVjdCwgd2luZG93UmVjdCwg
d2luZG93UmVjdCk7Ci0KLSAgICB3aW5kb3dGZWF0dXJlcy54ID0gd2luZG93UmVjdC54KCk7Ci0g
ICAgd2luZG93RmVhdHVyZXMueSA9IHdpbmRvd1JlY3QueSgpOwotICAgIHdpbmRvd0ZlYXR1cmVz
LmhlaWdodCA9IHdpbmRvd1JlY3QuaGVpZ2h0KCk7Ci0gICAgd2luZG93RmVhdHVyZXMud2lkdGgg
PSB3aW5kb3dSZWN0LndpZHRoKCk7Ci0KLSAgICAvLyBJZiBlaXRoZXIgb2YgdGhlIG9yaWdpbiBj
b29yZGluYXRlcyBvciBkaW1lbnNpb25zIHdlcmVuJ3Qgc2V0IGluIHRoZSBvcmlnaW5hbAotICAg
IC8vIHN0cmluZywgbWFrZSBzdXJlIHRoZXkgYXJlbid0IHNldCBub3cuCi0gICAgaWYgKCFyYXdG
ZWF0dXJlcy54U2V0KSB7Ci0gICAgICAgIHdpbmRvd0ZlYXR1cmVzLnggPSAwOwotICAgICAgICB3
aW5kb3dGZWF0dXJlcy54U2V0ID0gZmFsc2U7Ci0gICAgfQotICAgIGlmICghcmF3RmVhdHVyZXMu
eVNldCkgewotICAgICAgICB3aW5kb3dGZWF0dXJlcy55ID0gMDsKLSAgICAgICAgd2luZG93RmVh
dHVyZXMueVNldCA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAoIXJhd0ZlYXR1cmVzLndpZHRoU2V0
KSB7Ci0gICAgICB3aW5kb3dGZWF0dXJlcy53aWR0aCA9IDA7Ci0gICAgICB3aW5kb3dGZWF0dXJl
cy53aWR0aFNldCA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAoIXJhd0ZlYXR1cmVzLmhlaWdodFNl
dCkgewotICAgICAgd2luZG93RmVhdHVyZXMuaGVpZ2h0ID0gMDsKLSAgICAgIHdpbmRvd0ZlYXR1
cmVzLmhlaWdodFNldCA9IGZhbHNlOwotICAgIH0KLQotICAgIGZyYW1lID0gVjhCaW5kaW5nRE9N
V2luZG93OjpjcmVhdGVXaW5kb3coVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgY2FsbGluZ0ZyYW1l
LCBlbnRlcmVkRnJhbWUsIGZyYW1lLCB1cmxTdHJpbmcsIGZyYW1lTmFtZSwgd2luZG93RmVhdHVy
ZXMsIHY4OjpMb2NhbDx2ODo6VmFsdWU+KCkpOworICAgIERPTVdpbmRvdyogY2hpbGQgPSBWOEJp
bmRpbmdET01XaW5kb3c6Om9wZW4oVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgcGFyZW50LCB1cmxT
dHJpbmcsIGZyYW1lTmFtZSwgcmF3RmVhdHVyZXMpOwogCi0gICAgaWYgKCFmcmFtZSkKKyAgICBp
ZiAoIWNoaWxkKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCi0gICAgcmV0dXJu
IHRvVjgoZnJhbWUtPmRvbVdpbmRvdygpKTsKKyAgICByZXR1cm4gdG9WOChjaGlsZCk7CiB9CiAK
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9zcGVjaWFsaXphdGlvbi9WOEJpbmRp
bmdTdGF0ZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L3NwZWNpYWxpemF0aW9uL1Y4QmluZGlu
Z1N0YXRlLmNwcAppbmRleCA0NzEwMjcxZWZjOWRmYTlhZWU1OWFmZWIzMGU5MzI0NjI0ZmM5ZmU0
Li44OWU5YjE0YTEwYTU0YWE1YmJjODgwYWQ2ZmRiMmJhZmE4M2UzODc3IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L3NwZWNpYWxpemF0aW9uL1Y4QmluZGluZ1N0YXRlLmNwcAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L3NwZWNpYWxpemF0aW9uL1Y4QmluZGluZ1N0YXRlLmNwcApA
QCAtMSwxMCArMSwxMCBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCiAgKiBtZXQ6Ci0gKiAKKyAqCiAgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQpA
QCAtMTQsNyArMTQsNyBAQAogICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwogICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKKyAqCiAgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCiAgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAogICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCkBAIC0zMSw2ICszMSw4IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKIAorI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUg
IlY4UHJveHkuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTUzLDkgKzU1
LDI1IEBAIERPTVdpbmRvdyogU3RhdGU8VjhCaW5kaW5nPjo6Z2V0QWN0aXZlV2luZG93KCkKICAg
ICByZXR1cm4gVjhQcm94eTo6cmV0cmlldmVXaW5kb3coYWN0aXZlQ29udGV4dCk7CiB9CiAKK0Zy
YW1lKiBTdGF0ZTxWOEJpbmRpbmc+OjpnZXRBY3RpdmVGcmFtZSgpCit7CisgICAgcmV0dXJuIFY4
UHJveHk6OnJldHJpZXZlRnJhbWVGb3JDdXJyZW50Q29udGV4dCgpOworfQorCitGcmFtZSogU3Rh
dGU8VjhCaW5kaW5nPjo6Z2V0Rmlyc3RGcmFtZSgpCit7CisgICAgcmV0dXJuIFY4UHJveHk6OnJl
dHJpZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4dCgpOworfQorCiB2b2lkIFN0YXRlPFY4QmluZGlu
Zz46OmltbWVkaWF0ZWx5UmVwb3J0VW5zYWZlQWNjZXNzVG8oRnJhbWUqIHRhcmdldCkKIHsKICAg
ICBWOFByb3h5OjpyZXBvcnRVbnNhZmVBY2Nlc3NUbyh0YXJnZXQsIFY4UHJveHk6OlJlcG9ydE5v
dyk7CiB9CiAKK2Jvb2wgU3RhdGU8VjhCaW5kaW5nPjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkK
K3sKKyAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENv
bnRleHQoKTsKKyAgICByZXR1cm4gZnJhbWUgJiYgZnJhbWUtPnNjcmlwdCgpLT5wcm9jZXNzaW5n
VXNlckdlc3R1cmUoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9zcGVjaWFsaXphdGlvbi9WOEJpbmRpbmdTdGF0ZS5oIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9zcGVjaWFsaXphdGlvbi9WOEJpbmRpbmdTdGF0ZS5oCmluZGV4IGYz
MDVjMTQ1MTA1NzNlZDMwZDY3ZjVkZThiY2ZhOTAwNzcyOGQxZjYuLmJhYmEwYzYzYzA4OGZmNzE0
ODU4ZDRkMDZiOWRmZmNiYzA0MWE3MmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
c3BlY2lhbGl6YXRpb24vVjhCaW5kaW5nU3RhdGUuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4
L3NwZWNpYWxpemF0aW9uL1Y4QmluZGluZ1N0YXRlLmgKQEAgLTEsMTAgKzEsMTAgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IAorICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogICogbWV0OgotICogCisgKgog
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKICAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKQEAgLTE0LDcgKzE0LDcgQEAKICAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
ICAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCiAgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICogCisgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
ICAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgpAQCAtMzYsNiArMzYsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK2NsYXNzIEZyYW1lOworCiAvLyBTaW5nbGV0b24gaW1wbGVtZW50YXRpb24gb2YgU3RhdGU8
VjhCaW5kaW5nPi4gIFVzZXMgVjgncyBnbG9iYWwgZGF0YQogLy8gc3RydWN0dXJlcyB0byByZXR1
cm4gaW5mb3JtYXRpb24gYWJvdXQgcmVsZXZhbnQgZXhlY3V0aW9uIHN0YXRlLgogdGVtcGxhdGUg
PD4KQEAgLTQ0LDExICs0NiwxOSBAQCBwdWJsaWM6CiAgICAgLy8gU2luZ2xldG9uCiAgICAgc3Rh
dGljIFN0YXRlKiBPbmx5KCk7CiAKKyAgICAvLyBSZXBvcnRzIGFuIGVycm9yIG1lc3NhZ2UgKHdp
dGhvdXQgZGVsYXkpIGlmIHRoZSBzZWN1cml0eSBjaGVjayBmYWlscy4KKyAgICBzdGF0aWMgdm9p
ZCBpbW1lZGlhdGVseVJlcG9ydFVuc2FmZUFjY2Vzc1RvKEZyYW1lKik7CisKICAgICAvLyBUaGUg
RE9NV2luZG93IGNvcnJlc3BvbmRpbmcgdG8gdGhlICdjYWxsaW5nIGNvbnRleHQnIG9mIGV4ZWN1
dGlvbi4KICAgICBET01XaW5kb3cqIGdldEFjdGl2ZVdpbmRvdygpOwogCi0gICAgLy8gUmVwb3J0
cyBhbiBlcnJvciBtZXNzYWdlICh3aXRob3V0IGRlbGF5KSBpZiB0aGUgc2VjdXJpdHkgY2hlY2sg
ZmFpbHMuCi0gICAgc3RhdGljIHZvaWQgaW1tZWRpYXRlbHlSZXBvcnRVbnNhZmVBY2Nlc3NUbyhG
cmFtZSopOworICAgIC8vIFRoZSBmcmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSAnY2FsbGluZyBj
b250ZXh0JyBvZiBleGVjdXRpb24uCisgICAgRnJhbWUqIGdldEFjdGl2ZUZyYW1lKCk7CisKKyAg
ICAvLyBUaGUgZmlyc3QgZnJhbWUgaW4gd2hpY2ggZXhlY3V0aW9uIGVudGVyZWQgdXNlciBzY3Jp
cHQuCisgICAgRnJhbWUqIGdldEZpcnN0RnJhbWUoKTsKKworICAgIGJvb2wgcHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlKCk7CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgU3RhdGUoKSB7fQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63873</attachid>
            <date>2010-08-09 02:18:23 -0700</date>
            <delta_ts>2010-08-09 10:50:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-41392-20100809181821.patch</filename>
            <type>text/plain</type>
            <size>31892</size>
            <attacher name="Dominic Cooney">dominicc</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTEzNzI2MWZlZGM3OWE3NjMzMWMzMzcyZTNkODRkZjJlNmE2Nzc4Zi4uNzRiOTg0YmE1NGM2ZWQ4
MzE2MGY1OWRhMzUyZDc5OGM2ODkwMGM2NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MCBAQAorMjAxMC0wNy0wMSAgRG9t
aW5pYyBDb29uZXkgIDxkb21pbmljY0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmVzIHdpbmRvdy5vcGVuIGxvZ2ljIGludG8g
dGhlIGdlbmVyaWMgYmluZGluZ3MuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtb3ZlcyB3aW5kb3cu
b3BlbiBsb2dpYyBmcm9tIFY4IGludG8gdGhlIGdlbmVyaWMKKyAgICAgICAgYmluZGluZ3Mgc28g
aXQgY291bGQgYmUgc2hhcmVkIHdpdGggSlNDLiBKU0Mgc2hhcmluZyBpcyBub3QgaW4KKyAgICAg
ICAgdGhpcyBwYXRjaC4gVGhpcyBwYXRjaCBpcyBvZiB0aGUgc2FtZSBmbGF2b3IvaW50ZW50IGFz
IDMzMjAxLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00MTM5MgorCisgICAgICAgICogYmluZGluZ3MvZ2VuZXJpYy9CaW5kaW5nRE9NV2luZG93Lmg6
CisgICAgICAgIChXZWJDb3JlOjo6OmNyZWF0ZVdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjo6
Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6Ojpjb21wbGV0ZVVSTCk6CisgICAgICAgICogYmlu
ZGluZ3MvZ2VuZXJpYy9CaW5kaW5nU2VjdXJpdHkuaDoKKyAgICAgICAgKFdlYkNvcmU6Ojo6YWxs
b3dQb3BVcCk6CisgICAgICAgIChXZWJDb3JlOjo6OnNob3VsZEFsbG93TmF2aWdhdGlvbik6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvVjhCaW5kaW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpWOEJp
bmRpbmc6OmVtcHR5U2NyaXB0VmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4VXRpbGl0
aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRyYW5zZmVySGlkZGVuRGVwZW5kZW5jeSk6Cisg
ICAgICAgIChXZWJDb3JlOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6c2hvdWxkQWxsb3dOYXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBsZXRlVVJM
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhBcnJheUJ1ZmZlckN1c3RvbS5jcHA6
CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93OjpzaG93TW9kYWxEaWFsb2dDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvdzo6b3BlbkNhbGxiYWNrKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9zcGVjaWFsaXphdGlvbi9WOEJpbmRpbmdTdGF0ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjo6OmdldEFjdGl2ZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6Z2V0Rmlyc3RG
cmFtZSk6CisgICAgICAgIChXZWJDb3JlOjo6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSk6CisgICAg
ICAgICogYmluZGluZ3Mvdjgvc3BlY2lhbGl6YXRpb24vVjhCaW5kaW5nU3RhdGUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6Oik6CisKIDIwMTAtMDgtMDYgIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGd1
c3Rhdm8ubm9yb25oYUBjb2xsYWJvcmEuY28udWs+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFu
IExvcGV6LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0JpbmRpbmdET01X
aW5kb3cuaCBiL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9CaW5kaW5nRE9NV2luZG93LmgKaW5k
ZXggZjg4M2QxMTAyMzVkN2QzMDY4YzFjYmU1ZjdhOTIwMWU0ZWFmODE1OC4uZGRhNTY0NDE5Mzg0
OTYzY2FkMTYyM2FmODA0ODhlMDcwZjE1YThjYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5n
cy9nZW5lcmljL0JpbmRpbmdET01XaW5kb3cuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2dlbmVy
aWMvQmluZGluZ0RPTVdpbmRvdy5oCkBAIC0xLDEwICsxLDEwIEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKICAqIG1ldDoKLSAqIAorICoKICAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CiAgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCiAgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCkBAIC0xNCw3ICsxNCw3IEBACiAgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQogICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqIAorICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKQEAgLTMxLDExICszMSwxNyBAQAogI2lmbmRlZiBCaW5kaW5nRE9NV2luZG93X2gKICNk
ZWZpbmUgQmluZGluZ0RPTVdpbmRvd19oCiAKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNs
dWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNsdWRlICJG
cmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdlbmVyaWNC
aW5kaW5nLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgi
CisjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2lu
LmgiCisjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC01Miw2ICs1OCwyMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgV2luZG93RmVhdHVyZXMmIHdpbmRvd0ZlYXR1cmVzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEJpbmRpbmdWYWx1ZSBkaWFsb2dBcmdzKTsKKworICAgIHN0YXRpYyBX
ZWJDb3JlOjpET01XaW5kb3cqIG9wZW4oU3RhdGU8QmluZGluZz4qLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6RE9NV2luZG93KiBwYXJlbnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHVybCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZnJhbWVOYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2luZG93RmVhdHVyZXMmIHJh
d0ZlYXR1cmVzKTsKKworICAgIC8vIEZJWE1FOiBUaGVyZSBzaG91bGQgYmUgYSBwbGFjZSBmb3Ig
Z2VuZXJpYyBiaW5kaW5nIHV0aWxpdGllcy4KKyAgICBzdGF0aWMgS1VSTCBjb21wbGV0ZVVSTChT
dGF0ZTxCaW5kaW5nPiosIGNvbnN0IFN0cmluZyYgcmVsYXRpdmVVUkwpOworCitwcml2YXRlOgor
ICAgIC8vIEhvcml6b250YWwgYW5kIHZlcnRpY2FsIG9mZnNldCwgZnJvbSB0aGUgcGFyZW50IGNv
bnRlbnQgYXJlYSwKKyAgICAvLyBhcm91bmQgbmV3bHkgb3BlbmVkIHBvcHVwcyB0aGF0IGRvbid0
IHNwZWNpZnkgYSBsb2NhdGlvbi4KKyAgICBzdGF0aWMgY29uc3QgaW50IHBvcHVwVGlsZVBpeGVs
cyA9IDEwOwogfTsKIAogLy8gSW1wbGVtZW50YXRpb25zIG9mIHRlbXBsYXRlZCBtZXRob2RzIG11
c3QgYmUgaW4gdGhpcyBmaWxlLgpAQCAtMTAzLDggKzEyMyw4IEBAIEZyYW1lKiBCaW5kaW5nRE9N
V2luZG93PEJpbmRpbmc+OjpjcmVhdGVXaW5kb3coU3RhdGU8QmluZGluZz4qIHN0YXRlLAogCiAg
ICAgaWYgKCFwcm90b2NvbElzSmF2YVNjcmlwdCh1cmwpIHx8IEJpbmRpbmdTZWN1cml0eTxCaW5k
aW5nPjo6Y2FuQWNjZXNzRnJhbWUoc3RhdGUsIG5ld0ZyYW1lLCB0cnVlKSkgewogICAgICAgICBL
VVJMIGNvbXBsZXRlZFVybCA9Ci0gICAgICAgICAgICB1cmwuaXNFbXB0eSgpID8gS1VSTChQYXJz
ZWRVUkxTdHJpbmcsICIiKSA6IGNvbXBsZXRlVVJMKHVybCk7Ci0gICAgICAgIGJvb2wgdXNlckdl
c3R1cmUgPSBwcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKKyAgICAgICAgICAgIHVybC5pc0VtcHR5
KCkgPyBLVVJMKFBhcnNlZFVSTFN0cmluZywgIiIpIDogY29tcGxldGVVUkwoc3RhdGUsIHVybCk7
CisgICAgICAgIGJvb2wgdXNlckdlc3R1cmUgPSBzdGF0ZS0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KCk7CiAKICAgICAgICAgaWYgKGNyZWF0ZWQpCiAgICAgICAgICAgICBuZXdGcmFtZS0+bG9hZGVy
KCktPmNoYW5nZUxvY2F0aW9uKGNvbXBsZXRlZFVybCwgcmVmZXJyZXIsIGZhbHNlLCBmYWxzZSwg
dXNlckdlc3R1cmUpOwpAQCAtMTE1LDYgKzEzNSwxNTMgQEAgRnJhbWUqIEJpbmRpbmdET01XaW5k
b3c8QmluZGluZz46OmNyZWF0ZVdpbmRvdyhTdGF0ZTxCaW5kaW5nPiogc3RhdGUsCiAgICAgcmV0
dXJuIG5ld0ZyYW1lOwogfQogCit0ZW1wbGF0ZTxjbGFzcyBCaW5kaW5nPgorV2ViQ29yZTo6RE9N
V2luZG93KiBCaW5kaW5nRE9NV2luZG93PEJpbmRpbmc+OjpvcGVuKFN0YXRlPEJpbmRpbmc+KiBz
dGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXZWJDb3JlOjpET01XaW5kb3cqIHBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHVybFN0cmluZywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJp
bmcmIGZyYW1lTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBXaW5kb3dGZWF0dXJlcyYgcmF3RmVhdHVyZXMpCit7CisgICAgRnJh
bWUqIGZyYW1lID0gcGFyZW50LT5mcmFtZSgpOworCisgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk8
QmluZGluZz46OmNhbkFjY2Vzc0ZyYW1lKHN0YXRlLCBmcmFtZSwgdHJ1ZSkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgRnJhbWUqIGZpcnN0RnJhbWUgPSBzdGF0ZS0+Z2V0Rmlyc3RGcmFtZSgp
OworICAgIGlmICghZmlyc3RGcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBGcmFtZSog
YWN0aXZlRnJhbWUgPSBzdGF0ZS0+Z2V0QWN0aXZlRnJhbWUoKTsKKyAgICAvLyBXZSBtYXkgbm90
IGhhdmUgYSBjYWxsaW5nIGNvbnRleHQgaWYgd2UgYXJlIGludm9rZWQgYnkgYSBwbHVnaW4KKyAg
ICAvLyB2aWEgTlBBUEkuCisgICAgaWYgKCFhY3RpdmVGcmFtZSkKKyAgICAgICAgYWN0aXZlRnJh
bWUgPSBmaXJzdEZyYW1lOworCisgICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7CisgICAg
aWYgKCFwYWdlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIEJlY2F1c2UgRnJhbWVUcmVl
OjpmaW5kKCkgcmV0dXJucyB0cnVlIGZvciBlbXB0eSBzdHJpbmdzLCB3ZSBtdXN0IGNoZWNrCisg
ICAgLy8gZm9yIGVtcHR5IGZyYW1lbmFtZXMuIE90aGVyd2lzZSwgaWxsZWdpdGltYXRlIHdpbmRv
dy5vcGVuKCkgY2FsbHMgd2l0aAorICAgIC8vIG5vIG5hbWUgd2lsbCBwYXNzIHJpZ2h0IHRocm91
Z2ggdGhlIHBvcHVwIGJsb2NrZXIuCisgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk8QmluZGluZz46
OmFsbG93UG9wVXAoc3RhdGUpCisgICAgICAgICYmIChmcmFtZU5hbWUuaXNFbXB0eSgpIHx8ICFm
cmFtZS0+dHJlZSgpLT5maW5kKGZyYW1lTmFtZSkpKSB7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKworICAgIC8vIEdldCB0aGUgdGFyZ2V0IGZyYW1lIGZvciB0aGUgc3BlY2lhbCBjYXNlcyBv
ZiBfdG9wIGFuZCBfcGFyZW50LgorICAgIC8vIEluIHRob3NlIGNhc2VzLCB3ZSBjYW4gc2NoZWR1
bGUgYSBsb2NhdGlvbiBjaGFuZ2UgcmlnaHQgbm93IGFuZAorICAgIC8vIHJldHVybiBlYXJseS4K
KyAgICBib29sIHRvcE9yUGFyZW50ID0gZmFsc2U7CisgICAgaWYgKGZyYW1lTmFtZSA9PSAiX3Rv
cCIpIHsKKyAgICAgICAgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50b3AoKTsKKyAgICAgICAgdG9w
T3JQYXJlbnQgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoZnJhbWVOYW1lID09ICJfcGFyZW50Iikg
eworICAgICAgICBpZiAoRnJhbWUqIHBhcmVudCA9IGZyYW1lLT50cmVlKCktPnBhcmVudCgpKQor
ICAgICAgICAgICAgZnJhbWUgPSBwYXJlbnQ7CisgICAgICAgIHRvcE9yUGFyZW50ID0gdHJ1ZTsK
KyAgICB9CisgICAgaWYgKHRvcE9yUGFyZW50KSB7CisgICAgICAgIGlmICghQmluZGluZ1NlY3Vy
aXR5PEJpbmRpbmc+OjpzaG91bGRBbGxvd05hdmlnYXRpb24oc3RhdGUsIGZyYW1lKSkKKyAgICAg
ICAgICAgIHJldHVybiAwOworCisgICAgICAgIFN0cmluZyBjb21wbGV0ZWRVcmw7CisgICAgICAg
IGlmICghdXJsU3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbXBsZXRlZFVybCA9IGNv
bXBsZXRlVVJMKHN0YXRlLCB1cmxTdHJpbmcpOworCisgICAgICAgIGlmICghY29tcGxldGVkVXJs
LmlzRW1wdHkoKQorICAgICAgICAgICAgJiYgKCFwcm90b2NvbElzSmF2YVNjcmlwdChjb21wbGV0
ZWRVcmwpCisgICAgICAgICAgICAgICAgfHwgQmluZGluZ1NlY3VyaXR5PEJpbmRpbmc+OjpjYW5B
Y2Nlc3NGcmFtZShzdGF0ZSwgZnJhbWUsIHRydWUpKSkgeworICAgICAgICAgICAgYm9vbCB1c2Vy
R2VzdHVyZSA9IHN0YXRlLT5wcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKKworICAgICAgICAgICAg
Ly8gRm9yIHdoYXRldmVyIHJlYXNvbiwgRmlyZWZveCB1c2VzIHRoZSBmaXJzdCBmcmFtZSB0byBk
ZXRlcm1pbmUKKyAgICAgICAgICAgIC8vIHRoZSBvdXRnb2luZ1JlZmVycmVyLiAgV2UgcmVwbGlj
YXRlIHRoYXQgYmVoYXZpb3IgaGVyZS4KKyAgICAgICAgICAgIFN0cmluZyByZWZlcnJlciA9IGZp
cnN0RnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCk7CisKKyAgICAgICAgICAgIGZy
YW1lLT5yZWRpcmVjdFNjaGVkdWxlcigpLT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKGNvbXBsZXRl
ZFVybCwgcmVmZXJyZXIsIGZhbHNlLCBmYWxzZSwgdXNlckdlc3R1cmUpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBmcmFtZS0+ZG9tV2luZG93KCk7CisgICAgfQorCisgICAgLy8gSW4gdGhl
IGNhc2Ugb2YgYSBuYW1lZCBmcmFtZSBvciBhIG5ldyB3aW5kb3csIHdlJ2xsIHVzZSB0aGUKKyAg
ICAvLyBjcmVhdGVXaW5kb3coKSBoZWxwZXIuCisKKyAgICAvLyBXb3JrIHdpdGggYSBjb3B5IG9m
IHRoZSBwYXJzZWQgdmFsdWVzIHNvIHdlIGNhbiByZXN0b3JlIHRoZQorICAgIC8vIHZhbHVlcyB3
ZSBtYXkgbm90IHdhbnQgdG8gb3ZlcndyaXRlIGFmdGVyIHdlIGRvIHRoZSBtdWx0aXBsZQorICAg
IC8vIG1vbml0b3IgZml4ZXMuCisgICAgV2luZG93RmVhdHVyZXMgd2luZG93RmVhdHVyZXMocmF3
RmVhdHVyZXMpOworICAgIEZsb2F0UmVjdCBzY3JlZW5SZWN0ID0gc2NyZWVuQXZhaWxhYmxlUmVj
dChwYWdlLT5tYWluRnJhbWUoKS0+dmlldygpKTsKKworICAgIC8vIFNldCBkZWZhdWx0IHNpemUg
YW5kIGxvY2F0aW9uIG5lYXIgcGFyZW50IHdpbmRvdyBpZiBub25lIHdlcmUgc3BlY2lmaWVkLgor
ICAgIC8vIFRoZXNlIG1heSBiZSBmdXJ0aGVyIG1vZGlmaWVkIGJ5IGFkanVzdFdpbmRvd1JlY3Qs
IGJlbG93LgorICAgIGlmICghd2luZG93RmVhdHVyZXMueFNldCkgeworICAgICAgICB3aW5kb3dG
ZWF0dXJlcy54ID0gcGFyZW50LT5zY3JlZW5YKCkgLSBzY3JlZW5SZWN0LngoKSArIHBvcHVwVGls
ZVBpeGVsczsKKyAgICAgICAgd2luZG93RmVhdHVyZXMueFNldCA9IHRydWU7CisgICAgfQorICAg
IGlmICghd2luZG93RmVhdHVyZXMueVNldCkgeworICAgICAgICB3aW5kb3dGZWF0dXJlcy55ID0g
cGFyZW50LT5zY3JlZW5ZKCkgLSBzY3JlZW5SZWN0LnkoKSArIHBvcHVwVGlsZVBpeGVsczsKKyAg
ICAgICAgd2luZG93RmVhdHVyZXMueVNldCA9IHRydWU7CisgICAgfQorICAgIGlmICghd2luZG93
RmVhdHVyZXMud2lkdGhTZXQpIHsKKyAgICAgICAgd2luZG93RmVhdHVyZXMud2lkdGggPSBwYXJl
bnQtPmlubmVyV2lkdGgoKTsKKyAgICAgICAgd2luZG93RmVhdHVyZXMud2lkdGhTZXQgPSB0cnVl
OworICAgIH0KKyAgICBpZiAoIXdpbmRvd0ZlYXR1cmVzLmhlaWdodFNldCkgeworICAgICAgICB3
aW5kb3dGZWF0dXJlcy5oZWlnaHQgPSBwYXJlbnQtPmlubmVySGVpZ2h0KCk7CisgICAgICAgIHdp
bmRvd0ZlYXR1cmVzLmhlaWdodFNldCA9IHRydWU7CisgICAgfQorCisgICAgRmxvYXRSZWN0IHdp
bmRvd1JlY3Qod2luZG93RmVhdHVyZXMueCwgd2luZG93RmVhdHVyZXMueSwgd2luZG93RmVhdHVy
ZXMud2lkdGgsIHdpbmRvd0ZlYXR1cmVzLmhlaWdodCk7CisKKyAgICAvLyBUaGUgbmV3IHdpbmRv
dydzIGxvY2F0aW9uIGlzIHJlbGF0aXZlIHRvIGl0cyBjdXJyZW50IHNjcmVlbiwgc28gc2hpZnQK
KyAgICAvLyBpdCBpbiBjYXNlIGl0J3Mgb24gYSBzZWNvbmRhcnkgbW9uaXRvci4gU2VlIGh0dHA6
Ly9iL3ZpZXdJc3N1ZT9pZD05Njc5MDUuCisgICAgd2luZG93UmVjdC5tb3ZlKHNjcmVlblJlY3Qu
eCgpLCBzY3JlZW5SZWN0LnkoKSk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93OjphZGp1c3RXaW5k
b3dSZWN0KHNjcmVlblJlY3QsIHdpbmRvd1JlY3QsIHdpbmRvd1JlY3QpOworCisgICAgd2luZG93
RmVhdHVyZXMueCA9IHdpbmRvd1JlY3QueCgpOworICAgIHdpbmRvd0ZlYXR1cmVzLnkgPSB3aW5k
b3dSZWN0LnkoKTsKKyAgICB3aW5kb3dGZWF0dXJlcy5oZWlnaHQgPSB3aW5kb3dSZWN0LmhlaWdo
dCgpOworICAgIHdpbmRvd0ZlYXR1cmVzLndpZHRoID0gd2luZG93UmVjdC53aWR0aCgpOworCisg
ICAgLy8gSWYgZWl0aGVyIG9mIHRoZSBvcmlnaW4gY29vcmRpbmF0ZXMgb3IgZGltZW5zaW9ucyB3
ZXJlbid0IHNldAorICAgIC8vIGluIHRoZSBvcmlnaW5hbCBzdHJpbmcsIG1ha2Ugc3VyZSB0aGV5
IGFyZW4ndCBzZXQgbm93LgorICAgIGlmICghcmF3RmVhdHVyZXMueFNldCkgeworICAgICAgICB3
aW5kb3dGZWF0dXJlcy54ID0gMDsKKyAgICAgICAgd2luZG93RmVhdHVyZXMueFNldCA9IGZhbHNl
OworICAgIH0KKyAgICBpZiAoIXJhd0ZlYXR1cmVzLnlTZXQpIHsKKyAgICAgICAgd2luZG93RmVh
dHVyZXMueSA9IDA7CisgICAgICAgIHdpbmRvd0ZlYXR1cmVzLnlTZXQgPSBmYWxzZTsKKyAgICB9
CisgICAgaWYgKCFyYXdGZWF0dXJlcy53aWR0aFNldCkgeworICAgICAgd2luZG93RmVhdHVyZXMu
d2lkdGggPSAwOworICAgICAgd2luZG93RmVhdHVyZXMud2lkdGhTZXQgPSBmYWxzZTsKKyAgICB9
CisgICAgaWYgKCFyYXdGZWF0dXJlcy5oZWlnaHRTZXQpIHsKKyAgICAgIHdpbmRvd0ZlYXR1cmVz
LmhlaWdodCA9IDA7CisgICAgICB3aW5kb3dGZWF0dXJlcy5oZWlnaHRTZXQgPSBmYWxzZTsKKyAg
ICB9CisKKyAgICBmcmFtZSA9IGNyZWF0ZVdpbmRvdyhzdGF0ZSwgYWN0aXZlRnJhbWUsIGZpcnN0
RnJhbWUsIGZyYW1lLCB1cmxTdHJpbmcsIGZyYW1lTmFtZSwgd2luZG93RmVhdHVyZXMsIEJpbmRp
bmc6OmVtcHR5U2NyaXB0VmFsdWUoKSk7CisKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHJldHVybiBmcmFtZS0+ZG9tV2luZG93KCk7Cit9CisKK3RlbXBsYXRlIDxj
bGFzcyBCaW5kaW5nPgorS1VSTCBCaW5kaW5nRE9NV2luZG93PEJpbmRpbmc+Ojpjb21wbGV0ZVVS
TChTdGF0ZTxCaW5kaW5nPiogc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcmVsYXRpdmVVUkwpCit7CisgICAgLy8gRm9yIGhp
c3RvcmljYWwgcmVhc29ucywgd2UgbmVlZCB0byBjb21wbGV0ZSB0aGUgVVJMIHVzaW5nIHRoZQor
ICAgIC8vIGR5bmFtaWMgZnJhbWUuCisgICAgRnJhbWUqIGZyYW1lID0gc3RhdGUtPmdldEZpcnN0
RnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gS1VSTCgpOworICAgIHJl
dHVybiBmcmFtZS0+bG9hZGVyKCktPmNvbXBsZXRlVVJMKHJlbGF0aXZlVVJMKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gQmluZGluZ0RPTVdpbmRvd19oCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvQmluZGluZ1NlY3VyaXR5LmggYi9XZWJD
b3JlL2JpbmRpbmdzL2dlbmVyaWMvQmluZGluZ1NlY3VyaXR5LmgKaW5kZXggZDdjOWRmZTIyZDEy
ZjFiZjkzMDVhYzg0YjcxMzJkZjdkOTM2M2VhNi4uMTEyNGY3ZWY2ZTc2ZTNhYThlYWZjNzkyMDY1
YWE2ODJiMWEwNTRlNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0JpbmRp
bmdTZWN1cml0eS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9CaW5kaW5nU2VjdXJp
dHkuaApAQCAtMzQsMTQgKzM0LDE1IEBACiAjaW5jbHVkZSAiQmluZGluZ1NlY3VyaXR5QmFzZS5o
IgogI2luY2x1ZGUgIkNTU0hlbHBlci5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJGcmFtZS5oIgogI2luY2x1ZGUgIkdlbmVyaWNCaW5kaW5nLmgiCiAjaW5jbHVkZSAiSFRNTEZy
YW1lRWxlbWVudEJhc2UuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJTZXR0
aW5ncy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERPTVdpbmRvdzsKLWNsYXNz
IEZyYW1lOwogY2xhc3MgTm9kZTsKIAogLy8gU2VjdXJpdHkgZnVuY3Rpb25zIHNoYXJlZCBieSB2
YXJpb3VzIGxhbmd1YWdlIGJpbmRpbmdzLgpAQCAtNTUsOSArNTYsMTIgQEAgcHVibGljOgogICAg
IC8vIGN1cnJlbnQgc2VjdXJpdHkgY29udGV4dC4KICAgICBzdGF0aWMgYm9vbCBjaGVja05vZGVT
ZWN1cml0eShTdGF0ZTxCaW5kaW5nPiosIE5vZGUqIHRhcmdldCk7CiAKKyAgICBzdGF0aWMgYm9v
bCBhbGxvd1BvcFVwKFN0YXRlPEJpbmRpbmc+Kik7CiAgICAgc3RhdGljIGJvb2wgYWxsb3dTZXR0
aW5nRnJhbWVTcmNUb0phdmFzY3JpcHRVcmwoU3RhdGU8QmluZGluZz4qLCBIVE1MRnJhbWVFbGVt
ZW50QmFzZSosIFN0cmluZyB2YWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgYWxsb3dTZXR0aW5nU3Jj
VG9KYXZhc2NyaXB0VVJMKFN0YXRlPEJpbmRpbmc+KiwgRWxlbWVudCosIFN0cmluZyBuYW1lLCBT
dHJpbmcgdmFsdWUpOwogCisgICAgc3RhdGljIGJvb2wgc2hvdWxkQWxsb3dOYXZpZ2F0aW9uKFN0
YXRlPEJpbmRpbmc+KiwgRnJhbWUqKTsKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBCaW5kaW5n
U2VjdXJpdHkoKSB7fQogICAgIH5CaW5kaW5nU2VjdXJpdHkoKTsKQEAgLTExMCw2ICsxMTQsMTgg
QEAgYm9vbCBCaW5kaW5nU2VjdXJpdHk8QmluZGluZz46OmNoZWNrTm9kZVNlY3VyaXR5KFN0YXRl
PEJpbmRpbmc+KiBzdGF0ZSwgTm9kZSogbm8KIH0KIAogdGVtcGxhdGUgPGNsYXNzIEJpbmRpbmc+
Citib29sIEJpbmRpbmdTZWN1cml0eTxCaW5kaW5nPjo6YWxsb3dQb3BVcChTdGF0ZTxCaW5kaW5n
Piogc3RhdGUpCit7CisgICAgaWYgKHN0YXRlLT5wcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBGcmFtZSogZnJhbWUgPSBzdGF0ZS0+Z2V0Rmlyc3RG
cmFtZSgpOworICAgIEFTU0VSVChmcmFtZSk7CisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZnJh
bWUtPnNldHRpbmdzKCk7CisgICAgcmV0dXJuIHNldHRpbmdzICYmIHNldHRpbmdzLT5qYXZhU2Ny
aXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5KCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBC
aW5kaW5nPgogYm9vbCBCaW5kaW5nU2VjdXJpdHk8QmluZGluZz46OmFsbG93U2V0dGluZ0ZyYW1l
U3JjVG9KYXZhc2NyaXB0VXJsKFN0YXRlPEJpbmRpbmc+KiBzdGF0ZSwgSFRNTEZyYW1lRWxlbWVu
dEJhc2UqIGZyYW1lLCBTdHJpbmcgdmFsdWUpCiB7CiAgICAgaWYgKHByb3RvY29sSXNKYXZhU2Ny
aXB0KGRlcHJlY2F0ZWRQYXJzZVVSTCh2YWx1ZSkpKSB7CkBAIC0xMjgsNiArMTQ0LDEzIEBAIGJv
b2wgQmluZGluZ1NlY3VyaXR5PEJpbmRpbmc+OjphbGxvd1NldHRpbmdTcmNUb0phdmFzY3JpcHRV
UkwoU3RhdGU8QmluZGluZz4qIHN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3RlbXBsYXRlIDxj
bGFzcyBCaW5kaW5nPgorYm9vbCBCaW5kaW5nU2VjdXJpdHk8QmluZGluZz46OnNob3VsZEFsbG93
TmF2aWdhdGlvbihTdGF0ZTxCaW5kaW5nPiogc3RhdGUsIEZyYW1lKiBmcmFtZSkKK3sKKyAgICBG
cmFtZSogYWN0aXZlRnJhbWUgPSBzdGF0ZS0+Z2V0QWN0aXZlRnJhbWUoKTsKKyAgICByZXR1cm4g
YWN0aXZlRnJhbWUgJiYgYWN0aXZlRnJhbWUtPmxvYWRlcigpLT5zaG91bGRBbGxvd05hdmlnYXRp
b24oZnJhbWUpOworfQorCiB9CiAKICNlbmRpZiAvLyBCaW5kaW5nU2VjdXJpdHlfaApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaCBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhCaW5kaW5nLmgKaW5kZXggYTE1ZWNlMTI0OTI0ZmIzN2IxMjhmYTYzZDY1Y2VhYzU4ZThh
ZTQ0YS4uODM4M2Y5NGYxZWNlNTgxMzJlYjQ4NmRlNTQxNzA3MmUzNzY5YTVmMyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4QmluZGluZy5oCkBAIC0xLDEwICsxLDEwIEBACiAvKgogKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSogCisqCiAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCiAqIG1ldDoKLSogCisqCiAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQpAQCAtMTQsNyArMTQsNyBAQAogKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0qIAorKgogKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCiAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCiAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpAQCAtNDAsNyArNDAsNyBAQAog
I2luY2x1ZGUgPHY4Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKKwogICAgIGNsYXNz
IEV2ZW50TGlzdGVuZXI7CiAgICAgY2xhc3MgRXZlbnRUYXJnZXQ7CiAgICAgY2xhc3MgVjhCaW5k
aW5nRE9NV2luZG93OwpAQCAtNTAsNiArNTAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
cHVibGljOgogICAgICAgICB0eXBlZGVmIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWYWx1ZTsKICAg
ICAgICAgdHlwZWRlZiBWOEJpbmRpbmdET01XaW5kb3cgRE9NV2luZG93OworCisgICAgICAgIHN0
YXRpYyBWYWx1ZSBlbXB0eVNjcmlwdFZhbHVlKCkgeyByZXR1cm4gdjg6OkxvY2FsPHY4OjpWYWx1
ZT4oKTsgfQogICAgIH07CiAgICAgdHlwZWRlZiBCaW5kaW5nU2VjdXJpdHk8VjhCaW5kaW5nPiBW
OEJpbmRpbmdTZWN1cml0eTsKICAgICAKQEAgLTE1Miw3ICsxNTQsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgewogICAgICAgICByZXR1cm4gdjhWYWx1ZVRvV2ViQ29yZVN0cmluZyhvYmpl
Y3QpOwogICAgIH0KLSAgICAKKwogICAgIFN0cmluZyB0b1dlYkNvcmVTdHJpbmcoY29uc3Qgdjg6
OkFyZ3VtZW50cyYsIGludCBpbmRleCk7CiAKICAgICAvLyBUaGUgc3RyaW5nIHJldHVybmVkIGJ5
IHRoaXMgZnVuY3Rpb24gaXMgc3RpbGwgb3duZWQgYnkgdGhlIGFyZ3VtZW50CkBAIC0xNzEsNyAr
MTczLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIEF0b21pY1N0cmluZyB0b0F0b21pY1dl
YkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSk7CiAK
ICAgICBTdHJpbmcgdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB2YWx1ZSk7Ci0gCisKICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+
IHY4VW5kZXRlY3RhYmxlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyKTsKIAogICAgIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB2OFN0cmluZ09yTnVsbChjb25zdCBTdHJpbmcmIHN0cik7CkBAIC0xODMs
MzEgKzE4NSwzMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgZG91YmxlIHRvV2ViQ29yZURh
dGUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iamVjdCk7CiAKICAgICB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdjhEYXRlT3JOdWxsKGRvdWJsZSB2YWx1ZSk7Ci0gICAgCisKICAgICB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gY3JlYXRlUmF3VGVtcGxhdGUoKTsKIAogICAgIHN0
cnVjdCBCYXRjaGVkQXR0cmlidXRlOwogICAgIHN0cnVjdCBCYXRjaGVkQ2FsbGJhY2s7Ci0gICAg
CisKICAgICB2ODo6TG9jYWw8djg6OlNpZ25hdHVyZT4gY29uZmlndXJlVGVtcGxhdGUodjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gcGFyZW50Q2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaWVsZENvdW50LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYXRjaGVkQXR0cmlidXRlKiwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJh
dGNoZWRBdHRyaWJ1dGUqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgYXR0cmlidXRlQ291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhdGNoZWRDYWxsYmFjayosCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjYWxsYmFja0NvdW50
KTsKLSAgICAKKwogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBnZXRFbGVtZW50U3RyaW5nQXR0
cihjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZvaWQgc2V0RWxl
bWVudFN0cmluZ0F0dHIoY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+KTsKIAotICAgIAorCiAgICAgdjg6OlBlcnNp
c3RlbnQ8djg6OlN0cmluZz4gZ2V0VG9TdHJpbmdOYW1lKCk7CiAgICAgdjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGdldFRvU3RyaW5nVGVtcGxhdGUoKTsKLSAgICAKKwogICAg
IC8vIFY4UGFyYW1ldGVyIGlzIGFuIGFkYXB0ZXIgY2xhc3MgdGhhdCBjb252ZXJ0cyBWOCB2YWx1
ZXMgdG8gU3RyaW5ncwogICAgIC8vIG9yIEF0b21pY1N0cmluZ3MgYXMgYXBwcm9wcmlhdGUsIHVz
aW5nIG11bHRpcGxlIHR5cGVjYXN0IG9wZXJhdG9ycy4KICAgICBlbnVtIFY4UGFyYW1ldGVyTW9k
ZSB7CkBAIC0yMjQsNyArMjI2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6
CiAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IG1fdjhPYmplY3Q7CiAgICAgfTsKLSAgICAK
KwogICAgIHRlbXBsYXRlPD4gaW5saW5lIFY4UGFyYW1ldGVyPERlZmF1bHRNb2RlPjo6b3BlcmF0
b3IgU3RyaW5nKCkgeyByZXR1cm4gdG9XZWJDb3JlU3RyaW5nKG1fdjhPYmplY3QpOyB9CiAgICAg
dGVtcGxhdGU8PiBpbmxpbmUgVjhQYXJhbWV0ZXI8V2l0aE51bGxDaGVjaz46Om9wZXJhdG9yIFN0
cmluZygpIHsgcmV0dXJuIHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2sobV92OE9iamVjdCk7
IH0KICAgICB0ZW1wbGF0ZTw+IGlubGluZSBWOFBhcmFtZXRlcjxXaXRoVW5kZWZpbmVkT3JOdWxs
Q2hlY2s+OjpvcGVyYXRvciBTdHJpbmcoKSB7IHJldHVybiB0b1dlYkNvcmVTdHJpbmdXaXRoTnVs
bE9yVW5kZWZpbmVkQ2hlY2sobV92OE9iamVjdCk7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhVdGlsaXRpZXMuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFV0aWxpdGll
cy5jcHAKaW5kZXggZjc4MDIxODdkMjE1OGIwOGIzYmIxMzYzMTYwZGMyMTc0NzYxMzEzZC4uMmU1
Y2Y4YjBmNTI3NmY3NzYzZmYzNjljNGU0MDU3MjM5ZmRhMGRiMCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOFV0aWxpdGllcy5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OFV0aWxpdGllcy5jcHAKQEAgLTM4LDYgKzM4LDggQEAKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRlICJWOEJpbmRp
bmcuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmdET01XaW5kb3cuaCIgLy8gRklYTUU6IHJlbW92ZSB3
aGVuIGNvbXBsZXRlVVJMIG1vdmVzCisjaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKICNpbmNs
dWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgIldv
cmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIgpAQCAtOTIsNDEgKzk0LDI1IEBAIHZvaWQgdHJh
bnNmZXJIaWRkZW5EZXBlbmRlbmN5KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0LAogICAg
IGlmICghbmV3VmFsdWUtPklzTnVsbCgpICYmICFuZXdWYWx1ZS0+SXNVbmRlZmluZWQoKSkKICAg
ICAgICAgY3JlYXRlSGlkZGVuRGVwZW5kZW5jeShvYmplY3QsIG5ld1ZhbHVlLCBjYWNoZUluZGV4
KTsKIH0KLSAgICAKIAogYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmUoKQogewotICAgIEZyYW1l
KiBmcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4dCgpOwotICAg
IHJldHVybiBmcmFtZSAmJiBmcmFtZS0+c2NyaXB0KCktPnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgp
OworICAgIHJldHVybiBWOEJpbmRpbmdTdGF0ZTo6T25seSgpLT5wcm9jZXNzaW5nVXNlckdlc3R1
cmUoKTsKIH0KIAogRnJhbWUqIGNhbGxpbmdPckVudGVyZWRGcmFtZSgpCiB7Ci0gICAgRnJhbWUq
IGZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckNhbGxpbmdDb250ZXh0KCk7Ci0gICAg
aWYgKCFmcmFtZSkgewotICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5LCB3aGVuIHByb2Nlc3Npbmcg
c2NyaXB0IGZyb20gYSBwbHVnLWluLCB3ZSBtaWdodCBub3QKLSAgICAgICAgLy8gaGF2ZSBhIGNh
bGxpbmcgY29udGV4dC4gIEluIHRob3NlIGNhc2VzLCB3ZSBmYWxsIGJhY2sgdG8gdGhlCi0gICAg
ICAgIC8vIGVudGVyZWQgY29udGV4dCBmb3Igc2VjdXJpdHkgY2hlY2tzLgotICAgICAgICAvLyBG
SVhNRTogV2UgbmVlZCBhIGJldHRlciBBUEkgZm9yIHJldHJpZXZpbmcgZnJhbWVzIHRoYXQgYWJz
dHJhY3RzCi0gICAgICAgIC8vICAgICAgICBhd2F5IHRoaXMgY29uY2Vybi4KLSAgICAgICAgZnJh
bWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGZyYW1lOworICAgIHJldHVybiBWOEJpbmRpbmdTdGF0ZTo6T25seSgpLT5nZXRB
Y3RpdmVGcmFtZSgpOwogfQogCiBib29sIHNob3VsZEFsbG93TmF2aWdhdGlvbihGcmFtZSogZnJh
bWUpCiB7Ci0gICAgRnJhbWUqIGNhbGxpbmdPckVudGVyZWQgPSBjYWxsaW5nT3JFbnRlcmVkRnJh
bWUoKTsKLSAgICByZXR1cm4gY2FsbGluZ09yRW50ZXJlZCAmJiBjYWxsaW5nT3JFbnRlcmVkLT5s
b2FkZXIoKS0+c2hvdWxkQWxsb3dOYXZpZ2F0aW9uKGZyYW1lKTsKKyAgICByZXR1cm4gVjhCaW5k
aW5nU2VjdXJpdHk6OnNob3VsZEFsbG93TmF2aWdhdGlvbihWOEJpbmRpbmdTdGF0ZTo6T25seSgp
LCBmcmFtZSk7CiB9CiAKIEtVUkwgY29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiByZWxhdGl2ZVVS
TCkKIHsKLSAgICAvLyBGb3IgaGlzdG9pY2FsIHJlYXNvbnMsIHdlIG5lZWQgdG8gY29tcGxldGUg
dGhlIFVSTCB1c2luZyB0aGUgZHluYW1pYyBmcmFtZS4KLSAgICBGcmFtZSogZnJhbWUgPSBWOFBy
b3h5OjpyZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKTsKLSAgICBpZiAoIWZyYW1lKQot
ICAgICAgICByZXR1cm4gS1VSTCgpOwotICAgIHJldHVybiBmcmFtZS0+bG9hZGVyKCktPmNvbXBs
ZXRlVVJMKHJlbGF0aXZlVVJMKTsKKyAgICByZXR1cm4gVjhCaW5kaW5nRE9NV2luZG93Ojpjb21w
bGV0ZVVSTChWOEJpbmRpbmdTdGF0ZTo6T25seSgpLCByZWxhdGl2ZVVSTCk7CiB9CiAKIHZvaWQg
bmF2aWdhdGVJZkFsbG93ZWQoRnJhbWUqIGZyYW1lLCBjb25zdCBLVVJMJiB1cmwsIGJvb2wgbG9j
a0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4QXJyYXlCdWZmZXJDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhBcnJheUJ1ZmZlckN1c3RvbS5jcHAKaW5kZXggNTAxZTVhMmRlM2Vh
ODc3OGI2MjBlMTllOTU3YjU0YTg5MWIzNzZjZS4uMzA1ZmIxODU4ZTljNjAyMDFmYmQwN2Y1ZDVl
YTI5MGYzOGIxNDg2NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhB
cnJheUJ1ZmZlckN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhB
cnJheUJ1ZmZlckN1c3RvbS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkFycmF5
QnVmZmVyLmgiCiAKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiVjhCaW5k
aW5nLmgiCiAjaW5jbHVkZSAiVjhBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9t
LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcApp
bmRleCBiNGZhNzRmN2U5ZDRjM2U4OWY2M2E2ZWYzYzNhMWJlMjlmNzg1MDk2Li5jZmYyNTIzODQ4
ZTY4MDQ3NTk1NDNjMDE1MjQ1YjY4MjA5YTBiYTZlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCkBAIC04MiwxMCArODIsNiBAQAogI2Vu
ZGlmCiAjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKIAotLy8gSG9yaXpvbnRhbCBhbmQgdmVy
dGljYWwgb2Zmc2V0LCBmcm9tIHRoZSBwYXJlbnQgY29udGVudCBhcmVhLCBhcm91bmQgbmV3bHkK
LS8vIG9wZW5lZCBwb3B1cHMgdGhhdCBkb24ndCBzcGVjaWZ5IGEgbG9jYXRpb24uCi1zdGF0aWMg
Y29uc3QgaW50IHBvcHVwVGlsZVBpeGVscyA9IDEwOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBXaW5kb3dTZXRUaW1lb3V0SW1wbChjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcmdzLCBib29sIHNpbmdsZVNob3QpCkBAIC00NDksMTcgKzQ0NSw2IEBAIHN0YXRp
YyBib29sIGNhblNob3dNb2RhbERpYWxvZ05vdyhjb25zdCBGcmFtZSogZnJhbWUpCiAgICAgcmV0
dXJuIGZyYW1lLT5wYWdlKCktPmNocm9tZSgpLT5jYW5SdW5Nb2RhbE5vdygpOwogfQogCi1zdGF0
aWMgYm9vbCBhbGxvd1BvcFVwKCkKLXsKLSAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRy
aWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKTsKLQotICAgIEFTU0VSVChmcmFtZSk7Ci0gICAg
aWYgKGZyYW1lLT5zY3JpcHQoKS0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGZyYW1lLT5zZXR0aW5ncygpOwot
ICAgIHJldHVybiBzZXR0aW5ncyAmJiBzZXR0aW5ncy0+amF2YVNjcmlwdENhbk9wZW5XaW5kb3dz
QXV0b21hdGljYWxseSgpOwotfQotCiBzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gcGFy
c2VNb2RhbERpYWxvZ0ZlYXR1cmVzKGNvbnN0IFN0cmluZyYgZmVhdHVyZXNBcmcpCiB7CiAgICAg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbWFwOwpAQCAtNTEzLDcgKzQ5OCw3IEBAIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOERPTVdpbmRvdzo6c2hvd01vZGFsRGlhbG9nQ2FsbGJhY2soY29uc3Qg
djg6OkFyZ3VtZW50cyYKICAgICBpZiAoIWVudGVyZWRGcmFtZSkKICAgICAgICAgcmV0dXJuIHY4
OjpVbmRlZmluZWQoKTsKIAotICAgIGlmICghY2FuU2hvd01vZGFsRGlhbG9nTm93KGZyYW1lKSB8
fCAhYWxsb3dQb3BVcCgpKQorICAgIGlmICghY2FuU2hvd01vZGFsRGlhbG9nTm93KGZyYW1lKSB8
fCAhVjhCaW5kaW5nU2VjdXJpdHk6OmFsbG93UG9wVXAoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSkp
CiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKICAgICBjb25zdCBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiBmZWF0dXJlcyA9IHBhcnNlTW9kYWxEaWFsb2dGZWF0dXJlcyhmZWF0dXJl
QXJncyk7CkBAIC01ODQsMTM0ICs1NjksMTYgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9N
V2luZG93OjpvcGVuQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJ
TkNfU1RBVFMoIkRPTS5ET01XaW5kb3cub3BlbigpIik7CiAKKyAgICBET01XaW5kb3cqIHBhcmVu
dCA9IFY4RE9NV2luZG93Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICBTdHJpbmcgdXJs
U3RyaW5nID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKGFyZ3NbMF0p
OwogICAgIEF0b21pY1N0cmluZyBmcmFtZU5hbWUgPSAoYXJnc1sxXS0+SXNVbmRlZmluZWQoKSB8
fCBhcmdzWzFdLT5Jc051bGwoKSkgPyAiX2JsYW5rIiA6IEF0b21pY1N0cmluZyh0b1dlYkNvcmVT
dHJpbmcoYXJnc1sxXSkpOwotCi0gICAgRE9NV2luZG93KiBwYXJlbnQgPSBWOERPTVdpbmRvdzo6
dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgRnJhbWUqIGZyYW1lID0gcGFyZW50LT5mcmFt
ZSgpOwotCi0gICAgaWYgKCFWOEJpbmRpbmdTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhCaW5k
aW5nU3RhdGU6Ok9ubHkoKSwgZnJhbWUsIHRydWUpKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOwotCi0gICAgRnJhbWUqIGVudGVyZWRGcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJh
bWVGb3JFbnRlcmVkQ29udGV4dCgpOwotICAgIGlmICghZW50ZXJlZEZyYW1lKQotICAgICAgICBy
ZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAgRnJhbWUqIGNhbGxpbmdGcmFtZSA9IFY4UHJv
eHk6OnJldHJpZXZlRnJhbWVGb3JDYWxsaW5nQ29udGV4dCgpOwotICAgIC8vIFdlIG1heSBub3Qg
aGF2ZSBhIGNhbGxpbmcgY29udGV4dCBpZiB3ZSBhcmUgaW52b2tlZCBieSBhIHBsdWdpbiB2aWEg
TlBBUEkuCi0gICAgaWYgKCFjYWxsaW5nRnJhbWUpCi0gICAgICAgIGNhbGxpbmdGcmFtZSA9IGVu
dGVyZWRGcmFtZTsKLQotICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwotICAgIGlmICgh
cGFnZSkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIC8vIEJlY2F1c2Ug
RnJhbWVUcmVlOjpmaW5kKCkgcmV0dXJucyB0cnVlIGZvciBlbXB0eSBzdHJpbmdzLCB3ZSBtdXN0
IGNoZWNrCi0gICAgLy8gZm9yIGVtcHR5IGZyYW1lbmFtZXMuIE90aGVyd2lzZSwgaWxsZWdpdGlt
YXRlIHdpbmRvdy5vcGVuKCkgY2FsbHMgd2l0aAotICAgIC8vIG5vIG5hbWUgd2lsbCBwYXNzIHJp
Z2h0IHRocm91Z2ggdGhlIHBvcHVwIGJsb2NrZXIuCi0gICAgaWYgKCFhbGxvd1BvcFVwKCkgJiYK
LSAgICAgICAgKGZyYW1lTmFtZS5pc0VtcHR5KCkgfHwgIWZyYW1lLT50cmVlKCktPmZpbmQoZnJh
bWVOYW1lKSkpIHsKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAg
ICAvLyBHZXQgdGhlIHRhcmdldCBmcmFtZSBmb3IgdGhlIHNwZWNpYWwgY2FzZXMgb2YgX3RvcCBh
bmQgX3BhcmVudC4gIEluIHRob3NlCi0gICAgLy8gY2FzZXMsIHdlIGNhbiBzY2hlZHVsZSBhIGxv
Y2F0aW9uIGNoYW5nZSByaWdodCBub3cgYW5kIHJldHVybiBlYXJseS4KLSAgICBib29sIHRvcE9y
UGFyZW50ID0gZmFsc2U7Ci0gICAgaWYgKGZyYW1lTmFtZSA9PSAiX3RvcCIpIHsKLSAgICAgICAg
ZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50b3AoKTsKLSAgICAgICAgdG9wT3JQYXJlbnQgPSB0cnVl
OwotICAgIH0gZWxzZSBpZiAoZnJhbWVOYW1lID09ICJfcGFyZW50IikgewotICAgICAgICBpZiAo
RnJhbWUqIHBhcmVudCA9IGZyYW1lLT50cmVlKCktPnBhcmVudCgpKQotICAgICAgICAgICAgZnJh
bWUgPSBwYXJlbnQ7Ci0gICAgICAgIHRvcE9yUGFyZW50ID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYg
KHRvcE9yUGFyZW50KSB7Ci0gICAgICAgIGlmICghc2hvdWxkQWxsb3dOYXZpZ2F0aW9uKGZyYW1l
KSkKLSAgICAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgU3RyaW5n
IGNvbXBsZXRlZFVybDsKLSAgICAgICAgaWYgKCF1cmxTdHJpbmcuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgY29tcGxldGVkVXJsID0gY29tcGxldGVVUkwodXJsU3RyaW5nKTsKLQotICAgICAgICBp
ZiAoIWNvbXBsZXRlZFVybC5pc0VtcHR5KCkgJiYKLSAgICAgICAgICAgICghcHJvdG9jb2xJc0ph
dmFTY3JpcHQoY29tcGxldGVkVXJsKSB8fCBTY3JpcHRDb250cm9sbGVyOjppc1NhZmVTY3JpcHQo
ZnJhbWUpKSkgewotICAgICAgICAgICAgYm9vbCB1c2VyR2VzdHVyZSA9IHByb2Nlc3NpbmdVc2Vy
R2VzdHVyZSgpOwotCi0gICAgICAgICAgICAvLyBGb3Igd2hhdGV2ZXIgcmVhc29uLCBGaXJlZm94
IHVzZXMgdGhlIGVudGVyZWQgZnJhbWUgdG8gZGV0ZXJtaW5lCi0gICAgICAgICAgICAvLyB0aGUg
b3V0Z29pbmdSZWZlcnJlci4gIFdlIHJlcGxpY2F0ZSB0aGF0IGJlaGF2aW9yIGhlcmUuCi0gICAg
ICAgICAgICBTdHJpbmcgcmVmZXJyZXIgPSBlbnRlcmVkRnJhbWUtPmxvYWRlcigpLT5vdXRnb2lu
Z1JlZmVycmVyKCk7Ci0KLSAgICAgICAgICAgIGZyYW1lLT5yZWRpcmVjdFNjaGVkdWxlcigpLT5z
Y2hlZHVsZUxvY2F0aW9uQ2hhbmdlKGNvbXBsZXRlZFVybCwgcmVmZXJyZXIsIGZhbHNlLCBmYWxz
ZSwgdXNlckdlc3R1cmUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1Y4KGZyYW1lLT5k
b21XaW5kb3coKSk7Ci0gICAgfQotCi0gICAgLy8gSW4gdGhlIGNhc2Ugb2YgYSBuYW1lZCBmcmFt
ZSBvciBhIG5ldyB3aW5kb3csIHdlJ2xsIHVzZSB0aGUKLSAgICAvLyBjcmVhdGVXaW5kb3coKSBo
ZWxwZXIuCi0KLSAgICAvLyBQYXJzZSB0aGUgdmFsdWVzLCBhbmQgdGhlbiB3b3JrIHdpdGggYSBj
b3B5IG9mIHRoZSBwYXJzZWQgdmFsdWVzCi0gICAgLy8gc28gd2UgY2FuIHJlc3RvcmUgdGhlIHZh
bHVlcyB3ZSBtYXkgbm90IHdhbnQgdG8gb3ZlcndyaXRlIGFmdGVyCi0gICAgLy8gd2UgZG8gdGhl
IG11bHRpcGxlIG1vbml0b3IgZml4ZXMuCiAgICAgV2luZG93RmVhdHVyZXMgcmF3RmVhdHVyZXMo
dG9XZWJDb3JlU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKGFyZ3NbMl0pKTsKLSAgICBX
aW5kb3dGZWF0dXJlcyB3aW5kb3dGZWF0dXJlcyhyYXdGZWF0dXJlcyk7Ci0gICAgRmxvYXRSZWN0
IHNjcmVlblJlY3QgPSBzY3JlZW5BdmFpbGFibGVSZWN0KHBhZ2UtPm1haW5GcmFtZSgpLT52aWV3
KCkpOwotCi0gICAgLy8gU2V0IGRlZmF1bHQgc2l6ZSBhbmQgbG9jYXRpb24gbmVhciBwYXJlbnQg
d2luZG93IGlmIG5vbmUgd2VyZSBzcGVjaWZpZWQuCi0gICAgLy8gVGhlc2UgbWF5IGJlIGZ1cnRo
ZXIgbW9kaWZpZWQgYnkgYWRqdXN0V2luZG93UmVjdCwgYmVsb3cuCi0gICAgaWYgKCF3aW5kb3dG
ZWF0dXJlcy54U2V0KSB7Ci0gICAgICAgIHdpbmRvd0ZlYXR1cmVzLnggPSBwYXJlbnQtPnNjcmVl
blgoKSAtIHNjcmVlblJlY3QueCgpICsgcG9wdXBUaWxlUGl4ZWxzOwotICAgICAgICB3aW5kb3dG
ZWF0dXJlcy54U2V0ID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKCF3aW5kb3dGZWF0dXJlcy55U2V0
KSB7Ci0gICAgICAgIHdpbmRvd0ZlYXR1cmVzLnkgPSBwYXJlbnQtPnNjcmVlblkoKSAtIHNjcmVl
blJlY3QueSgpICsgcG9wdXBUaWxlUGl4ZWxzOwotICAgICAgICB3aW5kb3dGZWF0dXJlcy55U2V0
ID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKCF3aW5kb3dGZWF0dXJlcy53aWR0aFNldCkgewotICAg
ICAgICB3aW5kb3dGZWF0dXJlcy53aWR0aCA9IHBhcmVudC0+aW5uZXJXaWR0aCgpOwotICAgICAg
ICB3aW5kb3dGZWF0dXJlcy53aWR0aFNldCA9IHRydWU7Ci0gICAgfQotICAgIGlmICghd2luZG93
RmVhdHVyZXMuaGVpZ2h0U2V0KSB7Ci0gICAgICAgIHdpbmRvd0ZlYXR1cmVzLmhlaWdodCA9IHBh
cmVudC0+aW5uZXJIZWlnaHQoKTsKLSAgICAgICAgd2luZG93RmVhdHVyZXMuaGVpZ2h0U2V0ID0g
dHJ1ZTsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3Qgd2luZG93UmVjdCh3aW5kb3dGZWF0dXJlcy54
LCB3aW5kb3dGZWF0dXJlcy55LCB3aW5kb3dGZWF0dXJlcy53aWR0aCwgd2luZG93RmVhdHVyZXMu
aGVpZ2h0KTsKLQotICAgIC8vIFRoZSBuZXcgd2luZG93J3MgbG9jYXRpb24gaXMgcmVsYXRpdmUg
dG8gaXRzIGN1cnJlbnQgc2NyZWVuLCBzbyBzaGlmdAotICAgIC8vIGl0IGluIGNhc2UgaXQncyBv
biBhIHNlY29uZGFyeSBtb25pdG9yLiBTZWUgaHR0cDovL2Ivdmlld0lzc3VlP2lkPTk2NzkwNS4K
LSAgICB3aW5kb3dSZWN0Lm1vdmUoc2NyZWVuUmVjdC54KCksIHNjcmVlblJlY3QueSgpKTsKLSAg
ICBXZWJDb3JlOjpET01XaW5kb3c6OmFkanVzdFdpbmRvd1JlY3Qoc2NyZWVuUmVjdCwgd2luZG93
UmVjdCwgd2luZG93UmVjdCk7Ci0KLSAgICB3aW5kb3dGZWF0dXJlcy54ID0gd2luZG93UmVjdC54
KCk7Ci0gICAgd2luZG93RmVhdHVyZXMueSA9IHdpbmRvd1JlY3QueSgpOwotICAgIHdpbmRvd0Zl
YXR1cmVzLmhlaWdodCA9IHdpbmRvd1JlY3QuaGVpZ2h0KCk7Ci0gICAgd2luZG93RmVhdHVyZXMu
d2lkdGggPSB3aW5kb3dSZWN0LndpZHRoKCk7Ci0KLSAgICAvLyBJZiBlaXRoZXIgb2YgdGhlIG9y
aWdpbiBjb29yZGluYXRlcyBvciBkaW1lbnNpb25zIHdlcmVuJ3Qgc2V0IGluIHRoZSBvcmlnaW5h
bAotICAgIC8vIHN0cmluZywgbWFrZSBzdXJlIHRoZXkgYXJlbid0IHNldCBub3cuCi0gICAgaWYg
KCFyYXdGZWF0dXJlcy54U2V0KSB7Ci0gICAgICAgIHdpbmRvd0ZlYXR1cmVzLnggPSAwOwotICAg
ICAgICB3aW5kb3dGZWF0dXJlcy54U2V0ID0gZmFsc2U7Ci0gICAgfQotICAgIGlmICghcmF3RmVh
dHVyZXMueVNldCkgewotICAgICAgICB3aW5kb3dGZWF0dXJlcy55ID0gMDsKLSAgICAgICAgd2lu
ZG93RmVhdHVyZXMueVNldCA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAoIXJhd0ZlYXR1cmVzLndp
ZHRoU2V0KSB7Ci0gICAgICB3aW5kb3dGZWF0dXJlcy53aWR0aCA9IDA7Ci0gICAgICB3aW5kb3dG
ZWF0dXJlcy53aWR0aFNldCA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAoIXJhd0ZlYXR1cmVzLmhl
aWdodFNldCkgewotICAgICAgd2luZG93RmVhdHVyZXMuaGVpZ2h0ID0gMDsKLSAgICAgIHdpbmRv
d0ZlYXR1cmVzLmhlaWdodFNldCA9IGZhbHNlOwotICAgIH0KLQotICAgIGZyYW1lID0gVjhCaW5k
aW5nRE9NV2luZG93OjpjcmVhdGVXaW5kb3coVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgY2FsbGlu
Z0ZyYW1lLCBlbnRlcmVkRnJhbWUsIGZyYW1lLCB1cmxTdHJpbmcsIGZyYW1lTmFtZSwgd2luZG93
RmVhdHVyZXMsIHY4OjpMb2NhbDx2ODo6VmFsdWU+KCkpOworICAgIERPTVdpbmRvdyogY2hpbGQg
PSBWOEJpbmRpbmdET01XaW5kb3c6Om9wZW4oVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgcGFyZW50
LCB1cmxTdHJpbmcsIGZyYW1lTmFtZSwgcmF3RmVhdHVyZXMpOwogCi0gICAgaWYgKCFmcmFtZSkK
KyAgICBpZiAoIWNoaWxkKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCi0gICAg
cmV0dXJuIHRvVjgoZnJhbWUtPmRvbVdpbmRvdygpKTsKKyAgICByZXR1cm4gdG9WOChjaGlsZCk7
CiB9CiAKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9zcGVjaWFsaXphdGlvbi9W
OEJpbmRpbmdTdGF0ZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L3NwZWNpYWxpemF0aW9uL1Y4
QmluZGluZ1N0YXRlLmNwcAppbmRleCA0NzEwMjcxZWZjOWRmYTlhZWU1OWFmZWIzMGU5MzI0NjI0
ZmM5ZmU0Li5kOTVkNTc4OTk4NzJkN2FjM2NjYTRkYmVkNWY2ODFmYTRjZTFmNTM4IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L3NwZWNpYWxpemF0aW9uL1Y4QmluZGluZ1N0YXRlLmNw
cAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L3NwZWNpYWxpemF0aW9uL1Y4QmluZGluZ1N0YXRl
LmNwcApAQCAtMSwxMCArMSwxMCBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCiAgKiBtZXQ6Ci0gKiAKKyAqCiAgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQpAQCAtMTQsNyArMTQsNyBAQAogICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKKyAq
CiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCiAgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCkBAIC0zMSw2ICsz
MSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIK
IAorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTUz
LDkgKzU1LDM0IEBAIERPTVdpbmRvdyogU3RhdGU8VjhCaW5kaW5nPjo6Z2V0QWN0aXZlV2luZG93
KCkKICAgICByZXR1cm4gVjhQcm94eTo6cmV0cmlldmVXaW5kb3coYWN0aXZlQ29udGV4dCk7CiB9
CiAKK0ZyYW1lKiBTdGF0ZTxWOEJpbmRpbmc+OjpnZXRBY3RpdmVGcmFtZSgpCit7CisgICAgRnJh
bWUqIGZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckNhbGxpbmdDb250ZXh0KCk7Cisg
ICAgaWYgKCFmcmFtZSkgeworICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5LCB3aGVuIHByb2Nlc3Np
bmcgc2NyaXB0IGZyb20gYSBwbHVnLWluLCB3ZSBtaWdodCBub3QKKyAgICAgICAgLy8gaGF2ZSBh
IGNhbGxpbmcgY29udGV4dC4gIEluIHRob3NlIGNhc2VzLCB3ZSBmYWxsIGJhY2sgdG8gdGhlCisg
ICAgICAgIC8vIGVudGVyZWQgY29udGV4dCBmb3Igc2VjdXJpdHkgY2hlY2tzLgorICAgICAgICAv
LyBGSVhNRTogV2UgbmVlZCBhIGJldHRlciBBUEkgZm9yIHJldHJpZXZpbmcgZnJhbWVzIHRoYXQg
YWJzdHJhY3RzCisgICAgICAgIC8vICAgICAgICBhd2F5IHRoaXMgY29uY2Vybi4KKyAgICAgICAg
ZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKTsKKyAgICB9
CisgICAgcmV0dXJuIGZyYW1lOworfQorCitGcmFtZSogU3RhdGU8VjhCaW5kaW5nPjo6Z2V0Rmly
c3RGcmFtZSgpCit7CisgICAgcmV0dXJuIFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JFbnRlcmVk
Q29udGV4dCgpOworfQorCiB2b2lkIFN0YXRlPFY4QmluZGluZz46OmltbWVkaWF0ZWx5UmVwb3J0
VW5zYWZlQWNjZXNzVG8oRnJhbWUqIHRhcmdldCkKIHsKICAgICBWOFByb3h5OjpyZXBvcnRVbnNh
ZmVBY2Nlc3NUbyh0YXJnZXQsIFY4UHJveHk6OlJlcG9ydE5vdyk7CiB9CiAKK2Jvb2wgU3RhdGU8
VjhCaW5kaW5nPjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkKK3sKKyAgICBGcmFtZSogZnJhbWUg
PSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKTsKKyAgICByZXR1cm4g
ZnJhbWUgJiYgZnJhbWUtPnNjcmlwdCgpLT5wcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9z
cGVjaWFsaXphdGlvbi9WOEJpbmRpbmdTdGF0ZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9zcGVj
aWFsaXphdGlvbi9WOEJpbmRpbmdTdGF0ZS5oCmluZGV4IGYzMDVjMTQ1MTA1NzNlZDMwZDY3ZjVk
ZThiY2ZhOTAwNzcyOGQxZjYuLmJhYmEwYzYzYzA4OGZmNzE0ODU4ZDRkMDZiOWRmZmNiYzA0MWE3
MmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvdjgvc3BlY2lhbGl6YXRpb24vVjhCaW5k
aW5nU3RhdGUuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L3NwZWNpYWxpemF0aW9uL1Y4Qmlu
ZGluZ1N0YXRlLmgKQEAgLTEsMTAgKzEsMTAgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAorICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQogICogbWV0OgotICogCisgKgogICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KICAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKQEAgLTE0LDcgKzE0LDcgQEAKICAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICogCisgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwogICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpAQCAt
MzYsNiArMzYsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZyYW1lOworCiAv
LyBTaW5nbGV0b24gaW1wbGVtZW50YXRpb24gb2YgU3RhdGU8VjhCaW5kaW5nPi4gIFVzZXMgVjgn
cyBnbG9iYWwgZGF0YQogLy8gc3RydWN0dXJlcyB0byByZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQg
cmVsZXZhbnQgZXhlY3V0aW9uIHN0YXRlLgogdGVtcGxhdGUgPD4KQEAgLTQ0LDExICs0NiwxOSBA
QCBwdWJsaWM6CiAgICAgLy8gU2luZ2xldG9uCiAgICAgc3RhdGljIFN0YXRlKiBPbmx5KCk7CiAK
KyAgICAvLyBSZXBvcnRzIGFuIGVycm9yIG1lc3NhZ2UgKHdpdGhvdXQgZGVsYXkpIGlmIHRoZSBz
ZWN1cml0eSBjaGVjayBmYWlscy4KKyAgICBzdGF0aWMgdm9pZCBpbW1lZGlhdGVseVJlcG9ydFVu
c2FmZUFjY2Vzc1RvKEZyYW1lKik7CisKICAgICAvLyBUaGUgRE9NV2luZG93IGNvcnJlc3BvbmRp
bmcgdG8gdGhlICdjYWxsaW5nIGNvbnRleHQnIG9mIGV4ZWN1dGlvbi4KICAgICBET01XaW5kb3cq
IGdldEFjdGl2ZVdpbmRvdygpOwogCi0gICAgLy8gUmVwb3J0cyBhbiBlcnJvciBtZXNzYWdlICh3
aXRob3V0IGRlbGF5KSBpZiB0aGUgc2VjdXJpdHkgY2hlY2sgZmFpbHMuCi0gICAgc3RhdGljIHZv
aWQgaW1tZWRpYXRlbHlSZXBvcnRVbnNhZmVBY2Nlc3NUbyhGcmFtZSopOworICAgIC8vIFRoZSBm
cmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSAnY2FsbGluZyBjb250ZXh0JyBvZiBleGVjdXRpb24u
CisgICAgRnJhbWUqIGdldEFjdGl2ZUZyYW1lKCk7CisKKyAgICAvLyBUaGUgZmlyc3QgZnJhbWUg
aW4gd2hpY2ggZXhlY3V0aW9uIGVudGVyZWQgdXNlciBzY3JpcHQuCisgICAgRnJhbWUqIGdldEZp
cnN0RnJhbWUoKTsKKworICAgIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7CiAKIHByaXZh
dGU6CiAgICAgZXhwbGljaXQgU3RhdGUoKSB7fQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>