From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6951 invoked by alias); 6 Jul 2011 16:00:19 -0000 Received: (qmail 6935 invoked by uid 22791); 6 Jul 2011 16:00:18 -0000 X-SWARE-Spam-Status: No, hits=-1.2 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,RCVD_IN_DNSWL_NONE,TW_OV,TW_PQ X-Spam-Check-By: sourceware.org Received: from mo-p00-ob.rzone.de (HELO mo-p00-ob.rzone.de) (81.169.146.161) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 06 Jul 2011 16:00:02 +0000 X-RZG-AUTH: :LXoWVUeid/7A29J/hMvvT2k715jHQaJercGObUOFkj18odoYNahU4Q== X-RZG-CLASS-ID: mo00 Received: from [192.168.0.22] (business-188-111-022-002.static.arcor-ip.net [188.111.22.2]) by smtp.strato.de (cohen mo25) (RZmta 26.0) with ESMTPA id 2001f8n66FOqAl ; Wed, 6 Jul 2011 17:56:11 +0200 (MEST) Message-ID: <4E14859A.9010407@gjlay.de> Date: Wed, 06 Jul 2011 16:08:00 -0000 From: Georg-Johann Lay User-Agent: Thunderbird 2.0.0.24 (X11/20100302) MIME-Version: 1.0 To: Denis Chertykov CC: gcc-patches@gcc.gnu.org, Eric Weddington , Anatoly Sokolov Subject: Re: [Path,AVR]: Improve loading of 32-bit constants References: <4E144C61.60600@gjlay.de> In-Reply-To: Content-Type: multipart/mixed; boundary="------------090102030804010709030705" X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2011-07/txt/msg00359.txt.bz2 This is a multi-part message in MIME format. --------------090102030804010709030705 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-length: 1253 Denis Chertykov wrote: > 2011/7/6 Georg-Johann Lay : >> For loading a 32-bit constant in a register, there is room for >> improvement: >> >> * SF can be handled the same way as SI and therefore the patch >> adds a peep2 to produce a *reload_insf analogon to *reload_insi. >> >> * If the destination register overlaps NO_LD_REGS, values already >> loaded into some other byte can be reused by a simple MOV. >> This is helpful then moving values like, e.g. -2, -100 etc. because >> all high bytes are 0xff. >> >> * 0.0f can be directly moved to memory. >> >> * The mov insns contain "!d" constraint. I see no reason to make "d" >> expensive and discourage use of d-regs. A "*d" to hide is better >> because it does it neither puts additional pressure on "d" nor >> discourages "d". >> > > I would like to have a real code examples. > > Denis. Hi Denis. Attached you find a small C file and the asm that is generated by new and old versions (-Os -mmcu=atmega88 -S -dp). I took away some regs as potential clobbers (or -fno-peephole2) to show the effect of high register pressure. Bit even if a clobber was available you can see that the new version is smarter in reusing values, e.g. note the loading of -1L to r22-r25. Johann --------------090102030804010709030705 Content-Type: text/x-csrc; name="oint.c" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="oint.c" Content-length: 333 register int _x asm ("26"); register int _y asm ("28"); register int _z asm ("30"); void ibar (long, long, long, long); void fbar (long, long, float, float); void foo1 (long x) { ibar (-1, x, -2, 0xff008000); } void foo2 (long x) { ibar (x, x, 65537L, 0xffff0408); } void foo3 (long x) { fbar (x, x, -3.0f, 2.0f); } --------------090102030804010709030705 Content-Type: text/plain; name="oint-old.s" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="oint-old.s" Content-length: 5804 CS5maWxlCSJvaW50LmMiCl9fU1JFR19fID0gMHgzZgpfX1NQX0hfXyA9IDB4 M2UKX19TUF9MX18gPSAweDNkCl9fdG1wX3JlZ19fID0gMApfX3plcm9fcmVn X18gPSAxCgkuZ2xvYmFsIF9fZG9fY29weV9kYXRhCgkuZ2xvYmFsIF9fZG9f Y2xlYXJfYnNzCgkudGV4dAouZ2xvYmFsCWZvbzEKCS50eXBlCWZvbzEsIEBm dW5jdGlvbgpmb28xOgoJcHVzaCByMTAJIDsgIDE2CSpwdXNocWkvMQlbbGVu Z3RoID0gMV0KCXB1c2ggcjExCSA7ICAxNwkqcHVzaHFpLzEJW2xlbmd0aCA9 IDFdCglwdXNoIHIxMgkgOyAgMTgJKnB1c2hxaS8xCVtsZW5ndGggPSAxXQoJ cHVzaCByMTMJIDsgIDE5CSpwdXNocWkvMQlbbGVuZ3RoID0gMV0KCXB1c2gg cjE0CSA7ICAyMAkqcHVzaHFpLzEJW2xlbmd0aCA9IDFdCglwdXNoIHIxNQkg OyAgMjEJKnB1c2hxaS8xCVtsZW5ndGggPSAxXQoJcHVzaCByMTYJIDsgIDIy CSpwdXNocWkvMQlbbGVuZ3RoID0gMV0KCXB1c2ggcjE3CSA7ICAyMwkqcHVz aHFpLzEJW2xlbmd0aCA9IDFdCi8qIHByb2xvZ3VlOiBmdW5jdGlvbiAqLwov KiBmcmFtZSBzaXplID0gMCAqLwovKiBzdGFjayBzaXplID0gOCAqLwouTF9f c3RhY2tfdXNhZ2UgPSA4Cgltb3Z3IHIxOCxyMjIJIDsgIDIJKm1vdnNpLzEJ W2xlbmd0aCA9IDJdCgltb3Z3IHIyMCxyMjQKCWxkaSByMjIsbG84KC0xKQkg OyAgNwkqbW92c2kvNQlbbGVuZ3RoID0gNF0KCWxkaSByMjMsaGk4KC0xKQoJ bGRpIHIyNCxobG84KC0xKQoJbGRpIHIyNSxoaGk4KC0xKQoJbW92IF9fdG1w X3JlZ19fLHIzMQkgOyAgOQkqbW92c2kvNglbbGVuZ3RoID0gMTBdCglsZGkg cjMxLGxvOCgtMikKCW1vdiByMTQscjMxCglsZGkgcjMxLGhpOCgtMikKCW1v diByMTUscjMxCglsZGkgcjMxLGhsbzgoLTIpCgltb3YgcjE2LHIzMQoJbGRp IHIzMSxoaGk4KC0yKQoJbW92IHIxNyxyMzEKCW1vdiByMzEsX190bXBfcmVn X18KCW1vdiBfX3RtcF9yZWdfXyxyMzEJIDsgIDEwCSptb3ZzaS82CVtsZW5n dGggPSAxMF0KCWxkaSByMzEsbG84KC0xNjc0NDQ0OCkKCW1vdiByMTAscjMx CglsZGkgcjMxLGhpOCgtMTY3NDQ0NDgpCgltb3YgcjExLHIzMQoJbGRpIHIz MSxobG84KC0xNjc0NDQ0OCkKCW1vdiByMTIscjMxCglsZGkgcjMxLGhoaTgo LTE2NzQ0NDQ4KQoJbW92IHIxMyxyMzEKCW1vdiByMzEsX190bXBfcmVnX18K CXJjYWxsIGliYXIJIDsgIDExCWNhbGxfaW5zbi8zCVtsZW5ndGggPSAxXQov KiBlcGlsb2d1ZSBzdGFydCAqLwoJcG9wIHIxNwkgOyAgMjYJcG9wcWkJW2xl bmd0aCA9IDFdCglwb3AgcjE2CSA7ICAyNwlwb3BxaQlbbGVuZ3RoID0gMV0K CXBvcCByMTUJIDsgIDI4CXBvcHFpCVtsZW5ndGggPSAxXQoJcG9wIHIxNAkg OyAgMjkJcG9wcWkJW2xlbmd0aCA9IDFdCglwb3AgcjEzCSA7ICAzMAlwb3Bx aQlbbGVuZ3RoID0gMV0KCXBvcCByMTIJIDsgIDMxCXBvcHFpCVtsZW5ndGgg PSAxXQoJcG9wIHIxMQkgOyAgMzIJcG9wcWkJW2xlbmd0aCA9IDFdCglwb3Ag cjEwCSA7ICAzMwlwb3BxaQlbbGVuZ3RoID0gMV0KCXJldAkgOyAgMzQJcmV0 dXJuX2Zyb21fZXBpbG9ndWUJW2xlbmd0aCA9IDFdCgkuc2l6ZQlmb28xLCAu LWZvbzEKLmdsb2JhbAlmb28yCgkudHlwZQlmb28yLCBAZnVuY3Rpb24KZm9v MjoKCXB1c2ggcjEwCSA7ICAxNgkqcHVzaHFpLzEJW2xlbmd0aCA9IDFdCglw dXNoIHIxMQkgOyAgMTcJKnB1c2hxaS8xCVtsZW5ndGggPSAxXQoJcHVzaCBy MTIJIDsgIDE4CSpwdXNocWkvMQlbbGVuZ3RoID0gMV0KCXB1c2ggcjEzCSA7 ICAxOQkqcHVzaHFpLzEJW2xlbmd0aCA9IDFdCglwdXNoIHIxNAkgOyAgMjAJ KnB1c2hxaS8xCVtsZW5ndGggPSAxXQoJcHVzaCByMTUJIDsgIDIxCSpwdXNo cWkvMQlbbGVuZ3RoID0gMV0KCXB1c2ggcjE2CSA7ICAyMgkqcHVzaHFpLzEJ W2xlbmd0aCA9IDFdCglwdXNoIHIxNwkgOyAgMjMJKnB1c2hxaS8xCVtsZW5n dGggPSAxXQovKiBwcm9sb2d1ZTogZnVuY3Rpb24gKi8KLyogZnJhbWUgc2l6 ZSA9IDAgKi8KLyogc3RhY2sgc2l6ZSA9IDggKi8KLkxfX3N0YWNrX3VzYWdl ID0gOAoJbW92dyByMTgscjIyCSA7ICAyCSptb3ZzaS8xCVtsZW5ndGggPSAy XQoJbW92dyByMjAscjI0Cgltb3YgX190bXBfcmVnX18scjMxCSA7ICA5CSpt b3ZzaS82CVtsZW5ndGggPSAxMF0KCWxkaSByMzEsbG84KDY1NTM3KQoJbW92 IHIxNCxyMzEKCWxkaSByMzEsaGk4KDY1NTM3KQoJbW92IHIxNSxyMzEKCWxk aSByMzEsaGxvOCg2NTUzNykKCW1vdiByMTYscjMxCglsZGkgcjMxLGhoaTgo NjU1MzcpCgltb3YgcjE3LHIzMQoJbW92IHIzMSxfX3RtcF9yZWdfXwoJbW92 IF9fdG1wX3JlZ19fLHIzMQkgOyAgMTAJKm1vdnNpLzYJW2xlbmd0aCA9IDEw XQoJbGRpIHIzMSxsbzgoLTY0NTA0KQoJbW92IHIxMCxyMzEKCWxkaSByMzEs aGk4KC02NDUwNCkKCW1vdiByMTEscjMxCglsZGkgcjMxLGhsbzgoLTY0NTA0 KQoJbW92IHIxMixyMzEKCWxkaSByMzEsaGhpOCgtNjQ1MDQpCgltb3YgcjEz LHIzMQoJbW92IHIzMSxfX3RtcF9yZWdfXwoJcmNhbGwgaWJhcgkgOyAgMTEJ Y2FsbF9pbnNuLzMJW2xlbmd0aCA9IDFdCi8qIGVwaWxvZ3VlIHN0YXJ0ICov Cglwb3AgcjE3CSA7ICAyNglwb3BxaQlbbGVuZ3RoID0gMV0KCXBvcCByMTYJ IDsgIDI3CXBvcHFpCVtsZW5ndGggPSAxXQoJcG9wIHIxNQkgOyAgMjgJcG9w cWkJW2xlbmd0aCA9IDFdCglwb3AgcjE0CSA7ICAyOQlwb3BxaQlbbGVuZ3Ro ID0gMV0KCXBvcCByMTMJIDsgIDMwCXBvcHFpCVtsZW5ndGggPSAxXQoJcG9w IHIxMgkgOyAgMzEJcG9wcWkJW2xlbmd0aCA9IDFdCglwb3AgcjExCSA7ICAz Mglwb3BxaQlbbGVuZ3RoID0gMV0KCXBvcCByMTAJIDsgIDMzCXBvcHFpCVts ZW5ndGggPSAxXQoJcmV0CSA7ICAzNAlyZXR1cm5fZnJvbV9lcGlsb2d1ZQlb bGVuZ3RoID0gMV0KCS5zaXplCWZvbzIsIC4tZm9vMgouZ2xvYmFsCWZvbzMK CS50eXBlCWZvbzMsIEBmdW5jdGlvbgpmb28zOgoJcHVzaCByMTAJIDsgIDE2 CSpwdXNocWkvMQlbbGVuZ3RoID0gMV0KCXB1c2ggcjExCSA7ICAxNwkqcHVz aHFpLzEJW2xlbmd0aCA9IDFdCglwdXNoIHIxMgkgOyAgMTgJKnB1c2hxaS8x CVtsZW5ndGggPSAxXQoJcHVzaCByMTMJIDsgIDE5CSpwdXNocWkvMQlbbGVu Z3RoID0gMV0KCXB1c2ggcjE0CSA7ICAyMAkqcHVzaHFpLzEJW2xlbmd0aCA9 IDFdCglwdXNoIHIxNQkgOyAgMjEJKnB1c2hxaS8xCVtsZW5ndGggPSAxXQoJ cHVzaCByMTYJIDsgIDIyCSpwdXNocWkvMQlbbGVuZ3RoID0gMV0KCXB1c2gg cjE3CSA7ICAyMwkqcHVzaHFpLzEJW2xlbmd0aCA9IDFdCi8qIHByb2xvZ3Vl OiBmdW5jdGlvbiAqLwovKiBmcmFtZSBzaXplID0gMCAqLwovKiBzdGFjayBz aXplID0gOCAqLwouTF9fc3RhY2tfdXNhZ2UgPSA4Cgltb3Z3IHIxOCxyMjIJ IDsgIDIJKm1vdnNpLzEJW2xlbmd0aCA9IDJdCgltb3Z3IHIyMCxyMjQKCW1v diBfX3RtcF9yZWdfXyxyMzEJIDsgIDkJKm1vdnNmLzYJW2xlbmd0aCA9IDEw XQoJbGRpIHIzMSxsbzgoMHhjMDQwMDAwMCkKCW1vdiByMTQscjMxCglsZGkg cjMxLGhpOCgweGMwNDAwMDAwKQoJbW92IHIxNSxyMzEKCWxkaSByMzEsaGxv OCgweGMwNDAwMDAwKQoJbW92IHIxNixyMzEKCWxkaSByMzEsaGhpOCgweGMw NDAwMDAwKQoJbW92IHIxNyxyMzEKCW1vdiByMzEsX190bXBfcmVnX18KCW1v diBfX3RtcF9yZWdfXyxyMzEJIDsgIDEwCSptb3ZzZi82CVtsZW5ndGggPSAx MF0KCWxkaSByMzEsbG84KDB4NDAwMDAwMDApCgltb3YgcjEwLHIzMQoJbGRp IHIzMSxoaTgoMHg0MDAwMDAwMCkKCW1vdiByMTEscjMxCglsZGkgcjMxLGhs bzgoMHg0MDAwMDAwMCkKCW1vdiByMTIscjMxCglsZGkgcjMxLGhoaTgoMHg0 MDAwMDAwMCkKCW1vdiByMTMscjMxCgltb3YgcjMxLF9fdG1wX3JlZ19fCgly Y2FsbCBmYmFyCSA7ICAxMQljYWxsX2luc24vMwlbbGVuZ3RoID0gMV0KLyog ZXBpbG9ndWUgc3RhcnQgKi8KCXBvcCByMTcJIDsgIDI2CXBvcHFpCVtsZW5n dGggPSAxXQoJcG9wIHIxNgkgOyAgMjcJcG9wcWkJW2xlbmd0aCA9IDFdCglw b3AgcjE1CSA7ICAyOAlwb3BxaQlbbGVuZ3RoID0gMV0KCXBvcCByMTQJIDsg IDI5CXBvcHFpCVtsZW5ndGggPSAxXQoJcG9wIHIxMwkgOyAgMzAJcG9wcWkJ W2xlbmd0aCA9IDFdCglwb3AgcjEyCSA7ICAzMQlwb3BxaQlbbGVuZ3RoID0g MV0KCXBvcCByMTEJIDsgIDMyCXBvcHFpCVtsZW5ndGggPSAxXQoJcG9wIHIx MAkgOyAgMzMJcG9wcWkJW2xlbmd0aCA9IDFdCglyZXQJIDsgIDM0CXJldHVy bl9mcm9tX2VwaWxvZ3VlCVtsZW5ndGggPSAxXQoJLnNpemUJZm9vMywgLi1m b28zCg== --------------090102030804010709030705 Content-Type: text/plain; name="oint-new.s" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="oint-new.s" Content-length: 4787 CS5maWxlCSJvaW50LmMiCl9fU1JFR19fID0gMHgzZgpfX1NQX0hfXyA9IDB4 M2UKX19TUF9MX18gPSAweDNkCl9fdG1wX3JlZ19fID0gMApfX3plcm9fcmVn X18gPSAxCgkudGV4dAouZ2xvYmFsCWZvbzEKCS50eXBlCWZvbzEsIEBmdW5j dGlvbgpmb28xOgoJcHVzaCByMTAJIDsgIDE2CSpwdXNocWkvMQlbbGVuZ3Ro ID0gMV0KCXB1c2ggcjExCSA7ICAxNwkqcHVzaHFpLzEJW2xlbmd0aCA9IDFd CglwdXNoIHIxMgkgOyAgMTgJKnB1c2hxaS8xCVtsZW5ndGggPSAxXQoJcHVz aCByMTMJIDsgIDE5CSpwdXNocWkvMQlbbGVuZ3RoID0gMV0KCXB1c2ggcjE0 CSA7ICAyMAkqcHVzaHFpLzEJW2xlbmd0aCA9IDFdCglwdXNoIHIxNQkgOyAg MjEJKnB1c2hxaS8xCVtsZW5ndGggPSAxXQoJcHVzaCByMTYJIDsgIDIyCSpw dXNocWkvMQlbbGVuZ3RoID0gMV0KCXB1c2ggcjE3CSA7ICAyMwkqcHVzaHFp LzEJW2xlbmd0aCA9IDFdCi8qIHByb2xvZ3VlOiBmdW5jdGlvbiAqLwovKiBm cmFtZSBzaXplID0gMCAqLwovKiBzdGFjayBzaXplID0gOCAqLwouTF9fc3Rh Y2tfdXNhZ2UgPSA4Cgltb3Z3IHIxOCxyMjIJIDsgIDIJKm1vdnNpLzEJW2xl bmd0aCA9IDJdCgltb3Z3IHIyMCxyMjQKCWxkaSByMjIsbG84KC0xKQkgOyAg NwkqbW92c2kvNQlbbGVuZ3RoID0gM10KCWxkaSByMjMsbG84KC0xKQoJbW92 dyByMjQscjIyCglsZGkgcjE3LGxvOCgtMikJIDsgIDkJKm1vdnNpLzYJW2xl bmd0aCA9IDZdCgltb3YgcjE0LHIxNwoJY2xyIHIxNQoJZGVjIHIxNQoJbGRp IHIxNixsbzgoLTEpCglsZGkgcjE3LGxvOCgtMSkKCWNsciByMTAJIDsgIDEw CSptb3ZzaS82CVtsZW5ndGggPSA3XQoJc2V0CgljbHIgcjExCglibGQgcjEx LDcKCWNsciByMTIKCWNsciByMTMKCWRlYyByMTMKCXJjYWxsIGliYXIJIDsg IDExCSpjYWxsX2luc24vMglbbGVuZ3RoID0gMV0KLyogZXBpbG9ndWUgc3Rh cnQgKi8KCXBvcCByMTcJIDsgIDI2CXBvcHFpCVtsZW5ndGggPSAxXQoJcG9w IHIxNgkgOyAgMjcJcG9wcWkJW2xlbmd0aCA9IDFdCglwb3AgcjE1CSA7ICAy OAlwb3BxaQlbbGVuZ3RoID0gMV0KCXBvcCByMTQJIDsgIDI5CXBvcHFpCVts ZW5ndGggPSAxXQoJcG9wIHIxMwkgOyAgMzAJcG9wcWkJW2xlbmd0aCA9IDFd Cglwb3AgcjEyCSA7ICAzMQlwb3BxaQlbbGVuZ3RoID0gMV0KCXBvcCByMTEJ IDsgIDMyCXBvcHFpCVtsZW5ndGggPSAxXQoJcG9wIHIxMAkgOyAgMzMJcG9w cWkJW2xlbmd0aCA9IDFdCglyZXQJIDsgIDM0CXJldHVybl9mcm9tX2VwaWxv Z3VlCVtsZW5ndGggPSAxXQoJLnNpemUJZm9vMSwgLi1mb28xCi5nbG9iYWwJ Zm9vMgoJLnR5cGUJZm9vMiwgQGZ1bmN0aW9uCmZvbzI6CglwdXNoIHIxMAkg OyAgMTYJKnB1c2hxaS8xCVtsZW5ndGggPSAxXQoJcHVzaCByMTEJIDsgIDE3 CSpwdXNocWkvMQlbbGVuZ3RoID0gMV0KCXB1c2ggcjEyCSA7ICAxOAkqcHVz aHFpLzEJW2xlbmd0aCA9IDFdCglwdXNoIHIxMwkgOyAgMTkJKnB1c2hxaS8x CVtsZW5ndGggPSAxXQoJcHVzaCByMTQJIDsgIDIwCSpwdXNocWkvMQlbbGVu Z3RoID0gMV0KCXB1c2ggcjE1CSA7ICAyMQkqcHVzaHFpLzEJW2xlbmd0aCA9 IDFdCglwdXNoIHIxNgkgOyAgMjIJKnB1c2hxaS8xCVtsZW5ndGggPSAxXQoJ cHVzaCByMTcJIDsgIDIzCSpwdXNocWkvMQlbbGVuZ3RoID0gMV0KLyogcHJv bG9ndWU6IGZ1bmN0aW9uICovCi8qIGZyYW1lIHNpemUgPSAwICovCi8qIHN0 YWNrIHNpemUgPSA4ICovCi5MX19zdGFja191c2FnZSA9IDgKCW1vdncgcjE4 LHIyMgkgOyAgMgkqbW92c2kvMQlbbGVuZ3RoID0gMl0KCW1vdncgcjIwLHIy NAoJbGRpIHIxNyxsbzgoMSkJIDsgIDkJKm1vdnNpLzYJW2xlbmd0aCA9IDRd Cgltb3YgcjE0LHIxNwoJY2xyIHIxNQoJbW92dyByMTYscjE0CglzZXQJIDsg IDEwCSptb3ZzaS82CVtsZW5ndGggPSA4XQoJY2xyIHIxMAoJYmxkIHIxMCwz CgljbHIgcjExCglibGQgcjExLDIKCWNsciByMTIKCWRlYyByMTIKCW1vdiBy MTMscjEyCglyY2FsbCBpYmFyCSA7ICAxMQkqY2FsbF9pbnNuLzIJW2xlbmd0 aCA9IDFdCi8qIGVwaWxvZ3VlIHN0YXJ0ICovCglwb3AgcjE3CSA7ICAyNglw b3BxaQlbbGVuZ3RoID0gMV0KCXBvcCByMTYJIDsgIDI3CXBvcHFpCVtsZW5n dGggPSAxXQoJcG9wIHIxNQkgOyAgMjgJcG9wcWkJW2xlbmd0aCA9IDFdCglw b3AgcjE0CSA7ICAyOQlwb3BxaQlbbGVuZ3RoID0gMV0KCXBvcCByMTMJIDsg IDMwCXBvcHFpCVtsZW5ndGggPSAxXQoJcG9wIHIxMgkgOyAgMzEJcG9wcWkJ W2xlbmd0aCA9IDFdCglwb3AgcjExCSA7ICAzMglwb3BxaQlbbGVuZ3RoID0g MV0KCXBvcCByMTAJIDsgIDMzCXBvcHFpCVtsZW5ndGggPSAxXQoJcmV0CSA7 ICAzNAlyZXR1cm5fZnJvbV9lcGlsb2d1ZQlbbGVuZ3RoID0gMV0KCS5zaXpl CWZvbzIsIC4tZm9vMgouZ2xvYmFsCWZvbzMKCS50eXBlCWZvbzMsIEBmdW5j dGlvbgpmb28zOgoJcHVzaCByMTAJIDsgIDE2CSpwdXNocWkvMQlbbGVuZ3Ro ID0gMV0KCXB1c2ggcjExCSA7ICAxNwkqcHVzaHFpLzEJW2xlbmd0aCA9IDFd CglwdXNoIHIxMgkgOyAgMTgJKnB1c2hxaS8xCVtsZW5ndGggPSAxXQoJcHVz aCByMTMJIDsgIDE5CSpwdXNocWkvMQlbbGVuZ3RoID0gMV0KCXB1c2ggcjE0 CSA7ICAyMAkqcHVzaHFpLzEJW2xlbmd0aCA9IDFdCglwdXNoIHIxNQkgOyAg MjEJKnB1c2hxaS8xCVtsZW5ndGggPSAxXQoJcHVzaCByMTYJIDsgIDIyCSpw dXNocWkvMQlbbGVuZ3RoID0gMV0KCXB1c2ggcjE3CSA7ICAyMwkqcHVzaHFp LzEJW2xlbmd0aCA9IDFdCi8qIHByb2xvZ3VlOiBmdW5jdGlvbiAqLwovKiBm cmFtZSBzaXplID0gMCAqLwovKiBzdGFjayBzaXplID0gOCAqLwouTF9fc3Rh Y2tfdXNhZ2UgPSA4Cgltb3Z3IHIxOCxyMjIJIDsgIDIJKm1vdnNpLzEJW2xl bmd0aCA9IDJdCgltb3Z3IHIyMCxyMjQKCWNsciByMTQJIDsgIDkJKm1vdnNm LzYJW2xlbmd0aCA9IDRdCgljbHIgcjE1CglsZGkgcjE2LGxvOCg2NCkKCWxk aSByMTcsbG84KC02NCkKCWNsciByMTAJIDsgIDEwCSptb3ZzZi82CVtsZW5n dGggPSA2XQoJY2xyIHIxMQoJY2xyIHIxMgoJc2V0CgljbHIgcjEzCglibGQg cjEzLDYKCXJjYWxsIGZiYXIJIDsgIDExCSpjYWxsX2luc24vMglbbGVuZ3Ro ID0gMV0KLyogZXBpbG9ndWUgc3RhcnQgKi8KCXBvcCByMTcJIDsgIDI2CXBv cHFpCVtsZW5ndGggPSAxXQoJcG9wIHIxNgkgOyAgMjcJcG9wcWkJW2xlbmd0 aCA9IDFdCglwb3AgcjE1CSA7ICAyOAlwb3BxaQlbbGVuZ3RoID0gMV0KCXBv cCByMTQJIDsgIDI5CXBvcHFpCVtsZW5ndGggPSAxXQoJcG9wIHIxMwkgOyAg MzAJcG9wcWkJW2xlbmd0aCA9IDFdCglwb3AgcjEyCSA7ICAzMQlwb3BxaQlb bGVuZ3RoID0gMV0KCXBvcCByMTEJIDsgIDMyCXBvcHFpCVtsZW5ndGggPSAx XQoJcG9wIHIxMAkgOyAgMzMJcG9wcWkJW2xlbmd0aCA9IDFdCglyZXQJIDsg IDM0CXJldHVybl9mcm9tX2VwaWxvZ3VlCVtsZW5ndGggPSAxXQoJLnNpemUJ Zm9vMywgLi1mb28zCgkuaWRlbnQJIkdDQzogKEdOVSkgNC43LjAgMjAxMTA3 MDQgKGV4cGVyaW1lbnRhbCkiCg== --------------090102030804010709030705--