<?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>27426</bug_id>
          
          <creation_ts>2009-07-19 13:37:52 -0700</creation_ts>
          <short_desc>adding GDOMBinding.cpp/h as part of GObject bindings</short_desc>
          <delta_ts>2009-08-12 18:04:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</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>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>16401</blocked>
    
    <blocked>27430</blocked>
    
    <blocked>28096</blocked>
    
    <blocked>28097</blocked>
    
    <blocked>28098</blocked>
    
    <blocked>28099</blocked>
    
    <blocked>28101</blocked>
    
    <blocked>28102</blocked>
    
    <blocked>28103</blocked>
    
    <blocked>28104</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Luke Kenneth Casson Leighton">lkcl</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>a9016009</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>133012</commentid>
    <comment_count>0</comment_count>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-07-19 13:37:52 -0700</bug_when>
    <thetext>this is part of a series of patches to add gobject bindings.
it is split into a series under an agreement arranged by david.

this patch adds the essential mapping/bindings between gobject objects and webkit c++ objects.  it is absolutely critical that an existing c++ object NOT be allocated a different gobject object, even if the c++ object has been typecast to something wildly different (further down the base class hierarchy).

the exact same absolutely essential trick is deployed in both obj-c and JS bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133013</commentid>
    <comment_count>1</comment_count>
      <attachid>33053</attachid>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-07-19 13:45:49 -0700</bug_when>
    <thetext>Created attachment 33053
adds GDOMBindings

from memory, review comments regarding these files:

* why [were] #ifdef 0s added around some code?

  answer: because they might be needed for debugging purposes, just as they might be needed in JSDOMBindings.cpp

after a few attempts to keep that code in, just in case, reviewers were so insistent that i decided it wasn&apos;t worth messing around with, and removed them.

* why are the headers not in strict alphabetical order?

 answer: whereas in the JS Bindings, the functions are split across several files (toJS), it was decided to simply cut/paste the copies of the functions from which the toGDOM versions are derived into one single file.  the headers were therefore grouped together from the places from whence they came, and &quot;s/JS/GDOM/g&quot; was then applied.  it _may_ make sense to re-split GDOMBinding.cpp back into separate files, which would be made all the easier by keeping the header files grouped together.  a comment [somewhat] to this effect has been placed at the top of the file GDOMBinding.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133735</commentid>
    <comment_count>2</comment_count>
      <attachid>33053</attachid>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-07-22 03:25:47 -0700</bug_when>
    <thetext>Comment on attachment 33053
adds GDOMBindings

this file was accidentally submitted as part of another patch, and got accidentally reviewed :)

to save reviewer time, review is being removed pending update of the comments from the other accidental review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133737</commentid>
    <comment_count>3</comment_count>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-07-22 03:33:39 -0700</bug_when>
    <thetext>in the following:

https://bugs.webkit.org/show_bug.cgi?id=27425#c2

it was noted that the accidentally added GDOMBinding.cpp to that patch contained out-of-order #includes.  these will be corrected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136622</commentid>
    <comment_count>4</comment_count>
      <attachid>33972</attachid>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-08-03 06:40:22 -0700</bug_when>
    <thetext>Created attachment 33972
corrections noted from other reviews (e.g. removal of args on prototypes)

please note: the ordering of the #includes is noted as being out-of-order [strictly speaking] but there is a comment advising that they are not out-of-order, they&apos;re grouped together by purpose.  the reason is because this file is equivalent to and was constructed out of many JS*Binding*.cpp files.  if ever this one file GDOMBindings.cpp is split down into many files, it will be extra work for developers to re-construct the header dependencies of the groupings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137734</commentid>
    <comment_count>5</comment_count>
      <attachid>33972</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-06 19:01:06 -0700</bug_when>
    <thetext>Comment on attachment 33972
corrections noted from other reviews (e.g. removal of args on prototypes)

Bunch of Style violations.

Please don&apos;t post patches with #if 0 code.

There are a billion includes in this file.  maybe we should split some of this out into separate files?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137840</commentid>
    <comment_count>6</comment_count>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-08-07 02:48:47 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 33972 [details])
&gt; Bunch of Style violations.
&gt; 
&gt; Please don&apos;t post patches with #if 0 code.

 mmm... the job of the next person who works on this will be made that much harder if that code is removed.  with the #if 0 all they need do is go, &quot;oh, that&apos;s all i need to do, remove the #if 0&quot;.

without the #if 0 they will go, &quot;wtf am i supposed to be doing?  err, where did this file come from originally, oh, it was cut/paste together from a ton of JSBinding files, where are those, err, what&apos;s the difference between this file and that one&quot;....

so, to save someone a lot of hassle, what is the best procedure to leave code in that will make peoples&apos; lives a lot easier [e.g. when adding SVG Canvas]

 
&gt; There are a billion includes in this file.  maybe we should split some of this
&gt; out into separate files?

 mmm... yehhh.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137932</commentid>
    <comment_count>7</comment_count>
      <attachid>34284</attachid>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-08-07 09:51:08 -0700</bug_when>
    <thetext>Created attachment 34284
split to multiple files, renamed #if 0 to #if __TODO_BUG_20586__

ok the other alternative would be #if ENABLE(TODO_GOBJECT_SVG) or maybe #if ENABLE(GOBJECT_SVG) which would of course not exist, which would be the whole point: disable the code until gobject bindings get 2D SVG Canvas [in a few months time].

i&apos;m _really_ reluctant to have that code cut out.  NULL is returned at the moment, deliberately, to enforce non-availability of 2D Canvas objects.  anyone hunting through the code _without_ the #ifdef&apos;d TODO on it will definitely have a &quot;wtf&quot; moment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137933</commentid>
    <comment_count>8</comment_count>
      <attachid>34284</attachid>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-08-07 09:52:24 -0700</bug_when>
    <thetext>Comment on attachment 34284
split to multiple files, renamed #if 0 to #if __TODO_BUG_20586__

whoops spotted out-of-order comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137935</commentid>
    <comment_count>9</comment_count>
      <attachid>34285</attachid>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-08-07 09:56:06 -0700</bug_when>
    <thetext>Created attachment 34285
corrected GDOMHTMLCollectionCustom.cpp #include order

... whoops :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137937</commentid>
    <comment_count>10</comment_count>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-08-07 09:58:03 -0700</bug_when>
    <thetext>(In reply to comment #5)
 
&gt; There are a billion includes in this file.  maybe we should split some of this
&gt; out into separate files?

 done.  took fiiive houuurs :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138054</commentid>
    <comment_count>11</comment_count>
      <attachid>34285</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-07 12:48:08 -0700</bug_when>
    <thetext>Comment on attachment 34285
corrected GDOMHTMLCollectionCustom.cpp #include order

The purpose of splitting it out into separate files was so that they coudl be reviewed individually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138189</commentid>
    <comment_count>12</comment_count>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-08-07 15:26:44 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 34285 [details])
&gt; The purpose of splitting it out into separate files was so that they coudl be
&gt; reviewed individually.

ohhhh.

*sheepish*...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138672</commentid>
    <comment_count>13</comment_count>
      <attachid>34468</attachid>
    <who name="Gour">gour</who>
    <bug_when>2009-08-10 08:21:00 -0700</bug_when>
    <thetext>Created attachment 34468
uploaded</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139516</commentid>
    <comment_count>14</comment_count>
      <attachid>34468</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 13:45:45 -0700</bug_when>
    <thetext>Comment on attachment 34468
uploaded

See my comments in the mail to you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139686</commentid>
    <comment_count>15</comment_count>
    <who name="Andre Klapper">a9016009</who>
    <bug_when>2009-08-12 18:00:09 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 34468 [details])
&gt; See my comments in the mail to you.

I did not receive that email. For the sake of transparency please keep technical debates in public comments. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139691</commentid>
    <comment_count>16</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 18:04:21 -0700</bug_when>
    <thetext>A second mail was sent to webkit-dev, which is public.
https://lists.webkit.org/pipermail/webkit-dev/2009-August/009456.html

The first mail, mentioned above, was not a technical discussion, but rather a private disparagement for having spammed the patch system. :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33053</attachid>
            <date>2009-07-19 13:45:49 -0700</date>
            <delta_ts>2009-08-03 06:40:22 -0700</delta_ts>
            <desc>adds GDOMBindings</desc>
            <filename>gdbs.patch</filename>
            <type>text/plain</type>
            <size>21813</size>
            <attacher name="Luke Kenneth Casson Leighton">lkcl</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDQ3MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC02MjUzMiw2ICs2MjU0MCwxOCBAQAogCiAgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0U3Rh
dGUuaDogQWRkZWQuCiAKKzIwMDgtMTEtMzAgIGxrY2wgIDxsa2NsQGxrY2wubmV0PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdBUk5JTkc6IE5PIFRF
U1QgQ0FTRVMgQURERUQgT1IgQ0hBTkdFRAorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yNzQyNgorCisgICAgICAgICogYmluZGluZ3MvZ2RvbS9HRE9N
QmluZGluZy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9HRE9NKToKKyAgICAgICAg
KiBiaW5kaW5ncy9nZG9tL0dET01CaW5kaW5nLmg6IEFkZGVkLgorCiAyMDA4LTEyLTA0ICBEaW1p
dHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgR2VvZmYgR2FyZW4uCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2dkb20vR0RPTUJpbmRpbmcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvZ2RvbS9HRE9NQmluZGluZy5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2dkb20vR0RPTUJpbmRpbmcuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYyMSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkt
MjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3JnPgor
ICogIENvcHlyaWdodCAoQykgMjAwOCBMdWtlIEtlbm5ldGggQ2Fzc29uIExlaWdodG9uIDxsa2Ns
QGxrY2wubmV0PgorICogIENvcHlyaWdodCAoQykgMjAwOCBNYXJ0aW4gU290byA8c290b0BmcmVl
ZGVza3RvcC5vcmc+CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisvKgorICogYWRk
ZWQgdW5kZXIgYnVnICMyNzQyNgorICovCisKKy8vIGdjYyAzLnggY2FuJ3QgaGFuZGxlIGluY2x1
ZGluZyB0aGUgSGFzaE1hcCBwb2ludGVyIHNwZWNpYWxpemF0aW9uCisvLyBpbiB0aGlzIGZpbGUK
KyNpZiBkZWZpbmVkIF9fR05VQ19fICYmICFkZWZpbmVkIF9fR0xJQkNYWF9fIC8vIGxlc3MgdGhh
biBnY2MgMy40CisjZGVmaW5lIEhBU0hfTUFQX1BUUl9TUEVDX1dPUktBUk9VTkQgMQorI2VuZGlm
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworLyogeWVzIHRoZXNlIGFyZSBvdXQtb2Ytb3JkZXIs
IGJ1dCB0aGV5IGFyZSBncm91cGVkIGJ5CisgKiBwdXJwb3NlLiAgdGhlICNpbmNsdWRlcyBuZWVk
ZWQgZm9yIHRvR0RPTShEb2N1bWVudCopCisgKiBnb3QgYWRkZWQsIGFuZCB0aGUgb25lcyBmb3Ig
dG9HRE9NKENTU1J1bGUqKSBnb3QgYWRkZWQKKyAqIHNlcGFyYXRlbHksIGFuZCB0aGVuIHNvbWUg
YXJlIGNvbmRpdGlvbmFsIGJhc2VkIG9uCisgKiBjb21waWxlLXRpbWUgb3B0aW9ucywgYW5kIHll
dCBtb3JlIHdpbGwgYmUgYWRkZWQKKyAqIGUuZy4gZm9yIFNWRyBDYW52YXMuCisgKi8KKworI2lu
Y2x1ZGUgImdsaWItb2JqZWN0LmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkdk
b21ET01PYmplY3QuaCIKKyNpbmNsdWRlICJHZG9tRE9NT2JqZWN0UHJpdmF0ZS5oIgorI2luY2x1
ZGUgIkdET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiR0RPTUhUTUxFbGVtZW50V3JhcHBlckZhY3Rv
cnkuaCIKKworI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJHZG9tQ1NTU3R5
bGVTaGVldC5oIgorI2luY2x1ZGUgIkdkb21DU1NTdHlsZVNoZWV0UHJpdmF0ZS5oIgorCisjaW5j
bHVkZSAiRXZlbnRFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5j
bHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiR2RvbU5vZGUuaCIKKworI2luY2x1ZGUgIkdkb21Ob2Rl
UHJpdmF0ZS5oIgorCisjaW5jbHVkZSAiQXR0ci5oIgorI2luY2x1ZGUgIkNEQVRBU2VjdGlvbi5o
IgorI2luY2x1ZGUgIkNTU1ZhbHVlLmgiCisjaW5jbHVkZSAiQ29tbWVudC5oIgorI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgorI2luY2x1ZGUgIkRv
Y3VtZW50VHlwZS5oIgorI2luY2x1ZGUgIkVudGl0eS5oIgorI2luY2x1ZGUgIkVudGl0eVJlZmVy
ZW5jZS5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiR2RvbUF0dHIuaCIK
KyNpbmNsdWRlICJHZG9tQXR0clByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tQ2hhcmFjdGVyRGF0
YS5oIgorI2luY2x1ZGUgIkdkb21UZXh0LmgiCisjaW5jbHVkZSAiR2RvbUNEQVRBU2VjdGlvbi5o
IgorI2luY2x1ZGUgIkdkb21Db21tZW50LmgiCisjaW5jbHVkZSAiR2RvbURvY3VtZW50LmgiCisj
aW5jbHVkZSAiR2RvbURvY3VtZW50RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJHZG9tRG9jdW1lbnRU
eXBlLmgiCisjaW5jbHVkZSAiR2RvbUVudGl0eS5oIgorI2luY2x1ZGUgIkdkb21FbGVtZW50Lmgi
CisjaW5jbHVkZSAiR2RvbUNTU1ZhbHVlTGlzdC5oIgorI2luY2x1ZGUgIkdkb21DU1NQcmltaXRp
dmVWYWx1ZS5oIgorI2luY2x1ZGUgIkdkb21FbnRpdHlSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJH
ZG9tTm90YXRpb24uaCIKKyNpbmNsdWRlICJHZG9tSFRNTERvY3VtZW50LmgiCisjaW5jbHVkZSAi
R2RvbVByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgorI2luY2x1ZGUgIk5vdGF0aW9uLmgiCisjaW5j
bHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCisjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjaW5jbHVk
ZSAiR2RvbUNTU1J1bGUuaCIKKyNpbmNsdWRlICJDU1NDaGFyc2V0UnVsZS5oIgorI2luY2x1ZGUg
IkNTU0ZvbnRGYWNlUnVsZS5oIgorI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKKyNpbmNsdWRl
ICJDU1NNZWRpYVJ1bGUuaCIKKyNpbmNsdWRlICJDU1NQYWdlUnVsZS5oIgorI2luY2x1ZGUgIkNT
U1N0eWxlUnVsZS5oIgorI2luY2x1ZGUgIkNTU1ZhcmlhYmxlc1J1bGUuaCIKKyNpbmNsdWRlICJH
ZG9tQ1NTQ2hhcnNldFJ1bGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NTRm9udEZhY2VSdWxlLmgiCisj
aW5jbHVkZSAiR2RvbUNTU0ltcG9ydFJ1bGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NTTWVkaWFSdWxl
LmgiCisjaW5jbHVkZSAiR2RvbUNTU1BhZ2VSdWxlLmgiCisjaW5jbHVkZSAiR2RvbUNTU1N0eWxl
UnVsZS5oIgorI2luY2x1ZGUgIkdkb21DU1NWYXJpYWJsZXNSdWxlLmgiCisKKyNpbmNsdWRlICJH
ZG9tRXZlbnRQcml2YXRlLmgiCisKKyNpbmNsdWRlICJDbGlwYm9hcmQuaCIKKyNpbmNsdWRlICJF
dmVudC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJHZG9tQ2xpcGJvYXJkLmgiCisj
aW5jbHVkZSAiR2RvbUtleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJHZG9tTWVzc2FnZUV2ZW50
LmgiCisjaW5jbHVkZSAiR2RvbU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJHZG9tTXV0YXRpb25F
dmVudC5oIgorI2luY2x1ZGUgIkdkb21PdmVyZmxvd0V2ZW50LmgiCisjaW5jbHVkZSAiR2RvbVBy
b2dyZXNzRXZlbnQuaCIKKyNpbmNsdWRlICJHZG9tVGV4dEV2ZW50LmgiCisjaW5jbHVkZSAiR2Rv
bVVJRXZlbnQuaCIKKyNpbmNsdWRlICJHZG9tV2ViS2l0QW5pbWF0aW9uRXZlbnQuaCIKKyNpbmNs
dWRlICJHZG9tV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiR2RvbVdoZWVsRXZl
bnQuaCIKKyNpbmNsdWRlICJHZG9tWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmgiCisjaW5j
bHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgorI2luY2x1
ZGUgIk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJNdXRhdGlvbkV2ZW50LmgiCisjaW5jbHVkZSAi
T3ZlcmZsb3dFdmVudC5oIgorI2luY2x1ZGUgIlByb2dyZXNzRXZlbnQuaCIKKyNpbmNsdWRlICJU
ZXh0RXZlbnQuaCIKKyNpbmNsdWRlICJVSUV2ZW50LmgiCisjaW5jbHVkZSAiV2ViS2l0QW5pbWF0
aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJXZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCIKKyNpbmNsdWRl
ICJXaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50Lmgi
CisKKyNpbmNsdWRlICJHZG9tSFRNTENvbGxlY3Rpb24uaCIKKworI2luY2x1ZGUgIkF0b21pY1N0
cmluZy5oIgorI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiSFRNTE9wdGlv
bnNDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiR2RvbUhUTUxPcHRpb25zQ29sbGVjdGlvbi5oIgor
CisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorI2luY2x1ZGUgIkdkb21TdG9yYWdlRXZlbnQuaCIK
KyNpbmNsdWRlICJTdG9yYWdlRXZlbnQuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKFNWRykKKyNp
ZiAwIC8qIFRPRE8gLSBzZWUgIzIwNTg2ICovCisjaW5jbHVkZSAiR2RvbVNWR1pvb21FdmVudFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tU1ZHWm9vbUV2ZW50LmgiCisjaW5jbHVkZSAiU1ZHWm9v
bUV2ZW50LmgiCisjZW5kaWYKKyNlbmRpZgorCisjaWYgRU5BQkxFKFNWRykKKyNpZiAwIC8qIFhY
WCBUT0RPIC0gc2VlICMyMDU4NiAqLworI2luY2x1ZGUgIkdkb21TVkdFbGVtZW50V3JhcHBlckZh
Y3RvcnlQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbVNWR0VsZW1lbnRXcmFwcGVyRmFjdG9yeS5o
IgorI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKKyNlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjaWYg
RU5BQkxFKFNWRykKKyNpbmNsdWRlICJHZG9tU1ZHRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiU1ZH
RXhjZXB0aW9uLmgiCisjZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSAiR2RvbUNEQVRBU2VjdGlv
blByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NTQ2hhcnNldFJ1bGVQcml2YXRlLmgiCisjaW5j
bHVkZSAiR2RvbUNTU0ZvbnRGYWNlUnVsZVByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NTSW1w
b3J0UnVsZVByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NTTWVkaWFSdWxlUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIkdkb21DU1NQYWdlUnVsZVByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NTUHJp
bWl0aXZlVmFsdWVQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbUNTU1J1bGVQcml2YXRlLmgiCisj
aW5jbHVkZSAiR2RvbUNTU1N0eWxlUnVsZVByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NTVmFs
dWVMaXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21DU1NWYWx1ZVByaXZhdGUuaCIKKyNpbmNs
dWRlICJHZG9tQ1NTVmFyaWFibGVzUnVsZVByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tQ2xpcGJv
YXJkUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21Db21tZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUg
Ikdkb21Eb2N1bWVudEZyYWdtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21Eb2N1bWVudFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tRG9jdW1lbnRUeXBlUHJpdmF0ZS5oIgorI2luY2x1ZGUg
Ikdkb21FbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21FbnRpdHlQcml2YXRlLmgiCisj
aW5jbHVkZSAiR2RvbUVudGl0eVJlZmVyZW5jZVByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tSFRN
TENvbGxlY3Rpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbUhUTUxEb2N1bWVudFByaXZhdGUu
aCIKKyNpbmNsdWRlICJHZG9tSFRNTE9wdGlvbnNDb2xsZWN0aW9uUHJpdmF0ZS5oIgorI2luY2x1
ZGUgIkdkb21LZXlib2FyZEV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21NZXNzYWdlRXZl
bnRQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbU1vdXNlRXZlbnRQcml2YXRlLmgiCisjaW5jbHVk
ZSAiR2RvbU11dGF0aW9uRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbU5vdGF0aW9uUHJp
dmF0ZS5oIgorI2luY2x1ZGUgIkdkb21PdmVyZmxvd0V2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUg
Ikdkb21Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbVByb2dy
ZXNzRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbVN0b3JhZ2VFdmVudFByaXZhdGUuaCIK
KyNpbmNsdWRlICJHZG9tU3R5bGVTaGVldFByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tVGV4dEV2
ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21UZXh0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdk
b21VSUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21XZWJLaXRBbmltYXRpb25FdmVudFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tV2ViS2l0VHJhbnNpdGlvbkV2ZW50UHJpdmF0ZS5oIgor
I2luY2x1ZGUgIkdkb21XaGVlbEV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21YTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnRQcml2YXRlLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFt
ZXM7CisKK3R5cGVkZWYgSGFzaE1hcDx2b2lkKiwgZ3BvaW50ZXI+IERPTU9iamVjdE1hcDsKKwor
c3RhdGljIERPTU9iamVjdE1hcCYgZG9tT2JqZWN0cygpCit7CisgICAgc3RhdGljIERPTU9iamVj
dE1hcCBzdGF0aWNET01PYmplY3RzOworICAgIHJldHVybiBzdGF0aWNET01PYmplY3RzOworfQor
CitncG9pbnRlciBHRE9NT2JqZWN0Q2FjaGU6OmdldERPTU9iamVjdCh2b2lkKiBvYmplY3RIYW5k
bGUpCit7CisgICAgZ3BvaW50ZXIgcmV0ID0gZG9tT2JqZWN0cygpLmdldChvYmplY3RIYW5kbGUp
OworICAgIHJldHVybiByZXQ7Cit9CisKK2dwb2ludGVyIEdET01PYmplY3RDYWNoZTo6cHV0RE9N
T2JqZWN0KHZvaWQqIG9iamVjdEhhbmRsZSwgZ3BvaW50ZXIgd3JhcHBlcikKK3sKKyAgICBkb21P
YmplY3RzKCkuc2V0KG9iamVjdEhhbmRsZSwgd3JhcHBlcik7CisgICAgcmV0dXJuIHdyYXBwZXI7
Cit9CisKK3ZvaWQgR0RPTU9iamVjdENhY2hlOjpmb3JnZXRET01PYmplY3Qodm9pZCogb2JqZWN0
SGFuZGxlKQoreworICAgIGRvbU9iamVjdHMoKS50YWtlKG9iamVjdEhhbmRsZSk7Cit9CisKK2dw
b2ludGVyIHRvR0RPTShEb2N1bWVudCogZG9jKQoreworICAgIGlmICghZG9jKQorICAgICAgICBy
ZXR1cm4gTlVMTDsKKworICAgIGdwb2ludGVyIGdvYmogPSBHRE9NT2JqZWN0Q2FjaGU6OmdldERP
TU9iamVjdChkb2MpOworICAgIGlmIChnb2JqKQorICAgICAgICByZXR1cm4gZ29iajsKKworICAg
IGdwb2ludGVyIHJldDsKKworICAgIGlmIChkb2MtPmlzSFRNTERvY3VtZW50KCkpCisgICAgICAg
IHJldCA9IHdyYXBIVE1MRG9jdW1lbnQoc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oZG9jKSk7
CisjaWYgRU5BQkxFKFNWRykKKyAgICBlbHNlIGlmIChkb2MtPmlzU1ZHRG9jdW1lbnQoKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBOVUxMOyAvKiBYWFggVE9ETyAtIHNlZSAjMjA1ODYgKi8KKyNp
ZiAwCisgICAgICAgIHJldCA9IHdyYXBTVkdEb2N1bWVudChzdGF0aWNfY2FzdDxTVkdEb2N1bWVu
dCo+KGRvYykpOworI2VuZGlmCisgICAgfQorI2VuZGlmCisgICAgZWxzZQorICAgICAgICByZXQg
PSB3cmFwRG9jdW1lbnQoZG9jKTsKKworICAgIHJldHVybiBHRE9NT2JqZWN0Q2FjaGU6OnB1dERP
TU9iamVjdChkb2MsIHJldCk7Cit9CisKK3N0YXRpYyBncG9pbnRlciBjcmVhdGVXcmFwcGVyKE5v
ZGUqIG5vZGUpOworCitncG9pbnRlciB0b0dET01OZXdseUNyZWF0ZWQoTm9kZSogbm9kZSkKK3sK
KyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIGNyZWF0
ZVdyYXBwZXIobm9kZSk7Cit9CisKK2dwb2ludGVyIHRvR0RPTShOb2RlKiBub2RlKQoreworICAg
IGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBncG9pbnRlciByZXQgPSBH
RE9NT2JqZWN0Q2FjaGU6OmdldERPTU9iamVjdChub2RlKTsKKyAgICBpZiAocmV0KQorICAgICAg
ICByZXR1cm4gcmV0OworCisgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXIobm9kZSk7Cit9CisKK2dw
b2ludGVyIHRvR0RPTShDU1NWYWx1ZSogdmFsdWUpCit7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAg
ICAgcmV0dXJuIE5VTEw7CisKKyAgICBncG9pbnRlciBnb2JqID0gR0RPTU9iamVjdENhY2hlOjpn
ZXRET01PYmplY3QodmFsdWUpOworCisgICAgaWYgKGdvYmopCisgICAgICAgIHJldHVybiBnb2Jq
OworCisgICAgZ3BvaW50ZXIgcmV0OworCisgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKQor
ICAgICAgICByZXQgPSB3cmFwQ1NTVmFsdWVMaXN0KHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+
KHZhbHVlKSk7CisjaWYgRU5BQkxFKFNWRykKKyAgICBlbHNlIGlmICh2YWx1ZS0+aXNTVkdQYWlu
dCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7IC8qIFRPRE8gLSBzZWUgIzIwNTg2ICov
CisgICAgICAgIC8vcmV0ID0gd3JhcFNWR1BhaW50KHN0YXRpY19jYXN0PFNWR1BhaW50Kj4odmFs
dWUpKTsKKyAgICB9CisgICAgZWxzZSBpZiAodmFsdWUtPmlzU1ZHQ29sb3IoKSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBOVUxMOyAvKiBUT0RPIC0gc2VlICMyMDU4NiAqLworICAgICAgICAvL3Jl
dCA9IHdyYXBTVkdDb2xvcihzdGF0aWNfY2FzdDxTVkdDb2xvcio+KHZhbHVlKSk7CisgICAgfQor
I2VuZGlmCisgICAgZWxzZSBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAg
cmV0ID0gd3JhcENTU1ByaW1pdGl2ZVZhbHVlKHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4odmFsdWUpKTsKKyAgICBlbHNlCisgICAgICAgIHJldCA9IHdyYXBDU1NWYWx1ZSh2YWx1ZSk7
CisKKyAgICByZXR1cm4gR0RPTU9iamVjdENhY2hlOjpwdXRET01PYmplY3QodmFsdWUsIHJldCk7
Cit9CisKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIGdwb2ludGVyIGNyZWF0ZVdyYXBwZXIoTm9kZSog
bm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZSk7CisgICAgQVNTRVJUKCFTY3JpcHRJbnRlcnByZXRl
cjo6Z2V0RE9NT2JqZWN0KG5vZGUpKTsKKworICAgIERvY3VtZW50KiBkb2MgPSBub2RlLT5kb2N1
bWVudCgpOworICAgIGdwb2ludGVyIHJldCA9IE5VTEw7CisKKyAgICBzd2l0Y2ggKG5vZGUtPm5v
ZGVUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6CisgICAgICAgICAg
ICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpKQorICAgICAgICAgICAgICAgIHJldCA9IGNyZWF0
ZUdET01IVE1MV3JhcHBlcihzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG5vZGUpKTsKKyNpZiBF
TkFCTEUoU1ZHKQorICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+aXNTVkdFbGVtZW50KCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisjaWYgMCAvKiBYWFggVE9ETyAtIHNlZSAjMjA1
ODYgKi8KKyAgICAgICAgICAgICAgICByZXQgPSBjcmVhdGVHRE9NU1ZHV3JhcHBlcihzdGF0aWNf
Y2FzdDxTVkdFbGVtZW50Kj4obm9kZSkpOworI2VuZGlmCisjZW5kaWYKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICByZXQgPSB3cmFwRWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obm9kZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm9kZTo6QVRUUklC
VVRFX05PREU6CisgICAgICAgICAgICByZXQgPSB3cmFwQXR0cihzdGF0aWNfY2FzdDxBdHRyKj4o
bm9kZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm9kZTo6VEVYVF9OT0RF
OgorICAgICAgICAgICAgcmV0ID0gd3JhcFRleHQoc3RhdGljX2Nhc3Q8VGV4dCo+KG5vZGUpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9E
RToKKyAgICAgICAgICAgIHJldCA9IHdyYXBDREFUQVNlY3Rpb24oc3RhdGljX2Nhc3Q8Q0RBVEFT
ZWN0aW9uKj4obm9kZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm9kZTo6
RU5USVRZX05PREU6CisgICAgICAgICAgICByZXQgPSB3cmFwRW50aXR5KHN0YXRpY19jYXN0PEVu
dGl0eSo+KG5vZGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5vZGU6OlBS
T0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERToKKyAgICAgICAgICAgIHJldCA9IHdyYXBQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24oc3RhdGljX2Nhc3Q8UHJvY2Vzc2luZ0luc3RydWN0aW9uKj4obm9kZSkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm9kZTo6Q09NTUVOVF9OT0RFOgor
ICAgICAgICAgICAgcmV0ID0gd3JhcENvbW1lbnQoc3RhdGljX2Nhc3Q8Q29tbWVudCo+KG5vZGUp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX05PREU6
CisgICAgICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIGNhY2hlIHRoZSBkb2N1bWVudCBpdHNl
bGYgaW4gdGhlIHBlci1kb2N1bWVudCBkaWN0aW9uYXJ5CisgICAgICAgICAgICByZXR1cm4gdG9H
RE9NKHN0YXRpY19jYXN0PERvY3VtZW50Kj4obm9kZSkpOworICAgICAgICBjYXNlIE5vZGU6OkRP
Q1VNRU5UX1RZUEVfTk9ERToKKyAgICAgICAgICAgIHJldCA9IHdyYXBEb2N1bWVudFR5cGUoc3Rh
dGljX2Nhc3Q8RG9jdW1lbnRUeXBlKj4obm9kZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgTm9kZTo6Tk9UQVRJT05fTk9ERToKKyAgICAgICAgICAgIHJldCA9IHdyYXBOb3Rh
dGlvbihzdGF0aWNfY2FzdDxOb3RhdGlvbio+KG5vZGUpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6CisgICAgICAgICAgICBy
ZXQgPSB3cmFwRG9jdW1lbnRGcmFnbWVudChzdGF0aWNfY2FzdDxEb2N1bWVudEZyYWdtZW50Kj4o
bm9kZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm9kZTo6RU5USVRZX1JF
RkVSRU5DRV9OT0RFOgorICAgICAgICAgICAgcmV0ID0gd3JhcEVudGl0eVJlZmVyZW5jZShzdGF0
aWNfY2FzdDxFbnRpdHlSZWZlcmVuY2UqPihub2RlKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldCA9IHdyYXBOb2RlKG5vZGUpOworICAgIH0K
KworICAgIHJldHVybiBHRE9NT2JqZWN0Q2FjaGU6OnB1dERPTU9iamVjdChub2RlLCByZXQpOwor
fQorCitncG9pbnRlciB0b0dET00oSFRNTENvbGxlY3Rpb24qIGNvbGxlY3Rpb24pCit7CisgICAg
aWYgKCFjb2xsZWN0aW9uKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGdwb2ludGVyIGdv
YmogPSBHRE9NT2JqZWN0Q2FjaGU6OmdldERPTU9iamVjdChjb2xsZWN0aW9uKTsKKworICAgIGlm
IChnb2JqKQorICAgICAgICByZXR1cm4gZ29iajsKKworICAgIGdwb2ludGVyIHJldDsKKyAgICBz
d2l0Y2ggKGNvbGxlY3Rpb24tPnR5cGUoKSkgeworICAgICAgICBjYXNlIFNlbGVjdE9wdGlvbnM6
CisgICAgICAgICAgICByZXQgPSB3cmFwSFRNTE9wdGlvbnNDb2xsZWN0aW9uKHN0YXRpY19jYXN0
PEhUTUxPcHRpb25zQ29sbGVjdGlvbio+KGNvbGxlY3Rpb24pKTsKKyAgICAgICAgICAgIGJyZWFr
OworI2lmIDAKKyAgICAgICAgY2FzZSBIVE1MQ29sbGVjdGlvbjo6RG9jQWxsOgorICAgICAgICAg
ICAgcmV0ID0gd3JhcEhUTUxDb2xsZWN0aW9uKHN0YXRpY19jYXN0PEhUTUxDb2xsZWN0aW9uKj4o
Y29sbGVjdGlvbikpOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldCA9IHdyYXBIVE1MQ29sbGVjdGlvbihzdGF0aWNfY2FzdDxIVE1M
Q29sbGVjdGlvbio+KGNvbGxlY3Rpb24pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIHJldHVybiBHRE9NT2JqZWN0Q2FjaGU6OnB1dERPTU9iamVjdChjb2xsZWN0aW9uLCByZXQp
OworfQorCitncG9pbnRlciB0b0dET00oRXZlbnQqIGV2ZW50KQoreworICAgIGlmICghZXZlbnQp
CisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZ3BvaW50ZXIgZ29iaiA9IEdET01PYmplY3RD
YWNoZTo6Z2V0RE9NT2JqZWN0KGV2ZW50KTsKKyAgICBpZiAoZ29iaikKKyAgICAgICAgcmV0dXJu
IGdvYmo7CisKKyAgICBncG9pbnRlciByZXQ7CisgICAgaWYgKGV2ZW50LT5pc1VJRXZlbnQoKSkg
eworICAgICAgICBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQorICAgICAgICAgICAgcmV0
ID0gd3JhcEtleWJvYXJkRXZlbnQoc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2ZW50KSk7
CisgICAgICAgIGVsc2UgaWYgKGV2ZW50LT5pc1RleHRFdmVudCgpKQorICAgICAgICAgICAgcmV0
ID0gd3JhcFRleHRFdmVudChzdGF0aWNfY2FzdDxUZXh0RXZlbnQqPihldmVudCkpOworICAgICAg
ICBlbHNlIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkpCisgICAgICAgICAgICByZXQgPSB3cmFw
TW91c2VFdmVudChzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpKTsKKyAgICAgICAgZWxz
ZSBpZiAoZXZlbnQtPmlzV2hlZWxFdmVudCgpKQorICAgICAgICAgICAgcmV0ID0gd3JhcFdoZWVs
RXZlbnQoc3RhdGljX2Nhc3Q8V2hlZWxFdmVudCo+KGV2ZW50KSk7CisjaWYgRU5BQkxFKFNWRykK
KyAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmlzU1ZHWm9vbUV2ZW50KCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBOVUxMOyAvKiBUT0RPIC0gc2VlICMyMDU4NiAqLworICAgICAgICAg
ICAgLy9yZXQgPSB3cmFwU1ZHWm9vbUV2ZW50KHN0YXRpY19jYXN0PFNWR1pvb21FdmVudCo+KGV2
ZW50KSwgMCk7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBlbHNlCisgICAgICAgICAgICBy
ZXQgPSB3cmFwVUlFdmVudChzdGF0aWNfY2FzdDxVSUV2ZW50Kj4oZXZlbnQpKTsKKyAgICB9IGVs
c2UgaWYgKGV2ZW50LT5pc011dGF0aW9uRXZlbnQoKSkKKyAgICAgICAgcmV0ID0gd3JhcE11dGF0
aW9uRXZlbnQoc3RhdGljX2Nhc3Q8TXV0YXRpb25FdmVudCo+KGV2ZW50KSk7CisgICAgZWxzZSBp
ZiAoZXZlbnQtPmlzT3ZlcmZsb3dFdmVudCgpKQorICAgICAgICByZXQgPSB3cmFwT3ZlcmZsb3dF
dmVudChzdGF0aWNfY2FzdDxPdmVyZmxvd0V2ZW50Kj4oZXZlbnQpKTsKKyAgICBlbHNlIGlmIChl
dmVudC0+aXNNZXNzYWdlRXZlbnQoKSkKKyAgICAgICAgcmV0ID0gd3JhcE1lc3NhZ2VFdmVudChz
dGF0aWNfY2FzdDxNZXNzYWdlRXZlbnQqPihldmVudCkpOworICAgIGVsc2UgaWYgKGV2ZW50LT5p
c1Byb2dyZXNzRXZlbnQoKSkgeworICAgICAgICBpZiAoZXZlbnQtPmlzWE1MSHR0cFJlcXVlc3RQ
cm9ncmVzc0V2ZW50KCkpCisgICAgICAgICAgICByZXQgPSB3cmFwWE1MSHR0cFJlcXVlc3RQcm9n
cmVzc0V2ZW50KHN0YXRpY19jYXN0PFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudCo+KGV2ZW50
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldCA9IHdyYXBQcm9ncmVzc0V2ZW50KHN0
YXRpY19jYXN0PFByb2dyZXNzRXZlbnQqPihldmVudCkpOworICAgIH0KKyNpZiBFTkFCTEUoRE9N
X1NUT1JBR0UpCisgICAgZWxzZSBpZiAoZXZlbnQtPmlzU3RvcmFnZUV2ZW50KCkpCisgICAgICAg
IHJldCA9IHdyYXBTdG9yYWdlRXZlbnQoc3RhdGljX2Nhc3Q8U3RvcmFnZUV2ZW50Kj4oZXZlbnQp
KTsKKyNlbmRpZgorICAgIGVsc2UgaWYgKGV2ZW50LT5pc1dlYktpdEFuaW1hdGlvbkV2ZW50KCkp
CisgICAgICAgIHJldCA9IHdyYXBXZWJLaXRBbmltYXRpb25FdmVudChzdGF0aWNfY2FzdDxXZWJL
aXRBbmltYXRpb25FdmVudCo+KGV2ZW50KSk7CisgICAgZWxzZSBpZiAoZXZlbnQtPmlzV2ViS2l0
VHJhbnNpdGlvbkV2ZW50KCkpCisgICAgICAgIHJldCA9IHdyYXBXZWJLaXRUcmFuc2l0aW9uRXZl
bnQoc3RhdGljX2Nhc3Q8V2ViS2l0VHJhbnNpdGlvbkV2ZW50Kj4oZXZlbnQpKTsKKyAgICBlbHNl
CisgICAgICAgIHJldCA9IHdyYXBFdmVudChldmVudCk7CisKKyAgICByZXR1cm4gR0RPTU9iamVj
dENhY2hlOjpwdXRET01PYmplY3QoZXZlbnQsIHJldCk7Cit9CisKK2dwb2ludGVyIHRvR0RPTShU
ZXh0KiB0ZXh0KQoreworICAgIGlmICghdGV4dCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAg
ICBncG9pbnRlciBnb2JqID0gR0RPTU9iamVjdENhY2hlOjpnZXRET01PYmplY3QodGV4dCk7Cisg
ICAgaWYgKGdvYmopCisgICAgICAgIHJldHVybiBnb2JqOworCisgICAgZ3BvaW50ZXIgcmV0ID0g
d3JhcFRleHQodGV4dCk7CisgICAgcmV0dXJuIEdET01PYmplY3RDYWNoZTo6cHV0RE9NT2JqZWN0
KHRleHQsIHJldCk7Cit9CisKK2dwb2ludGVyIHRvR0RPTShDU1NSdWxlKiBydWxlKQoreworICAg
IGlmICghcnVsZSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBncG9pbnRlciBnb2JqID0g
R0RPTU9iamVjdENhY2hlOjpnZXRET01PYmplY3QocnVsZSk7CisKKyAgICBpZiAoZ29iaikKKyAg
ICAgICAgcmV0dXJuIGdvYmo7CisKKyAgICBncG9pbnRlciByZXQ7CisgICAgc3dpdGNoIChydWxl
LT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBDU1NSdWxlOjpTVFlMRV9SVUxFOgorICAgICAgICAg
ICAgcmV0ID0gd3JhcENTU1N0eWxlUnVsZShzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihydWxl
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NSdWxlOjpNRURJQV9SVUxF
OgorICAgICAgICAgICAgcmV0ID0gd3JhcENTU01lZGlhUnVsZShzdGF0aWNfY2FzdDxDU1NNZWRp
YVJ1bGUqPihydWxlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NSdWxl
OjpGT05UX0ZBQ0VfUlVMRToKKyAgICAgICAgICAgIHJldCA9IHdyYXBDU1NGb250RmFjZVJ1bGUo
c3RhdGljX2Nhc3Q8Q1NTRm9udEZhY2VSdWxlKj4ocnVsZSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQ1NTUnVsZTo6UEFHRV9SVUxFOgorICAgICAgICAgICAgcmV0ID0gd3Jh
cENTU1BhZ2VSdWxlKHN0YXRpY19jYXN0PENTU1BhZ2VSdWxlKj4ocnVsZSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTUnVsZTo6SU1QT1JUX1JVTEU6CisgICAgICAgICAg
ICByZXQgPSB3cmFwQ1NTSW1wb3J0UnVsZShzdGF0aWNfY2FzdDxDU1NJbXBvcnRSdWxlKj4ocnVs
ZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTUnVsZTo6Q0hBUlNFVF9S
VUxFOgorICAgICAgICAgICAgcmV0ID0gd3JhcENTU0NoYXJzZXRSdWxlKHN0YXRpY19jYXN0PENT
U0NoYXJzZXRSdWxlKj4ocnVsZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q1NTUnVsZTo6VkFSSUFCTEVTX1JVTEU6CisgICAgICAgICAgICByZXQgPSB3cmFwQ1NTVmFyaWFi
bGVzUnVsZShzdGF0aWNfY2FzdDxDU1NWYXJpYWJsZXNSdWxlKj4ocnVsZSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXQgPSB3cmFwQ1NTUnVs
ZShydWxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEdET01PYmplY3RDYWNo
ZTo6cHV0RE9NT2JqZWN0KHJ1bGUsIHJldCk7CisgICAgcmV0dXJuIHJldDsKK30KKworZ3BvaW50
ZXIgdG9HRE9NKEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAg
ICByZXR1cm4gTlVMTDsKKworICAgIC8vIHNob3VsZG4ndCBiZSBvbmU/IEFTU0VSVCghU2NyaXB0
SW50ZXJwcmV0ZXI6OmdldERPTU9iamVjdChlbGVtZW50KSk7CisgICAgZ3BvaW50ZXIgZ29iaiA9
IEdET01PYmplY3RDYWNoZTo6Z2V0RE9NT2JqZWN0KGVsZW1lbnQpOworICAgIGlmIChnb2JqKQor
ICAgICAgICByZXR1cm4gZ29iajsKKworICAgIGdwb2ludGVyIHJldDsKKyAgICBEb2N1bWVudCog
ZG9jID0gZWxlbWVudC0+ZG9jdW1lbnQoKTsKKworICAgIGlmIChlbGVtZW50LT5pc0hUTUxFbGVt
ZW50KCkpCisgICAgICAgIHJldCA9IGNyZWF0ZUdET01IVE1MV3JhcHBlcihzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudCo+KGVsZW1lbnQpKTsKKyNpZiBFTkFCTEUoU1ZHKQorICAgIGVsc2UgaWYgKGVs
ZW1lbnQtPmlzU1ZHRWxlbWVudCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7IC8qIFRP
RE8gLSBzZWUgIzIwNTg2ICovCisgICAgICAgIC8vcmV0ID0gY3JlYXRlR0RPTVNWR1dyYXBwZXIo
c3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGVsZW1lbnQpKTsKKyAgICB9CisjZW5kaWYKKyAgICBl
bHNlCisgICAgICAgIHJldCA9IHdyYXBFbGVtZW50KGVsZW1lbnQpOworCisgICAgcmV0dXJuIEdE
T01PYmplY3RDYWNoZTo6cHV0RE9NT2JqZWN0KGVsZW1lbnQsIHJldCk7Cit9CisKK2dwb2ludGVy
IHRvR0RPTShTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KQoreworICAgIGlmICghc3R5bGVTaGVldCkK
KyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBncG9pbnRlciBnb2JqID0gR0RPTU9iamVjdENh
Y2hlOjpnZXRET01PYmplY3Qoc3R5bGVTaGVldCk7CisgICAgaWYgKGdvYmopCisgICAgICAgIHJl
dHVybiBnb2JqOworCisgICAgZ3BvaW50ZXIgcmV0OworICAgIGlmIChzdHlsZVNoZWV0LT5pc0NT
U1N0eWxlU2hlZXQoKSkKKyAgICAgICAgcmV0ID0gd3JhcENTU1N0eWxlU2hlZXQoc3RhdGljX2Nh
c3Q8Q1NTU3R5bGVTaGVldCo+KHN0eWxlU2hlZXQpKTsKKyAgICBlbHNlCisgICAgICAgIHJldCA9
IHdyYXBTdHlsZVNoZWV0KHN0eWxlU2hlZXQpOworCisgICAgcmV0dXJuIEdET01PYmplY3RDYWNo
ZTo6cHV0RE9NT2JqZWN0KHN0eWxlU2hlZXQsIHJldCk7Cit9CisKKy8qIGRlcml2ZWQgc291cmNl
cyBhdXRvLWdlbmVyYXRlZCAqLworZ3BvaW50ZXIgdG9HRE9NKFhNTEh0dHBSZXF1ZXN0VXBsb2Fk
KiBvYmopOworCitncG9pbnRlciB0b0dET00oRXZlbnRUYXJnZXQqIHRhcmdldCkKK3sKKyAgICBp
ZiAoIXRhcmdldCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyNpZiAwCisjaWYgRU5BQkxFKFNW
RykKKyAgICAvLyBTVkdFbGVtZW50SW5zdGFuY2Ugc3VwcG9ydHMgYm90aCB0b1NWR0VsZW1lbnRJ
bnN0YW5jZSBhbmQKKyAgICAvLyB0b05vZGUgc2luY2Ugc28gbXVjaCBtb3VzZSBoYW5kbGluZyBj
b2RlIGRlcGVuZHMgb24gdG9Ob2RlCisgICAgLy8gcmV0dXJuaW5nIGEgdmFsaWQgbm9kZS4KKyAg
ICBTVkdFbGVtZW50SW5zdGFuY2UqIGluc3RhbmNlID0gdGFyZ2V0LT50b1NWR0VsZW1lbnRJbnN0
YW5jZSgpOworICAgIGlmIChpbnN0YW5jZSkKKyAgICAgICAgcmV0dXJuIHRvR0RPTShleGVjLCBp
bnN0YW5jZSk7CisjZW5kaWYKKyNlbmRpZgorCisgICAgTm9kZSogbm9kZSA9IHRhcmdldC0+dG9O
b2RlKCk7CisgICAgaWYgKG5vZGUpCisgICAgICAgIHJldHVybiB0b0dET00obm9kZSk7CisKKyAg
ICBpZiAoWE1MSHR0cFJlcXVlc3QqIHhociA9IHRhcmdldC0+dG9YTUxIdHRwUmVxdWVzdCgpKQor
ICAgICAgICAvLyBYTUxIdHRwUmVxdWVzdCBpcyBhbHdheXMgY3JlYXRlZCB2aWEgR0RPTSwgc28g
d2UgZG9uJ3QgbmVlZAorICAgICAgICAvLyB0byB1c2UgY2FjaGVET01PYmplY3QoKSBoZXJlLgor
ICAgICAgICByZXR1cm4gR0RPTU9iamVjdENhY2hlOjpnZXRET01PYmplY3QoeGhyKTsKKworICAg
IGlmIChYTUxIdHRwUmVxdWVzdFVwbG9hZCogdXBsb2FkID0gdGFyZ2V0LT50b1hNTEh0dHBSZXF1
ZXN0VXBsb2FkKCkpCisgICAgICAgIHJldHVybiB0b0dET00odXBsb2FkKTsKKworI2lmIEVOQUJM
RShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgaWYgKERPTUFwcGxpY2F0aW9uQ2FjaGUq
IGNhY2hlID0gdGFyZ2V0LT50b0RPTUFwcGxpY2F0aW9uQ2FjaGUoKSkKKyAgICAgICAgLy8gRE9N
QXBwbGljYXRpb25DYWNoZSBpcyBhbHdheXMgY3JlYXRlZCB2aWEgR0RPTSwgc28gd2UgZG9uJ3QK
KyAgICAgICAgLy8gbmVlZCB0byB1c2UgY2FjaGVET01PYmplY3QoKSBoZXJlLgorICAgICAgICBy
ZXR1cm4gR0RPTU9iamVjdENhY2hlOjpnZXRET01PYmplY3QoY2FjaGUpOworI2VuZGlmCisKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvZ2RvbS9HRE9NQmluZGluZy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvZ2RvbS9HRE9NQmluZGluZy5oCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9nZG9tL0dET01CaW5kaW5nLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFy
cmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDggTHVrZSBLZW5uZXRoIENhc3NvbiBMZWlnaHRvbiA8bGtjbEBsa2NsLm5l
dD4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggTWFydGluIFNvdG8gPHNvdG9AZnJlZWRlc2t0b3Au
b3JnPgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBHZG9tRE9NQmlu
ZGluZ19oCisjZGVmaW5lIEdkb21ET01CaW5kaW5nX2gKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgorCisjaW5jbHVkZSAiQ1NTUnVsZS5oIgorI2luY2x1ZGUgIkNTU1ZhbHVlLmgiCisj
aW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRXZlbnRU
YXJnZXQuaCIKKyNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgIk5vZGUuaCIK
KyNpbmNsdWRlICJTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiVGV4dC5oIgorCisjaW5jbHVkZSAi
R2RvbU5vZGUuaCIKKyNpbmNsdWRlICJHZG9tTm9kZVByaXZhdGUuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisgICAgY2xhc3MgQXRvbWljU3RyaW5nOworICAgIGNsYXNzIERvY3VtZW50Owor
ICAgIGNsYXNzIEV2ZW50OworICAgIGNsYXNzIEZyYW1lOworICAgIGNsYXNzIEtVUkw7CisgICAg
Y2xhc3MgTm9kZTsKKyAgICBjbGFzcyBTdHJpbmc7CisKKyNpZiBFTkFCTEUoU1ZHKQorICAgIGNs
YXNzIFNWR0VsZW1lbnQ7CisjZW5kaWYKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworbmFtZXNw
YWNlIFdlYktpdCB7CisgICAgZ3BvaW50ZXIgdG9HRE9NKFdlYkNvcmU6OkNTU1J1bGUqIG5vZGUp
OworICAgIGdwb2ludGVyIHRvR0RPTShXZWJDb3JlOjpDU1NWYWx1ZSogbm9kZSk7CisgICAgZ3Bv
aW50ZXIgdG9HRE9NKFdlYkNvcmU6OkRvY3VtZW50KiBub2RlKTsKKyAgICBncG9pbnRlciB0b0dE
T00oV2ViQ29yZTo6RWxlbWVudCogbm9kZSk7CisgICAgZ3BvaW50ZXIgdG9HRE9NKFdlYkNvcmU6
OkV2ZW50KiBub2RlKTsKKyAgICBncG9pbnRlciB0b0dET00oV2ViQ29yZTo6RXZlbnRUYXJnZXQq
IG5vZGUpOworICAgIGdwb2ludGVyIHRvR0RPTShXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbiogbm9k
ZSk7CisgICAgZ3BvaW50ZXIgdG9HRE9NKFdlYkNvcmU6Ok5vZGUqIG5vZGUpOworICAgIGdwb2lu
dGVyIHRvR0RPTShXZWJDb3JlOjpTdHlsZVNoZWV0KiBub2RlKTsKKyAgICBncG9pbnRlciB0b0dE
T00oV2ViQ29yZTo6VGV4dCogbm9kZSk7CisKKyAgICBjbGFzcyBHRE9NT2JqZWN0Q2FjaGUgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIGdwb2ludGVyIGdldERPTU9iamVjdCh2b2lkICpv
YmplY3RIYW5kbGUpOworICAgICAgICBzdGF0aWMgZ3BvaW50ZXIgcHV0RE9NT2JqZWN0KHZvaWQg
Km9iamVjdEhhbmRsZSwgZ3BvaW50ZXIgd3JhcHBlcik7CisgICAgICAgIHN0YXRpYyB2b2lkIGZv
cmdldERPTU9iamVjdCh2b2lkICpvYmplY3RIYW5kbGUpOworICAgIH07Cit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIEdkb21ET01CaW5kaW5nX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33972</attachid>
            <date>2009-08-03 06:40:22 -0700</date>
            <delta_ts>2009-08-07 09:51:08 -0700</delta_ts>
            <desc>corrections noted from other reviews (e.g. removal of args on prototypes)</desc>
            <filename>gdbs.patch</filename>
            <type>text/plain</type>
            <size>21845</size>
            <attacher name="Luke Kenneth Casson Leighton">lkcl</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjM5MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzUzMSw2ICsxNzY0MiwxNiBAQAogICAgICAgICAgIFRoaXMgdG8gbWFrZSBpdCBtb3JlIGdl
