<?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>103797</bug_id>
          
          <creation_ts>2012-11-30 18:18:28 -0800</creation_ts>
          <short_desc>[chromium] Minimize memcpy for encoded image data in ImageFrameGenerator</short_desc>
          <delta_ts>2012-12-12 13:30:30 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>99790</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hin-Chung Lam">hclam</reporter>
          <assigned_to name="Hin-Chung Lam">hclam</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>levin+threading</cc>
    
    <cc>nduca</cc>
    
    <cc>qinmin</cc>
    
    <cc>senorblanco</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>780604</commentid>
    <comment_count>0</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-11-30 18:18:28 -0800</bug_when>
    <thetext>The logic in ImageFrameGenerator regarding encoded image data is as follows:

1. When new data is received on the main thread, DeferredImageDecoder sets new data to ImageFrameGenerator.
2. ImageFrameGenerator makes a new copy of the data and keeps the reference.
3. When there is an image decoding request from LazyDecodingPixelRef, ImageFrameGenerator makes another copy of the data and take it for image decoding.

The entire process has too many unnecessary memcpys, it should be cleaned up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786405</commentid>
    <comment_count>1</comment_count>
      <attachid>178331</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-12-07 20:53:31 -0800</bug_when>
    <thetext>Created attachment 178331
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789008</commentid>
    <comment_count>2</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-12-11 17:09:34 -0800</bug_when>
    <thetext>senorblanco, jamesr: Comments? This is the last big-ish change that is required for deferred image decoding. After this it will on par with existing main thread decoding stack.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789455</commentid>
    <comment_count>3</comment_count>
      <attachid>178331</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-12-12 04:38:14 -0800</bug_when>
    <thetext>Comment on attachment 178331
Patch

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

Looks good.  r=me

&gt; Source/WebCore/platform/graphics/chromium/ThreadSafeDataTransport.h:39
&gt; +// The purpose of this class is to allow transferring data stored in

Grammar nit:  &quot;transferring&quot; -&gt; &quot;the transfer of&quot;

&gt; Source/WebCore/platform/graphics/chromium/ThreadSafeDataTransport.h:41
&gt; +// SharedBuffer in a thread-safe manner. At the same time minimizing
&gt; +// memory copy and thread contention.

Grammar nit:  this is not a sentence.  I&apos;d just join it to the previous one:  &quot;.. thread-safe manner, and to minimize memory copies and thread contention.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789747</commentid>
    <comment_count>4</comment_count>
      <attachid>179090</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-12-12 11:36:41 -0800</bug_when>
    <thetext>Created attachment 179090
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789849</commentid>
    <comment_count>5</comment_count>
      <attachid>179090</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-12 13:30:27 -0800</bug_when>
    <thetext>Comment on attachment 179090
Patch for landing

Clearing flags on attachment: 179090

Committed r137508: &lt;http://trac.webkit.org/changeset/137508&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789851</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-12 13:30:30 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178331</attachid>
            <date>2012-12-07 20:53:31 -0800</date>
            <delta_ts>2012-12-12 11:36:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103797-20121207205055.patch</filename>
            <type>text/plain</type>
            <size>23495</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3MDA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzE2MDI4NWY5M2FlYjQ4
