<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://jogamp.org/bugzilla/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.2"
          urlbase="https://jogamp.org/bugzilla/"
          
          maintainer="sgothel@jausoft.com"
>

    <bug>
          <bug_id>245</bug_id>
          
          <creation_ts>2006-08-26 11:11:33 +0200</creation_ts>
          <short_desc>glutSolidCylinder missing from com.sun.opengl.util.GLUT</short_desc>
          <delta_ts>2010-03-24 07:49:33 +0100</delta_ts>
          <reporter_accessible>0</reporter_accessible>
          <cclist_accessible>0</cclist_accessible>
          <classification_id>3</classification_id>
          <classification>JogAmp</classification>
          <product>Jogl</product>
          <component>core</component>
          <version>1</version>
          <rep_platform>All</rep_platform>
          <op_sys>all</op_sys>
          <bug_status>VERIFIED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sven Gothel">sgothel</reporter>
          <assigned_to name="Sven Gothel">sgothel</assigned_to>
          
          
          <cf_type>DEFECT</cf_type>
          <cf_scm_refs></cf_scm_refs>
          <cf_workaround>---</cf_workaround>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>261</commentid>
    <comment_count>0</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2010-03-24 07:49:33 +0100</bug_when>
    <thetext>


---- Reported by profaronnax 2006-08-26 23:11:33 ----

The GLUT class is missing bindings for glutSolidCylinder and glutWireCylinder.



---- Additional Comments From kbr 2006-08-27 01:32:55 ----

It looks like this and some other geometric entry points were added in OpenGLUT.
JOGL&apos;s GLUT class was ported from GLUT 3.7.6. We should consider porting the
additional entry points. BTW, the submitter should feel free to contribute a
port of this and other methods.




---- Additional Comments From profaronnax 2006-08-28 21:56:32 ----

Should glutSolidCylinder draw end caps?



---- Additional Comments From kbr 2006-08-28 23:10:38 ----

I&apos;d recommend looking at the OpenGLUT source code for guidance here.




---- Additional Comments From profaronnax 2006-09-01 23:40:42 ----

I have this fixed and ready to commit on my computer.  How do I get modify permission for the CVS 
repository?



---- Additional Comments From kbr 2006-09-02 08:48:42 ----

Please attach the diffs and/or the revised files to the bug report and we&apos;ll
review and commit them. We only grant write access to the CVS repository to
developers who have made substantial contributions over time. If you wanted to
bring the GLUT implementation up-to-date with respect to OpenGLUT (i.e., adding
the other geometric primitives like glutSolidRhombicDodecahedron) I&apos;d consider
that a substantial contribution.




---- Additional Comments From profaronnax 2006-09-02 10:28:18 ----

Created an attachment
new GLUT class with glutSolidCylinder, glutWireCylinder, glutSolidRhombicDodecahedron, and glutWireRhombicDodecahedron




---- Additional Comments From profaronnax 2006-09-02 10:29:24 ----

I just posted a copy of GLUT.java with a few more methods from OpenGLUT.



---- Additional Comments From kbr 2006-11-13 04:20:42 ----

Sorry for the long delay in getting back to this. Thanks for your suggested
changes; they&apos;ve been incorporated into the source tree and will show up in
tomorrow&apos;s nightly build as well as in a future release of the JSR-231 RI.




--- Bug imported by sgothel@jausoft.com 2010-03-24 07:49 EDT  ---

This bug was previously known as _bug_ 245 at https://jogl.dev.java.net/bugs/show_bug.cgi?id=245
Imported an attachment (id=86)

The original submitter of attachment 86 is unknown.
   Reassigning to the person who moved it here: sgothel@jausoft.com.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>86</attachid>
            <date>2006-09-02 10:28:00 +0200</date>
            <delta_ts>2006-09-02 10:28:00 +0200</delta_ts>
            <desc>new GLUT class with glutSolidCylinder, glutWireCylinder, glutSolidRhombicDodecahedron, and glutWireRhombicDodecahedron</desc>
            <filename>GLUT.java</filename>
            <type>text/plain</type>
            <size>43981</size>
            <attacher name="Sven Gothel">sgothel</attacher>
            
              <data encoding="base64">LyoKICogQ29weXJpZ2h0IChjKSAyMDAzIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KICogCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCiAqIG1ldDoKICog