bmVyaWMgc28gd29ya2VyIHNjcmlwdCBsb2FkaW5nIGNvdWxkIHVzZSBpdC4KICAgICAgICAgKiB3
b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlckNsaWVudC5oOiBBZGRlZC4KIAorMjAwOS0wOC0wMyAg
THVrZSBLZW5uZXRoIENhc3NvbiBMZWlnaHRvbiAgPGxrY2xAbGtjbC5uZXQ+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI3NDI2CisKKyAgICAgICAgKiBiaW5kaW5ncy9nZG9tL0dE
T01CaW5kaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjp0b0dET00pOgorICAgICAg
ICAqIGJpbmRpbmdzL2dkb20vR0RPTUJpbmRpbmcuaDogQWRkZWQuCisKIDIwMDktMDYtMTYgIEJy
ZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2dkb20vR0RPTUJpbmRpbmcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvZ2RvbS9HRE9NQmluZGluZy5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2dkb20vR0RPTUJpbmRpbmcuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDYyOSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAw
MSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3JnPgorICog
IENvcHlyaWdodCAoQykgMjAwOCBMdWtlIEtlbm5ldGggQ2Fzc29uIExlaWdodG9uIDxsa2NsQGxr
Y2wubmV0PgorICogIENvcHlyaWdodCAoQykgMjAwOCBNYXJ0aW4gU290byA8c290b0BmcmVlZGVz
a3RvcC5vcmc+CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisvKgorICogYWRkZWQg
dW5kZXIgYnVnICMyNzQyNgorICovCisKKy8vIGdjYyAzLnggY2FuJ3QgaGFuZGxlIGluY2x1ZGlu
ZyB0aGUgSGFzaE1hcCBwb2ludGVyIHNwZWNpYWxpemF0aW9uCisvLyBpbiB0aGlzIGZpbGUKKyNp
ZiBkZWZpbmVkIF9fR05VQ19fICYmICFkZWZpbmVkIF9fR0xJQkNYWF9fIC8vIGxlc3MgdGhhbiBn
Y2MgMy40CisjZGVmaW5lIEhBU0hfTUFQX1BUUl9TUEVDX1dPUktBUk9VTkQgMQorI2VuZGlmCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworLyogeWVzIHRoZXNlIGFyZSBvdXQtb2Ytb3JkZXIsIGJ1
dCB0aGV5IGFyZSBncm91cGVkIGJ5CisgKiBwdXJwb3NlLiAgdGhlICNpbmNsdWRlcyBuZWVkZWQg
Zm9yIHRvR0RPTShEb2N1bWVudCopCisgKiBnb3QgYWRkZWQsIGFuZCB0aGUgb25lcyBmb3IgdG9H
RE9NKENTU1J1bGUqKSBnb3QgYWRkZWQKKyAqIHNlcGFyYXRlbHksIGFuZCB0aGVuIHNvbWUgYXJl
IGNvbmRpdGlvbmFsIGJhc2VkIG9uCisgKiBjb21waWxlLXRpbWUgb3B0aW9ucywgYW5kIHlldCBt
b3JlIHdpbGwgYmUgYWRkZWQKKyAqIGUuZy4gZm9yIFNWRyBDYW52YXMuCisgKi8KKworI2luY2x1
ZGUgImdsaWItb2JqZWN0LmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkdkb21E
T01PYmplY3QuaCIKKyNpbmNsdWRlICJHZG9tRE9NT2JqZWN0UHJpdmF0ZS5oIgorI2luY2x1ZGUg
IkdET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiR0RPTUhUTUxFbGVtZW50V3JhcHBlckZhY3Rvcnku
aCIKKworI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJHZG9tQ1NTU3R5bGVT
aGVldC5oIgorI2luY2x1ZGUgIkdkb21DU1NTdHlsZVNoZWV0UHJpdmF0ZS5oIgorCisjaW5jbHVk
ZSAiRXZlbnRFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVk
ZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCisjaW5jbHVkZSAiR2RvbU5vZGUuaCIKKworI2luY2x1ZGUgIkdkb21Ob2RlUHJp
dmF0ZS5oIgorCisjaW5jbHVkZSAiQXR0ci5oIgorI2luY2x1ZGUgIkNEQVRBU2VjdGlvbi5oIgor
I2luY2x1ZGUgIkNTU1ZhbHVlLmgiCisjaW5jbHVkZSAiQ29tbWVudC5oIgorI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgorI2luY2x1ZGUgIkRvY3Vt
ZW50VHlwZS5oIgorI2luY2x1ZGUgIkVudGl0eS5oIgorI2luY2x1ZGUgIkVudGl0eVJlZmVyZW5j
ZS5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiR2RvbUF0dHIuaCIKKyNp
bmNsdWRlICJHZG9tQXR0clByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tQ2hhcmFjdGVyRGF0YS5o
IgorI2luY2x1ZGUgIkdkb21UZXh0LmgiCisjaW5jbHVkZSAiR2RvbUNEQVRBU2VjdGlvbi5oIgor
I2luY2x1ZGUgIkdkb21Db21tZW50LmgiCisjaW5jbHVkZSAiR2RvbURvY3VtZW50LmgiCisjaW5j
bHVkZSAiR2RvbURvY3VtZW50RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJHZG9tRG9jdW1lbnRUeXBl
LmgiCisjaW5jbHVkZSAiR2RvbUVudGl0eS5oIgorI2luY2x1ZGUgIkdkb21FbGVtZW50LmgiCisj
aW5jbHVkZSAiR2RvbUNTU1ZhbHVlTGlzdC5oIgorI2luY2x1ZGUgIkdkb21DU1NQcmltaXRpdmVW
YWx1ZS5oIgorI2luY2x1ZGUgIkdkb21FbnRpdHlSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJHZG9t
Tm90YXRpb24uaCIKKyNpbmNsdWRlICJHZG9tSFRNTERvY3VtZW50LmgiCisjaW5jbHVkZSAiR2Rv
bVByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgorI2luY2x1ZGUgIk5vdGF0aW9uLmgiCisjaW5jbHVk
ZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCisjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjaW5jbHVkZSAi
R2RvbUNTU1J1bGUuaCIKKyNpbmNsdWRlICJDU1NDaGFyc2V0UnVsZS5oIgorI2luY2x1ZGUgIkNT
U0ZvbnRGYWNlUnVsZS5oIgorI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKKyNpbmNsdWRlICJD
U1NNZWRpYVJ1bGUuaCIKKyNpbmNsdWRlICJDU1NQYWdlUnVsZS5oIgorI2luY2x1ZGUgIkNTU1N0
eWxlUnVsZS5oIgorI2luY2x1ZGUgIkNTU1ZhcmlhYmxlc1J1bGUuaCIKKyNpbmNsdWRlICJHZG9t
Q1NTQ2hhcnNldFJ1bGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NTRm9udEZhY2VSdWxlLmgiCisjaW5j
bHVkZSAiR2RvbUNTU0ltcG9ydFJ1bGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NTTWVkaWFSdWxlLmgi
CisjaW5jbHVkZSAiR2RvbUNTU1BhZ2VSdWxlLmgiCisjaW5jbHVkZSAiR2RvbUNTU1N0eWxlUnVs
ZS5oIgorI2luY2x1ZGUgIkdkb21DU1NWYXJpYWJsZXNSdWxlLmgiCisKKyNpbmNsdWRlICJHZG9t
RXZlbnRQcml2YXRlLmgiCisKKyNpbmNsdWRlICJDbGlwYm9hcmQuaCIKKyNpbmNsdWRlICJFdmVu
dC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJHZG9tQ2xpcGJvYXJkLmgiCisjaW5j
bHVkZSAiR2RvbUtleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJHZG9tTWVzc2FnZUV2ZW50Lmgi
CisjaW5jbHVkZSAiR2RvbU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJHZG9tTXV0YXRpb25FdmVu
dC5oIgorI2luY2x1ZGUgIkdkb21PdmVyZmxvd0V2ZW50LmgiCisjaW5jbHVkZSAiR2RvbVByb2dy
ZXNzRXZlbnQuaCIKKyNpbmNsdWRlICJHZG9tVGV4dEV2ZW50LmgiCisjaW5jbHVkZSAiR2RvbVVJ
RXZlbnQuaCIKKyNpbmNsdWRlICJHZG9tV2ViS2l0QW5pbWF0aW9uRXZlbnQuaCIKKyNpbmNsdWRl
ICJHZG9tV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiR2RvbVdoZWVsRXZlbnQu
aCIKKyNpbmNsdWRlICJHZG9tWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmgiCisjaW5jbHVk
ZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgorI2luY2x1ZGUg
Ik1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJNdXRhdGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiT3Zl
cmZsb3dFdmVudC5oIgorI2luY2x1ZGUgIlByb2dyZXNzRXZlbnQuaCIKKyNpbmNsdWRlICJUZXh0
RXZlbnQuaCIKKyNpbmNsdWRlICJVSUV2ZW50LmgiCisjaW5jbHVkZSAiV2ViS2l0QW5pbWF0aW9u
RXZlbnQuaCIKKyNpbmNsdWRlICJXZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJX
aGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmgiCisK
KyNpbmNsdWRlICJHZG9tSFRNTENvbGxlY3Rpb24uaCIKKworI2luY2x1ZGUgIkF0b21pY1N0cmlu
Zy5oIgorI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiSFRNTE9wdGlvbnND
b2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiR2RvbUhUTUxPcHRpb25zQ29sbGVjdGlvbi5oIgorCisj
aWYgRU5BQkxFKERPTV9TVE9SQUdFKQorI2luY2x1ZGUgIkdkb21TdG9yYWdlRXZlbnQuaCIKKyNp
bmNsdWRlICJTdG9yYWdlRXZlbnQuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKFNWRykKKyNpZiAw
IC8qIFRPRE8gLSBzZWUgIzIwNTg2ICovCisjaW5jbHVkZSAiR2RvbVNWR1pvb21FdmVudFByaXZh
dGUuaCIKKyNpbmNsdWRlICJHZG9tU1ZHWm9vbUV2ZW50LmgiCisjaW5jbHVkZSAiU1ZHWm9vbUV2
ZW50LmgiCisjZW5kaWYKKyNlbmRpZgorCisjaWYgRU5BQkxFKFNWRykKKyNpZiAwIC8qIFhYWCBU
T0RPIC0gc2VlICMyMDU4NiAqLworI2luY2x1ZGUgIkdkb21TVkdFbGVtZW50V3JhcHBlckZhY3Rv
cnlQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbVNWR0VsZW1lbnRXcmFwcGVyRmFjdG9yeS5oIgor
I2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKKyNlbmRpZgorI2VuZGlmCisKKyNpZiAwCisjaWYgRU5B
QkxFKFNWRykKKyNpbmNsdWRlICJHZG9tU1ZHRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiU1ZHRXhj
ZXB0aW9uLmgiCisjZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSAiR2RvbUNEQVRBU2VjdGlvblBy
aXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NTQ2hhcnNldFJ1bGVQcml2YXRlLmgiCisjaW5jbHVk
ZSAiR2RvbUNTU0ZvbnRGYWNlUnVsZVByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NTSW1wb3J0
UnVsZVByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NTTWVkaWFSdWxlUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIkdkb21DU1NQYWdlUnVsZVByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NTUHJpbWl0
aXZlVmFsdWVQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbUNTU1J1bGVQcml2YXRlLmgiCisjaW5j
bHVkZSAiR2RvbUNTU1N0eWxlUnVsZVByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NTVmFsdWVM
aXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21DU1NWYWx1ZVByaXZhdGUuaCIKKyNpbmNsdWRl
ICJHZG9tQ1NTVmFyaWFibGVzUnVsZVByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tQ2xpcGJvYXJk
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21Db21tZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdk
b21Eb2N1bWVudEZyYWdtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21Eb2N1bWVudFByaXZh
dGUuaCIKKyNpbmNsdWRlICJHZG9tRG9jdW1lbnRUeXBlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdk
b21FbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21FbnRpdHlQcml2YXRlLmgiCisjaW5j
bHVkZSAiR2RvbUVudGl0eVJlZmVyZW5jZVByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tSFRNTENv
bGxlY3Rpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbUhUTUxEb2N1bWVudFByaXZhdGUuaCIK
KyNpbmNsdWRlICJHZG9tSFRNTE9wdGlvbnNDb2xsZWN0aW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUg
Ikdkb21LZXlib2FyZEV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21NZXNzYWdlRXZlbnRQ
cml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbU1vdXNlRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAi
R2RvbU11dGF0aW9uRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbU5vdGF0aW9uUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIkdkb21PdmVyZmxvd0V2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdk
b21Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbVByb2dyZXNz
RXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbVN0b3JhZ2VFdmVudFByaXZhdGUuaCIKKyNp
bmNsdWRlICJHZG9tU3R5bGVTaGVldFByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tVGV4dEV2ZW50
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21UZXh0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21V
SUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21XZWJLaXRBbmltYXRpb25FdmVudFByaXZh
dGUuaCIKKyNpbmNsdWRlICJHZG9tV2ViS2l0VHJhbnNpdGlvbkV2ZW50UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIkdkb21XaGVlbEV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21YTUxIdHRwUmVx
dWVzdFByb2dyZXNzRXZlbnRQcml2YXRlLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7
CisKK3R5cGVkZWYgSGFzaE1hcDx2b2lkKiwgZ3BvaW50ZXI+IERPTU9iamVjdE1hcDsKKworc3Rh
dGljIERPTU9iamVjdE1hcCYgZG9tT2JqZWN0cygpCit7CisgICAgc3RhdGljIERPTU9iamVjdE1h
cCBzdGF0aWNET01PYmplY3RzOworICAgIHJldHVybiBzdGF0aWNET01PYmplY3RzOworfQorCitn
cG9pbnRlciBHRE9NT2JqZWN0Q2FjaGU6OmdldERPTU9iamVjdCh2b2lkKiBvYmplY3RIYW5kbGUp
Cit7CisgICAgZ3BvaW50ZXIgcmV0ID0gZG9tT2JqZWN0cygpLmdldChvYmplY3RIYW5kbGUpOwor
ICAgIHJldHVybiByZXQ7Cit9CisKK2dwb2ludGVyIEdET01PYmplY3RDYWNoZTo6cHV0RE9NT2Jq
ZWN0KHZvaWQqIG9iamVjdEhhbmRsZSwgZ3BvaW50ZXIgd3JhcHBlcikKK3sKKyAgICBkb21PYmpl
Y3RzKCkuc2V0KG9iamVjdEhhbmRsZSwgd3JhcHBlcik7CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9
CisKK3ZvaWQgR0RPTU9iamVjdENhY2hlOjpmb3JnZXRET01PYmplY3Qodm9pZCogb2JqZWN0SGFu
ZGxlKQoreworICAgIGRvbU9iamVjdHMoKS50YWtlKG9iamVjdEhhbmRsZSk7Cit9CisKK2dwb2lu
dGVyIHRvR0RPTShEb2N1bWVudCogZG9jKQoreworICAgIGlmICghZG9jKQorICAgICAgICByZXR1
cm4gTlVMTDsKKworICAgIGdwb2ludGVyIGdvYmogPSBHRE9NT2JqZWN0Q2FjaGU6OmdldERPTU9i
amVjdChkb2MpOworICAgIGlmIChnb2JqKQorICAgICAgICByZXR1cm4gZ29iajsKKworICAgIGdw
b2ludGVyIHJldDsKKworICAgIGlmIChkb2MtPmlzSFRNTERvY3VtZW50KCkpCisgICAgICAgIHJl
dCA9IHdyYXBIVE1MRG9jdW1lbnQoc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oZG9jKSk7Cisj
aWYgRU5BQkxFKFNWRykKKyAgICBlbHNlIGlmIChkb2MtPmlzU1ZHRG9jdW1lbnQoKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBOVUxMOyAvKiBYWFggVE9ETyAtIHNlZSAjMjA1ODYgKi8KKyNpZiAw
CisgICAgICAgIHJldCA9IHdyYXBTVkdEb2N1bWVudChzdGF0aWNfY2FzdDxTVkdEb2N1bWVudCo+
KGRvYykpOworI2VuZGlmCisgICAgfQorI2VuZGlmCisgICAgZWxzZQorICAgICAgICByZXQgPSB3
cmFwRG9jdW1lbnQoZG9jKTsKKworICAgIHJldHVybiBHRE9NT2JqZWN0Q2FjaGU6OnB1dERPTU9i
amVjdChkb2MsIHJldCk7Cit9CisKK3N0YXRpYyBncG9pbnRlciBjcmVhdGVXcmFwcGVyKE5vZGUq
IG5vZGUpOworCitncG9pbnRlciB0b0dET01OZXdseUNyZWF0ZWQoTm9kZSogbm9kZSkKK3sKKyAg
ICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIGNyZWF0ZVdy
YXBwZXIobm9kZSk7Cit9CisKK2dwb2ludGVyIHRvR0RPTShOb2RlKiBub2RlKQoreworICAgIGlm
ICghbm9kZSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBncG9pbnRlciByZXQgPSBHRE9N
T2JqZWN0Q2FjaGU6OmdldERPTU9iamVjdChub2RlKTsKKyAgICBpZiAocmV0KQorICAgICAgICBy
ZXR1cm4gcmV0OworCisgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXIobm9kZSk7Cit9CisKK2dwb2lu
dGVyIHRvR0RPTShDU1NWYWx1ZSogdmFsdWUpCit7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAg
cmV0dXJuIE5VTEw7CisKKyAgICBncG9pbnRlciBnb2JqID0gR0RPTU9iamVjdENhY2hlOjpnZXRE
T01PYmplY3QodmFsdWUpOworCisgICAgaWYgKGdvYmopCisgICAgICAgIHJldHVybiBnb2JqOwor
CisgICAgZ3BvaW50ZXIgcmV0OworCisgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKQorICAg
ICAgICByZXQgPSB3cmFwQ1NTVmFsdWVMaXN0KHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZh
bHVlKSk7CisjaWYgRU5BQkxFKFNWRykKKyAgICBlbHNlIGlmICh2YWx1ZS0+aXNTVkdQYWludCgp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7IC8qIFRPRE8gLSBzZWUgIzIwNTg2ICovCisj
aWYgMAorICAgICAgICByZXQgPSB3cmFwU1ZHUGFpbnQoc3RhdGljX2Nhc3Q8U1ZHUGFpbnQqPih2
YWx1ZSkpOworI2VuZGlmCisgICAgfQorICAgIGVsc2UgaWYgKHZhbHVlLT5pc1NWR0NvbG9yKCkp
CisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsgLyogVE9ETyAtIHNlZSAjMjA1ODYgKi8KKyNp
ZiAwCisgICAgICAgIHJldCA9IHdyYXBTVkdDb2xvcihzdGF0aWNfY2FzdDxTVkdDb2xvcio+KHZh
bHVlKSk7CisjZW5kaWYKKyAgICB9CisjZW5kaWYKKyAgICBlbHNlIGlmICh2YWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKQorICAgICAgICByZXQgPSB3cmFwQ1NTUHJpbWl0aXZlVmFsdWUoc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSkpOworICAgIGVsc2UKKyAgICAgICAgcmV0
ID0gd3JhcENTU1ZhbHVlKHZhbHVlKTsKKworICAgIHJldHVybiBHRE9NT2JqZWN0Q2FjaGU6OnB1
dERPTU9iamVjdCh2YWx1ZSwgcmV0KTsKK30KKworc3RhdGljIEFMV0FZU19JTkxJTkUgZ3BvaW50
ZXIgY3JlYXRlV3JhcHBlcihOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChub2RlKTsKKyAgICBB
U1NFUlQoIVNjcmlwdEludGVycHJldGVyOjpnZXRET01PYmplY3Qobm9kZSkpOworCisgICAgRG9j
dW1lbnQqIGRvYyA9IG5vZGUtPmRvY3VtZW50KCk7CisgICAgZ3BvaW50ZXIgcmV0ID0gTlVMTDsK
KworICAgIHN3aXRjaCAobm9kZS0+bm9kZVR5cGUoKSkgeworICAgICAgICBjYXNlIE5vZGU6OkVM
RU1FTlRfTk9ERToKKyAgICAgICAgICAgIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkpCisgICAg
ICAgICAgICAgICAgcmV0ID0gY3JlYXRlR0RPTUhUTUxXcmFwcGVyKHN0YXRpY19jYXN0PEhUTUxF
bGVtZW50Kj4obm9kZSkpOworI2lmIEVOQUJMRShTVkcpCisgICAgICAgICAgICBlbHNlIGlmIChu
b2RlLT5pc1NWR0VsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyNpZiAw
IC8qIFhYWCBUT0RPIC0gc2VlICMyMDU4NiAqLworICAgICAgICAgICAgICAgIHJldCA9IGNyZWF0
ZUdET01TVkdXcmFwcGVyKHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKSk7CisjZW5kaWYK
KyNlbmRpZgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldCA9IHdyYXBFbGVt
ZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9ERToKKyAgICAgICAgICAgIHJldCA9IHdyYXBB
dHRyKHN0YXRpY19jYXN0PEF0dHIqPihub2RlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBOb2RlOjpURVhUX05PREU6CisgICAgICAgICAgICByZXQgPSB3cmFwVGV4dChzdGF0
aWNfY2FzdDxUZXh0Kj4obm9kZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Tm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFOgorICAgICAgICAgICAgcmV0ID0gd3JhcENEQVRBU2Vj
dGlvbihzdGF0aWNfY2FzdDxDREFUQVNlY3Rpb24qPihub2RlKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBOb2RlOjpFTlRJVFlfTk9ERToKKyAgICAgICAgICAgIHJldCA9IHdy
YXBFbnRpdHkoc3RhdGljX2Nhc3Q8RW50aXR5Kj4obm9kZSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFOgorICAgICAg
ICAgICAgcmV0ID0gd3JhcFByb2Nlc3NpbmdJbnN0cnVjdGlvbihzdGF0aWNfY2FzdDxQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24qPihub2RlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBOb2RlOjpDT01NRU5UX05PREU6CisgICAgICAgICAgICByZXQgPSB3cmFwQ29tbWVudChzdGF0
aWNfY2FzdDxDb21tZW50Kj4obm9kZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgTm9kZTo6RE9DVU1FTlRfTk9ERToKKyAgICAgICAgICAgIC8vIHdlIGRvbid0IHdhbnQgdG8g
Y2FjaGUgdGhlIGRvY3VtZW50IGl0c2VsZiBpbiB0aGUgcGVyLWRvY3VtZW50IGRpY3Rpb25hcnkK
KyAgICAgICAgICAgIHJldHVybiB0b0dET00oc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihub2RlKSk7
CisgICAgICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfVFlQRV9OT0RFOgorICAgICAgICAgICAgcmV0
ID0gd3JhcERvY3VtZW50VHlwZShzdGF0aWNfY2FzdDxEb2N1bWVudFR5cGUqPihub2RlKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOb2RlOjpOT1RBVElPTl9OT0RFOgorICAg
ICAgICAgICAgcmV0ID0gd3JhcE5vdGF0aW9uKHN0YXRpY19jYXN0PE5vdGF0aW9uKj4obm9kZSkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfRlJBR01F
TlRfTk9ERToKKyAgICAgICAgICAgIHJldCA9IHdyYXBEb2N1bWVudEZyYWdtZW50KHN0YXRpY19j
YXN0PERvY3VtZW50RnJhZ21lbnQqPihub2RlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBOb2RlOjpFTlRJVFlfUkVGRVJFTkNFX05PREU6CisgICAgICAgICAgICByZXQgPSB3
cmFwRW50aXR5UmVmZXJlbmNlKHN0YXRpY19jYXN0PEVudGl0eVJlZmVyZW5jZSo+KG5vZGUpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0ID0g
d3JhcE5vZGUobm9kZSk7CisgICAgfQorCisgICAgcmV0dXJuIEdET01PYmplY3RDYWNoZTo6cHV0
RE9NT2JqZWN0KG5vZGUsIHJldCk7Cit9CisKK2dwb2ludGVyIHRvR0RPTShIVE1MQ29sbGVjdGlv
biogY29sbGVjdGlvbikKK3sKKyAgICBpZiAoIWNvbGxlY3Rpb24pCisgICAgICAgIHJldHVybiBO
VUxMOworCisgICAgZ3BvaW50ZXIgZ29iaiA9IEdET01PYmplY3RDYWNoZTo6Z2V0RE9NT2JqZWN0
KGNvbGxlY3Rpb24pOworCisgICAgaWYgKGdvYmopCisgICAgICAgIHJldHVybiBnb2JqOworCisg
ICAgZ3BvaW50ZXIgcmV0OworICAgIHN3aXRjaCAoY29sbGVjdGlvbi0+dHlwZSgpKSB7CisgICAg
ICAgIGNhc2UgU2VsZWN0T3B0aW9uczoKKyAgICAgICAgICAgIHJldCA9IHdyYXBIVE1MT3B0aW9u
c0NvbGxlY3Rpb24oc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbnNDb2xsZWN0aW9uKj4oY29sbGVjdGlv
bikpOworICAgICAgICAgICAgYnJlYWs7CisjaWYgMAorICAgICAgICBjYXNlIEhUTUxDb2xsZWN0
aW9uOjpEb2NBbGw6CisgICAgICAgICAgICByZXQgPSB3cmFwSFRNTENvbGxlY3Rpb24oc3RhdGlj
X2Nhc3Q8SFRNTENvbGxlY3Rpb24qPihjb2xsZWN0aW9uKSk7CisgICAgICAgICAgICBicmVhazsK
KyNlbmRpZgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0ID0gd3JhcEhUTUxDb2xs
ZWN0aW9uKHN0YXRpY19jYXN0PEhUTUxDb2xsZWN0aW9uKj4oY29sbGVjdGlvbikpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIEdET01PYmplY3RDYWNoZTo6cHV0RE9N
T2JqZWN0KGNvbGxlY3Rpb24sIHJldCk7Cit9CisKK2dwb2ludGVyIHRvR0RPTShFdmVudCogZXZl
bnQpCit7CisgICAgaWYgKCFldmVudCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBncG9p
bnRlciBnb2JqID0gR0RPTU9iamVjdENhY2hlOjpnZXRET01PYmplY3QoZXZlbnQpOworICAgIGlm
IChnb2JqKQorICAgICAgICByZXR1cm4gZ29iajsKKworICAgIGdwb2ludGVyIHJldDsKKyAgICBp
ZiAoZXZlbnQtPmlzVUlFdmVudCgpKSB7CisgICAgICAgIGlmIChldmVudC0+aXNLZXlib2FyZEV2
ZW50KCkpCisgICAgICAgICAgICByZXQgPSB3cmFwS2V5Ym9hcmRFdmVudChzdGF0aWNfY2FzdDxL
ZXlib2FyZEV2ZW50Kj4oZXZlbnQpKTsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmlzVGV4dEV2
ZW50KCkpCisgICAgICAgICAgICByZXQgPSB3cmFwVGV4dEV2ZW50KHN0YXRpY19jYXN0PFRleHRF
dmVudCo+KGV2ZW50KSk7CisgICAgICAgIGVsc2UgaWYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSkK
KyAgICAgICAgICAgIHJldCA9IHdyYXBNb3VzZUV2ZW50KHN0YXRpY19jYXN0PE1vdXNlRXZlbnQq
PihldmVudCkpOworICAgICAgICBlbHNlIGlmIChldmVudC0+aXNXaGVlbEV2ZW50KCkpCisgICAg
ICAgICAgICByZXQgPSB3cmFwV2hlZWxFdmVudChzdGF0aWNfY2FzdDxXaGVlbEV2ZW50Kj4oZXZl
bnQpKTsKKyNpZiBFTkFCTEUoU1ZHKQorICAgICAgICBlbHNlIGlmIChldmVudC0+aXNTVkdab29t
RXZlbnQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7IC8qIFRPRE8gLSBz
ZWUgIzIwNTg2ICovCisjaWYgMAorICAgICAgICAgICAgcmV0ID0gd3JhcFNWR1pvb21FdmVudChz
dGF0aWNfY2FzdDxTVkdab29tRXZlbnQqPihldmVudCksIDApOworI2VuZGlmCisgICAgICAgIH0K
KyNlbmRpZgorICAgICAgICBlbHNlCisgICAgICAgICAgICByZXQgPSB3cmFwVUlFdmVudChzdGF0
aWNfY2FzdDxVSUV2ZW50Kj4oZXZlbnQpKTsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LT5pc011dGF0
aW9uRXZlbnQoKSkKKyAgICAgICAgcmV0ID0gd3JhcE11dGF0aW9uRXZlbnQoc3RhdGljX2Nhc3Q8
TXV0YXRpb25FdmVudCo+KGV2ZW50KSk7CisgICAgZWxzZSBpZiAoZXZlbnQtPmlzT3ZlcmZsb3dF
dmVudCgpKQorICAgICAgICByZXQgPSB3cmFwT3ZlcmZsb3dFdmVudChzdGF0aWNfY2FzdDxPdmVy
Zmxvd0V2ZW50Kj4oZXZlbnQpKTsKKyAgICBlbHNlIGlmIChldmVudC0+aXNNZXNzYWdlRXZlbnQo
KSkKKyAgICAgICAgcmV0ID0gd3JhcE1lc3NhZ2VFdmVudChzdGF0aWNfY2FzdDxNZXNzYWdlRXZl
bnQqPihldmVudCkpOworICAgIGVsc2UgaWYgKGV2ZW50LT5pc1Byb2dyZXNzRXZlbnQoKSkgewor
ICAgICAgICBpZiAoZXZlbnQtPmlzWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50KCkpCisgICAg
ICAgICAgICByZXQgPSB3cmFwWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50KHN0YXRpY19jYXN0
PFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudCo+KGV2ZW50KSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHJldCA9IHdyYXBQcm9ncmVzc0V2ZW50KHN0YXRpY19jYXN0PFByb2dyZXNzRXZl
bnQqPihldmVudCkpOworICAgIH0KKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgZWxzZSBp
ZiAoZXZlbnQtPmlzU3RvcmFnZUV2ZW50KCkpCisgICAgICAgIHJldCA9IHdyYXBTdG9yYWdlRXZl
bnQoc3RhdGljX2Nhc3Q8U3RvcmFnZUV2ZW50Kj4oZXZlbnQpKTsKKyNlbmRpZgorICAgIGVsc2Ug
aWYgKGV2ZW50LT5pc1dlYktpdEFuaW1hdGlvbkV2ZW50KCkpCisgICAgICAgIHJldCA9IHdyYXBX
ZWJLaXRBbmltYXRpb25FdmVudChzdGF0aWNfY2FzdDxXZWJLaXRBbmltYXRpb25FdmVudCo+KGV2
ZW50KSk7CisgICAgZWxzZSBpZiAoZXZlbnQtPmlzV2ViS2l0VHJhbnNpdGlvbkV2ZW50KCkpCisg
ICAgICAgIHJldCA9IHdyYXBXZWJLaXRUcmFuc2l0aW9uRXZlbnQoc3RhdGljX2Nhc3Q8V2ViS2l0
VHJhbnNpdGlvbkV2ZW50Kj4oZXZlbnQpKTsKKyAgICBlbHNlCisgICAgICAgIHJldCA9IHdyYXBF
dmVudChldmVudCk7CisKKyAgICByZXR1cm4gR0RPTU9iamVjdENhY2hlOjpwdXRET01PYmplY3Qo
ZXZlbnQsIHJldCk7Cit9CisKK2dwb2ludGVyIHRvR0RPTShUZXh0KiB0ZXh0KQoreworICAgIGlm
ICghdGV4dCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBncG9pbnRlciBnb2JqID0gR0RP
TU9iamVjdENhY2hlOjpnZXRET01PYmplY3QodGV4dCk7CisgICAgaWYgKGdvYmopCisgICAgICAg
IHJldHVybiBnb2JqOworCisgICAgZ3BvaW50ZXIgcmV0ID0gd3JhcFRleHQodGV4dCk7CisgICAg
cmV0dXJuIEdET01PYmplY3RDYWNoZTo6cHV0RE9NT2JqZWN0KHRleHQsIHJldCk7Cit9CisKK2dw
b2ludGVyIHRvR0RPTShDU1NSdWxlKiBydWxlKQoreworICAgIGlmICghcnVsZSkKKyAgICAgICAg
cmV0dXJuIE5VTEw7CisKKyAgICBncG9pbnRlciBnb2JqID0gR0RPTU9iamVjdENhY2hlOjpnZXRE
T01PYmplY3QocnVsZSk7CisKKyAgICBpZiAoZ29iaikKKyAgICAgICAgcmV0dXJuIGdvYmo7CisK
KyAgICBncG9pbnRlciByZXQ7CisgICAgc3dpdGNoIChydWxlLT50eXBlKCkpIHsKKyAgICAgICAg
Y2FzZSBDU1NSdWxlOjpTVFlMRV9SVUxFOgorICAgICAgICAgICAgcmV0ID0gd3JhcENTU1N0eWxl
UnVsZShzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihydWxlKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBDU1NSdWxlOjpNRURJQV9SVUxFOgorICAgICAgICAgICAgcmV0ID0g
d3JhcENTU01lZGlhUnVsZShzdGF0aWNfY2FzdDxDU1NNZWRpYVJ1bGUqPihydWxlKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NSdWxlOjpGT05UX0ZBQ0VfUlVMRToKKyAg
ICAgICAgICAgIHJldCA9IHdyYXBDU1NGb250RmFjZVJ1bGUoc3RhdGljX2Nhc3Q8Q1NTRm9udEZh
Y2VSdWxlKj4ocnVsZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTUnVs
ZTo6UEFHRV9SVUxFOgorICAgICAgICAgICAgcmV0ID0gd3JhcENTU1BhZ2VSdWxlKHN0YXRpY19j
YXN0PENTU1BhZ2VSdWxlKj4ocnVsZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQ1NTUnVsZTo6SU1QT1JUX1JVTEU6CisgICAgICAgICAgICByZXQgPSB3cmFwQ1NTSW1wb3J0
UnVsZShzdGF0aWNfY2FzdDxDU1NJbXBvcnRSdWxlKj4ocnVsZSkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ1NTUnVsZTo6Q0hBUlNFVF9SVUxFOgorICAgICAgICAgICAgcmV0
ID0gd3JhcENTU0NoYXJzZXRSdWxlKHN0YXRpY19jYXN0PENTU0NoYXJzZXRSdWxlKj4ocnVsZSkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTUnVsZTo6VkFSSUFCTEVTX1JV
TEU6CisgICAgICAgICAgICByZXQgPSB3cmFwQ1NTVmFyaWFibGVzUnVsZShzdGF0aWNfY2FzdDxD
U1NWYXJpYWJsZXNSdWxlKj4ocnVsZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXQgPSB3cmFwQ1NTUnVsZShydWxlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIEdET01PYmplY3RDYWNoZTo6cHV0RE9NT2JqZWN0KHJ1bGUs
IHJldCk7CisgICAgcmV0dXJuIHJldDsKK30KKworZ3BvaW50ZXIgdG9HRE9NKEVsZW1lbnQqIGVs
ZW1lbnQpCit7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAg
IC8vIHNob3VsZG4ndCBiZSBvbmU/IEFTU0VSVCghU2NyaXB0SW50ZXJwcmV0ZXI6OmdldERPTU9i
amVjdChlbGVtZW50KSk7CisgICAgZ3BvaW50ZXIgZ29iaiA9IEdET01PYmplY3RDYWNoZTo6Z2V0
RE9NT2JqZWN0KGVsZW1lbnQpOworICAgIGlmIChnb2JqKQorICAgICAgICByZXR1cm4gZ29iajsK
KworICAgIGdwb2ludGVyIHJldDsKKyAgICBEb2N1bWVudCogZG9jID0gZWxlbWVudC0+ZG9jdW1l
bnQoKTsKKworICAgIGlmIChlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpCisgICAgICAgIHJldCA9
IGNyZWF0ZUdET01IVE1MV3JhcHBlcihzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGVsZW1lbnQp
KTsKKyNpZiBFTkFCTEUoU1ZHKQorICAgIGVsc2UgaWYgKGVsZW1lbnQtPmlzU1ZHRWxlbWVudCgp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7IC8qIFRPRE8gLSBzZWUgIzIwNTg2ICovCisj
aWYgMAorICAgICAgICByZXQgPSBjcmVhdGVHRE9NU1ZHV3JhcHBlcihzdGF0aWNfY2FzdDxTVkdF
bGVtZW50Kj4oZWxlbWVudCkpOworI2VuZGlmCisgICAgfQorI2VuZGlmCisgICAgZWxzZQorICAg
ICAgICByZXQgPSB3cmFwRWxlbWVudChlbGVtZW50KTsKKworICAgIHJldHVybiBHRE9NT2JqZWN0
Q2FjaGU6OnB1dERPTU9iamVjdChlbGVtZW50LCByZXQpOworfQorCitncG9pbnRlciB0b0dET00o
U3R5bGVTaGVldCogc3R5bGVTaGVldCkKK3sKKyAgICBpZiAoIXN0eWxlU2hlZXQpCisgICAgICAg
IHJldHVybiBOVUxMOworCisgICAgZ3BvaW50ZXIgZ29iaiA9IEdET01PYmplY3RDYWNoZTo6Z2V0
RE9NT2JqZWN0KHN0eWxlU2hlZXQpOworICAgIGlmIChnb2JqKQorICAgICAgICByZXR1cm4gZ29i
ajsKKworICAgIGdwb2ludGVyIHJldDsKKyAgICBpZiAoc3R5bGVTaGVldC0+aXNDU1NTdHlsZVNo
ZWV0KCkpCisgICAgICAgIHJldCA9IHdyYXBDU1NTdHlsZVNoZWV0KHN0YXRpY19jYXN0PENTU1N0
eWxlU2hlZXQqPihzdHlsZVNoZWV0KSk7CisgICAgZWxzZQorICAgICAgICByZXQgPSB3cmFwU3R5
bGVTaGVldChzdHlsZVNoZWV0KTsKKworICAgIHJldHVybiBHRE9NT2JqZWN0Q2FjaGU6OnB1dERP
TU9iamVjdChzdHlsZVNoZWV0LCByZXQpOworfQorCisvKiBkZXJpdmVkIHNvdXJjZXMgYXV0by1n
ZW5lcmF0ZWQgKi8KK2dwb2ludGVyIHRvR0RPTShYTUxIdHRwUmVxdWVzdFVwbG9hZCogb2JqKTsK
KworZ3BvaW50ZXIgdG9HRE9NKEV2ZW50VGFyZ2V0KiB0YXJnZXQpCit7CisgICAgaWYgKCF0YXJn
ZXQpCisgICAgICAgIHJldHVybiBOVUxMOworCisjaWYgMCAvKiBUT0RPIC0gc2VlICMyMDU4NiAq
LworI2lmIEVOQUJMRShTVkcpCisgICAgLy8gU1ZHRWxlbWVudEluc3RhbmNlIHN1cHBvcnRzIGJv
dGggdG9TVkdFbGVtZW50SW5zdGFuY2UgYW5kCisgICAgLy8gdG9Ob2RlIHNpbmNlIHNvIG11Y2gg
bW91c2UgaGFuZGxpbmcgY29kZSBkZXBlbmRzIG9uIHRvTm9kZQorICAgIC8vIHJldHVybmluZyBh
IHZhbGlkIG5vZGUuCisgICAgU1ZHRWxlbWVudEluc3RhbmNlKiBpbnN0YW5jZSA9IHRhcmdldC0+
dG9TVkdFbGVtZW50SW5zdGFuY2UoKTsKKyAgICBpZiAoaW5zdGFuY2UpCisgICAgICAgIHJldHVy
biB0b0dET00oZXhlYywgaW5zdGFuY2UpOworI2VuZGlmCisjZW5kaWYKKworICAgIE5vZGUqIG5v
ZGUgPSB0YXJnZXQtPnRvTm9kZSgpOworICAgIGlmIChub2RlKQorICAgICAgICByZXR1cm4gdG9H
RE9NKG5vZGUpOworCisgICAgaWYgKFhNTEh0dHBSZXF1ZXN0KiB4aHIgPSB0YXJnZXQtPnRvWE1M
SHR0cFJlcXVlc3QoKSkKKyAgICAgICAgLy8gWE1MSHR0cFJlcXVlc3QgaXMgYWx3YXlzIGNyZWF0
ZWQgdmlhIEdET00sIHNvIHdlIGRvbid0IG5lZWQKKyAgICAgICAgLy8gdG8gdXNlIGNhY2hlRE9N
T2JqZWN0KCkgaGVyZS4KKyAgICAgICAgcmV0dXJuIEdET01PYmplY3RDYWNoZTo6Z2V0RE9NT2Jq
ZWN0KHhocik7CisKKyAgICBpZiAoWE1MSHR0cFJlcXVlc3RVcGxvYWQqIHVwbG9hZCA9IHRhcmdl
dC0+dG9YTUxIdHRwUmVxdWVzdFVwbG9hZCgpKQorICAgICAgICByZXR1cm4gdG9HRE9NKHVwbG9h
ZCk7CisKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgIGlmIChET01B
cHBsaWNhdGlvbkNhY2hlKiBjYWNoZSA9IHRhcmdldC0+dG9ET01BcHBsaWNhdGlvbkNhY2hlKCkp
CisgICAgICAgIC8vIERPTUFwcGxpY2F0aW9uQ2FjaGUgaXMgYWx3YXlzIGNyZWF0ZWQgdmlhIEdE
T00sIHNvIHdlIGRvbid0CisgICAgICAgIC8vIG5lZWQgdG8gdXNlIGNhY2hlRE9NT2JqZWN0KCkg
aGVyZS4KKyAgICAgICAgcmV0dXJuIEdET01PYmplY3RDYWNoZTo6Z2V0RE9NT2JqZWN0KGNhY2hl
KTsKKyNlbmRpZgorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIE5VTEw7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2dk
b20vR0RPTUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2dkb20vR0RP
TUJpbmRpbmcuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvZ2RvbS9HRE9NQmlu
ZGluZy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc0IEBACisvKgorICogIENvcHlyaWdodCAo
QykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtp
dC5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IEx1a2UgS2VubmV0aCBDYXNzb24gTGVpZ2h0
b24gPGxrY2xAbGtjbC5uZXQ+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcnRpbiBTb3RvIDxz
b3RvQGZyZWVkZXNrdG9wLm9yZz4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNp
Zm5kZWYgR2RvbURPTUJpbmRpbmdfaAorI2RlZmluZSBHZG9tRE9NQmluZGluZ19oCisKKyNpbmNs
dWRlICJDU1NSdWxlLmgiCisjaW5jbHVkZSAiQ1NTVmFsdWUuaCIKKyNpbmNsdWRlICJFbGVtZW50
LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudFRhcmdldC5oIgorI2luY2x1
ZGUgIkdkb21Ob2RlLmgiCisjaW5jbHVkZSAiR2RvbU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAi
SFRNTENvbGxlY3Rpb24uaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiU3R5bGVTaGVl
dC5oIgorI2luY2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgQXRvbWljU3RyaW5nOworICAgIGNsYXNz
IERvY3VtZW50OworICAgIGNsYXNzIEV2ZW50OworICAgIGNsYXNzIEZyYW1lOworICAgIGNsYXNz
IEtVUkw7CisgICAgY2xhc3MgTm9kZTsKKyAgICBjbGFzcyBTdHJpbmc7CisKKyNpZiBFTkFCTEUo
U1ZHKQorICAgIGNsYXNzIFNWR0VsZW1lbnQ7CisjZW5kaWYKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworbmFtZXNwYWNlIFdlYktpdCB7CisgICAgZ3BvaW50ZXIgdG9HRE9NKFdlYkNvcmU6OkNT
U1J1bGUqKTsKKyAgICBncG9pbnRlciB0b0dET00oV2ViQ29yZTo6Q1NTVmFsdWUqKTsKKyAgICBn
cG9pbnRlciB0b0dET00oV2ViQ29yZTo6RG9jdW1lbnQqKTsKKyAgICBncG9pbnRlciB0b0dET00o
V2ViQ29yZTo6RWxlbWVudCopOworICAgIGdwb2ludGVyIHRvR0RPTShXZWJDb3JlOjpFdmVudCop
OworICAgIGdwb2ludGVyIHRvR0RPTShXZWJDb3JlOjpFdmVudFRhcmdldCopOworICAgIGdwb2lu
dGVyIHRvR0RPTShXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbiopOworICAgIGdwb2ludGVyIHRvR0RP
TShXZWJDb3JlOjpOb2RlKik7CisgICAgZ3BvaW50ZXIgdG9HRE9NKFdlYkNvcmU6OlN0eWxlU2hl
ZXQqKTsKKyAgICBncG9pbnRlciB0b0dET00oV2ViQ29yZTo6VGV4dCopOworCisgICAgY2xhc3Mg
R0RPTU9iamVjdENhY2hlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBncG9pbnRlciBn
ZXRET01PYmplY3Qodm9pZCAqKTsKKyAgICAgICAgc3RhdGljIGdwb2ludGVyIHB1dERPTU9iamVj
dCh2b2lkICosIGdwb2ludGVyKTsKKyAgICAgICAgc3RhdGljIHZvaWQgZm9yZ2V0RE9NT2JqZWN0
KHZvaWQgKik7CisgICAgfTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gR2Rv
bURPTUJpbmRpbmdfaAo=
</data>
<flag name="review"
          id="18144"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34284</attachid>
            <date>2009-08-07 09:51:08 -0700</date>
            <delta_ts>2009-08-07 09:56:06 -0700</delta_ts>
            <desc>split to multiple files, renamed #if 0 to #if __TODO_BUG_20586__</desc>
            <filename>gdbs.patch</filename>
            <type>text/plain</type>
            <size>41945</size>
            <attacher name="Luke Kenneth Casson Leighton">lkcl</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Njg5MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzAwMSw2ICsyMzExMiwyNCBAQAogICAgICAgICAgIFRoaXMgdG8gbWFrZSBpdCBtb3JlIGdl