MDU2YTlkYWQ5YjVkY2RmMjlmMmZmY2UxMS4uOGI5NmU4NmFiYmQzMGY5NWE2ZGNkOWRkZjI3YWNk
ZWEzZWU1NGJkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ4IEBACiAyMDEyLTEyLTA3ICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgW2Nocm9taXVtXSBNaW5pbWl6
ZSBtZW1jcHkgZm9yIGVuY29kZWQgaW1hZ2UgZGF0YSBpbiBJbWFnZUZyYW1lR2VuZXJhdG9yCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM3OTcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBhIG5l
dyBjbGFzcyBUaHJlYWRTYWZlRGF0YVRyYW5zcG9ydCB0byBoZWxwIHRyYW5zcG9ydGluZyBkYXRh
IGluCisgICAgICAgIFNoYXJlZEJ1ZmZlciBmcm9tIG9uZSB0aHJlYWQgdG8gYW5vdGhlci4gVGhp
cyBjbGFzcyBpcyBkZXNpZ25lZCB0byBtaW5pbWl6ZQorICAgICAgICB0aHJlYWQgY29udGVudGlv
biBhbmQgbWVtb3J5IGNvcHkuCisKKyAgICAgICAgSXQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgYSBk
YXRhIHF1ZXVlLiBOZXcgZGF0YSBzZWdtZW50cyBhcmUgY29waWVkIGludG8KKyAgICAgICAgdGhp
cyBxdWV1ZS4gVGhlIHF1ZXVlIGlzIHRoZW4gY29uc29saWRhdGVkIHdpdGggZXhpc3RpbmcgZGF0
YSB3aGVuIHVzZXIKKyAgICAgICAgcmVxdWVzdHMgYWNjZXNzIHRvIHRoZSBmaW5hbCBTaGFyZWRC
dWZmZXIuCisKKyAgICAgICAgTWVtb3J5IGlzIGNvcGllZCBpbnRvIGFuZCBvdXQgb2YgdGhlIHF1
ZXVlIGJ1dCB0aGlzIGFwcHJvYWNoIGF2b2lkCisgICAgICAgIGNvcHlpbmcgdGhlIGVudGlyZSBT
aGFyZWRCdWZmZXIuCisKKyAgICAgICAgSW1hZ2VGcmFtZUdlbmVyYXRvciBpcyBub3cgdXNpbmcg
dGhpcyBjbGFzcyBmb3IgZGF0YSB0cmFuc3BvcnQgYmV0d2VlbgorICAgICAgICB0aHJlYWRzLgor
CisgICAgICAgIFVuaXQgdGVzdHMgaW4gVGhyZWFkU2FmZURhdGFUcmFuc3BvcnRUZXN0LiBBbHNv
IGV4aXN0aW5nIEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0IHBhc3Nlcy4KKworICAgICAgICAqIFdl
YkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZy
YW1lR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6
OkltYWdlRnJhbWVHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVy
YXRvcjo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjp0
cnlUb1Jlc3VtZURlY29kZUFuZFNjYWxlKToKKyAgICAgICAgQWRkZWQgbG9naWMgdG8gc2tpcCBk
ZWNvZGluZyBpZiB0aGVyZSdzIG5vIG5ldyBkYXRhLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZUdlbmVyYXRvcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmg6CisgICAgICAgIChJbWFnZUZyYW1lR2VuZXJhdG9y
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaHJlYWRTYWZlRGF0YVRy
YW5zcG9ydC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUaHJlYWRTYWZlRGF0YVRyYW5zcG9ydDo6VGhyZWFkU2FmZURhdGFUcmFuc3BvcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6VGhyZWFkU2FmZURhdGFUcmFuc3BvcnQ6On5UaHJlYWRTYWZlRGF0YVRy
YW5zcG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRTYWZlRGF0YVRyYW5zcG9ydDo6c2V0
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRTYWZlRGF0YVRyYW5zcG9ydDo6ZGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRTYWZlRGF0YVRyYW5zcG9ydDo6aGFzTmV3RGF0YSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGhyZWFkU2FmZURhdGFUcmFu
c3BvcnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFRocmVhZFNhZmVE
YXRhVHJhbnNwb3J0KToKKworMjAxMi0xMi0wNyAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0u
b3JnPgorCiAgICAgICAgIFtjaHJvbWl1bV0gSW1hZ2VEZWNvZGluZ1N0b3JlIHNob3VsZCBjYWNo
ZSBwYXJ0aWFsbHkgZGVjb2RlZCBpbWFnZXMKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwMzc5NgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDg3NTEzMTg1Y2I0YjI1YzVjMjQyZWFmNWNjNjhjMWRkOGJmMDZmYWIuLjA4YmVlMTQzZjc4MThm
M2E3YTVkZGZlNzNjMTQwODBhNDY0OTA5NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDUgKzEsMjcgQEAKIDIwMTItMTItMDcgIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9y
Zz4KIAorICAgICAgICBbY2hyb21pdW1dIE1pbmltaXplIG1lbWNweSBmb3IgZW5jb2RlZCBpbWFn
ZSBkYXRhIGluIEltYWdlRnJhbWVHZW5lcmF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzc5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHVuaXQgdGVzdHMgZm9yIFRocmVhZFNhZmVEYXRh
VHJhbnNwb3J0LgorCisgICAgICAgIEFkZGVkIHVuaXQgdGVzdHMgZm9yIEltYWdlRnJhbWVHZW5l
cmF0b3IgdG8gdGVzdCBiZWhhdmlvciB3aXRoIGFuZCB3aXRob3V0CisgICAgICAgIG5ldyBkYXRh
LgorCisgICAgICAgIE5ldyB0ZXN0czoKKyAgICAgICAgVGhyZWFkU2FmZURhdGFUcmFuc3BvcnRU
ZXN0Lmhhc05ld0RhdGEKKyAgICAgICAgVGhyZWFkU2FmZURhdGFUcmFuc3BvcnRUZXN0LnNldERh
dGEKKyAgICAgICAgSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QuY2FjaGVNaXNzV2l0aEluY29tcGxl
dGVEZWNvZGVOb05ld0RhdGEKKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRl
c3RzL1RocmVhZFNhZmVEYXRhVHJhbnNwb3J0VGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKworMjAxMi0xMi0wNyAgQWxwaGEgTGFt
ICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFtjaHJvbWl1bV0gSW1hZ2VEZWNvZGlu
Z1N0b3JlIHNob3VsZCBjYWNoZSBwYXJ0aWFsbHkgZGVjb2RlZCBpbWFnZXMKICAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzc5NgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggZmU3ZDVmMDc5NjE3NTMxN2U0MWZjMDk4Zjg5ZDg4NzQ5YTlkMjk5Ni4uYjhhNDBm
MzdlYTQ5ZGIxZjE4MzVlOTczMWIwNzg4NWQ4Yzg4YTE3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAt
MzgzNiw2ICszODM2LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9TY2FsZWRJbWFnZUZyYWdtZW50LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vU2NhbGVkSW1hZ2VGcmFnbWVudC5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUNocm9taXVtV2luLmNwcCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGhyZWFkU2FmZURhdGFUcmFuc3Bv
cnQuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaHJlYWRT
YWZlRGF0YVRyYW5zcG9ydC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UcmFuc3BhcmVuY3lXaW4uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVH
ZW5lcmF0b3IuY3BwCmluZGV4IDJjMmExZDJiMGI4NGI2ZmI0ZTNjNDE1NjM0YzBmZjViYmQ1YTY4
MjguLjNjOThkZjc2ZjRjZDc0MjFjOWIzYjUxY2U0MWUyY2Q0ODFjMmZlOWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5l
cmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwCkBAIC00NywxMCArNDcsOSBAQCBza2lhOjpJbWFnZU9w
ZXJhdGlvbnM6OlJlc2l6ZU1ldGhvZCByZXNpemVNZXRob2QoKQogCiBJbWFnZUZyYW1lR2VuZXJh
dG9yOjpJbWFnZUZyYW1lR2VuZXJhdG9yKGNvbnN0IFNrSVNpemUmIGZ1bGxTaXplLCBQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiAgICAgOiBtX2Z1
bGxTaXplKGZ1bGxTaXplKQotICAgICwgbV9hbGxEYXRhUmVjZWl2ZWQoZmFsc2UpCiAgICAgLCBt
X2RlY29kZUZhaWxlZEFuZEVtcHR5KGZhbHNlKQogewotICAgIHNldERhdGEoZGF0YSwgYWxsRGF0
YVJlY2VpdmVkKTsKKyAgICBzZXREYXRhKGRhdGEuZ2V0KCksIGFsbERhdGFSZWNlaXZlZCk7CiB9
CiAKIEltYWdlRnJhbWVHZW5lcmF0b3I6On5JbWFnZUZyYW1lR2VuZXJhdG9yKCkKQEAgLTY0LDEy
ICs2Myw3IEBAIEltYWdlRnJhbWVHZW5lcmF0b3I6On5JbWFnZUZyYW1lR2VuZXJhdG9yKCkKIAog
dm9pZCBJbWFnZUZyYW1lR2VuZXJhdG9yOjpzZXREYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVy
PiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKIHsKLSAgICAvLyBGSVhNRTogRG9pbmcgYSBm
dWxsIGNvcHkgaXMgZXhwZW5zaXZlLCBpbnN0ZWFkIGNvcHkgb25seSBuZXcgZGF0YS4KLSAgICBS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhQ29weSA9IGRhdGEtPmNvcHkoKTsKLQotICAgIE11dGV4
TG9ja2VyIGxvY2sobV9kYXRhTXV0ZXgpOwotICAgIG1fZGF0YSA9IGRhdGFDb3B5OwotICAgIG1f
YWxsRGF0YVJlY2VpdmVkID0gYWxsRGF0YVJlY2VpdmVkOworICAgIG1fZGF0YS5zZXREYXRhKGRh
dGEuZ2V0KCksIGFsbERhdGFSZWNlaXZlZCk7CiB9CiAKIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21l
bnQqIEltYWdlRnJhbWVHZW5lcmF0b3I6OmRlY29kZUFuZFNjYWxlKGNvbnN0IFNrSVNpemUmIHNj
YWxlZFNpemUpCkBAIC0xNDEsMTQgKzEzNSwxNSBAQCBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50
KiBJbWFnZUZyYW1lR2VuZXJhdG9yOjp0cnlUb1Jlc3VtZURlY29kZUFuZFNjYWxlKGNvbnN0CiAg
ICAgICAgIHJldHVybiAwOwogICAgIEFTU0VSVChjYWNoZWREZWNvZGVyKTsKIAotICAgIE93blB0
cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBmdWxsU2l6ZUltYWdlID0gZGVjb2RlKCZjYWNoZWREZWNv
ZGVyKTsKLQotICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGNhY2hlZEZ1bGxTaXplSW1h
Z2UgPSBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPm92ZXJ3cml0ZUFuZExvY2tDYWNo
ZSgKLSAgICAgICAgdGhpcywgY2FjaGVkSW1hZ2UsIGZ1bGxTaXplSW1hZ2UucmVsZWFzZSgpKTsK
KyAgICBpZiAobV9kYXRhLmhhc05ld0RhdGEoKSkgeworICAgICAgICAvLyBPbmx5IGRvIGRlY29k
aW5nIGlmIHRoZXJlIGlzIG5ldyBkYXRhLgorICAgICAgICBPd25QdHI8U2NhbGVkSW1hZ2VGcmFn
bWVudD4gZnVsbFNpemVJbWFnZSA9IGRlY29kZSgmY2FjaGVkRGVjb2Rlcik7CisgICAgICAgIGNh
Y2hlZEltYWdlID0gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5vdmVyd3JpdGVBbmRM
b2NrQ2FjaGUodGhpcywgY2FjaGVkSW1hZ2UsIGZ1bGxTaXplSW1hZ2UucmVsZWFzZSgpKTsKKyAg
ICB9CiAKICAgICBpZiAobV9mdWxsU2l6ZSA9PSBzY2FsZWRTaXplKQotICAgICAgICByZXR1cm4g
Y2FjaGVkRnVsbFNpemVJbWFnZTsKLSAgICByZXR1cm4gdHJ5VG9TY2FsZShjYWNoZWRGdWxsU2l6
ZUltYWdlLCBzY2FsZWRTaXplKTsKKyAgICAgICAgcmV0dXJuIGNhY2hlZEltYWdlOworICAgIHJl
dHVybiB0cnlUb1NjYWxlKGNhY2hlZEltYWdlLCBzY2FsZWRTaXplKTsKIH0KIAogY29uc3QgU2Nh
bGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VGcmFtZUdlbmVyYXRvcjo6dHJ5VG9EZWNvZGVBbmRTY2Fs
ZShjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKQpAQCAtMTc5LDEzICsxNzQsMTMgQEAgY29uc3Qg
U2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VGcmFtZUdlbmVyYXRvcjo6dHJ5VG9EZWNvZGVBbmRT
Y2FsZShjb25zdCBTa0lTaXoKIFBhc3NPd25QdHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4gSW1hZ2VG
cmFtZUdlbmVyYXRvcjo6ZGVjb2RlKEltYWdlRGVjb2RlcioqIGRlY29kZXIpCiB7CiAgICAgQVNT
RVJUKGRlY29kZXIpOwotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGE7CisgICAgU2hhcmVk
QnVmZmVyKiBkYXRhID0gMDsKICAgICBib29sIGFsbERhdGFSZWNlaXZlZCA9IGZhbHNlOwotICAg
IHByZXBhcmVEYXRhKCZkYXRhLCAmYWxsRGF0YVJlY2VpdmVkKTsKKyAgICBtX2RhdGEuZGF0YSgm
ZGF0YSwgJmFsbERhdGFSZWNlaXZlZCk7CiAKICAgICAvLyBUcnkgdG8gY3JlYXRlIGFuIEltYWdl
RGVjb2RlciBpZiB3ZSBhcmUgbm90IGdpdmVuIG9uZS4KICAgICBpZiAoISpkZWNvZGVyKSB7Ci0g
ICAgICAgICpkZWNvZGVyID0gSW1hZ2VEZWNvZGVyOjpjcmVhdGUoKmRhdGEuZ2V0KCksIEltYWdl
U291cmNlOjpBbHBoYVByZW11bHRpcGxpZWQsIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJv
ZmlsZUFwcGxpZWQpOworICAgICAgICAqZGVjb2RlciA9IEltYWdlRGVjb2Rlcjo6Y3JlYXRlKCpk
YXRhLCBJbWFnZVNvdXJjZTo6QWxwaGFQcmVtdWx0aXBsaWVkLCBJbWFnZVNvdXJjZTo6R2FtbWFB
bmRDb2xvclByb2ZpbGVBcHBsaWVkKTsKIAogICAgICAgICBpZiAoISpkZWNvZGVyICYmIG1faW1h
Z2VEZWNvZGVyRmFjdG9yeSkKICAgICAgICAgICAgICpkZWNvZGVyID0gbV9pbWFnZURlY29kZXJG
YWN0b3J5LT5jcmVhdGUoKS5sZWFrUHRyKCk7CkBAIC0xOTQsNyArMTg5LDcgQEAgUGFzc093blB0
cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBJbWFnZUZyYW1lR2VuZXJhdG9yOjpkZWNvZGUoSW1hZ2VE
ZWNvZGVyKiogZGVjb2QKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAg
ICgqZGVjb2RlciktPnNldERhdGEoZGF0YS5nZXQoKSwgYWxsRGF0YVJlY2VpdmVkKTsKKyAgICAo
KmRlY29kZXIpLT5zZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CiAgICAgSW1hZ2VGcmFt
ZSogZnJhbWUgPSAoKmRlY29kZXIpLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMCk7CiAgICAgKCpkZWNv
ZGVyKS0+c2V0RGF0YSgwLCBmYWxzZSk7IC8vIFVucmVmIFNoYXJlZEJ1ZmZlciBmcm9tIEltYWdl
RGVjb2Rlci4KIApAQCAtMjA4LDEzICsyMDMsNCBAQCBQYXNzT3duUHRyPFNjYWxlZEltYWdlRnJh
Z21lbnQ+IEltYWdlRnJhbWVHZW5lcmF0b3I6OmRlY29kZShJbWFnZURlY29kZXIqKiBkZWNvZAog
ICAgIHJldHVybiBTY2FsZWRJbWFnZUZyYWdtZW50OjpjcmVhdGUobV9mdWxsU2l6ZSwgZnVsbFNp
emVCaXRtYXAsIGlzQ29tcGxldGUpOwogfQogCi12b2lkIEltYWdlRnJhbWVHZW5lcmF0b3I6OnBy
ZXBhcmVEYXRhKFJlZlB0cjxTaGFyZWRCdWZmZXI+KiBkYXRhLCBib29sKiBhbGxEYXRhUmVjZWl2
ZWQpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9jayhtX2RhdGFNdXRleCk7Ci0KLSAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGRvIGEgc2hhbGxvdyBjb3B5IGluc3RlYWQuIE5vdyB3ZSdyZSByZXN0cmlj
dGVkIGJ5IHRoZSBBUEkgb2YgU2hhcmVkQnVmZmVyLgotICAgICpkYXRhID0gbV9kYXRhLT5jb3B5
KCk7Ci0gICAgKmFsbERhdGFSZWNlaXZlZCA9IG1fYWxsRGF0YVJlY2VpdmVkOwotfQotCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmgKaW5kZXggYmE0
OWFhOTE5MjRhZjlhMTdjYzUzOTU3YzQ3YzBkM2Y4Mzk0ZDFhZS4uMWMwMDM3Y2RhNTVmZWZkM2Ex
MzQ0ZDdiMTVkNDAzMTdlZDEyZmFlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaApA
QCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIlNrVHlwZXMuaCIKICNpbmNsdWRlICJTa0JpdG1h
cC5oIgogI2luY2x1ZGUgIlNrU2l6ZS5oIgorI2luY2x1ZGUgIlRocmVhZFNhZmVEYXRhVHJhbnNw
b3J0LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC03NCwyMCArNzUsMTUgQEAg
cHJpdmF0ZToKIAogICAgIC8vIFVzZSB0aGUgZ2l2ZW4gZGVjb2RlciB0byBkZWNvZGUuIElmIGEg
ZGVjb2RlciBpcyBub3QgZ2l2ZW4gdGhlbiB0cnkgdG8gY3JlYXRlIG9uZS4KICAgICBQYXNzT3du
UHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IGRlY29kZShJbWFnZURlY29kZXIqKik7Ci0gICAgdm9p
ZCBwcmVwYXJlRGF0YShSZWZQdHI8U2hhcmVkQnVmZmVyPiosIGJvb2wqIGFsbERhdGFSZWNlaXZl
ZCk7CiAKICAgICBTa0lTaXplIG1fZnVsbFNpemU7Ci0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
bV9kYXRhOwotICAgIGJvb2wgbV9hbGxEYXRhUmVjZWl2ZWQ7CisgICAgVGhyZWFkU2FmZURhdGFU
cmFuc3BvcnQgbV9kYXRhOwogICAgIGJvb2wgbV9kZWNvZGVGYWlsZWRBbmRFbXB0eTsKIAogICAg
IE93blB0cjxJbWFnZURlY29kZXJGYWN0b3J5PiBtX2ltYWdlRGVjb2RlckZhY3Rvcnk7CiAKICAg
ICAvLyBQcmV2ZW50cyBtdWx0aXBsZSBkZWNvZGUgb3BlcmF0aW9ucyBvbiB0aGUgc2FtZSBkYXRh
LgogICAgIE11dGV4IG1fZGVjb2RlTXV0ZXg7Ci0KLSAgICAvLyBQcmV2ZW50cyBjb25jdXJyZW50
IGFjY2VzcyB0byBtX2RhdGEuCi0gICAgTXV0ZXggbV9kYXRhTXV0ZXg7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UaHJlYWRTYWZlRGF0YVRyYW5zcG9ydC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaHJlYWRTYWZlRGF0YVRyYW5zcG9ydC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMDViNmI0NmU1MTliYzEzYWJlMGEzYjkxOTFhNWI4NTEwODczYmRiNAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RocmVhZFNhZmVEYXRhVHJhbnNwb3J0LmNwcApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVGhyZWFkU2FmZURhdGFUcmFuc3BvcnQu
aCIKKworI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1RocmVhZFNhZmVEYXRhVHJhbnNwb3J0OjpUaHJlYWRTYWZlRGF0YVRyYW5zcG9ydCgpCisgICAg
OiBtX3JlYWRCdWZmZXIoU2hhcmVkQnVmZmVyOjpjcmVhdGUoKSkKKyAgICAsIG1fcmVhZFBvc2l0
aW9uKDApCit7Cit9CisKK1RocmVhZFNhZmVEYXRhVHJhbnNwb3J0Ojp+VGhyZWFkU2FmZURhdGFU
cmFuc3BvcnQoKQoreworfQorCit2b2lkIFRocmVhZFNhZmVEYXRhVHJhbnNwb3J0OjpzZXREYXRh
KFNoYXJlZEJ1ZmZlciogYnVmZmVyLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBBU1NF
UlQoYnVmZmVyLT5zaXplKCkgPj0gbV9yZWFkUG9zaXRpb24pOworICAgIFZlY3RvcjxSZWZQdHI8
U2hhcmVkQnVmZmVyPiA+IG5ld0J1ZmZlclF1ZXVlOworCisgICAgY29uc3QgY2hhciogc2VnbWVu
dCA9IDA7CisgICAgd2hpbGUgKHNpemVfdCBsZW5ndGggPSBidWZmZXItPmdldFNvbWVEYXRhKHNl
Z21lbnQsIG1fcmVhZFBvc2l0aW9uKSkgeworICAgICAgICBtX3JlYWRQb3NpdGlvbiArPSBsZW5n
dGg7CisgICAgICAgIG5ld0J1ZmZlclF1ZXVlLmFwcGVuZChTaGFyZWRCdWZmZXI6OmNyZWF0ZShz
ZWdtZW50LCBsZW5ndGgpKTsKKyAgICB9CisKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRl
eCk7CisgICAgbV9uZXdCdWZmZXJRdWV1ZS5hcHBlbmQobmV3QnVmZmVyUXVldWUpOworICAgIG1f
YWxsRGF0YVJlY2VpdmVkID0gYWxsRGF0YVJlY2VpdmVkOworfQorCit2b2lkIFRocmVhZFNhZmVE
YXRhVHJhbnNwb3J0OjpkYXRhKFNoYXJlZEJ1ZmZlcioqIGJ1ZmZlciwgYm9vbCogYWxsRGF0YVJl
Y2VpdmVkKQoreworICAgIFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPiA+IG5ld0J1ZmZlclF1
ZXVlOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICAgICAg
bV9uZXdCdWZmZXJRdWV1ZS5zd2FwKG5ld0J1ZmZlclF1ZXVlKTsKKyAgICB9CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBuZXdCdWZmZXJRdWV1ZS5zaXplKCk7ICsraSkKKyAgICAgICAgbV9y
ZWFkQnVmZmVyLT5hcHBlbmQobmV3QnVmZmVyUXVldWVbaV0uZ2V0KCkpOworICAgIEFTU0VSVChi
dWZmZXIpOworICAgIEFTU0VSVChhbGxEYXRhUmVjZWl2ZWQpOworICAgICpidWZmZXIgPSBtX3Jl
YWRCdWZmZXIuZ2V0KCk7CisgICAgKmFsbERhdGFSZWNlaXZlZCA9IG1fYWxsRGF0YVJlY2VpdmVk
OworfQorCitib29sIFRocmVhZFNhZmVEYXRhVHJhbnNwb3J0OjpoYXNOZXdEYXRhKCkKK3sKKyAg
ICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOworICAgIHJldHVybiAhbV9uZXdCdWZmZXJRdWV1
ZS5pc0VtcHR5KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RocmVhZFNhZmVEYXRhVHJh
bnNwb3J0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaHJl
YWRTYWZlRGF0YVRyYW5zcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ2ZTk0M2ZhMTc0NmQ1YjlmZDE5ZWRj
YTQ4NWRiMGZhMjk0MWQ2MzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaHJlYWRTYWZlRGF0YVRyYW5zcG9ydC5oCkBAIC0wLDAg
KzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRocmVhZFNhZmVEYXRhVHJhbnNwb3J0X2gKKyNk
ZWZpbmUgVGhyZWFkU2FmZURhdGFUcmFuc3BvcnRfaAorCisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworLy8g
VGhlIHB1cnBvc2Ugb2YgdGhpcyBjbGFzcyBpcyB0byBhbGxvdyB0cmFuc2ZlcnJpbmcgZGF0YSBz
dG9yZWQgaW4KKy8vIFNoYXJlZEJ1ZmZlciBpbiBhIHRocmVhZC1zYWZlIG1hbm5lci4gQXQgdGhl
IHNhbWUgdGltZSBtaW5pbWl6aW5nCisvLyBtZW1vcnkgY29weSBhbmQgdGhyZWFkIGNvbnRlbnRp
b24uCisvLworLy8gVGhpcyBjbGFzcyBpcyBkZXNpZ25lZCBzdWNoIHRoYXQgdGhlcmUgaXMgb25s
eSBvbmUgcHJvZHVjZXIgYW5kCisvLyBvbmUgY29uc3VtZXIuCitjbGFzcyBUaHJlYWRTYWZlRGF0
YVRyYW5zcG9ydCB7CitwdWJsaWM6CisgICAgVGhyZWFkU2FmZURhdGFUcmFuc3BvcnQoKTsKKyAg
ICB+VGhyZWFkU2FmZURhdGFUcmFuc3BvcnQoKTsKKworICAgIC8vIFRoaXMgbWV0aG9kIGlzIGJl
aW5nIGNhbGxlZCBzdWJzZXF1ZW50bHkgd2l0aCBhbiBleHBhbmRpbmcKKyAgICAvLyBTaGFyZWRC
dWZmZXIuCisgICAgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciosIGJvb2wgYWxsRGF0YVJlY2Vp
dmVkKTsKKworICAgIC8vIEdldCB0aGUgZGF0YSBzdWJtaXR0ZWQgdG8gdGhpcyBjbGFzcyBzbyBm
YXIuCisgICAgdm9pZCBkYXRhKFNoYXJlZEJ1ZmZlcioqLCBib29sKiBhbGxEYXRhUmVjZWl2ZWQp
OworCisgICAgLy8gUmV0dXJuIHRydWUgb2YgdGhlcmUgaXMgbmV3IGRhdGEgc3VibWl0dGVkIHRv
IHRoaXMgY2xhc3MKKyAgICAvLyBzaW5jZSBsYXN0IHRpbWUgZGF0YSgpIHdhcyBjYWxsZWQuCisg
ICAgYm9vbCBoYXNOZXdEYXRhKCk7CisKK3ByaXZhdGU6CisgICAgTXV0ZXggbV9tdXRleDsKKwor
ICAgIFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPiA+IG1fbmV3QnVmZmVyUXVldWU7CisgICAg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9yZWFkQnVmZmVyOworICAgIGJvb2wgbV9hbGxEYXRhUmVj
ZWl2ZWQ7CisgICAgc2l6ZV90IG1fcmVhZFBvc2l0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IDRmM2I2
N2Q5NjIwNTM5YjgwNWZhY2Q1ODgyMDk3OGJlMGNmNjVlNGMuLjBjMzViM2YwZjAwNGRlM2JmMTMx
ZDIzMmNmN2MzYjg4ZDY0MTRjZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAt
MTAzLDYgKzEwMyw3IEBACiAgICAgICAgICAgICAndGVzdHMvUmVuZGVyVGFibGVDZWxsVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1JlbmRlclRhYmxlUm93VGVzdC5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW1UZXN0LmNwcCcsCisgICAg
ICAgICAgICAndGVzdHMvVGhyZWFkU2FmZURhdGFUcmFuc3BvcnRUZXN0LmNwcCcsCiAgICAgICAg
ICAgICAndGVzdHMvVGlsaW5nRGF0YVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9UcmVl
VGVzdEhlbHBlcnMuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9UcmVlVGVzdEhlbHBlcnMuaCcs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlRnJhbWVHZW5l
cmF0b3JUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VGcmFtZUdl
bmVyYXRvclRlc3QuY3BwCmluZGV4IDM2ZjQwN2I1OTA1M2U3ZTMxMDk3ZGVjODI1ZTI5MmI5YjA1
MzhmNjYuLmI0MTY5YTEzOWJhZTNiNjM5OTdjMTRhMGNlODQ0ODRiNWU5YjUxMTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VGcmFtZUdlbmVyYXRv
clRlc3QuY3BwCkBAIC0xMDUsNiArMTA1LDEyIEBAIHByb3RlY3RlZDoKICAgICAgICAgcmV0dXJu
IFNjYWxlZEltYWdlRnJhZ21lbnQ6OmNyZWF0ZShzaXplLCBiaXRtYXAsIHRydWUpOwogICAgIH0K
IAorICAgIHZvaWQgYWRkTmV3RGF0YSgpCisgICAgeworICAgICAgICBtX2RhdGEtPmFwcGVuZCgi
ZyIsIDEpOworICAgICAgICBtX2dlbmVyYXRvci0+c2V0RGF0YShtX2RhdGEsIGZhbHNlKTsKKyAg
ICB9CisKICAgICB2b2lkIHNldEZyYW1lU3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lU3RhdHVzIHN0
YXR1cykgIHsgbV9mcmFtZVN0YXR1cyA9IHN0YXR1czsgfQogCiAgICAgUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gbV9kYXRhOwpAQCAtMTkxLDYgKzE5Nyw3IEBAIFRFU1RfRihJbWFnZUZyYW1lR2VuZXJh
dG9yVGVzdCwgY2FjaGVNaXNzV2l0aEluY29tcGxldGVEZWNvZGUpCiAgICAgSW1hZ2VEZWNvZGlu
Z1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgdGVtcElt
YWdlKTsKICAgICBFWFBFQ1RfRVEoMXUsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+
Y2FjaGVFbnRyaWVzKCkpOwogCisgICAgYWRkTmV3RGF0YSgpOwogICAgIHRlbXBJbWFnZSA9IG1f
Z2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShmdWxsU2l6ZSgpKTsKICAgICBFWFBFQ1RfRkFMU0Uo
dGVtcEltYWdlLT5pc0NvbXBsZXRlKCkpOwogICAgIEVYUEVDVF9FUSgyLCBtX2ZyYW1lQnVmZmVy
UmVxdWVzdENvdW50KTsKQEAgLTE5OSw2ICsyMDYsMjQgQEAgVEVTVF9GKEltYWdlRnJhbWVHZW5l
cmF0b3JUZXN0LCBjYWNoZU1pc3NXaXRoSW5jb21wbGV0ZURlY29kZSkKICAgICBFWFBFQ1RfRVEo
MCwgbV9kZWNvZGVyc0Rlc3Ryb3llZCk7CiB9CiAKK1RFU1RfRihJbWFnZUZyYW1lR2VuZXJhdG9y
VGVzdCwgY2FjaGVNaXNzV2l0aEluY29tcGxldGVEZWNvZGVOb05ld0RhdGEpCit7CisgICAgc2V0
RnJhbWVTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKKworICAgIGNvbnN0IFNjYWxl
ZEltYWdlRnJhZ21lbnQqIHRlbXBJbWFnZT0gbV9nZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKGZ1
bGxTaXplKCkpOworICAgIEVYUEVDVF9GQUxTRSh0ZW1wSW1hZ2UtPmlzQ29tcGxldGUoKSk7Cisg
ICAgRVhQRUNUX0VRKDEsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOworICAgIEltYWdlRGVj
b2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHRl
bXBJbWFnZSk7CisgICAgRVhQRUNUX0VRKDF1LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNl
KCktPmNhY2hlRW50cmllcygpKTsKKworICAgIHRlbXBJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNv
ZGVBbmRTY2FsZShmdWxsU2l6ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVtcEltYWdlLT5pc0Nv
bXBsZXRlKCkpOworICAgIEVYUEVDVF9FUSgxLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsK
KyAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJh
dG9yLmdldCgpLCB0ZW1wSW1hZ2UpOworICAgIEVYUEVDVF9FUSgxdSwgSW1hZ2VEZWNvZGluZ1N0
b3JlOjppbnN0YW5jZSgpLT5jYWNoZUVudHJpZXMoKSk7CisgICAgRVhQRUNUX0VRKDAsIG1fZGVj
b2RlcnNEZXN0cm95ZWQpOworfQorCiBURVNUX0YoSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QsIGNh
Y2hlTWlzc1dpdGhJbmNvbXBsZXRlRGVjb2RlQW5kU2NhbGUpCiB7CiAgICAgc2V0RnJhbWVTdGF0
dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKQEAgLTIwOSw2ICsyMzQsNyBAQCBURVNUX0Yo
SW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QsIGNhY2hlTWlzc1dpdGhJbmNvbXBsZXRlRGVjb2RlQW5k
U2NhbGUpCiAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZSht
X2dlbmVyYXRvci5nZXQoKSwgdGVtcEltYWdlKTsKICAgICBFWFBFQ1RfRVEoMnUsIEltYWdlRGVj
b2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRyaWVzKCkpOwogCisgICAgYWRkTmV3RGF0
YSgpOwogICAgIHRlbXBJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShzY2FsZWRT
aXplKCkpOwogICAgIEVYUEVDVF9GQUxTRSh0ZW1wSW1hZ2UtPmlzQ29tcGxldGUoKSk7CiAgICAg
RVhQRUNUX0VRKDIsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOwpAQCAtMjI5LDYgKzI1NSw3
IEBAIFRFU1RfRihJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCwgaW5jb21wbGV0ZURlY29kZUJlY29t
ZXNDb21wbGV0ZSkKICAgICBFWFBFQ1RfRVEoMXUsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFu
Y2UoKS0+Y2FjaGVFbnRyaWVzKCkpOwogCiAgICAgc2V0RnJhbWVTdGF0dXMoSW1hZ2VGcmFtZTo6
RnJhbWVDb21wbGV0ZSk7CisgICAgYWRkTmV3RGF0YSgpOwogCiAgICAgdGVtcEltYWdlID0gbV9n
ZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKGZ1bGxTaXplKCkpOwogICAgIEVYUEVDVF9UUlVFKHRl
bXBJbWFnZS0+aXNDb21wbGV0ZSgpKTsKQEAgLTI1NSw2ICsyODIsNyBAQCBURVNUX0YoSW1hZ2VG
cmFtZUdlbmVyYXRvclRlc3QsIGluY29tcGxldGVEZWNvZGVBbmRTY2FsZUJlY29tZXNDb21wbGV0
ZSkKICAgICBFWFBFQ1RfRVEoMnUsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2Fj
aGVFbnRyaWVzKCkpOwogCiAgICAgc2V0RnJhbWVTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVDb21w
bGV0ZSk7CisgICAgYWRkTmV3RGF0YSgpOwogCiAgICAgdGVtcEltYWdlID0gbV9nZW5lcmF0b3It
PmRlY29kZUFuZFNjYWxlKHNjYWxlZFNpemUoKSk7CiAgICAgRVhQRUNUX1RSVUUodGVtcEltYWdl
LT5pc0NvbXBsZXRlKCkpOwpAQCAtMjk1LDYgKzMyMyw3IEBAIFRFU1RfRihJbWFnZUZyYW1lR2Vu
ZXJhdG9yVGVzdCwgaW5jb21wbGV0ZURlY29kZUJlY29tZXNDb21wbGV0ZU11bHRpVGhyZWFkZWQp
CiAKICAgICAvLyBGcmFtZSBjYW4gbm93IGJlIGRlY29kZWQgY29tcGxldGVseS4KICAgICBzZXRG
cmFtZVN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKTsKKyAgICBhZGROZXdEYXRhKCk7
CiAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCA9IGNyZWF0ZVRocmVhZCgmZGVjb2RlVGhy
ZWFkTWFpbiwgbV9nZW5lcmF0b3IuZ2V0KCksICJEZWNvZGVUaHJlYWQiKTsKICAgICB3YWl0Rm9y
VGhyZWFkQ29tcGxldGlvbih0aHJlYWRJRCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvVGhyZWFkU2FmZURhdGFUcmFuc3BvcnRUZXN0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvVGhyZWFkU2FmZURhdGFUcmFuc3BvcnRUZXN0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wYTg5NThkMzljOTM3NmMyNzgwNjk1YWYzMDExNzJjOWEwNmYxMzcyCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaHJlYWRTYWZlRGF0YVRy
YW5zcG9ydFRlc3QuY3BwCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJUaHJlYWRTYWZlRGF0YVRyYW5zcG9ydC5oIgorCisjaW5jbHVkZSAi
U2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7CisKK1RFU1QoVGhyZWFkU2FmZURhdGFUcmFuc3Bv
cnRUZXN0LCBoYXNOZXdEYXRhKQoreworICAgIFRocmVhZFNhZmVEYXRhVHJhbnNwb3J0IHRyYW5z
cG9ydDsKKworICAgIGNvbnN0IGNoYXIgdGVzdFN0cmluZ1tdID0gIjEyMzQ1Njc4OSI7CisgICAg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUodGVzdFN0
cmluZywgc2l6ZW9mKHRlc3RTdHJpbmcpKTsKKworICAgIHRyYW5zcG9ydC5zZXREYXRhKGJ1ZmZl
ci5nZXQoKSwgZmFsc2UpOworICAgIEVYUEVDVF9UUlVFKHRyYW5zcG9ydC5oYXNOZXdEYXRhKCkp
OworCisgICAgU2hhcmVkQnVmZmVyKiB0ZW1wQnVmZmVyID0gMDsKKyAgICBib29sIGFsbERhdGFS
ZWNlaXZlZCA9IGZhbHNlOworICAgIHRyYW5zcG9ydC5kYXRhKCZ0ZW1wQnVmZmVyLCAmYWxsRGF0
YVJlY2VpdmVkKTsKKyAgICBFWFBFQ1RfRkFMU0UodHJhbnNwb3J0Lmhhc05ld0RhdGEoKSk7CisK
KyAgICB0cmFuc3BvcnQuc2V0RGF0YShidWZmZXIuZ2V0KCksIGZhbHNlKTsKKyAgICBFWFBFQ1Rf
RkFMU0UodHJhbnNwb3J0Lmhhc05ld0RhdGEoKSk7Cit9CisKK1RFU1QoVGhyZWFkU2FmZURhdGFU
cmFuc3BvcnRUZXN0LCBzZXREYXRhKQoreworICAgIFRocmVhZFNhZmVEYXRhVHJhbnNwb3J0IHRy
YW5zcG9ydDsKKworICAgIGNvbnN0IGNoYXIgdGVzdFN0cmluZzFbXSA9ICIxMjMiOworICAgIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcjEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZSh0ZXN0U3Ry
aW5nMSwgc2l6ZW9mKHRlc3RTdHJpbmcxKSAtIDEpOworICAgIGNvbnN0IGNoYXIgdGVzdFN0cmlu
ZzJbXSA9ICIxMjM0NSI7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyMiA9IFNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKHRlc3RTdHJpbmcyLCBzaXplb2YodGVzdFN0cmluZzIpIC0gMSk7Cisg
ICAgY29uc3QgY2hhciB0ZXN0U3RyaW5nM1tdID0gIjEyMzQ1Njc4OTAiOworICAgIFJlZlB0cjxT
aGFyZWRCdWZmZXI+IGJ1ZmZlcjMgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZSh0ZXN0U3RyaW5nMywg
c2l6ZW9mKHRlc3RTdHJpbmczKSAtIDEpOworCisgICAgdHJhbnNwb3J0LnNldERhdGEoYnVmZmVy
MS5nZXQoKSwgZmFsc2UpOworICAgIHRyYW5zcG9ydC5zZXREYXRhKGJ1ZmZlcjIuZ2V0KCksIGZh
bHNlKTsKKyAgICB0cmFuc3BvcnQuc2V0RGF0YShidWZmZXIzLmdldCgpLCB0cnVlKTsKKyAgICBF
WFBFQ1RfVFJVRSh0cmFuc3BvcnQuaGFzTmV3RGF0YSgpKTsKKworICAgIFNoYXJlZEJ1ZmZlciog
dGVtcEJ1ZmZlciA9IDA7CisgICAgYm9vbCBhbGxEYXRhUmVjZWl2ZWQgPSBmYWxzZTsKKyAgICB0
cmFuc3BvcnQuZGF0YSgmdGVtcEJ1ZmZlciwgJmFsbERhdGFSZWNlaXZlZCk7CisgICAgRVhQRUNU
X1RSVUUoYWxsRGF0YVJlY2VpdmVkKTsKKyAgICBFWFBFQ1RfRkFMU0UobWVtY21wKHRlc3RTdHJp
bmczLCB0ZW1wQnVmZmVyLT5kYXRhKCksIHRlbXBCdWZmZXItPnNpemUoKSkpOworfQorCit9IC8v
IG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179090</attachid>
            <date>2012-12-12 11:36:41 -0800</date>
            <delta_ts>2012-12-12 13:30:27 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-103797-20121212113402.patch</filename>
            <type>text/plain</type>
            <size>23486</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3MDA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzE2MDI4NWY5M2FlYjQ4
