<?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>67213</bug_id>
          
          <creation_ts>2011-08-30 11:41:11 -0700</creation_ts>
          <short_desc>Refactor JS dictionary code into helper class and covert geolocation code to use it</short_desc>
          <delta_ts>2011-08-30 15:48:05 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>459046</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-08-30 11:41:11 -0700</bug_when>
    <thetext>Refactor JS dictionary code into helper class and covert geolocation code to use it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459048</commentid>
    <comment_count>1</comment_count>
      <attachid>105657</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-08-30 11:41:44 -0700</bug_when>
    <thetext>Created attachment 105657
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459055</commentid>
    <comment_count>2</comment_count>
      <attachid>105657</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-30 11:50:51 -0700</bug_when>
    <thetext>Comment on attachment 105657
Patch

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

r=me, but I think this can be done even better

&gt; Source/WebCore/bindings/js/JSDictionary.h:33
&gt; +class JSDictionaryObject {

Why JSDictionaryObject instead of JSDictionary?

&gt; Source/WebCore/bindings/js/JSDictionary.h:37
&gt; +        , m_initializerObject(initializerObject)

What does “initializer object” mean here? I don’t quite follow.

&gt; Source/WebCore/bindings/js/JSDictionary.h:42
&gt; +    template &lt;typename Result&gt;
&gt; +    bool tryGetProperty(const char* propertyName, Result&amp; result);

I don’t think the argument name is needed here given the type name you chose.

&gt; Source/WebCore/bindings/js/JSDictionary.h:78
&gt; +template &lt;typename Result&gt;
&gt; +bool JSDictionaryObject::tryGetProperty(const char* propertyName, Result&amp; finalResult)
&gt; +{
&gt; +    JSC::Identifier identifier(m_exec, propertyName);
&gt; +    JSC::PropertySlot slot(m_initializerObject);
&gt; +    if (m_initializerObject-&gt;getPropertySlot(m_exec, identifier, slot)) {
&gt; +        if (m_exec-&gt;hadException())
&gt; +            return false;
&gt; +
&gt; +        JSC::JSValue value = slot.getValue(m_exec, identifier);
&gt; +        if (m_exec-&gt;hadException())
&gt; +            return false;
&gt; +
&gt; +        Result result;
&gt; +        convertValue(m_exec, value, result);
&gt; +
&gt; +        if (m_exec-&gt;hadException())
&gt; +            return false;
&gt; +        
&gt; +        finalResult = result;
&gt; +    }
&gt; +
&gt; +    return true;
&gt; +}

It’s a shame that this entire function is a template when only the call to convertValue is really type-specific. I suggest making a helper function to keep as much code as possible outside the template.

&gt; Source/WebCore/bindings/js/JSDictionary.h:103
&gt; +template &lt;typename T, typename Result&gt;
&gt; +bool JSDictionaryObject::tryGetProperty(const char* propertyName, T* context, void (*setter)(T* context, const Result&amp;))
&gt; +{
&gt; +    JSC::Identifier identifier(m_exec, propertyName);
&gt; +    JSC::PropertySlot slot(m_initializerObject);
&gt; +    if (m_initializerObject-&gt;getPropertySlot(m_exec, identifier, slot)) {
&gt; +        if (m_exec-&gt;hadException())
&gt; +            return false;
&gt; +
&gt; +        JSC::JSValue value = slot.getValue(m_exec, identifier);
&gt; +        if (m_exec-&gt;hadException())
&gt; +            return false;
&gt; +
&gt; +        Result result;
&gt; +        convertValue(m_exec, value, result);
&gt; +
&gt; +        if (m_exec-&gt;hadException())
&gt; +            return false;
&gt; +        
&gt; +        setter(context, result);
&gt; +    }
&gt; +
&gt; +    return true;
&gt; +}

Same comment here. It could probably even be the same helper function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459086</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-08-30 12:25:27 -0700</bug_when>
    <thetext>Thanks for the review, I agree with all your comments.  I was really just throwing this up here to make sure it built (while I got lunch), but that plan seems to have failed.  Will upload a new one with better everything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459119</commentid>
    <comment_count>4</comment_count>
      <attachid>105680</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-08-30 13:06:52 -0700</bug_when>
    <thetext>Created attachment 105680
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459283</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-08-30 15:48:05 -0700</bug_when>
    <thetext>Committed r94119: &lt;http://trac.webkit.org/changeset/94119&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105657</attachid>
            <date>2011-08-30 11:41:44 -0700</date>
            <delta_ts>2011-08-30 13:06:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67213-20110830114143.patch</filename>
            <type>text/plain</type>
            <size>24477</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0MDkyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTEtMDgtMzAgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZWZhY3RvciBKUyBkaWN0aW9uYXJ5IGNv
ZGUgaW50byBoZWxwZXIgY2xhc3MgYW5kIGNvdmVydCBnZW9sb2NhdGlvbiBjb2RlIHRvIHVzZSBp
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjcyMTMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcg
dGVzdHMuIChPT1BTISkKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAg
ICogVXNlSlNDLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJD
b3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNCaW5kaW5nc0FsbEluT25lLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0Rp
Y3Rpb25hcnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTRGljdGlvbmFyeU9iamVj
dDo6Y29udmVydFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0RpY3Rpb25hcnlPYmplY3Q6OkpTRGljdGlvbmFy
eU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RpY3Rpb25hcnlPYmplY3Q6OnRyeUdldFBy
b3BlcnR5KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50Q29uc3RydWN0b3JzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTRXZlbnRXaXRoSW5pdGlhbGl6ZXIpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0RW5hYmxlSGlnaEFjY3VyYWN5KToKKyAgICAgICAgKFdlYkNvcmU6OnNldFRpbWVv
dXQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0TWF4aW11bUFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVQb3NpdGlvbk9wdGlvbnMpOgorCiAyMDExLTA4LTMwICBEYXZpZCBIeWF0dCAgPGh5
YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTAwMDIxNDA+IDlBMzA5
OiBUZXh0IGdldHMgY2xpcHBlZCBpbiBib29rIGJlY2F1c2Ugb2Ygb3ZlcmZsb3c6YXV0bwpJbmRl
eDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiA5NDA4NikKKysrIFNvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTY4Nyw2ICs2
ODcsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ3VzdG9tVm9pZENhbGxiYWNrLmggXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaCBcCisJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEaWN0aW9uYXJ5LmNwcCBcCisJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9u
YXJ5LmggXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQXBwbGljYXRpb25DYWNo
ZUN1c3RvbS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oIFwKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1VzZUpTQy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Vc2VKU0MuY21ha2UJKHJldmlzaW9uIDk0MDg2KQorKysgU291cmNlL1dlYkNvcmUvVXNlSlND
LmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBAIExJU1QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUwogICAgIGJpbmRpbmdzL2pzL0pTQ29uc29sZUN1c3RvbS5jcHAKICAgICBiaW5k
aW5ncy9qcy9KU0Nvb3JkaW5hdGVzQ3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTQ3VzdG9t
Vm9pZENhbGxiYWNrLmNwcAorICAgIGJpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHAKICAgICBi
aW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCiAgICAgYmluZGluZ3MvanMvSlNET01Gb3JtRGF0
YUN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDk0MDg2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC00MjYsNiArNDI2LDcgQEAKICAgICAgICAgICAgICdi
aW5kaW5ncy9qcy9ET01PYmplY3RIYXNoVGFibGVNYXAuaCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvanMvRE9NV3JhcHBlcldvcmxkLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0dDQ29u
dHJvbGxlci5oJywKKyAgICAgICAgICAgICdiaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgnLAogICAgICAgICAgICAgJ2Jp
bmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2pz
L0pTRE9NV2luZG93QmFzZS5oJywKQEAgLTE3OTAsNiArMTc5MSw3IEBACiAgICAgICAgICAgICAn
YmluZGluZ3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2suaCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5n
cy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5oJywKKyAgICAgICAgICAgICdiaW5kaW5ncy9q
cy9KU0RpY3Rpb25hcnkuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9KU0RPTUFwcGxp
Y2F0aW9uQ2FjaGVDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9KU0RPTUJp
bmRpbmcuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9KU0RPTUZvcm1EYXRhQ3VzdG9t
LmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gOTQwODYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMjU0LDYgKzI1NCw3IEBAIHY4IHsK
ICAgICAgICAgYmluZGluZ3MvanMvSlNDb29yZGluYXRlc0N1c3RvbS5jcHAgXAogICAgICAgICBi
aW5kaW5ncy9qcy9KU0N1c3RvbVZvaWRDYWxsYmFjay5jcHAgXAogICAgICAgICBiaW5kaW5ncy9q
cy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAgXAorICAgICAgICBiaW5kaW5ncy9qcy9KU0Rp
Y3Rpb25hcnkuY3BwIFwKICAgICAgICAgYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcCBcCiAg
ICAgICAgIGJpbmRpbmdzL2pzL0pTRE9NRm9ybURhdGFDdXN0b20uY3BwIFwKICAgICAgICAgYmlu
ZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwIFwKQEAgLTEzMTgsNiArMTMxOSw3IEBAIHY4
IHsKICAgICAgICAgYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuaCBcCiAgICAgICAgIGJpbmRp
bmdzL2pzL0pTQ3VzdG9tVm9pZENhbGxiYWNrLmggXAogICAgICAgICBiaW5kaW5ncy9qcy9KU0N1
c3RvbVhQYXRoTlNSZXNvbHZlci5oIFwKKyAgICAgICAgYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5
LmggXAogICAgICAgICBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaCBcCiAgICAgICAgIGJpbmRp
bmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmggXAogICAgICAgICBiaW5kaW5ncy9qcy9KU0RPTVN0
cmluZ01hcEN1c3RvbS5oIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA5NDA4NikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02MDA4MSw2ICs2MDA4
MSw2MiBAQAogCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJCTwvRmlsZT4KIAkJCQk8Rmls
ZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTRGljdGlvbmFyeS5jcHAiCisJ
CQkJCT4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIK
KwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJ
CQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmln
dXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdp
bjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9v
bAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVD
b25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRlYnVn
X0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJ
CQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJ
Lz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJ
CQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJv
bUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZp
bGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiCisJCQkJCQlFeGNs
dWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJ
CQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIKKwkJ
CQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5k
aW5nc1xqc1xKU0RpY3Rpb25hcnkuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQog
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTRGlyZWN0b3J5RW50cnlDdXN0b20u
Y3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTQwODYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTUyNTQsNiArNTI1NCw4IEBACiAJCUJDRTNCRUMzMEQyMjJCMUQwMDdFMDZFNCAvKiBU
YWdOb2RlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNFM0JFQzEwRDIyMkIxRDAwN0UwNkU0IC8qIFRhZ05vZGVMaXN0LmggKi87IH07CiAJCUJD
RTQzODk3MTQwQjAwNTEwMDVFNDM3RSAvKiBFdmVudENvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFNDM4OTYxNDBCMDA1MTAwNUU0
MzdFIC8qIEV2ZW50Q29uc3RydWN0b3JzLmggKi87IH07CiAJCUJDRTQzODlBMTQwQjAwNzMwMDVF
NDM3RSAvKiBKU0V2ZW50Q29uc3RydWN0b3JzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTQzODk5MTQwQjAwNzMwMDVFNDM3RSAvKiBKU0V2ZW50
Q29uc3RydWN0b3JzLmNwcCAqLzsgfTsKKwkJQkNFNDM4OUMxNDBCMUJBODAwNUU0MzdFIC8qIEpT
RGljdGlvbmFyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNFNDM4OUIxNDBCMUJBNzAwNUU0MzdFIC8qIEpTRGljdGlvbmFyeS5oICovOyB9OworCQlC
Q0U0MzhBMjE0MEMwREMwMDA1RTQzN0UgLyogSlNEaWN0aW9uYXJ5LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTQzOEExMTQwQzBEQkYwMDVFNDM3
RSAvKiBKU0RpY3Rpb25hcnkuY3BwICovOyB9OwogCQlCQ0U0NDEzMzEyRjc0OEUyMDA5Qjg0Qjgg
LyogUmVuZGVyQ29tYmluZVRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkNFNDQxMzExMkY3NDhFMjAwOUI4NEI4IC8qIFJlbmRlckNvbWJpbmVU
ZXh0LmNwcCAqLzsgfTsKIAkJQkNFNDQxMzQxMkY3NDhFMjAwOUI4NEI4IC8qIFJlbmRlckNvbWJp
bmVUZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Q0U0NDEzMjEyRjc0OEUyMDA5Qjg0QjggLyogUmVuZGVyQ29tYmluZVRleHQuaCAqLzsgfTsKIAkJ
QkNFNDQxMzYxMkY3NDkwQjAwOUI4NEI4IC8qIEZvbnRXaWR0aFZhcmlhbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTQ0MTM1MTJGNzQ5MEIwMDlC
ODRCOCAvKiBGb250V2lkdGhWYXJpYW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExOTgzLDYgKzExOTg1LDggQEAKIAkJQkNFM0JFQzEwRDIy
MkIxRDAwN0UwNkU0IC8qIFRhZ05vZGVMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFRhZ05vZGVMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRTQz
ODk2MTQwQjAwNTEwMDVFNDM3RSAvKiBFdmVudENvbnN0cnVjdG9ycy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBFdmVudENvbnN0cnVjdG9ycy5oOyBwYXRoID0gZ2VuZXJpYy9F
dmVudENvbnN0cnVjdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0U0Mzg5
OTE0MEIwMDczMDA1RTQzN0UgLyogSlNFdmVudENvbnN0cnVjdG9ycy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0V2ZW50Q29uc3RydWN0b3JzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNFNDM4OUIxNDBCMUJBNzAwNUU0MzdFIC8qIEpTRGlj
dGlvbmFyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RpY3Rpb25hcnku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNFNDM4QTExNDBDMERCRjAwNUU0MzdF
IC8qIEpTRGljdGlvbmFyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0RpY3Rpb25hcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0U0NDEz
MTEyRjc0OEUyMDA5Qjg0QjggLyogUmVuZGVyQ29tYmluZVRleHQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyQ29tYmluZVRleHQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQ0U0NDEzMjEyRjc0OEUyMDA5Qjg0QjggLyogUmVuZGVyQ29t
YmluZVRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyQ29tYmlu
ZVRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNFNDQxMzUxMkY3NDkwQjAw
OUI4NEI4IC8qIEZvbnRXaWR0aFZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRm9udFdpZHRoVmFyaWFudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTg1NDcsNiArMTg1NTEsOCBAQAogCQkJCTFDODFCQTAzMEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZh
U2NyaXB0Q2FsbEZyYW1lLmNwcCAqLywKIAkJCQkxQzgxQkEwNDBFOTczNDgzMDAyNjZFMDcgLyog
SmF2YVNjcmlwdENhbGxGcmFtZS5oICovLAogCQkJCTkzQjcwRDQ3MDlFQjBDN0MwMDlEODQ2OCAv
KiBKU0RPTUJpbmRpbmcuY3BwICovLAorCQkJCUJDRTQzODlCMTQwQjFCQTcwMDVFNDM3RSAvKiBK
U0RpY3Rpb25hcnkuaCAqLywKKwkJCQlCQ0U0MzhBMTE0MEMwREJGMDA1RTQzN0UgLyogSlNEaWN0
aW9uYXJ5LmNwcCAqLywKIAkJCQk5M0I3MEQ0ODA5RUIwQzdDMDA5RDg0NjggLyogSlNET01CaW5k
aW5nLmggKi8sCiAJCQkJRTFDMzZDQkMwRUIwODA2MjAwNzQxMEJDIC8qIEpTRE9NR2xvYmFsT2Jq
ZWN0LmNwcCAqLywKIAkJCQlFMUMzNkMwMjBFQjA3NkQ2MDA3NDEwQkMgLyogSlNET01HbG9iYWxP
YmplY3QuaCAqLywKQEAgLTIzNDQ4LDYgKzIzNDU0LDcgQEAKIAkJCQk5MzUwMEYzMjEzRkRFM0JF
MDA5OUVDMjQgLyogTlNTY3JvbGxlckltcERldGFpbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUQw
QTNBNzMxMTQwNUEzOTgwMEZCOEVEMyAvKiBSZXNvdXJjZUxvYWRlck9wdGlvbnMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDRTQzODk3MTQwQjAwNTEwMDVFNDM3RSAvKiBFdmVudENvbnN0cnVjdG9y
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNFNDM4OUMxNDBCMUJBODAwNUU0MzdFIC8qIEpTRGlj
dGlvbmFyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjEwQjY5ODAxNDBDMTc0MDAwQkMxQzI2IC8q
IFdlYlZUVFRva2VuLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMTBCNjk4MjE0MEMxNzQwMDBCQzFD
MjYgLyogV2ViVlRUVG9rZW5pemVyLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CkBAIC0yNjI1OSw2
ICsyNjI2Niw3IEBACiAJCQkJMUExNDE0QjUxM0EwRjA1MDAwMTk5OTZDIC8qIFdlYktpdEZvbnRG
YW1pbHlOYW1lcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERjlBRkQ3MzEzRkMzMUQ4MDAxNUZF
QjcgLyogTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUJDRTQzODlBMTQwQjAwNzMwMDVFNDM3RSAvKiBKU0V2ZW50Q29uc3RydWN0b3JzLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUJDRTQzOEEyMTQwQzBEQzAwMDVFNDM3RSAvKiBKU0RpY3Rp
b25hcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjEwQjY5ODExNDBDMTc0MDAwQkMxQzI2IC8q
IFdlYlZUVFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQmluZGluZ3NBbGxJbk9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNCaW5kaW5nc0FsbEluT25lLmNwcAkocmV2aXNpb24gOTQwODYpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0JpbmRpbmdzQWxsSW5PbmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSlNDdXN0b21TUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrLmNwcCIKICNpbmNsdWRlICJKU0N1c3RvbVZvaWRDYWxsYmFjay5jcHAi
CiAjaW5jbHVkZSAiSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwIgorI2luY2x1ZGUgIkpTRGlj
dGlvbmFyeS5jcHAiCiAjaW5jbHVkZSAiSlNET01BcHBsaWNhdGlvbkNhY2hlQ3VzdG9tLmNwcCIK
ICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuY3BwIgogI2luY2x1ZGUgIkpTRE9NRm9ybURhdGFDdXN0
b20uY3BwIgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnku
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9u
YXJ5LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MiBAQAorCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTRGljdGlvbmFyeS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3ZvaWQgSlNEaWN0aW9uYXJ5T2JqZWN0Ojpjb252ZXJ0VmFsdWUoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgYm9vbCYgcmVzdWx0KQoreworICAg
IHJlc3VsdCA9IHZhbHVlLnRvQm9vbGVhbihleGVjKTsKK30KKwordm9pZCBKU0RpY3Rpb25hcnlP
YmplY3Q6OmNvbnZlcnRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBkb3VibGUmIHJlc3VsdCkKK3sKKyAgICByZXN1bHQgPSB2YWx1ZS50b051bWJlcihleGVj
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIEpTRGljdGlvbmFyeV9oCisjZGVmaW5lIEpTRGljdGlvbmFy
eV9oCisKKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgSlNEaWN0aW9uYXJ5T2JqZWN0IHsKK3B1YmxpYzoKKyAgICBKU0RpY3Rpb25hcnlP
YmplY3QoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNPYmplY3QqIGluaXRpYWxpemVyT2Jq
ZWN0KQorICAgICAgICA6IG1fZXhlYyhleGVjKQorICAgICAgICAsIG1faW5pdGlhbGl6ZXJPYmpl
Y3QoaW5pdGlhbGl6ZXJPYmplY3QpCisgICAgeworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBSZXN1bHQ+CisgICAgYm9vbCB0cnlHZXRQcm9wZXJ0eShjb25zdCBjaGFyKiBwcm9wZXJ0
eU5hbWUsIFJlc3VsdCYgcmVzdWx0KTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBl
bmFtZSBSZXN1bHQ+CisgICAgYm9vbCB0cnlHZXRQcm9wZXJ0eShjb25zdCBjaGFyKiBwcm9wZXJ0
eU5hbWUsIFQqIGNvbnRleHQsIHZvaWQgKCpzZXR0ZXIpKFQqIGNvbnRleHQsIGNvbnN0IFJlc3Vs
dCYpKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBjb252ZXJ0VmFsdWUoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUsIGJvb2wmIHJlc3VsdCk7CisgICAgc3RhdGljIHZvaWQgY29u
dmVydFZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBkb3VibGUmIHJlc3VsdCk7
CisKKyAgICBKU0M6OkV4ZWNTdGF0ZSogbV9leGVjOworICAgIEpTQzo6SlNPYmplY3QqIG1faW5p
dGlhbGl6ZXJPYmplY3Q7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUmVzdWx0PgorYm9vbCBK
U0RpY3Rpb25hcnlPYmplY3Q6OnRyeUdldFByb3BlcnR5KGNvbnN0IGNoYXIqIHByb3BlcnR5TmFt
ZSwgUmVzdWx0JiBmaW5hbFJlc3VsdCkKK3sKKyAgICBKU0M6OklkZW50aWZpZXIgaWRlbnRpZmll
cihtX2V4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgSlNDOjpQcm9wZXJ0eVNsb3Qgc2xvdChtX2lu
aXRpYWxpemVyT2JqZWN0KTsKKyAgICBpZiAobV9pbml0aWFsaXplck9iamVjdC0+Z2V0UHJvcGVy
dHlTbG90KG1fZXhlYywgaWRlbnRpZmllciwgc2xvdCkpIHsKKyAgICAgICAgaWYgKG1fZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgSlND
OjpKU1ZhbHVlIHZhbHVlID0gc2xvdC5nZXRWYWx1ZShtX2V4ZWMsIGlkZW50aWZpZXIpOworICAg
ICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICBSZXN1bHQgcmVzdWx0OworICAgICAgICBjb252ZXJ0VmFsdWUobV9leGVj
LCB2YWx1ZSwgcmVzdWx0KTsKKworICAgICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGZpbmFsUmVzdWx0
ID0gcmVzdWx0OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgUmVzdWx0PgorYm9vbCBKU0RpY3Rpb25hcnlPYmplY3Q6OnRyeUdl
dFByb3BlcnR5KGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSwgVCogY29udGV4dCwgdm9pZCAoKnNl
dHRlcikoVCogY29udGV4dCwgY29uc3QgUmVzdWx0JikpCit7CisgICAgSlNDOjpJZGVudGlmaWVy
IGlkZW50aWZpZXIobV9leGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIEpTQzo6UHJvcGVydHlTbG90
IHNsb3QobV9pbml0aWFsaXplck9iamVjdCk7CisgICAgaWYgKG1faW5pdGlhbGl6ZXJPYmplY3Qt
PmdldFByb3BlcnR5U2xvdChtX2V4ZWMsIGlkZW50aWZpZXIsIHNsb3QpKSB7CisgICAgICAgIGlm
IChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIEpTQzo6SlNWYWx1ZSB2YWx1ZSA9IHNsb3QuZ2V0VmFsdWUobV9leGVjLCBpZGVudGlm
aWVyKTsKKyAgICAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgUmVzdWx0IHJlc3VsdDsKKyAgICAgICAgY29udmVydFZh
bHVlKG1fZXhlYywgdmFsdWUsIHJlc3VsdCk7CisKKyAgICAgICAgaWYgKG1fZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBz
ZXR0ZXIoY29udGV4dCwgcmVzdWx0KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gSlNEaWN0aW9uYXJ5X2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDb25zdHJ1Y3RvcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDb25zdHJ1Y3RvcnMu
Y3BwCShyZXZpc2lvbiA5NDA4NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZl
bnRDb25zdHJ1Y3RvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwzOSArMjgsMTQgQEAKIAog
I2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiSlNFdmVudC5oIgotI2luY2x1ZGUgPHJ1bnRp
bWUvRXJyb3IuaD4KKyNpbmNsdWRlICJKU0RpY3Rpb25hcnkuaCIKIAogdXNpbmcgbmFtZXNwYWNl
IEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgdm9pZCBjb252ZXJ0VmFsdWUo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBib29sJiByZXN1bHQpCi17Ci0gICAgcmVz
dWx0ID0gdmFsdWUudG9Cb29sZWFuKGV4ZWMpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgUmVz
dWx0Pgotc3RhdGljIGJvb2wgdHJ5R2V0UHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogaW5pdGlhbGl6ZXJPYmplY3QsIGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSwgUmVzdWx0JiBy
ZXN1bHQpCi17Ci0gICAgSWRlbnRpZmllciBpZGVudGlmaWVyKGV4ZWMsIHByb3BlcnR5TmFtZSk7
Ci0gICAgUHJvcGVydHlTbG90IHNsb3QoaW5pdGlhbGl6ZXJPYmplY3QpOwotICAgIGlmIChpbml0
aWFsaXplck9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50aWZpZXIsIHNsb3QpKSB7
Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVu
dGlmaWVyKTsKLSAgICAgICAgCi0gICAgICAgIGNvbnZlcnRWYWx1ZShleGVjLCB2YWx1ZSwgcmVz
dWx0KTsKLQotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDb25zdHJ1Y3RvciwgdHlwZW5hbWUgRXZlbnRUeXBlLCB0eXBlbmFtZSBFdmVu
dEluaXRUeXBlPgotc3RhdGljIEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpTRXZlbnRXaXRoSW5p
dGlhbGl6ZXIoRXhlY1N0YXRlKiBleGVjLCBib29sICgqZmlsbGVyKShFdmVudEluaXRUeXBlJiwg
RXhlY1N0YXRlKiwgSlNPYmplY3QqKSkKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RK
U0V2ZW50V2l0aEluaXRpYWxpemVyKEV4ZWNTdGF0ZSogZXhlYywgYm9vbCAoKmZpbGxlcikoRXZl
bnRJbml0VHlwZSYsIEpTRGljdGlvbmFyeU9iamVjdCYpKQogewogICAgIENvbnN0cnVjdG9yKiBq
c0NvbnN0cnVjdG9yID0gc3RhdGljX2Nhc3Q8Q29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7
CiAKQEAgLTc5LDggKzU0LDExIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKU0V2
ZW50V2kKICAgICAgICAgLy8gR2l2ZW4gdGhlIGFib3ZlIHRlc3QsIHRoaXMgd2lsbCBhbHdheXMg
eWllbGQgYW4gb2JqZWN0LgogICAgICAgICBKU09iamVjdCogaW5pdGlhbGl6ZXJPYmplY3QgPSBp
bml0aWFsaXplclZhbHVlLnRvT2JqZWN0KGV4ZWMpOwogCisgICAgICAgIC8vIENyZWF0ZSB0aGUg
ZGljdGlvbmFyeSB3cmFwcGVyIGZyb20gdGhlIGluaXRpYWxpemVyIG9iamVjdC4KKyAgICAgICAg
SlNEaWN0aW9uYXJ5T2JqZWN0IGRpY3Rpb25hcnkoZXhlYywgaW5pdGlhbGl6ZXJPYmplY3QpOwor
CiAgICAgICAgIC8vIEF0dGVtcHQgdG8gZmlsbCBpbiB0aGUgRXZlbnRJbml0LgotICAgICAgICBp
ZiAoIWZpbGxlcihldmVudEluaXQsIGV4ZWMsIGluaXRpYWxpemVyT2JqZWN0KSkKKyAgICAgICAg
aWYgKCFmaWxsZXIoZXZlbnRJbml0LCBkaWN0aW9uYXJ5KSkKICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC04OCw4ICs2Niw5IEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKU0V2ZW50V2kKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRvSlMoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIGV2
ZW50LmdldCgpKSk7CiB9CiAKKwogI2RlZmluZSBESUNUSU9OQVJZX1NUQVJUKEV2ZW50KSBcCi0g
ICAgc3RhdGljIGJvb2wgZmlsbCMjRXZlbnQjI0luaXQoRXZlbnQjI0luaXQmIGV2ZW50SW5pdCwg
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogaW5pdGlhbGl6ZXJPYmplY3QpIFwKKyAgICBzdGF0
aWMgYm9vbCBmaWxsIyNFdmVudCMjSW5pdChFdmVudCMjSW5pdCYgZXZlbnRJbml0LCBKU0RpY3Rp
b25hcnlPYmplY3QmIGRpY3Rpb25hcnkpIFwKICAgICB7CiAKICNkZWZpbmUgRElDVElPTkFSWV9F
TkQoRXZlbnQpIFwKQEAgLTEwMiwxMSArODEsMTEgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGNv
bnN0cnVjdEpTRXZlbnRXaQogICAgIH0KIAogI2RlZmluZSBGSUxMX1BBUkVOVF9QUk9QRVJUSUVT
KHBhcmVudCkgXAotICAgIGlmICghZmlsbCMjcGFyZW50IyNJbml0KGV2ZW50SW5pdCwgZXhlYywg
aW5pdGlhbGl6ZXJPYmplY3QpKSBcCisgICAgaWYgKCFmaWxsIyNwYXJlbnQjI0luaXQoZXZlbnRJ
bml0LCBkaWN0aW9uYXJ5KSkgXAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICNkZWZpbmUgRklM
TF9QUk9QRVJUWShwcm9wZXJ0eU5hbWUpIFwKLSAgICBpZiAoIXRyeUdldFByb3BlcnR5KGV4ZWMs
IGluaXRpYWxpemVyT2JqZWN0LCAjcHJvcGVydHlOYW1lLCBldmVudEluaXQucHJvcGVydHlOYW1l
KSkgXAorICAgIGlmICghZGljdGlvbmFyeS50cnlHZXRQcm9wZXJ0eSgjcHJvcGVydHlOYW1lLCBl
dmVudEluaXQucHJvcGVydHlOYW1lKSkgXAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKIElOU1RB
TlRJQVRFX0FMTF9FVkVOVF9JTklUSUFMSVpJTkdfQ09OU1RSVUNUT1JTKERJQ1RJT05BUllfU1RB
UlQsIERJQ1RJT05BUllfRU5ELCBGSUxMX1BBUkVOVF9QUk9QRVJUSUVTLCBGSUxMX1BST1BFUlRZ
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNHZW9sb2NhdGlvbkN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNHZW9sb2NhdGlv
bkN1c3RvbS5jcHAJKHJldmlzaW9uIDk0MDg2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcg
QEAKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJHZW9sb2NhdGlvbi5oIgogI2lu
Y2x1ZGUgIkpTRE9NV2luZG93LmgiCisjaW5jbHVkZSAiSlNEaWN0aW9uYXJ5LmgiCiAjaW5jbHVk
ZSAiSlNQb3NpdGlvbkNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiSlNQb3NpdGlvbkVycm9yQ2FsbGJh
Y2suaCIKICNpbmNsdWRlICJQb3NpdGlvbk9wdGlvbnMuaCIKQEAgLTQ1LDYgKzQ2LDM0IEBAIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gSlNEaWN0aW9u
YXJ5T2JqZWN0IGhlbHBlciBmdW5jdGlvbnMKKworc3RhdGljIHZvaWQgc2V0RW5hYmxlSGlnaEFj
Y3VyYWN5KFBvc2l0aW9uT3B0aW9ucyogb3B0aW9ucywgY29uc3QgYm9vbCYgZW5hYmxlSGlnaEFj
Y3VyYWN5KQoreworICAgIG9wdGlvbnMtPnNldEVuYWJsZUhpZ2hBY2N1cmFjeShlbmFibGVIaWdo
QWNjdXJhY3kpOworfQorCitzdGF0aWMgdm9pZCBzZXRUaW1lb3V0KFBvc2l0aW9uT3B0aW9ucyog
b3B0aW9ucywgY29uc3QgZG91YmxlJiB0aW1lb3V0KQoreworICAgIC8vIElmIHRoZSB2YWx1ZSBp
cyBwb3NpdGl2ZSBpbmZpbml0eSwgdGhlcmUncyBub3RoaW5nIHRvIGRvLgorICAgIGlmICghKGlz
aW5mKHRpbWVvdXQpICYmICh0aW1lb3V0ID4gMCkpKSB7CisgICAgICAgIC8vIFdyYXAgdG8gaW50
MzIgYW5kIGZvcmNlIG5vbi1uZWdhdGl2ZSB0byBtYXRjaCBiZWhhdmlvciBvZiB3aW5kb3cuc2V0
VGltZW91dC4KKyAgICAgICAgb3B0aW9ucy0+c2V0VGltZW91dChtYXgoMCwgc3RhdGljX2Nhc3Q8
aW50Pih0aW1lb3V0KSkpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgc2V0TWF4aW11bUFnZShQ
b3NpdGlvbk9wdGlvbnMqIG9wdGlvbnMsIGNvbnN0IGRvdWJsZSYgbWF4aW11bUFnZSkKK3sKKyAg
ICBpZiAoaXNpbmYobWF4aW11bUFnZSkgJiYgKG1heGltdW1BZ2UgPiAwKSkgeworICAgICAgICAv
LyBJZiB0aGUgdmFsdWUgaXMgcG9zaXRpdmUgaW5maW5pdHksIGNsZWFyIG1heGltdW1BZ2UuCisg
ICAgICAgIG9wdGlvbnMtPmNsZWFyTWF4aW11bUFnZSgpOworICAgIH0gZWxzZSB7CisgICAgICAg
IC8vIFdyYXAgdG8gaW50MzIgYW5kIGZvcmNlIG5vbi1uZWdhdGl2ZSB0byBtYXRjaCBiZWhhdmlv
ciBvZiB3aW5kb3cuc2V0VGltZW91dC4KKyAgICAgICAgb3B0aW9ucy0+c2V0TWF4aW11bUFnZSht
YXgoMCwgc3RhdGljX2Nhc3Q8aW50PihtYXhpbXVtQWdlKSkpOworICAgIH0KK30KKworCiBzdGF0
aWMgUGFzc1JlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucyhFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgLy8gQ3JlYXRlIGRlZmF1bHQgb3B0
aW9ucy4KQEAgLTU5LDUyICs4OCwxNSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxQb3NpdGlvbk9wdGlv
bnM+IGNyZWF0CiAgICAgLy8gR2l2ZW4gdGhlIGFib3ZlIHRlc3QsIHRoaXMgd2lsbCBhbHdheXMg
eWllbGQgYW4gb2JqZWN0LgogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB2YWx1ZS50b09iamVjdChl
eGVjKTsKIAotICAgIC8vIEZvciBhbGwgdGhyZWUgcHJvcGVydGllcywgd2UgYXBwbHkgdGhlIGZv
bGxvd2luZyAuLi4KLSAgICAvLyAtIElmIHRoZSBnZXR0ZXIgb3IgdGhlIHByb3BlcnR5J3MgdmFs
dWVPZiBtZXRob2QgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgd2UKLSAgICAvLyAgIHF1aXQgc28gYXMg
bm90IHRvIHJpc2sgb3ZlcndyaXRpbmcgdGhlIGV4Y2VwdGlvbi4KLSAgICAvLyAtIElmIHRoZSB2
YWx1ZSBpcyBhYnNlbnQgb3IgdW5kZWZpbmVkLCB3ZSBkb24ndCBvdmVycmlkZSB0aGUgZGVmYXVs
dC4KLSAgICBKU1ZhbHVlIGVuYWJsZUhpZ2hBY2N1cmFjeVZhbHVlID0gb2JqZWN0LT5nZXQoZXhl
YywgSWRlbnRpZmllcihleGVjLCAiZW5hYmxlSGlnaEFjY3VyYWN5IikpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFlbmFibGVIaWdo
QWNjdXJhY3lWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIG9wdGlvbnMtPnNldEVuYWJs
ZUhpZ2hBY2N1cmFjeShlbmFibGVIaWdoQWNjdXJhY3lWYWx1ZS50b0Jvb2xlYW4oZXhlYykpOwot
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsK
LSAgICB9CisgICAgLy8gQ3JlYXRlIHRoZSBkaWN0aW9uYXJ5IHdyYXBwZXIgZnJvbSB0aGUgaW5p
dGlhbGl6ZXIgb2JqZWN0LgorICAgIEpTRGljdGlvbmFyeU9iamVjdCBkaWN0aW9uYXJ5KGV4ZWMs
IG9iamVjdCk7CiAKLSAgICBKU1ZhbHVlIHRpbWVvdXRWYWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMs
IElkZW50aWZpZXIoZXhlYywgInRpbWVvdXQiKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmICghZGljdGlvbmFyeS50cnlHZXRQcm9wZXJ0eSgiZW5hYmxlSGlnaEFjY3Vy
YWN5Iiwgb3B0aW9ucy5nZXQoKSwgc2V0RW5hYmxlSGlnaEFjY3VyYWN5KSkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgaWYgKCF0aW1lb3V0VmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBk
b3VibGUgdGltZW91dE51bWJlciA9IHRpbWVvdXRWYWx1ZS50b051bWJlcihleGVjKTsKLSAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBwb3NpdGl2ZSBpbmZpbml0eSwgdGhlcmUncyBub3RoaW5n
IHRvIGRvLgotICAgICAgICBpZiAoIShpc2luZih0aW1lb3V0TnVtYmVyKSAmJiAodGltZW91dE51
bWJlciA+IDApKSkgewotICAgICAgICAgICAgLy8gV3JhcCB0byBpbnQzMiBhbmQgZm9yY2Ugbm9u
LW5lZ2F0aXZlIHRvIG1hdGNoIGJlaGF2aW9yIG9mIHdpbmRvdy5zZXRUaW1lb3V0LgotICAgICAg
ICAgICAgb3B0aW9ucy0+c2V0VGltZW91dChtYXgoMCwgdGltZW91dFZhbHVlLnRvSW50MzIoZXhl
YykpKTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEpTVmFsdWUgbWF4aW11bUFn
ZVZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAibWF4aW11bUFnZSIp
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKCFkaWN0aW9uYXJ5LnRy
eUdldFByb3BlcnR5KCJ0aW1lb3V0Iiwgb3B0aW9ucy5nZXQoKSwgc2V0VGltZW91dCkpCisgICAg
ICAgIHJldHVybiAwOworICAgIGlmICghZGljdGlvbmFyeS50cnlHZXRQcm9wZXJ0eSgibWF4aW11
bUFnZSIsIG9wdGlvbnMuZ2V0KCksIHNldE1heGltdW1BZ2UpKQogICAgICAgICByZXR1cm4gMDsK
LSAgICBpZiAoIW1heGltdW1BZ2VWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGRvdWJs
ZSBtYXhpbXVtQWdlTnVtYmVyID0gbWF4aW11bUFnZVZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgaWYgKGlzaW5mKG1heGltdW1BZ2VOdW1iZXIpICYmIChtYXhpbXVtQWdlTnVtYmVyID4g
MCkpIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBwb3NpdGl2ZSBpbmZpbml0eSwg
Y2xlYXIgbWF4aW11bUFnZS4KLSAgICAgICAgICAgIG9wdGlvbnMtPmNsZWFyTWF4aW11bUFnZSgp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gV3JhcCB0byBpbnQzMiBhbmQgZm9y
Y2Ugbm9uLW5lZ2F0aXZlIHRvIG1hdGNoIGJlaGF2aW9yIG9mIHdpbmRvdy5zZXRUaW1lb3V0Lgot
ICAgICAgICAgICAgb3B0aW9ucy0+c2V0TWF4aW11bUFnZShtYXgoMCwgbWF4aW11bUFnZVZhbHVl
LnRvSW50MzIoZXhlYykpKTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KIAogICAgIHJldHVy
biBvcHRpb25zLnJlbGVhc2UoKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105680</attachid>
            <date>2011-08-30 13:06:52 -0700</date>
            <delta_ts>2011-08-30 13:36:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67213-20110830130651.patch</filename>
            <type>text/plain</type>
            <size>24861</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0MDk3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTEtMDgtMzAgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZWZhY3RvciBKUyBkaWN0aW9uYXJ5IGNv
ZGUgaW50byBoZWxwZXIgY2xhc3MgYW5kIGNvdmVydCBnZW9sb2NhdGlvbiBjb2RlIHRvIHVzZSBp
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjcyMTMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdOVW1h
a2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVXNlSlNDLmNtYWtlOgorICAgICAgICAqIFdlYkNv
cmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNCaW5kaW5nc0FsbEluT25lLmNwcDoKKyAg
ICAgICAgQWRkIG5ldyBmaWxlcy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRGljdGlvbmFy
eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFs
dWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkpTRGljdGlvbmFyeTo6SlNEaWN0aW9uYXJ5KToKKyAgICAgICAgKFdlYkNv
cmU6OkpTRGljdGlvbmFyeTo6dHJ5R2V0UHJvcGVydHkpOgorICAgICAgICBFbmNhcHN1bGF0ZSBk
aWN0aW9uYXJ5IGluaXRpYWxpemF0aW9uIGNvZGUgaW50byBKU0RpY3Rpb25hcnkgY2xhc3MuCisK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50Q29uc3RydWN0b3JzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmNvbnN0cnVjdEpTRXZlbnRXaXRoSW5pdGlhbGl6ZXIpOgorICAgICAgICBVc2Ug
SlNEaWN0aW9uYXJ5LgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNHZW9sb2NhdGlvbkN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRFbmFibGVIaWdoQWNjdXJhY3kpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0VGltZW91dCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRNYXhpbXVtQWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVBvc2l0aW9uT3B0aW9ucyk6CisgICAgICAgIFVz
ZSBKU0RpY3Rpb25hcnkuCisKIDIwMTEtMDgtMjkgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxl
LmNvbT4KIAogICAgICAgICBUeXBlZEFycmF5cyBkb24ndCBlbnN1cmUgdGhhdCBkZW5vcm1hbGlz
ZWQgdmFsdWVzIGFyZSBub3JtYWxpc2VkCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0JKHJldmlzaW9uIDk0MDk3KQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQkod29ya2luZyBjb3B5KQpAQCAtNjg3LDYgKzY4Nyw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2suaCBcCiAJ
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5oIFwK
KwlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwIFwKKwlTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaCBcCiAJU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01BcHBsaWNhdGlvbkNhY2hlQ3VzdG9tLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nLmggXApJbmRleDogU291cmNlL1dlYkNvcmUvVXNlSlNDLmNtYWtl
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1VzZUpTQy5jbWFrZQkocmV2aXNpb24gOTQw
OTcpCisrKyBTb3VyY2UvV2ViQ29yZS9Vc2VKU0MuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDcgQEAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgYmluZGluZ3MvanMv
SlNDb25zb2xlQ3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTQ29vcmRpbmF0ZXNDdXN0b20u
Y3BwCiAgICAgYmluZGluZ3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwCisgICAgYmluZGlu
Z3MvanMvSlNEaWN0aW9uYXJ5LmNwcAogICAgIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAK
ICAgICBiaW5kaW5ncy9qcy9KU0RPTUZvcm1EYXRhQ3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pz
L0pTRE9NR2xvYmFsT2JqZWN0LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gOTQw
OTcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTQy
Niw2ICs0MjYsNyBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0RPTU9iamVjdEhhc2hUYWJs
ZU1hcC5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuaCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmgnLAorICAgICAgICAgICAgJ2Jp
bmRpbmdzL2pzL0pTRGljdGlvbmFyeS5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9KU0RP
TUJpbmRpbmcuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3Qu
aCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgnLApAQCAtMTc5
MCw2ICsxNzkxLDcgQEAKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9KU0N1c3RvbVZvaWRDYWxs
YmFjay5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZl
ci5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVy
LmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHAnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL2pzL0pTRE9NQXBwbGljYXRpb25DYWNoZUN1c3RvbS5jcHAnLAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAnLAogICAgICAgICAgICAgJ2Jp
bmRpbmdzL2pzL0pTRE9NRm9ybURhdGFDdXN0b20uY3BwJywKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCShy
ZXZpc2lvbiA5NDA5NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNv
cHkpCkBAIC0yNTQsNiArMjU0LDcgQEAgdjggewogICAgICAgICBiaW5kaW5ncy9qcy9KU0Nvb3Jk
aW5hdGVzQ3VzdG9tLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTQ3VzdG9tVm9pZENhbGxi
YWNrLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNw
cCBcCisgICAgICAgIGJpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHAgXAogICAgICAgICBiaW5k
aW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwIFwKICAgICAgICAgYmluZGluZ3MvanMvSlNET01Gb3Jt
RGF0YUN1c3RvbS5jcHAgXAogICAgICAgICBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5j
cHAgXApAQCAtMTMxOCw2ICsxMzE5LDcgQEAgdjggewogICAgICAgICBiaW5kaW5ncy9qcy9KU0Nh
bGxiYWNrRGF0YS5oIFwKICAgICAgICAgYmluZGluZ3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2su
aCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmggXAorICAg
ICAgICBiaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pT
RE9NQmluZGluZy5oIFwKICAgICAgICAgYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaCBc
CiAgICAgICAgIGJpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmggXApJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDk0
MDk3KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdv
cmtpbmcgY29weSkKQEAgLTYwMDI1LDYgKzYwMDI1LDYyIEBACiAJCQkJCTwvRmlsZUNvbmZpZ3Vy
YXRpb24+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmlu
ZGluZ3NcanNcSlNEaWN0aW9uYXJ5LmNwcCIKKwkJCQkJPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRy
dWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
CisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVy
VG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQkJ
RXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5h
bWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9u
PgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZM
aXRlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJ
CQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8
L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9
IkRlYnVnX0FsbHxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJ
PgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4K
KwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJ
CQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUi
CisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJ
CQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTwvRmlsZT4KKwkJCQk8Rmls
ZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTRGljdGlvbmFyeS5oIgorCQkJ
CQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGlu
Z3NcanNcSlNEaXJlY3RvcnlFbnRyeUN1c3RvbS5jcHAiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiA5NDA5NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTI1Miw2ICs1MjUyLDggQEAKIAkJ
QkNFM0JFQzMwRDIyMkIxRDAwN0UwNkU0IC8qIFRhZ05vZGVMaXN0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0UzQkVDMTBEMjIyQjFEMDA3RTA2RTQg
LyogVGFnTm9kZUxpc3QuaCAqLzsgfTsKIAkJQkNFNDM4OTcxNDBCMDA1MTAwNUU0MzdFIC8qIEV2
ZW50Q29uc3RydWN0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQ0U0Mzg5NjE0MEIwMDUxMDA1RTQzN0UgLyogRXZlbnRDb25zdHJ1Y3RvcnMuaCAq
LzsgfTsKIAkJQkNFNDM4OUExNDBCMDA3MzAwNUU0MzdFIC8qIEpTRXZlbnRDb25zdHJ1Y3RvcnMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFNDM4
OTkxNDBCMDA3MzAwNUU0MzdFIC8qIEpTRXZlbnRDb25zdHJ1Y3RvcnMuY3BwICovOyB9OworCQlC
Q0U0Mzg5QzE0MEIxQkE4MDA1RTQzN0UgLyogSlNEaWN0aW9uYXJ5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0U0Mzg5QjE0MEIxQkE3MDA1RTQzN0Ug
LyogSlNEaWN0aW9uYXJ5LmggKi87IH07CisJCUJDRTQzOEEyMTQwQzBEQzAwMDVFNDM3RSAvKiBK
U0RpY3Rpb25hcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkNFNDM4QTExNDBDMERCRjAwNUU0MzdFIC8qIEpTRGljdGlvbmFyeS5jcHAgKi87IH07
CiAJCUJDRTQ0MTMzMTJGNzQ4RTIwMDlCODRCOCAvKiBSZW5kZXJDb21iaW5lVGV4dC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0U0NDEzMTEyRjc0
OEUyMDA5Qjg0QjggLyogUmVuZGVyQ29tYmluZVRleHQuY3BwICovOyB9OwogCQlCQ0U0NDEzNDEy
Rjc0OEUyMDA5Qjg0QjggLyogUmVuZGVyQ29tYmluZVRleHQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTQ0MTMyMTJGNzQ4RTIwMDlCODRCOCAvKiBS
ZW5kZXJDb21iaW5lVGV4dC5oICovOyB9OwogCQlCQ0U0NDEzNjEyRjc0OTBCMDA5Qjg0QjggLyog
Rm9udFdpZHRoVmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkNFNDQxMzUxMkY3NDkwQjAwOUI4NEI4IC8qIEZvbnRXaWR0aFZhcmlhbnQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTE5ODEs
NiArMTE5ODMsOCBAQAogCQlCQ0UzQkVDMTBEMjIyQjFEMDA3RTA2RTQgLyogVGFnTm9kZUxpc3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGFnTm9kZUxpc3QuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNFNDM4OTYxNDBCMDA1MTAwNUU0MzdFIC8qIEV2ZW50
Q29uc3RydWN0b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEV2ZW50Q29u
c3RydWN0b3JzLmg7IHBhdGggPSBnZW5lcmljL0V2ZW50Q29uc3RydWN0b3JzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRTQzODk5MTQwQjAwNzMwMDVFNDM3RSAvKiBKU0V2ZW50
Q29uc3RydWN0b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
RXZlbnRDb25zdHJ1Y3RvcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0U0
Mzg5QjE0MEIxQkE3MDA1RTQzN0UgLyogSlNEaWN0aW9uYXJ5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTRGljdGlvbmFyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlCQ0U0MzhBMTE0MEMwREJGMDA1RTQzN0UgLyogSlNEaWN0aW9uYXJ5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRGljdGlvbmFyeS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRTQ0MTMxMTJGNzQ4RTIwMDlCODRCOCAvKiBSZW5kZXJD
b21iaW5lVGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5k
ZXJDb21iaW5lVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRTQ0MTMy
MTJGNzQ4RTIwMDlCODRCOCAvKiBSZW5kZXJDb21iaW5lVGV4dC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJDb21iaW5lVGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCQ0U0NDEzNTEyRjc0OTBCMDA5Qjg0QjggLyogRm9udFdpZHRoVmFyaWFudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250V2lkdGhWYXJpYW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODU0Nyw2ICsxODU1MSw4IEBACiAJCQkJMUM4
MUJBMDMwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuY3BwICovLAogCQkJ
CTFDODFCQTA0MEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmggKi8sCiAJ
CQkJOTNCNzBENDcwOUVCMEM3QzAwOUQ4NDY4IC8qIEpTRE9NQmluZGluZy5jcHAgKi8sCisJCQkJ
QkNFNDM4QTExNDBDMERCRjAwNUU0MzdFIC8qIEpTRGljdGlvbmFyeS5jcHAgKi8sCisJCQkJQkNF
NDM4OUIxNDBCMUJBNzAwNUU0MzdFIC8qIEpTRGljdGlvbmFyeS5oICovLAogCQkJCTkzQjcwRDQ4
MDlFQjBDN0MwMDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuaCAqLywKIAkJCQlFMUMzNkNCQzBFQjA4
MDYyMDA3NDEwQkMgLyogSlNET01HbG9iYWxPYmplY3QuY3BwICovLAogCQkJCUUxQzM2QzAyMEVC
MDc2RDYwMDc0MTBCQyAvKiBKU0RPTUdsb2JhbE9iamVjdC5oICovLApAQCAtMjM0NDcsNiArMjM0
NTMsNyBAQAogCQkJCTkzNTAwRjMyMTNGREUzQkUwMDk5RUMyNCAvKiBOU1Njcm9sbGVySW1wRGV0
YWlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRDBBM0E3MzExNDA1QTM5ODAwRkI4RUQzIC8qIFJl
c291cmNlTG9hZGVyT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFNDM4OTcxNDBCMDA1
MTAwNUU0MzdFIC8qIEV2ZW50Q29uc3RydWN0b3JzLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0U0
Mzg5QzE0MEIxQkE4MDA1RTQzN0UgLyogSlNEaWN0aW9uYXJ5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFNDUzMjJBQzE0MENFMjY3MDA1QTBGOTIgLyogU2VsZWN0b3JRdWVyeS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjEwQjY5ODAxNDBDMTc0MDAwQkMxQzI2IC8qIFdlYlZUVFRva2VuLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCMTBCNjk4MjE0MEMxNzQwMDBCQzFDMjYgLyogV2ViVlRUVG9rZW5pemVy
LmggaW4gSGVhZGVycyAqLywKQEAgLTI2MjU4LDYgKzI2MjY1LDcgQEAKIAkJCQkxQTE0MTRCNTEz
QTBGMDUwMDAxOTk5NkMgLyogV2ViS2l0Rm9udEZhbWlseU5hbWVzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCURGOUFGRDczMTNGQzMxRDgwMDE1RkVCNyAvKiBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFNDM4OUExNDBCMDA3MzAwNUU0
MzdFIC8qIEpTRXZlbnRDb25zdHJ1Y3RvcnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQkNFNDM4
QTIxNDBDMERDMDAwNUU0MzdFIC8qIEpTRGljdGlvbmFyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlFNDUzMjJBQjE0MENFMjY3MDA1QTBGOTIgLyogU2VsZWN0b3JRdWVyeS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCMTBCNjk4MTE0MEMxNzQwMDBCQzFDMjYgLyogV2ViVlRUVG9rZW5pemVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQmluZGluZ3NBbGxJbk9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNCaW5kaW5nc0FsbEluT25lLmNwcAkocmV2aXNpb24gOTQwOTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0JpbmRpbmdzQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJv
ckNhbGxiYWNrLmNwcCIKICNpbmNsdWRlICJKU0N1c3RvbVZvaWRDYWxsYmFjay5jcHAiCiAjaW5j
bHVkZSAiSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwIgorI2luY2x1ZGUgIkpTRGljdGlvbmFy
eS5jcHAiCiAjaW5jbHVkZSAiSlNET01BcHBsaWNhdGlvbkNhY2hlQ3VzdG9tLmNwcCIKICNpbmNs
dWRlICJKU0RPTUJpbmRpbmcuY3BwIgogI2luY2x1ZGUgIkpTRE9NRm9ybURhdGFDdXN0b20uY3Bw
IgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MiBAQAorCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTRGljdGlvbmFyeS5oIgorCit1c2luZyBuYW1lc3BhY2Ug
SlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0pTRGljdGlvbmFyeTo6R2V0UHJvcGVydHlS
ZXN1bHQgSlNEaWN0aW9uYXJ5Ojp0cnlHZXRQcm9wZXJ0eShjb25zdCBjaGFyKiBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUmIGZpbmFsUmVzdWx0KQoreworICAgIElkZW50aWZpZXIgaWRlbnRpZmllciht
X2V4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgUHJvcGVydHlTbG90IHNsb3QobV9pbml0aWFsaXpl
ck9iamVjdCk7CisgICAgCisgICAgaWYgKCFtX2luaXRpYWxpemVyT2JqZWN0LT5nZXRQcm9wZXJ0
eVNsb3QobV9leGVjLCBpZGVudGlmaWVyLCBzbG90KSkKKyAgICAgICAgcmV0dXJuIE5vUHJvcGVy
dHlGb3VuZDsKKworICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1
cm4gRXhjZXB0aW9uVGhyb3duOworCisgICAgZmluYWxSZXN1bHQgPSBzbG90LmdldFZhbHVlKG1f
ZXhlYywgaWRlbnRpZmllcik7CisgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIHJldHVybiBFeGNlcHRpb25UaHJvd247CisKKyAgICByZXR1cm4gUHJvcGVydHlGb3VuZDsK
K30KKwordm9pZCBKU0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUsIGJvb2wmIHJlc3VsdCkKK3sKKyAgICByZXN1bHQgPSB2YWx1ZS50b0Jvb2xl
YW4oZXhlYyk7Cit9CisKK3ZvaWQgSlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBkb3VibGUmIHJlc3VsdCkKK3sKKyAgICByZXN1bHQgPSB2
YWx1ZS50b051bWJlcihleGVjKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEpTRGljdGlvbmFyeV9oCisj
ZGVmaW5lIEpTRGljdGlvbmFyeV9oCisKKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNEaWN0aW9uYXJ5IHsKK3B1YmxpYzoKKyAgICBK
U0RpY3Rpb25hcnkoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNPYmplY3QqIGluaXRpYWxp
emVyT2JqZWN0KQorICAgICAgICA6IG1fZXhlYyhleGVjKQorICAgICAgICAsIG1faW5pdGlhbGl6
ZXJPYmplY3QoaW5pdGlhbGl6ZXJPYmplY3QpCisgICAgeworICAgIH0KKworICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBSZXN1bHQ+CisgICAgYm9vbCB0cnlHZXRQcm9wZXJ0eShjb25zdCBjaGFyKiBw
cm9wZXJ0eU5hbWUsIFJlc3VsdCYpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFJlc3VsdD4KKyAgICBib29sIHRyeUdldFByb3BlcnR5KGNvbnN0IGNoYXIqIHByb3BlcnR5
TmFtZSwgVCogY29udGV4dCwgdm9pZCAoKnNldHRlcikoVCogY29udGV4dCwgY29uc3QgUmVzdWx0
JikpOworCitwcml2YXRlOgorICAgIGVudW0gR2V0UHJvcGVydHlSZXN1bHQgeworICAgICAgICBF
eGNlcHRpb25UaHJvd24sCisgICAgICAgIE5vUHJvcGVydHlGb3VuZCwKKyAgICAgICAgUHJvcGVy
dHlGb3VuZAorICAgIH07CisgICAgR2V0UHJvcGVydHlSZXN1bHQgdHJ5R2V0UHJvcGVydHkoY29u
c3QgY2hhciogcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUmKTsKKworICAgIHN0YXRpYyB2b2lk
IGNvbnZlcnRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgYm9vbCYgcmVzdWx0
KTsKKyAgICBzdGF0aWMgdm9pZCBjb252ZXJ0VmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWUsIGRvdWJsZSYgcmVzdWx0KTsKKworICAgIEpTQzo6RXhlY1N0YXRlKiBtX2V4ZWM7Cisg
ICAgSlNDOjpKU09iamVjdCogbV9pbml0aWFsaXplck9iamVjdDsKK307CisKKwordGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJlc3VsdD4KK2Jvb2wgSlNEaWN0aW9uYXJ5Ojp0cnlHZXRQ
cm9wZXJ0eShjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIFQqIGNvbnRleHQsIHZvaWQgKCpzZXR0
ZXIpKFQqIGNvbnRleHQsIGNvbnN0IFJlc3VsdCYpKQoreworICAgIEpTQzo6SlNWYWx1ZSB2YWx1
ZTsKKyAgICBzd2l0Y2ggKHRyeUdldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpKSB7Cisg
ICAgY2FzZSBFeGNlcHRpb25UaHJvd246CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNl
IFByb3BlcnR5Rm91bmQ6IHsKKyAgICAgICAgUmVzdWx0IHJlc3VsdDsKKyAgICAgICAgY29udmVy
dFZhbHVlKG1fZXhlYywgdmFsdWUsIHJlc3VsdCk7CisKKyAgICAgICAgaWYgKG1fZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgICAgIHNl
dHRlcihjb250ZXh0LCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBO
b1Byb3BlcnR5Rm91bmQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUmVzdWx0PgorYm9vbCBKU0RpY3Rpb25hcnk6OnRy
eUdldFByb3BlcnR5KGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSwgUmVzdWx0JiBmaW5hbFJlc3Vs
dCkKK3sKKyAgICBzdHJ1Y3QgSWRlbnRpdHlTZXR0ZXIgeworICAgICAgICBzdGF0aWMgdm9pZCBp
ZGVudGl0eVNldHRlcihSZXN1bHQqIGNvbnRleHQsIGNvbnN0IFJlc3VsdCYgcmVzdWx0KQorICAg
ICAgICB7CisgICAgICAgICAgICAqY29udGV4dCA9IHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICByZXR1cm4gdHJ5R2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCAmZmluYWxSZXN1bHQs
IElkZW50aXR5U2V0dGVyOjppZGVudGl0eVNldHRlcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEpTRGljdGlvbmFyeV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0V2ZW50Q29uc3RydWN0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q29uc3RydWN0b3JzLmNwcAkocmV2aXNpb24gOTQw
OTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q29uc3RydWN0b3JzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjcsNDAgKzI3LDE1IEBACiAjaW5jbHVkZSAiRXZlbnRDb25z
dHJ1Y3RvcnMuaCIKIAogI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiSlNEaWN0aW9uYXJ5
LmgiCiAjaW5jbHVkZSAiSlNFdmVudC5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgdm9p
ZCBjb252ZXJ0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBib29sJiByZXN1
bHQpCi17Ci0gICAgcmVzdWx0ID0gdmFsdWUudG9Cb29sZWFuKGV4ZWMpOwotfQotCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgUmVzdWx0Pgotc3RhdGljIGJvb2wgdHJ5R2V0UHJvcGVydHkoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogaW5pdGlhbGl6ZXJPYmplY3QsIGNvbnN0IGNoYXIqIHByb3BlcnR5
TmFtZSwgUmVzdWx0JiByZXN1bHQpCi17Ci0gICAgSWRlbnRpZmllciBpZGVudGlmaWVyKGV4ZWMs
IHByb3BlcnR5TmFtZSk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3QoaW5pdGlhbGl6ZXJPYmplY3Qp
OwotICAgIGlmIChpbml0aWFsaXplck9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50
aWZpZXIsIHNsb3QpKSB7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc2xvdC5nZXRW
YWx1ZShleGVjLCBpZGVudGlmaWVyKTsKLSAgICAgICAgCi0gICAgICAgIGNvbnZlcnRWYWx1ZShl
eGVjLCB2YWx1ZSwgcmVzdWx0KTsKLQotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0cnVl
OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb25zdHJ1Y3RvciwgdHlwZW5hbWUgRXZlbnRUeXBl
LCB0eXBlbmFtZSBFdmVudEluaXRUeXBlPgotc3RhdGljIEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVj
dEpTRXZlbnRXaXRoSW5pdGlhbGl6ZXIoRXhlY1N0YXRlKiBleGVjLCBib29sICgqZmlsbGVyKShF
dmVudEluaXRUeXBlJiwgRXhlY1N0YXRlKiwgSlNPYmplY3QqKSkKK3N0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBjb25zdHJ1Y3RKU0V2ZW50V2l0aEluaXRpYWxpemVyKEV4ZWNTdGF0ZSogZXhlYywgYm9v
bCAoKmZpbGxlcikoRXZlbnRJbml0VHlwZSYsIEpTRGljdGlvbmFyeSYpKQogewogICAgIENvbnN0
cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0gc3RhdGljX2Nhc3Q8Q29uc3RydWN0b3IqPihleGVjLT5j
YWxsZWUoKSk7CiAKQEAgLTc5LDggKzU0LDExIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBjb25z
dHJ1Y3RKU0V2ZW50V2kKICAgICAgICAgLy8gR2l2ZW4gdGhlIGFib3ZlIHRlc3QsIHRoaXMgd2ls
bCBhbHdheXMgeWllbGQgYW4gb2JqZWN0LgogICAgICAgICBKU09iamVjdCogaW5pdGlhbGl6ZXJP
YmplY3QgPSBpbml0aWFsaXplclZhbHVlLnRvT2JqZWN0KGV4ZWMpOwogCisgICAgICAgIC8vIENy
ZWF0ZSB0aGUgZGljdGlvbmFyeSB3cmFwcGVyIGZyb20gdGhlIGluaXRpYWxpemVyIG9iamVjdC4K
KyAgICAgICAgSlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnkoZXhlYywgaW5pdGlhbGl6ZXJPYmplY3Qp
OworCiAgICAgICAgIC8vIEF0dGVtcHQgdG8gZmlsbCBpbiB0aGUgRXZlbnRJbml0LgotICAgICAg
ICBpZiAoIWZpbGxlcihldmVudEluaXQsIGV4ZWMsIGluaXRpYWxpemVyT2JqZWN0KSkKKyAgICAg
ICAgaWYgKCFmaWxsZXIoZXZlbnRJbml0LCBkaWN0aW9uYXJ5KSkKICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC04OCw4ICs2Niw5
IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKU0V2ZW50V2kKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRvSlMoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCks
IGV2ZW50LmdldCgpKSk7CiB9CiAKKwogI2RlZmluZSBESUNUSU9OQVJZX1NUQVJUKEV2ZW50KSBc
Ci0gICAgc3RhdGljIGJvb2wgZmlsbCMjRXZlbnQjI0luaXQoRXZlbnQjI0luaXQmIGV2ZW50SW5p
dCwgRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogaW5pdGlhbGl6ZXJPYmplY3QpIFwKKyAgICBz
dGF0aWMgYm9vbCBmaWxsIyNFdmVudCMjSW5pdChFdmVudCMjSW5pdCYgZXZlbnRJbml0LCBKU0Rp
Y3Rpb25hcnkmIGRpY3Rpb25hcnkpIFwKICAgICB7CiAKICNkZWZpbmUgRElDVElPTkFSWV9FTkQo
RXZlbnQpIFwKQEAgLTEwMiwxMSArODEsMTEgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGNvbnN0
cnVjdEpTRXZlbnRXaQogICAgIH0KIAogI2RlZmluZSBGSUxMX1BBUkVOVF9QUk9QRVJUSUVTKHBh
cmVudCkgXAotICAgIGlmICghZmlsbCMjcGFyZW50IyNJbml0KGV2ZW50SW5pdCwgZXhlYywgaW5p
dGlhbGl6ZXJPYmplY3QpKSBcCisgICAgaWYgKCFmaWxsIyNwYXJlbnQjI0luaXQoZXZlbnRJbml0
LCBkaWN0aW9uYXJ5KSkgXAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICNkZWZpbmUgRklMTF9Q
Uk9QRVJUWShwcm9wZXJ0eU5hbWUpIFwKLSAgICBpZiAoIXRyeUdldFByb3BlcnR5KGV4ZWMsIGlu
aXRpYWxpemVyT2JqZWN0LCAjcHJvcGVydHlOYW1lLCBldmVudEluaXQucHJvcGVydHlOYW1lKSkg
XAorICAgIGlmICghZGljdGlvbmFyeS50cnlHZXRQcm9wZXJ0eSgjcHJvcGVydHlOYW1lLCBldmVu
dEluaXQucHJvcGVydHlOYW1lKSkgXAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKIElOU1RBTlRJ
QVRFX0FMTF9FVkVOVF9JTklUSUFMSVpJTkdfQ09OU1RSVUNUT1JTKERJQ1RJT05BUllfU1RBUlQs
IERJQ1RJT05BUllfRU5ELCBGSUxMX1BBUkVOVF9QUk9QRVJUSUVTLCBGSUxMX1BST1BFUlRZKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNHZW9sb2NhdGlvbkN1
c3RvbS5jcHAJKHJldmlzaW9uIDk0MDk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJHZW9sb2NhdGlvbi5oIgogI2luY2x1
ZGUgIkpTRE9NV2luZG93LmgiCisjaW5jbHVkZSAiSlNEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAi
SlNQb3NpdGlvbkNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiSlNQb3NpdGlvbkVycm9yQ2FsbGJhY2su
aCIKICNpbmNsdWRlICJQb3NpdGlvbk9wdGlvbnMuaCIKQEAgLTQ1LDYgKzQ2LDM0IEBAIHVzaW5n
IG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gSlNEaWN0aW9uYXJ5
IGhlbHBlciBmdW5jdGlvbnMKKworc3RhdGljIHZvaWQgc2V0RW5hYmxlSGlnaEFjY3VyYWN5KFBv
c2l0aW9uT3B0aW9ucyogb3B0aW9ucywgY29uc3QgYm9vbCYgZW5hYmxlSGlnaEFjY3VyYWN5KQor
eworICAgIG9wdGlvbnMtPnNldEVuYWJsZUhpZ2hBY2N1cmFjeShlbmFibGVIaWdoQWNjdXJhY3kp
OworfQorCitzdGF0aWMgdm9pZCBzZXRUaW1lb3V0KFBvc2l0aW9uT3B0aW9ucyogb3B0aW9ucywg
Y29uc3QgZG91YmxlJiB0aW1lb3V0KQoreworICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBwb3NpdGl2
ZSBpbmZpbml0eSwgdGhlcmUncyBub3RoaW5nIHRvIGRvLgorICAgIGlmICghKGlzaW5mKHRpbWVv
dXQpICYmICh0aW1lb3V0ID4gMCkpKSB7CisgICAgICAgIC8vIFdyYXAgdG8gaW50MzIgYW5kIGZv
cmNlIG5vbi1uZWdhdGl2ZSB0byBtYXRjaCBiZWhhdmlvciBvZiB3aW5kb3cuc2V0VGltZW91dC4K
KyAgICAgICAgb3B0aW9ucy0+c2V0VGltZW91dChtYXgoMCwgc3RhdGljX2Nhc3Q8aW50Pih0aW1l
b3V0KSkpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgc2V0TWF4aW11bUFnZShQb3NpdGlvbk9w
dGlvbnMqIG9wdGlvbnMsIGNvbnN0IGRvdWJsZSYgbWF4aW11bUFnZSkKK3sKKyAgICBpZiAoaXNp
bmYobWF4aW11bUFnZSkgJiYgKG1heGltdW1BZ2UgPiAwKSkgeworICAgICAgICAvLyBJZiB0aGUg
dmFsdWUgaXMgcG9zaXRpdmUgaW5maW5pdHksIGNsZWFyIG1heGltdW1BZ2UuCisgICAgICAgIG9w
dGlvbnMtPmNsZWFyTWF4aW11bUFnZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFdyYXAg
dG8gaW50MzIgYW5kIGZvcmNlIG5vbi1uZWdhdGl2ZSB0byBtYXRjaCBiZWhhdmlvciBvZiB3aW5k
b3cuc2V0VGltZW91dC4KKyAgICAgICAgb3B0aW9ucy0+c2V0TWF4aW11bUFnZShtYXgoMCwgc3Rh
dGljX2Nhc3Q8aW50PihtYXhpbXVtQWdlKSkpOworICAgIH0KK30KKworCiBzdGF0aWMgUGFzc1Jl
ZlB0cjxQb3NpdGlvbk9wdGlvbnM+IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucyhFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgLy8gQ3JlYXRlIGRlZmF1bHQgb3B0aW9ucy4KQEAg
LTU5LDUyICs4OCwxNSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IGNyZWF0
CiAgICAgLy8gR2l2ZW4gdGhlIGFib3ZlIHRlc3QsIHRoaXMgd2lsbCBhbHdheXMgeWllbGQgYW4g
b2JqZWN0LgogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB2YWx1ZS50b09iamVjdChleGVjKTsKIAot
ICAgIC8vIEZvciBhbGwgdGhyZWUgcHJvcGVydGllcywgd2UgYXBwbHkgdGhlIGZvbGxvd2luZyAu
Li4KLSAgICAvLyAtIElmIHRoZSBnZXR0ZXIgb3IgdGhlIHByb3BlcnR5J3MgdmFsdWVPZiBtZXRo
b2QgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgd2UKLSAgICAvLyAgIHF1aXQgc28gYXMgbm90IHRvIHJp
c2sgb3ZlcndyaXRpbmcgdGhlIGV4Y2VwdGlvbi4KLSAgICAvLyAtIElmIHRoZSB2YWx1ZSBpcyBh
YnNlbnQgb3IgdW5kZWZpbmVkLCB3ZSBkb24ndCBvdmVycmlkZSB0aGUgZGVmYXVsdC4KLSAgICBK
U1ZhbHVlIGVuYWJsZUhpZ2hBY2N1cmFjeVZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgSWRlbnRp
ZmllcihleGVjLCAiZW5hYmxlSGlnaEFjY3VyYWN5IikpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFlbmFibGVIaWdoQWNjdXJhY3lW
YWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIG9wdGlvbnMtPnNldEVuYWJsZUhpZ2hBY2N1
cmFjeShlbmFibGVIaWdoQWNjdXJhY3lWYWx1ZS50b0Jvb2xlYW4oZXhlYykpOwotICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9Cisg
ICAgLy8gQ3JlYXRlIHRoZSBkaWN0aW9uYXJ5IHdyYXBwZXIgZnJvbSB0aGUgaW5pdGlhbGl6ZXIg
b2JqZWN0LgorICAgIEpTRGljdGlvbmFyeSBkaWN0aW9uYXJ5KGV4ZWMsIG9iamVjdCk7CiAKLSAg
ICBKU1ZhbHVlIHRpbWVvdXRWYWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhl
YywgInRpbWVvdXQiKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmICgh
ZGljdGlvbmFyeS50cnlHZXRQcm9wZXJ0eSgiZW5hYmxlSGlnaEFjY3VyYWN5Iiwgb3B0aW9ucy5n
ZXQoKSwgc2V0RW5hYmxlSGlnaEFjY3VyYWN5KSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYg
KCF0aW1lb3V0VmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBkb3VibGUgdGltZW91dE51
bWJlciA9IHRpbWVvdXRWYWx1ZS50b051bWJlcihleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIC8vIElmIHRoZSB2
YWx1ZSBpcyBwb3NpdGl2ZSBpbmZpbml0eSwgdGhlcmUncyBub3RoaW5nIHRvIGRvLgotICAgICAg
ICBpZiAoIShpc2luZih0aW1lb3V0TnVtYmVyKSAmJiAodGltZW91dE51bWJlciA+IDApKSkgewot
ICAgICAgICAgICAgLy8gV3JhcCB0byBpbnQzMiBhbmQgZm9yY2Ugbm9uLW5lZ2F0aXZlIHRvIG1h
dGNoIGJlaGF2aW9yIG9mIHdpbmRvdy5zZXRUaW1lb3V0LgotICAgICAgICAgICAgb3B0aW9ucy0+
c2V0VGltZW91dChtYXgoMCwgdGltZW91dFZhbHVlLnRvSW50MzIoZXhlYykpKTsKLSAgICAgICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIEpTVmFsdWUgbWF4aW11bUFnZVZhbHVlID0gb2JqZWN0
LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAibWF4aW11bUFnZSIpKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKCFkaWN0aW9uYXJ5LnRyeUdldFByb3BlcnR5KCJ0
aW1lb3V0Iiwgb3B0aW9ucy5nZXQoKSwgc2V0VGltZW91dCkpCisgICAgICAgIHJldHVybiAwOwor
ICAgIGlmICghZGljdGlvbmFyeS50cnlHZXRQcm9wZXJ0eSgibWF4aW11bUFnZSIsIG9wdGlvbnMu
Z2V0KCksIHNldE1heGltdW1BZ2UpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIW1heGlt
dW1BZ2VWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGRvdWJsZSBtYXhpbXVtQWdlTnVt
YmVyID0gbWF4aW11bUFnZVZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgaWYgKGlzaW5m
KG1heGltdW1BZ2VOdW1iZXIpICYmIChtYXhpbXVtQWdlTnVtYmVyID4gMCkpIHsKLSAgICAgICAg
ICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBwb3NpdGl2ZSBpbmZpbml0eSwgY2xlYXIgbWF4aW11bUFn
ZS4KLSAgICAgICAgICAgIG9wdGlvbnMtPmNsZWFyTWF4aW11bUFnZSgpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgLy8gV3JhcCB0byBpbnQzMiBhbmQgZm9yY2Ugbm9uLW5lZ2F0aXZl
IHRvIG1hdGNoIGJlaGF2aW9yIG9mIHdpbmRvdy5zZXRUaW1lb3V0LgotICAgICAgICAgICAgb3B0
aW9ucy0+c2V0TWF4aW11bUFnZShtYXgoMCwgbWF4aW11bUFnZVZhbHVlLnRvSW50MzIoZXhlYykp
KTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KIAogICAgIHJldHVybiBvcHRpb25zLnJlbGVh
c2UoKTsKIH0K
</data>
<flag name="review"
          id="101908"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>