bmVyaWMgc28gd29ya2VyIHNjcmlwdCBsb2FkaW5nIGNvdWxkIHVzZSBpdC4KICAgICAgICAgKiB3
b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlckNsaWVudC5oOiBBZGRlZC4KIAorMjAwOS0wOC0wMyAg
THVrZSBLZW5uZXRoIENhc3NvbiBMZWlnaHRvbiAgPGxrY2xAbGtjbC5uZXQ+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI3NDI2CisKKyAgICAgICAgKiBiaW5kaW5ncy9nZG9tL0dE
T01CaW5kaW5nLmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvZ2RvbS9HRE9NQmluZGlu
Zy5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9nZG9tL0dET01DU1NSdWxlQ3VzdG9tLmNw
cDogQWRkZWQKKyAgICAgICAgKiBiaW5kaW5ncy9nZG9tL0dET01DU1NWYWx1ZUN1c3RvbS5jcHA6
IEFkZGVkCisgICAgICAgICogYmluZGluZ3MvZ2RvbS9HRE9NRG9jdW1lbnRDdXN0b20uY3BwOiBB
ZGRlZAorICAgICAgICAqIGJpbmRpbmdzL2dkb20vR0RPTUVsZW1lbnRDdXN0b20uY3BwOiBBZGRl
ZAorICAgICAgICAqIGJpbmRpbmdzL2dkb20vR0RPTUV2ZW50Q3VzdG9tLmNwcDogQWRkZWQKKyAg
ICAgICAgKiBiaW5kaW5ncy9nZG9tL0dET01FdmVudFRhcmdldEN1c3RvbS5jcHA6IEFkZGVkCisg
ICAgICAgICogYmluZGluZ3MvZ2RvbS9HRE9NSFRNTENvbGxlY3Rpb25DdXN0b20uY3BwOiBBZGRl
ZAorICAgICAgICAqIGJpbmRpbmdzL2dkb20vR0RPTVN0eWxlU2hlZXRDdXN0b20uY3BwOiBBZGRl
ZAorICAgICAgICAqIGJpbmRpbmdzL2dkb20vR0RPTVRleHRDdXN0b20uY3BwOiBBZGRlZAorCiAy
MDA5LTA2LTE2ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AZ21haWwuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9nZG9tL0dE
T01Eb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9nZG9t
L0dET01Eb2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2dkb20vR0RPTURvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MyBA
QAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFNh
bXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3JnPgorICogIENvcHlyaWdodCAoQykgMjAwOCBMdWtl
IEtlbm5ldGggQ2Fzc29uIExlaWdodG9uIDxsa2NsQGxrY2wubmV0PgorICogIENvcHlyaWdodCAo
QykgMjAwOCBNYXJ0aW4gU290byA8c290b0BmcmVlZGVza3RvcC5vcmc+CisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqLworCisvKiBQTEVBU0UgTk9URTogdGhpcyBmaWxlIG5lZWRzIHRvIGJl
IGtlcHQgdXAtdG8tZGF0ZSBpbiBFWEFDVCBhY2NvcmRhbmNlCisgKiB3aXRoIEpTRG9jdW1lbnRD
dXN0b20uY3BwLiAgYW55IGFkZGl0aW9ucyB0byBKU0RvY3VtZW50Q3VzdG9tLmNwcAorICogd2ls
bCBhbHNvIHJlcXVpcmUgdGhlIEVYQUNUIHNhbWUgYWRkaXRpb25zLCBoZXJlLgorICoKKyAqIEZJ
WE1FOiB0aGVyZSBzaG91bGQgaGF2ZSBiZWVuIG5vIG5lZWQgdG8gZHVwbGljYXRlIHRoZSBmdW5j
dGlvbmFsaXR5IGJlaGluZAorICogSlNET01CaW5kaW5nLmNwcCBhbmQgY2FsbCBpdCBHRE9NQmlu
ZGluZy5jcHAgaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQKKyAqIHRoZXJlIHNob3VsZCBiZSBubyBu
ZWVkIGZvciB0aGlzIGZpbGU7IHRoZSBmdW5jdGlvbmFsaXR5IHNob3VsZCBiZQorICogbWVyZ2Vk
IGludG8gY29tbW9uIGNvZGUsIGFzIGl0IGRvZXMgZXhhY3RseSB0aGUgc2FtZSB0aGluZy4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJnbGliLW9iamVjdC5oIgorI2lu
Y2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJHRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkdk
b21Eb2N1bWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tRE9NT2JqZWN0LmgiCisjaW5jbHVk
ZSAiR2RvbURPTU9iamVjdFByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tSFRNTERvY3VtZW50UHJp
dmF0ZS5oIgorCisjaWYgRU5BQkxFKFNWRykKKyNpZmRlZiBfX1RPRE9fQlVHXzIwNTg2X18gLyog
WFhYIFRPRE8gLSBzZWUgIzIwNTg2ICovCisjaW5jbHVkZSAiR2RvbVNWR0RvY3VtZW50UHJpdmF0
ZS5oIgorI2VuZGlmCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCitncG9pbnRlciB0b0dET00oRG9jdW1lbnQqIGRvYykKK3sKKyAgICBp
ZiAoIWRvYykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBncG9pbnRlciBnb2JqID0gR0RP
TU9iamVjdENhY2hlOjpnZXRET01PYmplY3QoZG9jKTsKKyAgICBpZiAoZ29iaikKKyAgICAgICAg
cmV0dXJuIGdvYmo7CisKKyAgICBncG9pbnRlciByZXQ7CisKKyAgICBpZiAoZG9jLT5pc0hUTUxE
b2N1bWVudCgpKQorICAgICAgICByZXQgPSB3cmFwSFRNTERvY3VtZW50KHN0YXRpY19jYXN0PEhU
TUxEb2N1bWVudCo+KGRvYykpOworI2lmIEVOQUJMRShTVkcpCisgICAgZWxzZSBpZiAoZG9jLT5p
c1NWR0RvY3VtZW50KCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsgLyogWFhYIFRPRE8g
LSBzZWUgIzIwNTg2ICovCisjaWZkZWYgX19UT0RPX0JVR18yMDU4Nl9fIC8qIFhYWCBUT0RPIC0g
c2VlICMyMDU4NiAqLworICAgICAgICByZXQgPSB3cmFwU1ZHRG9jdW1lbnQoc3RhdGljX2Nhc3Q8
U1ZHRG9jdW1lbnQqPihkb2MpKTsKKyNlbmRpZgorICAgIH0KKyNlbmRpZgorICAgIGVsc2UKKyAg
ICAgICAgcmV0ID0gd3JhcERvY3VtZW50KGRvYyk7CisKKyAgICByZXR1cm4gR0RPTU9iamVjdENh
Y2hlOjpwdXRET01PYmplY3QoZG9jLCByZXQpOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2dkb20vR0RPTUJpbmRpbmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvZ2RvbS9HRE9NQmluZGluZy5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2dkb20vR0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE3OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQ
b3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3JnPgorICogIENvcHlyaWdo
dCAoQykgMjAwOCBMdWtlIEtlbm5ldGggQ2Fzc29uIExlaWdodG9uIDxsa2NsQGxrY2wubmV0Pgor
ICogIENvcHlyaWdodCAoQykgMjAwOCBNYXJ0aW4gU290byA8c290b0BmcmVlZGVza3RvcC5vcmc+
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisvKiAKKyAqIEZJWE1FOiB0aGVyZSBz
aG91bGQgaGF2ZSBiZWVuIG5vIG5lZWQgdG8gZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGJl
aGluZAorICogSlNET01CaW5kaW5nLmNwcCBhbmQgY2FsbCBpdCBHRE9NQmluZGluZy5jcHAgaW4g
dGhlIGZpcnN0IHBsYWNlLgorICogVGhlcmUgc2hvdWxkIGJlIG5vIG5lZWQgZm9yIHRoaXMgZmls
ZTsgdGhlIGZ1bmN0aW9uYWxpdHkgc2hvdWxkIGJlCisgKiBtZXJnZWQgaW50byBjb21tb24gY29k
ZSwgYXMgaXQgZG9lcyBleGFjdGx5IHRoZSBzYW1lIHRoaW5nLgorICoKKyAqIGhvd2V2ZXIsIGl0
IGlzIGJlaW5nIGFkZGVkIG5lYXItdmVyYmF0aW0tY3V0LXBhc3RlIGJlY2F1c2UgYSkgdGhhdCBp
cworICogZWFzaWVyIGIpIGl0J3MgZXhhY3RseSB3aGF0IHRoZSBvYmplY3RpdmUtYyBiaW5kaW5n
cyBkbworICoKKyAqLworCisvLyBnY2MgMy54IGNhbid0IGhhbmRsZSBpbmNsdWRpbmcgdGhlIEhh
c2hNYXAgcG9pbnRlciBzcGVjaWFsaXphdGlvbgorLy8gaW4gdGhpcyBmaWxlCisjaWYgZGVmaW5l
ZCBfX0dOVUNfXyAmJiAhZGVmaW5lZCBfX0dMSUJDWFhfXyAvLyBsZXNzIHRoYW4gZ2NjIDMuNAor
I2RlZmluZSBIQVNIX01BUF9QVFJfU1BFQ19XT1JLQVJPVU5EIDEKKyNlbmRpZgorCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJnbGliLW9iamVjdC5oIgorI2luY2x1ZGUgIkNTdHJp
bmcuaCIKKyNpbmNsdWRlICJHZG9tQXR0clByaXZhdGUuaCIKKyNpbmNsdWRlICJHRE9NQmluZGlu
Zy5oIgorI2luY2x1ZGUgIkdkb21DREFUQVNlY3Rpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAiR2Rv
bUNvbW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbURvY3VtZW50UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIkdkb21Eb2N1bWVudFR5cGVQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbURvY3VtZW50
RnJhZ21lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbURPTU9iamVjdC5oIgorI2luY2x1ZGUg
Ikdkb21ET01PYmplY3RQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbUhUTUxFbGVtZW50V3JhcHBl
ckZhY3RvcnkuaCIKKyNpbmNsdWRlICJHZG9tRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJH
ZG9tRW50aXR5UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21FbnRpdHlSZWZlcmVuY2VQcml2YXRl
LmgiCisjaW5jbHVkZSAiR2RvbU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbU5vdGF0aW9u
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25Qcml2YXRlLmgi
CisjaW5jbHVkZSAiR2RvbVRleHRQcml2YXRlLmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCit0eXBl
ZGVmIEhhc2hNYXA8dm9pZCosIGdwb2ludGVyPiBET01PYmplY3RNYXA7CisKK3N0YXRpYyBET01P
YmplY3RNYXAmIGRvbU9iamVjdHMoKQoreworICAgIHN0YXRpYyBET01PYmplY3RNYXAgc3RhdGlj
RE9NT2JqZWN0czsKKyAgICByZXR1cm4gc3RhdGljRE9NT2JqZWN0czsKK30KKworZ3BvaW50ZXIg
R0RPTU9iamVjdENhY2hlOjpnZXRET01PYmplY3Qodm9pZCogb2JqZWN0SGFuZGxlKQoreworICAg
IGdwb2ludGVyIHJldCA9IGRvbU9iamVjdHMoKS5nZXQob2JqZWN0SGFuZGxlKTsKKyAgICByZXR1
cm4gcmV0OworfQorCitncG9pbnRlciBHRE9NT2JqZWN0Q2FjaGU6OnB1dERPTU9iamVjdCh2b2lk
KiBvYmplY3RIYW5kbGUsIGdwb2ludGVyIHdyYXBwZXIpCit7CisgICAgZG9tT2JqZWN0cygpLnNl
dChvYmplY3RIYW5kbGUsIHdyYXBwZXIpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCit2b2lk
IEdET01PYmplY3RDYWNoZTo6Zm9yZ2V0RE9NT2JqZWN0KHZvaWQqIG9iamVjdEhhbmRsZSkKK3sK
KyAgICBkb21PYmplY3RzKCkudGFrZShvYmplY3RIYW5kbGUpOworfQorCitzdGF0aWMgZ3BvaW50
ZXIgY3JlYXRlV3JhcHBlcihOb2RlKiBub2RlKTsKKworZ3BvaW50ZXIgdG9HRE9NTmV3bHlDcmVh
dGVkKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gTlVMTDsK
KworICAgIHJldHVybiBjcmVhdGVXcmFwcGVyKG5vZGUpOworfQorCitncG9pbnRlciB0b0dET00o
Tm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBOVUxMOworCisg
ICAgZ3BvaW50ZXIgcmV0ID0gR0RPTU9iamVjdENhY2hlOjpnZXRET01PYmplY3Qobm9kZSk7Cisg
ICAgaWYgKHJldCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldHVybiBjcmVhdGVXcmFw
cGVyKG5vZGUpOworfQorCitzdGF0aWMgQUxXQVlTX0lOTElORSBncG9pbnRlciBjcmVhdGVXcmFw
cGVyKE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUpOworICAgIEFTU0VSVCghU2NyaXB0
SW50ZXJwcmV0ZXI6OmdldERPTU9iamVjdChub2RlKSk7CisKKyAgICBEb2N1bWVudCogZG9jID0g
bm9kZS0+ZG9jdW1lbnQoKTsKKyAgICBncG9pbnRlciByZXQgPSBOVUxMOworCisgICAgc3dpdGNo
IChub2RlLT5ub2RlVHlwZSgpKSB7CisgICAgICAgIGNhc2UgTm9kZTo6RUxFTUVOVF9OT0RFOgor
ICAgICAgICAgICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICBy
ZXQgPSBjcmVhdGVHZG9tSFRNTEVsZW1lbnRXcmFwcGVyKHN0YXRpY19jYXN0PEhUTUxFbGVtZW50
Kj4obm9kZSkpOworI2lmIEVOQUJMRShTVkcpCisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5p
c1NWR0VsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsgLyogWFhYIFRPRE8g
LSBzZWUgIzIwNTg2ICovCisjaWZkZWYgX19UT0RPX0JVR18yMDU4Nl9fIC8qIFhYWCBUT0RPIC0g
c2VlICMyMDU4NiAqLworICAgICAgICAgICAgICAgIHJldCA9IGNyZWF0ZUdET01TVkdFbGVtZW50
V3JhcHBlcihzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSkpOworI2VuZGlmCisjZW5kaWYK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXQgPSB3cmFwRWxlbWVudChzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obm9kZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgTm9kZTo6QVRUUklCVVRFX05PREU6CisgICAgICAgICAgICByZXQgPSB3cmFwQXR0cihzdGF0
aWNfY2FzdDxBdHRyKj4obm9kZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Tm9kZTo6VEVYVF9OT0RFOgorICAgICAgICAgICAgcmV0ID0gd3JhcFRleHQoc3RhdGljX2Nhc3Q8
VGV4dCo+KG5vZGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5vZGU6OkNE
QVRBX1NFQ1RJT05fTk9ERToKKyAgICAgICAgICAgIHJldCA9IHdyYXBDREFUQVNlY3Rpb24oc3Rh
dGljX2Nhc3Q8Q0RBVEFTZWN0aW9uKj4obm9kZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgTm9kZTo6RU5USVRZX05PREU6CisgICAgICAgICAgICByZXQgPSB3cmFwRW50aXR5
KHN0YXRpY19jYXN0PEVudGl0eSo+KG5vZGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERToKKyAgICAgICAgICAgIHJl
dCA9IHdyYXBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oc3RhdGljX2Nhc3Q8UHJvY2Vzc2luZ0luc3Ry
dWN0aW9uKj4obm9kZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm9kZTo6
Q09NTUVOVF9OT0RFOgorICAgICAgICAgICAgcmV0ID0gd3JhcENvbW1lbnQoc3RhdGljX2Nhc3Q8
Q29tbWVudCo+KG5vZGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5vZGU6
OkRPQ1VNRU5UX05PREU6CisgICAgICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIGNhY2hlIHRo
ZSBkb2N1bWVudCBpdHNlbGYgaW4gdGhlIHBlci1kb2N1bWVudCBkaWN0aW9uYXJ5CisgICAgICAg
ICAgICByZXR1cm4gdG9HRE9NKHN0YXRpY19jYXN0PERvY3VtZW50Kj4obm9kZSkpOworICAgICAg
ICBjYXNlIE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERToKKyAgICAgICAgICAgIHJldCA9IHdyYXBE
b2N1bWVudFR5cGUoc3RhdGljX2Nhc3Q8RG9jdW1lbnRUeXBlKj4obm9kZSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm9kZTo6Tk9UQVRJT05fTk9ERToKKyAgICAgICAgICAg
IHJldCA9IHdyYXBOb3RhdGlvbihzdGF0aWNfY2FzdDxOb3RhdGlvbio+KG5vZGUpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6
CisgICAgICAgICAgICByZXQgPSB3cmFwRG9jdW1lbnRGcmFnbWVudChzdGF0aWNfY2FzdDxEb2N1
bWVudEZyYWdtZW50Kj4obm9kZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Tm9kZTo6RU5USVRZX1JFRkVSRU5DRV9OT0RFOgorICAgICAgICAgICAgcmV0ID0gd3JhcEVudGl0
eVJlZmVyZW5jZShzdGF0aWNfY2FzdDxFbnRpdHlSZWZlcmVuY2UqPihub2RlKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldCA9IHdyYXBOb2Rl
KG5vZGUpOworICAgIH0KKworICAgIHJldHVybiBHRE9NT2JqZWN0Q2FjaGU6OnB1dERPTU9iamVj
dChub2RlLCByZXQpOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2dkb20vR0RPTUhUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2dkb20vR0RPTUhUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvZ2RvbS9HRE9NSFRNTENvbGxlY3Rpb25D
dXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk0IEBACisvKgorICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdl
YmtpdC5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IEx1a2UgS2VubmV0aCBDYXNzb24gTGVp
Z2h0b24gPGxrY2xAbGtjbC5uZXQ+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcnRpbiBTb3Rv
IDxzb3RvQGZyZWVkZXNrdG9wLm9yZz4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisK
Ky8qIFBMRUFTRSBOT1RFOiB0aGlzIGZpbGUgbmVlZHMgdG8gYmUga2VwdCB1cC10by1kYXRlIGlu
IEVYQUNUIGFjY29yZGFuY2UKKyAqIHdpdGggSlNIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAuICBh
bnkgYWRkaXRpb25zIHRvCisgKiBKU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcCB3aWxsIGFsc28g
cmVxdWlyZSB0aGUgRVhBQ1Qgc2FtZSBhZGRpdGlvbnMsIGhlcmUuCisgKgorICogRklYTUU6IHRo
ZXJlIHNob3VsZCBoYXZlIGJlZW4gbm8gbmVlZCB0byBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxp
dHkgYmVoaW5kCisgKiBKU0RPTUJpbmRpbmcuY3BwIGFuZCBjYWxsIGl0IEdET01CaW5kaW5nLmNw
cCBpbiB0aGUgZmlyc3QgcGxhY2UsIGFuZAorICogdGhlcmUgc2hvdWxkIGJlIG5vIG5lZWQgZm9y
IHRoaXMgZmlsZTsgdGhlIGZ1bmN0aW9uYWxpdHkgc2hvdWxkIGJlCisgKiBtZXJnZWQgaW50byBj
b21tb24gY29kZSwgYXMgaXQgZG9lcyBleGFjdGx5IHRoZSBzYW1lIHRoaW5nLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImdsaWItb2JqZWN0LmgiCisjaW5jbHVkZSAi
Q1N0cmluZy5oIgorI2luY2x1ZGUgIkdkb21ET01PYmplY3QuaCIKKyNpbmNsdWRlICJHZG9tRE9N
T2JqZWN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdET01CaW5kaW5nLmgiCisKKyNpbmNsdWRlICJH
ZG9tSFRNTENvbGxlY3Rpb24uaCIKKworI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1
ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmgi
CisjaW5jbHVkZSAiR2RvbUhUTUxPcHRpb25zQ29sbGVjdGlvbi5oIgorCisjaW5jbHVkZSAiR2Rv
bUhUTUxDb2xsZWN0aW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21IVE1MT3B0aW9uc0NvbGxl
Y3Rpb25Qcml2YXRlLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworZ3BvaW50ZXIgdG9HRE9NKEhUTUxDb2xsZWN0aW9uKiBjb2xsZWN0aW9uKQor
eworICAgIGlmICghY29sbGVjdGlvbikKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBncG9p
bnRlciBnb2JqID0gR0RPTU9iamVjdENhY2hlOjpnZXRET01PYmplY3QoY29sbGVjdGlvbik7CisK
KyAgICBpZiAoZ29iaikKKyAgICAgICAgcmV0dXJuIGdvYmo7CisKKyAgICBncG9pbnRlciByZXQ7
CisgICAgc3dpdGNoIChjb2xsZWN0aW9uLT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBTZWxlY3RP
cHRpb25zOgorICAgICAgICAgICAgcmV0ID0gd3JhcEhUTUxPcHRpb25zQ29sbGVjdGlvbihzdGF0
aWNfY2FzdDxIVE1MT3B0aW9uc0NvbGxlY3Rpb24qPihjb2xsZWN0aW9uKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgLyogRklYTUU6IHJhdGhlciB0aGFuIGRlbGV0ZSB0aGlzIGNvZGUg
YW5kIG1ha2UgaXQgYXdrd2FyZCBmb3IKKyAgICAgICAgICogd2hvbWV2ZXIgaGFzIHRvIGFkZCBp
dCBiYWNrIGluIHRvIHdvcmsgb3V0IHdoYXQgaXMgZ29pbmcgb24sCisgICAgICAgICAqIGluIG9y
ZGVyIHRvIGNvbXBseSB3aXRoIFdlYktpdCBzdHlsZSBjb2Rpbmcgc3RhbmRhcmRzLCAjaWYgMAor
ICAgICAgICAgKiBpcyBub3QgdXNlZCBoZXJlLCBidXQgYSBsb25nLXdpbmRlZCAjaWZkZWYgd2hp
Y2ggd2lsbCBuZXZlcgorICAgICAgICAgKiBleGlzdCBpcyBkZXBsb3llZCBpbnN0ZWFkLgorICAg
ICAgICAgKiAKKyAgICAgICAgICogc2VlIEpTSFRNTENvbGxlY3Rpb25DdXN0b206OnRvSlMsIHRo
YXQgaXMgdGhlIGNvZGUgZnJvbSB3aGljaAorICAgICAgICAgKiB0aGlzIGVudGlyZSBmdW5jdGlv
biBoYXMgYmVlbiB2ZXJiYXRpbSBjdXQvcGFzdGUuCisgICAgICAgICAqLworI2lmZGVmIF9fRklY
TUVfQUREX0lOX0hUTUxDT0xMRUNUSU9OX0RPQ19BTExfU1VQUE9SVF9MQVRFUl9fCisgICAgICAg
IGNhc2UgSFRNTENvbGxlY3Rpb246OkRvY0FsbDoKKyAgICAgICAgICAgIHJldCA9IHdyYXBIVE1M
Q29sbGVjdGlvbihzdGF0aWNfY2FzdDxIVE1MQ29sbGVjdGlvbio+KGNvbGxlY3Rpb24pKTsKKyAg
ICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXQgPSB3cmFwSFRNTENvbGxlY3Rpb24oc3RhdGljX2Nhc3Q8SFRNTENvbGxlY3Rpb24qPihjb2xs
ZWN0aW9uKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gR0RPTU9i
amVjdENhY2hlOjpwdXRET01PYmplY3QoY29sbGVjdGlvbiwgcmV0KTsKK30KKworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9nZG9tL0dET01DU1NSdWxl
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2dkb20vR0RPTUNTU1J1
bGVDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9nZG9tL0dET01D
U1NSdWxlQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiAg
Q29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2Vpbmln
IDxzYW1Ad2Via2l0Lm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggTHVrZSBLZW5uZXRoIENh
c3NvbiBMZWlnaHRvbiA8bGtjbEBsa2NsLm5ldD4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggTWFy
dGluIFNvdG8gPHNvdG9AZnJlZWRlc2t0b3Aub3JnPgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworLyogUExFQVNFIE5PVEU6IHRoaXMgZmlsZSBuZWVkcyB0byBiZSBrZXB0IHVwLXRv
LWRhdGUgaW4gRVhBQ1QgYWNjb3JkYW5jZQorICogd2l0aCBKU0NTU1J1bGVDdXN0b20uY3BwLiAg
YW55IGFkZGl0aW9ucyB0byBKU0NTU1J1bGVDdXN0b20uY3BwIHdpbGwgYWxzbworICogcmVxdWly
ZSB0aGUgRVhBQ1Qgc2FtZSBhZGRpdGlvbnMsIGhlcmUuCisgKgorICogRklYTUU6IHRoZXJlIHNo
b3VsZCBoYXZlIGJlZW4gbm8gbmVlZCB0byBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgYmVo
aW5kCisgKiBKU0RPTUJpbmRpbmcuY3BwIGFuZCBjYWxsIGl0IEdET01CaW5kaW5nLmNwcCBpbiB0
aGUgZmlyc3QgcGxhY2UsIGFuZAorICogdGhlcmUgc2hvdWxkIGJlIG5vIG5lZWQgZm9yIHRoaXMg
ZmlsZTsgdGhlIGZ1bmN0aW9uYWxpdHkgc2hvdWxkIGJlCisgKiBtZXJnZWQgaW50byBjb21tb24g
Y29kZSwgYXMgaXQgZG9lcyBleGFjdGx5IHRoZSBzYW1lIHRoaW5nLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgImdsaWItb2JqZWN0LmgiCisjaW5jbHVkZSAiQ1N0cmlu
Zy5oIgorI2luY2x1ZGUgIkdkb21DU1NSdWxlLmgiCisjaW5jbHVkZSAiQ1NTQ2hhcnNldFJ1bGUu
aCIKKyNpbmNsdWRlICJDU1NGb250RmFjZVJ1bGUuaCIKKyNpbmNsdWRlICJDU1NJbXBvcnRSdWxl
LmgiCisjaW5jbHVkZSAiQ1NTTWVkaWFSdWxlLmgiCisjaW5jbHVkZSAiQ1NTUGFnZVJ1bGUuaCIK
KyNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKKyNpbmNsdWRlICJDU1NWYXJpYWJsZXNSdWxlLmgi
CisjaW5jbHVkZSAiR0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJHZG9tQ1NTQ2hhcnNldFJ1bGUu
aCIKKyNpbmNsdWRlICJHZG9tQ1NTQ2hhcnNldFJ1bGVQcml2YXRlLmgiCisjaW5jbHVkZSAiR2Rv
bUNTU0ZvbnRGYWNlUnVsZS5oIgorI2luY2x1ZGUgIkdkb21DU1NGb250RmFjZVJ1bGVQcml2YXRl
LmgiCisjaW5jbHVkZSAiR2RvbUNTU0ltcG9ydFJ1bGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NTSW1w
b3J0UnVsZVByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NTTWVkaWFSdWxlLmgiCisjaW5jbHVk
ZSAiR2RvbUNTU01lZGlhUnVsZVByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NTUGFnZVJ1bGUu
aCIKKyNpbmNsdWRlICJHZG9tQ1NTUGFnZVJ1bGVQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbUNT
U1ByaW1pdGl2ZVZhbHVlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21DU1NSdWxlUHJpdmF0ZS5o
IgorI2luY2x1ZGUgIkdkb21DU1NTdHlsZVJ1bGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NTU3R5bGVS
dWxlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21DU1NWYXJpYWJsZXNSdWxlLmgiCisjaW5jbHVk
ZSAiR2RvbUNTU1ZhcmlhYmxlc1J1bGVQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbUNTU1ZhbHVl
TGlzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NTVmFsdWVQcml2YXRlLmgiCisjaW5jbHVk
ZSAiR2RvbURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkdkb21ET01PYmplY3RQcml2YXRlLmgiCisK
K25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworZ3BvaW50
ZXIgdG9HRE9NKENTU1J1bGUqIHJ1bGUpCit7CisgICAgaWYgKCFydWxlKQorICAgICAgICByZXR1
cm4gTlVMTDsKKworICAgIGdwb2ludGVyIGdvYmogPSBHRE9NT2JqZWN0Q2FjaGU6OmdldERPTU9i
amVjdChydWxlKTsKKworICAgIGlmIChnb2JqKQorICAgICAgICByZXR1cm4gZ29iajsKKworICAg
IGdwb2ludGVyIHJldDsKKyAgICBzd2l0Y2ggKHJ1bGUtPnR5cGUoKSkgeworICAgICAgICBjYXNl
IENTU1J1bGU6OlNUWUxFX1JVTEU6CisgICAgICAgICAgICByZXQgPSB3cmFwQ1NTU3R5bGVSdWxl
KHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KHJ1bGUpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIENTU1J1bGU6Ok1FRElBX1JVTEU6CisgICAgICAgICAgICByZXQgPSB3cmFw
Q1NTTWVkaWFSdWxlKHN0YXRpY19jYXN0PENTU01lZGlhUnVsZSo+KHJ1bGUpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1J1bGU6OkZPTlRfRkFDRV9SVUxFOgorICAgICAg
ICAgICAgcmV0ID0gd3JhcENTU0ZvbnRGYWNlUnVsZShzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1
bGUqPihydWxlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NSdWxlOjpQ
QUdFX1JVTEU6CisgICAgICAgICAgICByZXQgPSB3cmFwQ1NTUGFnZVJ1bGUoc3RhdGljX2Nhc3Q8
Q1NTUGFnZVJ1bGUqPihydWxlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBD
U1NSdWxlOjpJTVBPUlRfUlVMRToKKyAgICAgICAgICAgIHJldCA9IHdyYXBDU1NJbXBvcnRSdWxl
KHN0YXRpY19jYXN0PENTU0ltcG9ydFJ1bGUqPihydWxlKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDU1NSdWxlOjpDSEFSU0VUX1JVTEU6CisgICAgICAgICAgICByZXQgPSB3
cmFwQ1NTQ2hhcnNldFJ1bGUoc3RhdGljX2Nhc3Q8Q1NTQ2hhcnNldFJ1bGUqPihydWxlKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NSdWxlOjpWQVJJQUJMRVNfUlVMRToK
KyAgICAgICAgICAgIHJldCA9IHdyYXBDU1NWYXJpYWJsZXNSdWxlKHN0YXRpY19jYXN0PENTU1Zh
cmlhYmxlc1J1bGUqPihydWxlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldCA9IHdyYXBDU1NSdWxlKHJ1bGUpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgR0RPTU9iamVjdENhY2hlOjpwdXRET01PYmplY3QocnVsZSwgcmV0
KTsKKyAgICByZXR1cm4gcmV0OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9nZG9tL0dET01FdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9nZG9tL0dET01FdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2dkb20vR0RPTUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkg
UG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDggTHVrZSBLZW5uZXRoIENhc3NvbiBMZWlnaHRvbiA8bGtjbEBsa2NsLm5ldD4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDggTWFydGluIFNvdG8gPHNvdG9AZnJlZWRlc2t0b3Aub3Jn
PgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworLyogUExFQVNFIE5PVEU6IHRoaXMg
ZmlsZSBuZWVkcyB0byBiZSBrZXB0IHVwLXRvLWRhdGUgaW4gRVhBQ1QgYWNjb3JkYW5jZQorICog
d2l0aCBKU0V2ZW50Q3VzdG9tLmNwcC4gIGFueSBhZGRpdGlvbnMgdG8gSlNFdmVudEN1c3RvbS5j
cHAgd2lsbCBhbHNvCisgKiByZXF1aXJlIHRoZSBFWEFDVCBzYW1lIGFkZGl0aW9ucywgaGVyZS4K
KyAqCisgKiBGSVhNRTogdGhlcmUgc2hvdWxkIGhhdmUgYmVlbiBubyBuZWVkIHRvIGR1cGxpY2F0
ZSB0aGUgZnVuY3Rpb25hbGl0eSBiZWhpbmQKKyAqIEpTRE9NQmluZGluZy5jcHAgYW5kIGNhbGwg
aXQgR0RPTUJpbmRpbmcuY3BwIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kCisgKiB0aGVyZSBzaG91
bGQgYmUgbm8gbmVlZCBmb3IgdGhpcyBmaWxlOyB0aGUgZnVuY3Rpb25hbGl0eSBzaG91bGQgYmUK
KyAqIG1lcmdlZCBpbnRvIGNvbW1vbiBjb2RlLCBhcyBpdCBkb2VzIGV4YWN0bHkgdGhlIHNhbWUg
dGhpbmcuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiZ2xpYi1vYmpl
Y3QuaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRl
ICJHRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkdkb21ET01PYmplY3QuaCIKKyNpbmNsdWRlICJH
ZG9tRE9NT2JqZWN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21FdmVudC5oIgorI2luY2x1ZGUg
Ikdkb21FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tS2V5Ym9hcmRFdmVudC5oIgorI2lu
Y2x1ZGUgIkdkb21LZXlib2FyZEV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21NZXNzYWdl
RXZlbnQuaCIKKyNpbmNsdWRlICJHZG9tTWVzc2FnZUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUg
Ikdkb21Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiR2RvbU1vdXNlRXZlbnRQcml2YXRlLmgiCisj
aW5jbHVkZSAiR2RvbU11dGF0aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJHZG9tTXV0YXRpb25FdmVu
dFByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tT3ZlcmZsb3dFdmVudC5oIgorI2luY2x1ZGUgIkdk
b21PdmVyZmxvd0V2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21Qcm9ncmVzc0V2ZW50Lmgi
CisjaW5jbHVkZSAiR2RvbVByb2dyZXNzRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbVRl
eHRFdmVudC5oIgorI2luY2x1ZGUgIkdkb21UZXh0RXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAi
R2RvbVVJRXZlbnQuaCIKKyNpbmNsdWRlICJHZG9tVUlFdmVudFByaXZhdGUuaCIKKyNpbmNsdWRl
ICJHZG9tV2ViS2l0QW5pbWF0aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJHZG9tV2ViS2l0QW5pbWF0
aW9uRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbVdlYktpdFRyYW5zaXRpb25FdmVudC5o
IgorI2luY2x1ZGUgIkdkb21XZWJLaXRUcmFuc2l0aW9uRXZlbnRQcml2YXRlLmgiCisjaW5jbHVk
ZSAiR2RvbVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJHZG9tV2hlZWxFdmVudFByaXZhdGUuaCIK
KyNpbmNsdWRlICJHZG9tWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmgiCisjaW5jbHVkZSAi
R2RvbVhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJLZXli
b2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCisjaW5jbHVkZSAiTW91c2VF
dmVudC5oIgorI2luY2x1ZGUgIk11dGF0aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJPdmVyZmxvd0V2
ZW50LmgiCisjaW5jbHVkZSAiUHJvZ3Jlc3NFdmVudC5oIgorI2luY2x1ZGUgIlRleHRFdmVudC5o
IgorI2luY2x1ZGUgIlVJRXZlbnQuaCIKKyNpbmNsdWRlICJXZWJLaXRBbmltYXRpb25FdmVudC5o
IgorI2luY2x1ZGUgIldlYktpdFRyYW5zaXRpb25FdmVudC5oIgorI2luY2x1ZGUgIldoZWVsRXZl
bnQuaCIKKyNpbmNsdWRlICJYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuaCIKKworI2lmIEVO
QUJMRShET01fU1RPUkFHRSkKKyNpbmNsdWRlICJHZG9tU3RvcmFnZUV2ZW50UHJpdmF0ZS5oIgor
I2luY2x1ZGUgIlN0b3JhZ2VFdmVudC5oIgorI2VuZGlmCisKKyNpZiBFTkFCTEUoU1ZHKQorI2lm
ZGVmIF9fVE9ET19CVUdfMjA1ODZfXyAvKiBUT0RPIC0gc2VlICMyMDU4NiAqLworI2luY2x1ZGUg
Ikdkb21TVkdab29tRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbVNWR1pvb21FdmVudC5o
IgorI2luY2x1ZGUgIlNWR1pvb21FdmVudC5oIgorI2VuZGlmCisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitncG9pbnRlciB0b0dET00o
RXZlbnQqIGV2ZW50KQoreworICAgIGlmICghZXZlbnQpCisgICAgICAgIHJldHVybiBOVUxMOwor
CisgICAgZ3BvaW50ZXIgZ29iaiA9IEdET01PYmplY3RDYWNoZTo6Z2V0RE9NT2JqZWN0KGV2ZW50
KTsKKyAgICBpZiAoZ29iaikKKyAgICAgICAgcmV0dXJuIGdvYmo7CisKKyAgICBncG9pbnRlciBy
ZXQ7CisgICAgaWYgKGV2ZW50LT5pc1VJRXZlbnQoKSkgeworICAgICAgICBpZiAoZXZlbnQtPmlz
S2V5Ym9hcmRFdmVudCgpKQorICAgICAgICAgICAgcmV0ID0gd3JhcEtleWJvYXJkRXZlbnQoc3Rh
dGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2ZW50KSk7CisgICAgICAgIGVsc2UgaWYgKGV2ZW50
LT5pc1RleHRFdmVudCgpKQorICAgICAgICAgICAgcmV0ID0gd3JhcFRleHRFdmVudChzdGF0aWNf
Y2FzdDxUZXh0RXZlbnQqPihldmVudCkpOworICAgICAgICBlbHNlIGlmIChldmVudC0+aXNNb3Vz
ZUV2ZW50KCkpCisgICAgICAgICAgICByZXQgPSB3cmFwTW91c2VFdmVudChzdGF0aWNfY2FzdDxN
b3VzZUV2ZW50Kj4oZXZlbnQpKTsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmlzV2hlZWxFdmVu
dCgpKQorICAgICAgICAgICAgcmV0ID0gd3JhcFdoZWVsRXZlbnQoc3RhdGljX2Nhc3Q8V2hlZWxF
dmVudCo+KGV2ZW50KSk7CisjaWYgRU5BQkxFKFNWRykKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQt
PmlzU1ZHWm9vbUV2ZW50KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOyAv
KiBUT0RPIC0gc2VlICMyMDU4NiAqLworI2lmZGVmIF9fVE9ET19CVUdfMjA1ODZfXyAvKiBUT0RP
IC0gc2VlICMyMDU4NiAqLworICAgICAgICAgICAgcmV0ID0gd3JhcFNWR1pvb21FdmVudChzdGF0
aWNfY2FzdDxTVkdab29tRXZlbnQqPihldmVudCksIDApOworI2VuZGlmCisgICAgICAgIH0KKyNl
bmRpZgorICAgICAgICBlbHNlCisgICAgICAgICAgICByZXQgPSB3cmFwVUlFdmVudChzdGF0aWNf
Y2FzdDxVSUV2ZW50Kj4oZXZlbnQpKTsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LT5pc011dGF0aW9u
RXZlbnQoKSkKKyAgICAgICAgcmV0ID0gd3JhcE11dGF0aW9uRXZlbnQoc3RhdGljX2Nhc3Q8TXV0
YXRpb25FdmVudCo+KGV2ZW50KSk7CisgICAgZWxzZSBpZiAoZXZlbnQtPmlzT3ZlcmZsb3dFdmVu
dCgpKQorICAgICAgICByZXQgPSB3cmFwT3ZlcmZsb3dFdmVudChzdGF0aWNfY2FzdDxPdmVyZmxv
d0V2ZW50Kj4oZXZlbnQpKTsKKyAgICBlbHNlIGlmIChldmVudC0+aXNNZXNzYWdlRXZlbnQoKSkK
KyAgICAgICAgcmV0ID0gd3JhcE1lc3NhZ2VFdmVudChzdGF0aWNfY2FzdDxNZXNzYWdlRXZlbnQq
PihldmVudCkpOworICAgIGVsc2UgaWYgKGV2ZW50LT5pc1Byb2dyZXNzRXZlbnQoKSkgeworICAg
ICAgICBpZiAoZXZlbnQtPmlzWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50KCkpCisgICAgICAg
ICAgICByZXQgPSB3cmFwWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50KHN0YXRpY19jYXN0PFhN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudCo+KGV2ZW50KSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHJldCA9IHdyYXBQcm9ncmVzc0V2ZW50KHN0YXRpY19jYXN0PFByb2dyZXNzRXZlbnQq
PihldmVudCkpOworICAgIH0KKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgZWxzZSBpZiAo
ZXZlbnQtPmlzU3RvcmFnZUV2ZW50KCkpCisgICAgICAgIHJldCA9IHdyYXBTdG9yYWdlRXZlbnQo
c3RhdGljX2Nhc3Q8U3RvcmFnZUV2ZW50Kj4oZXZlbnQpKTsKKyNlbmRpZgorICAgIGVsc2UgaWYg
KGV2ZW50LT5pc1dlYktpdEFuaW1hdGlvbkV2ZW50KCkpCisgICAgICAgIHJldCA9IHdyYXBXZWJL
aXRBbmltYXRpb25FdmVudChzdGF0aWNfY2FzdDxXZWJLaXRBbmltYXRpb25FdmVudCo+KGV2ZW50
KSk7CisgICAgZWxzZSBpZiAoZXZlbnQtPmlzV2ViS2l0VHJhbnNpdGlvbkV2ZW50KCkpCisgICAg
ICAgIHJldCA9IHdyYXBXZWJLaXRUcmFuc2l0aW9uRXZlbnQoc3RhdGljX2Nhc3Q8V2ViS2l0VHJh
bnNpdGlvbkV2ZW50Kj4oZXZlbnQpKTsKKyAgICBlbHNlCisgICAgICAgIHJldCA9IHdyYXBFdmVu
dChldmVudCk7CisKKyAgICByZXR1cm4gR0RPTU9iamVjdENhY2hlOjpwdXRET01PYmplY3QoZXZl
bnQsIHJldCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2dkb20vR0RPTVRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvZ2RvbS9HRE9NVGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2dkb20vR0RPTVRleHRDdXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYz
IEBACisvKgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVu
QGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcg
U2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IEx1
a2UgS2VubmV0aCBDYXNzb24gTGVpZ2h0b24gPGxrY2xAbGtjbC5uZXQ+CisgKiAgQ29weXJpZ2h0
IChDKSAyMDA4IE1hcnRpbiBTb3RvIDxzb3RvQGZyZWVkZXNrdG9wLm9yZz4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICovCisKKy8qIFBMRUFTRSBOT1RFOiB0aGlzIGZpbGUgbmVlZHMgdG8g
YmUga2VwdCB1cC10by1kYXRlIGluIEVYQUNUIGFjY29yZGFuY2UKKyAqIHdpdGggSlNUZXh0Q3Vz
dG9tLmNwcC4gIGFueSBhZGRpdGlvbnMgdG8gSlNUZXh0Q3VzdG9tLmNwcCB3aWxsIGFsc28KKyAq
IHJlcXVpcmUgdGhlIEVYQUNUIHNhbWUgYWRkaXRpb25zLCBoZXJlLgorICoKKyAqIEZJWE1FOiB0
aGVyZSBzaG91bGQgaGF2ZSBiZWVuIG5vIG5lZWQgdG8gZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFs
aXR5IGJlaGluZAorICogSlNET01CaW5kaW5nLmNwcCBhbmQgY2FsbCBpdCBHRE9NQmluZGluZy5j
cHAgaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQKKyAqIHRoZXJlIHNob3VsZCBiZSBubyBuZWVkIGZv
ciB0aGlzIGZpbGU7IHRoZSBmdW5jdGlvbmFsaXR5IHNob3VsZCBiZQorICogbWVyZ2VkIGludG8g
Y29tbW9uIGNvZGUsIGFzIGl0IGRvZXMgZXhhY3RseSB0aGUgc2FtZSB0aGluZy4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJnbGliLW9iamVjdC5oIgorI2luY2x1ZGUg
IkNTdHJpbmcuaCIKKyNpbmNsdWRlICJHZG9tRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiR2RvbURP
TU9iamVjdFByaXZhdGUuaCIKKyNpbmNsdWRlICJHRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkdk
b21UZXh0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIlRleHQuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisKK2dwb2ludGVyIHRvR0RPTShUZXh0KiB0
ZXh0KQoreworICAgIGlmICghdGV4dCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBncG9p
bnRlciBnb2JqID0gR0RPTU9iamVjdENhY2hlOjpnZXRET01PYmplY3QodGV4dCk7CisgICAgaWYg
KGdvYmopCisgICAgICAgIHJldHVybiBnb2JqOworCisgICAgZ3BvaW50ZXIgcmV0ID0gd3JhcFRl
eHQodGV4dCk7CisgICAgcmV0dXJuIEdET01PYmplY3RDYWNoZTo6cHV0RE9NT2JqZWN0KHRleHQs
IHJldCk7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvZ2RvbS9HRE9NQmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
Z2RvbS9HRE9NQmluZGluZy5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9nZG9t
L0dET01CaW5kaW5nLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiAgQ29w
eXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIDxz
YW1Ad2Via2l0Lm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggTHVrZSBLZW5uZXRoIENhc3Nv
biBMZWlnaHRvbiA8bGtjbEBsa2NsLm5ldD4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggTWFydGlu
IFNvdG8gPHNvdG9AZnJlZWRlc2t0b3Aub3JnPgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisg
Ki8KKworI2lmbmRlZiBHZG9tRE9NQmluZGluZ19oCisjZGVmaW5lIEdkb21ET01CaW5kaW5nX2gK
KworI2luY2x1ZGUgIkNTU1J1bGUuaCIKKyNpbmNsdWRlICJDU1NWYWx1ZS5oIgorI2luY2x1ZGUg
IkVsZW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50VGFyZ2V0Lmgi
CisjaW5jbHVkZSAiR2RvbU5vZGUuaCIKKyNpbmNsdWRlICJHZG9tTm9kZVByaXZhdGUuaCIKKyNp
bmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJT
dHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBBdG9taWNTdHJpbmc7Cisg
ICAgY2xhc3MgRG9jdW1lbnQ7CisgICAgY2xhc3MgRXZlbnQ7CisgICAgY2xhc3MgRnJhbWU7Cisg
ICAgY2xhc3MgS1VSTDsKKyAgICBjbGFzcyBOb2RlOworICAgIGNsYXNzIFN0cmluZzsKKworI2lm
IEVOQUJMRShTVkcpCisgICAgY2xhc3MgU1ZHRWxlbWVudDsKKyNlbmRpZgorfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICBncG9pbnRlciB0b0dET00oV2Vi
Q29yZTo6Q1NTUnVsZSopOworICAgIGdwb2ludGVyIHRvR0RPTShXZWJDb3JlOjpDU1NWYWx1ZSop
OworICAgIGdwb2ludGVyIHRvR0RPTShXZWJDb3JlOjpEb2N1bWVudCopOworICAgIGdwb2ludGVy
IHRvR0RPTShXZWJDb3JlOjpFbGVtZW50Kik7CisgICAgZ3BvaW50ZXIgdG9HRE9NKFdlYkNvcmU6
OkV2ZW50Kik7CisgICAgZ3BvaW50ZXIgdG9HRE9NKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Kik7Cisg
ICAgZ3BvaW50ZXIgdG9HRE9NKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uKik7CisgICAgZ3BvaW50
ZXIgdG9HRE9NKFdlYkNvcmU6Ok5vZGUqKTsKKyAgICBncG9pbnRlciB0b0dET00oV2ViQ29yZTo6
U3R5bGVTaGVldCopOworICAgIGdwb2ludGVyIHRvR0RPTShXZWJDb3JlOjpUZXh0Kik7CisKKyAg
ICBjbGFzcyBHRE9NT2JqZWN0Q2FjaGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIGdw
b2ludGVyIGdldERPTU9iamVjdCh2b2lkICopOworICAgICAgICBzdGF0aWMgZ3BvaW50ZXIgcHV0
RE9NT2JqZWN0KHZvaWQgKiwgZ3BvaW50ZXIpOworICAgICAgICBzdGF0aWMgdm9pZCBmb3JnZXRE
T01PYmplY3Qodm9pZCAqKTsKKyAgICB9OworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBHZG9tRE9NQmluZGluZ19oCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2dkb20vR0RPTUNT
U1ZhbHVlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2dkb20vR0RP
TUNTU1ZhbHVlQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvZ2Rv
bS9HRE9NQ1NTVmFsdWVDdXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk1IEBACisv
KgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5v
cmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVs
IFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IEx1a2UgS2Vu
bmV0aCBDYXNzb24gTGVpZ2h0b24gPGxrY2xAbGtjbC5uZXQ+CisgKiAgQ29weXJpZ2h0IChDKSAy
MDA4IE1hcnRpbiBTb3RvIDxzb3RvQGZyZWVkZXNrdG9wLm9yZz4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQorICovCisKKy8qIFBMRUFTRSBOT1RFOiB0aGlzIGZpbGUgbmVlZHMgdG8gYmUga2Vw
dCB1cC10by1kYXRlIGluIEVYQUNUIGFjY29yZGFuY2UKKyAqIHdpdGggSlNDU1NWYWx1ZUN1c3Rv
bS5jcHAuICBhbnkgYWRkaXRpb25zIHRvIEpTQ1NTVmFsdWVDdXN0b20uY3BwIHdpbGwgYWxzbwor
ICogcmVxdWlyZSB0aGUgRVhBQ1Qgc2FtZSBhZGRpdGlvbnMsIGhlcmUuCisgKgorICogRklYTUU6
IHRoZXJlIHNob3VsZCBoYXZlIGJlZW4gbm8gbmVlZCB0byBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9u
YWxpdHkgYmVoaW5kCisgKiBKU0RPTUJpbmRpbmcuY3BwIGFuZCBjYWxsIGl0IEdET01CaW5kaW5n
LmNwcCBpbiB0aGUgZmlyc3QgcGxhY2UsIGFuZAorICogdGhlcmUgc2hvdWxkIGJlIG5vIG5lZWQg
Zm9yIHRoaXMgZmlsZTsgdGhlIGZ1bmN0aW9uYWxpdHkgc2hvdWxkIGJlCisgKiBtZXJnZWQgaW50
byBjb21tb24gY29kZSwgYXMgaXQgZG9lcyBleGFjdGx5IHRoZSBzYW1lIHRoaW5nLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImdsaWItb2JqZWN0LmgiCisjaW5jbHVk
ZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkdET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiR2RvbUNT
U1ZhbHVlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21DU1NWYWx1ZUxpc3RQcml2YXRlLmgiCisj
aW5jbHVkZSAiR2RvbUNTU1ByaW1pdGl2ZVZhbHVlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21E
T01PYmplY3QuaCIKKyNpbmNsdWRlICJHZG9tRE9NT2JqZWN0UHJpdmF0ZS5oIgorCisjaWYgRU5B
QkxFKFNWRykKKyNpZmRlZiBfX1RPRE9fQlVHXzIwNTg2X18gLyogVE9ETyAtIHNlZSAjMjA1ODYg
Ki8KKyNpbmNsdWRlICJHZG9tU1ZHQ29sb3JQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbVNWR1Bh
aW50UHJpdmF0ZS5oIgorI2VuZGlmCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitncG9pbnRlciB0b0dET00oQ1NTVmFsdWUqIHZhbHVl
KQoreworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZ3BvaW50
ZXIgZ29iaiA9IEdET01PYmplY3RDYWNoZTo6Z2V0RE9NT2JqZWN0KHZhbHVlKTsKKworICAgIGlm
IChnb2JqKQorICAgICAgICByZXR1cm4gZ29iajsKKworICAgIGdwb2ludGVyIHJldDsKKworICAg
IGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAgcmV0ID0gd3JhcENTU1ZhbHVlTGlz
dChzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSkpOworI2lmIEVOQUJMRShTVkcpCisg
ICAgZWxzZSBpZiAodmFsdWUtPmlzU1ZHUGFpbnQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBO
VUxMOyAvKiBUT0RPIC0gc2VlICMyMDU4NiAqLworI2lmZGVmIF9fVE9ET19CVUdfMjA1ODZfXyAv
KiBUT0RPIC0gc2VlICMyMDU4NiAqLworICAgICAgICByZXQgPSB3cmFwU1ZHUGFpbnQoc3RhdGlj
X2Nhc3Q8U1ZHUGFpbnQqPih2YWx1ZSkpOworI2VuZGlmCisgICAgfQorICAgIGVsc2UgaWYgKHZh
bHVlLT5pc1NWR0NvbG9yKCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsgLyogVE9ETyAt
IHNlZSAjMjA1ODYgKi8KKyNpZmRlZiBfX1RPRE9fQlVHXzIwNTg2X18gLyogVE9ETyAtIHNlZSAj
MjA1ODYgKi8KKyAgICAgICAgcmV0ID0gd3JhcFNWR0NvbG9yKHN0YXRpY19jYXN0PFNWR0NvbG9y
Kj4odmFsdWUpKTsKKyNlbmRpZgorICAgIH0KKyNlbmRpZgorICAgIGVsc2UgaWYgKHZhbHVlLT5p
c1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIHJldCA9IHdyYXBDU1NQcmltaXRpdmVWYWx1ZShz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKSk7CisgICAgZWxzZQorICAgICAg
ICByZXQgPSB3cmFwQ1NTVmFsdWUodmFsdWUpOworCisgICAgcmV0dXJuIEdET01PYmplY3RDYWNo
ZTo6cHV0RE9NT2JqZWN0KHZhbHVlLCByZXQpOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2dkb20vR0RPTUV2ZW50VGFyZ2V0Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2dkb20vR0RPTUV2ZW50VGFyZ2V0Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvZ2RvbS9HRE9NRXZlbnRU
YXJnZXRDdXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqICBD
b3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICog
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcg
PHNhbUB3ZWJraXQub3JnPgorICogIENvcHlyaWdodCAoQykgMjAwOCBMdWtlIEtlbm5ldGggQ2Fz
c29uIExlaWdodG9uIDxsa2NsQGxrY2wubmV0PgorICogIENvcHlyaWdodCAoQykgMjAwOCBNYXJ0
aW4gU290byA8c290b0BmcmVlZGVza3RvcC5vcmc+CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
KyAqLworCisvKiBQTEVBU0UgTk9URTogdGhpcyBmaWxlIG5lZWRzIHRvIGJlIGtlcHQgdXAtdG8t
ZGF0ZSBpbiBFWEFDVCBhY2NvcmRhbmNlCisgKiB3aXRoIEpTQ3VzdG9tRXZlbnQuY3BwLiAgYW55
IGFkZGl0aW9ucyB0byBKU0N1c3RvbUV2ZW50LmNwcCB3aWxsIGFsc28KKyAqIHJlcXVpcmUgdGhl
IEVYQUNUIHNhbWUgYWRkaXRpb25zLCBoZXJlLgorICoKKyAqIEZJWE1FOiB0aGVyZSBzaG91bGQg
aGF2ZSBiZWVuIG5vIG5lZWQgdG8gZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGJlaGluZAor
ICogSlNET01CaW5kaW5nLmNwcCBhbmQgY2FsbCBpdCBHRE9NQmluZGluZy5jcHAgaW4gdGhlIGZp
cnN0IHBsYWNlLCBhbmQKKyAqIHRoZXJlIHNob3VsZCBiZSBubyBuZWVkIGZvciB0aGlzIGZpbGU7
IHRoZSBmdW5jdGlvbmFsaXR5IHNob3VsZCBiZQorICogbWVyZ2VkIGludG8gY29tbW9uIGNvZGUs
IGFzIGl0IGRvZXMgZXhhY3RseSB0aGUgc2FtZSB0aGluZy4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJnbGliLW9iamVjdC5oIgorI2luY2x1ZGUgIkNTdHJpbmcuaCIK
KyNpbmNsdWRlICJHRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkdkb21ET01PYmplY3QuaCIKKyNp
bmNsdWRlICJHZG9tRE9NT2JqZWN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21YTUxIdHRwUmVx
dWVzdC5oIgorI2luY2x1ZGUgIkdkb21YTUxIdHRwUmVxdWVzdFByaXZhdGUuaCIKKyNpbmNsdWRl
ICJHZG9tWE1MSHR0cFJlcXVlc3RVcGxvYWQuaCIKKyNpbmNsdWRlICJHZG9tWE1MSHR0cFJlcXVl
c3RVcGxvYWRQcml2YXRlLmgiCisjaW5jbHVkZSAiWE1MSHR0cFJlcXVlc3QuaCIKKyNpbmNsdWRl
ICJYTUxIdHRwUmVxdWVzdFVwbG9hZC5oIgorCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJ
Q0FUSU9OUykKKyNpbmNsdWRlICJET01BcHBsaWNhdGlvbkNhY2hlLmgiCisjaW5jbHVkZSAiR2Rv
bURPTUFwcGxpY2F0aW9uQ2FjaGUuaCIKKyNpbmNsdWRlICJHZG9tRE9NQXBwbGljYXRpb25DYWNo
ZVByaXZhdGUuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKKy8qIGRlcml2ZWQgc291cmNlcyBhdXRvLWdlbmVyYXRlZCAqLworZ3Bv
aW50ZXIgdG9HRE9NKFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiBvYmopOworCitncG9pbnRlciB0b0dE
T00oRXZlbnRUYXJnZXQqIHRhcmdldCkKK3sKKyAgICBpZiAoIXRhcmdldCkKKyAgICAgICAgcmV0
dXJuIE5VTEw7CisKKyNpZmRlZiBfX1RPRE9fQlVHXzIwNTg2X18gLyogVE9ETyAtIHNlZSAjMjA1
ODYgKi8KKyNpZiBFTkFCTEUoU1ZHKQorICAgIC8vIFNWR0VsZW1lbnRJbnN0YW5jZSBzdXBwb3J0
cyBib3RoIHRvU1ZHRWxlbWVudEluc3RhbmNlIGFuZAorICAgIC8vIHRvTm9kZSBzaW5jZSBzbyBt
dWNoIG1vdXNlIGhhbmRsaW5nIGNvZGUgZGVwZW5kcyBvbiB0b05vZGUKKyAgICAvLyByZXR1cm5p
bmcgYSB2YWxpZCBub2RlLgorICAgIFNWR0VsZW1lbnRJbnN0YW5jZSogaW5zdGFuY2UgPSB0YXJn
ZXQtPnRvU1ZHRWxlbWVudEluc3RhbmNlKCk7CisgICAgaWYgKGluc3RhbmNlKQorICAgICAgICBy
ZXR1cm4gdG9HRE9NKGV4ZWMsIGluc3RhbmNlKTsKKyNlbmRpZgorI2VuZGlmCisKKyAgICBOb2Rl
KiBub2RlID0gdGFyZ2V0LT50b05vZGUoKTsKKyAgICBpZiAobm9kZSkKKyAgICAgICAgcmV0dXJu
IHRvR0RPTShub2RlKTsKKworICAgIGlmIChYTUxIdHRwUmVxdWVzdCogeGhyID0gdGFyZ2V0LT50
b1hNTEh0dHBSZXF1ZXN0KCkpCisgICAgICAgIC8vIFhNTEh0dHBSZXF1ZXN0IGlzIGFsd2F5cyBj
cmVhdGVkIHZpYSBHRE9NLCBzbyB3ZSBkb24ndCBuZWVkCisgICAgICAgIC8vIHRvIHVzZSBjYWNo
ZURPTU9iamVjdCgpIGhlcmUuCisgICAgICAgIHJldHVybiBHRE9NT2JqZWN0Q2FjaGU6OmdldERP
TU9iamVjdCh4aHIpOworCisgICAgaWYgKFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB1cGxvYWQgPSB0
YXJnZXQtPnRvWE1MSHR0cFJlcXVlc3RVcGxvYWQoKSkKKyAgICAgICAgcmV0dXJuIHRvR0RPTSh1
cGxvYWQpOworCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyAgICBpZiAo
RE9NQXBwbGljYXRpb25DYWNoZSogY2FjaGUgPSB0YXJnZXQtPnRvRE9NQXBwbGljYXRpb25DYWNo
ZSgpKQorICAgICAgICAvLyBET01BcHBsaWNhdGlvbkNhY2hlIGlzIGFsd2F5cyBjcmVhdGVkIHZp
YSBHRE9NLCBzbyB3ZSBkb24ndAorICAgICAgICAvLyBuZWVkIHRvIHVzZSBjYWNoZURPTU9iamVj
dCgpIGhlcmUuCisgICAgICAgIHJldHVybiBHRE9NT2JqZWN0Q2FjaGU6OmdldERPTU9iamVjdChj
YWNoZSk7CisjZW5kaWYKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBO
VUxMOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9nZG9tL0dET01FbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2dkb20vR0RPTUVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9i
aW5kaW5ncy9nZG9tL0dET01FbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw4OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBv
cnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3JnPgorICogIENvcHlyaWdodCAoQykgMjAw
OCBMdWtlIEtlbm5ldGggQ2Fzc29uIExlaWdodG9uIDxsa2NsQGxrY2wubmV0PgorICogIENvcHly
aWdodCAoQykgMjAwOCBNYXJ0aW4gU290byA8c290b0BmcmVlZGVza3RvcC5vcmc+CisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKKyAqLworCisvKiBQTEVBU0UgTk9URTogdGhpcyBmaWxlIG5lZWRz
IHRvIGJlIGtlcHQgdXAtdG8tZGF0ZSBpbiBFWEFDVCBhY2NvcmRhbmNlCisgKiB3aXRoIEpTRWxl
bWVudEN1c3RvbS5jcHAuICBhbnkgYWRkaXRpb25zIHRvIEpTRWxlbWVudEN1c3RvbS5jcHAgd2ls
bCBhbHNvCisgKiByZXF1aXJlIHRoZSBFWEFDVCBzYW1lIGFkZGl0aW9ucywgaGVyZS4KKyAqCisg
KiBGSVhNRTogdGhlcmUgc2hvdWxkIGhhdmUgYmVlbiBubyBuZWVkIHRvIGR1cGxpY2F0ZSB0aGUg
ZnVuY3Rpb25hbGl0eSBiZWhpbmQKKyAqIEpTRE9NQmluZGluZy5jcHAgYW5kIGNhbGwgaXQgR0RP
TUJpbmRpbmcuY3BwIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kCisgKiB0aGVyZSBzaG91bGQgYmUg
bm8gbmVlZCBmb3IgdGhpcyBmaWxlOyB0aGUgZnVuY3Rpb25hbGl0eSBzaG91bGQgYmUKKyAqIG1l
cmdlZCBpbnRvIGNvbW1vbiBjb2RlLCBhcyBpdCBkb2VzIGV4YWN0bHkgdGhlIHNhbWUgdGhpbmcu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiZ2xpYi1vYmplY3QuaCIK
KyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJHRE9N
QmluZGluZy5oIgorI2luY2x1ZGUgIkdkb21ET01PYmplY3QuaCIKKyNpbmNsdWRlICJHZG9tRE9N
T2JqZWN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21FbGVtZW50LmgiCisjaW5jbHVkZSAiR2Rv
bUVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbUhUTUxFbGVtZW50V3JhcHBlckZhY3Rv
cnkuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorCisjaWYgRU5BQkxFKFNWRykKKyNpZmRl
ZiBfX1RPRE9fQlVHXzIwNTg2X18gLyogVE9ETyAtIHNlZSAjMjA1ODYgKi8KKyNpbmNsdWRlICJH
ZG9tU1ZHRWxlbWVudFdyYXBwZXJGYWN0b3J5UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21TVkdF
bGVtZW50V3JhcHBlckZhY3RvcnkuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50LmgiCisjZW5kaWYK
KyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK2dwb2ludGVyIHRvR0RPTShFbGVtZW50KiBlbGVtZW50KQoreworICAgIGlmICghZWxlbWVu
dCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvLyBzaG91bGRuJ3QgYmUgb25lPyBBU1NF
UlQoIVNjcmlwdEludGVycHJldGVyOjpnZXRET01PYmplY3QoZWxlbWVudCkpOworICAgIGdwb2lu
dGVyIGdvYmogPSBHRE9NT2JqZWN0Q2FjaGU6OmdldERPTU9iamVjdChlbGVtZW50KTsKKyAgICBp
ZiAoZ29iaikKKyAgICAgICAgcmV0dXJuIGdvYmo7CisKKyAgICBncG9pbnRlciByZXQ7CisgICAg
RG9jdW1lbnQqIGRvYyA9IGVsZW1lbnQtPmRvY3VtZW50KCk7CisKKyAgICBpZiAoZWxlbWVudC0+
aXNIVE1MRWxlbWVudCgpKQorICAgICAgICByZXQgPSBjcmVhdGVHZG9tSFRNTEVsZW1lbnRXcmFw
cGVyKHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oZWxlbWVudCkpOworI2lmIEVOQUJMRShTVkcp
CisgICAgZWxzZSBpZiAoZWxlbWVudC0+aXNTVkdFbGVtZW50KCkpCisgICAgeworICAgICAgICBy
ZXR1cm4gTlVMTDsgLyogVE9ETyAtIHNlZSAjMjA1ODYgKi8KKyNpZmRlZiBfX1RPRE9fQlVHXzIw
NTg2X18gLyogVE9ETyAtIHNlZSAjMjA1ODYgKi8KKyAgICAgICAgcmV0dXJuIGNyZWF0ZUdkb21T
VkdFbGVtZW50V3JhcHBlcihzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oZWxlbWVudCkpOworI2Vu
ZGlmCisgICAgfQorI2VuZGlmCisgICAgZWxzZQorICAgICAgICByZXQgPSB3cmFwRWxlbWVudChl
bGVtZW50KTsKKworICAgIHJldHVybiBHRE9NT2JqZWN0Q2FjaGU6OnB1dERPTU9iamVjdChlbGVt
ZW50LCByZXQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9nZG9tL0dET01TdHlsZVNoZWV0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2dkb20vR0RPTVN0eWxlU2hlZXRDdXN0b20uY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9iaW5kaW5ncy9nZG9tL0dET01TdHlsZVNoZWV0Q3VzdG9tLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBI
YXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3JnPgorICogIENv
cHlyaWdodCAoQykgMjAwOCBMdWtlIEtlbm5ldGggQ2Fzc29uIExlaWdodG9uIDxsa2NsQGxrY2wu
bmV0PgorICogIENvcHlyaWdodCAoQykgMjAwOCBNYXJ0aW4gU290byA8c290b0BmcmVlZGVza3Rv
cC5vcmc+CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisvKiBQTEVBU0UgTk9URTog
dGhpcyBmaWxlIG5lZWRzIHRvIGJlIGtlcHQgdXAtdG8tZGF0ZSBpbiBFWEFDVCBhY2NvcmRhbmNl
CisgKiB3aXRoIEpTU3R5bGVTaGVldEN1c3RvbS5jcHAuICBhbnkgYWRkaXRpb25zIHRvIEpTU3R5
bGVTaGVldEN1c3RvbS5jcHAKKyAqIHdpbGwgYWxzbyByZXF1aXJlIHRoZSBFWEFDVCBzYW1lIGFk
ZGl0aW9ucywgaGVyZS4KKyAqCisgKiBGSVhNRTogdGhlcmUgc2hvdWxkIGhhdmUgYmVlbiBubyBu
ZWVkIHRvIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBiZWhpbmQKKyAqIEpTRE9NQmluZGlu
Zy5jcHAgYW5kIGNhbGwgaXQgR0RPTUJpbmRpbmcuY3BwIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5k
CisgKiB0aGVyZSBzaG91bGQgYmUgbm8gbmVlZCBmb3IgdGhpcyBmaWxlOyB0aGUgZnVuY3Rpb25h
bGl0eSBzaG91bGQgYmUKKyAqIG1lcmdlZCBpbnRvIGNvbW1vbiBjb2RlLCBhcyBpdCBkb2VzIGV4
YWN0bHkgdGhlIHNhbWUgdGhpbmcuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAiZ2xpYi1vYmplY3QuaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiQ1NT
U3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIkdET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiR2RvbUNT
U1N0eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJHZG9tQ1NTU3R5bGVTaGVldFByaXZhdGUuaCIKKyNp
bmNsdWRlICJHZG9tRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiR2RvbURPTU9iamVjdFByaXZhdGUu
aCIKKyNpbmNsdWRlICJHZG9tU3R5bGVTaGVldFByaXZhdGUuaCIKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitncG9pbnRlciB0b0dET00oU3R5bGVT
aGVldCogc3R5bGVTaGVldCkKK3sKKyAgICBpZiAoIXN0eWxlU2hlZXQpCisgICAgICAgIHJldHVy
biBOVUxMOworCisgICAgZ3BvaW50ZXIgZ29iaiA9IEdET01PYmplY3RDYWNoZTo6Z2V0RE9NT2Jq
ZWN0KHN0eWxlU2hlZXQpOworICAgIGlmIChnb2JqKQorICAgICAgICByZXR1cm4gZ29iajsKKwor
ICAgIGdwb2ludGVyIHJldDsKKyAgICBpZiAoc3R5bGVTaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkp
CisgICAgICAgIHJldCA9IHdyYXBDU1NTdHlsZVNoZWV0KHN0YXRpY19jYXN0PENTU1N0eWxlU2hl
ZXQqPihzdHlsZVNoZWV0KSk7CisgICAgZWxzZQorICAgICAgICByZXQgPSB3cmFwU3R5bGVTaGVl
dChzdHlsZVNoZWV0KTsKKworICAgIHJldHVybiBHRE9NT2JqZWN0Q2FjaGU6OnB1dERPTU9iamVj
dChzdHlsZVNoZWV0LCByZXQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34285</attachid>
            <date>2009-08-07 09:56:06 -0700</date>
            <delta_ts>2009-08-07 12:48:08 -0700</delta_ts>
            <desc>corrected GDOMHTMLCollectionCustom.cpp #include order</desc>
            <filename>gdbs.patch</filename>
            <type>text/plain</type>
            <size>41774</size>
            <attacher name="Luke Kenneth Casson Leighton">lkcl</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Njg5MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzAwMSw2ICsyMzExMiwyNCBAQAogICAgICAgICAgIFRoaXMgdG8gbWFrZSBpdCBtb3JlIGdl