CiAqIC0gUmVkaXN0cmlidXRpb24gb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAogKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KICogCiAqIC0gUmVkaXN0cmlidXRpb24gaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogKiAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICog
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgogKiAKICogTmVpdGhlciB0aGUgbmFtZSBvZiBTdW4gTWljcm9zeXN0ZW1z
LCBJbmMuIG9yIHRoZSBuYW1lcyBvZgogKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogKiAKICogVGhpcyBzb2Z0
d2FyZSBpcyBwcm92aWRlZCAiQVMgSVMsIiB3aXRob3V0IGEgd2FycmFudHkgb2YgYW55IGtpbmQu
IEFMTAogKiBFWFBSRVNTIE9SIElNUExJRUQgQ09ORElUSU9OUywgUkVQUkVTRU5UQVRJT05TIEFO
RCBXQVJSQU5USUVTLAogKiBJTkNMVURJTkcgQU5ZIElNUExJRUQgV0FSUkFOVFkgT0YgTUVSQ0hB
TlRBQklMSVRZLCBGSVRORVNTIEZPUiBBCiAqIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5G
UklOR0VNRU5ULCBBUkUgSEVSRUJZIEVYQ0xVREVELiBTVU4KICogTUlDUk9TWVNURU1TLCBJTkMu
ICgiU1VOIikgQU5EIElUUyBMSUNFTlNPUlMgU0hBTEwgTk9UIEJFIExJQUJMRSBGT1IKICogQU5Z
IERBTUFHRVMgU1VGRkVSRUQgQlkgTElDRU5TRUUgQVMgQSBSRVNVTFQgT0YgVVNJTkcsIE1PRElG
WUlORyBPUgogKiBESVNUUklCVVRJTkcgVEhJUyBTT0ZUV0FSRSBPUiBJVFMgREVSSVZBVElWRVMu
IElOIE5PIEVWRU5UIFdJTEwgU1VOIE9SCiAqIElUUyBMSUNFTlNPUlMgQkUgTElBQkxFIEZPUiBB
TlkgTE9TVCBSRVZFTlVFLCBQUk9GSVQgT1IgREFUQSwgT1IgRk9SCiAqIERJUkVDVCwgSU5ESVJF
Q1QsIFNQRUNJQUwsIENPTlNFUVVFTlRJQUwsIElOQ0lERU5UQUwgT1IgUFVOSVRJVkUKICogREFN
QUdFUywgSE9XRVZFUiBDQVVTRUQgQU5EIFJFR0FSRExFU1MgT0YgVEhFIFRIRU9SWSBPRiBMSUFC
SUxJVFksCiAqIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgT1IgSU5BQklMSVRZIFRPIFVTRSBU
SElTIFNPRlRXQVJFLCBFVkVOIElGCiAqIFNVTiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCiAqIAogKiBZb3UgYWNrbm93bGVkZ2UgdGhhdCB0aGlz
IHNvZnR3YXJlIGlzIG5vdCBkZXNpZ25lZCBvciBpbnRlbmRlZCBmb3IgdXNlCiAqIGluIHRoZSBk
ZXNpZ24sIGNvbnN0cnVjdGlvbiwgb3BlcmF0aW9uIG9yIG1haW50ZW5hbmNlIG9mIGFueSBudWNs
ZWFyCiAqIGZhY2lsaXR5LgogKiAKICogU3VuIGdyYXRlZnVsbHkgYWNrbm93bGVkZ2VzIHRoYXQg
dGhpcyBzb2Z0d2FyZSB3YXMgb3JpZ2luYWxseSBhdXRob3JlZAogKiBhbmQgZGV2ZWxvcGVkIGJ5
IEtlbm5ldGggQnJhZGxleSBSdXNzZWxsIGFuZCBDaHJpc3RvcGhlciBKb2huIEtsaW5lLgogKi8K
CnBhY2thZ2UgY29tLnN1bi5vcGVuZ2wudXRpbDsKCmltcG9ydCBqYXZheC5tZWRpYS5vcGVuZ2wu
KjsKaW1wb3J0IGphdmF4Lm1lZGlhLm9wZW5nbC5nbHUuKjsKCi8qKiBTdWJzZXQgb2YgdGhlIHJv
dXRpbmVzIHByb3ZpZGVkIGJ5IHRoZSBHTFVUIGludGVyZmFjZS4gTm90ZSB0aGUKICAgIHNpZ25h
dHVyZXMgb2YgbWFueSBvZiB0aGUgbWV0aG9kcyBhcmUgbmVjZXNzYXJpbHkgZGlmZmVyZW50IHRo
YW4KICAgIHRoZSBjb3JyZXNwb25kaW5nIEMgdmVyc2lvbi4gQSBHTFVUIG9iamVjdCBtdXN0IG9u
bHkgYmUgdXNlZCBmcm9tCiAgICBvbmUgcGFydGljdWxhciB0aHJlYWQgYXQgYSB0aW1lLiA8UD4K
CiAgICBDb3B5cmlnaHQgKGMpIE1hcmsgSi4gS2lsZ2FyZCwgMTk5NCwgMTk5Ny4gPFA+CgogICAg
KGMpIENvcHlyaWdodCAxOTkzLCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIDxQPgoKICAgIEFMTCBS
SUdIVFMgUkVTRVJWRUQgPFA+CgogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwg
YW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQogICAgZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRo
b3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQKICAgIHRoYXQgdGhlIGFib3ZlIGNv
cHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQKICAgIGJvdGggdGhl
IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluCiAg
ICBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIFNpbGljb24K
ICAgIEdyYXBoaWNzLCBJbmMuIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0
eQogICAgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMsCiAgICB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uIDxQPgoKICAgIFRIRSBNQVRF
UklBTCBFTUJPRElFRCBPTiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIFRPIFlPVQogICAgIkFT
LUlTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUywgSU1QTElFRCBP
UgogICAgT1RIRVJXSVNFLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFO
VFkgT0YKICAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIElOIE5PCiAgICBFVkVOVCBTSEFMTCBTSUxJQ09OIEdSQVBISUNTLCBJTkMuICBCRSBM
SUFCTEUgVE8gWU9VIE9SIEFOWU9ORQogICAgRUxTRSBGT1IgQU5ZIERJUkVDVCwgU1BFQ0lBTCwg
SU5DSURFTlRBTCwgSU5ESVJFQ1QgT1IKICAgIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkg
S0lORCwgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiwKICAgIElOQ0xVRElORyBXSVRIT1VUIExJ
TUlUQVRJT04sIExPU1MgT0YgUFJPRklULCBMT1NTIE9GIFVTRSwKICAgIFNBVklOR1MgT1IgUkVW
RU5VRSwgT1IgVEhFIENMQUlNUyBPRiBUSElSRCBQQVJUSUVTLCBXSEVUSEVSIE9SCiAgICBOT1Qg
U0lMSUNPTiBHUkFQSElDUywgSU5DLiAgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkKICAgIE9GIFNVQ0ggTE9TUywgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLAogICAgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBQ
T1NTRVNTSU9OLCBVU0UgT1IKICAgIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuIDxQPgoK
ICAgIFVTIEdvdmVybm1lbnQgVXNlcnMgUmVzdHJpY3RlZCBSaWdodHMgPFA+CgogICAgVXNlLCBk
dXBsaWNhdGlvbiwgb3IgZGlzY2xvc3VyZSBieSB0aGUgR292ZXJubWVudCBpcyBzdWJqZWN0IHRv
CiAgICByZXN0cmljdGlvbnMgc2V0IGZvcnRoIGluIEZBUiA1Mi4yMjcuMTkoYykoMikgb3Igc3Vi
cGFyYWdyYXBoCiAgICAoYykoMSkoaWkpIG9mIHRoZSBSaWdodHMgaW4gVGVjaG5pY2FsIERhdGEg
YW5kIENvbXB1dGVyCiAgICBTb2Z0d2FyZSBjbGF1c2UgYXQgREZBUlMgMjUyLjIyNy03MDEzIGFu
ZC9vciBpbiBzaW1pbGFyIG9yCiAgICBzdWNjZXNzb3IgY2xhdXNlcyBpbiB0aGUgRkFSIG9yIHRo
ZSBET0Qgb3IgTkFTQSBGQVIKICAgIFN1cHBsZW1lbnQuICBVbnB1Ymxpc2hlZC0tIHJpZ2h0cyBy
ZXNlcnZlZCB1bmRlciB0aGUgY29weXJpZ2h0CiAgICBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVz
LiAgQ29udHJhY3Rvci9tYW51ZmFjdHVyZXIgaXMgU2lsaWNvbgogICAgR3JhcGhpY3MsIEluYy4s
IDIwMTEgTi4gIFNob3JlbGluZSBCbHZkLiwgTW91bnRhaW4gVmlldywgQ0EKICAgIDk0MDM5LTcz
MTEuIDxQPgoKICAgIE9wZW5HTChUTSkgaXMgYSB0cmFkZW1hcmsgb2YgU2lsaWNvbiBHcmFwaGlj
cywgSW5jLiA8UD4KKi8KCnB1YmxpYyBjbGFzcyBHTFVUIHsKICBwdWJsaWMgc3RhdGljIGZpbmFs
IGludCBTVFJPS0VfUk9NQU4gPSAwOwogIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUUk9LRV9N
T05PX1JPTUFOID0gMTsKICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCSVRNQVBfOV9CWV8xNSA9
IDI7CiAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQklUTUFQXzhfQllfMTMgPSAzOwogIHB1Ymxp
YyBzdGF0aWMgZmluYWwgaW50IEJJVE1BUF9USU1FU19ST01BTl8xMCA9IDQ7CiAgcHVibGljIHN0
YXRpYyBmaW5hbCBpbnQgQklUTUFQX1RJTUVTX1JPTUFOXzI0ID0gNTsKICBwdWJsaWMgc3RhdGlj
IGZpbmFsIGludCBCSVRNQVBfSEVMVkVUSUNBXzEwID0gNjsKICBwdWJsaWMgc3RhdGljIGZpbmFs
IGludCBCSVRNQVBfSEVMVkVUSUNBXzEyID0gNzsKICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBC
SVRNQVBfSEVMVkVUSUNBXzE4ID0gODsKCiAgcHJpdmF0ZSBHTFUgZ2x1ID0gbmV3IEdMVSgpOwoK
ICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KICAvLyBTaGFwZXMKICAvLwoKICBwdWJsaWMgdm9pZCBnbHV0V2ly
ZVNwaGVyZShkb3VibGUgcmFkaXVzLCBpbnQgc2xpY2VzLCBpbnQgc3RhY2tzKSB7CiAgICBxdWFk
T2JqSW5pdChnbHUpOwogICAgZ2x1LmdsdVF1YWRyaWNEcmF3U3R5bGUocXVhZE9iaiwgR0xVLkdM
VV9MSU5FKTsKICAgIGdsdS5nbHVRdWFkcmljTm9ybWFscyhxdWFkT2JqLCBHTFUuR0xVX1NNT09U
SCk7CiAgICAvKiBJZiB3ZSBldmVyIGNoYW5nZWQvdXNlZCB0aGUgdGV4dHVyZSBvciBvcmllbnRh
dGlvbiBzdGF0ZQogICAgICAgb2YgcXVhZE9iaiwgd2UnZCBuZWVkIHRvIGNoYW5nZSBpdCB0byB0
aGUgZGVmYXVsdHMgaGVyZQogICAgICAgd2l0aCBnbHVRdWFkcmljVGV4dHVyZSBhbmQvb3IgZ2x1
UXVhZHJpY09yaWVudGF0aW9uLiAqLwogICAgZ2x1LmdsdVNwaGVyZShxdWFkT2JqLCByYWRpdXMs
IHNsaWNlcywgc3RhY2tzKTsKICB9CgogIHB1YmxpYyB2b2lkIGdsdXRTb2xpZFNwaGVyZShkb3Vi
bGUgcmFkaXVzLCBpbnQgc2xpY2VzLCBpbnQgc3RhY2tzKSB7CiAgICBxdWFkT2JqSW5pdChnbHUp
OwogICAgZ2x1LmdsdVF1YWRyaWNEcmF3U3R5bGUocXVhZE9iaiwgR0xVLkdMVV9GSUxMKTsKICAg
IGdsdS5nbHVRdWFkcmljTm9ybWFscyhxdWFkT2JqLCBHTFUuR0xVX1NNT09USCk7CiAgICAvKiBJ
ZiB3ZSBldmVyIGNoYW5nZWQvdXNlZCB0aGUgdGV4dHVyZSBvciBvcmllbnRhdGlvbiBzdGF0ZQog
ICAgICAgb2YgcXVhZE9iaiwgd2UnZCBuZWVkIHRvIGNoYW5nZSBpdCB0byB0aGUgZGVmYXVsdHMg
aGVyZQogICAgICAgd2l0aCBnbHVRdWFkcmljVGV4dHVyZSBhbmQvb3IgZ2x1UXVhZHJpY09yaWVu
dGF0aW9uLiAqLwogICAgZ2x1LmdsdVNwaGVyZShxdWFkT2JqLCByYWRpdXMsIHNsaWNlcywgc3Rh
Y2tzKTsKICB9CgogIHB1YmxpYyB2b2lkIGdsdXRXaXJlQ29uZShkb3VibGUgYmFzZSwgZG91Ymxl
IGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNsaWNlcywgaW50IHN0YWNr
cykgewogICAgcXVhZE9iakluaXQoZ2x1KTsKICAgIGdsdS5nbHVRdWFkcmljRHJhd1N0eWxlKHF1
YWRPYmosIEdMVS5HTFVfTElORSk7CiAgICBnbHUuZ2x1UXVhZHJpY05vcm1hbHMocXVhZE9iaiwg
R0xVLkdMVV9TTU9PVEgpOwogICAgLyogSWYgd2UgZXZlciBjaGFuZ2VkL3VzZWQgdGhlIHRleHR1
cmUgb3Igb3JpZW50YXRpb24gc3RhdGUKICAgICAgIG9mIHF1YWRPYmosIHdlJ2QgbmVlZCB0byBj
aGFuZ2UgaXQgdG8gdGhlIGRlZmF1bHRzIGhlcmUKICAgICAgIHdpdGggZ2x1UXVhZHJpY1RleHR1
cmUgYW5kL29yIGdsdVF1YWRyaWNPcmllbnRhdGlvbi4gKi8KICAgIGdsdS5nbHVDeWxpbmRlcihx
dWFkT2JqLCBiYXNlLCAwLjAsIGhlaWdodCwgc2xpY2VzLCBzdGFja3MpOwogIH0KCiAgcHVibGlj
IHZvaWQgZ2x1dFNvbGlkQ29uZShkb3VibGUgYmFzZSwgZG91YmxlIGhlaWdodCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBzbGljZXMsIGludCBzdGFja3MpIHsKICAgIHF1YWRPYmpJ
bml0KGdsdSk7CiAgICBnbHUuZ2x1UXVhZHJpY0RyYXdTdHlsZShxdWFkT2JqLCBHTFUuR0xVX0ZJ
TEwpOwogICAgZ2x1LmdsdVF1YWRyaWNOb3JtYWxzKHF1YWRPYmosIEdMVS5HTFVfU01PT1RIKTsK
ICAgIC8qIElmIHdlIGV2ZXIgY2hhbmdlZC91c2VkIHRoZSB0ZXh0dXJlIG9yIG9yaWVudGF0aW9u
IHN0YXRlCiAgICAgICBvZiBxdWFkT2JqLCB3ZSdkIG5lZWQgdG8gY2hhbmdlIGl0IHRvIHRoZSBk
ZWZhdWx0cyBoZXJlCiAgICAgICB3aXRoIGdsdVF1YWRyaWNUZXh0dXJlIGFuZC9vciBnbHVRdWFk
cmljT3JpZW50YXRpb24uICovCiAgICBnbHUuZ2x1Q3lsaW5kZXIocXVhZE9iaiwgYmFzZSwgMC4w
LCBoZWlnaHQsIHNsaWNlcywgc3RhY2tzKTsKICB9CgogIHB1YmxpYyB2b2lkIGdsdXRXaXJlQ3ls
aW5kZXIoZG91YmxlIHJhZGl1cywgZG91YmxlIGhlaWdodCwgaW50IHNsaWNlcywgaW50IHN0YWNr
cykgewogIAlxdWFkT2JqSW5pdChnbHUpOwogIAlnbHUuZ2x1UXVhZHJpY0RyYXdTdHlsZShxdWFk
T2JqLCBHTFUuR0xVX0xJTkUpOwogIAlnbHUuZ2x1UXVhZHJpY05vcm1hbHMocXVhZE9iaiwgR0xV
LkdMVV9TTU9PVEgpOwogIAkvKiBJZiB3ZSBldmVyIGNoYW5nZWQvdXNlZCB0aGUgdGV4dHVyZSBv
ciBvcmllbnRhdGlvbiBzdGF0ZQogICAgICAgICBvZiBxdWFkT2JqLCB3ZSdkIG5lZWQgdG8gY2hh
bmdlIGl0IHRvIHRoZSBkZWZhdWx0cyBoZXJlCiAgICAgICAgIHdpdGggZ2x1UXVhZHJpY1RleHR1
cmUgYW5kL29yIGdsdVF1YWRyaWNPcmllbnRhdGlvbi4gKi8KICAJZ2x1LmdsdUN5bGluZGVyKHF1
YWRPYmosIHJhZGl1cywgcmFkaXVzLCBoZWlnaHQsIHNsaWNlcywgc3RhY2tzKTsKICB9CgogIHB1
YmxpYyB2b2lkIGdsdXRTb2xpZEN5bGluZGVyKGRvdWJsZSByYWRpdXMsIGRvdWJsZSBoZWlnaHQs
IGludCBzbGljZXMsIGludCBzdGFja3MpIHsKICAJR0wgZ2wgPSBnbHUuZ2V0Q3VycmVudEdMKCk7
CiAgCQogIAkvLwlQcmVwYXJlIHRhYmxlIG9mIHBvaW50cyBmb3IgZHJhd2luZyBlbmQgY2Fwcwog
IAlkb3VibGUgW10geCA9IG5ldyBkb3VibGVbc2xpY2VzXTsKICAJZG91YmxlIFtdIHkgPSBuZXcg
ZG91YmxlW3NsaWNlc107CiAgCWRvdWJsZSBhbmdsZURlbHRhID0gTWF0aC5QSSAqIDIgLyBzbGlj
ZXM7CiAgCWRvdWJsZSBhbmdsZSA9IDA7CiAgCWZvciAoaW50IGkgPSAwIDsgaSA8IHNsaWNlcyA7
IGkgKyspIHsKICAJCWFuZ2xlID0gaSAqIGFuZ2xlRGVsdGE7CiAgCQl4W2ldID0gTWF0aC5jb3Mo
YW5nbGUpICogcmFkaXVzOwogIAkJeVtpXSA9IE1hdGguc2luKGFuZ2xlKSAqIHJhZGl1czsKICAJ
fQogIAkKICAJLy8JRHJhdyBib3R0b20gY2FwCiAgCWdsLmdsQmVnaW4oR0wuR0xfVFJJQU5HTEVf
RkFOKTsKICAJZ2wuZ2xOb3JtYWwzZCgwLDAsLTEpOwogIAlnbC5nbFZlcnRleDNkKDAsMCwwKTsK
ICAJZm9yIChpbnQgaSA9IDAgOyBpIDwgc2xpY2VzIDsgaSArKykgewogIAkJZ2wuZ2xWZXJ0ZXgz
ZCh4W2ldLCB5W2ldLCAwKTsKICAJfQogIAlnbC5nbFZlcnRleDNkKHhbMF0sIHlbMF0sIDApOwog
IAlnbC5nbEVuZCgpOwogIAkKICAJLy8JRHJhdyB0b3AgY2FwCiAgCWdsLmdsQmVnaW4oR0wuR0xf
VFJJQU5HTEVfRkFOKTsKICAJZ2wuZ2xOb3JtYWwzZCgwLDAsMSk7CiAgCWdsLmdsVmVydGV4M2Qo
MCwwLGhlaWdodCk7CiAgCWZvciAoaW50IGkgPSAwIDsgaSA8IHNsaWNlcyA7IGkgKyspIHsKICAJ
CWdsLmdsVmVydGV4M2QoeFtpXSwgeVtpXSwgaGVpZ2h0KTsKICAJfQogIAlnbC5nbFZlcnRleDNk
KHhbMF0sIHlbMF0sIGhlaWdodCk7CiAgCWdsLmdsRW5kKCk7CiAgCQogIAkvLwlEcmF3IHdhbGxz
CiAgCXF1YWRPYmpJbml0KGdsdSk7CiAgCWdsdS5nbHVRdWFkcmljRHJhd1N0eWxlKHF1YWRPYmos
IEdMVS5HTFVfRklMTCk7CiAgCWdsdS5nbHVRdWFkcmljTm9ybWFscyhxdWFkT2JqLCBHTFUuR0xV
X1NNT09USCk7CiAgCS8qIElmIHdlIGV2ZXIgY2hhbmdlZC91c2VkIHRoZSB0ZXh0dXJlIG9yIG9y
aWVudGF0aW9uIHN0YXRlCiAgICAgICAgIG9mIHF1YWRPYmosIHdlJ2QgbmVlZCB0byBjaGFuZ2Ug
aXQgdG8gdGhlIGRlZmF1bHRzIGhlcmUKICAgICAgICAgd2l0aCBnbHVRdWFkcmljVGV4dHVyZSBh
bmQvb3IgZ2x1UXVhZHJpY09yaWVudGF0aW9uLiAqLwogIAlnbHUuZ2x1Q3lsaW5kZXIocXVhZE9i
aiwgcmFkaXVzLCByYWRpdXMsIGhlaWdodCwgc2xpY2VzLCBzdGFja3MpOwogIH0KCiAgcHVibGlj
IHZvaWQgZ2x1dFdpcmVDdWJlKGZsb2F0IHNpemUpIHsKICAgIGRyYXdCb3goR0xVLmdldEN1cnJl
bnRHTCgpLCBzaXplLCBHTC5HTF9MSU5FX0xPT1ApOwogIH0KCiAgcHVibGljIHZvaWQgZ2x1dFNv
bGlkQ3ViZShmbG9hdCBzaXplKSB7CiAgICBkcmF3Qm94KEdMVS5nZXRDdXJyZW50R0woKSwgc2l6
ZSwgR0wuR0xfUVVBRFMpOwogIH0KCiAgcHVibGljIHZvaWQgZ2x1dFdpcmVUb3J1cyhkb3VibGUg
aW5uZXJSYWRpdXMsIGRvdWJsZSBvdXRlclJhZGl1cywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBuc2lkZXMsIGludCByaW5ncykgewogICAgR0wgZ2wgPSBHTFUuZ2V0Q3VycmVudEdM
KCk7CiAgICBnbC5nbFB1c2hBdHRyaWIoR0wuR0xfUE9MWUdPTl9CSVQpOwogICAgZ2wuZ2xQb2x5
Z29uTW9kZShHTC5HTF9GUk9OVF9BTkRfQkFDSywgR0wuR0xfTElORSk7CiAgICBkb3VnaG51dChn
bCwgaW5uZXJSYWRpdXMsIG91dGVyUmFkaXVzLCBuc2lkZXMsIHJpbmdzKTsKICAgIGdsLmdsUG9w
QXR0cmliKCk7CiAgfQoKICBwdWJsaWMgdm9pZCBnbHV0U29saWRUb3J1cyhkb3VibGUgaW5uZXJS
YWRpdXMsIGRvdWJsZSBvdXRlclJhZGl1cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgbnNpZGVzLCBpbnQgcmluZ3MpIHsKICAgIGRvdWdobnV0KEdMVS5nZXRDdXJyZW50R0woKSwg
aW5uZXJSYWRpdXMsIG91dGVyUmFkaXVzLCBuc2lkZXMsIHJpbmdzKTsKICB9CgogIHB1YmxpYyB2
b2lkIGdsdXRXaXJlRG9kZWNhaGVkcm9uKCkgewogICAgZG9kZWNhaGVkcm9uKEdMVS5nZXRDdXJy
ZW50R0woKSwgR0wuR0xfTElORV9MT09QKTsKICB9CgogIHB1YmxpYyB2b2lkIGdsdXRTb2xpZERv
ZGVjYWhlZHJvbigpIHsKICAgIGRvZGVjYWhlZHJvbihHTFUuZ2V0Q3VycmVudEdMKCksIEdMLkdM
X1RSSUFOR0xFX0ZBTik7CiAgfQoKICBwdWJsaWMgdm9pZCBnbHV0V2lyZU9jdGFoZWRyb24oKSB7
CiAgICBvY3RhaGVkcm9uKEdMVS5nZXRDdXJyZW50R0woKSwgR0wuR0xfTElORV9MT09QKTsKICB9
CgogIHB1YmxpYyB2b2lkIGdsdXRTb2xpZE9jdGFoZWRyb24oKSB7CiAgICBvY3RhaGVkcm9uKEdM
VS5nZXRDdXJyZW50R0woKSwgR0wuR0xfVFJJQU5HTEVTKTsKICB9CgogIHB1YmxpYyB2b2lkIGds
dXRXaXJlSWNvc2FoZWRyb24oKSB7CiAgICBpY29zYWhlZHJvbihHTFUuZ2V0Q3VycmVudEdMKCks
IEdMLkdMX0xJTkVfTE9PUCk7CiAgfQoKICBwdWJsaWMgdm9pZCBnbHV0U29saWRJY29zYWhlZHJv
bigpIHsKICAgIGljb3NhaGVkcm9uKEdMVS5nZXRDdXJyZW50R0woKSwgR0wuR0xfVFJJQU5HTEVT
KTsKICB9CgogIHB1YmxpYyB2b2lkIGdsdXRXaXJlVGV0cmFoZWRyb24oKSB7CiAgICB0ZXRyYWhl
ZHJvbihHTFUuZ2V0Q3VycmVudEdMKCksIEdMLkdMX0xJTkVfTE9PUCk7CiAgfQoKICBwdWJsaWMg
dm9pZCBnbHV0U29saWRUZXRyYWhlZHJvbigpIHsKICAgIHRldHJhaGVkcm9uKEdMVS5nZXRDdXJy
ZW50R0woKSwgR0wuR0xfVFJJQU5HTEVTKTsKICB9CgovKioKICAgKiBSZW5kZXJzIHRoZSB0ZWFw
b3QgYXMgYSBzb2xpZCBzaGFwZSBvZiB0aGUgc3BlY2lmaWVkIHNpemUuIFRoZSB0ZWFwb3QgaXMK
ICAgKiBjcmVhdGVkIGluIGEgd2F5IHRoYXQgcmVwbGljYXRlcyB0aGUgQyBHTFVUIGltcGxlbWVu
dGF0aW9uLgogICAqIAogICAqIEBwYXJhbSBzY2FsZQogICAqICAgICAgICB0aGUgZmFjdG9yIGJ5
IHdoaWNoIHRvIHNjYWxlIHRoZSB0ZWFwb3QKICAgKi8KICBwdWJsaWMgdm9pZCBnbHV0U29saWRU
ZWFwb3QoZG91YmxlIHNjYWxlKSB7CiAgICBnbHV0U29saWRUZWFwb3Qoc2NhbGUsIHRydWUpOwog
IH0KCiAgLyoqCiAgICogUmVuZGVycyB0aGUgdGVhcG90IGFzIGEgc29saWQgc2hhcGUgb2YgdGhl
IHNwZWNpZmllZCBzaXplLiBUaGUgdGVhcG90IGNhbgogICAqIGVpdGhlciBiZSBjcmVhdGVkIGlu
IGEgd2F5IHRoYXQgaXMgYmFja3dhcmQtY29tcGF0aWJsZSB3aXRoIHRoZSBzdGFuZGFyZAogICAq
IEMgZ2x1dCBsaWJyYXJ5IChpLmUuIGJyb2tlbiksIG9yIGluIGEgbW9yZSBwbGVhc2luZyB3YXkg
KGkuZS4gd2l0aAogICAqIHN1cmZhY2VzIHdob3NlIGZyb250LWZhY2VzIHBvaW50IG91dHdhcmRz
IGFuZCBzdGFuZGluZyBvbiB0aGUgej0wIHBsYW5lLAogICAqIGluc3RlYWQgb2YgdGhlIHk9LTEg
cGxhbmUpLiBCb3RoIHN1cmZhY2Ugbm9ybWFscyBhbmQgdGV4dHVyZSBjb29yZGluYXRlcwogICAq
IGZvciB0aGUgdGVhcG90IGFyZSBnZW5lcmF0ZWQuIFRoZSB0ZWFwb3QgaXMgZ2VuZXJhdGVkIHdp
dGggT3BlbkdMCiAgICogZXZhbHVhdG9ycy4KICAgKiAKICAgKiBAcGFyYW0gc2NhbGUKICAgKiAg
ICAgICAgdGhlIGZhY3RvciBieSB3aGljaCB0byBzY2FsZSB0aGUgdGVhcG90CiAgICogQHBhcmFt
IGNTdHlsZQogICAqICAgICAgICB3aGV0aGVyIHRvIGNyZWF0ZSB0aGUgdGVhcG90IGluIGV4YWN0
bHkgdGhlIHNhbWUgd2F5IGFzIGluIHRoZSBDCiAgICogICAgICAgIGltcGxlbWVudGF0aW9uIG9m
IEdMVVQKICAgKi8KICBwdWJsaWMgdm9pZCBnbHV0U29saWRUZWFwb3QoZG91YmxlIHNjYWxlLCBi
b29sZWFuIGNTdHlsZSkgewogICAgdGVhcG90KEdMVS5nZXRDdXJyZW50R0woKSwgMTQsIHNjYWxl
LCBHTC5HTF9GSUxMLCBjU3R5bGUpOwogIH0KCiAgLyoqCiAgICogUmVuZGVycyB0aGUgdGVhcG90
IGFzIGEgd2lyZWZyYW1lIHNoYXBlIG9mIHRoZSBzcGVjaWZpZWQgc2l6ZS4gVGhlIHRlYXBvdAog
ICAqIGlzIGNyZWF0ZWQgaW4gYSB3YXkgdGhhdCByZXBsaWNhdGVzIHRoZSBDIEdMVVQgaW1wbGVt
ZW50YXRpb24uCiAgICogCiAgICogQHBhcmFtIHNjYWxlCiAgICogICAgICAgIHRoZSBmYWN0b3Ig
Ynkgd2hpY2ggdG8gc2NhbGUgdGhlIHRlYXBvdAogICAqLwogIHB1YmxpYyB2b2lkIGdsdXRXaXJl
VGVhcG90KGRvdWJsZSBzY2FsZSkgewogICAgZ2x1dFdpcmVUZWFwb3Qoc2NhbGUsIHRydWUpOwog
IH0KICAKICAvKioKICAgKiBSZW5kZXJzIHRoZSB0ZWFwb3QgYXMgYSB3aXJlZnJhbWUgc2hhcGUg
b2YgdGhlIHNwZWNpZmllZCBzaXplLiBUaGUgdGVhcG90CiAgICogY2FuIGVpdGhlciBiZSBjcmVh
dGVkIGluIGEgd2F5IHRoYXQgaXMgYmFja3dhcmQtY29tcGF0aWJsZSB3aXRoIHRoZQogICAqIHN0
YW5kYXJkIEMgZ2x1dCBsaWJyYXJ5IChpLmUuIGJyb2tlbiksIG9yIGluIGEgbW9yZSBwbGVhc2lu
ZyB3YXkgKGkuZS4KICAgKiB3aXRoIHN1cmZhY2VzIHdob3NlIGZyb250LWZhY2VzIHBvaW50IG91
dHdhcmRzIGFuZCBzdGFuZGluZyBvbiB0aGUgej0wCiAgICogcGxhbmUsIGluc3RlYWQgb2YgdGhl
IHk9LTEgcGxhbmUpLiBCb3RoIHN1cmZhY2Ugbm9ybWFscyBhbmQgdGV4dHVyZQogICAqIGNvb3Jk
aW5hdGVzIGZvciB0aGUgdGVhcG90IGFyZSBnZW5lcmF0ZWQuIFRoZSB0ZWFwb3QgaXMgZ2VuZXJh
dGVkIHdpdGgKICAgKiBPcGVuR0wgZXZhbHVhdG9ycy4KICAgKiAKICAgKiBAcGFyYW0gc2NhbGUK
ICAgKiAgICAgICAgdGhlIGZhY3RvciBieSB3aGljaCB0byBzY2FsZSB0aGUgdGVhcG90CiAgICog
QHBhcmFtIGNTdHlsZQogICAqICAgICAgICB3aGV0aGVyIHRvIGNyZWF0ZSB0aGUgdGVhcG90IGlu
IGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFzIGluIHRoZSBDCiAgICogICAgICAgIGltcGxlbWVudGF0
aW9uIG9mIEdMVVQKICAgKi8KICBwdWJsaWMgdm9pZCBnbHV0V2lyZVRlYXBvdChkb3VibGUgc2Nh
bGUsIGJvb2xlYW4gY1N0eWxlKSB7CiAgICB0ZWFwb3QoR0xVLmdldEN1cnJlbnRHTCgpLCAxMCwg
c2NhbGUsIEdMLkdMX0xJTkUsIGNTdHlsZSk7CiAgfQoKICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAvLyBG
b250cwogIC8vCgogIHB1YmxpYyB2b2lkIGdsdXRCaXRtYXBDaGFyYWN0ZXIoaW50IGZvbnQsIGNo
YXIgY2hhcmFjdGVyKSB7CiAgICBHTCBnbCA9IEdMVS5nZXRDdXJyZW50R0woKTsKICAgIGludFtd
IHN3YXBieXRlcyAgPSBuZXcgaW50WzFdOwogICAgaW50W10gbHNiZmlyc3QgICA9IG5ldyBpbnRb
MV07CiAgICBpbnRbXSByb3dsZW5ndGggID0gbmV3IGludFsxXTsKICAgIGludFtdIHNraXByb3dz
ICAgPSBuZXcgaW50WzFdOwogICAgaW50W10gc2tpcHBpeGVscyA9IG5ldyBpbnRbMV07CiAgICBp
bnRbXSBhbGlnbm1lbnQgID0gbmV3IGludFsxXTsKICAgIGJlZ2luQml0bWFwKGdsLAogICAgICAg
ICAgICAgICAgc3dhcGJ5dGVzLAogICAgICAgICAgICAgICAgbHNiZmlyc3QsCiAgICAgICAgICAg
ICAgICByb3dsZW5ndGgsCiAgICAgICAgICAgICAgICBza2lwcm93cywKICAgICAgICAgICAgICAg
IHNraXBwaXhlbHMsCiAgICAgICAgICAgICAgICBhbGlnbm1lbnQpOwogICAgYml0bWFwQ2hhcmFj
dGVySW1wbChnbCwgZm9udCwgY2hhcmFjdGVyKTsKICAgIGVuZEJpdG1hcChnbCwKICAgICAgICAg
ICAgICBzd2FwYnl0ZXMsCiAgICAgICAgICAgICAgbHNiZmlyc3QsCiAgICAgICAgICAgICAgcm93
bGVuZ3RoLAogICAgICAgICAgICAgIHNraXByb3dzLAogICAgICAgICAgICAgIHNraXBwaXhlbHMs
CiAgICAgICAgICAgICAgYWxpZ25tZW50KTsKICB9CgogIHB1YmxpYyB2b2lkIGdsdXRCaXRtYXBT
dHJpbmcgICAoaW50IGZvbnQsIFN0cmluZyBzdHJpbmcpIHsKICAgIEdMIGdsID0gR0xVLmdldEN1
cnJlbnRHTCgpOwogICAgaW50W10gc3dhcGJ5dGVzICA9IG5ldyBpbnRbMV07CiAgICBpbnRbXSBs
c2JmaXJzdCAgID0gbmV3IGludFsxXTsKICAgIGludFtdIHJvd2xlbmd0aCAgPSBuZXcgaW50WzFd
OwogICAgaW50W10gc2tpcHJvd3MgICA9IG5ldyBpbnRbMV07CiAgICBpbnRbXSBza2lwcGl4ZWxz
ID0gbmV3IGludFsxXTsKICAgIGludFtdIGFsaWdubWVudCAgPSBuZXcgaW50WzFdOwogICAgYmVn
aW5CaXRtYXAoZ2wsIAogICAgICAgICAgICAgICAgc3dhcGJ5dGVzLAogICAgICAgICAgICAgICAg
bHNiZmlyc3QsCiAgICAgICAgICAgICAgICByb3dsZW5ndGgsCiAgICAgICAgICAgICAgICBza2lw
cm93cywKICAgICAgICAgICAgICAgIHNraXBwaXhlbHMsCiAgICAgICAgICAgICAgICBhbGlnbm1l
bnQpOwogICAgaW50IGxlbiA9IHN0cmluZy5sZW5ndGgoKTsKICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbGVuOyBpKyspIHsKICAgICAgYml0bWFwQ2hhcmFjdGVySW1wbChnbCwgZm9udCwgc3RyaW5n
LmNoYXJBdChpKSk7CiAgICB9CiAgICBlbmRCaXRtYXAoZ2wsIAogICAgICAgICAgICAgIHN3YXBi
eXRlcywKICAgICAgICAgICAgICBsc2JmaXJzdCwKICAgICAgICAgICAgICByb3dsZW5ndGgsCiAg
ICAgICAgICAgICAgc2tpcHJvd3MsCiAgICAgICAgICAgICAgc2tpcHBpeGVscywKICAgICAgICAg
ICAgICBhbGlnbm1lbnQpOwogIH0KCiAgcHVibGljIGludCAgZ2x1dEJpdG1hcFdpZHRoICAgIChp
bnQgZm9udCwgY2hhciBjaGFyYWN0ZXIpIHsKICAgIEJpdG1hcEZvbnRSZWMgZm9udGluZm8gPSBn
ZXRCaXRtYXBGb250KGZvbnQpOwogICAgaW50IGMgPSBjaGFyYWN0ZXIgJiAweEZGRkY7CiAgICBp
ZiAoYyA8IGZvbnRpbmZvLmZpcnN0IHx8IGMgPj0gZm9udGluZm8uZmlyc3QgKyBmb250aW5mby5u
dW1fY2hhcnMpCiAgICAgIHJldHVybiAwOwogICAgQml0bWFwQ2hhclJlYyBjaCA9IGZvbnRpbmZv
LmNoW2MgLSBmb250aW5mby5maXJzdF07CiAgICBpZiAoY2ggIT0gbnVsbCkKICAgICAgcmV0dXJu
IChpbnQpIGNoLmFkdmFuY2U7CiAgICBlbHNlCiAgICAgIHJldHVybiAwOwogIH0KCiAgcHVibGlj
IHZvaWQgZ2x1dFN0cm9rZUNoYXJhY3RlcihpbnQgZm9udCwgY2hhciBjaGFyYWN0ZXIpIHsKICAg
IEdMIGdsID0gR0xVLmdldEN1cnJlbnRHTCgpOwogICAgU3Ryb2tlRm9udFJlYyBmb250aW5mbyA9
IGdldFN0cm9rZUZvbnQoZm9udCk7CiAgICBpbnQgYyA9IGNoYXJhY3RlciAmIDB4RkZGRjsKICAg
IGlmIChjIDwgMCB8fCBjID49IGZvbnRpbmZvLm51bV9jaGFycykKICAgICAgcmV0dXJuOwogICAg
U3Ryb2tlQ2hhclJlYyBjaCA9IGZvbnRpbmZvLmNoW2NdOwogICAgaWYgKGNoICE9IG51bGwpIHsK
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaC5udW1fc3Ryb2tlczsgaSsrKSB7CiAgICAgICAg
U3Ryb2tlUmVjIHN0cm9rZSA9IGNoLnN0cm9rZVtpXTsKICAgICAgICBnbC5nbEJlZ2luKEdMLkdM
X0xJTkVfU1RSSVApOwogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc3Ryb2tlLm51bV9jb29y
ZHM7IGorKykgewogICAgICAgICAgQ29vcmRSZWMgY29vcmQgPSBzdHJva2UuY29vcmRbal07CiAg
ICAgICAgICBnbC5nbFZlcnRleDJmKGNvb3JkLngsIGNvb3JkLnkpOwogICAgICAgIH0KICAgICAg
ICBnbC5nbEVuZCgpOwogICAgICB9CiAgICAgIGdsLmdsVHJhbnNsYXRlZihjaC5yaWdodCwgMC4w
ZiwgMC4wZik7CiAgICB9CiAgfQoKICBwdWJsaWMgdm9pZCBnbHV0U3Ryb2tlU3RyaW5nKGludCBm
b250LCBTdHJpbmcgc3RyaW5nKSB7CiAgICBHTCBnbCA9IEdMVS5nZXRDdXJyZW50R0woKTsKICAg
IFN0cm9rZUZvbnRSZWMgZm9udGluZm8gPSBnZXRTdHJva2VGb250KGZvbnQpOwogICAgaW50IGxl
biA9IHN0cmluZy5sZW5ndGgoKTsKICAgIGZvciAoaW50IHBvcyA9IDA7IHBvcyA8IGxlbjsgcG9z
KyspIHsKICAgICAgaW50IGMgPSBzdHJpbmcuY2hhckF0KHBvcykgJiAweEZGRkY7CiAgICAgIGlm
IChjIDwgMCB8fCBjID49IGZvbnRpbmZvLm51bV9jaGFycykKICAgICAgICBjb250aW51ZTsKICAg
ICAgU3Ryb2tlQ2hhclJlYyBjaCA9IGZvbnRpbmZvLmNoW2NdOwogICAgICBpZiAoY2ggIT0gbnVs
bCkgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2gubnVtX3N0cm9rZXM7IGkrKykgewog
ICAgICAgICAgU3Ryb2tlUmVjIHN0cm9rZSA9IGNoLnN0cm9rZVtpXTsKICAgICAgICAgIGdsLmds
QmVnaW4oR0wuR0xfTElORV9TVFJJUCk7CiAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHN0
cm9rZS5udW1fY29vcmRzOyBqKyspIHsKICAgICAgICAgICAgQ29vcmRSZWMgY29vcmQgPSBzdHJv
a2UuY29vcmRbal07CiAgICAgICAgICAgIGdsLmdsVmVydGV4MmYoY29vcmQueCwgY29vcmQueSk7
CiAgICAgICAgICB9CiAgICAgICAgICBnbC5nbEVuZCgpOwogICAgICAgIH0KICAgICAgICBnbC5n
bFRyYW5zbGF0ZWYoY2gucmlnaHQsIDAuMGYsIDAuMGYpOwogICAgICB9CiAgICB9CiAgfQoKICBw
dWJsaWMgaW50ICBnbHV0U3Ryb2tlV2lkdGggICAgKGludCBmb250LCBjaGFyIGNoYXJhY3Rlcikg
ewogICAgcmV0dXJuIChpbnQpIGdsdXRTdHJva2VXaWR0aGYoZm9udCwgY2hhcmFjdGVyKTsKICB9
CgogIHB1YmxpYyBmbG9hdCBnbHV0U3Ryb2tlV2lkdGhmICAgKGludCBmb250LCBjaGFyIGNoYXJh
Y3RlcikgewogICAgU3Ryb2tlRm9udFJlYyBmb250aW5mbyA9IGdldFN0cm9rZUZvbnQoZm9udCk7
CiAgICBpbnQgYyA9IGNoYXJhY3RlciAmIDB4RkZGRjsKICAgIGlmIChjIDwgMCB8fCBjID49IGZv
bnRpbmZvLm51bV9jaGFycykKICAgICAgcmV0dXJuIDA7CiAgICBTdHJva2VDaGFyUmVjIGNoID0g
Zm9udGluZm8uY2hbY107CiAgICBpZiAoY2ggIT0gbnVsbCkKICAgICAgcmV0dXJuIGNoLnJpZ2h0
OwogICAgZWxzZQogICAgICByZXR1cm4gMDsKICB9CgogIHB1YmxpYyBpbnQgIGdsdXRCaXRtYXBM
ZW5ndGggICAoaW50IGZvbnQsIFN0cmluZyBzdHJpbmcpIHsKICAgIEJpdG1hcEZvbnRSZWMgZm9u
dGluZm8gPSBnZXRCaXRtYXBGb250KGZvbnQpOwogICAgaW50IGxlbmd0aCA9IDA7CiAgICBpbnQg
bGVuID0gc3RyaW5nLmxlbmd0aCgpOwogICAgZm9yIChpbnQgcG9zID0gMDsgcG9zIDwgbGVuOyBw
b3MrKykgewogICAgICBpbnQgYyA9IHN0cmluZy5jaGFyQXQocG9zKSAmIDB4RkZGRjsKICAgICAg
aWYgKGMgPj0gZm9udGluZm8uZmlyc3QgJiYgYyA8IGZvbnRpbmZvLmZpcnN0ICsgZm9udGluZm8u
bnVtX2NoYXJzKSB7CiAgICAgICAgQml0bWFwQ2hhclJlYyBjaCA9IGZvbnRpbmZvLmNoW2MgLSBm
b250aW5mby5maXJzdF07CiAgICAgICAgaWYgKGNoICE9IG51bGwpCiAgICAgICAgICBsZW5ndGgg
Kz0gY2guYWR2YW5jZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGxlbmd0aDsKICB9CgogIHB1
YmxpYyBpbnQgIGdsdXRTdHJva2VMZW5ndGggICAoaW50IGZvbnQsIFN0cmluZyBzdHJpbmcpIHsK
ICAgIHJldHVybiAoaW50KSBnbHV0U3Ryb2tlTGVuZ3RoZihmb250LCBzdHJpbmcpOwogIH0KCiAg
cHVibGljIGZsb2F0IGdsdXRTdHJva2VMZW5ndGhmICAoaW50IGZvbnQsIFN0cmluZyBzdHJpbmcp
IHsKICAgIFN0cm9rZUZvbnRSZWMgZm9udGluZm8gPSBnZXRTdHJva2VGb250KGZvbnQpOwogICAg
ZmxvYXQgbGVuZ3RoID0gMDsKICAgIGludCBsZW4gPSBzdHJpbmcubGVuZ3RoKCk7CiAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIGNoYXIgYyA9IHN0cmluZy5jaGFyQXQo
aSk7CiAgICAgIGlmIChjID49IDAgJiYgYyA8IGZvbnRpbmZvLm51bV9jaGFycykgewogICAgICAg
IFN0cm9rZUNoYXJSZWMgY2ggPSBmb250aW5mby5jaFtjXTsKICAgICAgICBpZiAoY2ggIT0gbnVs
bCkKICAgICAgICAgIGxlbmd0aCArPSBjaC5yaWdodDsKICAgICAgfQogICAgfQogICAgcmV0dXJu
IGxlbmd0aDsKICB9CgogIC8qKgogICBUaGlzIGZ1bmN0aW9uIGRyYXdzIGEgd2lyZWZyYW1lIGRv
ZGVjYWhlZHJvbiB3aG9zZQogICBmYWNldHMgYXJlIHJob21iaWMgYW5kCiAgIHdob3NlIHZlcnRp
Y2VzIGFyZSBhdCB1bml0IHJhZGl1cy4KICAgTm8gZmFjZXQgbGllcyBub3JtYWwgdG8gYW55IGNv
b3JkaW5hdGUgYXhlcy4KICAgVGhlIHBvbHloZWRyb24gaXMgY2VudGVyZWQgYXQgdGhlIG9yaWdp
bi4KICAgKi8KICBwdWJsaWMgdm9pZCBnbHV0V2lyZVJob21iaWNEb2RlY2FoZWRyb24oKSB7CiAg
ICBHTCBnbCA9IGdsdS5nZXRDdXJyZW50R0woKTsKICAgIGZvciggaW50IGkgPSAwOyBpIDwgMTI7
IGkrKyApCiAgICB7CiAgICAgIGdsLmdsQmVnaW4oIEdMLkdMX0xJTkVfTE9PUCApOwogICAgICBn
bC5nbE5vcm1hbDNkdiggcmRvZF9uWyBpIF0sMCApOwogICAgICBnbC5nbFZlcnRleDNkdiggcmRv
ZF9yWyByZG9kX3ZbIGkgXVsgMCBdIF0sMCApOwogICAgICBnbC5nbFZlcnRleDNkdiggcmRvZF9y
WyByZG9kX3ZbIGkgXVsgMSBdIF0sMCApOwogICAgICBnbC5nbFZlcnRleDNkdiggcmRvZF9yWyBy
ZG9kX3ZbIGkgXVsgMiBdIF0sMCApOwogICAgICBnbC5nbFZlcnRleDNkdiggcmRvZF9yWyByZG9k
X3ZbIGkgXVsgMyBdIF0sMCApOwogICAgICBnbC5nbEVuZCggKTsKICAgIH0KICB9CiAgCiAgLyoq
CiAgIFRoaXMgZnVuY3Rpb24gZHJhd3MgYSBzb2xpZC1zaGFkZWQgZG9kZWNhaGVkcm9uCiAgIHdo
b3NlIGZhY2V0cyBhcmUgcmhvbWJpYyBhbmQKICAgd2hvc2UgdmVydGljZXMgYXJlIGF0IHVuaXQg
cmFkaXVzLgogICBObyBmYWNldCBsaWVzIG5vcm1hbCB0byBhbnkgY29vcmRpbmF0ZSBheGVzLgog
ICBUaGUgcG9seWhlZHJvbiBpcyBjZW50ZXJlZCBhdCB0aGUgb3JpZ2luLgogICAqLwogIHB1Ymxp
YyB2b2lkIGdsdXRTb2xpZFJob21iaWNEb2RlY2FoZWRyb24oKSB7CiAgICBHTCBnbCA9IGdsdS5n
ZXRDdXJyZW50R0woKTsKICAgIGdsLmdsQmVnaW4oIEdMLkdMX1FVQURTICk7CiAgICBmb3IoIGlu
dCBpID0gMDsgaSA8IDEyOyBpKysgKQogICAgewogICAgICBnbC5nbE5vcm1hbDNkdiggcmRvZF9u
WyBpIF0sMCApOwogICAgICBnbC5nbFZlcnRleDNkdiggcmRvZF9yWyByZG9kX3ZbIGkgXVsgMCBd
IF0sMCApOwogICAgICBnbC5nbFZlcnRleDNkdiggcmRvZF9yWyByZG9kX3ZbIGkgXVsgMSBdIF0s
MCApOwogICAgICBnbC5nbFZlcnRleDNkdiggcmRvZF9yWyByZG9kX3ZbIGkgXVsgMiBdIF0sMCAp
OwogICAgICBnbC5nbFZlcnRleDNkdiggcmRvZF9yWyByZG9kX3ZbIGkgXVsgMyBdIF0sMCApOwog
ICAgfQogICAgZ2wuZ2xFbmQoICk7CiAgfQogIAogIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIC8vIEludGVy
bmFscyBvbmx5IGJlbG93IHRoaXMgcG9pbnQKICAvLwoKICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAvLyBT
aGFwZSBpbXBsZW1lbnRhdGlvbgogIC8vCgogIHByaXZhdGUgR0xVcXVhZHJpYyBxdWFkT2JqOwog
IHByaXZhdGUgdm9pZCBxdWFkT2JqSW5pdChHTFUgZ2x1KSB7CiAgICBpZiAocXVhZE9iaiA9PSBu
dWxsKSB7CiAgICAgIHF1YWRPYmogPSBnbHUuZ2x1TmV3UXVhZHJpYygpOwogICAgfQogICAgaWYg
KHF1YWRPYmogPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgR0xFeGNlcHRpb24oIk91dCBvZiBt
ZW1vcnkiKTsKICAgIH0KICB9CgogIHByaXZhdGUgc3RhdGljIHZvaWQgZG91Z2hudXQoR0wgZ2ws
IGRvdWJsZSByLCBkb3VibGUgUiwgaW50IG5zaWRlcywgaW50IHJpbmdzKSB7CiAgICBpbnQgaSwg
ajsKICAgIGZsb2F0IHRoZXRhLCBwaGksIHRoZXRhMTsKICAgIGZsb2F0IGNvc1RoZXRhLCBzaW5U
aGV0YTsKICAgIGZsb2F0IGNvc1RoZXRhMSwgc2luVGhldGExOwogICAgZmxvYXQgcmluZ0RlbHRh
LCBzaWRlRGVsdGE7CgogICAgcmluZ0RlbHRhID0gKGZsb2F0KSAoMi4wICogTWF0aC5QSSAvIHJp
bmdzKTsKICAgIHNpZGVEZWx0YSA9IChmbG9hdCkgKDIuMCAqIE1hdGguUEkgLyBuc2lkZXMpOwoK
ICAgIHRoZXRhID0gMC4wZjsKICAgIGNvc1RoZXRhID0gMS4wZjsKICAgIHNpblRoZXRhID0gMC4w
ZjsKICAgIGZvciAoaSA9IHJpbmdzIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgdGhldGExID0g
dGhldGEgKyByaW5nRGVsdGE7CiAgICAgIGNvc1RoZXRhMSA9IChmbG9hdCkgTWF0aC5jb3ModGhl
dGExKTsKICAgICAgc2luVGhldGExID0gKGZsb2F0KSBNYXRoLnNpbih0aGV0YTEpOwogICAgICBn
bC5nbEJlZ2luKEdMLkdMX1FVQURfU1RSSVApOwogICAgICBwaGkgPSAwLjBmOwogICAgICBmb3Ig
KGogPSBuc2lkZXM7IGogPj0gMDsgai0tKSB7CiAgICAgICAgZmxvYXQgY29zUGhpLCBzaW5QaGks
IGRpc3Q7CgogICAgICAgIHBoaSArPSBzaWRlRGVsdGE7CiAgICAgICAgY29zUGhpID0gKGZsb2F0
KSBNYXRoLmNvcyhwaGkpOwogICAgICAgIHNpblBoaSA9IChmbG9hdCkgTWF0aC5zaW4ocGhpKTsK
ICAgICAgICBkaXN0ID0gKGZsb2F0KSAoUiArIHIgKiBjb3NQaGkpOwoKICAgICAgICBnbC5nbE5v
cm1hbDNmKGNvc1RoZXRhMSAqIGNvc1BoaSwgLXNpblRoZXRhMSAqIGNvc1BoaSwgc2luUGhpKTsK
ICAgICAgICBnbC5nbFZlcnRleDNmKGNvc1RoZXRhMSAqIGRpc3QsICAgLXNpblRoZXRhMSAqIGRp
c3QsICAgKGZsb2F0KSByICogc2luUGhpKTsKICAgICAgICBnbC5nbE5vcm1hbDNmKGNvc1RoZXRh
ICAqIGNvc1BoaSwgLXNpblRoZXRhICAqIGNvc1BoaSwgc2luUGhpKTsKICAgICAgICBnbC5nbFZl
cnRleDNmKGNvc1RoZXRhICAqIGRpc3QsICAgLXNpblRoZXRhICAqIGRpc3QsICAgKGZsb2F0KSBy
ICogc2luUGhpKTsKICAgICAgfQogICAgICBnbC5nbEVuZCgpOwogICAgICB0aGV0YSA9IHRoZXRh
MTsKICAgICAgY29zVGhldGEgPSBjb3NUaGV0YTE7CiAgICAgIHNpblRoZXRhID0gc2luVGhldGEx
OwogICAgfQogIH0KCiAgcHJpdmF0ZSBzdGF0aWMgZmxvYXRbXVtdIGJveFZlcnRpY2VzOwogIHBy
aXZhdGUgc3RhdGljIGZpbmFsIGZsb2F0W11bXSBib3hOb3JtYWxzID0gewogICAgey0xLjBmLCAw
LjBmLCAwLjBmfSwKICAgIHswLjBmLCAxLjBmLCAwLjBmfSwKICAgIHsxLjBmLCAwLjBmLCAwLjBm
fSwKICAgIHswLjBmLCAtMS4wZiwgMC4wZn0sCiAgICB7MC4wZiwgMC4wZiwgMS4wZn0sCiAgICB7
MC4wZiwgMC4wZiwgLTEuMGZ9CiAgfTsKICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnRbXVtdIGJv
eEZhY2VzID0gewogICAgezAsIDEsIDIsIDN9LAogICAgezMsIDIsIDYsIDd9LAogICAgezcsIDYs
IDUsIDR9LAogICAgezQsIDUsIDEsIDB9LAogICAgezUsIDYsIDIsIDF9LAogICAgezcsIDQsIDAs
IDN9CiAgfTsKICBwcml2YXRlIHZvaWQgZHJhd0JveChHTCBnbCwgZmxvYXQgc2l6ZSwgaW50IHR5
cGUpIHsKICAgIGlmIChib3hWZXJ0aWNlcyA9PSBudWxsKSB7CiAgICAgIGZsb2F0W11bXSB2ID0g
bmV3IGZsb2F0WzhdW107CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7CiAgICAg
ICAgdltpXSA9IG5ldyBmbG9hdFszXTsKICAgICAgfQogICAgICB2WzBdWzBdID0gdlsxXVswXSA9
IHZbMl1bMF0gPSB2WzNdWzBdID0gLTAuNWY7CiAgICAgIHZbNF1bMF0gPSB2WzVdWzBdID0gdls2
XVswXSA9IHZbN11bMF0gPSAgMC41ZjsKICAgICAgdlswXVsxXSA9IHZbMV1bMV0gPSB2WzRdWzFd
ID0gdls1XVsxXSA9IC0wLjVmOwogICAgICB2WzJdWzFdID0gdlszXVsxXSA9IHZbNl1bMV0gPSB2
WzddWzFdID0gIDAuNWY7CiAgICAgIHZbMF1bMl0gPSB2WzNdWzJdID0gdls0XVsyXSA9IHZbN11b
Ml0gPSAtMC41ZjsKICAgICAgdlsxXVsyXSA9IHZbMl1bMl0gPSB2WzVdWzJdID0gdls2XVsyXSA9
ICAwLjVmOwogICAgICBib3hWZXJ0aWNlcyA9IHY7CiAgICB9CiAgICBmbG9hdFtdW10gdiA9IGJv
eFZlcnRpY2VzOwogICAgZmxvYXRbXVtdIG4gPSBib3hOb3JtYWxzOwogICAgaW50W11bXSBmYWNl
cyA9IGJveEZhY2VzOwogICAgZm9yIChpbnQgaSA9IDU7IGkgPj0gMDsgaS0tKSB7CiAgICAgIGds
LmdsQmVnaW4odHlwZSk7CiAgICAgIGdsLmdsTm9ybWFsM2Z2KG5baV0sIDApOwogICAgICBmbG9h
dFtdIHZ0ID0gdltmYWNlc1tpXVswXV07CiAgICAgIGdsLmdsVmVydGV4M2YodnRbMF0gKiBzaXpl
LCB2dFsxXSAqIHNpemUsIHZ0WzJdICogc2l6ZSk7CiAgICAgIHZ0ID0gdltmYWNlc1tpXVsxXV07
CiAgICAgIGdsLmdsVmVydGV4M2YodnRbMF0gKiBzaXplLCB2dFsxXSAqIHNpemUsIHZ0WzJdICog
c2l6ZSk7CiAgICAgIHZ0ID0gdltmYWNlc1tpXVsyXV07CiAgICAgIGdsLmdsVmVydGV4M2YodnRb
MF0gKiBzaXplLCB2dFsxXSAqIHNpemUsIHZ0WzJdICogc2l6ZSk7CiAgICAgIHZ0ID0gdltmYWNl
c1tpXVszXV07CiAgICAgIGdsLmdsVmVydGV4M2YodnRbMF0gKiBzaXplLCB2dFsxXSAqIHNpemUs
IHZ0WzJdICogc2l6ZSk7CiAgICAgIGdsLmdsRW5kKCk7CiAgICB9CiAgfQoKICBwcml2YXRlIGZs
b2F0W11bXSBkb2RlYzsKCiAgcHJpdmF0ZSB2b2lkIGluaXREb2RlY2FoZWRyb24oKSB7CiAgICBk
b2RlYyA9IG5ldyBmbG9hdFsyMF1bXTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZG9kZWMubGVu
Z3RoOyBpKyspIHsKICAgICAgZG9kZWNbaV0gPSBuZXcgZmxvYXRbM107CiAgICB9CgogICAgZmxv
YXQgYWxwaGEsIGJldGE7CgogICAgYWxwaGEgPSAoZmxvYXQpIE1hdGguc3FydCgyLjBmIC8gKDMu
MGYgKyBNYXRoLnNxcnQoNS4wKSkpOwogICAgYmV0YSA9IDEuMGYgKyAoZmxvYXQpIE1hdGguc3Fy
dCg2LjAgLyAoMy4wICsgTWF0aC5zcXJ0KDUuMCkpIC0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMi4wICsgMi4wICogTWF0aC5zcXJ0KDIuMCAvICgzLjAgKyBNYXRoLnNxcnQo
NS4wKSkpKTsKICAgIGRvZGVjWzBdWzBdID0gLWFscGhhOyBkb2RlY1swXVsxXSA9IDA7IGRvZGVj
WzBdWzJdID0gYmV0YTsKICAgIGRvZGVjWzFdWzBdID0gYWxwaGE7IGRvZGVjWzFdWzFdID0gMDsg
ZG9kZWNbMV1bMl0gPSBiZXRhOwogICAgZG9kZWNbMl1bMF0gPSAtMTsgZG9kZWNbMl1bMV0gPSAt
MTsgZG9kZWNbMl1bMl0gPSAtMTsKICAgIGRvZGVjWzNdWzBdID0gLTE7IGRvZGVjWzNdWzFdID0g
LTE7IGRvZGVjWzNdWzJdID0gMTsKICAgIGRvZGVjWzRdWzBdID0gLTE7IGRvZGVjWzRdWzFdID0g
MTsgZG9kZWNbNF1bMl0gPSAtMTsKICAgIGRvZGVjWzVdWzBdID0gLTE7IGRvZGVjWzVdWzFdID0g
MTsgZG9kZWNbNV1bMl0gPSAxOwogICAgZG9kZWNbNl1bMF0gPSAxOyBkb2RlY1s2XVsxXSA9IC0x
OyBkb2RlY1s2XVsyXSA9IC0xOwogICAgZG9kZWNbN11bMF0gPSAxOyBkb2RlY1s3XVsxXSA9IC0x
OyBkb2RlY1s3XVsyXSA9IDE7CiAgICBkb2RlY1s4XVswXSA9IDE7IGRvZGVjWzhdWzFdID0gMTsg
ZG9kZWNbOF1bMl0gPSAtMTsKICAgIGRvZGVjWzldWzBdID0gMTsgZG9kZWNbOV1bMV0gPSAxOyBk
b2RlY1s5XVsyXSA9IDE7CiAgICBkb2RlY1sxMF1bMF0gPSBiZXRhOyBkb2RlY1sxMF1bMV0gPSBh
bHBoYTsgZG9kZWNbMTBdWzJdID0gMDsKICAgIGRvZGVjWzExXVswXSA9IGJldGE7IGRvZGVjWzEx
XVsxXSA9IC1hbHBoYTsgZG9kZWNbMTFdWzJdID0gMDsKICAgIGRvZGVjWzEyXVswXSA9IC1iZXRh
OyBkb2RlY1sxMl1bMV0gPSBhbHBoYTsgZG9kZWNbMTJdWzJdID0gMDsKICAgIGRvZGVjWzEzXVsw
XSA9IC1iZXRhOyBkb2RlY1sxM11bMV0gPSAtYWxwaGE7IGRvZGVjWzEzXVsyXSA9IDA7CiAgICBk
b2RlY1sxNF1bMF0gPSAtYWxwaGE7IGRvZGVjWzE0XVsxXSA9IDA7IGRvZGVjWzE0XVsyXSA9IC1i
ZXRhOwogICAgZG9kZWNbMTVdWzBdID0gYWxwaGE7IGRvZGVjWzE1XVsxXSA9IDA7IGRvZGVjWzE1
XVsyXSA9IC1iZXRhOwogICAgZG9kZWNbMTZdWzBdID0gMDsgZG9kZWNbMTZdWzFdID0gYmV0YTsg
ZG9kZWNbMTZdWzJdID0gYWxwaGE7CiAgICBkb2RlY1sxN11bMF0gPSAwOyBkb2RlY1sxN11bMV0g
PSBiZXRhOyBkb2RlY1sxN11bMl0gPSAtYWxwaGE7CiAgICBkb2RlY1sxOF1bMF0gPSAwOyBkb2Rl
Y1sxOF1bMV0gPSAtYmV0YTsgZG9kZWNbMThdWzJdID0gYWxwaGE7CiAgICBkb2RlY1sxOV1bMF0g
PSAwOyBkb2RlY1sxOV1bMV0gPSAtYmV0YTsgZG9kZWNbMTldWzJdID0gLWFscGhhOwogIH0KCiAg
cHJpdmF0ZSBzdGF0aWMgdm9pZCBkaWZmMyhmbG9hdFtdIGEsIGZsb2F0W10gYiwgZmxvYXRbXSBj
KSB7CiAgICBjWzBdID0gYVswXSAtIGJbMF07CiAgICBjWzFdID0gYVsxXSAtIGJbMV07CiAgICBj
WzJdID0gYVsyXSAtIGJbMl07CiAgfQoKICBwcml2YXRlIHN0YXRpYyB2b2lkIGNyb3NzcHJvZChm
bG9hdFtdIHYxLCBmbG9hdFtdIHYyLCBmbG9hdFtdIHByb2QpIHsKICAgIGZsb2F0W10gcCA9IG5l
dyBmbG9hdFszXTsgICAgICAgICAvKiBpbiBjYXNlIHByb2QgPT0gdjEgb3IgdjIgKi8KCiAgICBw
WzBdID0gdjFbMV0gKiB2MlsyXSAtIHYyWzFdICogdjFbMl07CiAgICBwWzFdID0gdjFbMl0gKiB2
MlswXSAtIHYyWzJdICogdjFbMF07CiAgICBwWzJdID0gdjFbMF0gKiB2MlsxXSAtIHYyWzBdICog
djFbMV07CiAgICBwcm9kWzBdID0gcFswXTsKICAgIHByb2RbMV0gPSBwWzFdOwogICAgcHJvZFsy
XSA9IHBbMl07CiAgfQoKICBwcml2YXRlIHN0YXRpYyB2b2lkIG5vcm1hbGl6ZShmbG9hdFtdIHYp
IHsKICAgIGZsb2F0IGQ7CgogICAgZCA9IChmbG9hdCkgTWF0aC5zcXJ0KHZbMF0gKiB2WzBdICsg
dlsxXSAqIHZbMV0gKyB2WzJdICogdlsyXSk7CiAgICBpZiAoZCA9PSAwLjApIHsKICAgICAgdlsw
XSA9IGQgPSAxLjBmOwogICAgfQogICAgZCA9IDEgLyBkOwogICAgdlswXSAqPSBkOwogICAgdlsx
XSAqPSBkOwogICAgdlsyXSAqPSBkOwogIH0KCiAgcHJpdmF0ZSB2b2lkIHBlbnRhZ29uKEdMIGds
LCBpbnQgYSwgaW50IGIsIGludCBjLCBpbnQgZCwgaW50IGUsIGludCBzaGFkZVR5cGUpIHsKICAg
IGZsb2F0W10gbjAgPSBuZXcgZmxvYXRbM107CiAgICBmbG9hdFtdIGQxID0gbmV3IGZsb2F0WzNd
OwogICAgZmxvYXRbXSBkMiA9IG5ldyBmbG9hdFszXTsKCiAgICBkaWZmMyhkb2RlY1thXSwgZG9k
ZWNbYl0sIGQxKTsKICAgIGRpZmYzKGRvZGVjW2JdLCBkb2RlY1tjXSwgZDIpOwogICAgY3Jvc3Nw
cm9kKGQxLCBkMiwgbjApOwogICAgbm9ybWFsaXplKG4wKTsKCiAgICBnbC5nbEJlZ2luKHNoYWRl
VHlwZSk7CiAgICBnbC5nbE5vcm1hbDNmdihuMCwgMCk7CiAgICBnbC5nbFZlcnRleDNmdihkb2Rl
Y1thXSwgMCk7CiAgICBnbC5nbFZlcnRleDNmdihkb2RlY1tiXSwgMCk7CiAgICBnbC5nbFZlcnRl
eDNmdihkb2RlY1tjXSwgMCk7CiAgICBnbC5nbFZlcnRleDNmdihkb2RlY1tkXSwgMCk7CiAgICBn
bC5nbFZlcnRleDNmdihkb2RlY1tlXSwgMCk7CiAgICBnbC5nbEVuZCgpOwogIH0KCiAgcHJpdmF0
ZSB2b2lkIGRvZGVjYWhlZHJvbihHTCBnbCwgaW50IHR5cGUpIHsKICAgIGlmIChkb2RlYyA9PSBu
dWxsKSB7CiAgICAgIGluaXREb2RlY2FoZWRyb24oKTsKICAgIH0KICAgIHBlbnRhZ29uKGdsLCAw
LCAxLCA5LCAxNiwgNSwgdHlwZSk7CiAgICBwZW50YWdvbihnbCwgMSwgMCwgMywgMTgsIDcsIHR5
cGUpOwogICAgcGVudGFnb24oZ2wsIDEsIDcsIDExLCAxMCwgOSwgdHlwZSk7CiAgICBwZW50YWdv
bihnbCwgMTEsIDcsIDE4LCAxOSwgNiwgdHlwZSk7CiAgICBwZW50YWdvbihnbCwgOCwgMTcsIDE2
LCA5LCAxMCwgdHlwZSk7CiAgICBwZW50YWdvbihnbCwgMiwgMTQsIDE1LCA2LCAxOSwgdHlwZSk7
CiAgICBwZW50YWdvbihnbCwgMiwgMTMsIDEyLCA0LCAxNCwgdHlwZSk7CiAgICBwZW50YWdvbihn
bCwgMiwgMTksIDE4LCAzLCAxMywgdHlwZSk7CiAgICBwZW50YWdvbihnbCwgMywgMCwgNSwgMTIs
IDEzLCB0eXBlKTsKICAgIHBlbnRhZ29uKGdsLCA2LCAxNSwgOCwgMTAsIDExLCB0eXBlKTsKICAg
IHBlbnRhZ29uKGdsLCA0LCAxNywgOCwgMTUsIDE0LCB0eXBlKTsKICAgIHBlbnRhZ29uKGdsLCA0
LCAxMiwgNSwgMTYsIDE3LCB0eXBlKTsKICB9CgogIHByaXZhdGUgc3RhdGljIHZvaWQgcmVjb3Jk
aXRlbShHTCBnbCwgZmxvYXRbXSBuMSwgZmxvYXRbXSBuMiwgZmxvYXRbXSBuMywgaW50IHNoYWRl
VHlwZSkgewogICAgZmxvYXRbXSBxMCA9IG5ldyBmbG9hdFszXTsKICAgIGZsb2F0W10gcTEgPSBu
ZXcgZmxvYXRbM107CgogICAgZGlmZjMobjEsIG4yLCBxMCk7CiAgICBkaWZmMyhuMiwgbjMsIHEx
KTsKICAgIGNyb3NzcHJvZChxMCwgcTEsIHExKTsKICAgIG5vcm1hbGl6ZShxMSk7CgogICAgZ2wu
Z2xCZWdpbihzaGFkZVR5cGUpOwogICAgZ2wuZ2xOb3JtYWwzZnYocTEsIDApOwogICAgZ2wuZ2xW
ZXJ0ZXgzZnYobjEsIDApOwogICAgZ2wuZ2xWZXJ0ZXgzZnYobjIsIDApOwogICAgZ2wuZ2xWZXJ0
ZXgzZnYobjMsIDApOwogICAgZ2wuZ2xFbmQoKTsKICB9CgogIHByaXZhdGUgc3RhdGljIHZvaWQg
c3ViZGl2aWRlKEdMIGdsLCBmbG9hdFtdIHYwLCBmbG9hdFtdIHYxLCBmbG9hdFtdIHYyLCBpbnQg
c2hhZGVUeXBlKSB7CiAgICBpbnQgZGVwdGg7CiAgICBmbG9hdFtdIHcwID0gbmV3IGZsb2F0WzNd
OwogICAgZmxvYXRbXSB3MSA9IG5ldyBmbG9hdFszXTsKICAgIGZsb2F0W10gdzIgPSBuZXcgZmxv
YXRbM107CiAgICBmbG9hdCBsOwogICAgaW50IGksIGosIGssIG47CgogICAgZGVwdGggPSAxOwog
ICAgZm9yIChpID0gMDsgaSA8IGRlcHRoOyBpKyspIHsKICAgICAgZm9yIChqID0gMDsgaSArIGog
PCBkZXB0aDsgaisrKSB7CiAgICAgICAgayA9IGRlcHRoIC0gaSAtIGo7CiAgICAgICAgZm9yIChu
ID0gMDsgbiA8IDM7IG4rKykgewogICAgICAgICAgdzBbbl0gPSAoaSAqIHYwW25dICsgaiAqIHYx
W25dICsgayAqIHYyW25dKSAvIGRlcHRoOwogICAgICAgICAgdzFbbl0gPSAoKGkgKyAxKSAqIHYw
W25dICsgaiAqIHYxW25dICsgKGsgLSAxKSAqIHYyW25dKQogICAgICAgICAgICAvIGRlcHRoOwog
ICAgICAgICAgdzJbbl0gPSAoaSAqIHYwW25dICsgKGogKyAxKSAqIHYxW25dICsgKGsgLSAxKSAq
IHYyW25dKQogICAgICAgICAgICAvIGRlcHRoOwogICAgICAgIH0KICAgICAgICBsID0gKGZsb2F0
KSBNYXRoLnNxcnQodzBbMF0gKiB3MFswXSArIHcwWzFdICogdzBbMV0gKyB3MFsyXSAqIHcwWzJd
KTsKICAgICAgICB3MFswXSAvPSBsOwogICAgICAgIHcwWzFdIC89IGw7CiAgICAgICAgdzBbMl0g
Lz0gbDsKICAgICAgICBsID0gKGZsb2F0KSBNYXRoLnNxcnQodzFbMF0gKiB3MVswXSArIHcxWzFd
ICogdzFbMV0gKyB3MVsyXSAqIHcxWzJdKTsKICAgICAgICB3MVswXSAvPSBsOwogICAgICAgIHcx
WzFdIC89IGw7CiAgICAgICAgdzFbMl0gLz0gbDsKICAgICAgICBsID0gKGZsb2F0KSBNYXRoLnNx
cnQodzJbMF0gKiB3MlswXSArIHcyWzFdICogdzJbMV0gKyB3MlsyXSAqIHcyWzJdKTsKICAgICAg
ICB3MlswXSAvPSBsOwogICAgICAgIHcyWzFdIC89IGw7CiAgICAgICAgdzJbMl0gLz0gbDsKICAg
ICAgICByZWNvcmRpdGVtKGdsLCB3MSwgdzAsIHcyLCBzaGFkZVR5cGUpOwogICAgICB9CiAgICB9
CiAgfQoKICBwcml2YXRlIHN0YXRpYyB2b2lkIGRyYXd0cmlhbmdsZShHTCBnbCwgaW50IGksIGZs
b2F0W11bXSBkYXRhLCBpbnRbXVtdIG5keCwgaW50IHNoYWRlVHlwZSkgewogICAgZmxvYXRbXSB4
MCA9IGRhdGFbbmR4W2ldWzBdXTsKICAgIGZsb2F0W10geDEgPSBkYXRhW25keFtpXVsxXV07CiAg
ICBmbG9hdFtdIHgyID0gZGF0YVtuZHhbaV1bMl1dOwogICAgc3ViZGl2aWRlKGdsLCB4MCwgeDEs
IHgyLCBzaGFkZVR5cGUpOwogIH0KCiAgLyogb2N0YWhlZHJvbiBkYXRhOiBUaGUgb2N0YWhlZHJv
biBwcm9kdWNlZCBpcyBjZW50ZXJlZCBhdCB0aGUKICAgICBvcmlnaW4gYW5kIGhhcyByYWRpdXMg
MS4wICovCiAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZmxvYXRbXVtdIG9kYXRhID0KICB7CiAgICB7
MS4wZiwgMC4wZiwgMC4wZn0sCiAgICB7LTEuMGYsIDAuMGYsIDAuMGZ9LAogICAgezAuMGYsIDEu
MGYsIDAuMGZ9LAogICAgezAuMGYsIC0xLjBmLCAwLjBmfSwKICAgIHswLjBmLCAwLjBmLCAxLjBm
fSwKICAgIHswLjBmLCAwLjBmLCAtMS4wZn0KICB9OwoKICBwcml2YXRlIHN0YXRpYyBmaW5hbCBp
bnRbXVtdIG9uZGV4ID0KICB7CiAgICB7MCwgNCwgMn0sCiAgICB7MSwgMiwgNH0sCiAgICB7MCwg
MywgNH0sCiAgICB7MSwgNCwgM30sCiAgICB7MCwgMiwgNX0sCiAgICB7MSwgNSwgMn0sCiAgICB7
MCwgNSwgM30sCiAgICB7MSwgMywgNX0KICB9OwoKICBwcml2YXRlIHN0YXRpYyB2b2lkIG9jdGFo
ZWRyb24oR0wgZ2wsIGludCBzaGFkZVR5cGUpIHsKICAgIGludCBpOwoKICAgIGZvciAoaSA9IDc7
IGkgPj0gMDsgaS0tKSB7CiAgICAgIGRyYXd0cmlhbmdsZShnbCwgaSwgb2RhdGEsIG9uZGV4LCBz
aGFkZVR5cGUpOwogICAgfQogIH0KCiAgLyogaWNvc2FoZWRyb24gZGF0YTogVGhlc2UgbnVtYmVy
cyBhcmUgcmlnZ2VkIHRvIG1ha2UgYW4KICAgICBpY29zYWhlZHJvbiBvZiByYWRpdXMgMS4wICov
CgogIHByaXZhdGUgc3RhdGljIGZpbmFsIGZsb2F0IFggPSAuNTI1NzMxMTEyMTE5MTMzNjA2ZjsK
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBmbG9hdCBaID0gLjg1MDY1MDgwODM1MjAzOTkzMmY7Cgog
IHByaXZhdGUgc3RhdGljIGZpbmFsIGZsb2F0W11bXSBpZGF0YSA9CiAgewogICAgey1YLCAwLCBa
fSwKICAgIHtYLCAwLCBafSwKICAgIHstWCwgMCwgLVp9LAogICAge1gsIDAsIC1afSwKICAgIHsw
LCBaLCBYfSwKICAgIHswLCBaLCAtWH0sCiAgICB7MCwgLVosIFh9LAogICAgezAsIC1aLCAtWH0s
CiAgICB7WiwgWCwgMH0sCiAgICB7LVosIFgsIDB9LAogICAge1osIC1YLCAwfSwKICAgIHstWiwg
LVgsIDB9CiAgfTsKCiAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50W11bXSBpbmRleCA9CiAgewog
ICAgezAsIDQsIDF9LAogICAgezAsIDksIDR9LAogICAgezksIDUsIDR9LAogICAgezQsIDUsIDh9
LAogICAgezQsIDgsIDF9LAogICAgezgsIDEwLCAxfSwKICAgIHs4LCAzLCAxMH0sCiAgICB7NSwg
MywgOH0sCiAgICB7NSwgMiwgM30sCiAgICB7MiwgNywgM30sCiAgICB7NywgMTAsIDN9LAogICAg
ezcsIDYsIDEwfSwKICAgIHs3LCAxMSwgNn0sCiAgICB7MTEsIDAsIDZ9LAogICAgezAsIDEsIDZ9
LAogICAgezYsIDEsIDEwfSwKICAgIHs5LCAwLCAxMX0sCiAgICB7OSwgMTEsIDJ9LAogICAgezks
IDIsIDV9LAogICAgezcsIDIsIDExfSwKICB9OwoKICBwcml2YXRlIHN0YXRpYyB2b2lkIGljb3Nh
aGVkcm9uKEdMIGdsLCBpbnQgc2hhZGVUeXBlKSB7CiAgICBpbnQgaTsKCiAgICBmb3IgKGkgPSAx
OTsgaSA+PSAwOyBpLS0pIHsKICAgICAgZHJhd3RyaWFuZ2xlKGdsLCBpLCBpZGF0YSwgaW5kZXgs
IHNoYWRlVHlwZSk7CiAgICB9CiAgfQoKICAvKiByaG9tYmljIGRvZGVjYWhlZHJvbiBkYXRhOiAq
LwogIAogIHByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSByZG9kX3JbXVtdID0KICB7CiAgeyAw
LjAsIDAuMCwgMS4wIH0sCiAgeyAgMC43MDcxMDY3ODExODcsICAwLjAwMDAwMDAwMDAwMCwgIDAu
NSB9LAogIHsgIDAuMDAwMDAwMDAwMDAwLCAgMC43MDcxMDY3ODExODcsICAwLjUgfSwKICB7IC0w
LjcwNzEwNjc4MTE4NywgIDAuMDAwMDAwMDAwMDAwLCAgMC41IH0sCiAgeyAgMC4wMDAwMDAwMDAw
MDAsIC0wLjcwNzEwNjc4MTE4NywgIDAuNSB9LAogIHsgIDAuNzA3MTA2NzgxMTg3LCAgMC43MDcx
MDY3ODExODcsICAwLjAgfSwKICB7IC0wLjcwNzEwNjc4MTE4NywgIDAuNzA3MTA2NzgxMTg3LCAg
MC4wIH0sCiAgeyAtMC43MDcxMDY3ODExODcsIC0wLjcwNzEwNjc4MTE4NywgIDAuMCB9LAogIHsg
IDAuNzA3MTA2NzgxMTg3LCAtMC43MDcxMDY3ODExODcsICAwLjAgfSwKICB7ICAwLjcwNzEwNjc4
MTE4NywgIDAuMDAwMDAwMDAwMDAwLCAtMC41IH0sCiAgeyAgMC4wMDAwMDAwMDAwMDAsICAwLjcw
NzEwNjc4MTE4NywgLTAuNSB9LAogIHsgLTAuNzA3MTA2NzgxMTg3LCAgMC4wMDAwMDAwMDAwMDAs
IC0wLjUgfSwKICB7ICAwLjAwMDAwMDAwMDAwMCwgLTAuNzA3MTA2NzgxMTg3LCAtMC41IH0sCiAg
eyAgMC4wLCAwLjAsIC0xLjAgfQogIH07CiAgCiAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IHJk
b2RfdltdW10gPQogIHsKICB7IDAsICAxLCAgNSwgIDIgfSwKICB7IDAsICAyLCAgNiwgIDMgfSwK
ICB7IDAsICAzLCAgNywgIDQgfSwKICB7IDAsICA0LCAgOCwgIDEgfSwKICB7IDUsIDEwLCAgNiwg
IDIgfSwKICB7IDYsIDExLCAgNywgIDMgfSwKICB7IDcsIDEyLCAgOCwgIDQgfSwKICB7IDgsICA5
LCAgNSwgIDEgfSwKICB7IDUsICA5LCAxMywgMTAgfSwKICB7IDYsIDEwLCAxMywgMTEgfSwKICB7
IDcsIDExLCAxMywgMTIgfSwKICB7IDgsIDEyLCAxMywgIDkgfQogIH07CiAgCiAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgZG91YmxlIHJkb2RfbltdW10gPQogIHsKICB7ICAwLjM1MzU1MzM5MDU5NCwg
IDAuMzUzNTUzMzkwNTk0LCAgMC41IH0sCiAgeyAtMC4zNTM1NTMzOTA1OTQsICAwLjM1MzU1MzM5
MDU5NCwgIDAuNSB9LAogIHsgLTAuMzUzNTUzMzkwNTk0LCAtMC4zNTM1NTMzOTA1OTQsICAwLjUg
fSwKICB7ICAwLjM1MzU1MzM5MDU5NCwgLTAuMzUzNTUzMzkwNTk0LCAgMC41IH0sCiAgeyAgMC4w
MDAwMDAwMDAwMDAsICAxLjAwMDAwMDAwMDAwMCwgIDAuMCB9LAogIHsgLTEuMDAwMDAwMDAwMDAw
LCAgMC4wMDAwMDAwMDAwMDAsICAwLjAgfSwKICB7ICAwLjAwMDAwMDAwMDAwMCwgLTEuMDAwMDAw
MDAwMDAwLCAgMC4wIH0sCiAgeyAgMS4wMDAwMDAwMDAwMDAsICAwLjAwMDAwMDAwMDAwMCwgIDAu
MCB9LAogIHsgIDAuMzUzNTUzMzkwNTk0LCAgMC4zNTM1NTMzOTA1OTQsIC0wLjUgfSwKICB7IC0w
LjM1MzU1MzM5MDU5NCwgIDAuMzUzNTUzMzkwNTk0LCAtMC41IH0sCiAgeyAtMC4zNTM1NTMzOTA1
OTQsIC0wLjM1MzU1MzM5MDU5NCwgLTAuNSB9LAogIHsgIDAuMzUzNTUzMzkwNTk0LCAtMC4zNTM1
NTMzOTA1OTQsIC0wLjUgfQogIH07CiAgCiAgLyogdGV0cmFoZWRyb24gZGF0YTogKi8KCiAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgZmxvYXQgVCA9IDEuNzMyMDUwODA3NTY4ODc3MjlmOwoKICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBmbG9hdFtdW10gdGRhdGEgPQogIHsKICAgIHtULCBULCBUfSwKICAg
IHtULCAtVCwgLVR9LAogICAgey1ULCBULCAtVH0sCiAgICB7LVQsIC1ULCBUfQogIH07CgogIHBy
aXZhdGUgc3RhdGljIGZpbmFsIGludFtdW10gdG5kZXggPQogIHsKICAgIHswLCAxLCAzfSwKICAg
IHsyLCAxLCAwfSwKICAgIHszLCAyLCAwfSwKICAgIHsxLCAyLCAzfQogIH07CgogIHByaXZhdGUg
c3RhdGljIGZpbmFsIHZvaWQgdGV0cmFoZWRyb24oR0wgZ2wsIGludCBzaGFkZVR5cGUpIHsKICAg
IGZvciAoaW50IGkgPSAzOyBpID49IDA7IGktLSkKICAgICAgZHJhd3RyaWFuZ2xlKGdsLCBpLCB0
ZGF0YSwgdG5kZXgsIHNoYWRlVHlwZSk7CiAgfQoKICAvLyBUZWFwb3QgaW1wbGVtZW50YXRpb24g
KGEgbW9kaWZpZWQgcG9ydCBvZiBnbHV0X3RlYXBvdC5jKQogIC8vCiAgLy8gUmltLCBib2R5LCBs
aWQsIGFuZCBib3R0b20gZGF0YSBtdXN0IGJlIHJlZmxlY3RlZCBpbiB4IGFuZAogIC8vIHk7IGhh
bmRsZSBhbmQgc3BvdXQgZGF0YSBhY3Jvc3MgdGhlIHkgYXhpcyBvbmx5LgogIHByaXZhdGUgc3Rh
dGljIGZpbmFsIGludFtdW10gdGVhcG90UGF0Y2hEYXRhID0gewogICAgLyogcmltICovCiAgICB7
MTAyLCAxMDMsIDEwNCwgMTA1LCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQs
IDE1fSwKICAgIC8qIGJvZHkgKi8KICAgIHsxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTks
IDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyN30sCiAgICB7MjQsIDI1LCAyNiwgMjcsIDI5
LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDB9LAogICAgLyogbGlk
ICovCiAgICB7OTYsIDk2LCA5NiwgOTYsIDk3LCA5OCwgOTksIDEwMCwgMTAxLCAxMDEsIDEwMSwg
MTAxLCAwLCAxLCAyLCAzLH0sCiAgICB7MCwgMSwgMiwgMywgMTA2LCAxMDcsIDEwOCwgMTA5LCAx
MTAsIDExMSwgMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExN30sCiAgICAvKiBib3R0b20gKi8K
ICAgIHsxMTgsIDExOCwgMTE4LCAxMTgsIDEyNCwgMTIyLCAxMTksIDEyMSwgMTIzLCAxMjYsIDEy
NSwgMTIwLCA0MCwgMzksIDM4LCAzN30sCiAgICAvKiBoYW5kbGUgKi8KICAgIHs0MSwgNDIsIDQz
LCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1Nn0sCiAg
ICB7NTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgMjgsIDY1
LCA2NiwgNjd9LAogICAgLyogc3BvdXQgKi8KICAgIHs2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3
NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODEsIDgyLCA4M30sCiAgICB7ODAsIDgxLCA4Miwg
ODMsIDg0LCA4NSwgODYsIDg3LCA4OCwgODksIDkwLCA5MSwgOTIsIDkzLCA5NCwgOTV9CiAgfTsK
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBmbG9hdFtdW10gdGVhcG90Q1BEYXRhID0gewogICAgezAu
MmYsIDBmLCAyLjdmfSwKICAgIHswLjJmLCAtMC4xMTJmLCAyLjdmfSwKICAgIHswLjExMmYsIC0w
LjJmLCAyLjdmfSwKICAgIHswZiwgLTAuMmYsIDIuN2Z9LAogICAgezEuMzM3NWYsIDBmLCAyLjUz
MTI1Zn0sCiAgICB7MS4zMzc1ZiwgLTAuNzQ5ZiwgMi41MzEyNWZ9LAogICAgezAuNzQ5ZiwgLTEu
MzM3NWYsIDIuNTMxMjVmfSwKICAgIHswZiwgLTEuMzM3NWYsIDIuNTMxMjVmfSwKICAgIHsxLjQz
NzVmLCAwZiwgMi41MzEyNWZ9LAogICAgezEuNDM3NWYsIC0wLjgwNWYsIDIuNTMxMjVmfSwKICAg
IHswLjgwNWYsIC0xLjQzNzVmLCAyLjUzMTI1Zn0sCiAgICB7MGYsIC0xLjQzNzVmLCAyLjUzMTI1
Zn0sCiAgICB7MS41ZiwgMGYsIDIuNGZ9LAogICAgezEuNWYsIC0wLjg0ZiwgMi40Zn0sCiAgICB7
MC44NGYsIC0xLjVmLCAyLjRmfSwKICAgIHswZiwgLTEuNWYsIDIuNGZ9LAogICAgezEuNzVmLCAw
ZiwgMS44NzVmfSwKICAgIHsxLjc1ZiwgLTAuOThmLCAxLjg3NWZ9LAogICAgezAuOThmLCAtMS43
NWYsIDEuODc1Zn0sCiAgICB7MGYsIC0xLjc1ZiwgMS44NzVmfSwKICAgIHsyZiwgMGYsIDEuMzVm
fSwKICAgIHsyZiwgLTEuMTJmLCAxLjM1Zn0sCiAgICB7MS4xMmYsIC0yZiwgMS4zNWZ9LAogICAg
ezBmLCAtMmYsIDEuMzVmfSwKICAgIHsyZiwgMGYsIDAuOWZ9LAogICAgezJmLCAtMS4xMmYsIDAu
OWZ9LAogICAgezEuMTJmLCAtMmYsIDAuOWZ9LAogICAgezBmLCAtMmYsIDAuOWZ9LAogICAgey0y
ZiwgMGYsIDAuOWZ9LAogICAgezJmLCAwZiwgMC40NWZ9LAogICAgezJmLCAtMS4xMmYsIDAuNDVm
fSwKICAgIHsxLjEyZiwgLTJmLCAwLjQ1Zn0sCiAgICB7MGYsIC0yZiwgMC40NWZ9LAogICAgezEu
NWYsIDBmLCAwLjIyNWZ9LAogICAgezEuNWYsIC0wLjg0ZiwgMC4yMjVmfSwKICAgIHswLjg0Ziwg
LTEuNWYsIDAuMjI1Zn0sCiAgICB7MGYsIC0xLjVmLCAwLjIyNWZ9LAogICAgezEuNWYsIDBmLCAw
LjE1Zn0sCiAgICB7MS41ZiwgLTAuODRmLCAwLjE1Zn0sCiAgICB7MC44NGYsIC0xLjVmLCAwLjE1
Zn0sCiAgICB7MGYsIC0xLjVmLCAwLjE1Zn0sCiAgICB7LTEuNmYsIDBmLCAyLjAyNWZ9LAogICAg
ey0xLjZmLCAtMC4zZiwgMi4wMjVmfSwKICAgIHstMS41ZiwgLTAuM2YsIDIuMjVmfSwKICAgIHst
MS41ZiwgMGYsIDIuMjVmfSwKICAgIHstMi4zZiwgMGYsIDIuMDI1Zn0sCiAgICB7LTIuM2YsIC0w
LjNmLCAyLjAyNWZ9LAogICAgey0yLjVmLCAtMC4zZiwgMi4yNWZ9LAogICAgey0yLjVmLCAwZiwg
Mi4yNWZ9LAogICAgey0yLjdmLCAwZiwgMi4wMjVmfSwKICAgIHstMi43ZiwgLTAuM2YsIDIuMDI1
Zn0sCiAgICB7LTNmLCAtMC4zZiwgMi4yNWZ9LAogICAgey0zZiwgMGYsIDIuMjVmfSwKICAgIHst
Mi43ZiwgMGYsIDEuOGZ9LAogICAgey0yLjdmLCAtMC4zZiwgMS44Zn0sCiAgICB7LTNmLCAtMC4z
ZiwgMS44Zn0sCiAgICB7LTNmLCAwZiwgMS44Zn0sCiAgICB7LTIuN2YsIDBmLCAxLjU3NWZ9LAog
ICAgey0yLjdmLCAtMC4zZiwgMS41NzVmfSwKICAgIHstM2YsIC0wLjNmLCAxLjM1Zn0sCiAgICB7
LTNmLCAwZiwgMS4zNWZ9LAogICAgey0yLjVmLCAwZiwgMS4xMjVmfSwKICAgIHstMi41ZiwgLTAu
M2YsIDEuMTI1Zn0sCiAgICB7LTIuNjVmLCAtMC4zZiwgMC45Mzc1Zn0sCiAgICB7LTIuNjVmLCAw
ZiwgMC45Mzc1Zn0sCiAgICB7LTJmLCAtMC4zZiwgMC45Zn0sCiAgICB7LTEuOWYsIC0wLjNmLCAw
LjZmfSwKICAgIHstMS45ZiwgMGYsIDAuNmZ9LAogICAgezEuN2YsIDBmLCAxLjQyNWZ9LAogICAg
ezEuN2YsIC0wLjY2ZiwgMS40MjVmfSwKICAgIHsxLjdmLCAtMC42NmYsIDAuNmZ9LAogICAgezEu
N2YsIDBmLCAwLjZmfSwKICAgIHsyLjZmLCAwZiwgMS40MjVmfSwKICAgIHsyLjZmLCAtMC42NmYs
IDEuNDI1Zn0sCiAgICB7My4xZiwgLTAuNjZmLCAwLjgyNWZ9LAogICAgezMuMWYsIDBmLCAwLjgy
NWZ9LAogICAgezIuM2YsIDBmLCAyLjFmfSwKICAgIHsyLjNmLCAtMC4yNWYsIDIuMWZ9LAogICAg
ezIuNGYsIC0wLjI1ZiwgMi4wMjVmfSwKICAgIHsyLjRmLCAwZiwgMi4wMjVmfSwKICAgIHsyLjdm
LCAwZiwgMi40Zn0sCiAgICB7Mi43ZiwgLTAuMjVmLCAyLjRmfSwKICAgIHszLjNmLCAtMC4yNWYs
IDIuNGZ9LAogICAgezMuM2YsIDBmLCAyLjRmfSwKICAgIHsyLjhmLCAwZiwgMi40NzVmfSwKICAg
IHsyLjhmLCAtMC4yNWYsIDIuNDc1Zn0sCiAgICB7My41MjVmLCAtMC4yNWYsIDIuNDkzNzVmfSwK
ICAgIHszLjUyNWYsIDBmLCAyLjQ5Mzc1Zn0sCiAgICB7Mi45ZiwgMGYsIDIuNDc1Zn0sCiAgICB7
Mi45ZiwgLTAuMTVmLCAyLjQ3NWZ9LAogICAgezMuNDVmLCAtMC4xNWYsIDIuNTEyNWZ9LAogICAg
ezMuNDVmLCAwZiwgMi41MTI1Zn0sCiAgICB7Mi44ZiwgMGYsIDIuNGZ9LAogICAgezIuOGYsIC0w
LjE1ZiwgMi40Zn0sCiAgICB7My4yZiwgLTAuMTVmLCAyLjRmfSwKICAgIHszLjJmLCAwZiwgMi40
Zn0sCiAgICB7MGYsIDBmLCAzLjE1Zn0sCiAgICB7MC44ZiwgMGYsIDMuMTVmfSwKICAgIHswLjhm
LCAtMC40NWYsIDMuMTVmfSwKICAgIHswLjQ1ZiwgLTAuOGYsIDMuMTVmfSwKICAgIHswZiwgLTAu
OGYsIDMuMTVmfSwKICAgIHswZiwgMGYsIDIuODVmfSwKICAgIHsxLjRmLCAwZiwgMi40Zn0sCiAg
ICB7MS40ZiwgLTAuNzg0ZiwgMi40Zn0sCiAgICB7MC43ODRmLCAtMS40ZiwgMi40Zn0sCiAgICB7
MGYsIC0xLjRmLCAyLjRmfSwKICAgIHswLjRmLCAwZiwgMi41NWZ9LAogICAgezAuNGYsIC0wLjIy
NGYsIDIuNTVmfSwKICAgIHswLjIyNGYsIC0wLjRmLCAyLjU1Zn0sCiAgICB7MGYsIC0wLjRmLCAy
LjU1Zn0sCiAgICB7MS4zZiwgMGYsIDIuNTVmfSwKICAgIHsxLjNmLCAtMC43MjhmLCAyLjU1Zn0s
CiAgICB7MC43MjhmLCAtMS4zZiwgMi41NWZ9LAogICAgezBmLCAtMS4zZiwgMi41NWZ9LAogICAg
ezEuM2YsIDBmLCAyLjRmfSwKICAgIHsxLjNmLCAtMC43MjhmLCAyLjRmfSwKICAgIHswLjcyOGYs
IC0xLjNmLCAyLjRmfSwKICAgIHswZiwgLTEuM2YsIDIuNGZ9LAogICAgezBmLCAwZiwgMGZ9LAog
ICAgezEuNDI1ZiwgLTAuNzk4ZiwgMGZ9LAogICAgezEuNWYsIDBmLCAwLjA3NWZ9LAogICAgezEu
NDI1ZiwgMGYsIDBmfSwKICAgIHswLjc5OGYsIC0xLjQyNWYsIDBmfSwKICAgIHswZiwgLTEuNWYs
IDAuMDc1Zn0sCiAgICB7MGYsIC0xLjQyNWYsIDBmfSwKICAgIHsxLjVmLCAtMC44NGYsIDAuMDc1
Zn0sCiAgICB7MC44NGYsIC0xLjVmLCAwLjA3NWZ9CiAgfTsKICAvLyBTaW5jZSBHTC5nbE1hcDJm
IGV4cGVjdHMgYSBwYWNrZWQgYXJyYXkgb2YgZmxvYXRzLCB3ZSBtdXN0IGNvbnZlcnQKICAvLyBm
cm9tIGEgMy1kaW1lbnNpb25hbCBhcnJheSB0byBhIDEtZGltZW5zaW9uYWwgYXJyYXkKICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBmbG9hdFtdIHRlYXBvdFRleCA9IHsKICAgIDAsIDAsIDEsIDAsIDAs
IDEsIDEsIDEKICB9OwoKICBwcml2YXRlIHN0YXRpYyB2b2lkIHRlYXBvdChHTCBnbCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgZ3JpZCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkb3VibGUgc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBiYWNrQ29tcGF0aWJsZSkKICB7
CiAgICAvLyBBcyBtZW50aW9uZWQgYWJvdmUsIEdMLmdsTWFwMmYgZXhwZWN0cyBhIHBhY2tlZCBh
cnJheSBvZiBmbG9hdHMKICAgIGZsb2F0W10gcCA9IG5ldyBmbG9hdFs0KjQqM107CiAgICBmbG9h
dFtdIHEgPSBuZXcgZmxvYXRbNCo0KjNdOwogICAgZmxvYXRbXSByID0gbmV3IGZsb2F0WzQqNCoz
XTsKICAgIGZsb2F0W10gcyA9IG5ldyBmbG9hdFs0KjQqM107CiAgICBpbnQgaSwgaiwgaywgbDsK
ICAKICAgIGdsLmdsUHVzaEF0dHJpYihHTC5HTF9FTkFCTEVfQklUIHwgR0wuR0xfRVZBTF9CSVQg
fCBHTC5HTF9QT0xZR09OX0JJVCk7CiAgICBnbC5nbEVuYWJsZShHTC5HTF9BVVRPX05PUk1BTCk7
CiAgICBnbC5nbEVuYWJsZShHTC5HTF9OT1JNQUxJWkUpOwogICAgZ2wuZ2xFbmFibGUoR0wuR0xf
TUFQMl9WRVJURVhfMyk7CiAgICBnbC5nbEVuYWJsZShHTC5HTF9NQVAyX1RFWFRVUkVfQ09PUkRf
Mik7CiAgICBnbC5nbFB1c2hNYXRyaXgoKTsKICAgIGlmICghYmFja0NvbXBhdGlibGUpIHsKICAg
ICAgLy8gVGhlIHRpbWUgaGFzIGNvbWUgdG8gaGF2ZSB0aGUgdGVhcG90IG5vIGxvbmdlciBiZSBp
bnNpZGUgb3V0CiAgICAgIGdsLmdsRnJvbnRGYWNlKEdMLkdMX0NXKTsKICAgICAgZ2wuZ2xTY2Fs
ZWQoMC41KnNjYWxlLCAwLjUqc2NhbGUsIDAuNSpzY2FsZSk7CiAgICB9IGVsc2UgewogICAgICAv
LyBXZSB3YW50IHRoZSB0ZWFwb3QgaW4gaXQncyBiYWNrd2FyZCBjb21wYXRpYmxlIHBvc2l0aW9u
IGFuZAogICAgICAvLyBvcmllbnRhdGlvbgogICAgICBnbC5nbFJvdGF0ZWYoMjcwLjBmLCAxLCAw
LCAwKTsKICAgICAgZ2wuZ2xTY2FsZWYoKGZsb2F0KSgwLjUgKiBzY2FsZSksCiAgICAgICAgICAg
ICAgICAgIChmbG9hdCkoMC41ICogc2NhbGUpLAogICAgICAgICAgICAgICAgICAoZmxvYXQpKDAu
NSAqIHNjYWxlKSk7CiAgICAgIGdsLmdsVHJhbnNsYXRlZigwLjBmLCAwLjBmLCAtMS41Zik7CiAg
ICB9CiAgICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewogICAgICBmb3IgKGogPSAwOyBqIDwg
NDsgaisrKSB7CiAgICAgICAgZm9yIChrID0gMDsgayA8IDQ7IGsrKykgewogICAgICAgICAgZm9y
IChsID0gMDsgbCA8IDM7IGwrKykgewogICAgICAgICAgICBwWyhqKjQraykqMytsXSA9IHRlYXBv
dENQRGF0YVt0ZWFwb3RQYXRjaERhdGFbaV1baiAqIDQgKyBrXV1bbF07CiAgICAgICAgICAgIHFb
KGoqNCtrKSozK2xdID0KICAgICAgICAgICAgICB0ZWFwb3RDUERhdGFbdGVhcG90UGF0Y2hEYXRh
W2ldW2ogKiA0ICsgKDMgLSBrKV1dW2xdOwogICAgICAgICAgICBpZiAobCA9PSAxKQogICAgICAg
ICAgICAgIHFbKGoqNCtrKSozK2xdICo9IC0xLjA7CiAgICAgICAgICAgIGlmIChpIDwgNikgewog
ICAgICAgICAgICAgIHJbKGoqNCtrKSozK2xdID0KICAgICAgICAgICAgICAgIHRlYXBvdENQRGF0
YVt0ZWFwb3RQYXRjaERhdGFbaV1baiAqIDQgKyAoMyAtIGspXV1bbF07CiAgICAgICAgICAgICAg
aWYgKGwgPT0gMCkKICAgICAgICAgICAgICAgIHJbKGoqNCtrKSozK2xdICo9IC0xLjA7CiAgICAg
ICAgICAgICAgc1soaio0K2spKjMrbF0gPSB0ZWFwb3RDUERhdGFbdGVhcG90UGF0Y2hEYXRhW2ld
W2ogKiA0ICsga11dW2xdOwogICAgICAgICAgICAgIGlmIChsID09IDApCiAgICAgICAgICAgICAg
ICBzWyhqKjQraykqMytsXSAqPSAtMS4wOwogICAgICAgICAgICAgIGlmIChsID09IDEpCiAgICAg
ICAgICAgICAgICBzWyhqKjQraykqMytsXSAqPSAtMS4wOwogICAgICAgICAgICB9CiAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGdsLmdsTWFwMmYoR0wuR0xfTUFQMl9URVhUVVJF
X0NPT1JEXzIsIDAsIDEsIDIsIDIsIDAsIDEsIDQsIDIsIHRlYXBvdFRleCwgMCk7CiAgICAgIGds
LmdsTWFwMmYoR0wuR0xfTUFQMl9WRVJURVhfMywgMCwgMSwgMywgNCwgMCwgMSwgMTIsIDQsIHAs
IDApOwogICAgICBnbC5nbE1hcEdyaWQyZihncmlkLCAwLjBmLCAxLjBmLCBncmlkLCAwLjBmLCAx
LjBmKTsKICAgICAgZXZhbHVhdGVUZWFwb3RNZXNoKGdsLCBncmlkLCB0eXBlLCBpLCAhYmFja0Nv
bXBhdGlibGUpOwogICAgICBnbC5nbE1hcDJmKEdMLkdMX01BUDJfVkVSVEVYXzMsIDAsIDEsIDMs
IDQsIDAsIDEsIDEyLCA0LCBxLCAwKTsKICAgICAgZXZhbHVhdGVUZWFwb3RNZXNoKGdsLCBncmlk
LCB0eXBlLCBpLCAhYmFja0NvbXBhdGlibGUpOwogICAgICBpZiAoaSA8IDYpIHsKICAgICAgICBn
bC5nbE1hcDJmKEdMLkdMX01BUDJfVkVSVEVYXzMsIDAsIDEsIDMsIDQsIDAsIDEsIDEyLCA0LCBy
LCAwKTsKICAgICAgICBldmFsdWF0ZVRlYXBvdE1lc2goZ2wsIGdyaWQsIHR5cGUsIGksICFiYWNr
Q29tcGF0aWJsZSk7CiAgICAgICAgZ2wuZ2xNYXAyZihHTC5HTF9NQVAyX1ZFUlRFWF8zLCAwLCAx
LCAzLCA0LCAwLCAxLCAxMiwgNCwgcywgMCk7CiAgICAgICAgZXZhbHVhdGVUZWFwb3RNZXNoKGds
LCBncmlkLCB0eXBlLCBpLCAhYmFja0NvbXBhdGlibGUpOwogICAgICB9CiAgICB9CiAgICBnbC5n
bFBvcE1hdHJpeCgpOwogICAgZ2wuZ2xQb3BBdHRyaWIoKTsKICB9CiAgCiAgcHJpdmF0ZSBzdGF0
aWMgdm9pZCBldmFsdWF0ZVRlYXBvdE1lc2goR0wgZ2wsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGdyaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IHBhcnROdW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbGVhbiByZXBhaXJTaW5ndWxhcml0aWVzKQogIHsKICAgIGlmIChyZXBhaXJTaW5ndWxh
cml0aWVzICYmIChwYXJ0TnVtID09IDUgfHwgcGFydE51bSA9PSAzKSkgewogICAgICAvLyBJbnN0
ZWFkIG9mIHVzaW5nIGV2YWx1YXRvcnMgdGhhdCBnaXZlIGJhZCByZXN1bHRzIGF0IHNpbmd1bGFy
aXRpZXMsCiAgICAgIC8vIGV2YWx1YXRlIGJ5IGhhbmQKICAgICAgZ2wuZ2xQb2x5Z29uTW9kZShH
TC5HTF9GUk9OVF9BTkRfQkFDSywgdHlwZSk7CiAgICAgIGZvciAoaW50IG52ID0gMDsgbnYgPCBn
cmlkOyBudisrKSB7CiAgICAgICAgaWYgKG52ID09IDApIHsKICAgICAgICAgIC8vIERyYXcgYSBz
bWFsbCB0cmlhbmdsZS1mYW4gdG8gZmlsbCB0aGUgaG9sZQogICAgICAgICAgZ2wuZ2xEaXNhYmxl
KEdMLkdMX0FVVE9fTk9STUFMKTsKICAgICAgICAgIGdsLmdsTm9ybWFsM2YoMCwgMCwgcGFydE51
bSA9PSAzID8gMSA6IC0xKTsKICAgICAgICAgIGdsLmdsQmVnaW4oR0wuR0xfVFJJQU5HTEVfRkFO
KTsKICAgICAgICAgIHsKICAgICAgICAgICAgZ2wuZ2xFdmFsQ29vcmQyZigwLCAwKTsKICAgICAg
ICAgICAgLy8gTm90ZSB0aGF0IHdlIGRyYXcgaW4gY2xvY2std2lzZSBvcmRlciB0byBtYXRjaCB0
aGUgZXZhbHVhdG9yCiAgICAgICAgICAgIC8vIG1ldGhvZAogICAgICAgICAgICBmb3IgKGludCBu
dSA9IDA7IG51IDw9IGdyaWQ7IG51KyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBnbC5n
bEV2YWxDb29yZDJmKG51IC8gKGZsb2F0KWdyaWQsICgxZiAvIGdyaWQpIC8gKGZsb2F0KWdyaWQp
OwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBnbC5nbEVuZCgpOwogICAgICAg
ICAgZ2wuZ2xFbmFibGUoR0wuR0xfQVVUT19OT1JNQUwpOwogICAgICAgIH0KICAgICAgICAvLyBE
cmF3IHRoZSByZXN0IG9mIHRoZSBwaWVjZSBhcyBhbiBldmFsdWF0ZWQgcXVhZC1zdHJpcAogICAg
ICAgIGdsLmdsQmVnaW4oR0wuR0xfUVVBRF9TVFJJUCk7CiAgICAgICAgewogICAgICAgICAgLy8g
Tm90ZSB0aGF0IHdlIGRyYXcgaW4gY2xvY2std2lzZSBvcmRlciB0byBtYXRjaCB0aGUgZXZhbHVh
dG9yIG1ldGhvZAogICAgICAgICAgZm9yIChpbnQgbnUgPSBncmlkOyBudSA+PSAwOyBudS0tKSB7
CiAgICAgICAgICAgIGdsLmdsRXZhbENvb3JkMmYobnUgLyAoZmxvYXQpZ3JpZCwgKG52ICsgMSkg
LyAoZmxvYXQpZ3JpZCk7CiAgICAgICAgICAgIGdsLmdsRXZhbENvb3JkMmYobnUgLyAoZmxvYXQp
Z3JpZCwgTWF0aC5tYXgobnYsIDFmIC8gZ3JpZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyAoZmxvYXQpZ3JpZCk7CiAgICAgICAgICB9
CiAgICAgICAgfQogICAgICAgIGdsLmdsRW5kKCk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAg
IGdsLmdsRXZhbE1lc2gyKHR5cGUsIDAsIGdyaWQsIDAsIGdyaWQpOwogICAgfQogIH0KCiAgLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAgLy8gRm9udCBpbXBsZW1lbnRhdGlvbgogIC8vCgogIHByaXZhdGUgc3Rh
dGljIHZvaWQgYml0bWFwQ2hhcmFjdGVySW1wbChHTCBnbCwgaW50IGZvbnQsIGNoYXIgY2luKSB7
CiAgICBCaXRtYXBGb250UmVjIGZvbnRpbmZvID0gZ2V0Qml0bWFwRm9udChmb250KTsKICAgIGlu
dCBjID0gY2luICYgMHhGRkZGOwogICAgaWYgKGMgPCBmb250aW5mby5maXJzdCB8fAogICAgICAg
IGMgPj0gZm9udGluZm8uZmlyc3QgKyBmb250aW5mby5udW1fY2hhcnMpCiAgICAgIHJldHVybjsK
ICAgIEJpdG1hcENoYXJSZWMgY2ggPSBmb250aW5mby5jaFtjIC0gZm9udGluZm8uZmlyc3RdOwog
ICAgaWYgKGNoICE9IG51bGwpIHsKICAgICAgZ2wuZ2xCaXRtYXAoY2gud2lkdGgsIGNoLmhlaWdo
dCwgY2gueG9yaWcsIGNoLnlvcmlnLAogICAgICAgICAgICAgICAgICBjaC5hZHZhbmNlLCAwLCBj
aC5iaXRtYXAsIDApOwogICAgfQogIH0KCiAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQml0bWFwRm9u
dFJlY1tdIGJpdG1hcEZvbnRzID0gbmV3IEJpdG1hcEZvbnRSZWNbOV07CiAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgU3Ryb2tlRm9udFJlY1tdIHN0cm9rZUZvbnRzID0gbmV3IFN0cm9rZUZvbnRSZWNb
OV07CgogIHByaXZhdGUgc3RhdGljIEJpdG1hcEZvbnRSZWMgZ2V0Qml0bWFwRm9udChpbnQgZm9u
dCkgewogICAgQml0bWFwRm9udFJlYyByZWMgPSBiaXRtYXBGb250c1tmb250XTsKICAgIGlmIChy
ZWMgPT0gbnVsbCkgewogICAgICBzd2l0Y2ggKGZvbnQpIHsKICAgICAgICBjYXNlIEJJVE1BUF85
X0JZXzE1OgogICAgICAgICAgcmVjID0gR0xVVEJpdG1hcDl4MTUuZ2x1dEJpdG1hcDlCeTE1Owog
ICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBCSVRNQVBfOF9CWV8xMzoKICAgICAgICAgIHJl
YyA9IEdMVVRCaXRtYXA4eDEzLmdsdXRCaXRtYXA4QnkxMzsKICAgICAgICAgIGJyZWFrOwogICAg
ICAgIGNhc2UgQklUTUFQX1RJTUVTX1JPTUFOXzEwOgogICAgICAgICAgcmVjID0gR0xVVEJpdG1h
cFRpbWVzUm9tYW4xMC5nbHV0Qml0bWFwVGltZXNSb21hbjEwOwogICAgICAgICAgYnJlYWs7CiAg
ICAgICAgY2FzZSBCSVRNQVBfVElNRVNfUk9NQU5fMjQ6CiAgICAgICAgICByZWMgPSBHTFVUQml0
bWFwVGltZXNSb21hbjI0LmdsdXRCaXRtYXBUaW1lc1JvbWFuMjQ7CiAgICAgICAgICBicmVhazsK
ICAgICAgICBjYXNlIEJJVE1BUF9IRUxWRVRJQ0FfMTA6CiAgICAgICAgICByZWMgPSBHTFVUQml0
bWFwSGVsdmV0aWNhMTAuZ2x1dEJpdG1hcEhlbHZldGljYTEwOwogICAgICAgICAgYnJlYWs7CiAg
ICAgICAgY2FzZSBCSVRNQVBfSEVMVkVUSUNBXzEyOgogICAgICAgICAgcmVjID0gR0xVVEJpdG1h
cEhlbHZldGljYTEyLmdsdXRCaXRtYXBIZWx2ZXRpY2ExMjsKICAgICAgICAgIGJyZWFrOwogICAg
ICAgIGNhc2UgQklUTUFQX0hFTFZFVElDQV8xODoKICAgICAgICAgIHJlYyA9IEdMVVRCaXRtYXBI
ZWx2ZXRpY2ExOC5nbHV0Qml0bWFwSGVsdmV0aWNhMTg7CiAgICAgICAgICBicmVhazsKICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgdGhyb3cgbmV3IEdMRXhjZXB0aW9uKCJVbmtub3duIGJpdG1h
cCBmb250IG51bWJlciAiICsgZm9udCk7CiAgICAgIH0KICAgICAgYml0bWFwRm9udHNbZm9udF0g
PSByZWM7CiAgICB9CiAgICByZXR1cm4gcmVjOwogIH0KCiAgcHJpdmF0ZSBzdGF0aWMgU3Ryb2tl
Rm9udFJlYyBnZXRTdHJva2VGb250KGludCBmb250KSB7CiAgICBTdHJva2VGb250UmVjIHJlYyA9
IHN0cm9rZUZvbnRzW2ZvbnRdOwogICAgaWYgKHJlYyA9PSBudWxsKSB7CiAgICAgIHN3aXRjaCAo
Zm9udCkgewogICAgICAgIGNhc2UgU1RST0tFX1JPTUFOOgogICAgICAgICAgcmVjID0gR0xVVFN0
cm9rZVJvbWFuLmdsdXRTdHJva2VSb21hbjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2Ug
U1RST0tFX01PTk9fUk9NQU46CiAgICAgICAgICByZWMgPSBHTFVUU3Ryb2tlTW9ub1JvbWFuLmds
dXRTdHJva2VNb25vUm9tYW47CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgdGhyb3cgbmV3IEdMRXhjZXB0aW9uKCJVbmtub3duIHN0cm9rZSBmb250IG51bWJlciAi
ICsgZm9udCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZWM7CiAgfQoKICBwcml2YXRlIHN0
YXRpYyB2b2lkIGJlZ2luQml0bWFwKEdMIGdsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50W10gc3dhcGJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50W10gbHNiZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRbXSBy
b3dsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRbXSBza2lwcm93
cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludFtdIHNraXBwaXhlbHMsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRbXSBhbGlnbm1lbnQpIHsKICAgIGds
LmdsR2V0SW50ZWdlcnYoR0wuR0xfVU5QQUNLX1NXQVBfQllURVMsIHN3YXBieXRlcywgMCk7CiAg
ICBnbC5nbEdldEludGVnZXJ2KEdMLkdMX1VOUEFDS19MU0JfRklSU1QsIGxzYmZpcnN0LCAwKTsK
ICAgIGdsLmdsR2V0SW50ZWdlcnYoR0wuR0xfVU5QQUNLX1JPV19MRU5HVEgsIHJvd2xlbmd0aCwg
MCk7CiAgICBnbC5nbEdldEludGVnZXJ2KEdMLkdMX1VOUEFDS19TS0lQX1JPV1MsIHNraXByb3dz
LCAwKTsKICAgIGdsLmdsR2V0SW50ZWdlcnYoR0wuR0xfVU5QQUNLX1NLSVBfUElYRUxTLCBza2lw
cGl4ZWxzLCAwKTsKICAgIGdsLmdsR2V0SW50ZWdlcnYoR0wuR0xfVU5QQUNLX0FMSUdOTUVOVCwg
YWxpZ25tZW50LCAwKTsKICAgIC8qIExpdHRsZSBlbmRpYW4gbWFjaGluZXMgKERFQyBBbHBoYSBm
b3IgZXhhbXBsZSkgY291bGQKICAgICAgIGJlbmVmaXQgZnJvbSBzZXR0aW5nIEdMX1VOUEFDS19M
U0JfRklSU1QgdG8gR0xfVFJVRQogICAgICAgaW5zdGVhZCBvZiBHTF9GQUxTRSwgYnV0IHRoaXMg
d291bGQgcmVxdWlyZSBjaGFuZ2luZyB0aGUKICAgICAgIGdlbmVyYXRlZCBiaXRtYXBzIHRvby4g
Ki8KICAgIGdsLmdsUGl4ZWxTdG9yZWkoR0wuR0xfVU5QQUNLX1NXQVBfQllURVMsIEdMLkdMX0ZB
TFNFKTsKICAgIGdsLmdsUGl4ZWxTdG9yZWkoR0wuR0xfVU5QQUNLX0xTQl9GSVJTVCwgR0wuR0xf
RkFMU0UpOwogICAgZ2wuZ2xQaXhlbFN0b3JlaShHTC5HTF9VTlBBQ0tfUk9XX0xFTkdUSCwgMCk7
CiAgICBnbC5nbFBpeGVsU3RvcmVpKEdMLkdMX1VOUEFDS19TS0lQX1JPV1MsIDApOwogICAgZ2wu
Z2xQaXhlbFN0b3JlaShHTC5HTF9VTlBBQ0tfU0tJUF9QSVhFTFMsIDApOwogICAgZ2wuZ2xQaXhl
bFN0b3JlaShHTC5HTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKICB9CgogIHByaXZhdGUgc3RhdGlj
IHZvaWQgZW5kQml0bWFwKEdMIGdsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dFtdIHN3YXBieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRbXSBsc2Jm
aXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRbXSByb3dsZW5ndGgsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50W10gc2tpcHJvd3MsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50W10gc2tpcHBpeGVscywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnRbXSBhbGlnbm1lbnQpIHsKICAgIC8qIFJlc3RvcmUgc2F2ZWQgbW9k
ZXMuICovCiAgICBnbC5nbFBpeGVsU3RvcmVpKEdMLkdMX1VOUEFDS19TV0FQX0JZVEVTLCBzd2Fw
Ynl0ZXNbMF0pOwogICAgZ2wuZ2xQaXhlbFN0b3JlaShHTC5HTF9VTlBBQ0tfTFNCX0ZJUlNULCBs
c2JmaXJzdFswXSk7CiAgICBnbC5nbFBpeGVsU3RvcmVpKEdMLkdMX1VOUEFDS19ST1dfTEVOR1RI
LCByb3dsZW5ndGhbMF0pOwogICAgZ2wuZ2xQaXhlbFN0b3JlaShHTC5HTF9VTlBBQ0tfU0tJUF9S
T1dTLCBza2lwcm93c1swXSk7CiAgICBnbC5nbFBpeGVsU3RvcmVpKEdMLkdMX1VOUEFDS19TS0lQ
X1BJWEVMUywgc2tpcHBpeGVsc1swXSk7CiAgICBnbC5nbFBpeGVsU3RvcmVpKEdMLkdMX1VOUEFD
S19BTElHTk1FTlQsIGFsaWdubWVudFswXSk7CiAgfQp9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>