MDU2YTlkYWQ5YjVkY2RmMjlmMmZmY2UxMS4uYWFmYzdjNDY3YjRkNDY1YmY0ZjVkNmQ3YTBlOTE0
MzU1NjQ3ZWFjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ4IEBACiAyMDEyLTEyLTA3ICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgW2Nocm9taXVtXSBNaW5pbWl6
ZSBtZW1jcHkgZm9yIGVuY29kZWQgaW1hZ2UgZGF0YSBpbiBJbWFnZUZyYW1lR2VuZXJhdG9yCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM3OTcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBTdGVwaGVuIFdoaXRlLgorCisgICAgICAgIEFkZGVkIGEgbmV3
IGNsYXNzIFRocmVhZFNhZmVEYXRhVHJhbnNwb3J0IHRvIGhlbHAgdHJhbnNwb3J0aW5nIGRhdGEg
aW4KKyAgICAgICAgU2hhcmVkQnVmZmVyIGZyb20gb25lIHRocmVhZCB0byBhbm90aGVyLiBUaGlz
IGNsYXNzIGlzIGRlc2lnbmVkIHRvIG1pbmltaXplCisgICAgICAgIHRocmVhZCBjb250ZW50aW9u
IGFuZCBtZW1vcnkgY29weS4KKworICAgICAgICBJdCBpcyBpbXBsZW1lbnRlZCB1c2luZyBhIGRh
dGEgcXVldWUuIE5ldyBkYXRhIHNlZ21lbnRzIGFyZSBjb3BpZWQgaW50bworICAgICAgICB0aGlz
IHF1ZXVlLiBUaGUgcXVldWUgaXMgdGhlbiBjb25zb2xpZGF0ZWQgd2l0aCBleGlzdGluZyBkYXRh
IHdoZW4gdXNlcgorICAgICAgICByZXF1ZXN0cyBhY2Nlc3MgdG8gdGhlIGZpbmFsIFNoYXJlZEJ1
ZmZlci4KKworICAgICAgICBNZW1vcnkgaXMgY29waWVkIGludG8gYW5kIG91dCBvZiB0aGUgcXVl
dWUgYnV0IHRoaXMgYXBwcm9hY2ggYXZvaWQKKyAgICAgICAgY29weWluZyB0aGUgZW50aXJlIFNo
YXJlZEJ1ZmZlci4KKworICAgICAgICBJbWFnZUZyYW1lR2VuZXJhdG9yIGlzIG5vdyB1c2luZyB0
aGlzIGNsYXNzIGZvciBkYXRhIHRyYW5zcG9ydCBiZXR3ZWVuCisgICAgICAgIHRocmVhZHMuCisK
KyAgICAgICAgVW5pdCB0ZXN0cyBpbiBUaHJlYWRTYWZlRGF0YVRyYW5zcG9ydFRlc3QuIEFsc28g
ZXhpc3RpbmcgSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QgcGFzc2VzLgorCisgICAgICAgICogV2Vi
Q29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJh
bWVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6
SW1hZ2VGcmFtZUdlbmVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJh
dG9yOjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OnRy
eVRvUmVzdW1lRGVjb2RlQW5kU2NhbGUpOgorICAgICAgICBBZGRlZCBsb2dpYyB0byBza2lwIGRl
Y29kaW5nIGlmIHRoZXJlJ3Mgbm8gbmV3IGRhdGEuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lR2VuZXJhdG9yOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEltYWdlRnJhbWVHZW5lcmF0b3Ip
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RocmVhZFNhZmVEYXRhVHJh
bnNwb3J0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRocmVhZFNhZmVEYXRhVHJhbnNwb3J0OjpUaHJlYWRTYWZlRGF0YVRyYW5zcG9ydCk6CisgICAg
ICAgIChXZWJDb3JlOjpUaHJlYWRTYWZlRGF0YVRyYW5zcG9ydDo6flRocmVhZFNhZmVEYXRhVHJh
bnNwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZFNhZmVEYXRhVHJhbnNwb3J0OjpzZXRE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZFNhZmVEYXRhVHJhbnNwb3J0OjpkYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlRocmVhZFNhZmVEYXRhVHJhbnNwb3J0OjpoYXNOZXdEYXRhKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaHJlYWRTYWZlRGF0YVRyYW5z
cG9ydC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoVGhyZWFkU2FmZURh
dGFUcmFuc3BvcnQpOgorCisyMDEyLTEyLTA3ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5v
cmc+CisKICAgICAgICAgW2Nocm9taXVtXSBJbWFnZURlY29kaW5nU3RvcmUgc2hvdWxkIGNhY2hl
IHBhcnRpYWxseSBkZWNvZGVkIGltYWdlcwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNzk2CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
ODc1MTMxODVjYjRiMjVjNWMyNDJlYWY1Y2M2OGMxZGQ4YmYwNmZhYi4uZWZmNzgxYzA1NTMwNWM2
ZDM1N2E0MjNkN2JkMzQ3OTMwNGI0NjkyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsNSArMSwyNyBAQAogMjAxMi0xMi0wNyAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3Jn
PgogCisgICAgICAgIFtjaHJvbWl1bV0gTWluaW1pemUgbWVtY3B5IGZvciBlbmNvZGVkIGltYWdl
IGRhdGEgaW4gSW1hZ2VGcmFtZUdlbmVyYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNzk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU3RlcGhl
biBXaGl0ZS4KKworICAgICAgICBBZGRlZCB1bml0IHRlc3RzIGZvciBUaHJlYWRTYWZlRGF0YVRy
YW5zcG9ydC4KKworICAgICAgICBBZGRlZCB1bml0IHRlc3RzIGZvciBJbWFnZUZyYW1lR2VuZXJh
dG9yIHRvIHRlc3QgYmVoYXZpb3Igd2l0aCBhbmQgd2l0aG91dAorICAgICAgICBuZXcgZGF0YS4K
KworICAgICAgICBOZXcgdGVzdHM6CisgICAgICAgIFRocmVhZFNhZmVEYXRhVHJhbnNwb3J0VGVz
dC5oYXNOZXdEYXRhCisgICAgICAgIFRocmVhZFNhZmVEYXRhVHJhbnNwb3J0VGVzdC5zZXREYXRh
CisgICAgICAgIEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LmNhY2hlTWlzc1dpdGhJbmNvbXBsZXRl
RGVjb2RlTm9OZXdEYXRhCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0
cy9UaHJlYWRTYWZlRGF0YVRyYW5zcG9ydFRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisKKzIwMTItMTItMDcgIEFscGhhIExhbSAg
PGhjbGFtQGNocm9taXVtLm9yZz4KKwogICAgICAgICBbY2hyb21pdW1dIEltYWdlRGVjb2RpbmdT
dG9yZSBzaG91bGQgY2FjaGUgcGFydGlhbGx5IGRlY29kZWQgaW1hZ2VzCiAgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM3OTYKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CmluZGV4IGZlN2Q1ZjA3OTYxNzUzMTdlNDFmYzA5OGY4OWQ4ODc0OWE5ZDI5OTYuLmI4YTQwZjM3
ZWE0OWRiMWYxODM1ZTk3MzFiMDc4ODVkOGM4OGExN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM4
MzYsNiArMzgzNiw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
U2NhbGVkSW1hZ2VGcmFnbWVudC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1NjYWxlZEltYWdlRnJhZ21lbnQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFDaHJvbWl1bVdpbi5jcHAnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RocmVhZFNhZmVEYXRhVHJhbnNwb3J0
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGhyZWFkU2Fm
ZURhdGFUcmFuc3BvcnQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVHJhbnNwYXJlbmN5V2luLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlci5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2Vu
ZXJhdG9yLmNwcAppbmRleCAyYzJhMWQyYjBiODRiNmZiNGUzYzQxNTYzNGMwZmY1YmJkNWE2ODI4
Li4zYzk4ZGY3NmY0Y2Q3NDIxYzliM2I1MWNlNDFlMmNkNDgxYzJmZTlhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJh
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUZyYW1lR2VuZXJhdG9yLmNwcApAQCAtNDcsMTAgKzQ3LDkgQEAgc2tpYTo6SW1hZ2VPcGVy
YXRpb25zOjpSZXNpemVNZXRob2QgcmVzaXplTWV0aG9kKCkKIAogSW1hZ2VGcmFtZUdlbmVyYXRv
cjo6SW1hZ2VGcmFtZUdlbmVyYXRvcihjb25zdCBTa0lTaXplJiBmdWxsU2l6ZSwgUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogICAgIDogbV9mdWxs
U2l6ZShmdWxsU2l6ZSkKLSAgICAsIG1fYWxsRGF0YVJlY2VpdmVkKGZhbHNlKQogICAgICwgbV9k
ZWNvZGVGYWlsZWRBbmRFbXB0eShmYWxzZSkKIHsKLSAgICBzZXREYXRhKGRhdGEsIGFsbERhdGFS
ZWNlaXZlZCk7CisgICAgc2V0RGF0YShkYXRhLmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOwogfQog
CiBJbWFnZUZyYW1lR2VuZXJhdG9yOjp+SW1hZ2VGcmFtZUdlbmVyYXRvcigpCkBAIC02NCwxMiAr
NjMsNyBAQCBJbWFnZUZyYW1lR2VuZXJhdG9yOjp+SW1hZ2VGcmFtZUdlbmVyYXRvcigpCiAKIHZv
aWQgSW1hZ2VGcmFtZUdlbmVyYXRvcjo6c2V0RGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
ZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiB7Ci0gICAgLy8gRklYTUU6IERvaW5nIGEgZnVs
bCBjb3B5IGlzIGV4cGVuc2l2ZSwgaW5zdGVhZCBjb3B5IG9ubHkgbmV3IGRhdGEuCi0gICAgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YUNvcHkgPSBkYXRhLT5jb3B5KCk7Ci0KLSAgICBNdXRleExv
Y2tlciBsb2NrKG1fZGF0YU11dGV4KTsKLSAgICBtX2RhdGEgPSBkYXRhQ29weTsKLSAgICBtX2Fs
bERhdGFSZWNlaXZlZCA9IGFsbERhdGFSZWNlaXZlZDsKKyAgICBtX2RhdGEuc2V0RGF0YShkYXRh
LmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOwogfQogCiBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50
KiBJbWFnZUZyYW1lR2VuZXJhdG9yOjpkZWNvZGVBbmRTY2FsZShjb25zdCBTa0lTaXplJiBzY2Fs
ZWRTaXplKQpAQCAtMTQxLDE0ICsxMzUsMTUgQEAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCog
SW1hZ2VGcmFtZUdlbmVyYXRvcjo6dHJ5VG9SZXN1bWVEZWNvZGVBbmRTY2FsZShjb25zdAogICAg
ICAgICByZXR1cm4gMDsKICAgICBBU1NFUlQoY2FjaGVkRGVjb2Rlcik7CiAKLSAgICBPd25QdHI8
U2NhbGVkSW1hZ2VGcmFnbWVudD4gZnVsbFNpemVJbWFnZSA9IGRlY29kZSgmY2FjaGVkRGVjb2Rl
cik7Ci0KLSAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBjYWNoZWRGdWxsU2l6ZUltYWdl
ID0gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5vdmVyd3JpdGVBbmRMb2NrQ2FjaGUo
Ci0gICAgICAgIHRoaXMsIGNhY2hlZEltYWdlLCBmdWxsU2l6ZUltYWdlLnJlbGVhc2UoKSk7Cisg
ICAgaWYgKG1fZGF0YS5oYXNOZXdEYXRhKCkpIHsKKyAgICAgICAgLy8gT25seSBkbyBkZWNvZGlu
ZyBpZiB0aGVyZSBpcyBuZXcgZGF0YS4KKyAgICAgICAgT3duUHRyPFNjYWxlZEltYWdlRnJhZ21l
bnQ+IGZ1bGxTaXplSW1hZ2UgPSBkZWNvZGUoJmNhY2hlZERlY29kZXIpOworICAgICAgICBjYWNo
ZWRJbWFnZSA9IEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+b3ZlcndyaXRlQW5kTG9j
a0NhY2hlKHRoaXMsIGNhY2hlZEltYWdlLCBmdWxsU2l6ZUltYWdlLnJlbGVhc2UoKSk7CisgICAg
fQogCiAgICAgaWYgKG1fZnVsbFNpemUgPT0gc2NhbGVkU2l6ZSkKLSAgICAgICAgcmV0dXJuIGNh
Y2hlZEZ1bGxTaXplSW1hZ2U7Ci0gICAgcmV0dXJuIHRyeVRvU2NhbGUoY2FjaGVkRnVsbFNpemVJ
bWFnZSwgc2NhbGVkU2l6ZSk7CisgICAgICAgIHJldHVybiBjYWNoZWRJbWFnZTsKKyAgICByZXR1
cm4gdHJ5VG9TY2FsZShjYWNoZWRJbWFnZSwgc2NhbGVkU2l6ZSk7CiB9CiAKIGNvbnN0IFNjYWxl
ZEltYWdlRnJhZ21lbnQqIEltYWdlRnJhbWVHZW5lcmF0b3I6OnRyeVRvRGVjb2RlQW5kU2NhbGUo
Y29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkKQEAgLTE3OSwxMyArMTc0LDEzIEBAIGNvbnN0IFNj
YWxlZEltYWdlRnJhZ21lbnQqIEltYWdlRnJhbWVHZW5lcmF0b3I6OnRyeVRvRGVjb2RlQW5kU2Nh
bGUoY29uc3QgU2tJU2l6CiBQYXNzT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IEltYWdlRnJh
bWVHZW5lcmF0b3I6OmRlY29kZShJbWFnZURlY29kZXIqKiBkZWNvZGVyKQogewogICAgIEFTU0VS
VChkZWNvZGVyKTsKLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhOworICAgIFNoYXJlZEJ1
ZmZlciogZGF0YSA9IDA7CiAgICAgYm9vbCBhbGxEYXRhUmVjZWl2ZWQgPSBmYWxzZTsKLSAgICBw
cmVwYXJlRGF0YSgmZGF0YSwgJmFsbERhdGFSZWNlaXZlZCk7CisgICAgbV9kYXRhLmRhdGEoJmRh
dGEsICZhbGxEYXRhUmVjZWl2ZWQpOwogCiAgICAgLy8gVHJ5IHRvIGNyZWF0ZSBhbiBJbWFnZURl
Y29kZXIgaWYgd2UgYXJlIG5vdCBnaXZlbiBvbmUuCiAgICAgaWYgKCEqZGVjb2RlcikgewotICAg
ICAgICAqZGVjb2RlciA9IEltYWdlRGVjb2Rlcjo6Y3JlYXRlKCpkYXRhLmdldCgpLCBJbWFnZVNv
dXJjZTo6QWxwaGFQcmVtdWx0aXBsaWVkLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2Zp
bGVBcHBsaWVkKTsKKyAgICAgICAgKmRlY29kZXIgPSBJbWFnZURlY29kZXI6OmNyZWF0ZSgqZGF0
YSwgSW1hZ2VTb3VyY2U6OkFscGhhUHJlbXVsdGlwbGllZCwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5k
Q29sb3JQcm9maWxlQXBwbGllZCk7CiAKICAgICAgICAgaWYgKCEqZGVjb2RlciAmJiBtX2ltYWdl
RGVjb2RlckZhY3RvcnkpCiAgICAgICAgICAgICAqZGVjb2RlciA9IG1faW1hZ2VEZWNvZGVyRmFj
dG9yeS0+Y3JlYXRlKCkubGVha1B0cigpOwpAQCAtMTk0LDcgKzE4OSw3IEBAIFBhc3NPd25QdHI8
U2NhbGVkSW1hZ2VGcmFnbWVudD4gSW1hZ2VGcmFtZUdlbmVyYXRvcjo6ZGVjb2RlKEltYWdlRGVj
b2RlcioqIGRlY29kCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICAo
KmRlY29kZXIpLT5zZXREYXRhKGRhdGEuZ2V0KCksIGFsbERhdGFSZWNlaXZlZCk7CisgICAgKCpk
ZWNvZGVyKS0+c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwogICAgIEltYWdlRnJhbWUq
IGZyYW1lID0gKCpkZWNvZGVyKS0+ZnJhbWVCdWZmZXJBdEluZGV4KDApOwogICAgICgqZGVjb2Rl
ciktPnNldERhdGEoMCwgZmFsc2UpOyAvLyBVbnJlZiBTaGFyZWRCdWZmZXIgZnJvbSBJbWFnZURl
Y29kZXIuCiAKQEAgLTIwOCwxMyArMjAzLDQgQEAgUGFzc093blB0cjxTY2FsZWRJbWFnZUZyYWdt
ZW50PiBJbWFnZUZyYW1lR2VuZXJhdG9yOjpkZWNvZGUoSW1hZ2VEZWNvZGVyKiogZGVjb2QKICAg
ICByZXR1cm4gU2NhbGVkSW1hZ2VGcmFnbWVudDo6Y3JlYXRlKG1fZnVsbFNpemUsIGZ1bGxTaXpl
Qml0bWFwLCBpc0NvbXBsZXRlKTsKIH0KIAotdm9pZCBJbWFnZUZyYW1lR2VuZXJhdG9yOjpwcmVw
YXJlRGF0YShSZWZQdHI8U2hhcmVkQnVmZmVyPiogZGF0YSwgYm9vbCogYWxsRGF0YVJlY2VpdmVk
KQotewotICAgIE11dGV4TG9ja2VyIGxvY2sobV9kYXRhTXV0ZXgpOwotCi0gICAgLy8gRklYTUU6
IFdlIHNob3VsZCBkbyBhIHNoYWxsb3cgY29weSBpbnN0ZWFkLiBOb3cgd2UncmUgcmVzdHJpY3Rl
ZCBieSB0aGUgQVBJIG9mIFNoYXJlZEJ1ZmZlci4KLSAgICAqZGF0YSA9IG1fZGF0YS0+Y29weSgp
OwotICAgICphbGxEYXRhUmVjZWl2ZWQgPSBtX2FsbERhdGFSZWNlaXZlZDsKLX0KLQogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oCmluZGV4IGJhNDlh
YTkxOTI0YWY5YTE3Y2M1Mzk1N2M0N2MwZDNmODM5NGQxYWUuLjFjMDAzN2NkYTU1ZmVmZDNhMTM0
NGQ3YjE1ZDQwMzE3ZWQxMmZhZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmgKQEAg
LTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJTa1R5cGVzLmgiCiAjaW5jbHVkZSAiU2tCaXRtYXAu
aCIKICNpbmNsdWRlICJTa1NpemUuaCIKKyNpbmNsdWRlICJUaHJlYWRTYWZlRGF0YVRyYW5zcG9y
dC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtNzQsMjAgKzc1LDE1IEBAIHBy
aXZhdGU6CiAKICAgICAvLyBVc2UgdGhlIGdpdmVuIGRlY29kZXIgdG8gZGVjb2RlLiBJZiBhIGRl
Y29kZXIgaXMgbm90IGdpdmVuIHRoZW4gdHJ5IHRvIGNyZWF0ZSBvbmUuCiAgICAgUGFzc093blB0
cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBkZWNvZGUoSW1hZ2VEZWNvZGVyKiopOwotICAgIHZvaWQg
cHJlcGFyZURhdGEoUmVmUHRyPFNoYXJlZEJ1ZmZlcj4qLCBib29sKiBhbGxEYXRhUmVjZWl2ZWQp
OwogCiAgICAgU2tJU2l6ZSBtX2Z1bGxTaXplOwotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1f
ZGF0YTsKLSAgICBib29sIG1fYWxsRGF0YVJlY2VpdmVkOworICAgIFRocmVhZFNhZmVEYXRhVHJh
bnNwb3J0IG1fZGF0YTsKICAgICBib29sIG1fZGVjb2RlRmFpbGVkQW5kRW1wdHk7CiAKICAgICBP
d25QdHI8SW1hZ2VEZWNvZGVyRmFjdG9yeT4gbV9pbWFnZURlY29kZXJGYWN0b3J5OwogCiAgICAg
Ly8gUHJldmVudHMgbXVsdGlwbGUgZGVjb2RlIG9wZXJhdGlvbnMgb24gdGhlIHNhbWUgZGF0YS4K
ICAgICBNdXRleCBtX2RlY29kZU11dGV4OwotCi0gICAgLy8gUHJldmVudHMgY29uY3VycmVudCBh
Y2Nlc3MgdG8gbV9kYXRhLgotICAgIE11dGV4IG1fZGF0YU11dGV4OwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVGhyZWFkU2FmZURhdGFUcmFuc3BvcnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGhyZWFkU2FmZURhdGFUcmFuc3BvcnQuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjA1YjZiNDZlNTE5YmMxM2FiZTBhM2I5MTkxYTViODUxMDg3M2JkYjQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9U
aHJlYWRTYWZlRGF0YVRyYW5zcG9ydC5jcHAKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlRocmVhZFNhZmVEYXRhVHJhbnNwb3J0Lmgi
CisKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitU
aHJlYWRTYWZlRGF0YVRyYW5zcG9ydDo6VGhyZWFkU2FmZURhdGFUcmFuc3BvcnQoKQorICAgIDog
bV9yZWFkQnVmZmVyKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCkpCisgICAgLCBtX3JlYWRQb3NpdGlv
bigwKQoreworfQorCitUaHJlYWRTYWZlRGF0YVRyYW5zcG9ydDo6flRocmVhZFNhZmVEYXRhVHJh
bnNwb3J0KCkKK3sKK30KKwordm9pZCBUaHJlYWRTYWZlRGF0YVRyYW5zcG9ydDo6c2V0RGF0YShT
aGFyZWRCdWZmZXIqIGJ1ZmZlciwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAgQVNTRVJU
KGJ1ZmZlci0+c2l6ZSgpID49IG1fcmVhZFBvc2l0aW9uKTsKKyAgICBWZWN0b3I8UmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gPiBuZXdCdWZmZXJRdWV1ZTsKKworICAgIGNvbnN0IGNoYXIqIHNlZ21lbnQg
PSAwOworICAgIHdoaWxlIChzaXplX3QgbGVuZ3RoID0gYnVmZmVyLT5nZXRTb21lRGF0YShzZWdt
ZW50LCBtX3JlYWRQb3NpdGlvbikpIHsKKyAgICAgICAgbV9yZWFkUG9zaXRpb24gKz0gbGVuZ3Ro
OworICAgICAgICBuZXdCdWZmZXJRdWV1ZS5hcHBlbmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUoc2Vn
bWVudCwgbGVuZ3RoKSk7CisgICAgfQorCisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgp
OworICAgIG1fbmV3QnVmZmVyUXVldWUuYXBwZW5kKG5ld0J1ZmZlclF1ZXVlKTsKKyAgICBtX2Fs
bERhdGFSZWNlaXZlZCA9IGFsbERhdGFSZWNlaXZlZDsKK30KKwordm9pZCBUaHJlYWRTYWZlRGF0
YVRyYW5zcG9ydDo6ZGF0YShTaGFyZWRCdWZmZXIqKiBidWZmZXIsIGJvb2wqIGFsbERhdGFSZWNl
aXZlZCkKK3sKKyAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gPiBuZXdCdWZmZXJRdWV1
ZTsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgICAgIG1f
bmV3QnVmZmVyUXVldWUuc3dhcChuZXdCdWZmZXJRdWV1ZSk7CisgICAgfQorICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbmV3QnVmZmVyUXVldWUuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcmVh
ZEJ1ZmZlci0+YXBwZW5kKG5ld0J1ZmZlclF1ZXVlW2ldLmdldCgpKTsKKyAgICBBU1NFUlQoYnVm
ZmVyKTsKKyAgICBBU1NFUlQoYWxsRGF0YVJlY2VpdmVkKTsKKyAgICAqYnVmZmVyID0gbV9yZWFk
QnVmZmVyLmdldCgpOworICAgICphbGxEYXRhUmVjZWl2ZWQgPSBtX2FsbERhdGFSZWNlaXZlZDsK
K30KKworYm9vbCBUaHJlYWRTYWZlRGF0YVRyYW5zcG9ydDo6aGFzTmV3RGF0YSgpCit7CisgICAg
TXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICByZXR1cm4gIW1fbmV3QnVmZmVyUXVldWUu
aXNFbXB0eSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaHJlYWRTYWZlRGF0YVRyYW5z
cG9ydC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGhyZWFk
U2FmZURhdGFUcmFuc3BvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MWNjNjRiMWFiYmI2MmNhYmRmYmI2OWY2
YmRjMmQzNGRmN2Y5ZDA5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGhyZWFkU2FmZURhdGFUcmFuc3BvcnQuaApAQCAtMCwwICsx
LDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUaHJlYWRTYWZlRGF0YVRyYW5zcG9ydF9oCisjZGVm
aW5lIFRocmVhZFNhZmVEYXRhVHJhbnNwb3J0X2gKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTaGFyZWRCdWZmZXI7CisKKy8vIFRo
ZSBwdXJwb3NlIG9mIHRoaXMgY2xhc3MgaXMgdG8gYWxsb3cgdGhlIHRyYW5zZmVyIG9mIGRhdGEg
c3RvcmVkIGluCisvLyBTaGFyZWRCdWZmZXIgaW4gYSB0aHJlYWQtc2FmZSBtYW5uZXIsIGFuZCB0
byBtaW5pbWl6ZSBtZW1vcnkgY29waWVzCisvLyBhbmQgdGhyZWFkIGNvbnRlbnRpb24uCisvLwor
Ly8gVGhpcyBjbGFzcyBpcyBkZXNpZ25lZCBzdWNoIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgcHJv
ZHVjZXIgYW5kCisvLyBvbmUgY29uc3VtZXIuCitjbGFzcyBUaHJlYWRTYWZlRGF0YVRyYW5zcG9y
dCB7CitwdWJsaWM6CisgICAgVGhyZWFkU2FmZURhdGFUcmFuc3BvcnQoKTsKKyAgICB+VGhyZWFk
U2FmZURhdGFUcmFuc3BvcnQoKTsKKworICAgIC8vIFRoaXMgbWV0aG9kIGlzIGJlaW5nIGNhbGxl
ZCBzdWJzZXF1ZW50bHkgd2l0aCBhbiBleHBhbmRpbmcKKyAgICAvLyBTaGFyZWRCdWZmZXIuCisg
ICAgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciosIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKwor
ICAgIC8vIEdldCB0aGUgZGF0YSBzdWJtaXR0ZWQgdG8gdGhpcyBjbGFzcyBzbyBmYXIuCisgICAg
dm9pZCBkYXRhKFNoYXJlZEJ1ZmZlcioqLCBib29sKiBhbGxEYXRhUmVjZWl2ZWQpOworCisgICAg
Ly8gUmV0dXJuIHRydWUgb2YgdGhlcmUgaXMgbmV3IGRhdGEgc3VibWl0dGVkIHRvIHRoaXMgY2xh
c3MKKyAgICAvLyBzaW5jZSBsYXN0IHRpbWUgZGF0YSgpIHdhcyBjYWxsZWQuCisgICAgYm9vbCBo
YXNOZXdEYXRhKCk7CisKK3ByaXZhdGU6CisgICAgTXV0ZXggbV9tdXRleDsKKworICAgIFZlY3Rv
cjxSZWZQdHI8U2hhcmVkQnVmZmVyPiA+IG1fbmV3QnVmZmVyUXVldWU7CisgICAgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gbV9yZWFkQnVmZmVyOworICAgIGJvb2wgbV9hbGxEYXRhUmVjZWl2ZWQ7Cisg
ICAgc2l6ZV90IG1fcmVhZFBvc2l0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IDRmM2I2N2Q5NjIwNTM5
YjgwNWZhY2Q1ODgyMDk3OGJlMGNmNjVlNGMuLjBjMzViM2YwZjAwNGRlM2JmMTMxZDIzMmNmN2Mz
Yjg4ZDY0MTRjZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtMTAzLDYgKzEw
Myw3IEBACiAgICAgICAgICAgICAndGVzdHMvUmVuZGVyVGFibGVDZWxsVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL1JlbmRlclRhYmxlUm93VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rl
c3RzL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW1UZXN0LmNwcCcsCisgICAgICAgICAgICAn
dGVzdHMvVGhyZWFkU2FmZURhdGFUcmFuc3BvcnRUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVz
dHMvVGlsaW5nRGF0YVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9UcmVlVGVzdEhlbHBl
cnMuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9UcmVlVGVzdEhlbHBlcnMuaCcsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlRnJhbWVHZW5lcmF0b3JUZXN0
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VGcmFtZUdlbmVyYXRvclRl
c3QuY3BwCmluZGV4IDM2ZjQwN2I1OTA1M2U3ZTMxMDk3ZGVjODI1ZTI5MmI5YjA1MzhmNjYuLmI0
MTY5YTEzOWJhZTNiNjM5OTdjMTRhMGNlODQ0ODRiNWU5YjUxMTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QuY3Bw
CkBAIC0xMDUsNiArMTA1LDEyIEBAIHByb3RlY3RlZDoKICAgICAgICAgcmV0dXJuIFNjYWxlZElt
YWdlRnJhZ21lbnQ6OmNyZWF0ZShzaXplLCBiaXRtYXAsIHRydWUpOwogICAgIH0KIAorICAgIHZv
aWQgYWRkTmV3RGF0YSgpCisgICAgeworICAgICAgICBtX2RhdGEtPmFwcGVuZCgiZyIsIDEpOwor
ICAgICAgICBtX2dlbmVyYXRvci0+c2V0RGF0YShtX2RhdGEsIGZhbHNlKTsKKyAgICB9CisKICAg
ICB2b2lkIHNldEZyYW1lU3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lU3RhdHVzIHN0YXR1cykgIHsg
bV9mcmFtZVN0YXR1cyA9IHN0YXR1czsgfQogCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9k
YXRhOwpAQCAtMTkxLDYgKzE5Nyw3IEBAIFRFU1RfRihJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCwg
Y2FjaGVNaXNzV2l0aEluY29tcGxldGVEZWNvZGUpCiAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjpp
bnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgdGVtcEltYWdlKTsKICAg
ICBFWFBFQ1RfRVEoMXUsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRy
aWVzKCkpOwogCisgICAgYWRkTmV3RGF0YSgpOwogICAgIHRlbXBJbWFnZSA9IG1fZ2VuZXJhdG9y
LT5kZWNvZGVBbmRTY2FsZShmdWxsU2l6ZSgpKTsKICAgICBFWFBFQ1RfRkFMU0UodGVtcEltYWdl
LT5pc0NvbXBsZXRlKCkpOwogICAgIEVYUEVDVF9FUSgyLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENv
dW50KTsKQEAgLTE5OSw2ICsyMDYsMjQgQEAgVEVTVF9GKEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0
LCBjYWNoZU1pc3NXaXRoSW5jb21wbGV0ZURlY29kZSkKICAgICBFWFBFQ1RfRVEoMCwgbV9kZWNv
ZGVyc0Rlc3Ryb3llZCk7CiB9CiAKK1RFU1RfRihJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCwgY2Fj
aGVNaXNzV2l0aEluY29tcGxldGVEZWNvZGVOb05ld0RhdGEpCit7CisgICAgc2V0RnJhbWVTdGF0
dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKKworICAgIGNvbnN0IFNjYWxlZEltYWdlRnJh
Z21lbnQqIHRlbXBJbWFnZT0gbV9nZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKGZ1bGxTaXplKCkp
OworICAgIEVYUEVDVF9GQUxTRSh0ZW1wSW1hZ2UtPmlzQ29tcGxldGUoKSk7CisgICAgRVhQRUNU
X0VRKDEsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOworICAgIEltYWdlRGVjb2RpbmdTdG9y
ZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHRlbXBJbWFnZSk7
CisgICAgRVhQRUNUX0VRKDF1LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hl
RW50cmllcygpKTsKKworICAgIHRlbXBJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRTY2Fs
ZShmdWxsU2l6ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UodGVtcEltYWdlLT5pc0NvbXBsZXRlKCkp
OworICAgIEVYUEVDVF9FUSgxLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsKKyAgICBJbWFn
ZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgp
LCB0ZW1wSW1hZ2UpOworICAgIEVYUEVDVF9FUSgxdSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0
YW5jZSgpLT5jYWNoZUVudHJpZXMoKSk7CisgICAgRVhQRUNUX0VRKDAsIG1fZGVjb2RlcnNEZXN0
cm95ZWQpOworfQorCiBURVNUX0YoSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QsIGNhY2hlTWlzc1dp
dGhJbmNvbXBsZXRlRGVjb2RlQW5kU2NhbGUpCiB7CiAgICAgc2V0RnJhbWVTdGF0dXMoSW1hZ2VG
cmFtZTo6RnJhbWVQYXJ0aWFsKTsKQEAgLTIwOSw2ICsyMzQsNyBAQCBURVNUX0YoSW1hZ2VGcmFt
ZUdlbmVyYXRvclRlc3QsIGNhY2hlTWlzc1dpdGhJbmNvbXBsZXRlRGVjb2RlQW5kU2NhbGUpCiAg
ICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRv
ci5nZXQoKSwgdGVtcEltYWdlKTsKICAgICBFWFBFQ1RfRVEoMnUsIEltYWdlRGVjb2RpbmdTdG9y
ZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRyaWVzKCkpOwogCisgICAgYWRkTmV3RGF0YSgpOwogICAg
IHRlbXBJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShzY2FsZWRTaXplKCkpOwog
ICAgIEVYUEVDVF9GQUxTRSh0ZW1wSW1hZ2UtPmlzQ29tcGxldGUoKSk7CiAgICAgRVhQRUNUX0VR
KDIsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOwpAQCAtMjI5LDYgKzI1NSw3IEBAIFRFU1Rf
RihJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCwgaW5jb21wbGV0ZURlY29kZUJlY29tZXNDb21wbGV0
ZSkKICAgICBFWFBFQ1RfRVEoMXUsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2Fj
aGVFbnRyaWVzKCkpOwogCiAgICAgc2V0RnJhbWVTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVDb21w
bGV0ZSk7CisgICAgYWRkTmV3RGF0YSgpOwogCiAgICAgdGVtcEltYWdlID0gbV9nZW5lcmF0b3It
PmRlY29kZUFuZFNjYWxlKGZ1bGxTaXplKCkpOwogICAgIEVYUEVDVF9UUlVFKHRlbXBJbWFnZS0+
aXNDb21wbGV0ZSgpKTsKQEAgLTI1NSw2ICsyODIsNyBAQCBURVNUX0YoSW1hZ2VGcmFtZUdlbmVy
YXRvclRlc3QsIGluY29tcGxldGVEZWNvZGVBbmRTY2FsZUJlY29tZXNDb21wbGV0ZSkKICAgICBF
WFBFQ1RfRVEoMnUsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRyaWVz
KCkpOwogCiAgICAgc2V0RnJhbWVTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSk7Cisg
ICAgYWRkTmV3RGF0YSgpOwogCiAgICAgdGVtcEltYWdlID0gbV9nZW5lcmF0b3ItPmRlY29kZUFu
ZFNjYWxlKHNjYWxlZFNpemUoKSk7CiAgICAgRVhQRUNUX1RSVUUodGVtcEltYWdlLT5pc0NvbXBs
ZXRlKCkpOwpAQCAtMjk1LDYgKzMyMyw3IEBAIFRFU1RfRihJbWFnZUZyYW1lR2VuZXJhdG9yVGVz
dCwgaW5jb21wbGV0ZURlY29kZUJlY29tZXNDb21wbGV0ZU11bHRpVGhyZWFkZWQpCiAKICAgICAv
LyBGcmFtZSBjYW4gbm93IGJlIGRlY29kZWQgY29tcGxldGVseS4KICAgICBzZXRGcmFtZVN0YXR1
cyhJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKTsKKyAgICBhZGROZXdEYXRhKCk7CiAgICAgVGhy
ZWFkSWRlbnRpZmllciB0aHJlYWRJRCA9IGNyZWF0ZVRocmVhZCgmZGVjb2RlVGhyZWFkTWFpbiwg
bV9nZW5lcmF0b3IuZ2V0KCksICJEZWNvZGVUaHJlYWQiKTsKICAgICB3YWl0Rm9yVGhyZWFkQ29t
cGxldGlvbih0aHJlYWRJRCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvVGhyZWFkU2FmZURhdGFUcmFuc3BvcnRUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvVGhyZWFkU2FmZURhdGFUcmFuc3BvcnRUZXN0LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
YTg5NThkMzljOTM3NmMyNzgwNjk1YWYzMDExNzJjOWEwNmYxMzcyCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaHJlYWRTYWZlRGF0YVRyYW5zcG9ydFRl
c3QuY3BwCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJUaHJlYWRTYWZlRGF0YVRyYW5zcG9ydC5oIgorCisjaW5jbHVkZSAiU2hhcmVkQnVm
ZmVyLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK25hbWVzcGFjZSB7CisKK1RFU1QoVGhyZWFkU2FmZURhdGFUcmFuc3BvcnRUZXN0LCBo
YXNOZXdEYXRhKQoreworICAgIFRocmVhZFNhZmVEYXRhVHJhbnNwb3J0IHRyYW5zcG9ydDsKKwor
ICAgIGNvbnN0IGNoYXIgdGVzdFN0cmluZ1tdID0gIjEyMzQ1Njc4OSI7CisgICAgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gYnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUodGVzdFN0cmluZywgc2l6
ZW9mKHRlc3RTdHJpbmcpKTsKKworICAgIHRyYW5zcG9ydC5zZXREYXRhKGJ1ZmZlci5nZXQoKSwg
ZmFsc2UpOworICAgIEVYUEVDVF9UUlVFKHRyYW5zcG9ydC5oYXNOZXdEYXRhKCkpOworCisgICAg
U2hhcmVkQnVmZmVyKiB0ZW1wQnVmZmVyID0gMDsKKyAgICBib29sIGFsbERhdGFSZWNlaXZlZCA9
IGZhbHNlOworICAgIHRyYW5zcG9ydC5kYXRhKCZ0ZW1wQnVmZmVyLCAmYWxsRGF0YVJlY2VpdmVk
KTsKKyAgICBFWFBFQ1RfRkFMU0UodHJhbnNwb3J0Lmhhc05ld0RhdGEoKSk7CisKKyAgICB0cmFu
c3BvcnQuc2V0RGF0YShidWZmZXIuZ2V0KCksIGZhbHNlKTsKKyAgICBFWFBFQ1RfRkFMU0UodHJh
bnNwb3J0Lmhhc05ld0RhdGEoKSk7Cit9CisKK1RFU1QoVGhyZWFkU2FmZURhdGFUcmFuc3BvcnRU
ZXN0LCBzZXREYXRhKQoreworICAgIFRocmVhZFNhZmVEYXRhVHJhbnNwb3J0IHRyYW5zcG9ydDsK
KworICAgIGNvbnN0IGNoYXIgdGVzdFN0cmluZzFbXSA9ICIxMjMiOworICAgIFJlZlB0cjxTaGFy
ZWRCdWZmZXI+IGJ1ZmZlcjEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZSh0ZXN0U3RyaW5nMSwgc2l6
ZW9mKHRlc3RTdHJpbmcxKSAtIDEpOworICAgIGNvbnN0IGNoYXIgdGVzdFN0cmluZzJbXSA9ICIx
MjM0NSI7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyMiA9IFNoYXJlZEJ1ZmZlcjo6
Y3JlYXRlKHRlc3RTdHJpbmcyLCBzaXplb2YodGVzdFN0cmluZzIpIC0gMSk7CisgICAgY29uc3Qg
Y2hhciB0ZXN0U3RyaW5nM1tdID0gIjEyMzQ1Njc4OTAiOworICAgIFJlZlB0cjxTaGFyZWRCdWZm
ZXI+IGJ1ZmZlcjMgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZSh0ZXN0U3RyaW5nMywgc2l6ZW9mKHRl
c3RTdHJpbmczKSAtIDEpOworCisgICAgdHJhbnNwb3J0LnNldERhdGEoYnVmZmVyMS5nZXQoKSwg
ZmFsc2UpOworICAgIHRyYW5zcG9ydC5zZXREYXRhKGJ1ZmZlcjIuZ2V0KCksIGZhbHNlKTsKKyAg
ICB0cmFuc3BvcnQuc2V0RGF0YShidWZmZXIzLmdldCgpLCB0cnVlKTsKKyAgICBFWFBFQ1RfVFJV
RSh0cmFuc3BvcnQuaGFzTmV3RGF0YSgpKTsKKworICAgIFNoYXJlZEJ1ZmZlciogdGVtcEJ1ZmZl
ciA9IDA7CisgICAgYm9vbCBhbGxEYXRhUmVjZWl2ZWQgPSBmYWxzZTsKKyAgICB0cmFuc3BvcnQu
ZGF0YSgmdGVtcEJ1ZmZlciwgJmFsbERhdGFSZWNlaXZlZCk7CisgICAgRVhQRUNUX1RSVUUoYWxs
RGF0YVJlY2VpdmVkKTsKKyAgICBFWFBFQ1RfRkFMU0UobWVtY21wKHRlc3RTdHJpbmczLCB0ZW1w
QnVmZmVyLT5kYXRhKCksIHRlbXBCdWZmZXItPnNpemUoKSkpOworfQorCit9IC8vIG5hbWVzcGFj
ZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>