bmVyaWMgc28gd29ya2VyIHNjcmlwdCBsb2FkaW5nIGNvdWxkIHVzZSBpdC4KICAgICAgICAgKiB3
b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlckNsaWVudC5oOiBBZGRlZC4KIAorMjAwOS0wOC0wMyAg
THVrZSBLZW5uZXRoIENhc3NvbiBMZWlnaHRvbiAgPGxrY2xAbGtjbC5uZXQ+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI3NDI2CisKKyAgICAgICAgKiBiaW5kaW5ncy9nZG9tL0dE
T01CaW5kaW5nLmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvZ2RvbS9HRE9NQmluZGlu
Zy5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9nZG9tL0dET01DU1NSdWxlQ3VzdG9tLmNw
cDogQWRkZWQKKyAgICAgICAgKiBiaW5kaW5ncy9nZG9tL0dET01DU1NWYWx1ZUN1c3RvbS5jcHA6
IEFkZGVkCisgICAgICAgICogYmluZGluZ3MvZ2RvbS9HRE9NRG9jdW1lbnRDdXN0b20uY3BwOiBB
ZGRlZAorICAgICAgICAqIGJpbmRpbmdzL2dkb20vR0RPTUVsZW1lbnRDdXN0b20uY3BwOiBBZGRl
ZAorICAgICAgICAqIGJpbmRpbmdzL2dkb20vR0RPTUV2ZW50Q3VzdG9tLmNwcDogQWRkZWQKKyAg
ICAgICAgKiBiaW5kaW5ncy9nZG9tL0dET01FdmVudFRhcmdldEN1c3RvbS5jcHA6IEFkZGVkCisg
ICAgICAgICogYmluZGluZ3MvZ2RvbS9HRE9NSFRNTENvbGxlY3Rpb25DdXN0b20uY3BwOiBBZGRl
ZAorICAgICAgICAqIGJpbmRpbmdzL2dkb20vR0RPTVN0eWxlU2hlZXRDdXN0b20uY3BwOiBBZGRl
ZAorICAgICAgICAqIGJpbmRpbmdzL2dkb20vR0RPTVRleHRDdXN0b20uY3BwOiBBZGRlZAorCiAy
MDA5LTA2LTE2ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AZ21haWwuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9nZG9tL0dE
T01Eb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9nZG9t
L0dET01Eb2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2dkb20vR0RPTURvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MyBA
QAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFNh
bXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3JnPgorICogIENvcHlyaWdodCAoQykgMjAwOCBMdWtl
IEtlbm5ldGggQ2Fzc29uIExlaWdodG9uIDxsa2NsQGxrY2wubmV0PgorICogIENvcHlyaWdodCAo
QykgMjAwOCBNYXJ0aW4gU290byA8c290b0BmcmVlZGVza3RvcC5vcmc+CisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqLworCisvKiBQTEVBU0UgTk9URTogdGhpcyBmaWxlIG5lZWRzIHRvIGJl
IGtlcHQgdXAtdG8tZGF0ZSBpbiBFWEFDVCBhY2NvcmRhbmNlCisgKiB3aXRoIEpTRG9jdW1lbnRD
dXN0b20uY3BwLiAgYW55IGFkZGl0aW9ucyB0byBKU0RvY3VtZW50Q3VzdG9tLmNwcAorICogd2ls
bCBhbHNvIHJlcXVpcmUgdGhlIEVYQUNUIHNhbWUgYWRkaXRpb25zLCBoZXJlLgorICoKKyAqIEZJ
WE1FOiB0aGVyZSBzaG91bGQgaGF2ZSBiZWVuIG5vIG5lZWQgdG8gZHVwbGljYXRlIHRoZSBmdW5j
dGlvbmFsaXR5IGJlaGluZAorICogSlNET01CaW5kaW5nLmNwcCBhbmQgY2FsbCBpdCBHRE9NQmlu
ZGluZy5jcHAgaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQKKyAqIHRoZXJlIHNob3VsZCBiZSBubyBu
ZWVkIGZvciB0aGlzIGZpbGU7IHRoZSBmdW5jdGlvbmFsaXR5IHNob3VsZCBiZQorICogbWVyZ2Vk
IGludG8gY29tbW9uIGNvZGUsIGFzIGl0IGRvZXMgZXhhY3RseSB0aGUgc2FtZSB0aGluZy4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJnbGliLW9iamVjdC5oIgorI2lu
Y2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJHRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkdk
b21Eb2N1bWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tRE9NT2JqZWN0LmgiCisjaW5jbHVk
ZSAiR2RvbURPTU9iamVjdFByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tSFRNTERvY3VtZW50UHJp
dmF0ZS5oIgorCisjaWYgRU5BQkxFKFNWRykKKyNpZmRlZiBfX1RPRE9fQlVHXzIwNTg2X18gLyog
WFhYIFRPRE8gLSBzZWUgIzIwNTg2ICovCisjaW5jbHVkZSAiR2RvbVNWR0RvY3VtZW50UHJpdmF0
ZS5oIgorI2VuZGlmCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCitncG9pbnRlciB0b0dET00oRG9jdW1lbnQqIGRvYykKK3sKKyAgICBp
ZiAoIWRvYykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBncG9pbnRlciBnb2JqID0gR0RP
TU9iamVjdENhY2hlOjpnZXRET01PYmplY3QoZG9jKTsKKyAgICBpZiAoZ29iaikKKyAgICAgICAg
cmV0dXJuIGdvYmo7CisKKyAgICBncG9pbnRlciByZXQ7CisKKyAgICBpZiAoZG9jLT5pc0hUTUxE
b2N1bWVudCgpKQorICAgICAgICByZXQgPSB3cmFwSFRNTERvY3VtZW50KHN0YXRpY19jYXN0PEhU
TUxEb2N1bWVudCo+KGRvYykpOworI2lmIEVOQUJMRShTVkcpCisgICAgZWxzZSBpZiAoZG9jLT5p
c1NWR0RvY3VtZW50KCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsgLyogWFhYIFRPRE8g
LSBzZWUgIzIwNTg2ICovCisjaWZkZWYgX19UT0RPX0JVR18yMDU4Nl9fIC8qIFhYWCBUT0RPIC0g
c2VlICMyMDU4NiAqLworICAgICAgICByZXQgPSB3cmFwU1ZHRG9jdW1lbnQoc3RhdGljX2Nhc3Q8
U1ZHRG9jdW1lbnQqPihkb2MpKTsKKyNlbmRpZgorICAgIH0KKyNlbmRpZgorICAgIGVsc2UKKyAg
ICAgICAgcmV0ID0gd3JhcERvY3VtZW50KGRvYyk7CisKKyAgICByZXR1cm4gR0RPTU9iamVjdENh
Y2hlOjpwdXRET01PYmplY3QoZG9jLCByZXQpOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2dkb20vR0RPTUJpbmRpbmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvZ2RvbS9HRE9NQmluZGluZy5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2dkb20vR0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE3OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQ
b3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3JnPgorICogIENvcHlyaWdo
dCAoQykgMjAwOCBMdWtlIEtlbm5ldGggQ2Fzc29uIExlaWdodG9uIDxsa2NsQGxrY2wubmV0Pgor
ICogIENvcHlyaWdodCAoQykgMjAwOCBNYXJ0aW4gU290byA8c290b0BmcmVlZGVza3RvcC5vcmc+
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisvKiAKKyAqIEZJWE1FOiB0aGVyZSBz
aG91bGQgaGF2ZSBiZWVuIG5vIG5lZWQgdG8gZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGJl
aGluZAorICogSlNET01CaW5kaW5nLmNwcCBhbmQgY2FsbCBpdCBHRE9NQmluZGluZy5jcHAgaW4g
dGhlIGZpcnN0IHBsYWNlLgorICogVGhlcmUgc2hvdWxkIGJlIG5vIG5lZWQgZm9yIHRoaXMgZmls
ZTsgdGhlIGZ1bmN0aW9uYWxpdHkgc2hvdWxkIGJlCisgKiBtZXJnZWQgaW50byBjb21tb24gY29k
ZSwgYXMgaXQgZG9lcyBleGFjdGx5IHRoZSBzYW1lIHRoaW5nLgorICoKKyAqIGhvd2V2ZXIsIGl0
IGlzIGJlaW5nIGFkZGVkIG5lYXItdmVyYmF0aW0tY3V0LXBhc3RlIGJlY2F1c2UgYSkgdGhhdCBp
cworICogZWFzaWVyIGIpIGl0J3MgZXhhY3RseSB3aGF0IHRoZSBvYmplY3RpdmUtYyBiaW5kaW5n
cyBkbworICoKKyAqLworCisvLyBnY2MgMy54IGNhbid0IGhhbmRsZSBpbmNsdWRpbmcgdGhlIEhh
c2hNYXAgcG9pbnRlciBzcGVjaWFsaXphdGlvbgorLy8gaW4gdGhpcyBmaWxlCisjaWYgZGVmaW5l
ZCBfX0dOVUNfXyAmJiAhZGVmaW5lZCBfX0dMSUJDWFhfXyAvLyBsZXNzIHRoYW4gZ2NjIDMuNAor
I2RlZmluZSBIQVNIX01BUF9QVFJfU1BFQ19XT1JLQVJPVU5EIDEKKyNlbmRpZgorCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJnbGliLW9iamVjdC5oIgorI2luY2x1ZGUgIkNTdHJp
bmcuaCIKKyNpbmNsdWRlICJHZG9tQXR0clByaXZhdGUuaCIKKyNpbmNsdWRlICJHRE9NQmluZGlu
Zy5oIgorI2luY2x1ZGUgIkdkb21DREFUQVNlY3Rpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAiR2Rv
bUNvbW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbURvY3VtZW50UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIkdkb21Eb2N1bWVudFR5cGVQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbURvY3VtZW50
RnJhZ21lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbURPTU9iamVjdC5oIgorI2luY2x1ZGUg
Ikdkb21ET01PYmplY3RQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbUhUTUxFbGVtZW50V3JhcHBl
ckZhY3RvcnkuaCIKKyNpbmNsdWRlICJHZG9tRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJH
ZG9tRW50aXR5UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21FbnRpdHlSZWZlcmVuY2VQcml2YXRl
LmgiCisjaW5jbHVkZSAiR2RvbU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbU5vdGF0aW9u
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25Qcml2YXRlLmgi
CisjaW5jbHVkZSAiR2RvbVRleHRQcml2YXRlLmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCit0eXBl
ZGVmIEhhc2hNYXA8dm9pZCosIGdwb2ludGVyPiBET01PYmplY3RNYXA7CisKK3N0YXRpYyBET01P
YmplY3RNYXAmIGRvbU9iamVjdHMoKQoreworICAgIHN0YXRpYyBET01PYmplY3RNYXAgc3RhdGlj
RE9NT2JqZWN0czsKKyAgICByZXR1cm4gc3RhdGljRE9NT2JqZWN0czsKK30KKworZ3BvaW50ZXIg
R0RPTU9iamVjdENhY2hlOjpnZXRET01PYmplY3Qodm9pZCogb2JqZWN0SGFuZGxlKQoreworICAg
IGdwb2ludGVyIHJldCA9IGRvbU9iamVjdHMoKS5nZXQob2JqZWN0SGFuZGxlKTsKKyAgICByZXR1
cm4gcmV0OworfQorCitncG9pbnRlciBHRE9NT2JqZWN0Q2FjaGU6OnB1dERPTU9iamVjdCh2b2lk
KiBvYmplY3RIYW5kbGUsIGdwb2ludGVyIHdyYXBwZXIpCit7CisgICAgZG9tT2JqZWN0cygpLnNl
dChvYmplY3RIYW5kbGUsIHdyYXBwZXIpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCit2b2lk
IEdET01PYmplY3RDYWNoZTo6Zm9yZ2V0RE9NT2JqZWN0KHZvaWQqIG9iamVjdEhhbmRsZSkKK3sK
KyAgICBkb21PYmplY3RzKCkudGFrZShvYmplY3RIYW5kbGUpOworfQorCitzdGF0aWMgZ3BvaW50
ZXIgY3JlYXRlV3JhcHBlcihOb2RlKiBub2RlKTsKKworZ3BvaW50ZXIgdG9HRE9NTmV3bHlDcmVh
dGVkKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gTlVMTDsK
KworICAgIHJldHVybiBjcmVhdGVXcmFwcGVyKG5vZGUpOworfQorCitncG9pbnRlciB0b0dET00o
Tm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBOVUxMOworCisg
ICAgZ3BvaW50ZXIgcmV0ID0gR0RPTU9iamVjdENhY2hlOjpnZXRET01PYmplY3Qobm9kZSk7Cisg
ICAgaWYgKHJldCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldHVybiBjcmVhdGVXcmFw
cGVyKG5vZGUpOworfQorCitzdGF0aWMgQUxXQVlTX0lOTElORSBncG9pbnRlciBjcmVhdGVXcmFw
cGVyKE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUpOworICAgIEFTU0VSVCghU2NyaXB0
SW50ZXJwcmV0ZXI6OmdldERPTU9iamVjdChub2RlKSk7CisKKyAgICBEb2N1bWVudCogZG9jID0g
bm9kZS0+ZG9jdW1lbnQoKTsKKyAgICBncG9pbnRlciByZXQgPSBOVUxMOworCisgICAgc3dpdGNo
IChub2RlLT5ub2RlVHlwZSgpKSB7CisgICAgICAgIGNhc2UgTm9kZTo6RUxFTUVOVF9OT0RFOgor
ICAgICAgICAgICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICBy
ZXQgPSBjcmVhdGVHZG9tSFRNTEVsZW1lbnRXcmFwcGVyKHN0YXRpY19jYXN0PEhUTUxFbGVtZW50
Kj4obm9kZSkpOworI2lmIEVOQUJMRShTVkcpCisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5p
c1NWR0VsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsgLyogWFhYIFRPRE8g
LSBzZWUgIzIwNTg2ICovCisjaWZkZWYgX19UT0RPX0JVR18yMDU4Nl9fIC8qIFhYWCBUT0RPIC0g
c2VlICMyMDU4NiAqLworICAgICAgICAgICAgICAgIHJldCA9IGNyZWF0ZUdET01TVkdFbGVtZW50
V3JhcHBlcihzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSkpOworI2VuZGlmCisjZW5kaWYK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXQgPSB3cmFwRWxlbWVudChzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obm9kZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgTm9kZTo6QVRUUklCVVRFX05PREU6CisgICAgICAgICAgICByZXQgPSB3cmFwQXR0cihzdGF0
aWNfY2FzdDxBdHRyKj4obm9kZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Tm9kZTo6VEVYVF9OT0RFOgorICAgICAgICAgICAgcmV0ID0gd3JhcFRleHQoc3RhdGljX2Nhc3Q8
VGV4dCo+KG5vZGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5vZGU6OkNE
QVRBX1NFQ1RJT05fTk9ERToKKyAgICAgICAgICAgIHJldCA9IHdyYXBDREFUQVNlY3Rpb24oc3Rh
dGljX2Nhc3Q8Q0RBVEFTZWN0aW9uKj4obm9kZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgTm9kZTo6RU5USVRZX05PREU6CisgICAgICAgICAgICByZXQgPSB3cmFwRW50aXR5
KHN0YXRpY19jYXN0PEVudGl0eSo+KG5vZGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERToKKyAgICAgICAgICAgIHJl
dCA9IHdyYXBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oc3RhdGljX2Nhc3Q8UHJvY2Vzc2luZ0luc3Ry
dWN0aW9uKj4obm9kZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm9kZTo6
Q09NTUVOVF9OT0RFOgorICAgICAgICAgICAgcmV0ID0gd3JhcENvbW1lbnQoc3RhdGljX2Nhc3Q8
Q29tbWVudCo+KG5vZGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5vZGU6
OkRPQ1VNRU5UX05PREU6CisgICAgICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIGNhY2hlIHRo
ZSBkb2N1bWVudCBpdHNlbGYgaW4gdGhlIHBlci1kb2N1bWVudCBkaWN0aW9uYXJ5CisgICAgICAg
ICAgICByZXR1cm4gdG9HRE9NKHN0YXRpY19jYXN0PERvY3VtZW50Kj4obm9kZSkpOworICAgICAg
ICBjYXNlIE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERToKKyAgICAgICAgICAgIHJldCA9IHdyYXBE
b2N1bWVudFR5cGUoc3RhdGljX2Nhc3Q8RG9jdW1lbnRUeXBlKj4obm9kZSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm9kZTo6Tk9UQVRJT05fTk9ERToKKyAgICAgICAgICAg
IHJldCA9IHdyYXBOb3RhdGlvbihzdGF0aWNfY2FzdDxOb3RhdGlvbio+KG5vZGUpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6
CisgICAgICAgICAgICByZXQgPSB3cmFwRG9jdW1lbnRGcmFnbWVudChzdGF0aWNfY2FzdDxEb2N1
bWVudEZyYWdtZW50Kj4obm9kZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Tm9kZTo6RU5USVRZX1JFRkVSRU5DRV9OT0RFOgorICAgICAgICAgICAgcmV0ID0gd3JhcEVudGl0
eVJlZmVyZW5jZShzdGF0aWNfY2FzdDxFbnRpdHlSZWZlcmVuY2UqPihub2RlKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldCA9IHdyYXBOb2Rl
KG5vZGUpOworICAgIH0KKworICAgIHJldHVybiBHRE9NT2JqZWN0Q2FjaGU6OnB1dERPTU9iamVj
dChub2RlLCByZXQpOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2dkb20vR0RPTUNTU1J1bGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvZ2RvbS9HRE9NQ1NTUnVsZUN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2dkb20vR0RPTUNTU1J1bGVDdXN0b20uY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJy
aSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3JnPgorICogIENvcHly
aWdodCAoQykgMjAwOCBMdWtlIEtlbm5ldGggQ2Fzc29uIExlaWdodG9uIDxsa2NsQGxrY2wubmV0
PgorICogIENvcHlyaWdodCAoQykgMjAwOCBNYXJ0aW4gU290byA8c290b0BmcmVlZGVza3RvcC5v
cmc+CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisvKiBQTEVBU0UgTk9URTogdGhp
cyBmaWxlIG5lZWRzIHRvIGJlIGtlcHQgdXAtdG8tZGF0ZSBpbiBFWEFDVCBhY2NvcmRhbmNlCisg
KiB3aXRoIEpTQ1NTUnVsZUN1c3RvbS5jcHAuICBhbnkgYWRkaXRpb25zIHRvIEpTQ1NTUnVsZUN1
c3RvbS5jcHAgd2lsbCBhbHNvCisgKiByZXF1aXJlIHRoZSBFWEFDVCBzYW1lIGFkZGl0aW9ucywg
aGVyZS4KKyAqCisgKiBGSVhNRTogdGhlcmUgc2hvdWxkIGhhdmUgYmVlbiBubyBuZWVkIHRvIGR1
cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBiZWhpbmQKKyAqIEpTRE9NQmluZGluZy5jcHAgYW5k
IGNhbGwgaXQgR0RPTUJpbmRpbmcuY3BwIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kCisgKiB0aGVy
ZSBzaG91bGQgYmUgbm8gbmVlZCBmb3IgdGhpcyBmaWxlOyB0aGUgZnVuY3Rpb25hbGl0eSBzaG91
bGQgYmUKKyAqIG1lcmdlZCBpbnRvIGNvbW1vbiBjb2RlLCBhcyBpdCBkb2VzIGV4YWN0bHkgdGhl
IHNhbWUgdGhpbmcuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiZ2xp
Yi1vYmplY3QuaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiR2RvbUNTU1J1bGUu
aCIKKyNpbmNsdWRlICJDU1NDaGFyc2V0UnVsZS5oIgorI2luY2x1ZGUgIkNTU0ZvbnRGYWNlUnVs
ZS5oIgorI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKKyNpbmNsdWRlICJDU1NNZWRpYVJ1bGUu
aCIKKyNpbmNsdWRlICJDU1NQYWdlUnVsZS5oIgorI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgor
I2luY2x1ZGUgIkNTU1ZhcmlhYmxlc1J1bGUuaCIKKyNpbmNsdWRlICJHRE9NQmluZGluZy5oIgor
I2luY2x1ZGUgIkdkb21DU1NDaGFyc2V0UnVsZS5oIgorI2luY2x1ZGUgIkdkb21DU1NDaGFyc2V0
UnVsZVByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NTRm9udEZhY2VSdWxlLmgiCisjaW5jbHVk
ZSAiR2RvbUNTU0ZvbnRGYWNlUnVsZVByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NTSW1wb3J0
UnVsZS5oIgorI2luY2x1ZGUgIkdkb21DU1NJbXBvcnRSdWxlUHJpdmF0ZS5oIgorI2luY2x1ZGUg
Ikdkb21DU1NNZWRpYVJ1bGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NTTWVkaWFSdWxlUHJpdmF0ZS5o
IgorI2luY2x1ZGUgIkdkb21DU1NQYWdlUnVsZS5oIgorI2luY2x1ZGUgIkdkb21DU1NQYWdlUnVs
ZVByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NTUHJpbWl0aXZlVmFsdWVQcml2YXRlLmgiCisj
aW5jbHVkZSAiR2RvbUNTU1J1bGVQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbUNTU1N0eWxlUnVs
ZS5oIgorI2luY2x1ZGUgIkdkb21DU1NTdHlsZVJ1bGVQcml2YXRlLmgiCisjaW5jbHVkZSAiR2Rv
bUNTU1ZhcmlhYmxlc1J1bGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NTVmFyaWFibGVzUnVsZVByaXZh
dGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NTVmFsdWVMaXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdk
b21DU1NWYWx1ZVByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tRE9NT2JqZWN0LmgiCisjaW5jbHVk
ZSAiR2RvbURPTU9iamVjdFByaXZhdGUuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCitncG9pbnRlciB0b0dET00oQ1NTUnVsZSogcnVsZSkKK3sK
KyAgICBpZiAoIXJ1bGUpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZ3BvaW50ZXIgZ29i
aiA9IEdET01PYmplY3RDYWNoZTo6Z2V0RE9NT2JqZWN0KHJ1bGUpOworCisgICAgaWYgKGdvYmop
CisgICAgICAgIHJldHVybiBnb2JqOworCisgICAgZ3BvaW50ZXIgcmV0OworICAgIHN3aXRjaCAo
cnVsZS0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgQ1NTUnVsZTo6U1RZTEVfUlVMRToKKyAgICAg
ICAgICAgIHJldCA9IHdyYXBDU1NTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4o
cnVsZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTUnVsZTo6TUVESUFf
UlVMRToKKyAgICAgICAgICAgIHJldCA9IHdyYXBDU1NNZWRpYVJ1bGUoc3RhdGljX2Nhc3Q8Q1NT
TWVkaWFSdWxlKj4ocnVsZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NT
UnVsZTo6Rk9OVF9GQUNFX1JVTEU6CisgICAgICAgICAgICByZXQgPSB3cmFwQ1NTRm9udEZhY2VS
dWxlKHN0YXRpY19jYXN0PENTU0ZvbnRGYWNlUnVsZSo+KHJ1bGUpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENTU1J1bGU6OlBBR0VfUlVMRToKKyAgICAgICAgICAgIHJldCA9
IHdyYXBDU1NQYWdlUnVsZShzdGF0aWNfY2FzdDxDU1NQYWdlUnVsZSo+KHJ1bGUpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1J1bGU6OklNUE9SVF9SVUxFOgorICAgICAg
ICAgICAgcmV0ID0gd3JhcENTU0ltcG9ydFJ1bGUoc3RhdGljX2Nhc3Q8Q1NTSW1wb3J0UnVsZSo+
KHJ1bGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1J1bGU6OkNIQVJT
RVRfUlVMRToKKyAgICAgICAgICAgIHJldCA9IHdyYXBDU1NDaGFyc2V0UnVsZShzdGF0aWNfY2Fz
dDxDU1NDaGFyc2V0UnVsZSo+KHJ1bGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIENTU1J1bGU6OlZBUklBQkxFU19SVUxFOgorICAgICAgICAgICAgcmV0ID0gd3JhcENTU1Zh
cmlhYmxlc1J1bGUoc3RhdGljX2Nhc3Q8Q1NTVmFyaWFibGVzUnVsZSo+KHJ1bGUpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0ID0gd3JhcENT
U1J1bGUocnVsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBHRE9NT2JqZWN0
Q2FjaGU6OnB1dERPTU9iamVjdChydWxlLCByZXQpOworICAgIHJldHVybiByZXQ7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2dkb20vR0RPTUV2
ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2dkb20vR0RPTUV2
ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvZ2RvbS9HRE9N
RXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqICBD
b3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICog
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcg
PHNhbUB3ZWJraXQub3JnPgorICogIENvcHlyaWdodCAoQykgMjAwOCBMdWtlIEtlbm5ldGggQ2Fz
c29uIExlaWdodG9uIDxsa2NsQGxrY2wubmV0PgorICogIENvcHlyaWdodCAoQykgMjAwOCBNYXJ0
aW4gU290byA8c290b0BmcmVlZGVza3RvcC5vcmc+CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
KyAqLworCisvKiBQTEVBU0UgTk9URTogdGhpcyBmaWxlIG5lZWRzIHRvIGJlIGtlcHQgdXAtdG8t
ZGF0ZSBpbiBFWEFDVCBhY2NvcmRhbmNlCisgKiB3aXRoIEpTRXZlbnRDdXN0b20uY3BwLiAgYW55
IGFkZGl0aW9ucyB0byBKU0V2ZW50Q3VzdG9tLmNwcCB3aWxsIGFsc28KKyAqIHJlcXVpcmUgdGhl
IEVYQUNUIHNhbWUgYWRkaXRpb25zLCBoZXJlLgorICoKKyAqIEZJWE1FOiB0aGVyZSBzaG91bGQg
aGF2ZSBiZWVuIG5vIG5lZWQgdG8gZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGJlaGluZAor
ICogSlNET01CaW5kaW5nLmNwcCBhbmQgY2FsbCBpdCBHRE9NQmluZGluZy5jcHAgaW4gdGhlIGZp
cnN0IHBsYWNlLCBhbmQKKyAqIHRoZXJlIHNob3VsZCBiZSBubyBuZWVkIGZvciB0aGlzIGZpbGU7
IHRoZSBmdW5jdGlvbmFsaXR5IHNob3VsZCBiZQorICogbWVyZ2VkIGludG8gY29tbW9uIGNvZGUs
IGFzIGl0IGRvZXMgZXhhY3RseSB0aGUgc2FtZSB0aGluZy4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJnbGliLW9iamVjdC5oIgorI2luY2x1ZGUgIkNTdHJpbmcuaCIK
KyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkdET01CaW5kaW5nLmgiCisjaW5jbHVkZSAi
R2RvbURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkdkb21ET01PYmplY3RQcml2YXRlLmgiCisjaW5j
bHVkZSAiR2RvbUV2ZW50LmgiCisjaW5jbHVkZSAiR2RvbUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1
ZGUgIkdkb21LZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiR2RvbUtleWJvYXJkRXZlbnRQcml2
YXRlLmgiCisjaW5jbHVkZSAiR2RvbU1lc3NhZ2VFdmVudC5oIgorI2luY2x1ZGUgIkdkb21NZXNz
YWdlRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRl
ICJHZG9tTW91c2VFdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tTXV0YXRpb25FdmVudC5o
IgorI2luY2x1ZGUgIkdkb21NdXRhdGlvbkV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21P
dmVyZmxvd0V2ZW50LmgiCisjaW5jbHVkZSAiR2RvbU92ZXJmbG93RXZlbnRQcml2YXRlLmgiCisj
aW5jbHVkZSAiR2RvbVByb2dyZXNzRXZlbnQuaCIKKyNpbmNsdWRlICJHZG9tUHJvZ3Jlc3NFdmVu
dFByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tVGV4dEV2ZW50LmgiCisjaW5jbHVkZSAiR2RvbVRl
eHRFdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tVUlFdmVudC5oIgorI2luY2x1ZGUgIkdk
b21VSUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21XZWJLaXRBbmltYXRpb25FdmVudC5o
IgorI2luY2x1ZGUgIkdkb21XZWJLaXRBbmltYXRpb25FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRl
ICJHZG9tV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiR2RvbVdlYktpdFRyYW5z
aXRpb25FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tV2hlZWxFdmVudC5oIgorI2luY2x1
ZGUgIkdkb21XaGVlbEV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21YTUxIdHRwUmVxdWVz
dFByb2dyZXNzRXZlbnQuaCIKKyNpbmNsdWRlICJHZG9tWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2
ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJNZXNz
YWdlRXZlbnQuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiTXV0YXRpb25F
dmVudC5oIgorI2luY2x1ZGUgIk92ZXJmbG93RXZlbnQuaCIKKyNpbmNsdWRlICJQcm9ncmVzc0V2
ZW50LmgiCisjaW5jbHVkZSAiVGV4dEV2ZW50LmgiCisjaW5jbHVkZSAiVUlFdmVudC5oIgorI2lu
Y2x1ZGUgIldlYktpdEFuaW1hdGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiV2ViS2l0VHJhbnNpdGlv
bkV2ZW50LmgiCisjaW5jbHVkZSAiV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlhNTEh0dHBSZXF1
ZXN0UHJvZ3Jlc3NFdmVudC5oIgorCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorI2luY2x1ZGUg
Ikdkb21TdG9yYWdlRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiU3RvcmFnZUV2ZW50LmgiCisj
ZW5kaWYKKworI2lmIEVOQUJMRShTVkcpCisjaWZkZWYgX19UT0RPX0JVR18yMDU4Nl9fIC8qIFRP
RE8gLSBzZWUgIzIwNTg2ICovCisjaW5jbHVkZSAiR2RvbVNWR1pvb21FdmVudFByaXZhdGUuaCIK
KyNpbmNsdWRlICJHZG9tU1ZHWm9vbUV2ZW50LmgiCisjaW5jbHVkZSAiU1ZHWm9vbUV2ZW50Lmgi
CisjZW5kaWYKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK2dwb2ludGVyIHRvR0RPTShFdmVudCogZXZlbnQpCit7CisgICAgaWYgKCFl
dmVudCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBncG9pbnRlciBnb2JqID0gR0RPTU9i
amVjdENhY2hlOjpnZXRET01PYmplY3QoZXZlbnQpOworICAgIGlmIChnb2JqKQorICAgICAgICBy
ZXR1cm4gZ29iajsKKworICAgIGdwb2ludGVyIHJldDsKKyAgICBpZiAoZXZlbnQtPmlzVUlFdmVu
dCgpKSB7CisgICAgICAgIGlmIChldmVudC0+aXNLZXlib2FyZEV2ZW50KCkpCisgICAgICAgICAg
ICByZXQgPSB3cmFwS2V5Ym9hcmRFdmVudChzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZl
bnQpKTsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmlzVGV4dEV2ZW50KCkpCisgICAgICAgICAg
ICByZXQgPSB3cmFwVGV4dEV2ZW50KHN0YXRpY19jYXN0PFRleHRFdmVudCo+KGV2ZW50KSk7Cisg
ICAgICAgIGVsc2UgaWYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSkKKyAgICAgICAgICAgIHJldCA9
IHdyYXBNb3VzZUV2ZW50KHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCkpOworICAgICAg
ICBlbHNlIGlmIChldmVudC0+aXNXaGVlbEV2ZW50KCkpCisgICAgICAgICAgICByZXQgPSB3cmFw
V2hlZWxFdmVudChzdGF0aWNfY2FzdDxXaGVlbEV2ZW50Kj4oZXZlbnQpKTsKKyNpZiBFTkFCTEUo
U1ZHKQorICAgICAgICBlbHNlIGlmIChldmVudC0+aXNTVkdab29tRXZlbnQoKSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIE5VTEw7IC8qIFRPRE8gLSBzZWUgIzIwNTg2ICovCisjaWZk
ZWYgX19UT0RPX0JVR18yMDU4Nl9fIC8qIFRPRE8gLSBzZWUgIzIwNTg2ICovCisgICAgICAgICAg
ICByZXQgPSB3cmFwU1ZHWm9vbUV2ZW50KHN0YXRpY19jYXN0PFNWR1pvb21FdmVudCo+KGV2ZW50
KSwgMCk7CisjZW5kaWYKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHJldCA9IHdyYXBVSUV2ZW50KHN0YXRpY19jYXN0PFVJRXZlbnQqPihldmVudCkpOworICAg
IH0gZWxzZSBpZiAoZXZlbnQtPmlzTXV0YXRpb25FdmVudCgpKQorICAgICAgICByZXQgPSB3cmFw
TXV0YXRpb25FdmVudChzdGF0aWNfY2FzdDxNdXRhdGlvbkV2ZW50Kj4oZXZlbnQpKTsKKyAgICBl
bHNlIGlmIChldmVudC0+aXNPdmVyZmxvd0V2ZW50KCkpCisgICAgICAgIHJldCA9IHdyYXBPdmVy
Zmxvd0V2ZW50KHN0YXRpY19jYXN0PE92ZXJmbG93RXZlbnQqPihldmVudCkpOworICAgIGVsc2Ug
aWYgKGV2ZW50LT5pc01lc3NhZ2VFdmVudCgpKQorICAgICAgICByZXQgPSB3cmFwTWVzc2FnZUV2
ZW50KHN0YXRpY19jYXN0PE1lc3NhZ2VFdmVudCo+KGV2ZW50KSk7CisgICAgZWxzZSBpZiAoZXZl
bnQtPmlzUHJvZ3Jlc3NFdmVudCgpKSB7CisgICAgICAgIGlmIChldmVudC0+aXNYTUxIdHRwUmVx
dWVzdFByb2dyZXNzRXZlbnQoKSkKKyAgICAgICAgICAgIHJldCA9IHdyYXBYTUxIdHRwUmVxdWVz
dFByb2dyZXNzRXZlbnQoc3RhdGljX2Nhc3Q8WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50Kj4o
ZXZlbnQpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0ID0gd3JhcFByb2dyZXNzRXZl
bnQoc3RhdGljX2Nhc3Q8UHJvZ3Jlc3NFdmVudCo+KGV2ZW50KSk7CisgICAgfQorI2lmIEVOQUJM
RShET01fU1RPUkFHRSkKKyAgICBlbHNlIGlmIChldmVudC0+aXNTdG9yYWdlRXZlbnQoKSkKKyAg
ICAgICAgcmV0ID0gd3JhcFN0b3JhZ2VFdmVudChzdGF0aWNfY2FzdDxTdG9yYWdlRXZlbnQqPihl
dmVudCkpOworI2VuZGlmCisgICAgZWxzZSBpZiAoZXZlbnQtPmlzV2ViS2l0QW5pbWF0aW9uRXZl
bnQoKSkKKyAgICAgICAgcmV0ID0gd3JhcFdlYktpdEFuaW1hdGlvbkV2ZW50KHN0YXRpY19jYXN0
PFdlYktpdEFuaW1hdGlvbkV2ZW50Kj4oZXZlbnQpKTsKKyAgICBlbHNlIGlmIChldmVudC0+aXNX
ZWJLaXRUcmFuc2l0aW9uRXZlbnQoKSkKKyAgICAgICAgcmV0ID0gd3JhcFdlYktpdFRyYW5zaXRp
b25FdmVudChzdGF0aWNfY2FzdDxXZWJLaXRUcmFuc2l0aW9uRXZlbnQqPihldmVudCkpOworICAg
IGVsc2UKKyAgICAgICAgcmV0ID0gd3JhcEV2ZW50KGV2ZW50KTsKKworICAgIHJldHVybiBHRE9N
T2JqZWN0Q2FjaGU6OnB1dERPTU9iamVjdChldmVudCwgcmV0KTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvZ2RvbS9HRE9NVGV4dEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9nZG9tL0dET01UZXh0Q3VzdG9tLmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvZ2RvbS9HRE9NVGV4dEN1c3RvbS5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAx
OTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9y
Zz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggTHVrZSBLZW5uZXRoIENhc3NvbiBMZWlnaHRvbiA8
bGtjbEBsa2NsLm5ldD4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggTWFydGluIFNvdG8gPHNvdG9A
ZnJlZWRlc2t0b3Aub3JnPgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworLyogUExF
QVNFIE5PVEU6IHRoaXMgZmlsZSBuZWVkcyB0byBiZSBrZXB0IHVwLXRvLWRhdGUgaW4gRVhBQ1Qg
YWNjb3JkYW5jZQorICogd2l0aCBKU1RleHRDdXN0b20uY3BwLiAgYW55IGFkZGl0aW9ucyB0byBK
U1RleHRDdXN0b20uY3BwIHdpbGwgYWxzbworICogcmVxdWlyZSB0aGUgRVhBQ1Qgc2FtZSBhZGRp
dGlvbnMsIGhlcmUuCisgKgorICogRklYTUU6IHRoZXJlIHNob3VsZCBoYXZlIGJlZW4gbm8gbmVl
ZCB0byBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgYmVoaW5kCisgKiBKU0RPTUJpbmRpbmcu
Y3BwIGFuZCBjYWxsIGl0IEdET01CaW5kaW5nLmNwcCBpbiB0aGUgZmlyc3QgcGxhY2UsIGFuZAor
ICogdGhlcmUgc2hvdWxkIGJlIG5vIG5lZWQgZm9yIHRoaXMgZmlsZTsgdGhlIGZ1bmN0aW9uYWxp
dHkgc2hvdWxkIGJlCisgKiBtZXJnZWQgaW50byBjb21tb24gY29kZSwgYXMgaXQgZG9lcyBleGFj
dGx5IHRoZSBzYW1lIHRoaW5nLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgImdsaWItb2JqZWN0LmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkdkb21E
T01PYmplY3QuaCIKKyNpbmNsdWRlICJHZG9tRE9NT2JqZWN0UHJpdmF0ZS5oIgorI2luY2x1ZGUg
IkdET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiR2RvbVRleHRQcml2YXRlLmgiCisjaW5jbHVkZSAi
VGV4dC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKKworZ3BvaW50ZXIgdG9HRE9NKFRleHQqIHRleHQpCit7CisgICAgaWYgKCF0ZXh0KQorICAg
ICAgICByZXR1cm4gTlVMTDsKKworICAgIGdwb2ludGVyIGdvYmogPSBHRE9NT2JqZWN0Q2FjaGU6
OmdldERPTU9iamVjdCh0ZXh0KTsKKyAgICBpZiAoZ29iaikKKyAgICAgICAgcmV0dXJuIGdvYmo7
CisKKyAgICBncG9pbnRlciByZXQgPSB3cmFwVGV4dCh0ZXh0KTsKKyAgICByZXR1cm4gR0RPTU9i
amVjdENhY2hlOjpwdXRET01PYmplY3QodGV4dCwgcmV0KTsKK30KKworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9nZG9tL0dET01CaW5kaW5nLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9nZG9tL0dET01CaW5kaW5nLmgJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2dkb20vR0RPTUJpbmRpbmcuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw3NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQ
b3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3JnPgorICogIENvcHlyaWdo
dCAoQykgMjAwOCBMdWtlIEtlbm5ldGggQ2Fzc29uIExlaWdodG9uIDxsa2NsQGxrY2wubmV0Pgor
ICogIENvcHlyaWdodCAoQykgMjAwOCBNYXJ0aW4gU290byA8c290b0BmcmVlZGVza3RvcC5vcmc+
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIEdkb21ET01CaW5kaW5n
X2gKKyNkZWZpbmUgR2RvbURPTUJpbmRpbmdfaAorCisjaW5jbHVkZSAiQ1NTUnVsZS5oIgorI2lu
Y2x1ZGUgIkNTU1ZhbHVlLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkV2ZW50
LmgiCisjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJHZG9tTm9kZS5oIgorI2lu
Y2x1ZGUgIkdkb21Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCisj
aW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlN0eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJUZXh0
LmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworICAgIGNsYXNzIEF0b21pY1N0cmluZzsKKyAgICBjbGFzcyBEb2N1bWVudDsKKyAgICBjbGFz
cyBFdmVudDsKKyAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBLVVJMOworICAgIGNsYXNzIE5v
ZGU7CisgICAgY2xhc3MgU3RyaW5nOworCisjaWYgRU5BQkxFKFNWRykKKyAgICBjbGFzcyBTVkdF
bGVtZW50OworI2VuZGlmCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFjZSBXZWJL
aXQgeworICAgIGdwb2ludGVyIHRvR0RPTShXZWJDb3JlOjpDU1NSdWxlKik7CisgICAgZ3BvaW50
ZXIgdG9HRE9NKFdlYkNvcmU6OkNTU1ZhbHVlKik7CisgICAgZ3BvaW50ZXIgdG9HRE9NKFdlYkNv
cmU6OkRvY3VtZW50Kik7CisgICAgZ3BvaW50ZXIgdG9HRE9NKFdlYkNvcmU6OkVsZW1lbnQqKTsK
KyAgICBncG9pbnRlciB0b0dET00oV2ViQ29yZTo6RXZlbnQqKTsKKyAgICBncG9pbnRlciB0b0dE
T00oV2ViQ29yZTo6RXZlbnRUYXJnZXQqKTsKKyAgICBncG9pbnRlciB0b0dET00oV2ViQ29yZTo6
SFRNTENvbGxlY3Rpb24qKTsKKyAgICBncG9pbnRlciB0b0dET00oV2ViQ29yZTo6Tm9kZSopOwor
ICAgIGdwb2ludGVyIHRvR0RPTShXZWJDb3JlOjpTdHlsZVNoZWV0Kik7CisgICAgZ3BvaW50ZXIg
dG9HRE9NKFdlYkNvcmU6OlRleHQqKTsKKworICAgIGNsYXNzIEdET01PYmplY3RDYWNoZSB7Cisg
ICAgcHVibGljOgorICAgICAgICBzdGF0aWMgZ3BvaW50ZXIgZ2V0RE9NT2JqZWN0KHZvaWQgKik7
CisgICAgICAgIHN0YXRpYyBncG9pbnRlciBwdXRET01PYmplY3Qodm9pZCAqLCBncG9pbnRlcik7
CisgICAgICAgIHN0YXRpYyB2b2lkIGZvcmdldERPTU9iamVjdCh2b2lkICopOworICAgIH07Cit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEdkb21ET01CaW5kaW5nX2gKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvZ2RvbS9HRE9NQ1NTVmFsdWVDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvZ2RvbS9HRE9NQ1NTVmFsdWVDdXN0b20uY3BwCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9nZG9tL0dET01DU1NWYWx1ZUN1c3RvbS5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIw
MDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDggTHVrZSBLZW5uZXRoIENhc3NvbiBMZWlnaHRvbiA8bGtjbEBs
a2NsLm5ldD4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggTWFydGluIFNvdG8gPHNvdG9AZnJlZWRl
c2t0b3Aub3JnPgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworLyogUExFQVNFIE5P
VEU6IHRoaXMgZmlsZSBuZWVkcyB0byBiZSBrZXB0IHVwLXRvLWRhdGUgaW4gRVhBQ1QgYWNjb3Jk
YW5jZQorICogd2l0aCBKU0NTU1ZhbHVlQ3VzdG9tLmNwcC4gIGFueSBhZGRpdGlvbnMgdG8gSlND
U1NWYWx1ZUN1c3RvbS5jcHAgd2lsbCBhbHNvCisgKiByZXF1aXJlIHRoZSBFWEFDVCBzYW1lIGFk
ZGl0aW9ucywgaGVyZS4KKyAqCisgKiBGSVhNRTogdGhlcmUgc2hvdWxkIGhhdmUgYmVlbiBubyBu
ZWVkIHRvIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBiZWhpbmQKKyAqIEpTRE9NQmluZGlu
Zy5jcHAgYW5kIGNhbGwgaXQgR0RPTUJpbmRpbmcuY3BwIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5k
CisgKiB0aGVyZSBzaG91bGQgYmUgbm8gbmVlZCBmb3IgdGhpcyBmaWxlOyB0aGUgZnVuY3Rpb25h
bGl0eSBzaG91bGQgYmUKKyAqIG1lcmdlZCBpbnRvIGNvbW1vbiBjb2RlLCBhcyBpdCBkb2VzIGV4
YWN0bHkgdGhlIHNhbWUgdGhpbmcuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAiZ2xpYi1vYmplY3QuaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiR0RP
TUJpbmRpbmcuaCIKKyNpbmNsdWRlICJHZG9tQ1NTVmFsdWVQcml2YXRlLmgiCisjaW5jbHVkZSAi
R2RvbUNTU1ZhbHVlTGlzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NTUHJpbWl0aXZlVmFs
dWVQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkdkb21E
T01PYmplY3RQcml2YXRlLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2lmZGVmIF9fVE9ET19CVUdf
MjA1ODZfXyAvKiBUT0RPIC0gc2VlICMyMDU4NiAqLworI2luY2x1ZGUgIkdkb21TVkdDb2xvclBy
aXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tU1ZHUGFpbnRQcml2YXRlLmgiCisjZW5kaWYKKyNlbmRp
ZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2dw
b2ludGVyIHRvR0RPTShDU1NWYWx1ZSogdmFsdWUpCit7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAg
ICAgcmV0dXJuIE5VTEw7CisKKyAgICBncG9pbnRlciBnb2JqID0gR0RPTU9iamVjdENhY2hlOjpn
ZXRET01PYmplY3QodmFsdWUpOworCisgICAgaWYgKGdvYmopCisgICAgICAgIHJldHVybiBnb2Jq
OworCisgICAgZ3BvaW50ZXIgcmV0OworCisgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKQor
ICAgICAgICByZXQgPSB3cmFwQ1NTVmFsdWVMaXN0KHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+
KHZhbHVlKSk7CisjaWYgRU5BQkxFKFNWRykKKyAgICBlbHNlIGlmICh2YWx1ZS0+aXNTVkdQYWlu
dCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7IC8qIFRPRE8gLSBzZWUgIzIwNTg2ICov
CisjaWZkZWYgX19UT0RPX0JVR18yMDU4Nl9fIC8qIFRPRE8gLSBzZWUgIzIwNTg2ICovCisgICAg
ICAgIHJldCA9IHdyYXBTVkdQYWludChzdGF0aWNfY2FzdDxTVkdQYWludCo+KHZhbHVlKSk7Cisj
ZW5kaWYKKyAgICB9CisgICAgZWxzZSBpZiAodmFsdWUtPmlzU1ZHQ29sb3IoKSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBOVUxMOyAvKiBUT0RPIC0gc2VlICMyMDU4NiAqLworI2lmZGVmIF9fVE9E
T19CVUdfMjA1ODZfXyAvKiBUT0RPIC0gc2VlICMyMDU4NiAqLworICAgICAgICByZXQgPSB3cmFw
U1ZHQ29sb3Ioc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2YWx1ZSkpOworI2VuZGlmCisgICAgfQor
I2VuZGlmCisgICAgZWxzZSBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAg
cmV0ID0gd3JhcENTU1ByaW1pdGl2ZVZhbHVlKHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4odmFsdWUpKTsKKyAgICBlbHNlCisgICAgICAgIHJldCA9IHdyYXBDU1NWYWx1ZSh2YWx1ZSk7
CisKKyAgICByZXR1cm4gR0RPTU9iamVjdENhY2hlOjpwdXRET01PYmplY3QodmFsdWUsIHJldCk7
Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
Z2RvbS9HRE9NRXZlbnRUYXJnZXRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvZ2RvbS9HRE9NRXZlbnRUYXJnZXRDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9nZG9tL0dET01FdmVudFRhcmdldEN1c3RvbS5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJp
IFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+CisgKiAgQ29weXJp
Z2h0IChDKSAyMDA4IEx1a2UgS2VubmV0aCBDYXNzb24gTGVpZ2h0b24gPGxrY2xAbGtjbC5uZXQ+
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcnRpbiBTb3RvIDxzb3RvQGZyZWVkZXNrdG9wLm9y
Zz4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKy8qIFBMRUFTRSBOT1RFOiB0aGlz
IGZpbGUgbmVlZHMgdG8gYmUga2VwdCB1cC10by1kYXRlIGluIEVYQUNUIGFjY29yZGFuY2UKKyAq
IHdpdGggSlNDdXN0b21FdmVudC5jcHAuICBhbnkgYWRkaXRpb25zIHRvIEpTQ3VzdG9tRXZlbnQu
Y3BwIHdpbGwgYWxzbworICogcmVxdWlyZSB0aGUgRVhBQ1Qgc2FtZSBhZGRpdGlvbnMsIGhlcmUu
CisgKgorICogRklYTUU6IHRoZXJlIHNob3VsZCBoYXZlIGJlZW4gbm8gbmVlZCB0byBkdXBsaWNh
dGUgdGhlIGZ1bmN0aW9uYWxpdHkgYmVoaW5kCisgKiBKU0RPTUJpbmRpbmcuY3BwIGFuZCBjYWxs
IGl0IEdET01CaW5kaW5nLmNwcCBpbiB0aGUgZmlyc3QgcGxhY2UsIGFuZAorICogdGhlcmUgc2hv
dWxkIGJlIG5vIG5lZWQgZm9yIHRoaXMgZmlsZTsgdGhlIGZ1bmN0aW9uYWxpdHkgc2hvdWxkIGJl
CisgKiBtZXJnZWQgaW50byBjb21tb24gY29kZSwgYXMgaXQgZG9lcyBleGFjdGx5IHRoZSBzYW1l
IHRoaW5nLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImdsaWItb2Jq
ZWN0LmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkdET01CaW5kaW5nLmgiCisj
aW5jbHVkZSAiR2RvbURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkdkb21ET01PYmplY3RQcml2YXRl
LmgiCisjaW5jbHVkZSAiR2RvbVhNTEh0dHBSZXF1ZXN0LmgiCisjaW5jbHVkZSAiR2RvbVhNTEh0
dHBSZXF1ZXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21YTUxIdHRwUmVxdWVzdFVwbG9hZC5o
IgorI2luY2x1ZGUgIkdkb21YTUxIdHRwUmVxdWVzdFVwbG9hZFByaXZhdGUuaCIKKyNpbmNsdWRl
ICJYTUxIdHRwUmVxdWVzdC5oIgorI2luY2x1ZGUgIlhNTEh0dHBSZXF1ZXN0VXBsb2FkLmgiCisK
KyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorI2luY2x1ZGUgIkRPTUFwcGxp
Y2F0aW9uQ2FjaGUuaCIKKyNpbmNsdWRlICJHZG9tRE9NQXBwbGljYXRpb25DYWNoZS5oIgorI2lu
Y2x1ZGUgIkdkb21ET01BcHBsaWNhdGlvbkNhY2hlUHJpdmF0ZS5oIgorI2VuZGlmCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworLyogZGVyaXZlZCBz
b3VyY2VzIGF1dG8tZ2VuZXJhdGVkICovCitncG9pbnRlciB0b0dET00oWE1MSHR0cFJlcXVlc3RV
cGxvYWQqIG9iaik7CisKK2dwb2ludGVyIHRvR0RPTShFdmVudFRhcmdldCogdGFyZ2V0KQorewor
ICAgIGlmICghdGFyZ2V0KQorICAgICAgICByZXR1cm4gTlVMTDsKKworI2lmZGVmIF9fVE9ET19C
VUdfMjA1ODZfXyAvKiBUT0RPIC0gc2VlICMyMDU4NiAqLworI2lmIEVOQUJMRShTVkcpCisgICAg
Ly8gU1ZHRWxlbWVudEluc3RhbmNlIHN1cHBvcnRzIGJvdGggdG9TVkdFbGVtZW50SW5zdGFuY2Ug
YW5kCisgICAgLy8gdG9Ob2RlIHNpbmNlIHNvIG11Y2ggbW91c2UgaGFuZGxpbmcgY29kZSBkZXBl
bmRzIG9uIHRvTm9kZQorICAgIC8vIHJldHVybmluZyBhIHZhbGlkIG5vZGUuCisgICAgU1ZHRWxl
bWVudEluc3RhbmNlKiBpbnN0YW5jZSA9IHRhcmdldC0+dG9TVkdFbGVtZW50SW5zdGFuY2UoKTsK
KyAgICBpZiAoaW5zdGFuY2UpCisgICAgICAgIHJldHVybiB0b0dET00oZXhlYywgaW5zdGFuY2Up
OworI2VuZGlmCisjZW5kaWYKKworICAgIE5vZGUqIG5vZGUgPSB0YXJnZXQtPnRvTm9kZSgpOwor
ICAgIGlmIChub2RlKQorICAgICAgICByZXR1cm4gdG9HRE9NKG5vZGUpOworCisgICAgaWYgKFhN
TEh0dHBSZXF1ZXN0KiB4aHIgPSB0YXJnZXQtPnRvWE1MSHR0cFJlcXVlc3QoKSkKKyAgICAgICAg
Ly8gWE1MSHR0cFJlcXVlc3QgaXMgYWx3YXlzIGNyZWF0ZWQgdmlhIEdET00sIHNvIHdlIGRvbid0
IG5lZWQKKyAgICAgICAgLy8gdG8gdXNlIGNhY2hlRE9NT2JqZWN0KCkgaGVyZS4KKyAgICAgICAg
cmV0dXJuIEdET01PYmplY3RDYWNoZTo6Z2V0RE9NT2JqZWN0KHhocik7CisKKyAgICBpZiAoWE1M
SHR0cFJlcXVlc3RVcGxvYWQqIHVwbG9hZCA9IHRhcmdldC0+dG9YTUxIdHRwUmVxdWVzdFVwbG9h
ZCgpKQorICAgICAgICByZXR1cm4gdG9HRE9NKHVwbG9hZCk7CisKKyNpZiBFTkFCTEUoT0ZGTElO
RV9XRUJfQVBQTElDQVRJT05TKQorICAgIGlmIChET01BcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSA9
IHRhcmdldC0+dG9ET01BcHBsaWNhdGlvbkNhY2hlKCkpCisgICAgICAgIC8vIERPTUFwcGxpY2F0
aW9uQ2FjaGUgaXMgYWx3YXlzIGNyZWF0ZWQgdmlhIEdET00sIHNvIHdlIGRvbid0CisgICAgICAg
IC8vIG5lZWQgdG8gdXNlIGNhY2hlRE9NT2JqZWN0KCkgaGVyZS4KKyAgICAgICAgcmV0dXJuIEdE
T01PYmplY3RDYWNoZTo6Z2V0RE9NT2JqZWN0KGNhY2hlKTsKKyNlbmRpZgorCisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2dkb20vR0RPTUVsZW1lbnRDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvZ2RvbS9HRE9NRWxlbWVudEN1c3RvbS5j
cHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2dkb20vR0RPTUVsZW1lbnRDdXN0
b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg5IEBACisvKgorICogIENvcHlyaWdodCAo
QykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtp
dC5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IEx1a2UgS2VubmV0aCBDYXNzb24gTGVpZ2h0
b24gPGxrY2xAbGtjbC5uZXQ+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcnRpbiBTb3RvIDxz
b3RvQGZyZWVkZXNrdG9wLm9yZz4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKy8q
IFBMRUFTRSBOT1RFOiB0aGlzIGZpbGUgbmVlZHMgdG8gYmUga2VwdCB1cC10by1kYXRlIGluIEVY
QUNUIGFjY29yZGFuY2UKKyAqIHdpdGggSlNFbGVtZW50Q3VzdG9tLmNwcC4gIGFueSBhZGRpdGlv
bnMgdG8gSlNFbGVtZW50Q3VzdG9tLmNwcCB3aWxsIGFsc28KKyAqIHJlcXVpcmUgdGhlIEVYQUNU
IHNhbWUgYWRkaXRpb25zLCBoZXJlLgorICoKKyAqIEZJWE1FOiB0aGVyZSBzaG91bGQgaGF2ZSBi
ZWVuIG5vIG5lZWQgdG8gZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGJlaGluZAorICogSlNE
T01CaW5kaW5nLmNwcCBhbmQgY2FsbCBpdCBHRE9NQmluZGluZy5jcHAgaW4gdGhlIGZpcnN0IHBs
YWNlLCBhbmQKKyAqIHRoZXJlIHNob3VsZCBiZSBubyBuZWVkIGZvciB0aGlzIGZpbGU7IHRoZSBm
dW5jdGlvbmFsaXR5IHNob3VsZCBiZQorICogbWVyZ2VkIGludG8gY29tbW9uIGNvZGUsIGFzIGl0
IGRvZXMgZXhhY3RseSB0aGUgc2FtZSB0aGluZy4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlICJnbGliLW9iamVjdC5oIgorI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNs
dWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkdET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiR2RvbURP
TU9iamVjdC5oIgorI2luY2x1ZGUgIkdkb21ET01PYmplY3RQcml2YXRlLmgiCisjaW5jbHVkZSAi
R2RvbUVsZW1lbnQuaCIKKyNpbmNsdWRlICJHZG9tRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRl
ICJHZG9tSFRNTEVsZW1lbnRXcmFwcGVyRmFjdG9yeS5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50
LmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2lmZGVmIF9fVE9ET19CVUdfMjA1ODZfXyAvKiBUT0RP
IC0gc2VlICMyMDU4NiAqLworI2luY2x1ZGUgIkdkb21TVkdFbGVtZW50V3JhcHBlckZhY3RvcnlQ
cml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbVNWR0VsZW1lbnRXcmFwcGVyRmFjdG9yeS5oIgorI2lu
Y2x1ZGUgIlNWR0VsZW1lbnQuaCIKKyNlbmRpZgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQg
eworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworZ3BvaW50ZXIgdG9HRE9NKEVsZW1lbnQq
IGVsZW1lbnQpCit7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm4gTlVMTDsKKwor
ICAgIC8vIHNob3VsZG4ndCBiZSBvbmU/IEFTU0VSVCghU2NyaXB0SW50ZXJwcmV0ZXI6OmdldERP
TU9iamVjdChlbGVtZW50KSk7CisgICAgZ3BvaW50ZXIgZ29iaiA9IEdET01PYmplY3RDYWNoZTo6
Z2V0RE9NT2JqZWN0KGVsZW1lbnQpOworICAgIGlmIChnb2JqKQorICAgICAgICByZXR1cm4gZ29i
ajsKKworICAgIGdwb2ludGVyIHJldDsKKyAgICBEb2N1bWVudCogZG9jID0gZWxlbWVudC0+ZG9j
dW1lbnQoKTsKKworICAgIGlmIChlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpCisgICAgICAgIHJl
dCA9IGNyZWF0ZUdkb21IVE1MRWxlbWVudFdyYXBwZXIoc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQq
PihlbGVtZW50KSk7CisjaWYgRU5BQkxFKFNWRykKKyAgICBlbHNlIGlmIChlbGVtZW50LT5pc1NW
R0VsZW1lbnQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOyAvKiBUT0RPIC0gc2VlICMy
MDU4NiAqLworI2lmZGVmIF9fVE9ET19CVUdfMjA1ODZfXyAvKiBUT0RPIC0gc2VlICMyMDU4NiAq
LworICAgICAgICByZXR1cm4gY3JlYXRlR2RvbVNWR0VsZW1lbnRXcmFwcGVyKHN0YXRpY19jYXN0
PFNWR0VsZW1lbnQqPihlbGVtZW50KSk7CisjZW5kaWYKKyAgICB9CisjZW5kaWYKKyAgICBlbHNl
CisgICAgICAgIHJldCA9IHdyYXBFbGVtZW50KGVsZW1lbnQpOworCisgICAgcmV0dXJuIEdET01P
YmplY3RDYWNoZTo6cHV0RE9NT2JqZWN0KGVsZW1lbnQsIHJldCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2dkb20vR0RPTVN0eWxlU2hlZXRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvZ2RvbS9HRE9NU3R5bGVT
aGVldEN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2dkb20vR0RP
TVN0eWxlU2hlZXRDdXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY4IEBACisvKgor
ICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcp
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdl
aW5pZyA8c2FtQHdlYmtpdC5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IEx1a2UgS2VubmV0
aCBDYXNzb24gTGVpZ2h0b24gPGxrY2xAbGtjbC5uZXQ+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4
IE1hcnRpbiBTb3RvIDxzb3RvQGZyZWVkZXNrdG9wLm9yZz4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICovCisKKy8qIFBMRUFTRSBOT1RFOiB0aGlzIGZpbGUgbmVlZHMgdG8gYmUga2VwdCB1
cC10by1kYXRlIGluIEVYQUNUIGFjY29yZGFuY2UKKyAqIHdpdGggSlNTdHlsZVNoZWV0Q3VzdG9t
LmNwcC4gIGFueSBhZGRpdGlvbnMgdG8gSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAorICogd2lsbCBh
bHNvIHJlcXVpcmUgdGhlIEVYQUNUIHNhbWUgYWRkaXRpb25zLCBoZXJlLgorICoKKyAqIEZJWE1F
OiB0aGVyZSBzaG91bGQgaGF2ZSBiZWVuIG5vIG5lZWQgdG8gZHVwbGljYXRlIHRoZSBmdW5jdGlv
bmFsaXR5IGJlaGluZAorICogSlNET01CaW5kaW5nLmNwcCBhbmQgY2FsbCBpdCBHRE9NQmluZGlu
Zy5jcHAgaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQKKyAqIHRoZXJlIHNob3VsZCBiZSBubyBuZWVk
IGZvciB0aGlzIGZpbGU7IHRoZSBmdW5jdGlvbmFsaXR5IHNob3VsZCBiZQorICogbWVyZ2VkIGlu
dG8gY29tbW9uIGNvZGUsIGFzIGl0IGRvZXMgZXhhY3RseSB0aGUgc2FtZSB0aGluZy4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJnbGliLW9iamVjdC5oIgorI2luY2x1
ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiR0RP
TUJpbmRpbmcuaCIKKyNpbmNsdWRlICJHZG9tQ1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIkdk
b21DU1NTdHlsZVNoZWV0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21ET01PYmplY3QuaCIKKyNp
bmNsdWRlICJHZG9tRE9NT2JqZWN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21TdHlsZVNoZWV0
UHJpdmF0ZS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK2dwb2ludGVyIHRvR0RPTShTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KQoreworICAgIGlm
ICghc3R5bGVTaGVldCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBncG9pbnRlciBnb2Jq
ID0gR0RPTU9iamVjdENhY2hlOjpnZXRET01PYmplY3Qoc3R5bGVTaGVldCk7CisgICAgaWYgKGdv
YmopCisgICAgICAgIHJldHVybiBnb2JqOworCisgICAgZ3BvaW50ZXIgcmV0OworICAgIGlmIChz
dHlsZVNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSkKKyAgICAgICAgcmV0ID0gd3JhcENTU1N0eWxl
U2hlZXQoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHN0eWxlU2hlZXQpKTsKKyAgICBlbHNl
CisgICAgICAgIHJldCA9IHdyYXBTdHlsZVNoZWV0KHN0eWxlU2hlZXQpOworCisgICAgcmV0dXJu
IEdET01PYmplY3RDYWNoZTo6cHV0RE9NT2JqZWN0KHN0eWxlU2hlZXQsIHJldCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2dkb20vR0RPTUhU
TUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2dk
b20vR0RPTUhUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
YmluZGluZ3MvZ2RvbS9HRE9NSFRNTENvbGxlY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDg2IEBACisvKgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBv
cnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+CisgKiAgQ29weXJpZ2h0
IChDKSAyMDA4IEx1a2UgS2VubmV0aCBDYXNzb24gTGVpZ2h0b24gPGxrY2xAbGtjbC5uZXQ+Cisg
KiAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcnRpbiBTb3RvIDxzb3RvQGZyZWVkZXNrdG9wLm9yZz4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKy8qIFBMRUFTRSBOT1RFOiB0aGlzIGZp
bGUgbmVlZHMgdG8gYmUga2VwdCB1cC10by1kYXRlIGluIEVYQUNUIGFjY29yZGFuY2UKKyAqIHdp
dGggSlNIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAuICBhbnkgYWRkaXRpb25zIHRvCisgKiBKU0hU
TUxDb2xsZWN0aW9uQ3VzdG9tLmNwcCB3aWxsIGFsc28gcmVxdWlyZSB0aGUgRVhBQ1Qgc2FtZSBh
ZGRpdGlvbnMsIGhlcmUuCisgKgorICogRklYTUU6IHRoZXJlIHNob3VsZCBoYXZlIGJlZW4gbm8g
bmVlZCB0byBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgYmVoaW5kCisgKiBKU0RPTUJpbmRp
bmcuY3BwIGFuZCBjYWxsIGl0IEdET01CaW5kaW5nLmNwcCBpbiB0aGUgZmlyc3QgcGxhY2UsIGFu
ZAorICogdGhlcmUgc2hvdWxkIGJlIG5vIG5lZWQgZm9yIHRoaXMgZmlsZTsgdGhlIGZ1bmN0aW9u
YWxpdHkgc2hvdWxkIGJlCisgKiBtZXJnZWQgaW50byBjb21tb24gY29kZSwgYXMgaXQgZG9lcyBl
eGFjdGx5IHRoZSBzYW1lIHRoaW5nLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgImdsaWItb2JqZWN0LmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkdE
T01CaW5kaW5nLmgiCisjaW5jbHVkZSAiR2RvbURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkdkb21E
T01PYmplY3RQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbUhUTUxDb2xsZWN0aW9uUHJpdmF0ZS5o
IgorI2luY2x1ZGUgIkdkb21IVE1MT3B0aW9uc0NvbGxlY3Rpb25Qcml2YXRlLmgiCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworZ3BvaW50ZXIgdG9H
RE9NKEhUTUxDb2xsZWN0aW9uKiBjb2xsZWN0aW9uKQoreworICAgIGlmICghY29sbGVjdGlvbikK
KyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBncG9pbnRlciBnb2JqID0gR0RPTU9iamVjdENh
Y2hlOjpnZXRET01PYmplY3QoY29sbGVjdGlvbik7CisKKyAgICBpZiAoZ29iaikKKyAgICAgICAg
cmV0dXJuIGdvYmo7CisKKyAgICBncG9pbnRlciByZXQ7CisgICAgc3dpdGNoIChjb2xsZWN0aW9u
LT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBTZWxlY3RPcHRpb25zOgorICAgICAgICAgICAgcmV0
ID0gd3JhcEhUTUxPcHRpb25zQ29sbGVjdGlvbihzdGF0aWNfY2FzdDxIVE1MT3B0aW9uc0NvbGxl
Y3Rpb24qPihjb2xsZWN0aW9uKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgLyogRklY
TUU6IHJhdGhlciB0aGFuIGRlbGV0ZSB0aGlzIGNvZGUgYW5kIG1ha2UgaXQgYXdrd2FyZCBmb3IK
KyAgICAgICAgICogd2hvbWV2ZXIgaGFzIHRvIGFkZCBpdCBiYWNrIGluIHRvIHdvcmsgb3V0IHdo
YXQgaXMgZ29pbmcgb24sCisgICAgICAgICAqIGluIG9yZGVyIHRvIGNvbXBseSB3aXRoIFdlYktp
dCBzdHlsZSBjb2Rpbmcgc3RhbmRhcmRzLCAjaWYgMAorICAgICAgICAgKiBpcyBub3QgdXNlZCBo
ZXJlLCBidXQgYSBsb25nLXdpbmRlZCAjaWZkZWYgd2hpY2ggd2lsbCBuZXZlcgorICAgICAgICAg
KiBleGlzdCBpcyBkZXBsb3llZCBpbnN0ZWFkLgorICAgICAgICAgKiAKKyAgICAgICAgICogc2Vl
IEpTSFRNTENvbGxlY3Rpb25DdXN0b206OnRvSlMsIHRoYXQgaXMgdGhlIGNvZGUgZnJvbSB3aGlj
aAorICAgICAgICAgKiB0aGlzIGVudGlyZSBmdW5jdGlvbiBoYXMgYmVlbiB2ZXJiYXRpbSBjdXQv
cGFzdGUuCisgICAgICAgICAqLworI2lmZGVmIF9fRklYTUVfQUREX0lOX0hUTUxDT0xMRUNUSU9O
X0RPQ19BTExfU1VQUE9SVF9MQVRFUl9fCisgICAgICAgIGNhc2UgSFRNTENvbGxlY3Rpb246OkRv
Y0FsbDoKKyAgICAgICAgICAgIHJldCA9IHdyYXBIVE1MQ29sbGVjdGlvbihzdGF0aWNfY2FzdDxI
VE1MQ29sbGVjdGlvbio+KGNvbGxlY3Rpb24pKTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlm
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXQgPSB3cmFwSFRNTENvbGxlY3Rpb24o
c3RhdGljX2Nhc3Q8SFRNTENvbGxlY3Rpb24qPihjb2xsZWN0aW9uKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gR0RPTU9iamVjdENhY2hlOjpwdXRET01PYmplY3Qo
Y29sbGVjdGlvbiwgcmV0KTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwo=
</data>
<flag name="review"
          id="18447"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34468</attachid>
            <date>2009-08-10 08:21:00 -0700</date>
            <delta_ts>2009-08-12 13:45:45 -0700</delta_ts>
            <desc>uploaded</desc>
            <filename>patch.27426.txt</filename>
            <type>text/plain</type>
            <size>9195</size>
            <attacher name="Gour">gour</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Njg5MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDAgKzEsMTAgQEAKKzIwMDktMDgtMTAgIEx1a2UgS2VubmV0aCBDYXNzb24gTGVpZ2h0b24g
IDxsa2NsQGxrY2wubmV0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzQyNgor
CisgICAgICAgICogYmluZGluZ3Mvd2Via2l0L1dFQktJVEJpbmRpbmcuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKiBiaW5kaW5ncy93ZWJraXQvV0VCS0lUQmluZGluZy5oOiBBZGRlZC4KKworCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3dlYmtpdC9XRUJLSVRCaW5kaW5nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3dlYmtpdC9XRUJLSVRCaW5kaW5nLmNwcAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvYmluZGluZ3Mvd2Via2l0L1dFQktJVEJpbmRpbmcuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJy
aSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3JnPgorICogIENvcHly
aWdodCAoQykgMjAwOCBMdWtlIEtlbm5ldGggQ2Fzc29uIExlaWdodG9uIDxsa2NsQGxrY2wubmV0
PgorICogIENvcHlyaWdodCAoQykgMjAwOCBNYXJ0aW4gU290byA8c290b0BmcmVlZGVza3RvcC5v
cmc+CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisvKiAKKyAqIEZJWE1FOiB0aGVy
ZSBzaG91bGQgaGF2ZSBiZWVuIG5vIG5lZWQgdG8gZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5
IGJlaGluZAorICogSlNET01CaW5kaW5nLmNwcCBhbmQgY2FsbCBpdCBXRUJLSVRCaW5kaW5nLmNw
cCBpbiB0aGUgZmlyc3QgcGxhY2UuCisgKiBUaGVyZSBzaG91bGQgYmUgbm8gbmVlZCBmb3IgdGhp
cyBmaWxlOyB0aGUgZnVuY3Rpb25hbGl0eSBzaG91bGQgYmUKKyAqIG1lcmdlZCBpbnRvIGNvbW1v
biBjb2RlLCBhcyBpdCBkb2VzIGV4YWN0bHkgdGhlIHNhbWUgdGhpbmcuCisgKgorICogaG93ZXZl
ciwgaXQgaXMgYmVpbmcgYWRkZWQgbmVhci12ZXJiYXRpbS1jdXQtcGFzdGUgYmVjYXVzZSBhKSB0
aGF0IGlzCisgKiBlYXNpZXIgYikgaXQncyBleGFjdGx5IHdoYXQgdGhlIG9iamVjdGl2ZS1jIGJp
bmRpbmdzIGRvCisgKgorICovCisKKy8vIGdjYyAzLnggY2FuJ3QgaGFuZGxlIGluY2x1ZGluZyB0
aGUgSGFzaE1hcCBwb2ludGVyIHNwZWNpYWxpemF0aW9uCisvLyBpbiB0aGlzIGZpbGUKKyNpZiBk
ZWZpbmVkIF9fR05VQ19fICYmICFkZWZpbmVkIF9fR0xJQkNYWF9fIC8vIGxlc3MgdGhhbiBnY2Mg
My40CisjZGVmaW5lIEhBU0hfTUFQX1BUUl9TUEVDX1dPUktBUk9VTkQgMQorI2VuZGlmCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImdsaWItb2JqZWN0LmgiCisjaW5jbHVkZSAi
Q1N0cmluZy5oIgorI2luY2x1ZGUgIldlYmtpdEF0dHJQcml2YXRlLmgiCisjaW5jbHVkZSAiV0VC
S0lUQmluZGluZy5oIgorI2luY2x1ZGUgIldlYmtpdENEQVRBU2VjdGlvblByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJraXRDb21tZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYmtpdERvY3VtZW50
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYmtpdERvY3VtZW50VHlwZVByaXZhdGUuaCIKKyNpbmNs
dWRlICJXZWJraXREb2N1bWVudEZyYWdtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYmtpdERP
TU9iamVjdC5oIgorI2luY2x1ZGUgIldlYmtpdERPTU9iamVjdFByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJraXRIVE1MRWxlbWVudFdyYXBwZXJGYWN0b3J5LmgiCisjaW5jbHVkZSAiV2Via2l0RWxl
bWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJraXRFbnRpdHlQcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2Via2l0RW50aXR5UmVmZXJlbmNlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYmtpdE5vZGVQ
cml2YXRlLmgiCisjaW5jbHVkZSAiV2Via2l0Tm90YXRpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAi
V2Via2l0UHJvY2Vzc2luZ0luc3RydWN0aW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYmtpdFRl
eHRQcml2YXRlLmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCit0eXBlZGVmIEhhc2hNYXA8dm9pZCos
IGdwb2ludGVyPiBET01PYmplY3RNYXA7CisKK3N0YXRpYyBET01PYmplY3RNYXAmIGRvbU9iamVj
dHMoKQoreworICAgIHN0YXRpYyBET01PYmplY3RNYXAgc3RhdGljRE9NT2JqZWN0czsKKyAgICBy
ZXR1cm4gc3RhdGljRE9NT2JqZWN0czsKK30KKworZ3BvaW50ZXIgV0VCS0lUT2JqZWN0Q2FjaGU6
OmdldERPTU9iamVjdCh2b2lkKiBvYmplY3RIYW5kbGUpCit7CisgICAgZ3BvaW50ZXIgcmV0ID0g
ZG9tT2JqZWN0cygpLmdldChvYmplY3RIYW5kbGUpOworICAgIHJldHVybiByZXQ7Cit9CisKK2dw
b2ludGVyIFdFQktJVE9iamVjdENhY2hlOjpwdXRET01PYmplY3Qodm9pZCogb2JqZWN0SGFuZGxl
LCBncG9pbnRlciB3cmFwcGVyKQoreworICAgIGRvbU9iamVjdHMoKS5zZXQob2JqZWN0SGFuZGxl
LCB3cmFwcGVyKTsKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKwordm9pZCBXRUJLSVRPYmplY3RD
YWNoZTo6Zm9yZ2V0RE9NT2JqZWN0KHZvaWQqIG9iamVjdEhhbmRsZSkKK3sKKyAgICBkb21PYmpl
Y3RzKCkudGFrZShvYmplY3RIYW5kbGUpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlV3Jh
cHBlcihOb2RlKiBub2RlKTsKKworZ3BvaW50ZXIgdG9XRUJLSVROZXdseUNyZWF0ZWQoTm9kZSog
bm9kZSkKK3sKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0
dXJuIGNyZWF0ZVdyYXBwZXIobm9kZSk7Cit9CisKK2dwb2ludGVyIHRvV0VCS0lUKE5vZGUqIG5v
ZGUpCit7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGdwb2lu
dGVyIHJldCA9IFdFQktJVE9iamVjdENhY2hlOjpnZXRET01PYmplY3Qobm9kZSk7CisgICAgaWYg
KHJldCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldHVybiBjcmVhdGVXcmFwcGVyKG5v
ZGUpOworfQorCitzdGF0aWMgQUxXQVlTX0lOTElORSBncG9pbnRlciBjcmVhdGVXcmFwcGVyKE5v
ZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUpOworICAgIEFTU0VSVCghU2NyaXB0SW50ZXJw
cmV0ZXI6OmdldERPTU9iamVjdChub2RlKSk7CisKKyAgICBEb2N1bWVudCogZG9jID0gbm9kZS0+
ZG9jdW1lbnQoKTsKKyAgICBncG9pbnRlciByZXQgPSBOVUxMOworCisgICAgc3dpdGNoIChub2Rl
LT5ub2RlVHlwZSgpKSB7CisgICAgICAgIGNhc2UgTm9kZTo6RUxFTUVOVF9OT0RFOgorICAgICAg
ICAgICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICByZXQgPSBj
cmVhdGVXZWJraXRIVE1MRWxlbWVudFdyYXBwZXIoc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihu
b2RlKSk7CisjaWYgRU5BQkxFKFNWRykKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmlzU1ZH
RWxlbWVudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOyAvKiBYWFggVE9ETyAtIHNl
ZSAjMjA1ODYgKi8KKyNpZmRlZiBfX1RPRE9fQlVHXzIwNTg2X18gLyogWFhYIFRPRE8gLSBzZWUg
IzIwNTg2ICovCisgICAgICAgICAgICAgICAgcmV0ID0gY3JlYXRlV0VCS0lUU1ZHRWxlbWVudFdy
YXBwZXIoc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUpKTsKKyNlbmRpZgorI2VuZGlmCisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0ID0gd3JhcEVsZW1lbnQoc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KG5vZGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IE5vZGU6OkFUVFJJQlVURV9OT0RFOgorICAgICAgICAgICAgcmV0ID0gd3JhcEF0dHIoc3RhdGlj
X2Nhc3Q8QXR0cio+KG5vZGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5v
ZGU6OlRFWFRfTk9ERToKKyAgICAgICAgICAgIHJldCA9IHdyYXBUZXh0KHN0YXRpY19jYXN0PFRl
eHQqPihub2RlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOb2RlOjpDREFU
QV9TRUNUSU9OX05PREU6CisgICAgICAgICAgICByZXQgPSB3cmFwQ0RBVEFTZWN0aW9uKHN0YXRp
Y19jYXN0PENEQVRBU2VjdGlvbio+KG5vZGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIE5vZGU6OkVOVElUWV9OT0RFOgorICAgICAgICAgICAgcmV0ID0gd3JhcEVudGl0eShz
dGF0aWNfY2FzdDxFbnRpdHkqPihub2RlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU6CisgICAgICAgICAgICByZXQg
PSB3cmFwUHJvY2Vzc2luZ0luc3RydWN0aW9uKHN0YXRpY19jYXN0PFByb2Nlc3NpbmdJbnN0cnVj
dGlvbio+KG5vZGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5vZGU6OkNP
TU1FTlRfTk9ERToKKyAgICAgICAgICAgIHJldCA9IHdyYXBDb21tZW50KHN0YXRpY19jYXN0PENv
bW1lbnQqPihub2RlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOb2RlOjpE
T0NVTUVOVF9OT0RFOgorICAgICAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBjYWNoZSB0aGUg
ZG9jdW1lbnQgaXRzZWxmIGluIHRoZSBwZXItZG9jdW1lbnQgZGljdGlvbmFyeQorICAgICAgICAg
ICAgcmV0dXJuIHRvV0VCS0lUKHN0YXRpY19jYXN0PERvY3VtZW50Kj4obm9kZSkpOworICAgICAg
ICBjYXNlIE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERToKKyAgICAgICAgICAgIHJldCA9IHdyYXBE
b2N1bWVudFR5cGUoc3RhdGljX2Nhc3Q8RG9jdW1lbnRUeXBlKj4obm9kZSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm9kZTo6Tk9UQVRJT05fTk9ERToKKyAgICAgICAgICAg
IHJldCA9IHdyYXBOb3RhdGlvbihzdGF0aWNfY2FzdDxOb3RhdGlvbio+KG5vZGUpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6
CisgICAgICAgICAgICByZXQgPSB3cmFwRG9jdW1lbnRGcmFnbWVudChzdGF0aWNfY2FzdDxEb2N1
bWVudEZyYWdtZW50Kj4obm9kZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Tm9kZTo6RU5USVRZX1JFRkVSRU5DRV9OT0RFOgorICAgICAgICAgICAgcmV0ID0gd3JhcEVudGl0
eVJlZmVyZW5jZShzdGF0aWNfY2FzdDxFbnRpdHlSZWZlcmVuY2UqPihub2RlKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldCA9IHdyYXBOb2Rl
KG5vZGUpOworICAgIH0KKworICAgIHJldHVybiBXRUJLSVRPYmplY3RDYWNoZTo6cHV0RE9NT2Jq
ZWN0KG5vZGUsIHJldCk7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3Mvd2Via2l0L1dFQktJVEJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3dlYmtpdC9XRUJLSVRCaW5kaW5nLmgJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3dlYmtpdC9XRUJLSVRCaW5kaW5nLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNzQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykg
MjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDggTHVrZSBLZW5uZXRoIENhc3NvbiBMZWlnaHRvbiA8bGtjbEBsa2NsLm5ldD4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDggTWFydGluIFNvdG8gPHNvdG9AZnJlZWRlc2t0b3Aub3JnPgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBXZWJraXRET01CaW5kaW5nX2gKKyNk
ZWZpbmUgV2Via2l0RE9NQmluZGluZ19oCisKKyNpbmNsdWRlICJDU1NSdWxlLmgiCisjaW5jbHVk
ZSAiQ1NTVmFsdWUuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIK
KyNpbmNsdWRlICJFdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYmtpdE5vZGUuaCIKKyNpbmNs
dWRlICJXZWJraXROb2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCisj
aW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlN0eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJUZXh0
LmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworICAgIGNsYXNzIEF0b21pY1N0cmluZzsKKyAgICBjbGFzcyBEb2N1bWVudDsKKyAgICBjbGFz
cyBFdmVudDsKKyAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBLVVJMOworICAgIGNsYXNzIE5v
ZGU7CisgICAgY2xhc3MgU3RyaW5nOworCisjaWYgRU5BQkxFKFNWRykKKyAgICBjbGFzcyBTVkdF
bGVtZW50OworI2VuZGlmCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFjZSBXZWJL
aXQgeworICAgIGdwb2ludGVyIHRvV0VCS0lUKFdlYkNvcmU6OkNTU1J1bGUqKTsKKyAgICBncG9p
bnRlciB0b1dFQktJVChXZWJDb3JlOjpDU1NWYWx1ZSopOworICAgIGdwb2ludGVyIHRvV0VCS0lU
KFdlYkNvcmU6OkRvY3VtZW50Kik7CisgICAgZ3BvaW50ZXIgdG9XRUJLSVQoV2ViQ29yZTo6RWxl
bWVudCopOworICAgIGdwb2ludGVyIHRvV0VCS0lUKFdlYkNvcmU6OkV2ZW50Kik7CisgICAgZ3Bv
aW50ZXIgdG9XRUJLSVQoV2ViQ29yZTo6RXZlbnRUYXJnZXQqKTsKKyAgICBncG9pbnRlciB0b1dF
QktJVChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbiopOworICAgIGdwb2ludGVyIHRvV0VCS0lUKFdl
YkNvcmU6Ok5vZGUqKTsKKyAgICBncG9pbnRlciB0b1dFQktJVChXZWJDb3JlOjpTdHlsZVNoZWV0
Kik7CisgICAgZ3BvaW50ZXIgdG9XRUJLSVQoV2ViQ29yZTo6VGV4dCopOworCisgICAgY2xhc3Mg
V0VCS0lUT2JqZWN0Q2FjaGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIGdwb2ludGVy
IGdldERPTU9iamVjdCh2b2lkICopOworICAgICAgICBzdGF0aWMgZ3BvaW50ZXIgcHV0RE9NT2Jq
ZWN0KHZvaWQgKiwgZ3BvaW50ZXIpOworICAgICAgICBzdGF0aWMgdm9pZCBmb3JnZXRET01PYmpl
Y3Qodm9pZCAqKTsKKyAgICB9OworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBX
ZWJraXRET01CaW5kaW5nX2gK
</data>
<flag name="review"
          id="18852"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>